Hongyu Zhou commited on
Commit
7e2cbca
·
1 Parent(s): a8889be

update medomni.py

Browse files
medomni/models/medomni.py CHANGED
@@ -1,3 +1,510 @@
1
- # Pyarmor 9.0.3 (trial), 000000, non-profits, 2024-10-28T10:25:17.968530
2
- from .pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xb1T\x00\x00\x12\t\x04\x00\xbe\xe1\xbaxzwT\x97ix\xf0Y[)K\xa3\x00\x00\x00\x00\x00\x00\x00\x00\xe1\xc5\x9d\xf1z\xce\x98\xd6{\xc40V(i\xee\x0c\x97dK\xc3/Ct\xa8\x98\x19\x84\x08\x1fR\\\xdf\xef\xdb{\xf2 \xdd\xb6\rz_\x0ed\xed\xe7\x06\x16`\x12up\xdci\x87\xa7\x00\x04\n\xec\xde\x00\x1d\x7f\xe7\xc4v76\xfa\x11\xc2\xd3"\xad}\x06\xf6VF\x8aPf_y\xc8\xd8\xfa\x13\xef\x1bf4\x91\x1c\xc5|\xce\x08R\xf2\xaa\xbf\\\x16>F\xbf\xd5\x85\xf1:\xa6\xbb\x079\t\xe9\x7f\r!\xcc\xbf=\xbf0\x03E\xab\xc6R%\xdc\xf1\xf1\x83\xa7\xacIT\xe6\x1d\xa68\xdc\xf8\xb9\xd3B\x07\xeb\xc6\x0e\xb1\xc3yuR\x83E/4\xd4%\xca\'\xd9Lk\xffW\xd1\xf0Y\xae\x80<P\xda:P\x85-?\xbc\x99\xdb\xe4&\x8f\xeay\xfa\x0e+\xdf%r`\x98m\x12\x06y[om\xdc"\xf351\xa9e\x8aw\xed(8@M-\xe1\x0b\xa1D\x16\x9e\xe7\xd6\x9e\xf7(\xa4\x99\xb9\x1d\xc0\xdc\xeb\x80\x11m2\xd5X"\x8a\xb2v+\x9f\'\xd2\xff[*61\'\xde\x99\xd4\xcf\xed\x084\xed\xfb\xe0\x86\xae\x8b\x82+I>)\x97\xc0\xe4\xd1\x18$_\x1c\xb1\x0e\xa6\xac\x14\xda\x1b1\xe2\x13\xe4\x7f\x99\xfav\'\xfd8X1\xf7\x81[@\xf2Z7x\x91\xf2}\xc1\x8d\x06j\x8e\x88\xa5\xfd2\xa7\x9a\x93\x028\xbc\xc63_\x91#\xa1\x1c3\xbe9\xc3\xde Y\xed\x938\x82\xb2\x0eZ\x1e@h\xb4O\xa0W`\xbb\xb6\xf4\x89\xf1\xff\xc8\xbbd\x16\xf9,\x1d{\xda\x80\\m\xad\xccN\x94Y\xa2\xf1\xfc\xca5\xae\x0f\x12\xff\x9dxdk\xb3\xcc\xa5\x81\xe9F\xf4\xd8\nD\x82o\x16O\xb9M\x92\xc5\x0f|2>R\xd1\xcf^\xc9\xd4\x96cGcc\xd3\x816\x11\xd8\xbb\xc9\xd1Um\xb0\xe8-\r\n\xd7\xb8\x08\xbb\xed%\x16\xda\xff3:\x96\xc1\xcbb\xf8$\xb5V\xe9vh\xaf\xbf\x8c#+\x7f 3\xad\xd5\xce\xe2S\x8ec\xd6Ct\xa5x\xd6\xdeq\x00\x019\x9e\x85K\x93\xaf\xeb\xc0\xf8\x8dX\xa8\x1ad\xee\'X\xe4Q\x92\xd9]S\x128\x00\xd7\xf8[D_\x00\x02\xb9\xc3\x99\x10\x84\x8e\xc6\xf5\x9c\x127^\xe5:n"\xd1\x1fs*o\x94l\xff\xdc\xdaMq\xd6\xac\xb8q\xa9+\x17\xbf@\x01\xea\x04)\xcd%\x81vT\x9bc)\x8e\xdb@ \x95j\xde\x0eXy\x1aH\x8f\xfc\xa6\xf49\xc1m{\x9d\xc6^\x94\xfb\xa6\xd9\xae\xdbv\x08\x07\xbc\x90\xed\x98\xf9\xa6\x9e\x1b\xa9E\x84h\xe8\xd1\x95\xd0S\x9a%\xb6k\xdbmW\x1f\x8a6\xb9\xa2k\xaa\xfc\xc0~\xaa\xf0\x8by\x96\x85\x1fF\x82\xf0h\xfc\x00\x80\xb3K\x81T\x7fNB\x14\x8ej\xe0\xf4s\xaa\r\x8e\x1b\xee\x17\x13\xfd2\x8cx #\x15>\xed\xdf\x8c\xed\x12\xea_\xc1\xe3\xf4\xb4_\x84u\x01\xfd\xc1\xbeOm7Z\xa1g\x1f\xde\x86\xd9\xd6\xd1\x8c\x89\xae\xe2\xff\'\xa9\x11\x0f\xe0\xd6\xd9\xe0\xa3@{\xdb\xd8k(\xe9\x85\x9d\xb2\xd3ki\xe7\xe5\x1c\xa81S\x99\xc9\x90\xf6o&M\xc5\xbd\xfd\xe0\xdeM.?+7\xd1"w\xedR\x01\xde\x9fg}zZ\xf0$\xb4\xcf\x92\x18\x97l\x8c\x18\xb8r\x1c\xdd\xbdt%\x91:\x1a\xcbFwJ\xf8\xe3<\x95\xd1\xaen\x02k\xc2>\x94\x7f\x1d\xb8s\x8eH\xf7\x9a&\x19\x0eq\xe1\x96\xcd\xed*WN\x9b\x93w\xa2\xecu\xd0:\xed\xa4\x90\x14%\xb3\x86cX\xf0\n\xa9v#54\xf5\xe6\x83\r\xd0\xd6\x9dd@\x9e\xedLH\x19\xeaJ4w\xb0z\xdb\xcb \x8d\xb2\xca\xcc\xc0\xa8$c\x05\xdf\xbe\x8b\x1aYo\x10\x86?\x01\x06\x08^)\xe6\x03\xfd\xb1\x93\xec\xd6\xb2\xb0.\x11\x9d\xd7H\x00d{\x16\xea\xa4T\x93\xcb\x8eR\xa9\x1b\xb8\x81\xce\xdaG\xae\x08\xcd\xcdFZ\x99\xc5\x7fVI%\xca\xbb\x97m\xce\xfeJ[\xdfL\x80\xcdi\x88\xa0\xb2\x8a\x06Wj\x0b\xf1O\xbd\xac\xe5\xec"\x10\x0f\xafl\xc3\xfa\x82\x85\x83\xc7-\xe9We\xa9T\xf1\xbf\xd7_w*\xd4?0[Vv`6C\x14\xc5\xa5\x93\x05+T\xe9\xa2\xbb\xfcf6Y\x8d\xff\xec\x1az\'\x98\xeb\xb4pl\xc8\tn.\x04\xe5[\x8e\xfb\xaaLXM\x93Jw\xa3 \x9f\xaf\xa0\x07z\xab\x8c\xa4+R\xeeb,\xab\xaa\x8e\xe7\xd2l\xdd\xaa\xc3\xa0\xf3\xb2\x17\x01A\x02}\x809\x01\x1b\x86\xbe\xc0<\xe8\x88\xca\x1a\x95\xbfL\x9c,nO\xa8#\xa0El@J\xec\x19+\xbf)\xb4\x89\xbb\xa7\x91\xd7\xd3$P\xcc{\x97K]\x0e0\xe9\xd1\x9b+\x93\xc3\xc5\xa8\xa3~\xbdSIIv`\xb6\x0e\x14d\xeb\xfc\xbf\xb7z\x97\xa2\x1f\x08\xb6\xc9\x8fT\x9c\xeb\xc5\xda\x88\xab\x959\x0c\x1c\x9ey=\xcf\xb7\xc7m"w\xd9j\xd4TW\xcfv\xa0\xbf\x9d\xdb\xda\xf4f\xe1\x18*\xa6\x8c\x17Ov\x19\xda\x01\xaf\xec\x0c\xf8a\xeab\x8c\x01c_\x9d\xb5\x02\xb2\x0f\x91\xa5\xe6R\x1eQ\xe71eY\xc3z\xe2\x02\x10B(\x166n\xcd\xdb\xd8\x852s\xe5\x1e\x1e\xb1\x9bm\xf2y\x8bw\\\x04\xc1\x08<\xef\xe06k\x8e\xb7\xafJ\xa27<4\xa9\x03\xf3\xaeS,\x93.\x0c;\x07\xd2@\x9f\xa2\xa98\x87]\x1b\xbc\xc4\xf4\xe3\x8e\xff2\x8a98\xcaa\x1a\x00]\xa6\xd4\xc4\xc1\t\x07A\xa4\xa1\xae\n\xb9\xeal\x8c-\xa4e\xcc\xf1\xf1\xb9\x03\xf6g\xfc^Q\xd3O\xd4\xf7\xb9\xac9\xdc\xaatkv\xb9j\xae\x99\xce<r\xb1/\xcc\xe7\x85I.S*\x10YbYK\xa4\x97\xb21G\x13i\xf8\xba\xe7w\xea\xaf<Xw\x02\nTHQ\x87C\xe6I\xf6\xcb\xef\x8b\xf7\xd4`\xfa\xda\x90M\x0e\x97\x15U_?N\x8d\xe6/\xb2\xbe\xa0y:x\xf1\xdb1\xd8JR\xf9\x8dz[\xb8r\xc6\xa1\x82r\xddS\xfdZ\xf5\x04\xe8\x00|\x1c\xce\x10\xec\r6\xfc\xf5\xc7+\x06\xbc\xdb\xd20\x10t\x96C\x12\x87S\xe6\xfc\xda?\xa6\x0f\xb9\x02}\x7f\xfb\x90\x05\x10\x9d\xda\x7f{\xb0n\xff\xa0\xf5\xf2\xbf#\x98\xbc\xb5\xcd ~\xd5\x93f\x9f\x15\n_.\x03\x88\xee\x05\xadN2[\xa8\xd4\x88*\x937\xe8\xd7\x83i(\xb0T\xba\x15\x95\x1a\xbd\x95\'fj\x9d\x02\xc7Z\xe9\xd1t\x8d\x8d\xed(\x9cMX\xd0\x8e\x10\x8d@\xf1\xb9-\x84\xa3\x9b\x80!\xa5h\xfc\xf7m\xbc\xf9\'=\xf8k\x96<\x1d\xbd9\xc9;\xad\xf4.1j\xa2s\xf2\xe0\xb0\xcd|\x84\x04P\xa0~U-\xa1\xa5\xe7c(7q :!\x89\x18\xa8Q\x15kD\xc9X\x14d\x88\x1c\xd9\x8a\xda\xeb^\xea\xbc\x81\x06S\\\xefZ\xcf\xcfa\xaa\xb6\xc2\xdd\x8c\x80\xd7\xeess\n\x15\xd7\x1ax\xef\x0ek\x95\x02jM\xb3\x7f\x0eC#8\xc5\x96-L\xb9\xf2\xe5z\xa7\xa75\x01\xfd\xc8\xaaU\x81\xcb\x1bPp\xaf\xaf\x17\xd1\xf6\x8aq\xd2eY\xa0dI\xf8qC\xcd\x19\xb5\r\xd6.\xc8\xdf4\x0e\xf1\t.\x0fG<\x93yFw<\xdc\xf4?\x98\x97\xf3\x83{\x0e\xda\xa2\xbd\x84\xab\xc64\x83=IX\xdd+\x91"t\xf7!\xd7\xfa\xcdR\xff\xcb\xed\x08\x19\x87fT\xce\x0f\xe4\n\x8a,\x16u\xda n\x07\x8e\xc9^\xac\x82\xab\xfc\x85"z\xdb\x83\xf6\x9c\x91\x9f\xaf\xe5\xee\x94\'5[\x7f)\xb9x\x12\xa8\xfd\x83\xd0\x1b\x9cL\xbe\x19/\x92\rUD\x88\xcfh\x19\x88vF\xf95\x95\r\xab\xe0}]\xfa\\\x06\x98:g\xa1\x1c\xf43\xfeh^M\xf8$9nY\x88\xc3)\xe1\xe5o\xba!\xba*\xb1\xb91Y\rCO\x83\x13\xa3\x8c\xbe\xa7O\xf3\x04\'L\xc1\xdb\xdd\xa0\xdeK\xe2nh\xee\xbb\xd6\xfb\x0b\x11H\xb2g\xc5\x07*\xb1\xcdxK\x93\xde\xf8\xf0\xe0\xde\xe4\x14\xab\xd6t\n\xa8\xb1\x9c\xf79K\x1a\xe1\x81\x890y\x7f\x1b\x80\xf1\x8dtyz\x88\xe1\x1a\x1b;\x04aVX\x16<c\x8c\x07\xda`\xf62\xb8\x13\x82\x05\x8f\xae\xd2\xf3\x82\x8bh\x95\xc3l6\xe06\x1dO\xd9(\xb0\xb2Hz*\xb7A\t\xc6qCw\x8f\x01$\xc7\x16Nk\xc5\x1b\xdc\x14\xfa\x97\x0bz\x1c\xb7A:%S^\x08d\xc0\xa7\xdf\xd0F\xcf\xa0r\xce"\x86!%\xcf\xd0\xaacAX\xa4K\xb4\x1b\xb3\x9e\xd2\xed\x10\xd1OWX\xc4\x9e\x8bv\x82\\\x98\xe9x\xc96+f\xb8\xedX\xef_\x14\xf1W\xbb\xa9\xd9\x8e\x00z\x8f\x01O\xb4\xfe\x1dd>y@\xe3\x00\xe02]>\x96\xdan\x179\xa9\x14)\x87g\x15\xe1\xf7\x97\xec15\xa2\xf0\x02\xd1s\xf3\x19\xac\x9f\xae\xfb\x18g1\xab21\x1dJ\x94\x92\xfd!\xae\xbfKB\x8fe\x1a\x14z \xd6\xa5\x18\xc6 \xd6\xa3\xaf\xd36\x04F\x82\xe4\xbe\nx\xb8Wd\xd3\xc1\xd3L\xc2\x06\x01@N\xff?\x81Ja$}8Mu}\x82F\x98\x87\x90\xb3L\x9e\x95x2\xfa\xc0D\xaf\x0c\x8b\x12\xa1^\x9e\x02`sC\x01\xb8+\xa7\x8d\xe6\x87n>c\xe4\xe6$-g\x92\xb3\xc3\xca\xfe\xc7\xbe\xdaU|\xfegJM@\xa9e\xa4\xfb\x05\x82\x0eA\xef\x91\xcc\xe6\x8bH\xa6\x89+?\xff\x94/\xab\x94\xf0\xad\x8c+\xd0S\xf8\rz\xc6\xea\xec\xd5:/\r\x94&\xfc\xb0\xdf\xa5\x7f>55\xc5T\np\x9e\xa5\x1f>L\xf4\x19UR9\x17`\x94h$\x8a9\x80\xfa\x84\x89r#^\x96n\xb6T\xc5\xa1\x85\xc2\xdb\xb2r\x9c\x17f\xfdyF\xf3\xe6\xc1\x82{\xfd\x81\xa3e\x8c\xb8\xf9H\xbc\xe5\xd1\xae.\x05t2x6\x9a\xe6\xa7\xc6\xc0\xbb{Uf^v\xb0%\xb6\xe4l,\xa3\xbd\xc7{\xe0\x1f"E\x91+\x12\xbe\xd0h\t\xa7\xdcj\xb5\x89\x83\xa2\xab\xb9\xa0\xe62\x922\xc7V\xb7\xc0\xc1I\xb1\x8d\xefqK\x01\xf4,\xf3\xff\xe5rs>\xcb\x16\xe60\xe25\xd2\x8e\xc2\xb1"-\xb1\x1d\xffp\xf4S\xe9y\x91\xa7\x0c\xbc\x93\x07\x8e}\x13`\x02\xd7+\xab\xd8\x03(%\xba>$\xb7#@=\x84\xb0\xbe&7\xa5w\x1a\xbc.d\xff0<?\xd1\xbfzr\xde\xe3\x89\x14L\xe8\x01\xaf\xe1\xc2\xd5M\xbd\xc2-*"5k\x9d\x1bI\xdc%\x01\x9708,\xbe\xb1R\xf7a{\x15\x95}\x063k\xe0\x96;\xa5\xaf2;\xa9\xf0\x0c\xcf\x93\x92\xed\xa3\x1d\xde\xbf\x12\xdd=\x82\x1bp\xb3\xc8\xcff\xc4\xa2]T<4\xc2\x17\xedc>g\xea\x14\xcbP\xf7}\xdb\x99\xf7"7=\x06\xb4\xbb,\xe1\x0c\x0eH\xc6\x85\x8dj#\x01^\x10m\xdd\xe36\xcd\xdf?8\x8c\xa9\xfaB\x90=\xb0\x85\x1e\xb9ib\xbc+\xcf\xb4\xfe\xcd\xc2j\x99\x99c\xde\x81z!\xcdl\xf4\x02\xc2\x90\xc7\xc1\xa5~r\xf8L\xe6\xb14\xb8n\xd4\xf9\xe6k\xcd\xcb\xd9\xe2Z\xd3=O\x86g\x89\xcc\xd4.={\t\x9dX6\xb3\xce\xd5\xab\xbb\x177eO2#| \xc38\xc7v\xd7\x13\x94hyQ64\x9c\x1e\\\x872\xaaC\xde\xff@`\x9d\xfb]\x1e\x1a\xe9\xac\xbe\rNl\x83\xc0\x02\x96\xd6\x01\xb7}~-f\x11Y\xd3\\\x00\xcfr\x03\xdd\x8c(\xc6\xd6E\xc13\xcdt\x8eK ;\xe4\x8e\x10O\xf4\xaec\r\xab\x07\x1dv\x882 SC,\x9a{\xb3\x9a\xc1e\x14#P\x93\xe2>\xf4\xbc\xae)\xaa\xedt\xb6\x07`\xea\x13^\x02-\x16\xf0Q\xce\x8a\x83\x0e\xf9Dwd4\x0e\xc6\xf4\xa4\x8ey|9\xd5\x98\xca\x02\xad\xf32{\xc4\x18&\xb6i\xab\xe9\x91\xfc\xc6\x8fW\x80\xb6\x9c\xe8\xdct\xfe\xfbK\xe4s\x1663\xd1!\xaa\x7f\xc8\x1cm\x86\x1c\xa9\xa9\xcd \xfd\x1a\x120\xd39\xe1\xca\x14\xb9\x82]g\xe0i\xe5\x85\xa0\xabg\xd6\x1b\xf3\xe1\x90\xe0\xc6\xa1N\xdc\xdc\xc2\x86\xaf\xff`\x0c\xff\x95MW\xe1\x10\xca\x8e\xa9\x94\x05S\xcf\x15\xef\xb4\xc8#"\xc4\x1f\xc7\xaf\xe5bc\x9e\xfa\x07 \xc4\n\x19s\x04\x9c\x18Rg\x16\xc1j\x84\x8b\x15\xc4\x8e\xe3\xedLMW\xad\xda.\x98\xcaY\xa6u\xfbrc-\xb9Zy\xfd\x00\xf1\x80Y\x850d\xed_\xca\x97\x16C\t\xd4j\x1e\xdb\x0b\xb3\x89\x1e{\xbaCV\x86\x1e\\p\x17\xc2VGY\xd7\x91P\xb3*\xee\t\xd0\xd1\xf6\xbd+\xe1\xc8V\xea\x80\x98\x85\xe9\x19\x97\x08/\x16\x8dJ\xaf\xba\xd7w\x04\xebhJD\x8d= \xc3.a"\xa8*\xf2\x8a\xa2q\x975\xfc\xc8b+\xf8S\x88\n4,\x07rC\xf0\xd3\xff\xa3\xe7\x1a\x05\'>_\\xk\xd6\x1c\xe1\x8a\xbfL\x18\xc7\xc3a\\+\xd0F\x978\xd4\x1eo\xfbK\xa28\xdf\x03\xb8\xf2\x1b\x9c\x9cXb\x0f\xcb\xf2\xbf\n\x94\xee\xaa\xb9\xc3Ro\xf0\xbd\x01\xe2C!\x91\xb4:\xf0\xab*\x08f\x9fd:\xae24\x17\xdcW\xb2\xfd\x90\xed\x0b\xa1\xfags\x10\xd5\xdd\x0c1)\xf4G\xedU\x93L9|\x1eq\xcc\x98\xe2z\xe2\x94\xc4\xfc\xc1\xd7QI\x08f\x84U\xe0\x8d?\x82\xf0\xabD\xeb\xcf,~\x9d!G\xe5O\x8f\x86\x85\xb9\x1a\xe2\xd8\xbc`\xb6\xa9\xbc\xa5s\x18\x94\xec\x89%h\x1a.\xce\xff?W76\xbe< oV\x01\xda\xe4t\xeeCDh\xad\x1c=$\\\xe7\xeaf\xd4\xe8\xfd\xd1\x95\xb4TY\x8ef\xa7\x1f\xc8\xea\xeaH\xb2Pu\x19O\x7f\x893\x98$\xd8\xfb\x0e\xba>`\x06K}b\x82j\x1b\x93\xfc\xday\xd0\t!\xd9/Q\xd9\x89&3\x85.f\x9d\x80<\x88#\xa5\x02\x93{\xe3-\x87#l\xc5\x88D\xd0b\x07\x1exV\x8d\xfd\x8dJK\xdd\x1f\x91D\x99\xc9\xc2\x85\xf6D\xadu\xe0;,\xa3[\xc5A\x16u:\xb73,\x06\x17B\xae#:\x07\xf9\xe5\xa2\xb0l\x87\x97\x07\xb0t\\\x1aW\x16/\xfa\x07M\x1a^\xe9U\xc8\xa1h\xe6\xc9\xbfL\x82\x84\xdc\xe7\xea\xd7\x99\x15\x06\x9e\xd3j\x8c\x8f\x08\xc9Ob[\xa7\x9cQ;{\xe9\x8e\xcb\x9eW\xa9\xa6BE\xd6\xf66c\x96\xb3\x86\x0fF\xb6\xf2\x97\x80\x93U\xcf\xd2\xeb\xf3\x8e\x14k\xba\xa5\xa5\x1e\x05\xee\x8a\x94\xc5\xd9\x87bc\xae\x1a\xb4\xc9~\xdfF\xabF\x817\x02e\xd6\xad\x85,A\xf7\xd0s\x99\xa3\xe7\x84\xf5\xd6\x8d\xc0M\xb6n$(\xae\xeb\xa5\xe80\x94\xe1)\x89\xa7\xdb\xb2\xb9Z\x9f\x9a\x0b\xe8c\xa2\x18C\xa8\xe8\x99\x1c\x9e\xdcgN\x92\xaa\x04\xd2g~\xf2b\xd8C\xf3\x17\xe3\x99:\xd4\x95S\xfdz\x17`\xa1K/\xad\xbd\x10k\x8c\xf0D)\x8a\x8cA\xa6p!\xb6\xa9\x94\xd4B-\xec\xc4\x85\xa4\xeb\xff\xc2\xd5\x93\x9f\xef\x03\xd8\x8b\x14\xab\x06\xaf\xbc3Y\x142\xed\xb3P\x83>\xf1e\xa5\n}\x12\xed\xb1\xf8 \x96\xdbF\xfe\xffE\xd4\xd0\xaaK\xb1\xfe\x81z"\xf2!\x89\xb3l\n\x85w\xfe\xfe\xd7\xc0Qe\x0b\x8d\xfd\xc5\x81]8O\xe1\x10\x0f\xfa\xfe\xaa2p\xa9cz\x11\xf2\xf7\x89:\xb8"}\x8d\xdc\x8e\xaa-\xecY\xb4Q\x14\xc1\xae&d\xd2\xb8\x7f\xc8\xc3E\x1e\xad}\xf7\xe9\xfb\xc4\x08,\x89\xa5A\xe3u)\xf6\xab\xd7|\xcdnmzul\xc9:\x8dN\xfdk\x8c\x04%\xf2\xa4\x088\x87\x10>D\xc6\x93\x94r\xbbF[|\x16\xfcsZbn%\xfeN\x88\xd5\x91\xb70\xd6\x19\x85\x8c\x94=\x8e\xef(FU\x93\x8f\xaf`M\xa9\xb3z\x0c\xf7\xd5\xc1\x04\xec5\xa6\xc5\xae\xab\xb7\'vj}\xa1\x04\xabwp\xd2\x1cC\x03\t\x88\x8c\xf8\x0f\x89\x00\xb5/\xa9\xa6\xb8\xfbE\x08\xfb\xb7\xba\xde\x1f\xf3\x91&\xb3\x1c\xceP\xb1\xacB~q\xf5$\x98\xb7a\x10W\xf0\xec\xa2\x96;>\x13o\xaeG\xd6\xda\x96\xaa\xa6\x7f\xc0\xb843\xc8\xf4r\n\x19\xbe\xdfn\xfdgN\x84\xfa\xb5\x8f\xc9R\n\x0e<7^\xb5\x86\xea\xda\tl+_e\xb7IE@4m\x13\x9b%\x7f\xae-\xba%~$\xa1\x1b\xcc\xea\x0el\x92\x828\x9a\x13\x9a\t(\xa5\xacFog!r\xcd\xa9\x03\'\xab\xd3\xdeF\xe3&\x03\xe7Cn\xbba\x9a\x86\xce\xf2\x01\x11\x7f\x02d\xa2\xf8\xe8h\xf0\xe9\xf2Hn"i\x90\xa7\xb9\x16\xd7\xd7\xc5GZ\xb3x\x17\xc1\x90=D\xbb\x86k\xdc\x13`Y\xe3t+e\xd9_\' \x02\xac\x7f\xca~=\x0f\x07\xf9l\xb2\xcc\xd2\'\x8c^\xdd\xa4c\xb4\xd19\x87\xb4\xc9\x1d}rg\x11\x88\x00\xed\x0c\xd0]\xb3\xe3\xd0\xb6\xedv\xc6 \xcc${\xab\xb2K\x0bC\xcbq\x9ey\xa3\x07\\\x16<\x08\x00w\x0crS\xceS\xc4CE\xc4\xc1hUg2\xe5\x11\xaa\xc63\xf4XXC\xb6\xa3\x88\xb0OY\xd1\xfe\xa4;\xcd|;\xa3RW\x05M*#G\x82]2\x98\xcb\xff\xc8\xfa\x7f\x82\xa6S\xcd\xb6zS\xd2\x1f\xcd\x95Fj\xd8\xa6U\xb6\xd51\xc5\x18\x94\x81\x050a\xa67\xec\xd1\x00\xa4\x88\xeb5\x17\xb4\xd7\x84\xf6\xcc\xe9\x89s<0Bfn\xb4\x18\xf0d394\'\xfaI\x7f\\M\xd1\x82\xb1*\xa8\x94r\xe4\x8e\xc2;\xb2\xdasw\x85\x86v\x14\xf6\xe1\xc2\x8a\x93\x1c\xac\xfe?*#\x9d}\xfc\xc5H\xa1\xdb\xa8\xf3\x11u+V\x04\x9b\x9eg\xe4Rc\xbc&\x94\xf3\xc8\xe8\xc4\x92\xcbj\xcf\xf5 \xae\xa0\xa4\xa2\x10\x16\xa9\xa3\xdb\xf0G1\xa7Y\xb3\xd0\xab\xcb\xed\n\x83\x16-\x7f!\xb0\xb7\\\x85\xe4h@\nG)g\xec\x14\xf8\x00\xf5\xb3]r\xe4z\xc5\xc6\x86l\xab \xc9\xee\xb1%\x8fY`\x90\xca\x83\x13\x8e\x97\x85g\x8b\xfb\x08[\x8e\xab\x87[m\x9bVb-\xee\xe0\x89\x96s}A\xaf\r\x96\xeb\xa7\x9b\xf2\x82"oR\x91E\xf5\xb0MQ\xc3\x94:\x86Qd\x80\xe4\x11\xb07\x1f\xf8ph\x87*EH\xb7\xc6\x964\xde\xb4\x8a\x01\x88!\xb40)(\xa4\x9d\xf4\xe7f\xd1\x8d\xb3\'\xa0S~\x9f\x9d\x96U\xb9\xfb\xd4\x03_c\xde\xc88-*\xad\x0b\xe3\t!\x83\x8a\x88\xb2\xbd\xf7\xfd\xb9\xb6\xb60\x9ae\xe4C\xeb\xc9\xa1}\xac\x87\x9f\x1e\x8c\xcb\x87\xb5\x98\x19b\xf79\x9f\xa2 \xa2<S\x96\xf3\xd0\xfe@\xdc \xba\xbe(\x00^\xc3\xb6m\xb3\x11\xcd\xcf\rz\xd6\xf3\xa8\xfe\xa5!FFf\xfbk,\x8f\x8b\x07\x7f\x1e\xac\x18\xeeA\xca\xc6\xe4q\n]OH\xe6\xd2\xea\xdf\x9aV\x1f\xdc5XJ\xd35\x82]\x80\x89q<f\xa0^\xa7\xae\x03O\xe5\x08O\xd4\xac\xfdT\xd5\x03\xb0\x11\xbe^5\xb0\xc3\xe9\x11\xfa\x87\xe5\xaf\x0eC\xb7aF\xee\xbb~\r`\x89\x06E\xe2\x9c\x1b\x14\xba2\x16\x1fS\xab\xc0Oj\xdd-\r\xe8\xe6\xdb\x10\x95)I\x85\x8cn=\xe5\xe9\xb3qX\xbd\xee\x86\x17/\x0e\xc2\x9d\xda2^?\xd2c\xbd\xbc\xc5\xf0\xd6R\xa6r\xf6\x96\x80\x0cA\xc5.\xdf\xd6h!Z\x0e\xa4T\xb3~\x9f\xeaoZ\xd1\xfc\x818`\x98\xc3\x13\x99\x8a\xa1\xb8|\xda\x0c\xdc9\xda-9\x15d\xf1>\'\xbb\x0e\xa6\xfa\xf9g{T[(\xd8 \x9eK\x83\x15Tjq\x855}!R\x13\xd2N>\xc3\'\xe9`\xd4=\x8f{\xdb\xa1\x93]\xb2Br\xacc\xf2\xe2\x1d}\x96K\x8e\x8fv\x16\x1a\xa7d\x80\xe9w"\x05\x12j\xd0\n%I\xeb\xbe1\xa3!\x08\x0eNb\xec\xff\x14\xd7~\xdc\xdco\x17\x10?\xbc\xa0\xbdu\x11\x9dX\x0b\xc1\xb3\x01 \xd1\x9fC\x13\xde\xc4f\xfc\xa8G_\x8b\xb2\x0f\x17\x8f\xedBa\x16\xe6q\x96w\x18\xc7\xb0\xc8\xd6x\xdb$y+\xd0Z\xa5\xeb\xb5s-\xee\xf0dxj\x9e\x9bV\xef\'4\x90@\xf8\x10;\x8by\tc\xa9_\xe7E\x1b\x8c\xb80\xbdKD\xaa}\xb6;V\xf7\xc9\x04cb"l.\xa2\xa1\x91>\xb6\x17\xe1N\xeb(\n\x9b\xf3\xf9L\xa1\x86\xd3\xd6<\'~=\xe3Wh\x99\xd8.\x00\xed\xa7\x1e\x10F\xdf\xaf(\xaf\xba1\xb1\xbc\x9f\x89\x1a\xc8(\x89\x93T\x8b\x17\xecwR\xda\xec\xc1\xa8GAt&\x0fZ,\xd3\x1d\x86p{\xcd\xe8\xe2\x90\xb7\xe6\x8c\xe6\xe3\n\xc4!\xcf\xe5\xe3\x8b\x8c\xa7\xa2\xa8\xa6A\xe6W\x8e\x19U\xc1\x9a\xf9D\xd6\xe4\xad\xba\xcc\xa0R)\xdd\xc1\x9du\xafek\xe0+\xbb\x18?6\x1f\xf5\xaaiZ\xb3^\xbbb=\x05\x8b\xee\xe4hY\xd5jTMS9\x97\xfd\x9c\xd2)\x05\x1c\xb7\x10\x12\x9eg\xad\xaeq\xb2\x11d\\mS\xf1\x8e\xf8]\xc7M\x8dO\xe3o\xfb\xab\xbf\xe5\xa7\xe6\\\x07\xe8\x1d\xaf\x1c\xcf\x9a^\xdf\x83\x95\x18\xbe\x0e\x10\x9f\xa9\xedxO\xa8Z\xec`\xf5\x00C&g\x00l\x9e\x7f\xe0\x14\xe1\x88\xeelncY\x1c\x0e<;\xcd\xe81\xc9.\x85\x8d\x04q\xac`\xa4\xd4\xcc\xee\x94\xa5\xa3\xa4!\xff\x8d\xcb\x95\xd2\xd7Q%L\xe4\x17\x1a\xabw\xb0\x03\xc2koP\x91\xd8\xc3\x12\xe6\xf4\x0f\xbf\xf8g!\xde\xa5\x17w\xbc\x89\x0ek\x9a\x1b3\x1b\xa5\x80\xc1Bl9,\xfaq\x04\xbd\xee\x9e\xe3\xea\xb5\xe0\xa5\x99$\xdb\xe8\x8d\x18\xa9\x17\n\xd8x\xcf\x98\x8a#\xb2t\xf0e"\x9e~\xbeo,\x86\x80`t\xb7\x1d\x19\x93\x11d\x01\xad"(\xc5\xb3\xd7\x81\xb6~Bo\xceA\x90\xa8@\xa5j\x8aB0h\xd7\xfc\xa2\x8d\rt\x04\xb9\x98*q\xa4\xe8,b\x15Y\xba]\xb6\x8bX\xb9\xd0E\xa8\xd5a\xdbk~p\x8f;\xd7\xd1\xcd\xeb\xb3\xfd\xc6d\x9a\xddz\x80;\xe8\\\x0b\xb1\xb3xe\x87\xf6m\xffND\xd8\xa0z\xa2\x7f}\x81\x8e\xe9\x89\xacR\x8eB%\x9eY\x8c@\xb3\xd3j\x8c\x8f\xe8\x9b\xdd\xa6\xde\xe8\xa2\xac\x89\xe8m#s\xec\xa7\xf9\xc4\xb05\xefb\xc5<\x8dJG\x90\'\xaf\x06F\xd1\xd0\xa4\xc1R\xf0r<\xe2\x1d\x98\xc6\xe5\xce\xcbr\xc4y<\x04\xeae\xeeV\x89\xb6ES\xb1\xf4G=\x89\xf3\xd0\xdb\x06\xd8Y\x88\x9b(\xd1B\xffL\x8c\x19\xea?1B\xb68N\xd5\xc3\xd4\xafU6\xc6\x05\xc9\r\xe4\xde4\xbah8\xd8\xa4E\x0c\x16\xdf\xb7,\xd0\xd4\x94\'e>m(\xb0\x8a\x95\xe2\x8e\x1d\xa8\x15l:\x94}\x02\xd3\xf4\x9euIb8\x93\xea\x99Y\x18\xbe\x98U\xe9NX}\xb1\xca5(`\xa2dK\\\xeb\xeb\xe2^g}\xa5`\x1a\xc3.\xb4\xa0ZH\xfe\xe28\x08@\x11\x1f\t\xbe\x83D\xce\x0f\xee\xfd\x15\xe0\x81\x9d\x97\xe2\xd2\t\x18\r\x99\xf2\xbebo\xe6\xa7\xbd\xc5\x1b\x9d,2\x12\x9b\xa3\xae\xbb\xedj\ri\x05\xdcY\xca9w\x95\xc1\xc2\x88\xd4\xbes\x06\xf7{\xe5V\xdb\xf8\xaf\xe1\xb8/\x08\xe4Ya\x08\x14\x9c\xf2\xdc\xaa\x9ap3s\xa1\xa6\x9eD\xb97O\xf6\xd5\x03\xbf\xba%\x0e]\x89\xd6\x89\n\t\xb7\x07`\xa3\x00\xe9\xab\xddo{\xbe^\xf2\x84J|\xa6d\x96\xb7\xf1_\x1c\\4z{\x1b\xb9\x0b\x18\xed\xfb\x04\xcc\xd55m\xcf/\\]\xac\xcd\xac\x9ea \xc9\x1e\xab<\xd4X\xe5 L\xf6\x1dY.&\xc3\x1cA\xb4\xe1\x9a\x81\x92@P\x17\xdby\xef\xe9\xf8\'\xf0]\x8e\xae\xf1\xc9\xcc&i\x07\x0cU&ca]\xf7q\x12\xf7\x86\xb5\xc3iiwO\xeb44\xd5\xbcT\x1a\xb3\xe7@g\x92w>\\R\xcf\xfd\xeb*3\xbe\x8cc\xd7\x15?\xfa\xe9/\xde\x83\xe6\x87\xfa\xd6\xa4?\x9ey\xfb_\x85M\x87\xe7\xaa\xada\xcb\xeb-"\x92bJ\'\x10Hc\xd4X^l\xc1\xc2\xc2\xea\xbe\x11\x9c\xa1T\xe9\xa7L\\*6J!\xab\x1b\xc6\x06<\xc6\x03,\x85\x1dk\x1f\xeb\xc8\xf6*Q6\x05\xa1\xfa\xa1t(\xf9"Q\xe1"\xa3\xef\xc5\xc2\xd8\x0c\xb8\xca\xd7$5\x06\xe9\x168\x89\xba\xdb\x13t\x1b\xf4\xc9\xfa\xd2\x9d*y3+\xc6\xb4\x16\xf1\x8f\x12\xac\x84\xd4\xeb\xea\x9fu\xc9\xb5\xf4D\xcd\xf7)\'\xcel\xban\'\x18\xd0\xc7`\x02\xed\xf8\xbf\x86\xb1\xe1\xd1\xe1\x17\x80\x96\xf3\x9f\xdd+l\xcdT\x84\xb8\xd4\xc4)c\xbb\x84\x1e\xf8~\x05\xe9\xc8\x0c\xfa\xbb\xd0IF\xa6\xffI\xa6Z\x86\x1d\x9b\x9f\x88\x14\xc8\xd46h&\x83\x98\xc1\xfc\x13\xb2{\x08\xc3\xb1\x86\xf8kv\xd3\xf65K\x1co!\xea\xf5\x99:\xe7\x17\xc5\xfa\xe1\x9be\xc0\x9e\xca#L\x00\x1a\xddO!\x0fc\x1ds8a\xab\xb3\xc2?\xba\x81a\xa7*Y\xc8T\xe5@\xc8\x05\xa7\xec\x17WN\xf6\xb0\xc5I"\x01=\x0f\xaa\xa4\xdc:\xe0\\d\x98\xe8\x11$\xfa\xb5\xdaNP\x83\xfc\xee\xa3\xd08\xaf\x93-\x94\x9e\x0el\xab\xc2\rh\xc7O\xe9\x82\x9a\xb2\xc6\xe7I<j\xa7j\x8d\xee\x9ck\x06\x01\x9e\xe4\x81\x8e)\xdb\xe6\xb0\x1fT\x87\x8a&\x8b\xf1\x0e\xea\xf0\x8b\xcb\xee\xb0\x0bg\x93Sbu\xdbH\xe3\x81\x1b\xd0V\x90\x13\xe9\x1d\t\x07\x80\xe8\xd5\x94s]v]\xa8\x02_\xf8h\xf2*\xfb\xd0U^\x04\xdfZ\x97v\xe1\x84\xb1\xa0\xbd,d\xe5d\xe2C\x04\xac\xe2\x1d\x06m\t\xb4\'\x9c\xcba5\xffW\x898\x9c\xb8\xb9l\xe3#O\x17j\n\xdf\x9a\xe2z`X\x1d\x05\xaa\x7f\xdf\xfaO\xe5P;+\xdc\xf0\xee\xe8L\x81\x07\xad]\x1b\x06\xdf2\x8bn\xa4\x9coV\xd3y~\x05b\x82\x8az:\xe9\x9dwx\x11[\tE\xd7\x1c@\xdfF\xea\xd3\xb3\xbd\xc1\xf7<\xbcbmG\xf4O0\xea\x1c@\x02] \xc4\xadL=\xb0\xf9R-\xba\x93\x00\td\x06}\xcc@!<\xe3k\x8e\xda\x81``\xb4\xc7NR\x1e\x82\xf7\xe8\xd8\x84B\xfbf\xbe.\xe7\xa7\x95\x86i\x83\x04^\x9a!Z\x8e\xc9P\x02>\x8b\xf2\x0f\xe6j(\xb6\xbe)\'\xd5\x12\r\x8b\xfcp\xdb;\x07\xbbs>\xa9\xfb\x17\xd9\x9a\x99@\x99j\xa2\x04?>\xe7a\x0c\xb4\x8e\x1d\\\xa9\xcc\xf6\xb2\x94\xa2\xaf\x93 U\xbe\xb5[\x9e\xc9\xff\xc6\xbf\xec*\x84\x11n\xc3\xcd\xf3\xb6\x8b\xc8q\x17\x03\xa1\xa1\x8cL\xc1L\x8d\xa8~7m\xeb\t\xb0#\x0e\xcff5x_\xc2\x16\xe3\xab2UFq\x02\xb9\xb20P<lM~\x99,H\x1c\xea%\x9aG\x9c\x1e\x02\x9abf\xbd\xd5z?\xe3\n\xfep([\xb9\x8c\xd5\xc1V\xf8\xa7\xa3wE\xa1L3\t\xab\x82\x93\r\xa2\xf8\xd4\xf9x\xdb\xb1-\x8f\x8b\xf6\xcf\xe4\xe1TJ-\x90_\xa2\xf6\x88\xb7c\xf9VP\xf7C\xba\x1fdJw\xaa\x92\x90\xaeh\xc6t\xcc\\I\xe2\x8f\xa1\xe99\x86\x91\xb1\xf6\xb3n+I\x1f\x1c>`\xe3\xe5\xe36\x81kY\xf4\xd85Q\r\xfc5|c\xb6q\xf1E\xf2}\x0e9\x8aO\x86\xecH\x95\xf2\x13\xd7\x99\xbe1\xba\xf0\xe7\x82\x04\xc8\x03\xa3Ha\xea];Q\x03\x01#\xaay%\xd0\x8c\x98^\x0b\xf87\x84\x19\xe5w\xa0\xe5\xaa\x9c\x02\xe9\x08\x95\xdd\xf6\xbe\xe0\x0cWB$HO\x1e\xc3#\xe6.$$\x96\xfc\xd7\x01sS\xf2\x87\x143uL\x13$\x97\xfb\x18d\x9c\xc41\xb9\xa1\x8bVO\x14\xfd\xa0\xed\xca\xb2G\xc3\xbd\xc1\xcc\xe7\xb0E\xc9Bp\x00\xc5\xb2\xe9\xcf\nU\x84)\x03\xef~\x14\xed8\xfe\xd4\x05\x00h\xf2\xefQu(\xbd\xd5\xb6E\xd3X\x97\\\xb1\x13m\xa9\xd9\xb9\x8aDMN\x1a*\xabQ\xec&\xbc\x9b\xf3\'Q\xb5\xc2\x88SbfW\x08\x9d8:!>\x11{\xa1:?\xc3bO\xd3\xbb\x12\xc8\xf9o\xdbl\x1fK\xadk\x0bd\x9bE\xf9\x11\xa1-\xd0\xe5\xa2\x81\n\xcc\xc1u\x1c\xec\x8e\x1b69\x0e\x92\xbd\x8bt\xda\x0c\xc5\xf6\xe6x\xee\x1c\nf@\xd7\r\xb4\xc7\xad\xd4\x1a\xd5\x9f\xb3\x95\x8e\xe2\t\xc3\x1b\x8c\xc9\\\xe5#\x02\xcfJ\xc4\xfd\xe5\xb5\x85IX\x9e\x03\xf5Z\tHDMv)\x9b%H\x03)\xa2\xed\x8e\xb2\x9f;\xff\xbc)\xa1{\x17\xd0\x18{\xe4\xa73Y\tb\x0c\xb5\xd9\xb4\xe6\xdc/\x9f1\xbd\xec\x81\x92]\xb3,\xc0\xe8\tT\xa7\xfc\xf1\xbd\n\xba\x88%;\x1d\xe3\x85\xee\xa7\xe6\x8c\x04b\xa2\x85\xd3 v\xf0\xb9\xdc\x02\xef7\x1da?\xc69\x91\xe5\x13\x83\x12\xacH`W\'\x1a\x90}\xc5\x89\x1b\xb6\x87\x19V0\x96\xf9Wp\x00.\xc6\xa4\xd0\x111 e\x0f\x1cW\x95\xa8\xa6\xea(!\x01\xabR\x03\xe0\'|\x89<mT\xf3\xdd\x97\xb0\x89w\xe6T\xe1#h]\xc7\xef\x8a\x82\x9b4\xc3\xe8\x82s\x88I\xfa\x93\xb5\xe0\xa5Veom\xceS\xa7\xd3i\xc0\xfd\x89Z\xaa\xc5\x00\x98\x90=\x122\xb4C?\xee\xd7\x16\'\xf4ai&\xff\xe5\x1a#&\xf2\xff\xa1\xc6\x0b\x01E^.\xfc~\xff\x8bf\x9e~\xc1\xad\x9a\xcc\xe2\xe5\x01x\xaby\xe3?\x92p\xb5\xd8c\xf3b\xe7\xc0\x11z\x11L;\n\x8b\xa2\xdfwD\x1aZ\x1dsr*\xdd\xcf\x85J\xe1/\xbd)5*\x8e\x84j\x849\xfe\xfa,\xa6\x1e\xde\x02\xf0!\x960@d\xea\xab1\x12b\x95\xf1\xe2\x0f\x17\xe2\xc0\xb6\xb7\xbe\x12\x88{Pylx+\xb9\xa0d\xdeD\x81\xc0\x18\x80h\x8a\xe9\xc9!\xc9E+N\xc1\x9c\xf5\xec \x82\xe0\x90\x96\n\xfd@FezT\xcb\x1eB\x06$\xe5\xfeb[\x96:\x088xC\xef\xb9\x0f&\xfb/\xcb\x13\xb3\x06\xd8k\x94\xbc\xd1\x8bT\xcb\xc1\x02\x9d\xb3|\xfc\x0b\xa8-e\x8b\xdb\xa6b\x10\xb2\xe1\xd5-\x10\xca%n\x87\x1a\x10\xf5\xe5J9!\x04\x97\xbb\x14BJs\xd3\x9d\x94\r\x85\x90e,u\xe3V:\xd6\xb1\xaf\xe5\xd5a\xb4\x97\x81\xf0U\xbf\xd1^~\xf0\x1ak\xd5B\x0c\xee\xac\x7f\x88\x0bC\x0bF\xc8\xa4F\xcb]9\xee\x96\xf0\x83^`\xbd\t\xd2c\x83\xd1_\xb6\xbb\rG8\xd5\x1ej0\xb0\x17\xe9@\xb8l)\xdc\x0f\xb8\xc8\xb6\x1c\xa1;\xb73\xaf!\x95p\xdc\xe2\x02\x90@DrF2\xec8\xbbk\xf5\xb9\xddG\xc4\x0e\xf5\xfd\x1e}\xea\xfc\xe9\xd3k0\x8a\xdc\xb0\x8e\xd7AX\xf3\xaeg:\xef\xad\x1b\xad\xe9M8@^\x85\x83a*T\x1d\xceq\xa6\xe9\xa1\xdf\x1a\xeb\x9a\xe4\x15n\x0b\xd0\xd4\xd3\xa9J\xf7\xfd\x0c\x11+9wZ\nZ\xab9\xaa\xf3\x14\xcf\xc2}\xc3\xe1\xfeM}nZ<\x86\xdc\xc7b\xb8.\x91\x91\xe3\xee\xbd\x18\xab\x94\x16q\x88v_X\x87-\x1bf\xb7\xae_\xcb\xef\x85;=\x12\xb1=J\xadl%\x0b\xe5\xf8\x1a3\xdeS\x9d\xca^\x16+\xce:|87J\xe74\xa6\xe2\x9aF\xa7\x80\x85\xe6\xf1\xd3D\n\x8f\xdb\x1d$\x1d\xf6\xe6\xf4n\xfb\xaf\xcd\x90\xfbpJ)\xf8]O\xc9\x13)\x88I\x81m|%\x80[09-\xe3\x1e\xc1j\x10;\xf3\xe7\xf3=\xac-\xc2v\x8d\x05Ht_\xb9\x7f1\x03\xed\x81\xe4\x80g\xe0\xf0Rn\x96Y\x02\xccK\xb3\xea\x99\x90\xbcS\xe7\x7f_Qz\x8e\x07\xc1\x80l\xdb\xec\x13\xd0\xcau\xb1~\xe2\x87\xff\xcbIW:\xdc^`\x0c\x12p\xf2\x018\x8a\x05\x99\x914N\x18~v\x12\xa2\xe0\x19\xdfjV\x02\x10\x88"\x8d\'\x8b\xb4\xbb\xd1\x05\xf9\x1d\xea3So\xb2\x14i\xf3S\xab\x08\x8a\xcc\xfb\xda\xf5\xe8^G\xf71\xea\xf8a\x17X\xfb\xdd\x06bi\x10K\xb4(\xe1\x8e\xcc \xe9f\x86CQ\x9e*\xf0\xedG+_q%<\xefdD\xa9\xc2hk\x06\xa77\xe1\xb4\x00\\\x85X(6\xf0\xf4\xcaz\x037@\xf1\xcaT=\xf2h<\x07\x14\x066d\xcekwO\xb4x\'b<*c\xb6M!=Rsh\xb0&MN\x0c6\xce\xd7\x88\xbe$s\x0b\x86$\x96`>\'\x92\x9a\x1b\x02\xc9\xc4m\xe5E!x34[\xec\xdb\xd7\xd2\xc9\xc1un\xbf\xebx,\xaf)\x03-\xc4\x9d\xe64\x031=89\x18\xb7\xde\xf0\x05\x98\xde\xb5\xa9E\x81\xa8\xee\x93\xca\x8bq{#L.\xbd\xcce\xa6\xc7Z}\xeb=\xb8\x1cj$\x10>\x7fp8\x86\xc0\xea\x8e\x9be\x0c4\xf5d\x05x\x9dol\x18ZW%\x07\x83\xf9\x06p\x17\xdf\x1b3\x8a\x14\x8d\xd6\ru:T8\xfaCw@\xaeGvH(\xcc\xd0%\xb6\xa8\x90=\x97\xac\xacKP\xcf\xd9\x03\xaf8\x0c\x92*W\xe9j\xbb\x03\xd1|\xf36vJ;\xb4\xb6\xaf\xb0\xb2\xe2W<\xa7\x86\x04\xfd\xf5)\xad!\xb8\xdf\xf8O\x0f|\x13j\xdc\x08N<Oo\x8e::\x9b\x9e\x8c\xa4\x11\xa6\x0fP\x85\xab.5\xad\xf3v\xe3\xe9\x19\x03\xb5\xc7\x124~\xa5+\xf0\xca\xd1"\xfa\xe3\x11\x1a\x14\x049\xd6\xa3\x95\xe6\xa0\x97\xf3 T\'\x9d\xe9\xf5\xa4\x93\xb5?c\x96\x90\xc0|E\xaa\xc2\xcaQKiJQ\x05\x02\xaf\x06\xb0\xb0\x03\x0bEW\x99\xc8\xe3\xf7\x82I\xacu\n~U\xbeS<\xf3/i@\xbf\xea\xdd=\xe4\x8b%\x99\x8c\n\xf3e\xb0\x0f\xe6\xd9\x9e\xce\xcbY\x982\x08\x7f\xa3\xfb\xe0\xe6\x96\x0f\xd0U \xce\xb8\x8a\xb2\xbf\xb5\xef/z\xd4\xb08N"\xe0W\x18\xde\x12\xe1g\xd4Y\x08~\xaf5RP\x8b\xces\x14\x8e\xe5U\xcb\x1a\x8c\x9a\xac\x8awx\x9fx\xa7,{\x01\x93e\x1e\xcb*\x08\x0c\xa8\xce\x92\xbc\xe75\x13\x83q\xeaG\xbd )\x90\xb0%\xd5\xa1\xdf\x80\xa3\xe5\xdf&4\x1f3\xdc\x0c\xf6l\x8a\xab\xda11\x82\x90\xfch\xda\x92]4\xf9h\xdc\x0e)\xe9zX\xe6P\x05Drn\xcf\'o$N-\xc8\x803\xe4\xb7\x9c5\x0f\xe6\xb2z\x11b\xadHLb#\x13<3\xf4\x0c\xc8H\xe5\x896\x1a\xfb|\x17\xc1\xe1\xa2\xc1\xa9\xa7p\x12R&{\xc5\xc5\x85(\x9a=\x16\xe2(\xc1\x9e\xb3\x17\xe5cw\x17\x17uY\xf1\'\xde\xee\x8e\r\xda\xc4\x19\xf3\xe7\xa7\x08U\xcc\xb0\xda_\xaeI\x9aV\xa0\x08\x80\xc0\x16N\x9e\x1c\xc5\x1b\xce(\xc8@3\x10\xb0#\xf1\xebd01\x0c\xdd\x12\x95\x8c\xc1\xdb#)UI.\x1chR\xc0p\xa8\x13\xf4zZ\xd5\x87\xb7\'\xfc\xec\x7f\xc0VE\x13\x95T\x8b\x1d\x08\x87P3\x17\xe7\xd3\x1a\xcdb\xc2\\\xd2\xfbB\x15\xc3\xfa\x01{-\xbbv\x9e \xa4\x17up\xcc\xd7\xa4\n~(\xfe\xc4\xc3\x9c\xfe\xa6\x0bF\xce\xd6?\x1f\x83\x99\xc2\xe6\xefM\xe8\xd5\xed\xebU\xc9\x0f\xd9I.\xde\xf1)\x18"Z)\x18\xd4d\xb3!\xda1\xb3\x15\xe2\xbceG4+\xc8\x16c\xa8i&@\x99\x01\xbb\x07F\x83\xa3f\xb9PE\tc\xcd\xea\x97y7((w]\x1fap\x8dP!p$\xbe\xcc\x0e\x8aPVsbp#\xf7\xf7G\x01\x00\\\x01(\xe0\xa4h\xff:\xf3kJ\xa1\x0b)\xfa\xfc\xc1\xe5\xd1\xf5\x8cS\x84\xd1`\x9ei\x7f\x8a:\xcd\xba\xbbK6 $I!\xf1\xd9\x0b\x9a\xec\xb3?\xa6\x18\xe7\xa7\x86\x04\xfc\x87\xfc\xde\xed\x04\x8d\xe7\\\xae\x12`w\x94\xb7XA\xbf\xfanj\xb8W\xdb\x1d\x08K\x13\xcd\x871\xd8\xa3`\x18\xdd\x88\xaez\xdd6\xdd\xc2I_\xa3\x8e\x98 \xfd\x9fV\xa8M\n_\xe3\x0b\xaa\x0b\xdf\x04\xb9w\x1c\xe1\xd0\xaeX0\xab\x01NX\xbe\x15\xf4.I\xc6^\xbcy\r\x10"\xb6q\xad\xe4\x84m\xde\xb3D42r\xf2\xd4\xc6\x01\xb0\xda\xdc\x93\xa0\xfb+\xc4\xfb\x9b\xbbfr\xc5\xfd\x0b\x03#\xf1i\x9d\xb2\xd3\xe4o\xa5\xd0\x08(\xbc\xf5\x91\xf48\x1f\x05\x00j\x9e\xf7s\x0e\x05VMUpL\xc2H\x12c\xef\x00\xe7]\xbdJU\xf8\x86\xbf:\x81\xa9\xcc\x0c\x94\x0b[\xd27\xab\xf1Z=\x05\x98\xc8 \xc0E\n~\xd4(D\xe5\x93\x94\x04\xcfq\xec\x0c\x93\x11\xf5\xf6\xe2#\xc5\xe0\xabb\xb9\xd8\x18qT\x1bL\xc6\x9c\x87\x01\xff\xc6~m\xad\xe5g&\xcc\xb6J\x13\x9e\xa7\xaa\xde3\xfe\x9e\xa6\x89\xb2\xa4,\xb5V\xd7\x96\x1dW\xec\xb7\xcf\xb1\xb9s\x1c\xc5\xed\xae&9A\x0eVu\n7\xf2c\x99\xd3wDH\xa72Q\x14MK\xe5\xd7@\x01\x89@+\xdd\xc2r \xa4g\x0et\xe7v\x93\xf9O|g\xd3\xad\x8a\x9bc\xedv\x98\x14\xe6\xb7$o:ds\xe5\xccy)\x96`+\xbe\xa0\xf0\xa2\xc6\xfc\xa7\xceei\\\xff\x92\xb8\x8a\x1f(\xad\x92\'1Y\xc3k\x14`\xc9wqt\x03M/\xe1\xb5/\x97\xdb\xb2\n\x80\xec\x06;s\xe5\xac>\x99vlc\xfb\xf9\xe2C\xdcvu\xd0.}\x03\x8b\xfa\xf0,!5\x83\xdfe\xeb/\xc9,R\xbaW\xcd%\x11\xd4\x1a\x8b\xfe\xaek\x05>\x97lp\xfe\x193\xdd?U\xd1\x18|X_i\xdc\xc0\xbb\'\xed\x06\xd5\xca,\xf0h\xfc\xc7\x06\xc0\x95F4\xac\x8c\xec\x90E\x17\x17\xf7o\xca}\xecp\xce\xe3\xc3\xc7{W\x15P,\xcb \xd7\x97\xfe};\xc5\xf6\xbe\xe6MB\xf3\xe6FrI0FAZ\xc9\x120\xdfnp\x94\xd0\xc6;[\x91\x9b=r\xb0\x94\xbaM\x1b\x7f\x14*\xc7v\xcdlI\x9e\xac\x9c\x11H\xa9\x17\xdd\xc9qr\xf4\xf6H$9\x91\x02\xf6n\x82\xa9\xa1\x01\xa68\xc9%SBY\xd9\xfb-=\xfdp\x86\xa3\x98KR \xd6DE\xa7*\xfc\xa8@.\x88X\xbb\x99\x0e\xb9\x12\xa7\xd2I\xc8\x93\x91-\xee\xd1\xec\xae\xce\x03\xf1\x9aoF\xef\xce\x8e\x08\x16%\xa3\xcdhi\xbb\x91\xba\xb37r\xfam\x85\x1c\x80\x04\x80\x8eO? \x03\xa0u\xfd\xb7\x8a\xc2\xca\xb7\x92\x9f`\xe0\xde\xb1\x0b,\xd8k\x8d\xc0\x14\xe7\xd0\x83Q\xd9\xaad\xe9,2B\xbc\r\xcacCpO\x8c\xcc,u\x13\xc6\x02\x99\xf2\xe6f\x17\xfb\xb1R\xcef3\x01E_`\x98"!\x0b\x93\r\xe0\xd2\x89\xa5\x19.\xb8\xcex\x85j\x03C\xa4mQhs\xdb\r\xde?\x8a\xf6\\\xb2 ,n+\x04\xe0\xdc\xea\x8a%\x8dzL{\xc3s\xb4\x0c\xfd\x8aD\xcf\xd9E`^\x91\x143\xa0:\xd2\x03\xa1\xd79\x08\xde\x02\xd2\x8dd\xad\x9c\xec\x1a8\xb9\xf0c\xe3p\xd5\x1d\x03\x16\xc2j\x0bO\xe7\xbd\xf80d\xe7\x9cbM\x15\x98\x0c\xf9\xb9\x02F\x96Sv\xb5\x06\xa5Y\xbfZ,*^C\xecD\xb80\x1e\x18\xe5|\xab$\xaam\xe7~\x01\xb7\xc7\xe8J\x98u[@\xaf4-\xeeO#\xc7\xaa\xda %d\xec\xb8\x1ahe\xff\xb4%\x81P\xe8\xc5\x06\xb6\xef?\x1d{\xb0\x81]\xfa\xbdc\xc2pS\xdf\x88ca}\xe0\x1b`\x16"\xa0+x\xfd\xd5\ng\xc1K\xb2b\xe9~\x87rec+\xfc\xb8v\x14\t\x13\'O\xeb\xed,\x85\x7f\x15\xee5\x9a\xacZ\xad\xe1\r\x8d\x02\xab\xe033\xd7::@`\x94\xc6:/d6\r\x16\x1f,\xcf\xc3\x8cX\x1d\x1b\xca\xe2\xa8\xb9\x0b&\x90\xf3P\x8b\xdf\x9e\x8b)\x1bG&/\xeeJ\xfe\xed\x8b*P/S\xb7\xd1\xe1\x19\xbc{\xcbv\x03\xae\xad\xe3|\xda\xa2\x97\xd0\x11\xb4&v\xe8\xcb\xc0\xf1\x18\xc6\xc9\xf9H\x82~F@\xbcH\xdd\xe6\xe3\x0e\xcb\xd8\x82\x070\xd3\x8f\xf3\x0e\x9ag\xd5\xbc\x87\xa7\xcb\x9f65\x9am\xeeI>9}p\xff4\xd1d\n\xe0\xe9K\x9a\xadc\xf12\xf0\xa1\xad\xf0\xc5\xf9\x83\xdf\x81\xa4w\xf7\xd1\x03\xa7\xa69\xabySW\xe4B\x04\x90 \xbd\xed>2\xfa\xc5\xbe\xc4\xaabZ\\\xaf\x7f\x91\xf8\x89\x07\x9bp\x15O\x90\xbe\xf3U\xf6\x88`\x9d\xc3\xd2\x1d3\xee\xbcT\xc8\xc1?\x07\x0f\xf5`\xc2\xd4\x81\xff\x15\xee\x11u\x8c\x0e :\xa6\xa7\x9dm\xb9\xb2\xc6}JyP\r\xaa4\x1cl\xad\xc5\x9e\x8d^\x93\xea\xe8\x9b+2\x85U\xbau)\x90S\xf0\xc4F\x0cK\xfe\xca\xc64\x91\x02\\\x84`!\x12\xc1\x17\x02\xe8\x9d\x8c\x9f\x90\\\xa4\x8d\x9b0\x0cq\x19\xfe\xf0\x81\xa8V\xb9J\xef>\xfd>\xa5\x92H\xf3\xd82\xdae&\x9di\xba\x1a\xeb\xe3\xf9\x8a5\x7f=\xf1\x8aS[\xc9\x91~D\x07?\xf7\x1a\x0b\xe7\x8b9\x14Sm\xed\x8c\xae\xde\xc7\xc97O\x88e2\x17\x95.c\x03BEt\x171\x15\x80+4\xf9no\x17g\xcd$1\xe9\xecl\xaf\x8dM\xd6\x9d\x08dU\xb2\'4\x14;{\x8bK\x8ao\x03\xaa\x95\x7f\xea\x9a\xe9\xf7}\x13\x14\xa9a\x13\t\xf1Y\x84\x1a\xd5r\xae\xf0i\xba\x03\xe4\xbe\xcf\xf2\xa5W\x10\x8bR?|(\xa5\x1c\x1d\xde+^%\x81\xf2\x93\xd7\xaa\x1et\xb99E\x7f\xb9\x98lo\xfb\xa2VEW\xf2\x8b\xa5x\xe0\xb7Lw\xed\x1aT\r\xaaF\xf9\x8b\xffU\x8a\x1f\xcd\xd9\x89\xb7k\\#L\x15}S\xfa\xbd\xa9#\x7fo\x12d\xfb\x1c\x85\xe0\xbb\xd3\xcc\x12\x11\xda\xf2\xda\xbfD=km\x1eY\xdeE\xc3\xfd\xa2\x1fF\x00}a,\x91\x00VH\xccx\xac\xacY\xee\xb0\xf8\xcc\xc6\xa7&4\xf6\xad9\x15v?\xa0\x7f^s\x82"\xe5\x88E!2\x18\xb1fA\x04$uH\t\xcdv\xa0\xd7}\xf6\xbc\xd3X%\x9b\xbd\xa6\x90\xce\xbb\xd0\xc9\xee\x87\x8f\t\t bN\x03NOCt\r\xdf\xdd:\xd9\xba\xfc\xe9\xb9K=\xe5\xa3\x93\xe1j\xf7\x95\x93\x88\xbe|B/\n\xab\x021,/\x15\xceY\x8e\x12J`\xd0\x90b\x18\x12\x01\x13i\xb5O\xc3\xe5\xb8\x9f0\xfaDpM\xcc\xa4=]\x97\x84\x0ch\x7f;\x08\xd3\x8a\x84\xdaJ\x12#2\xc4#mh\xa0Y\x94% \xa65\xe9q\xf0\xfd^\x85\xf0\xe4{%\x88X\xfeL\x18\x1c\\\x05\x1e\x98\xa1\x8a\x8b\xa7`\x05\xa2\x0f\xd1\xff\x17\xa2\xd1BU\x86\xab\xc4\xbf\xc8\xd5_\nh*\x1f\x9cro|\xfc\x89\xe5\x04a\xa8\xe9\\\xda\x1d|\xfc\x823C2\x19\xfd\x89\x1d\xf21\xd0f\xd8\x90\xa2\x08\x13\xa7rk\xa2\x97)s\x84g\xe57\x1eRU\xe6\xf8\xb4\x92HU\t-\xd2~c\xc8\xaeU\x8c\xccx\xd4\xe7\x8b\x8fqa\x0f\xbd\xc5\xce\xb6S\x1a\xe8\xf8;n\xfe]\x0bM~\x10<\xe4-\x087\xc7~)\xde\xbc\xd7k\xde\xf5Iy\xbf\x88\xbf+`\x11\xb0\xed\xda;K5E\x92\xa2cq\x0f\x87\xa4\xac\x9f\xfaJ\xebCQ\xd1\xe97\xfe]\rF\xb9\\\x10\xda%o\xd1\x8b\x82\xcb#\x17\x89\x8d\xa2jj\x8aO,C~\x03]\xfd\xa7\xdc\xb0v\x10\xc8\x9c\xcb\x9c\x9f&\xe0\x18v\xb9T\n0\xc2\x14Cq\xdb\x0e\x17\xf8\tQ\xf7\xab\xbaE\xf1\xf8\x9d\xe3UMm\xed\xef\xd3\xf0D\\\x07n\xdf\xcc3\x08\x1d\xdbv\xbf\xdb\x16\xb02\xd0\xad\x0cE\xb7\xee\x08\xce\xf2|\x89\xe2;\x8f\x80\xac\x02\x07\xee\xf6K|L\xef\xda\xd8\x1f\n\xc1\x0c})\x14q\x8f\xca\xa4\xb7\xcc\xc2\xcd\x9e9\x85H\x8e\xe07\x1a\xa6\xf2"\t?\x0e\xadt\x1a\xaab\xf4\x18\x0e\'\xd2\x1az\xce\xa0-~>\xa5\xdd\xf1\xaa\xc6-\xbd\x1a^\xa7\x0f\xa0 \xf0\x1a&_\x7f\xe1\xa4O7\xbe%dSrV\x99HI\xb8\xfb\x04\x89\xcb\xe9\xc2(\x01M\x93\xbf3\x1b\xb6\x8a\xb04+|\x9bn\xb1\xff\x80\xfcAa\xa4E@\xc82\xea O-\xd0P\x91\x1fV\xa3\x9d\x87\xd6b\xcbV\xbc\xa8\xfb\xdf\x05\xb91\xbd\xab\xa0XV\x08\x8b\xe0\xff\xc3\xe1X\xf0\x10F\x85t\xd4g\xf8{\xf8\xeb\xb6\xd31h\x92\xfa~\xae\xaf\xf6\xf1\xdb\x18\xe9E\x80Il\xd8\x82-\xcc\x91\xc4/{\x12s\xb8\xde 3>u\x9c@Z<\xec\xe8\x07\x9b<2\xce\xc8i(Wt[}\xec\xddqN\xed%J\x93\xe1.J\xd1\x00\xf1\x8d\x12`\x87\xb6\xbc\x0e\x08\x9bT\xc8\xc0f)Q\x90\x86>$\x10e\t\x01PL\xd5G<\xd3\xc8FX\xbf\xdfd\x02\xe9\x9a~\xd09\x0e0\xf1G\x04\xd2e\xff\x89\\\xe52\xdd?U\x05TP\xd0\xc9\xf4u\xcd_\xe4\xda\x06N\xdf~\x9b\xd8_[\xc0/z\xd5\xec\x88\xeao\x01Y4\xbdL\x1c(\xbdZ2fI3\x10\x1a!_\x0f\x08\x82\xfb\x81\x83d\xd1\t\x87\x07\xd6\xecS\x1a\x1cb\xfa\x89k0-\xc4\x91\x8dr\x10\xd7X\xefu\xbf\x1b\xd4R\x97\xb5\xca\x98\x165\xe8\x96 J(\x97||\rwZ\xf9\xdb\xb8:g}\xd6R\x01_\x90\x1f\xad \xba3sQJ\x1d\xb9\x1b\x12\xa6\xe81\xb3F\x90K`\xaa\xe9\xb3\xa4\xc1\x85\x9dsIP\xa2\xd1R\xf6b\x03\x95\xff\x07\x1eJu\xdc\xca\xb6T\xe80\xf1J\x06s\xcfQ{=\xaf\xdb\x0cx\x8e\xa3-:\x06\xdc\xdc)\x93j\xe9\x86G\xe4\x06\xd2\xb2\xae{2\x98v\xf9]\xe5\xaf\x10\x16\x14\n\x17J\x85]\xf5\xac\n\xdcM\xa2\xb9\x15;HIf?"\xd9\xf5\x97\t\xe8\xe1\x92\x16]\xfc\xd6\x1c|\\\x92w\x8c\xfeSh\xcf\x0b\n\x80\xc6?.,\xae\x12=rs"Me\x06\xb1M\xb4?\xac\xed\xd4U\xf2\x89T\x01\xa6\n\x8dD\x9a\x0c\x0bx\xa7\x01\x180\x08\xe9L\xbd\xcd>\xdc\xe2\xa5N\xd8\xcc(o\x9b\xc9N\x07~\xdc\xf8=\xb8fI0EQ\x0b+\xd2rS\x8c\x7f\xc7\xf1-A%}6\xd1\x86N\xd8\x9e\r\x18\xd3K\x19\x91\x93C\x06E\xdc\x9a\n\xaa.\xda\xcf\x13g\xd0o\x7f\xfe\xddC\x92T\xaay="\xec\xd5\xa8\x12\x130\x84\xd0\x98zgy\xec\xa7\xf6\xd76yv\xd1\x05_\r\x95\x16\xcbD\x12\xaf\xe0\xa3w\x06\x01\x03\xa8\xad\x84\xf2i\xc6\x033ba*#\xa5\x89\xdez*\x16\xb0\xa2\xce\xd4\x83\xcf\xef\xd5~\x13\xa1\xd6"fR\xc8\xbb\xd6?g\x1an!\\w\xaa\xaa\xcb\x8c]B5\xe5\xc0+\xd6_\x85=p\x90\xcf\xde\x92\xa9\xce>H\xec\xc8{\xf7\x19\xe8\xd8\xf2\x8b\x1e\x9e\x8d\xda1u\xfc\xb3;V\xe8\xe0\xfc\xb0\x86Sy\'^T\r~,^\xe1\xfd%\x06\xb4\xe0\xef\x98\xb3\xc6\x8a\x11&,&\xa2\xa9\xbfd\xb6\x97\x8b0`\'\xef\x80\x99\x94\xf2\x18P\xb4_\xe2m\x16xo{\xe5\x14-Qc:5h\xe68\x08\x99\x85)\xb2?_\xb4\xcd\x1b\xd4s=\xf3\xc2\x95\x08\x02[e\xe1\x19\xd0\xaaF\xfb\xd3r\x96\xe1c\x8c\x00\xdf+3\xc8\xd2\xcd\xff\xda\xdb\xa8\x0b=\xd2\x1b\xa8C\x89\xf4\x94}\x12\xd3\x86\xa8d\x86\xd1\xcak\x8e\xac\xdbY\x04\xef\xa75W\xfe\xa3\xcc\xed\x7f\xefQ\xbe j \xfa\xa6\x9a\xf0\xee\x88\xf1\xa2\xf2P\xf8\xab\xbc\x12\xc0\x8d\x86n~\x8fyz|f\x1c\x98"\xcf\xee\xfb\xc4\xf40L\xc5\xc0\xe4}\x1f\xfcJ+\xbac\x03\x0fr~-KA\xab>\x1e\x80z\x9eE\xab=\x1a\x87\xf6G\xbf\x8c:\x97S\xc5\x81\x1d\x87\xf4\xbb/\x00\xac\xb9C\x88\x14+7z\xa2\x82\x18\xe6\xa8\xa0Hj^f9n\x00q\xc1\x0f\xe0Wh\xd59,\xfeW\xde\x88\xf5\xe5\xbc\x88\xb4<\\\xf0}\xa2\x81%\x0b\xba\n\x00"\xae\xf7\xa1\xc6\x7f\xc9\xeaT\x80\x1a\xb5\x15`\xc5[\xf5\xea\x96\x0e\x12\x0cP\xbfjl\xe4\xc4\xd0\x06I\x11"\xe7\xfe\x18Q\xccovU\xf3\xdfc\xb1\xdf\xec\xdce\xe5\xa4\x94\xa4\xad\xe9\x8a\xaf\x8aH\x93/)\xf4M]*\x0bF\x1a\xf4KUOq(\xcc\xf0\x87\xa8*-\x80\x1b\xf8\x94\x05&l\xa3p\xe7t\x17\'\x9f#\xb4_\x04\xfbB\x9c\xeb\xbcR\x82Y\xca\xcbv\xea\x8fmM\xda\x1a\x13}U]iI\x08\xc6{\xd09K5)\x10\xce\xca\x81.~\xf7\x1ao\xa0\xdc+\xf9}\x9b\xc7bP\'\xae|\xd3N\x86\xd54\xe7\xa7\xe6g\xe5K\xdb\x1d\xcaWoj\x15\xdc\x11\x9b\xe2v\xec\xddqtE\xe7\x85\x0f\xc8\x80\xa3\x98uW(#F\x0b\x07\n\xe4\x9e\xfe\xd5qp\xcd\xc9\x97\x0c\xd8\x8d\xcb:9\x14r\x8a>=\xbe_2\xad\x99\x1bz7\x17\x94\x8a\x8c\xc4\x89z\x88y\x860o\xdb/q0\x87\x04\x9c\x83\xecV,\x0ev>\x11\x9f\xd3l\x1c\x0f\x02yU\xc9\xcb[\xa7Q\xa9lV\xd65=\xda\x9a\xce\xdd<\xfc\'\xa2\xfbw\x0e\x01I\x18\x1b\xc9\x9d\x11\xdf\xdc\xcb+\xddg\x82\xc1/\xf6\xd6\xf7\x8f0\x91!g\x9aR::\x1b\xd1\xdfD\xaeI\\a\x9a\xb1\xb7\x82\x9a3\x95$:\x82\xb0\xbd\xb5,c\x80\xbd+\xeaza\xf5w]\x96\xc9~\x86\xe7\x16\xb8\xd9\xb2F\x1d\x88\xc9=\xb0\x04\x12\xe81\xc7\xad\xc3\x0b\xce\x91\x92\xac\xab\xa4\x1e\x16\x8f1@\xa8;\x8c\xa0\x0bAF\xc9:w\xd6\xc5\xab\xb6\xeb\x1e\xce\xf0\x06\xee\x8by\x98\xc8grf\x06\x10\xa1\xce\x0e\x05\xb9\xb5\x16k\xefb>\n[,\x91\xeb\xdfeJww b\xb0";\xb6\xa8\xab\xd1I\x85\x0ed\xc1n\xac\x85-\xa7E\xe3\x98>K+\x17ul\x9f\xf5\x9ehD\x04<\x16\x8c\xb7-x\xaan\xb6\xb2\xbd\xda\xec\x80\xf4\xb6S\xd5\x1d\xc3\x94\x8d*\xce\\\xf9\'S\xabT\xfc\x8a\xea~\xe5\xfbgO\x85\x15\xd9C\xbd\xe3\x14\xa9CB9\x18\xf2\xeb\x9d\x8c\x8c|&~]\x9d\xd1@\xecl\xc9\xc9\x0e\xf1\x8a\x96Q%\xd3\xb7\x8c\x9d\xbf\x02\xa3^\xe1+V\x06\x9brB_K_\xdd\xc0z\xf4\xbf/\xf5\x05\x06O\xd7};\xa6\x91\xa4\x02s\xf5\x95`\xde\x1f7\xa9\x8e\xbc\xb3\x05\x0c\x80\x1d6\x87u\x82t\x14,\x81)\xbc\xb4\xae2\xaf\x9aD\x1a~\x173\xeaY\x16\x1a\xbc\x8eX\x06\xfa\xa8\xae\xe6|*\x83,>i\xa1T\x1as 8\x1a\xfd\x11w\x10\x0b0\xfb\x88\xec\xf0\xbb\x1d\x97\x95\xff\xa7\xb0=\x05\xad\x98\xa7\xfd\xd3Lc=\x9c\x18\xffeIh\xe4\x04\xaf\rw\x82\tj!VijS\xee\xf5\x08\xce\xf9\xfd\x83;3*GVY\xda\xc0&\xd4\x01\xf6j\xc1\n\'n\xac\x07\xa5\xc7Ew\x84\xbe\xa2\xe12\x8d\xfa\xa3\xde\xf6\x11\xfd82\xae(\xa9>\x1aN\x0b\x80)\xc6\xf3n\xcd\x8f\xc1\xa3Uo]\x81F8\xc8\x96s\xfa\x00\x92\xbel\x8d\x92\xb9Z\xb2\xe3\x02\xa5V\xa6\x9b\xeb\xfe"\xc8;\x904\x8c\xdf\xdaU\xd4\xa3\xb2\x92\xc9\xf9\x9e\xa5gqrX\x14\xfe\x8acg\xf3\xbc%\x04\xcd\xba\xcfB2*\x90\r\x8d\xf9\xa6\x17\x08\x93\x8cg\x1f\xb1hB\x94\xeb\x9f\xf6\xf9\x8b\xa3Ga\xe9\xff\x02\xaa1\x92\xe5\xf2\x8a\xde\xa8>\xfb\x8a\x05Z\x11I\x8b\xfc\xc7e\xee\x90\xed\xdf\xae\xb3Z\xb17\x18\xe6\xbd\x12t\xc8\x82\xb3\x89\xda_K\x98VM_W\xe1\xa9~5\x81q\xe2\xcf\x93RD\x116c\xc2~\xf3\n\xaf\x01!g\xb6\xfe\xe9?q\xc6\xdd\xdd\xa7m\xc8\xb4\xf2(0;\xf4\x19?8\x80S\x13^K\xe4]A\x9e]\xc93|\xd0N\'[\x1e\x9c\x17\x8b$H\x8f\x7f\xa4\xe1\xda[\xa3m\xe2\xa1~\xb64\xb9\x146P_b=Z(\x1d\x85\x0e\x0f\xea\xa3}CsU#\xb4\xf6\xb5\xbd\x0e=\xa3\xc1\xbc\xd3\x8b\x81\xb4\xfe\xbc\xe7\xcaKH\x96\xd0\x15E.Ov\xa0\x8d\xcfC\xf2\xc4Rh\xe6V\x98$H\x82\xc1\x03\x9f\xcc\x7f\x17\xdb\xa1g!\xa8\xd7+\xed\x84\xeb\x04%\xa4Z[\xacg>0\xdc\xa3\x80\xab\xefY*zf\xcbp\xd1\xe0\t(\xbc\x8eKN\x98\x1f\x0b\xb0\xc5\xa3M\xaf\x08\x1aP\nD\xad\xf4\x9c\xa5\xe3\x82:\x0c\xfc\xd59b\x97\xfc\xe8\xbc\xbau\xfa\xf6I1J\x9b\x86+\x03P\xe2p\xb0\xb5\xf9\x87\x0ex\xb0\x1c\xcf\x80N\x8aN\xf1\x02\xe9eq\xaajkR\xc9(\x07M\xab$\xfc\x07\x84{z\x9c\xe4\xa3\x95\x90\x02<?o\xf7\xaba\x80\xa89\xfcu\x99\x8b\x0e\x19d\x01!\x14b\x83tx\xe6_\xf4\xcd\xd3hx\xbb\xf1H\xb3x=\t\x8d\tl>\xa7\x1a\x9d \xa4\x9b\xbf\xb5\x96\xe4\xcd\xff}\xb2\xd1\x13\xbe(6l\xe0M\xae\xd1\xd4\xa6,\x9e\x98\x03\\\xf7R\x1e\xc9\x91~\xc8\xfet\x8e\x9d\xac\xa8k\x1e)\xb9\xad\x82v\x9d\xb7\x06\x1a\x96\x1c\x8ea\xeai\x98\xb5\x83\xa6\xf8"\xc5\x1d\xa7\xc8q\x9d\x90]\xc0u\xd3"\xf3H\x17+\x04\x13\\\x95p\xf8\xa0\xa3V\xd6\xe8"\xe3ov[\xba\xd4\x19\xa2\x0f\xad\xeaL\xba!d\rI\x02\x95Y\x80\x8d<\x03\xf6\xa6\xaax\xd2[;d\x11\xa1\x94\xe6\xb0b\xb1\x160\xa1\x8c\xb9\xc8*\x15\x9d\x16\xa2\x99\x17\xf4\x90\xfc\x7f\xb8\x02b`D\x97L\xd30\xbb \xe8J\xe8\xb3E.w[\xc1+\x05GBn\x92\xee&G\xce\xb2~C\xaa\n\x02\x82\xb33\xe8\xa0\x19\xa5\xbc=jjs\xc6\xcb\xc4C\x80os\x9aY\xc4\xb4{\xad\xe7\xc1%\x0fH\xcfn\x7f9\x9f\xb5\xd2\x0f6\x94\x08\xfc\xb3\xa9R\'\x0c\xb9\xb9\xf2\x0f`0>7&W#{\xd6#\x89\x92\xbfy\xbf\xeeq#-\x90\xdbx\x9c\xe0\x92\r\xfc\xe8\xd3\xe6\xaej\xa6*8IY47<\x1b\xa3\xa7e\x85\xcf\x84z\xb5\x1c:O\x1b\xcf\xbb\x9f\xc0\x1f\xd9\xed\xef\xb8\xc5`y\xf9\x1a*{\xb6\xadI\xa2\x82zIdI\xf2h,\xacz~Q\xb6\xcf\x18F\x1cD\xd7 UB\xf1\xbfi\x80\x9er\xfa\xe7\xfe+\xad"Y\x0e\xe9\x85\xa6\xaa\x1b\x1aB\x1aX\x04a\xb5\xf8\xb7V-W\xaew \x94\xf0y^\xbc\x9ee\x91\x1f\xef\x97?\x11S\xa4Z\xb8sa\xb1\x9b\xb2Ib\x8f\xec\x1c"d\x14\xb0\xfd\xf4w\xf2\xc0\xc0\x83\x03\xed\xe7\x8f\xdb\x06N\x891\x02\xf2!\xf7`\xa2\xbf\xb8_Y\x13\x92E\xe0\x93\x9e\xddN\xf3CB\xfb\xb7D,\\\x83\xc5a\x1c\xaa\xcf\xdd}\xde\x8b\xe5\xc8\xc4\x98\x8f\x9a\x8cZ\x18\x08\x8f.>\xd7@0\x15\xb6D\xa25x\xa2\xe2\xf2\x15\x10\x95M\xa1Y\x0c\xe3\xce\xa14\x02A\x95\xbeY\xc5\xc5\x13\x8f\xf4\xfaX\x86\x0c=\xe3\xba2\xdf\xe0\x88H\x93\xf6^I\xe8\xe0\x8e\n\xc7\xf5\xe3J+3\xfc\xd7\xff\xfe-r\xcf|5\x1eD#\x00L\xdd\xbfrC\xfc\x17y\xd4\x98\xee\xd3U\xae\x01V\xec`\x0b\xcfT:\x00\xe8\xb7#\xed\xaa?\xc6\xb1\r\x92\xaf\xeb\xc7\xdc\xa0\x17\xf7F\xadF\xed\xa4C\xfbm\xdf\xaa\x1f:0\xe7\xa2/\x82\xdb\xb5\xe8\xbb\xd0\x08\xf0i\x99t\rT\xe8\xe4\xb6\xc3U\x90rCFb\xbd\xeb\\\xa2V\xda\x9c\xdd$2\xe2\x86b\xefZ\xc3=*\xcf\xd82\xbb\r]2\xdd~\xbf{wM@B%~\xcf\xe3\x97\xb0\x14A\x90\x8f[M\xf8\xda\xb3\xf3V\\\xec\xd0\x84~\x16\xc5\x06[U\xd0\xeb\x1f\xed/\xd3C\xd3\x8e{\x99\xc5\xcf\xf2\x98\xdf@\xd1\xfc\xca\xee\x9f\x16rd\xacj\x07\xcb\xf6\xb0>\xa9\x14\xe0\xb86B\xb4`\xac\xd85\xb6\xc8\xc5\x90\x0e\x83\x9c,\x19\x8fk\xe5K\x17Y\x80\x06\xc3\x99U\xbd\xd9_J\x97\xfd\x88\xd5\xa8P\xccA\x04<E\xe4\x14\xa9h!\'\x7fNO\xab\xef\xb9M\xd0\x0f\xc5\xda\x06\xa7B\xb0}\xb1\xa0\xae\xc7\xf2@+m\xfe\x83\xd3\n]\xfb\x81\xcb\xe2\x81YL\xafO\x81\xb7\x88\xcd{C\x10-y\xac\xd5|\xe9H\xba\xcfo\x19\xe6>\xc4\xd9\xad\xbe\xa2\x08\xab\x0e6\xce\xe4`\xcb\xe3\xe0t\xfeZ\xa7\xa0 \x86|\xb1\xa4M\xf9\x12*\xda\x0c\xd4\xe8X\xd8\x94\x04>\xae\xcb\xcf\xb8^\x9bT\xf3\x0fj?\xee\xbd~\xa0\xa4w\xec\xbc9\xe9<\x884\x93\xf7C\x1a\x96\xb3k\x9aG\xc0\x1f=\xf0*\xc8e\xbdU\xf5$U`\xdf08]2c\x0b\x14\xa4\x82\x0b\xee\xc3G\xabc4F\xf0\x1d~-\x0f\xeb\xeaj\xfd\x12s\xe8S\xf6\xb8\x8d\xe6\xa2\xaf\xab_p84BUk\x86\xf7\xd4\x1c\xe8g%J\x87R\x80\xb1\x10\xe3\x05\xd9\xddm\xf3\xbb6J\xcd\n?\xb8\xac\x18\xb3#\x8b,\x97\xb3|\x80\xc9\xa8\x8174\xfd\x9cY$\x1a\xc3\x05_I\xd1\xcc\x03\x00\x89}\x1c[\xa1,vTh\xccC\xefH\xf4\n\xd1\xb3B\xff4\x9dg\xe99\xf0!\xf3K\xc5\xe7\xe1\x83\x94Mu\x8aA\x04<ShW\x95\xbc^\xe2\xc5\xdc\xc2\x0f\x0c\xe9;\x07z\x9b\xc0$\xbf\xdb\x0c\x99\x98\xf3\x80\x937YrT\xf7\xe8\x82GCI\x9c\x12rH\x18\xebN\nqq\x13\xde\x91\r\x8b\xeb\xd5\x02\xfb=\xe42\xeft\x1f\xd5\x18S\x8f$s\xfa\x1a\x08\xa5\x07\x07\x16\x00\xa5D\xd32\xf3\xc4\xab=b\xf9g\x1d\xfd4\xe9\xe7\x94\xed\\\xae\xce\x82\xb0\xa4\x8fQ#\x92\xbf\xb5Q\xe7v\xab(\xfb\x01]Xa\xd5:\xa19\xa2\xb6\xb6 \xc3\xb0"\xa0{\xf3IR\xac\xab\xe3o\xa0\xb0/\x80/\xd3\x15\x0bY\xea\xfd|\xb78\xee(}\xca_\x91\r\xe7\xb4\x9c\x90\xf2\xd4\x1b\xbc\x1f\xb2\x8a\xe0\x81\x91\xb4\xb6\x8d\x0b\x19\x81J\xb0ig\n<\xe3\xb5l*B\x03%_\xdf*\xe5e\xe1\x83\x99\x91\xa57+\xb7>\xf4B\xddK\xc2d\xb5\xd638\xf9\x90Q\xe8p\x9a\x1b\x036HFw6\x89\x1f\xac\xba\xc7gb\xf6\xc0\xd6\x7f\xd2q\t}c\xef1\x93D[\xc4SD"w\x88\xa7\x0e\xac\x06\xfa\xe3J$\x9ez\xe7\xbb\xd5~4\xb1r@`\'SN&\xb1\xac\x14\xba\x12\xa5<\xde\x8a\x1e\xf4\xe7\x1c\xef\r\xca2\xb1B=v\x9e\x89a\x97lU\xa1y\x01\xcd\xdf\x93o\xcf1V\x93\xb3eR\xb3\xcb\x8aa\x95\xc1\xf3\x1c\xba\xa5f\xfa@1\x1c;\x96\x15\r\xff\xdb??\xf0\xfd\x00\xa4\xb6\xacg\x86q\xd2\x99\xa4\xe4\x7fA\x16\x0e6\xb6/\xfd\x98\xc0\xddl}]\xb5q\x8b\x8c\x9a@My\x95\\$\xef\x01\xc0>\xce\xa4\xcf`\xbf\xb0\xafBNWO\x89\xe0$\x9f\xed\xc2\xe2\xc2P\xd4 \xd0\xe9[\x8c\x13L\xad\x8e\x00\x81\xc94T\xd5[\x06#\x9a\xcf:9\xaea\xe9\x94\n#\xbaM\xb6R\x99\xddV\x8b\x1c<\x1f\x0f\xa5\xa8\xf2\x15\xbb\x06\r\x12\xee\x86Q\xfcd\xce\xef\xbe\xe5xZ\x8c\x05ZS~\xcd\xce%y\xbbMy\x9e\r*\xd1!\xf1\xfa\x07dH5\x01\x976s\x063k\x92\x95j\x81f\xb8\xabm\x8a\xd7\x11\xa9\xf2o\x01[7s\xea\xfb\x1cUp\xe8\xe1\xdd\xcf\xbe\xd9\r#O\x9d\xf3\xab\xd3\xe0T\xd7\xce\xc8A\x16\xa5\n\t\xe6\x81\xe9\xf1\x9e\x19\xcc \xc7\xb3Y\xd2v\xd9\xa3\xc7\x8d\x89-\x86uO\xa4\x1dH\xd4\xe3\xc4\xdc\x07G\xd8\xb4\xf0\x05B\xcc\xcce8N\x8ci\x9e\xfc~I\x8b,\x05\xfa\xe2D\xb4["i)\x80\x7f\x1d\xf6u\xcdL]\xe1\xd7\xe2UNS\xca\t\xe9U\xf5S+\xa3p\xa4\xf3\xaf\xd6\xd6x\xee\x0b\x13\x1a\xa4f\xc0"\x9f\x8f0z\x92?\x8d\x95\xac95\xda\x06p`\\\xd7\xf3+\xd4cN\t\x06\xcc\\\x987\xbf<\x0c\x92\x87\x05\x80\xad\xc1\x8f~}\xff\x8d\x85;\x18\xbd"bT\x12n/`0\x89V\xc3W\xa4\x9biY\xb8\xf0\xdd\x15~\x86d\xb69n\xf8\x0f4\xd3\x88\xfa\xaedX\x8c\xb3\xe3@\xb5Fs#\xadB\xdf\xc9\xbd\x9e,.(e{\xbf\xdc$\xad;\xb5\x80\x12\xf6w\'s\x17\x91B&\x16\xfc<\xecL6\xd8[.\x03\xe5\xb7\xe0/\xf6\x89V\x06\xeaA\xe3\x8c7\xabX\xde\n\xb2\xf3p\x11g\xfcL\xefV2\x96\x14,h\xff\xe0qks\xd2\x93\xb2\xe3\x91lA\xfej,\xce\x98\x84\xc5x\x8e\xcc\xa0\x8e\xaf\x05\xe0$.d\xdd1\r&v\x02\x95]\xcdixT\xde,\x19\xa8\xefXW\xc2~\x95\x92Q\xaf\x94?\x9e5\xc3.N\xc8uw}\x12\xe6\xa79\n\xb6.Afg\xcd\xea?S\xa6\xd0\xe0\x8d{v\x0c\xf6m\x83\xf6\x8a\xbc\x15>x\xa4\x88\xb9Gg\xeb\xa5\x85G\xf8\x02\xd9\x06\xae\xd0\xce%\xd3\xcd\xe2\x18n\xc1|Q*^a\xe0k\x0b\x128\xa1\x80\xd4\xc5\xc5Q\xc7:\xba\xb34\xd46\x8a\xae\xbb2\x8ch\xe0\x90\xf9\x95(69k\xc9\x97o\xc1E;L\x9a\xdb\xa1\xdc\x91\xd0\x9b\xfcs0\x95\xfd\xd5\xe4\xca\xbe\x89>0\xfc}\xfa\x8f\xed\xd9A(\x0c\x9al\x8eK\x9a\xb3Y%j\xf9\xa4=\xb2\x94\xefW\xf1*K\xac\x15Dy\x1e\xecFd\x0c\x1bigZ~\xd0L2\xfe\xfc\'/U\xd3\xbe\xc6\x8f\x8a\x8cv\xa2\xf1?\xac\xdb\xa1\r\x1e\xd6\xda\x0f\xf4\xfa\xaf\xb8c\xb3\xb9\xaaF\xfav\xf9\x10\xfb0/\xcf\xcc\x15\xe0\xc1\x98\x896\x18\x0e\xb2\xa4\xf6;\xbe\x8b\xa1@3P[N6\xd2\xd7E\xcc\xff\xce\x9b1\x89cf\xb2+yu\xd9\xd0\xf3\x12\x10\x04lb\xe32_\x8c\xa5\x166\xc4\xdf~\xb2V"\xbf\xd9\x0bla\xb8\x92\x8e\xa0\x890\xaf\xd6\xf5\x81\xd21\xfe\xf5\'c\xba\x91\x9b\xc1\xbc\xe5\xc7\xbe\x91\xf9\xd6\xf0?\xdb\xb0*\x97\x99\x7fm\xc2\xa9\x9f\x02\x0ec\xe6\x91\xf9\x10 \xfd\x11^\x0f;\x85\xeb\xb6[`\xca\xc3\x01]\x15Y\x84\xb3\xf4\xcbge^2\xe5]\x04B\x16u$/Gv\x1e\x9f\x8e\xe9_\x9d\xd6\xa5hH\x17\xb4\xff/\xcf\x18\x1dA\x10\x16D\xd3z\xf0/\x1f\x85\xdd\xda\x11\x9c\xf7\xd4<M\xab\x01r\xf7\xf6\xd1\xac%Z\'\xa7\xa4\xc7:m)Y\x1c\xab\xae\x0b5\xac\x9b~\xea\x92\x90\x81<Pm\xa0\xa8\xc2\xceV\xd9\x12\x18\xc8H\xc2\x80\xc4\xdd#\x1bP\xef\xd0u\xa5ME\x91\xee\x8c\xf0|i\x12\x8d\'\xaf6\x98N\xfd\xdf?\xf7#\x1e`\xc2\xf0\xad]\xce\xbbcG\xb0\x91\xd1z+\xc8\xea\xb7\x92\xed\xec[\xd1Re\xc1u?\xd2\xff7\x11%+\xf6[\xdc\xfb\x1f\xf7\x0e+\x0e\xc9l\x03\x04\x03f\x00\xdd\xa2s\x07\xac\xa6\xaex\xeaI" \x8c\xeaS\xb9i\x02\xd4\xdb\x03\xecu\x86M\x8b(\xfad\x11\xe1\xceb\xf6\xc8\x83E\x95\xd8!>XY@\x1e\xfd\x08\x85=N\xca\xa81S\x84\xfc#\xb0\x94\x8d\xb3B(H\x9b\x97\xdc\xf2)\xe2m\r^\xccp\x8c\xe7\x90\xe9\x83\x007r\xf8\xa9\x8b*\xd0\xadF\xc1\xd8\xf9\x9d\xb6t\xa77x\xc91@\xa0\xb2a0\xe0d\x8aX\x8c\xfb<.\xa4ur#\xde\xbb\x99C\xee\xd4VI\x93\xab\x01\x0f_\xf2\xa8\xbaS9\x05Br:\x04?\xd4`36\xa8(\xb0\xbd3\xed\x10k\x0e\xdb9\x1d\xf1\xd9\xd9\xdfGH|\x9d\xad\xce%\x8c\x10U\xa3\x97>\xbb\',\x1a\xc8\xe7\xe8?\xf8"A\x14vN\xc2\xb4H"\xdae\xd7\x0bD\xbcG\x01\xde\x9dJP\xc0<ny9\xa8\xc6\x97\xe6;\tA\x05f\x86\x86o[\xc2\x9f\xa1\xe2\xb0;R\xd5\x92\xe3\x07\x15\xbc\x00)B\xc7ju\x16\x05\xa3\xfc\xab\xd9\x02\x99<\x1c\x9735\xf4S\x976\x8aZD\xee\xb5\x071"\xabr\x90\xf3\x85\x88\x0f\x12r\x94\xf8\xef\x9cB\x13\x93\x08\x80\x7fo\xa1\xee\xad\x1ak\xd3\xa7\xb8\xeaZS\xa4\xbe)\xb8&\r\xf6D\xe0\x0c\xe6\xf4\xc6i\x10\x0e@\xcc\xef\x94T*\xefE \xab\x9cy\x92\x1a\x8b\x80\x96\x00\xbd\xed\xc9\x9d\xd8nN\x99\xa3\x1e\xba\xa0\xcbD\x91c\x99\x9cn\xaeD\x11[\x0f\xe3\xbe\xe3\xc1U\x84\x84\xd1\xdc\xe1M|ap6\x82\xbf\xf1G\x8a.\x12\x82\xfa\x8fTYIm\xea.\x00\xec\xd4p)\x14\x94&\x8aD\xe1-\xb8UM\t\x06"{\xc8\xb8\x02;\xd8E \xad\xda\xac\x869\x10\x9d\xcb\x89\xa5 L\xdc\xb9\xb9\xe7\xa4\x80\x99jt\xa9Wt\xbc\x92\xeaWT\'\xc5)#\xfd\xd9\xf4\xc9\xc8\x92\xa5N\xd3\xa7s4\xb2\'\xee\xd7\xdc\xb2\x85\r)\x96\xec\x15\xf2x:\xcd\xd5\x84\x19/\xd0\xda\xab.\xdd\x9168\xadA\x9f\xfa0\xb4\xf8\xdb\xf5\xe7\xf3\x13\xbf}\x05n\x1a\xfc0iD$\xee\\\xb8\x88\x01\xfaQ\xb4\x12\x01v\xa2\x01\xcc\xde\xa7\xf7\xe6\xf50\xc9\t\x90\xa4\xef.\xff\x10U0\x8a\xc6\x80\x9a!\xb9\xfdJ\x9c\xdb\xec\xa0)\xae\xf5\xc2#\xb3!=+\x1a\xedHUC\x97\xa6\xf8\xb8I\x86\x8a\x89\xae\xad\xa5P+\xea\xece\x05Vp\xe5\x18\x8a\xb56\xbc\x0f\x08o$\xfd\xa0\x1f\x7f\x1c\x9f5g\r\xc6\xaf\xa27\xb8\xfdG\x03\x83r\xaaTD\x1a@l\x0b\x16Ii\x146c\xf0\xc7\xe0J\x83\xb5\xb9%\xeeT\xd2\xbb\xac\x82\xdfj[\x9fUrJ\xf4\xe9\xf1|+ \x1b7\xd4\xa8D\xfe\xc5}\x98\xa4\x9b\x94\xdf\xa1\xe0\xbf`\xa0o\xdbpt\x9b\x8e\xe1\xb8\x1e\xa5D\x13\xd3\xa4r\xaa\'\x84.\xd9u\xf3\x9a\xc2(8"\xb1M\xcaG\x89G6#\xd5\xfdk\xccH\xd1\xd1\xf8\xb9\xbc\xf4/\x18\xb9]VR)\xa3\xe2\xe1\x87\xf9hQh\xb8\x9c\xc7 Z\xe8E\x9d\xbd\xfb\xe7F\xd1\x03P\\\xfer\x9d\xd5\xb4\xfe\xaf\xce\xc3\xd6\x9f\x11&e*Q\x13\xee\xee\xa0%\x9eM\xbde\x7f\xaf\x83\x1b\x03J\x99\xf7\xb5\xcf\x93a\n\x83\xc9\xb24\x05T\xb8\xbc\x99W\xa8v\x84!\x13h;1\x04p$8(\x99zV\xc6i\xff-\xcb\xc6\xa6N\xfev\xd7\xdcY\xc2@XL\xa5_\xcf\x80p\x00\xa4\xa54M\xa4\xf2\xd60\xdd \x95\x1dB\xf0\x83T\x83\xf7\xb7W\x89\xe7eu\ni\x9a\x84Ao\xb4%\xc72\xe6\x8f|\x10*\x00\xccJ,\xdd\xc0\x0eEU\x08\xc6\x12|\xff\xdd\xc4B\xc9\x1e\xc0<\x96\xad\xefi\x85\x02\x04\x80\x18\x9ek\xb0\x0f\xf1\xfd\xeb\xcb\x8en\xba\x82V\xd0~\xb5\x8ctJ7\x1bg\x1a(y\xad\x05\xc2\xfc\x1d\xc4h\x14\x8b\xf2\xd6u\xe4%\xbef\xf56\xe34\xc2\xc4\x94\xbeK\xad?\x8eY\xd0E\x06\xa1\x92e\xa0@\xe7\xf6\xf4\xd7\xd0\xea?J\xb1\x00\xb0\x96\x8e\x93J\xb2\xe1zO\xd5\x92\xef\xa7\x81\x1a\xcf\x1f\xc2\xc3\x13Z\x17e\xc4a\x9d[\n g\x97\xd4\xb8\xd3\xf1\xb7ub\xef\xa8\x05\xdd#k/\xbb\xdd\xe2\xbe\xa8"j\x00\xf7\x18\xae\xe2|\xce\xbe\x95z\x83\x9fG\xba\xb1\xe4 l\x8e\xd0\x96\xc7\x01\xf8\xba\x01S\x87\x06\xbc\x15\xca\x1e\xecZ\xba\xbaV\x19\xda?\x1e\xe0\xd2\xf1\xe1[F"8\x8e\xed%pX\x91Y\x82\xe9^\xcbq\x1e8\x81\xcbfgm\xf7\r\xcc\x02uy\xf0ID\xa8\x85)\x05\x15\x12\xc1\xc8\xa7\xe5\x08\xd7\xdb\xcd\xaa\xdf\xa8gC|\xea\xb6e\xcd\x0e\xfa\xcb\xe7\xf8\xeagf\xc5~\x9a\xd5\x0c\xed\x06S\x94\xdb7~\xb6\x9dE\x7f\x17\x1cd\x19\xe4\x04\xca\x17e\xbeb,G+\xfdm|\x86X\x8a\xb7E{\xcc\xdc"\xa4>\xfc\x1e\x0e\xf0V2\xff\xadU\xed9\xd4\x10\x15\xc0D%\xb9 u\x10[u\xd4\x0fk\xb7\xb2\xff)Vb\xb7\\!\x96\xc5\xcd\x1d&\x97\x9a\x12\xf1\xecU\x85/\x99\xa5\xd0\x03\xb0\xc1j\x89\x1cQ\xd102\xea\xa0\xebB\xbf\x17\xb4>\xe9\x17|\xe1\xcf\x9b\x88u\x84\xf4\x139|<\x91\x00\xf0\xb5\xb4?\xbb,\x9e\x02\x95d\xf2]\xc2\xc8z!m\xe1\\QW\xba\x8c\xba\x85\xdb\xa3\x10r\xe6z5u\xda\x04Y\xec5\xa6\xe6O\xf4\xb5\xf9\xe2\x9d\xef#\x16\x96}X\x1d\x7fe\x82t\xcbV\xa3\xc4\x8a\x01\x19\xf8\x17\xce3\xd3tu$~\x9c\xe7\x80\x9f|\xaa\x13g\xa8\xd8\x95;?\xc8\xe6\xc6\xda!{0\x93\t;L\xb7\x8a\xa7K\x1e\xa1Q\xa6\xc0\xaa\xf7\x90\xed\xf1\x94Us\xbe\xdb\xc7\xc7`\xcd\xe0\xad\xdfv\xda\x8d\x0f\xb0y\xca\xcbb\x975\x12s\x1fW\xeas\xb6\xb6f%\xf9\x9c\x13\xf3\xa8\t\x19\x1f\xff\x16g H\x1d\xd6\xcb\xff\xed\xd7ED\xfe\x04\xd0Tx\xff=\x13\xc9Ra\xa8-<\xcf\xdbK[\xb2C\xbf\xcb\x13\xfc\x16=a\x9b\xbc\x96~\xa3\x07\xe0K):\xa8\xfb\n\xbe\xa2k\xba\xc9: :\xc7g\x12\x8f\xdf\x8e>\xd8\xd5\xfd\x98\xfeZ\xeflz\x8f\x05\xd7\xa9\xf6\xc9\xee?\xc32b\xf80\xe6\xef\x86\xd9P\xacB\x00`\xdc\x9b@O\xb8\xfd\x83\x16I\\7X\xe3\xb8\xb1\x8c\xeb\xd7=V\x80\xdd\x0be\x15 \x1b\xa2Z\x88\xc6\xd6\xfe5\xc2\x0eT\x02\x87C\x93Of\xe0o2\x0f\x1a\x06}\x9c\\N\x92\xbbT\xac\r\xaf\x98\x05\xa9\xcbthRk\x13\xb6\xc6\xc5\xed\xdc\xbb&\x9e\xe4\x19\x8c\xa9\x11)\x08\xf1}#\xce`\xe0Ff\x1b\x95\x93/\x88\x05P\x1d\x91\x07\x9etX\xc1\xab\x8aY\xe2\x83\xf0\xbe%\xc7\xcd\xe7~ \x92KO\xb9\xf9\xb7\x97\x02\x10\x11\xa6\xbd\x1b\x95\x00\x8fc\xf5\xf4T\x05\xbe\xf2\xba\x9e\x95E\xd6\x1d\x05}\xbfh\xd9n\x1a)|\x04\x96\xcd\x0cL\x82\x80\xb9\xfd\x9dp\xa2\xf1\x1e\xf87;X<\xf2\x96\xa0\xb4\x96\xf6\x1a;\xef\x1b6\x16\xa0,\x02\xf2\xd5o\x86\xb4\x99J*t\x88Kw\xc2\xa2\x17\x9e\xf5U\xa4\xe9Ef\xf0\x127\xd8G|8\xb1]\xbe\x90-\xa2\x08\xf6twJ\xf3z\x1d\xb2\x96C\xf8@\x0f\x13\xebxN\x90l\xfc\x8d\x9c\xf0\x1b%RFTs\x8fw>\x9a\x02g\xd5H@\x99\xe3G\xa8r\x91\xc2\xefA\x1b0\x05\x01\'\xf2\xef\x13\xca\x04\x84a\x1d\xc0\x05+\xfa>\xd10t\x9b\x13%\xb1,\x0b\xb6\x06\xfb\xb9\x8c\x06-\x8a\x96\x98\xf3K\x8a\x81t?\xebJ\xd0\'\xe6\x8b?\x06\x99x\xad\xa2\xa6Z\xef\xd8v\x08\xb7\xb1W\xe9\xd0\tM\x89\x16x\xe9\xb2\xa8\x93\xeeQ\x16\x89\x86\x05\x9e\xa6\xdc+\xdf\xc8c\x88\x8c\t8\xb1~\r8\x9e\x1d\xce\x17\xe9\x0c\x7fP\xd3D\xfe\xd1\x0e\xafo\xe0\x16\xf6\xa2=\xdea\x9b,?/<\xc6bnZl\xba\xca\x03\\\xd0]\x10\x8b\x08\xdbG\xa5O\xd5\x12e\xe68\xc2\xcb\x93X\x10.\x96\xed\xfa\xd9\xff\xe1-\x0f\x85\x07z\x80\x9b\xabNY\xb4\xf6\x8c\x1f\xaf\xbb\xdd\x08\x8a\xe9\xd8\xb7\x93\x1d\'\\\x9c U\xfe\xb1\xc1)V\xec\xd5\xfb\xc9!\x9f\xe5Z\xaf\xfa+\xf1|\x0e\x96-T\x19\x1ae\x11/\xfd\xac\xab\x05\xc0\xbb(?\xb4uM|:\xdcO\xae\xeb\xed\x92f\xea\xdaJ\xdbi\x17M:\xe0\xea\xab\x98\xe2\xa1]\x0f0\x9b\xb9{\xe5\xc9\xe9\xeb\xd5\\\xa2\x12,RB\xb8^\xfa\x8b`x%\x91L\xd8\x14\x04\xbb\xf4\xd4W:\xdd\x17m^j\rq\xf2\xfcH\x1f\xd87 \xc9EI1x\xbd#\xa8\xb4\xdb\x8e\x85\xa53\x9d\x82\x13\xa0!v{\xba\xeb\xb3\x9b\xad[\xf5\x9dU\xa7nZ!D\xdfC*\xfd`bhz2L\x00\xed\xe2\xc7\x83\xb9e\xbb\xe12N\xae\x8c\xf1Y\x95iY\xa4G\xbf;H/Q\x98I\xcag\xf4M\xc4\xab\xd8wv\x82L\xe0Ik\x91\xd6db\xf8\xa6<2\'4\x8f\x8e]X*\xb62\x15\xf8\xfb\xf7\xb7*\x08L\xe2TI\xe7\x1a\x92\x9f\x96T\x9d\xc6,/\xa7\xeb%7\xee:\x97wX\x95!h\xa6P\x9e\x93\xa7R\x9e\xaa\xe8\xe2\x1bE4g{\xe4\xe9\x0ce\xfaNa\xbb\t\xf4\xa1~\x17\x07}\xb7\nh\x18\xb6\t\x13s\xddB\x90\x98\xff\xf5\xec\xea\xed\t\xab}\xcf>\xea\x05EQ]c\xab\x94E\xb2\x8a \x1e\x8aA\xc4\x9fS>cwF\xbf\xe4\xb5D(\x0c\xe5\xc2\xa5\xe6\x0e]\x03,\xc11\xe6L\x94\xcc\xa9`-B\x16\xd2?\xcf\x0cX\xdbi<\xcd\x96\xcc\xb1\x86\x983\xa3k\x91\x91QK\x00\xbc\x02\xb4cM&\x10\x97W\x11\x81\xe2\xdeh\x9d\xb9w\xb7/\x82\x1b^\x83W\xa4\x89\x04~5\xb6R\xb2\xee+\xfc\x82\xd9.\x7f\xeb\x06\x90j\xef~f\x9b\xb6HT\xc3\x06\xec3\x04`\xbb\x84\t \xb4,\xc8V.\xe4\x83.|\xd6\x84C\xd1\xd5\xf4f\x8a9\x03\rb\xfe\x97\x89\x00/\xa36\x85\x01\xa0\xb08|\x01\xf9\xd2\x11zR\xf4\xc7\xa2\xe3X\x07\xa51DQ&\xec\x90\xd9Y\x96r\xca\xbdX(\xe6\xe3c\x12\xb2\x1fv\xecvY\x8e\xaa\xcc\xda\x10\x19g\xaaf\x1d\x83b\xa5L\x02\x962\xf5~N\xd0\x0c\xad\x1b\xa8J\xf2\xc0\xe3\xddR\xef\xe5\x8f\xf8\x07i\xa7\x8d\x99ej&\x01O\xbd\x00&\xb8ur\x95^\x8e\xae`\xd51#NZ\xa7\xb15\xce\x94\xcf!\xaf\xab\xbaD\t\xf5\xc2q\x08r[\xbc\xc0\x98[E\xe9&\x84-\xdf\xd8\x82V+l\xca\xc9&`F\x02j\xadEf\xfd\xde\x02\x15Ao\xa9j\xa2zxT62\xd3\x9cnV_g\xef\\a<T\xc5F\xf2\xcf~\xb4qa\xe5\xa0]m\xd36\xde\xdd"\xd7/D\x1f\x9f\xd0&\xae\x0c\x1e<z\x93\x7f\xa8\x07*\x84\x87\xa2^|y\xf8p\x86\x88+I\x9b\xdbc\xc0\xdfa0\x18\xde\x05\xebI\xa2\xdd\xdc\xb2\x8a\x18\xb6U\x89\xe7$\x8b\x82\x051\x16\t\x10%\xb4 4\xc0\xcaF|\xeeR\xa6\x88\xb0\xa7K\xff\x89!\x1a\n\x81tu\x8d\x82\x03\\\x8f\xfa\x92\xe59\xe0z\x00\xf5G#a\r\xad\x9f\xcb\xde\xec<\x9c\xd34>a%0[\xbc.\x9c\xcer\xc9\xcb`\xb8[\xf0\xb1R\x0e\x00\x97m\x0fm\xffT%\xef\xf9<\x84\xc7\x9fg-p\xe9\x03tGN=\xe3\xdd3K \x14\x86~\xd8N\x81\xb9\x19\x98gpMU>\x037<o\x86[ v8/h\xfcZ}\x007t\xc9\x7fM\x7f\x83\x07\xe6\xbf\xce\t\xa4`\x98\xf7P\xec\x96\xcbgOK9\x12\x9f\'\xad\xec\xb4$r{\x99\x0b\x97\xde\x0ek\xa8\xb8\xe5\x0fA\xaf\x8d\x06~>}\xa9\x1f\x8fh\xf8]z\xb6\x89\x02S\xc1u~i\x91\xa3q\x8az\n\xd9\xdb\xa0\x04\xd3\x8c\xc1\x15?1\x07k\xddX\xa7f\x81\x90\xb4\x1d-Z\x92\x1fH\x01\x00\xcf\x81F\xbe\xf6R\x98F\x00\x89\xa4\xf6\xbd\xec\x06\xbc@\x95C\xaa\xde\xd1P\x1bs\x1a\xe8\xa1R\xda\xc4\xd7g\xa5\x16\xd7\x05#\xc4\xc2c\xa4"_V\x83\xbf\xc4\xa9\xff\xc3F?\xad\xd8|\x00P\x94y?v\xba\x04\xc8&\x18n1z\x1fQ\x07^!\xac\x1dw\xca\x9d4:\x83\xc6\xda\xf1\xa3\x89\xf0w\x1b\xc1\x8f\xd9\xb8\x87\x9b\x92\xd6<\x0b0Ak4\xf0r\xf9\xd6Qr\xf2&\x80aPx,\x8e\n\xd9\xd8\xccp\xbcN\x03\'L\xb4\xa9\xd2Q\xe66\t\xd2\xbci\x1d)w\xce\xec\xdb\xc43s\xf6\\VS\x8e;\xa9\x1ck\xbaG0j\xe4|\xa4\xe9\xa2*\x07k\x82\x86\xe4\xe3\xe7\xebt\x14\x83g\x9d\xb5\x15\xad\xa8\xc9\xea\x1a\xb6\xca!\xf6\xff\xcd)Ix\x80~\xcc\x9f\x8b\xa2\xd6\xbb\xcbd\xd4\xaf\xa0\xe4j\xbdo\xcbSb\xc4\xbd<\x0f[\xa5\x7f\x025\x9c!b\xcf\x14\xfcq\x1d\x98D\xd0\x0c\x19?9\x9b:\n{PM\xcd;Tl\x0b/*\x91\tuGllPk\x8eX\xc0\x84\x12\xc3vG=\\>\x16\xc3\x97\x90\x8eGj\xb7\xa7\xdac#wJ\x7f\xb7d:\xfb\xd7\xe0*\x97\x00\xf9{hH\xe6\x14\xb7AO\xb11\']\x921\xab\xa3Pc\xc1B\x8a\n\xbe\x18\x17G\n,\xc7Hf\xaf\x9c`Z\xb6\x94\xac,\xd1\xd7iV\xbaX\xa1F\x85&q"\xedC\xb7\xb0\xae\xcf\x84"\xc6\xf9\xfeo\xa3\x9e\xd5\xb8}\x11\xb1L7h@\x81\xf0H{\x07\\\xb9+t7\xc4\xff\xb4dsW\xed\x8f\x89\t\xd3\x03\x04h%"\xf2<\xec\xea\xe5\x93\x1e\xb1\x1e\xab\x7f\xf4W\xcc\xd6\xdd\xd5\xbe\xcc@=\xd1\x1e\xc6Y\xed[\x86Y\xe4\xae\x19S+\xe4N\x049>Gb\x89\xac\x06\xfa\x88\x8f\xd2\xc8\xfe\xb0d\xf1\x0f\x87\x92R\xec\x97Fn\xf2\x80\x84y\xd9b\xab\x1a\x0b$\x02y=\xf4\xe7\xdb\xd9*;\xf3\x9bL\xfe\x83\xb9\x95$Z\x97]\xb0\xd6\xdc\x92\x89\xf0r\xe1K\xbf\xff4R\x8d\xa6\xce7\xa0$\x99\x7f\xbd\xaap\xff\x05\xcf\x00s\x18\xe9\xae\x98X\xafT\xc6!J\xf8\xfa\xe9\x96\xf2\xf5.o\xf4\xfbsX\x1cr\xc1x\x0b\x92\xbbC\x97\xd1C\xae\xb3\x06\x80^\xbf\xf3~OU;\xe3\x89\xde\x81\xfd\xb7\x81\xa3\x17\x07HR\xba\x05\x18\xed\x8b\xc5\xee\xd0\xc3\xbe\xef\x9b$:\xf4\t\\\xbbm\xaa\xaat\x8cn9\xb4\xa6\'\xce\n\xdccQ*9v\xfc\xd5\x84\xb3\x0e\xad\r)\xb7\xd8n\nr\xdf&P \xadG\xa6fl*`\xde(ggl\xbd\x16?h\x1fH/\x13\xad\xce~`\x9c\xb2J\xed(\x1d\xb4P\xeez\x17\xc9\xe1Cii\'\x02\x11\xf5\xf1.\x13#!\x91\x80\xd1\x02\xd3\xb4\xe4\xedD\xd7\x11\\\x0b\x99\x1d(`B\tM\x89\xf6\xe6\x8fpC\x1e\xba\xfb\x07\xa2@\x1f\xb3\n3\x890]\xb5}C\xe2\xe9\xa0-TDl\x93\x86\xa4\xea>\xa6\xfa\x94\xff\xa6\xd4\xa1o%4\xf3Ej\xe1l_\x8f3\xfd[Q\xcc\xdaX\x01X\xc3Z\xa41`\xaf\xa7v$\xd5\xf59\xea\xe9Ol\x1c\xfc\x9a\xfcJ+h\xf3F\x1ag\x13\xde\xfdep\x94\x89\x08\x14 [\x90\xc1\x9da\x19^+\x94E-\xca\x9e/\x93\x1d\x16\x98\x07j\x02&\xdf%)pF\xad\xf8]\xe0\xa0m\xc3\xe4\x85\xe8\xbbhf\x19j\xff\xec>">\x91\xd2\xbc\x86\x12-\xbd\x83\xc1rJZ\xb69\xd4\x0c\xa2\x7f\xc1\xa8\xcb_]\xbd\x167\x03\x9a\xf7\x07\xb3\x1e\xdd\xf4\x14.3r\x03\x87\x1e\xb6B8\xa5\x8f\xb2\xe1\xc1\xef\x8b\x99\xe3\\;\xd4#jx\x9eun{\xb5\x17L\xf9\x8f\xaa\xa8<\xf1\xda\xb4\xb6Ti!\x11,\x94\xe5\x9e\xae\xe2\x02\x97\x97\x01\xc3M\xa6\x96\x8d1\xc4K:\xe7\xae\x00\x00<\xb1\xd8\xf0\x97\xeck\xe3\xfe\x97\x0f\x1a\x8a\xc5\x11\xd8$|\x14\x9d|!\x1e"\x03^5\x16\x91\xb8K\x99yj\xa2\xaf\xd3\xaf@=\xc2\xf4@\xbc/\x19\x9a\x88#a\xdf\xba\xd5"q5\xa0z\x9d\xf1\x8b\x1f>k*\xf7e\x97\xa9\xeaC\x1e+\xf85_\x07\xe2\x94<\x80\x98^\xc3W\xcf\xc5\xe6]\xc2F\xe9`\t6\xc9z\xad\x0b\xf0\xc3\x82_\xc7#jdW\xaa\xbe\xd0\xb6DB)\xf7\x0c\x9b`\xf6\x06_\xf5m\'3k\x04\x9a\xeaY\xcc\x9f\x04y\xfc\x87o\x9a7f\xbd\x8d\x98Nd\xd4QU\xdb\x81\x89upN\xafK\xb5\xa0,(X\x07~\xc2\xdd\x9e0VI\x9e\x83\xe3\xf8-\x8a\x1a\xf1`\x97\xe1\t>R\x8a\xe5y4\xebv\x14\x8cR\x04\xee\xd7\xc5V\xa2\x17\xb6\x97\xe5~\xa7\xcaE\x1f-\x82`\xf4?\x9bDK\xfd\xef\xech\xf8s\xb3\x0fB\xe5\x96au\xc0\xf5\xe3\x8b\x96\nr\xb1dvJ\x94.\xca\xb7\x80\xe2f,\x91\x8c\xd3`\xa1\x18\x95\xd8\xef\x84\x95\x0ej\xe2"s\x8erF\xb3\xc4yo\xf4 \xa5\xf57\xc5\x8b\x81\xa6\xd2p*\x1d\x8f\x1f\xfc\xe6I\x9a\xf6\xf3\xc9\x03\x98\x10\xdb\xca~o\x1fEj/"\xcf\xf4_Jf\xc0P]7\xadd\xb5a\xab\x7f\xcf\x05c\xcb\xee`\x8cf\xe8X\xa4SK\x9d\xafc\x0f:\x9b\x1a\xfa\x19V\x8e\xcb\xb2\x8a\x85\xd4T\xee\xd8\xd4\x00d\xc7$=\x15\x87\xb7\x8f\x8b%\x9bBU\xdav\xa0\xb0\xb5\xb5\x90\xc2\xc5\xae\xc6\xd8\xcb\x84=\x85z\x98\xf2b\x84\xb1\xb2\x88|\x07\xd0N\xde\x02\xd8H\x95\xabN*j\x0f(\xc9kJ\xad\xbe\x94\xd5}\x984\xcceLM\x18\x07\x02\xd0\xaf\x8a\xc6d\x043\xc2e\x13\xef%\xd2\xeaR\xe5q\xf1\xcb\x01\xa6Lk\x12\xd6lK~\xf7\x16\x00i5C\x9c\x9cb}\x07pL\x06~\x1a\xf7~\xaaJ\xe3l{\x95|t\x8cp\x80@\x03\xb5xX\xbe\x85\xe8lg\x9b\xb6\xb8\x92\xb1\x86\x19\xf2\x01\xbei{\x85u\x1aG0\x06\xd34\x9b\xe3\xda\xd9X\xaa\x81\xe5\xac\x1e\xcaSL&%\xc9\xdf\xd1,\x94\x15\xb75\x97\xef\xe9\xd6\xce\xe5U\xe6\xfdD\xa1\xfcH\xc6\xa2z,\xba6\xe8\xde\x1aR\xd5d]\r\xf0\x89\x0c\x83\xef=\x07\x0c\x0b\xc37\x97F\x19\n*6\xa6\xb1\x9cB\x1b\xfbv\x1f\xb4\x8d\xeb\x15\x84\xed\xf7\x0b\xa2\x18f\x125|\x17At\x84Y\xcfa\xc1U\xaa\xb2\xc5\xc6\x06X\xf1\xc22z\xfa\xcc\xf8\xe6\xf5R\xfb\xd9\x13-~$K4,F\x94\x9dnj\x1a\x08\x1f/\xc6g\xbd\xcf\xbe\xdc)\xda/&\xa1ni\xbe\xbcJ\xf6\xbe\xab\xe3\xde\x17}\xb9\xefc\x92}\xf0\x13\x05?\x1a32D\xb3y\xb89\xe4\xbdhD\x86^:\xf7\x92c#\x10\xe4`DdCl\xafX\xd9\xbe\xcfWb\x9a\x08\xd5T\x8e\xcd\xdd\xc0\xb0\x9e\xcd\xd8%\x08+^]y2li\xdb\xcb\x18)\xd4\x97\xc7S\xcc\xd6o\xf5\xfb|\xc7\xc0\x14\xd4N\xd9\x90t\x1f\xd5\x8b8\xe2,uPu\x99\xf4\xe7\xc3\xb6\x02&\x06\xf6q]\xf7\xeb\xb9_R\xffb\xfbHn\x9a\xb8\xc4G\x9a\xba \xc2\xd8\xc1\x86v\xfd\x92\xb1\xc9\xff\xe0\x857b\x19\xf8\x1c\xde\xdf+<B\xd2j\xebm\xe5\xd9s\xa8y\x00\x17\x0f\xd2\xf8\xe3\xf7\x91\x03[\xd4\x05\xe4\xdb\xb9\x10\x91P\xf9\xe5\xf9\xb8{^\xd7`~\xbe\xe0\xef]\xbf\xa7\x91\tU\xb7\x83\xc3\xba\x84\x84\xd7v\xbf*\xb8\xd48\xbb\xb1Y\xdc\t\xd6^<\xba\'\xc5\xcf$2\xd0\xd3W\x16}\xf1\x14\xf3\xe6:\xb5\x87\x01QE\xb5\xa4g\xb1\xd0\r\x1b4\'\xa8\xe8\xa8\xe0\x90i&\x1dR\xa6\x10U)\xf2@j\xb6\xb1\xa9\x9f7\x07\xf9\xda\xfe\x13\xe7\x01\xd3\x0f\xb3\xc4ji\xaax:\xeb\x1dt\n\x84\xaf\xe5\xe3L\xb6\x84\x9f$b\xba\x85EI\xf6\x91\xd0R:\xa2\xfe\xee\x1e[\xca\xff\xe3\xb9\xf6\x84\x86\xdbg\x0c\x1f\xce}+\xce\x16\xf0\xe1\xaa\xc9\xea\x99\nSe\xb9\x87W\xe4\xfb\xc1\xc6\x08\x8cw\xebl\x909\xd2\r\xf4;\x8c\x9c\x96\xe4\x0b\xbe^\xac\xa1\xacyE\xc1\x96\x1a\xfb\x87\x81\xca\xf4p\x0e\xab\xd1\x7fqe\x831D\xc1\xc7\x0f\xa0\xf7\x84.q\xfe\xb5\xdc7\xa0\x13\x0cO\xa0\xa2A/\xbdZ\x0e[\xb7\x1f\xc6\x9cf\xd9\x87\x84\xc3<n\xd1Y\x13\xda4*\x1di\x00\x1e\xa1u\xe3\xb9T\xebzR\xef\xda\xf6\xc1.8L\xcf"\x19H\xc0\xe1\x8e!\x07\xafc5O|%\nC`\xa4\xf5\xc2gN/\xc3\x9cz\xa9\xe5\xdbSY\xceFH\x97\xba\x8a\xdb=\x84\x8a\xa0\xb8[\x15\'\x86\x8eO \xf0\xc4QP\x96\xb8\xbc\r\x17-\xf7\x84k\xeaX\xc1\x88\xce\xd8\n\xf9\xc2p\xa0\xb4q\xb3\x02\x86\xa3\xe6U\xa1p1\xbf\xe5\xd6\x99\xe4p\xa9\xd6\xc2\xa4\x89)Y\xce\xd6\xc4\xde\xc9\x92\xca)\x05\x1e9\'Q%^be\x9f\\\xcbx[\x10\xb6\xedQ:\xce\xe2\xd7\xb9\xf1\x95\x8e\xba\x8eCo\xf4\xd4k\xc3 Q\xea{\x9c\xe8\x9dLiimY\x8b\xe5\x9c\xf2\xf0\xd0\xf2:q\x8a}\xa5\xd6\x83i\x9a\xb3\x00N\xa0l\xc8mCDJ\xc3\xf3Z86kHm\xe7\xa4\x1b=\x03\x90\x14\x10z\xea\x04\xce<\xa2M\xfc\xeb\x80\x90\x89\x9b \xa47\xac,xy\xf6\x08K\xa8\xb2\x1cH\x8a*=\xfd\xf8\xdcu\xc2\x8d\x1a?\x95\xd5\xa5\xd4\x07\x93d\xdd\xdaHPf\xeb\xa3\x1d1\xc804\xee\xbd\xd1\xe3\xfc$oi\xb9m:V\xe7E\x19\x8f\x89 S\xb6\xaa\n\x19S\x06\xb5\x9a\x83b\xfd\x10\xf3n\x92z[U\xdc\xe6*,\xa6\xa8\xd2\xbd\xcd\xed\r\xbe\xdb \x02\x9a(\xcc-\xd1d\x9c1\x8a\x9f\xb9b\\\xf4\xce\xbe\x01\xcc\xdaO\t\x15(\xbdo]\xcbEM\xd5\x93\xc7\xa4\xbe9\x8e\xd6O\xf2<)"j\x88\xbc<b\xd1~\xf8\xfe\xaa)\xd5\x94\xfc\x1b\x84\xf0\x06-"\xb1\xf4\xbe\\u\xde\x10\xd8\xc5\xf19\n\xfbW\x04\xf9\xd6x\x9f|`\xda\xc2\xa9\xc6\xca\trE\x07\xe4S\x99\xb4!\x92\xc7\xaaB\x1b\xd2*\x10\x90bu\xf1\xc0V\x0b\xb6\x11\x0e\x14"}\xd4\xea\x82\xfb`r\xd5\xceZ\x95:F#\xa1\xc1\xa9\x10\xe4\xa0ml:\xd4\xb9r\xef\xf8\xa1\xe0\x9c7\xab\xf8\xe2\x8d@\xe3V\xda\xe6\x9f\x86\xf8PEw\x8e\xb6\x02\x7f%w%aX\x15f\xc6J\x02n\xb7\x9fA\x8f\xcc7m\xbd\x96\\#\x84\xb8\x9a\xa2Vt\tPmJ\x80\x83\xf4\xa5\x94\xe8\xc85A{\xb5\xb2\xdfLU)\x06\x19c/5\x97{\nG\xa0\x1b\x91\xee`\xe1\xe1\x9c^b#\x07N\xe4\x12B4\xfe\xa5\x9a\xb0\xee \x16\xa4L\x9d\x07u\xdaI\x95\xa6 \x9e+<\xfd\xb1\xd2\x8f\xf1\x9ca\xda,\x99Jl\xda?\xc56\xc0\x0c2\x17\x99\xb5\xee\x0b\xd5UB\x08\xd8$\x88R+$\tf\xb8\xe4Np$\xff\x12\x01\xd7b\x06\xa5\x1bvw\x83Y\x00\x13G\xf1`\xad\x9d\x94\rz0\'[\x9fn\x8d\x95|t\xd4\xd6\xe8g\xc4\xca@\x98@\x90\x999D\xd3\xc1OQ\xd8\xb1q\xc9\xce\x98Sp[\x81k\xc4\xcb_\xffq\x18A\x8f!\t\xe7y\xd40\xeaD\xac\xb8\xd5m/,!J\x08\xe5#|\xce\x96\\U\xcflY\xba)-:\xc8\xb3k\xdc\x11w\x9e\x98\xbd\xc0\n\x12\xe5\x1f\xa0\x881\x9f\xd6\xf0\x17C`\xdc\xf0y\xbd\xf7\xbdf\xe7\x87\xb9\x86\xe4\xdd\xc5\x1f\xa8\x1b%G\x8c"\x93\xf4\xff\xa8\xc0xw\x9b\xf0\ng\x90\xd8L\x83\xda\xd0k\xfc\x9eQ\xeb\xd2\x04\xe3\xa4E\xf8\x95\x1a\xbe\xbc\x14\xc07B\x96:\xde\x8f\x98O:\xd8\xc7/!I\xd3\xde\x8a[$\xe3\xdcJ8\x8e\xb0C,H\n0\xfa\xf9;#>\xa2j\xa0\rG\x10 z?\x147\xd5bj6\x8d\x14\\RtR\xf90\xf8\xf5\xec|Q\x83\x8e\\\x08=\x0c\xa9YfNCg<@\xbe\x10\xec]\x16Enu\x85\xcd\xcb7\xe6\xe8\xb9\xc15==\x84\x9a\\ \'\x86\x9d\xac\x0f\xac\xfe9\x1f\xba&coN\x1e\x84\xa3\x9e.\x85\x8b\xb3\xbe?\x88^\x18\xa4\xdaa\x14\xd2\x1d~4xUh\x0e\xb1\xeeDl\xe4\x17\xbc\x96\xa5\x83c\x00\xa9\xf4\xe9q\xb7\xbe\x8cv|\xe3\xf3{\xb3\x1f!z\x1eVF\x90`U\xea<\xe7\xf3}\xdf\xcf\xd8\x8d\xb0\xb0Y3\xff\xfa\xc3\x16\x14\xa7\x9f\xd0\xd9\x0c#\x90\x95\xfa\x0f\x01V>\xe06\rZ\x92\x968H\xd8\x9cq\xd4\xd7;W\x05\xf0\xb7\xa1\x0f4\xf3\xee\x8e\xca*\x19\xca\r\xef\xad\xe8\xd0\xaaWj\xa2d\x03\x8e\x1d\x88\xbb\x03\x8b\x19\x82\xa9\xaem\x8b+Y\xf3\xc5/\xacp\x81\x05y\x1f4\xebV\xee\xdfe\xa8\xfdS\x8f\xe7\x11\xb4\x08\x14L<\x06\xba\t_\x91|\xbc5\xda\x10\xc1<m\xb4\xa6\xd3T\xc0\xf3-}\xe2p\xc4"\x0f\xc5\x8c\xee\x9e\xab\x1e\xb2&\x19\x0b\x89\xc2\xcc\xf6\xf6\xe6\xfb\xa5s\x13\xc4\xc4\x83Gi+\t\xd4cK8`\xb3\xfaI\xb0\xdbS\xe3\xc1\x00@&\xfc\x10E\x12\'w\x91\x8b\xb4T\xd1Q-\xfb\x81\xc1f.o\xa4\xb1TlJI\x17E\xe8)\x02MfNN\xb4j\xd7\xfcr\xc6\xac\x11jQ\xb0\x82+\x86\x95\xe9\x88\x93\xbc6o\xd4\xe6\xdbOHnu5pr\xfb\xbf\x87q\r~\xdd\x8dX*\x13\xf3\xe5\x14\xd7\xaa\x02&+\x0e3X\xba\x0e i*\xff\xb8D\xde_c\xfd\xf0\xc8\xbf\x82Di:Z@\xdf\xe5\xeb\x14\xe8\x96C\xbe\xa6\xef\xb2\xa2\xc2^\x83\xc5\ts\x86\xd1Te\xcc\xda\xb6\xe8\xb2yT\xb6\x9eO\xb7\x16<B\x0b\xe8\xf9\xbap\x0bRp(\xbd\xd6\x82~\x00^i\xf8\xd8N\xe5\xbe\xa0M\xaf\xce\xbf?(_\x99\xdd\xb5*\x06\x88\x02\xa7W\xa6a\xca\x97\xed\xbf\xae\xb4T\x96\xdd?\xb9\x80=\xdb[4\xde\x8aiw\x0e\x14\x93\xb8\x0f\x80q\xb0\x13\xff\xaa(\xde1\x05yr\xf1>\xadO$\xd4t8\x0f\xb3z[\xea\xdf\xb3^v\xe3\x14=d\x13\xfcs\xabY\xd24\x84\xd2\xf3\x80U\x88d3\x1e\x83\xf2\xba\xc50|\xa5\x9a\x90G\rS\x8f\x18\xe3\x8c\xcd\xd89\xd6\x0bP\x9e\xb3,(r)5\xc2#\xfbI\x08\xe9^\xe1\x13\xce\x80\x18\xf6\x08`O\xae1\xca\x81\x1f\x05:\x95\xa1\x17\xbb[\xc5q0\xb4\xd6\x82\xc6W\x15\xe6\xac\xbd\xef\x8e\x1c\xa8\x06\x89&\xea\x07&\x06)\x8f\x12\xde5\xbb\xd8\xc6\xf34\x9cUK]\x91^]\x86j\xdea%\x03\x97@\x96\xdfi\xe0\xac\x9e\xc1\x02A\x83Q&O2\xebg\xddeM\x8b\x13\\\xf9\x86\xff-\xa4n\x83)ulQ\xe2\xe9\xe89\xf9\x18\x99\x8a\x96`aE4\xed\x9c++]\xbe\xce\xe6\x11\x02\xf2,(\x1f\n\xe0\xe2\x12\x0f\xd3\xd1\xcaI\xba\xf9\xe9{\x16N\xe4\xcf\'\xcb\xd3\x90\x82\xb1\xf5 ]\x8d\xef\x95!\xc0\x05?\xe5y{Z\x9e\r5\x7f\xee\x7f\xb0;\xe9\x8d[\x13o\xc7\x1b\xc8h\x02S\xe7\x90\x95W\xecMRv\xea$G8\x92\x1a\xd6\x11\xa2\rR"\x0f{\xeb\x16AD\xdb\xc2Km\x85w\x03Y\xc8"\xd0\xa8\x94K\x01\x0bg\xe1\x840\xe0uy\xdc\x17F\x8c En\xd3\xf9\x8d\x92\x1a\xaf\xaeZA-\xe0\xf6\xd7a\xf7 \xefb\xd0pEhB\xa8\x8a\xb7jp\xdeIL,C\xde\xafm\xd0\xd9+= \xaf\xe7d\xd8\xd0\xa2\xb8-\xc1Y\nII\x17?\x16\x8bq\x1b\x809\xf0\x03@\xda\x9e\xb3\x08\xdd\xdchw\x87\x97\xa3\xad\'C\xc8?w\x15\xac3\xd7\'\xef~\x8cO,aQ\xd3\xc4\xe3')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import logging
2
+ import random
3
+
4
+ import torch
5
+ from torch.cuda.amp import autocast as autocast
6
+ from torchvision import models
7
+ import torch.nn as nn
8
+
9
+ from medomni.common.registry import registry
10
+ from medomni.models.blip2 import Blip2Base, disabled_train
11
+ from medomni.models.modeling_llama import LlamaForCausalLM
12
+ from transformers import LlamaTokenizer
13
+ from transformers import SwinModel
14
+ import torch.nn.functional as F
15
+ import math
16
+ from einops import rearrange, repeat
17
+ from einops_exts import rearrange_many
18
+ import open_clip
19
+ import segmentation_models_pytorch as smp
20
+ from medomni.models.UNet import UNet3d
21
+ from huggingface_hub import PyTorchModelHubMixin
22
+ import ipdb
23
+ from peft import (
24
+ get_peft_model,
25
+ LoraConfig,
26
+ PrefixTuningConfig,
27
+ PromptEncoderConfig,
28
+ PromptTuningConfig,
29
+ TaskType,
30
+ )
31
+
32
+ class GroupNorm(nn.GroupNorm):
33
+ """Subclass torch's LayerNorm to handle fp16."""
34
+
35
+ def forward(self, x: torch.Tensor):
36
+ orig_type = x.dtype
37
+ ret = super().forward(x.type(torch.float32))
38
+ return ret.type(orig_type)
39
+
40
+ class LayerNorm(nn.LayerNorm):
41
+ """Subclass torch's LayerNorm to handle fp16."""
42
+
43
+ def forward(self, x: torch.Tensor):
44
+ orig_type = x.dtype
45
+ ret = super().forward(x.type(torch.float32))
46
+ return ret.type(orig_type)
47
+
48
+ def replace_batchnorm_2d(model):
49
+ for name, module in reversed(model._modules.items()):
50
+ if len(list(module.children())) > 0:
51
+ model._modules[name] = replace_batchnorm_2d(module)
52
+
53
+ if isinstance(module, nn.BatchNorm2d):
54
+ model._modules[name] = GroupNorm(num_groups=16, num_channels=module.num_features)
55
+ return model
56
+
57
+ def dice_loss(input, target):
58
+ input = torch.sigmoid(input)
59
+ smooth = 1.0
60
+ iflat = input.view(-1)
61
+ tflat = target.view(-1)
62
+ intersection = (iflat * tflat).sum()
63
+ return ((2.0 * intersection + smooth) / (iflat.sum() + tflat.sum() + smooth))
64
+
65
+ class FocalLoss(nn.Module):
66
+ def __init__(self, gamma):
67
+ super().__init__()
68
+ self.gamma = gamma
69
+
70
+ def forward(self, input, target):
71
+ if not (target.size() == input.size()):
72
+ raise ValueError("Target size ({}) must be the same as input size ({})"
73
+ .format(target.size(), input.size()))
74
+ max_val = (-input).clamp(min=0)
75
+ loss = input - input * target + max_val + \
76
+ ((-max_val).exp() + (-input - max_val).exp()).log()
77
+ invprobs = F.logsigmoid(-input * (target * 2.0 - 1.0))
78
+ loss = (invprobs * self.gamma).exp() * loss
79
+ return loss.mean()
80
+
81
+ class MixedLoss(nn.Module):
82
+ def __init__(self, alpha, gamma):
83
+ super().__init__()
84
+ self.alpha = alpha
85
+ self.focal = FocalLoss(gamma)
86
+
87
+ def forward(self, input, target):
88
+ loss = self.alpha*self.focal(input, target) - torch.log(dice_loss(input, target))
89
+ return loss.mean()
90
+
91
+ def trans_seg(sample_num, bsz):
92
+ labels = torch.zeros((bsz, 10))
93
+ c_bsz = 0
94
+ for num1 in sample_num:
95
+ num2 = num1.split('-')
96
+ for num3 in num2:
97
+ if num3 != 'n/a':
98
+ c4 = 0
99
+ for num in num3.split(','):
100
+ labels[c_bsz, c4] = float(num)
101
+ c4 += 1
102
+ c_bsz += 1
103
+ return labels
104
+
105
+ def trans_det(sample_num, bsz):
106
+ labels = torch.zeros((bsz, 4))
107
+ c_bsz = 0
108
+ for num1 in sample_num:
109
+ num2 = num1.split(';')
110
+ for num3 in num2:
111
+ if num3 != 'n/a':
112
+ c4 = 0
113
+ for num in num3.split(','):
114
+ labels[c_bsz, c4] = float(num)
115
+ c4 += 1
116
+ c_bsz += 1
117
+ return labels
118
+
119
+ def trans_keypoint(sample_num, bsz):
120
+ labels = torch.zeros((bsz, 2))
121
+ c_bsz = 0
122
+ for num1 in sample_num:
123
+ num2 = num1.split(';')
124
+ for num3 in num2:
125
+ if num3 != 'n/a':
126
+ c4 = 0
127
+ for num in num3.split(','):
128
+ labels[c_bsz, c4] = float(num)
129
+ c4 += 1
130
+ c_bsz += 1
131
+ return labels
132
+
133
+ @registry.register_model("medomni")
134
+ class MedOmni(Blip2Base, PyTorchModelHubMixin):
135
+ PRETRAINED_MODEL_CONFIG_DICT = {
136
+ "medomni": "configs/models/medomni.yaml",
137
+ }
138
+ def __init__(
139
+ self,
140
+ config,
141
+ ):
142
+ super().__init__()
143
+ freeze_vit=True
144
+ llama_model=config['llama_model']
145
+ max_txt_len=config['max_txt_len']
146
+ low_resource=False # use 8 bit and put vit in cpu / have not been tested
147
+ end_sym=config['end_sym']
148
+ # self.tokenizer = self.init_tokenizer()
149
+ self.low_resource = low_resource
150
+
151
+ print('Loading VIT')
152
+ self.visual_encoder_2d = SwinModel.from_pretrained('microsoft/swin-base-patch4-window7-224')
153
+ self.visual_encoder_3d = UNet3d(in_channels=1, n_classes=1, n_channels=32)
154
+ self.ln_vision_2d = LayerNorm(1024)
155
+ self.ln_vision_3d = LayerNorm(256)
156
+
157
+ if freeze_vit:
158
+ for name, param in self.visual_encoder_2d.named_parameters():
159
+ param.requires_grad = False
160
+ self.visual_encoder_2d = self.visual_encoder_2d.eval()
161
+ self.visual_encoder_2d.train = disabled_train
162
+ for name, param in self.ln_vision_2d.named_parameters():
163
+ param.requires_grad = False
164
+ self.ln_vision_2d = self.ln_vision_2d.eval()
165
+ self.ln_vision_2d.train = disabled_train
166
+ for name, param in self.visual_encoder_3d.named_parameters():
167
+ param.requires_grad = False
168
+ self.visual_encoder_3d = self.visual_encoder_3d.eval()
169
+ self.visual_encoder_3d.train = disabled_train
170
+ for name, param in self.ln_vision_3d.named_parameters():
171
+ param.requires_grad = False
172
+ self.ln_vision_3d = self.ln_vision_3d.eval()
173
+ self.ln_vision_3d.train = disabled_train
174
+ logging.info("freeze vision encoder")
175
+ print('Loading VIT Done')
176
+
177
+ print('Loading LLAMA')
178
+ self.llama_tokenizer = LlamaTokenizer.from_pretrained(llama_model, legacy=False, use_fast=False)
179
+ special_token = {}
180
+ special_token["additional_special_tokens"] = ['<ImageHere>']
181
+ self.llama_tokenizer.add_special_tokens(
182
+ special_token
183
+ )
184
+ self.llama_tokenizer.add_tokens("<DET>")
185
+ self.llama_tokenizer.add_tokens("<2DSEG>")
186
+ self.llama_tokenizer.add_tokens("<3DSEG>")
187
+ # self.llama_tokenizer.add_tokens("<2DPOINT>")
188
+ self.llama_tokenizer.add_tokens("<N/A>")
189
+ self.det_token_idx = self.llama_tokenizer("<DET>", add_special_tokens=False).input_ids[0]
190
+ self.seg_token_idx_2d = self.llama_tokenizer("<2DSEG>", add_special_tokens=False).input_ids[0]
191
+ self.seg_token_idx_3d = self.llama_tokenizer("<3DSEG>", add_special_tokens=False).input_ids[0]
192
+ # self.point_token_idx_2d = self.llama_tokenizer("<2DPOINT>", add_special_tokens=False).input_ids[0]
193
+ self.na_token_idx = self.llama_tokenizer("<N/A>", add_special_tokens=False).input_ids[0]
194
+ self.llama_tokenizer.pad_token = 0
195
+
196
+ if self.low_resource:
197
+ self.llama_model = LlamaForCausalLM.from_pretrained(
198
+ llama_model,
199
+ torch_dtype=torch.bfloat16,
200
+ load_in_8bit=True,
201
+ device_map="auto"
202
+ )
203
+ else:
204
+ self.llama_model = LlamaForCausalLM.from_pretrained(
205
+ llama_model,
206
+ torch_dtype=torch.bfloat16,
207
+ )
208
+
209
+ self.llama_model.resize_token_embeddings(len(self.llama_tokenizer))
210
+ self.embed_tokens = self.llama_model.get_input_embeddings()
211
+ self.embed_states = self.llama_model.get_output_embeddings() # cannot remove
212
+ # ---LoRA---
213
+ class CastOutputToFloat(nn.Sequential):
214
+ def forward(self, x): return super().forward(x).to(torch.bfloat16)
215
+ self.llama_model.lm_head = CastOutputToFloat(self.llama_model.lm_head)
216
+ # ---LoRA---
217
+
218
+ print("Setup PEFT")
219
+ peft_config = LoraConfig(
220
+ task_type="CAUSAL_LM", inference_mode=False,
221
+ r=16,
222
+ lora_alpha=16, lora_dropout=0.1,
223
+ target_modules=['q_proj', 'v_proj']
224
+ ) # 8 32 hyz 9.21
225
+ self.llama_model = get_peft_model(self.llama_model, peft_config)
226
+ self.llama_proj_2d = nn.Linear(1024, self.llama_model.config.hidden_size)
227
+ self.llama_proj_3d = nn.Linear(256, self.llama_model.config.hidden_size)
228
+
229
+ # # Detection
230
+ text_det = nn.Sequential(
231
+ LayerNorm(self.llama_model.config.hidden_size),
232
+ nn.Linear(self.llama_model.config.hidden_size, 256),
233
+ nn.ReLU(inplace=True),
234
+ LayerNorm(256),
235
+ nn.Linear(256, 4),
236
+ )
237
+ self.text_det = text_det
238
+ self.det_loss = torch.nn.SmoothL1Loss()
239
+
240
+ # # Keypoint
241
+ # text_point = nn.Sequential(
242
+ # LayerNorm(self.llama_model.config.hidden_size),
243
+ # nn.Linear(self.llama_model.config.hidden_size, 256),
244
+ # nn.ReLU(inplace=True),
245
+ # LayerNorm(256),
246
+ # nn.Linear(256, 2),
247
+ # )
248
+ # self.text_point = text_point
249
+ # self.keypoint_loss = torch.nn.SmoothL1Loss()
250
+
251
+ # Segmentation
252
+ self.model_seg_2d = smp.Unet(encoder_name="resnet18", encoder_weights="imagenet", in_channels=3, classes=1)
253
+ self.model_seg_2d = replace_batchnorm_2d(self.model_seg_2d) # GN is much better than BN
254
+
255
+ text2seg_2d = nn.Sequential(
256
+ LayerNorm(self.llama_model.config.hidden_size),
257
+ nn.Linear(self.llama_model.config.hidden_size, 512),
258
+ )
259
+ self.text2seg_2d = text2seg_2d
260
+ self.text2seg_2d_ln = LayerNorm(512)
261
+ self.text2seg_2d_gn = GroupNorm(16, 512)
262
+ text2seg_3d = nn.Sequential(
263
+ LayerNorm(self.llama_model.config.hidden_size),
264
+ nn.Linear(self.llama_model.config.hidden_size, 256),
265
+ )
266
+ self.text2seg_3d = text2seg_3d
267
+ self.text2seg_3d_ln = LayerNorm(256)
268
+ self.text2seg_3d_gn = GroupNorm(16, 256)
269
+ self.seg_loss = MixedLoss(10.0, 2.0)
270
+
271
+ self.max_txt_len = max_txt_len
272
+ self.end_sym = end_sym
273
+ self.prompt_list = []
274
+
275
+ def vit_to_cpu(self):
276
+ self.ln_vision.to("cpu")
277
+ self.ln_vision.float()
278
+ self.visual_encoder.to("cpu")
279
+ self.visual_encoder.float()
280
+
281
+ def encode_img(self, image, modals, task_types=[]):
282
+ B,S,_,_,_ = image.shape
283
+ device = image.device
284
+ image_embeds_list = None
285
+ if self.low_resource:
286
+ self.vit_to_cpu()
287
+ image = image.to("cpu")
288
+ with self.maybe_autocast(device):
289
+ if 'ct' in modals:
290
+ image_embeds_list = self.visual_encoder_3d(image, encoder_only=True)
291
+ image_embeds_list = [_.to(device) for _ in image_embeds_list]
292
+ image_embeds = image_embeds_list[-1].detach()
293
+ image_embeds = F.adaptive_avg_pool3d(image_embeds, (1, 3, 3)).view(B, image_embeds.shape[1], -1).permute(0, 2, 1)
294
+ inputs_llama = self.llama_proj_3d(self.ln_vision_3d(image_embeds))
295
+ inputs_llama = rearrange(inputs_llama, "(b s) c d -> b s c d", b=B, s=S).to(torch.bfloat16)
296
+ atts_llama = torch.ones(inputs_llama.size()[:-2], dtype=torch.long).to(image.device)
297
+ else:
298
+ image = rearrange(image, "b s c h w -> (b s) c h w")
299
+ image_embeds = self.visual_encoder_2d(image)['last_hidden_state'].to(device)
300
+ image_embeds_unp = image_embeds.permute(0, 2, 1).view(B*S,-1,7,7)
301
+ image_embeds_unp = F.adaptive_avg_pool2d(image_embeds_unp, (3, 3))
302
+ image_embeds = image_embeds_unp.view(B*S, -1, 9).permute(0, 2, 1)
303
+ inputs_llama = self.llama_proj_2d(self.ln_vision_2d(image_embeds))
304
+ if 'segmentation' not in task_types:
305
+ inputs_llama = rearrange(inputs_llama, "(b s) c d -> b s c d", b=B, s=S).to(torch.bfloat16)
306
+ atts_llama = torch.ones(inputs_llama.size()[:-2], dtype=torch.long).to(image.device)
307
+ else:
308
+ inputs_llama = rearrange(inputs_llama, "(b s) c d -> b s c d", b=B, s=S).to(torch.bfloat16).detach() # add detach() for segmentation tasks
309
+ atts_llama = torch.ones(inputs_llama.size()[:-2], dtype=torch.long).to(image.device).detach()
310
+
311
+ return inputs_llama, atts_llama, image_embeds_list
312
+
313
+ def prompt_concat(self, img_embeds, atts_img, prompt):
314
+ if prompt:
315
+ batch_size = img_embeds.shape[0]
316
+ p_after_embeds = self.embed_tokens(prompt.input_ids).expand(batch_size, -1, -1)
317
+ wrapped_img_embeds = torch.cat([img_embeds, p_after_embeds], dim=1)
318
+ wrapped_atts_img = atts_img[:, :1].expand(-1, wrapped_img_embeds.shape[1])
319
+ return wrapped_img_embeds, wrapped_atts_img
320
+ else:
321
+ return img_embeds, atts_img
322
+
323
+ def prompt_wrap(self, img_embeds, atts_img, prompt_list, num_imgs, seg=None):
324
+ bsz = img_embeds.shape[0]
325
+ if prompt_list:
326
+ img_idx = ([], [])
327
+ for i in range(len(num_imgs)):
328
+ for j in range(num_imgs[i]):
329
+ img_idx[0].append(i)
330
+ img_idx[1].append(j)
331
+ prompt_tokens = self.llama_tokenizer(prompt_list, return_tensors="pt", padding="longest", truncation=True, max_length=256).to(img_embeds.device)
332
+ idx = (prompt_tokens.input_ids == 32000).nonzero(as_tuple=True)
333
+ prompt_tokens.input_ids[idx] = 123 # avoid memory issue
334
+ p_embeds = self.embed_tokens(prompt_tokens.input_ids).expand(bsz, -1, -1)
335
+ if seg is None:
336
+ p_embeds[idx] = rearrange(img_embeds[img_idx], "b c d -> (b c) d").to(torch.bfloat16)
337
+ else:
338
+ p_embeds[idx] = rearrange(img_embeds[img_idx], "b c d -> (b c) d").to(torch.bfloat16).detach()
339
+ return p_embeds, atts_img
340
+ else:
341
+ return img_embeds, atts_img
342
+
343
+ def forward(self, samples):
344
+ image = samples["image"]
345
+ bsz = image.shape[0]
346
+ img_embeds, atts_img, img_embeds_list = self.encode_img(image, samples['modal'], samples['task_type'])
347
+ prefix_list = []
348
+ tag_list = [[] for _ in range(bsz)]
349
+ placeholder = ['<ImageHere>'] * 9 # 9 = the number of visual tokens
350
+ for j in range(bsz):
351
+ num = samples['num_imgs'][j]
352
+ prefix = '' # Can add some prompt, such as 'You will be given an image, please describe everything you see'
353
+ for i in range(num):
354
+ prefix += '<img' + str(i) + '>' + ''.join(x for x in placeholder) + '</img' + str(i) + '>'
355
+ tag_list[j].append('<img' + str(i) + '>')
356
+ prefix_list.append('###Human:' + prefix)
357
+ img_embeds, atts_img = self.prompt_wrap(img_embeds, atts_img, prefix_list, samples['num_imgs'], seg = None if 'segmentation' not in samples['task_type'] else 'yes')
358
+ self.llama_tokenizer.padding_side = "right"
359
+
360
+ prompt = [t for t in samples['question']]
361
+ for i in range(len(prompt)):
362
+ tags = ''
363
+ for tag in tag_list[i]:
364
+ if tag not in prompt[i]:
365
+ tags += tag
366
+ prompt[i] = prompt[i].replace('_*_', tags)
367
+
368
+ if 'detection' in samples['task_type'] or 'keypoint' in samples['task_type']:
369
+ sample_ans = [ans.split('|||')[0] for ans in samples['answer']]
370
+ sample_num = [ans.split('|||')[1] for ans in samples['answer']]
371
+ else:
372
+ sample_ans = samples['answer']
373
+ text = ['###Assistant: ' + str(t) + self.end_sym for t in sample_ans]
374
+
375
+ prompt_tokens = self.llama_tokenizer(
376
+ prompt,
377
+ return_tensors="pt",
378
+ padding='longest',
379
+ truncation=True,
380
+ max_length=256,
381
+ add_special_tokens=False
382
+ ).to(image.device)
383
+
384
+ img_embeds, atts_img = self.prompt_concat(img_embeds, atts_img, prompt_tokens)
385
+
386
+ to_regress_tokens = self.llama_tokenizer(
387
+ text,
388
+ return_tensors="pt",
389
+ padding="longest",
390
+ truncation=True,
391
+ max_length=self.max_txt_len,
392
+ add_special_tokens=False
393
+ ).to(image.device)
394
+
395
+ targets = to_regress_tokens.input_ids.masked_fill(
396
+ to_regress_tokens.input_ids == self.llama_tokenizer.pad_token_id, -100
397
+ )
398
+
399
+ empty_targets = (
400
+ torch.ones([atts_img.shape[0], atts_img.shape[1]+1],
401
+ dtype=torch.long).to(image.device).fill_(-100) # plus one for bos
402
+ )
403
+ targets = torch.cat([empty_targets, targets], dim=1)
404
+
405
+ batch_size = img_embeds.shape[0]
406
+ bos = torch.ones([batch_size, 1],
407
+ dtype=to_regress_tokens.input_ids.dtype,
408
+ device=to_regress_tokens.input_ids.device) * self.llama_tokenizer.bos_token_id
409
+
410
+ bos_embeds = self.embed_tokens(bos)
411
+ atts_bos = atts_img[:, :1]
412
+
413
+ to_regress_embeds = self.embed_tokens(to_regress_tokens.input_ids)
414
+ inputs_embeds = torch.cat([bos_embeds, img_embeds, to_regress_embeds], dim=1)
415
+ attention_mask = torch.cat([atts_bos, atts_img, to_regress_tokens.attention_mask], dim=1)
416
+ with self.maybe_autocast(image.device):
417
+ outputs = self.llama_model(
418
+ inputs_embeds=inputs_embeds,
419
+ attention_mask=attention_mask,
420
+ return_dict=True,
421
+ labels=targets,
422
+ output_hidden_states=True,
423
+ )
424
+ loss = outputs.loss
425
+
426
+ if 'detection' in samples['task_type']:
427
+ with self.maybe_autocast(image.device):
428
+ hidden_states = outputs.hidden_states[-1]
429
+ token_mask = targets == self.det_token_idx
430
+ target_states = hidden_states[token_mask]
431
+ with self.maybe_autocast():
432
+ det_states = self.text_det(target_states)
433
+ labels = trans_det(sample_num, det_states.shape[0])
434
+ labels = labels.to(targets.device)
435
+ det_loss = self.det_loss(det_states, labels)
436
+ loss += det_loss * 1e2
437
+
438
+ if 'keypoint' in samples['task_type']:
439
+ with self.maybe_autocast(image.device):
440
+ hidden_states = outputs.hidden_states[-1]
441
+ token_mask = targets == self.point_token_idx_2d
442
+ target_states = hidden_states[token_mask]
443
+ with self.maybe_autocast():
444
+ point_states = self.text_point(target_states)
445
+ labels = trans_keypoint(sample_num, point_states.shape[0])
446
+ labels = labels.to(targets.device)
447
+ keypoint_loss = self.keypoint_loss(point_states, labels)
448
+ loss += keypoint_loss * 1e2
449
+
450
+ if 'segmentation' in samples['task_type']:
451
+ if 'ct' in samples['modal']:
452
+ masks = samples['answer_img']
453
+ with self.maybe_autocast(image.device):
454
+ img_embeds_list = self.visual_encoder_3d(image, encoder_only=True)
455
+ img_embeds_list = [_.to(targets.device) for _ in img_embeds_list]
456
+ hidden_states = outputs.hidden_states[-1]
457
+ token_mask = targets == self.seg_token_idx_3d
458
+ target_states = hidden_states[token_mask]
459
+ seg_states = self.text2seg_3d(target_states)
460
+ last_feats = img_embeds_list[-1]
461
+ last_feats = last_feats + seg_states.unsqueeze(-1).unsqueeze(-1).unsqueeze(-1)
462
+ last_feats = self.text2seg_3d_gn(last_feats)
463
+ img_embeds_list[-1] = last_feats
464
+ seg_preds = self.visual_encoder_3d(encoder_only=False, x_=img_embeds_list)
465
+ loss += self.seg_loss(seg_preds, masks.float()) # +
466
+ else:
467
+ masks = samples['answer_img']
468
+ with self.maybe_autocast(image.device):
469
+ feats = self.model_seg_2d.encoder(image[:,0])
470
+ last_feats = feats[-1]
471
+ hidden_states = outputs.hidden_states[-1]
472
+ token_mask = targets == self.seg_token_idx_2d
473
+ target_states = hidden_states[token_mask]
474
+ seg_states = self.text2seg_2d(target_states)
475
+ last_feats = last_feats+seg_states.unsqueeze(-1).unsqueeze(-1)
476
+ last_feats = self.text2seg_2d_gn(last_feats)
477
+ feats[-1] = last_feats
478
+ seg_feats = self.model_seg_2d.decoder(*feats)
479
+ seg_preds = self.model_seg_2d.segmentation_head(seg_feats)
480
+ loss += self.seg_loss(seg_preds, masks.float())
481
+
482
+ return {"loss": loss, "modal": samples['modal'][0], "task_type": samples['task_type'][0]}
483
+
484
+ @classmethod
485
+ def from_config(cls, cfg, finetune=False):
486
+ model = cls(cfg)
487
+
488
+ # load checkpoint
489
+ ckpt_path = cfg.get("ckpt", "")
490
+ if ckpt_path:
491
+ print("Load Checkpoint: {}".format(ckpt_path))
492
+ ckpt = torch.load(ckpt_path, map_location="cpu")
493
+ if finetune:
494
+ current_model_dict = model.state_dict()
495
+ weights = ckpt['model']
496
+ new_state_dict = {}
497
+ for k in list(current_model_dict.keys()):
498
+ if k in list(weights.keys()):
499
+ if weights[k].size() == current_model_dict[k].size():
500
+ new_state_dict[k] = weights[k]
501
+ else:
502
+ new_state_dict[k] = current_model_dict[k]
503
+ else:
504
+ print(k)
505
+ new_state_dict[k] = current_model_dict[k]
506
+ msg = model.load_state_dict(new_state_dict, strict=False)
507
+ else:
508
+ msg = model.load_state_dict(ckpt['model'], strict=False)
509
+
510
+ return model
medomni/models/pyarmor_runtime_000000/__init__.py DELETED
@@ -1,2 +0,0 @@
1
- # Pyarmor 9.0.3 (trial), 000000, 2024-10-28T10:25:17.919106
2
- from .pyarmor_runtime import __pyarmor__
 
 
 
medomni/models/pyarmor_runtime_000000/__pycache__/__init__.cpython-39.pyc DELETED
Binary file (222 Bytes)
 
medomni/models/pyarmor_runtime_000000/pyarmor_runtime.so DELETED
Binary file (805 kB)