From c041570eefc737bd5b4dcda17510cd669adab8c6 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 27 Jan 2026 04:45:56 +0000 Subject: [PATCH] s --- config/URL_config.ini | 2 +- dist/douyin_srs_ffplay.py | 4 +- dist/pyarmor_runtime_000000/__init__.py | 2 +- index.html | 10 +- web.py | 176 ++++++++++++------------ 5 files changed, 97 insertions(+), 97 deletions(-) diff --git a/config/URL_config.ini b/config/URL_config.ini index 4972f70..42f6b42 100644 --- a/config/URL_config.ini +++ b/config/URL_config.ini @@ -1 +1 @@ -https://live.douyin.com/147650297461,主播: 娱乐摆摊记 +https://live.douyin.com/35932729226,主播: 内向小学生 diff --git a/dist/douyin_srs_ffplay.py b/dist/douyin_srs_ffplay.py index 9ea5743..dc69d24 100644 --- a/dist/douyin_srs_ffplay.py +++ b/dist/douyin_srs_ffplay.py @@ -1,3 +1,3 @@ -# Pyarmor 9.2.3 (trial), 000000, non-profits, 2026-01-22T02:45:58.160617 +# Pyarmor 9.2.3 (trial), 000000, non-profits, 2026-01-24T06:52:53.976623 from pyarmor_runtime_000000 import __pyarmor__ -__pyarmor__(__name__, __file__, b'PY000000\x00\x03\x0c\x00\xcb\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\\-\x00\x00\x12\t\x04\x00\xcb\xf2Y\x02\xef\xf9\xfc\x86\x04M\xe8\xbe!.\xd9D\x00\x00\x00\x00\x00\x00\x00\x00\xff\x9b\xf2Z\xa3?\x85\xa9g\xdaG:\x06S\x1f\x0b\x07\x18\xb8\x93\xdc\xb5\x9e\x96\xb9\xbf\xbb\xf1\xd6\xee\xb7\xc9I\x18\xe3\xed\x87*\xc7\x10\xba$\xb7,H\x15\x19SM\xbd\x95\xc0WQb*T[\x00\x8f\xab\x9e\xbf\xef\xa5\xbaF\xa3(\x17\x845\xa8\xbby\xb9r\xc6\xf1q\x91o\xc2\x15|\x16L\xb5\xbc?\x0b\'\xbb\xa3,\x18>\xf2\x11C\xef\x89\xc4)\xd5\xb9r \x01\xd8\xccK\x8bS-T-\xc9\xe9\xf9@@\xb1mB\x10,H\x98\xbd\xc2\xeaj\xcd\x92\xa2\xfe\xceu~\t\xc2c\x9c\x02\xdey\xe2l\xaf}\xbf\xd3\xadA\x03=!\x02F\xb6OA\xc2o\xa6\xde\xcf\xd5[.1\x83\xa7\x07\xed"\x90\x96\xc3]B\xa3\xfa\xfb5\x165VLbg\x98Vc\x01\xde\x1dR\xd8\xde\xea\xea\xa2\xf4\xf2K_\x89G\xdb\xa4H\xc2\x0b\xbe\xe8\xf5x|\x98\n$\x11\nI~\x87\x10f<\xd4,\x91\x03\x95NZl\xd4\x88\xce\xe0\xaf4\xce\xf9\xc5\xd3w\x84\xbb#\xd2\x19D\x8ap*\xe5k)\xe4z\xa4y\xf9\x0e\xea\xea\x1d\x9f\xae\x15\x9a\xe8\xaa\xf0y\x07j\xb5\x82\xec0u\x17\x82TO\x9a\xbe\xfbu7\xf5\xf5\xf72"\xe4F\xc8\xb3}2=\xfe~c\t\x13V\xed\xd9\xbb\xe6\x05\xd2\xe3\xd9O/O\x08y\xc3\x80T|%\xc7r\xac\xc1\xec\xa3LX\xd0.\xb56\x01\xc0\x9bt|\xbe$4\xb6\xe6\xc6\xaa\xf9\xbayB\x19\x07\xbaQ\x13\x91\xdf\x95\xfcD6Q\xef1-\x03\x06\xef3\x1f\x9b\xb2\xfd\x8b\x04\x8f\xcf\xab+6\xc5\xa3\xe11\xde\xbdS>\t\x81w\xb3\x1c\xce\xf9]\xb2\xe2\xc9CL\\\x83\xb2];\xcd\xb8\x88pqk\x00\xfc>\xa9\xaf\x9aUY.U\xd3:\xe3\xcc\xbbt\x88\x89\xca\xc7\xe2\xac\xe3\xe81\xb9m\xbe\x01\x86\xf2\xe7X+1\xd1S\xfb\xf9Y\x176\xef\xe5#\xf6\xb6\xabsP\x9eeK\xf5\xe6\xfc\xdd:\x9f\xd7#\x97\xc8\xf1\xc3\x96ij\xb0\n\xcb\xa09\x9em9\xd1\xaa\x05\xc1\xed\x947x\x06Y\xeb\xf6\x80\x9f\r\x08\xd1e\xbf[\x07\xc5r\x11\xe0X\xc9 \xf2J\x06\x8bda\xef\xd1\x86=\x01\xe1&\x7f\xb9\xff\x91\xc7\xad\xd8\x03\xc8\xbb,Y0\xdb\x94L\xce2\xb8\xde\xc6\xf1\n\x0c\x85\t\xf6\xa2\xe44\xb8c,\xe9\xaf\x90\x18\xa6\xdf9\xd2\xff\xa1Y\x9b\x91\xc7\xc4\xe0\x10F\xbeNi\xbco\xc9^\xcb\xad\xd1T3,\x93\xa8^NF(O\x90\xf0\xfbk\x13z6\x19\x83\\\x04\xd1\x9e\x1e\x83\x17MwU\x98}5@\xa8\x8f\xe4x\x95\x80?\xba\xb3\xe6\x98\x93e\xc8\xc7\xe8u4\x85Cb@qj+\x9a\xb8\xaa\xeeq\xca\xbd\xfa\xa5\xcb1ZP\xf3\xe7\x93\xe7\x8c\xa8,\xa4\xef\xb4\x92K\xf20\xa6\xce\x95W\xba\xda\xbf\x9b\xb7\xa2l\x10\x19A\xd2X\xb9v\x9c\xba\xb0\x1c\xd2ww\xb0A\xd9\x05\x80,|\xe7k\x0fL\x8a\xc4\xe1R.u^u\x10\xe9\xb7\xd5\xd3\x82@\n\xe2\x81\xed\xb5\xddjQ#n\xb0\xaf\xad\x93}\xc3\x97CO\x89d\x80\xf2\xec\xd1\x9bX4\x14U\x1d\xf9\xee$#\x00qR\x8fJ\xb3\xa0\xd3Rzex\xdbW$\xb7&\xff\xf4\xb8\xa7\xbc\xaf\xbb\x14\x84\x82c)\xfapF\xe9\xa8\xe5\x9e\x9d\xd5.w\x14\x7f\x01\x1c\x15\xb8e\x91\x8dw\x94^Yr\'\xae\x7f,r\x08\xc5a\xf6_WR\xda\xfa(\xc1\x8dR\xd6.l\xbc\xfe:F\xd9\xed1\xb0\xd7~\x066\x0c\xa8^\xe2\xbbK\xf60\t-4g\xd4e)4\x03\x13\x15tb>\'\xa0\x91\xd7\x10i,\x9d\x84\xb9\x1b\xe1\xde\xc2\x85\xa7\xa4\xd1y\xc6eO\xdc\x92\xd8\xb9\xf7\x856\xd2\xad7\xad\x0b\xc1\x07\x1c\xe2E"\xe8\x1c-\xb0\x16\x94\xae\xc4\xa1SGo^\xe9R\xcd\xe7jm!\xe0\xad\xf1\xce\xcc\xa1B6C\x06\xc3\xc0\xf7\xedhL\xb7T\xdbX\xe3^\x84\x9a\xcd\xa3W\x91\x0cZ\x12\x1b\x7f\x89\xbf7\xe3\xc5\xe1Z\xab3\xf47"\x08\x9a9\xba\n\xb8\xc9J\xd5\xec\x0f\xfa\xb5C\x86\xcd@\\\x81\x15\xeaE\xf5\x00T\x8a\x91\xc6\xd6\x077x\x9c\x01\xe8\x17\xb9\xc3y\xd2|\xa60d\x12\xb4\x90\xb3\xf8\xa1D\'\x18\x183ZB\x8d\xf2\xb2\xcc\xe9\x13\xd0\xb6\x1c\xbfoS\x87y\xaa\xe1P3\xb3<\xce\xeb\xfaT\xc1S\xaaS\xc7\x1f#\x052*\n\xbaX\xbe\xbaP\x17\xab*\x95\x9e\x0e\xdda\xf0\xe7\xbc\xb9\x97\x03\x1c\xb6\xe3\x86Ba\xe1\xdd\xe1\xa3^\x8f\xfd\xe3\x8d"\x93\x91\xdb\xd9\xa3\xeb%I\xb3\xf40\xde\x97ZcJ\xdf\xf3\x0ev\xd5-x[:\xca.\xa4\x0c\x88\xb5\xa5\xad\x1dE\xb5\xcf\xb0V\xf8\xf2\xc0w\x02TU\xe0\xd7\xcaJ\x9b\x1b\x08\x90\xb4\x17rR A\x10#l,\xb5FV\xe9B\xb4\xb8\xf9\xe1z\x9aK\xc1zO~v:1\x1a\xf31\xf4\x1e\x8d\xdf;0\xd1O-\xe4\x05I\x06\x11\x95 \x9c\xbf\xa7\xaf\x83\xdc\x9e\x0f\x18\x13\x0b%b\x91\x1e\xfb\x9f\xdb\xa2\xafa,3\xdc\xcb\xb5\x03\xf3\xba\xc3\xce\x8f\xdcI\xd1H/v)\x18`+\x1e\xaa\xa90\xba\xb9\xd90\x17\xd5\x98\x81\xc1%3\x06\xcd\x1fW\x90\xab\x7f\x0f\xf7\x88\xf0-\x10h+\x0f\xa5\xeb[\x7fE\x85\x07\x87Z\x9a\xad\xda\xb3\x9a\xa8\xe1\x82\xa6\xa7\xb3\xe0\xcek\xe1\xccOS\xe5\x91\xc5\x86\x89\xd4C[rf\x17M1c\xe5\xcb\x83,%\xf9\x0c9\xdd\x9d\x8e\x9f.J\xc3\x18\xd5\xae\xeb\xe4\xed\x91\x06\rA\xbbQ3\x1bj\x83gH=t\x8f\x8fe\xc9\xd2\xe7\xe9\xb1\xae\xa4>-a\xf7\xee\xd4\xff\xbc\x80\xf8\xc8\x1c\xa4h\x96-\x1b\x983\x1f\xf5n-b\xee\xe6\x17\xbe\xf9n\x81\xca\xaec\xef4Tz\xe3\'\xfb\xff&\xc2\x94*\x80\xe0\x10\xf8c1d\x8c\x8fZ\x8d,\x98m8;\x95#\x03\x94\x84\x1b\x0e\xd3\xed\xe8\x91d426\xc5\x81\xfc\xd9Jj\xb7\xf6v\x8cX\x0f\x8b\x0b\xa4\x9c}L\xacZD66z\x9b\xc3\xc5\xd4c\xa11\t\x1c\x9e\x8f\x18\x95\x1b\x7fl\xb0\x98c;5\'\x0b\x8f\xc3\x91\xb2\xc9\xcd\x05\xfb\x1e4e\x14{\xcf(\x16X/\xcc\xc3\xd7\xa5#\xe7\x1fH\xbeG\xc7\xe5\xc7\xbd\x08W[\xa09Z\xfb\xaa\x98H\x18\xe0\x1e\rA3\xb8Hun\xdd}\x132\x88\x1eoc\x05\xb2\xb6\n\x80\x10\x82\xe8\xa80\xb8i\xb3#\xa2\x87fNZqc\xb9d7\x04]%\x84\x84\xf9\xf7U\xdd\x0b+\x12G\x80z\x84\xa0\xae\xde\xbb|p\x06.XL\xc1\x12\xdc\xcd[U\x1f\x1b\xe6\x90\x87sFb\\\x9bo\xec\xcb\xceM(f*\x15\x9c\x86\x82\x9c\xc5\x86\xfe\xb67>\xfc\xfdI\xf0\x11\xc4\xa9\xa7\x84HX@\n\t\xc2ZW\x89\\B2\x99r\xb9\xd7\xdetk&[@T\xff\n\x06\xe4\xc5V\xdf\xe9\xfc{\xa1\x8d\xeb\xdbS;,\xca\x0b\x19,\xc2 @\xc7F\xdc\x8f#\x8f\x843&q-\x00\xc7\xf2\x0c\xd1\xbc\x8b\x19\xa1l`\xdf\x078\x19\x19j\x983\xe1\x13,A\xd2\xdb:\xd0\xc1\xc4i@\xa5\xf1\x06\x12\x19^\xd5\xf6se@\x0e\xe1_\x86A\xe0\xba"\x8b\x83\x9d\xdd_`\xfe\xc54\xae\xb5\xab\xc7b:\xbc9\x1a\x15\'W\x0c\x18N=\xdb\xc9\x81\x1a\xc3\xc7z\xe6\xad\xeb?|\x0e\x02]T\xa08O&\xd0\xe3Qw\x0ed\x11\x98j\xc5\xb1+F\xd4\xc0VS\x11c\x1ba\x18\x0e\xc3$1UU\xde\xda\x120q]\x1a\xc2\xdc\xbd\xba\xbc\xe9]\xe38\xb4\xbcZb\xd3\xfeF\x93Q\x7f\xc4\xf9s\xe4:\xedZ\xb14\xab!a\x88\xce]r\xfe\x0c\xd70\xb7\x95\x126\xd1$Rj\x97Ca\x13\xd1\xed\x7fn \xca\xa2\x07\x19\x9b<@?\xc9\x8ad\n\xa2N\x8b\xb7\xe3\xf4,\xe6\xb0\xef\xb9\xe7<^\xef\x97\xb3\xa9\xceJ\xa7\x15\x953^A\xbc\xa9z\xbd/u\xa3R\xa1\xcaSx>*\xaf0\xbeY\xe8\x84>\x9a;\xd8\xe7"};\xdfA\x14Sn\x93\x8f\xad\xf7\x9a\x89q\r\xed\x82aL`TRT\xda\x01\t\xb3\xd2\x97(\x87\xb4\xa4\x92\xfb\xcd\xad\x9f\xdb\xec\xd6 \xa6\x7f\xa4\x04B\x85Y%\xb9~\xf9E\x00\xe6\xa94\x19\xe3\xd9,\xf8.A\xf0\x9c\x02\xc1k\xae\x88\xa7\xa8\x08L\x99YwkH\x82K\xb3\xa3\xfe\x90\xbbi\xae~\x1d\xbdl\x03\xab\x97\xa13"\xd9\x90Ed\xd9#m\xfb\x10\x1f\xd1\x9a\x9fd\xd3z\xb9\xc0\x16\x91`\xc9\x19<\x82-\x97\x15\x05\xbf\x15M\r[a\xdb\x80\r9&&\xa9DS;"K\xca\x9b\xe1\xf7I\x93\xfc\x7fW\xfb\x03\xb6\x07\xca\x04\x06\xc6d\x97\x0c_\x8b*\xcb"\x13\xdfa7\x89b\xcd\x0e4r\xf3\xa6\xe1aIF\x04b\xdc\x13z(b>\x1b)\x87\xa2\x05\xf1\xce\x08%\x8dB\xfe\x7f.\xe6\xefT\xc8\x14/\xdf\x1d\xfe\x9b\xdc]Xbu,u\x88LEp\x80xRK\xbco9U\x96\xc2\x01\x0f\xa1\x82\x80\xd6\xbe\x84N$\xe3\x92A\x18@\xbc)i\xf2\x11V#\x17\x98\xf1\xff\x9a\x98\x7fb\x87\x8e/\xf8\xa88V\xaa\xbb\x9e,T\xa424\x13\x98D\xba\xfe\x95@N-\xa0\xa0 dev\xbb\x1dmM2\xcc\xfa\x8f\xec\xdeu\xff\xcb\xc6zJ\xa8|\x96|9-\x07\xfax:\xed\xed$-\xdf\xabr\xa4\xa6+\x08\xf7\x94(\x9e\x930\xd7\x8f\xca\xedZ\xa4\x03B\xc4\xd5\x99@\xc4x\xe5\x98\xb2|5\x15\xde\x18\x1c\xadZ\x11A\x0c\x0f[\xf4\xd8\xceA\xca\xfbd\x00\x97\xc4\xbf"\n2\xf3\xfd\xab\xc5\xda\xa4\xcb4\xa1%\xbd\xcf\xa7\xd9X\x8c\xb7\x83\xady^){\x14\xc4G\xb4\xce\xf7\xe5\x1bcg[\xc3=\xc5&8\xd9G]o\x89\xba\xac\xdd\x06|\xb4\xf0t\x1f\x8a9\xf2D\xc5yc\x02\xa6\x05\x83\x89p\xb9e\xd3I\\\xcb\x8b\xbctY\xe8\x11B\xc8:@\x92\x9fU\xc0%\xbc\xd7\xa4l\xddA2\xa7\x03\xf1\x1e\x80\xab\xb6\x14\xcd\x17\xc4\xb9O\xaf\x88\xc2-\xec\xab\x82\xf5`\x92\xe7G\x0e\x8b\xe8\xa31\x1f\x070F\xa6)\x91(\xcc\xe3\x0f\xb9t[\x96\xf5\xee\x9e0\x89\xee&D\xaf\xa2\xcf\x99\x8f\xed_\x8d|\x04\xc94(\xaaE\xeam\x00\x1d\xcd\x1fb\xe7\x1e\xcfW\x96c\xcbT\xa6u/v\xb7\x1b>\x8e\xa0U\xda\xafzz\xb9\xe1\x8c\xc0\xe7{?\xd6.\xd2\xacD\x12\xe3g\xcb\x87\xa0\xf4RE:\xce\x0c\xad5\x85\xd0\xfbqS\xe2`\xef\n\xbc\xa1v\xc9\xc0\xb3\xdc\x85\xa9\xf1\xcb7z\xd7\x02u\xc8(>\x80\x80\x17}"\xaeT\xa0YD\x1e\xcaU\xe6\xed\x9f\xb3\r_\xb6z\x156\x00r\xd5\x86!\xa8\x86\x9c{-e"\x0f\xda\x9a\xfb\x85|\x8a\xa7A\n?\x0c@\x81\xd7,\x8b\xab\x80\xcf\x04)=\xac\x11a\x11\x90\x9e\x13\xa2\xdfb\xf8\')\xe8\xcd\xffX\xb1\x95!4\xe3\xde\xa5\x00<;%\x0e\xca\x08kS\xde\x11\x1d\xf3\xe9\xbf\x1bO\xc0\x9fl\x17\xbd6fI\x8b\xd1\x9c\x86d>\xfb6b\xeb\xac\xce\x91\x92\x1ex\t"\xe0@\xff\xfdS \xc0T\x88\x82-\xc2\xa4\xd0\xea\x1f\xbbi_^X\x99\xa4^\x1f=B\xb3&\x84\xf4N%\t\xec\xad\x1f\x86\x16\xe7te\xfd%\x84\r\xa4\x86kJH9\xbeg\x96\x8a\xb7m\xb4\x83\xb1\xdf2\xc7*%\xe7p\x8c\x80\x84\xe8\xad\xd7&U\x89!=\x18\xcb\x855\x17C\xa5T\x83\x9c\xa1W\xa8\xec\xc1LH\xc1\x84\xd3\xa4\xee?\xe2\xef8\x87C\x88\xa9\t\xfd\xba\xca\x95\xc4~Ct\x97\xbd\x8bj9,\x065;6\xcb\x86t\x9a\x9d\x13.\xc9\x93m\xf5\xbe.K\xe8$\x16\xfb\xf1\xfc+T5\xbd\xfdVrq{q\xca\xf6\xd9<\xee\x19\x87h\xc6\x9f\xe5D\xc0\xda\xc6\x14e\xb6\xc1\x83\xb3\x00ja\x96\xaeQ\x05\xb9\xfaw!N]\x1f\x910\xba\xe6G(w\xe4\x00f\xd5\xd2\x1f\xc3M\xb4\x89\xeet \xd1L\x90\xe44\x03\xd3(t#li\x1a6H\xd0#9\xd3\xefB\xb5:\xf1\x0f\xd7\xcb\x9b\xfb"|\xfc\xac\x97\xd1\x8e\xbc\xa7\x0f\xb8]\xec9\xdc\x18\xa2\xffi\xec\xad)mzS\xbb~\xd3\xa3\x88\x04f\xca\x0f\xc4\x089\x11{\xaa4\xbf\x12\xb5;fzZ\xa2\x1f\xd3=\xdb0\xe9\xdc\x91\xa6\xfa\xb8\xad\xb0h}\x9f,\xe0\xa1\x9d\x17f*\xa8\x88\xbd\\\x10\xca`\xaf\xfb\xd9?QC\x02\xed|}\x81\x04D79\x0fc\rX7\xf9\xf6\xf5\'[N\x95\x80\xcb\x891\x03V\xd6\x99\xd7O\x0b\x03\xd5\x98\x96\xc80+\x9aB\xf8\xe1\xcdM1\x95~CC\xb8*\x8a\n\x99\xa0\xb2p\xa3\x8a\xc9\x99\x06\xac\xcf\xea`\x01._8\\\x82B\xed\x97/*\x8c\'e\xa9\xc6\x83]\x02n\x0c\xa4\xad\xc7F,\x96\xf1B3\xb9\x16h}L\xd8\xbcD\xd8\xe3\xb5\xd2\xcc\xf8\xfa\xdc\x07\xae\xf2I\xc9\xf7\x14R&p\x92\x15\xfe\xf1\x17b\x1e%&y>\xb0\\8\xc9$\xa6\xf7\xf7n\x01\xd9\xf7#\xe7(\x10\x8a\x1fMd\xa8\xfb\xc7\xc5\x05\x80\xe5]7y$\xf8\xa5#=\x04\x8bT\xfa\xe8\xe2\x8f\xa3\x8d\x8e\xf3\xaa4\xe3\xea~\x96\\\\i\xa2|\xe6h\x04G{\xb5tI\x0f^C\xa6\x85wfT\xa5\xb0\x00\x1e\xc1\x8e\x9e\xc1\xae}%\xe0a\xaa6E\x98\xbd\xbd(!`\x89\x94u\x12\xa7\xf0u/\xfd!\x91\x8e\x81\xe6u \x13b\x103\xa5\x89\x7f\xaaJ\x98\xc3v\x9d\x074\xfc\x8a9\xa7\x1a\xc0%Q:UK\xac4o?Fp\xd2\xfc%\xe4Zo\xc1\xe2^\xd4\xb5\xea\x18\xd57\xb4\x80\xb6\xd7\x1a\x1a\n\x9f\x9f\xf3\xe8\xee\xfe\xe8\xcf.\xabg\xbc\xb9\xabl\x17\tBG\x16\x06\xab\xec/\x99\x87)\xcbu\xec\xe0\x81vC\xea\x13\xd9\x8e\xebK0P\xbb\xf4\x02\x9bI\xcc7z}\x82\x95\xfd\xeax\x13\x86\xf8\x9d\x88\x12\xaeL\xb1l\x99V\xadg8\x98Q\x94\x8a\xcb\x12l\x96\xd6\x96\x9cIx\x14G\xcd\xac\\\xc5\x13\x13\xd9\x00G\x85\xa2\x97E\x8f}\xfaIG\x90~\xc5]z]DI\x1f\xbf\xb3\x0b\x98\x98\xd1\xfb\x8d\x11\xb3\xf1\xf4:\x1e\x1b\xecr\xcb\xd8\xe28\xe4MH\xeaZ\x8a\xe7Cx\x92\x1b\xbb\xb8\xc0V\r\xd8\xc3\xccn\x81\xc1\x81=l\x85\x91nU\x10t\xc8g\xc3O\x98>\x02\xc4I2{\xc8\x80;)\x98\xed\xc5\x00\x1e#\xc6\xac<=\x1bK\x01\x1d\xe4\xe2D\xe5B\x99L\xe2Ytt\xc3\x02\x95D\r\xa6?\xb4\xed\xc7f?\x0e\xc5\xa82:\x1d`\x17\xd9\xa8\xdd.\x86\x068$\xb9\x10\x80\xe2\x12\x17\xfdu1I\x7f\x93\x0c\xe0\x06\x06\xe7\x17\xc4\xe4\xdc1\xff\x07\x13\xf0\x95\x1d\x964)}\x1eL\x7f_\xe2##\xe9\xb5\xd6\xe17\xd7px\xc4hSB%2\xd6\xd3\x01\xf2\xe7\xfb\xdfV\x95H\xae\x04\x91\xf9\xbfAq\x11\x84\x14\x81~\xd3\xde\xddDH_j\xd8\xb2$\xf16~\x8a\xfey\x7f&\xc9\xa9G\xb8\xc1x\xca\x82\xf3\xafP@x\xa1\xee\x10P\xc7\xb3R\xa4\x19\xa5\xcf\xfa\x8d\x0ey,\x03L\x0e\xeeZ\xfeI&\xe7r\xaa\xfd\x93u\xb90\xb3>\xe0\xe2\xe0Y\x06\x85\xc0\xddGo]\xc3Z\r\xe3a\xc0&\xe1\x973\x86\xbcb\xdfL\\\xd1B\xa6!\x10\xb2\x9eb\xd8rPy\x01\xe5n\x00\xba1\xe1\xc5R\xa7\xe4\x1d\x7f\xbf\x9f\x16c\xf3\xc9.\x06*\xb9\xc8\xf5\xdc\xd8\xe0\xeb\xae\x10\xa94g\xc27|U\x1a\xe6c\xa4\xe7\x19\'\xe9\xc3HM\x11e\x14||\x03\x05\xd33\x11g\xf4\xa6+TCa\x98\x18\x8f\x1b\xeb\x19\xa8=;\xa0b\x08\x0b4m\r=\xdf\x16!L/38\xff\xdf\xb7\xcf\x08\r\x9b4\xfd\xf1\x962\xfd\xa7a++\x9e\xf9Yg~s\xefL\x04\xf1\xf6\x05\x07n\xa6x>u\xfaK\xc0\xe2\xc9\x19\xae\xff)f4\xf1\xc5f\xcewf\xef\x84FK8A\x96\xb9\nh\x88\xfc\\\x86Yv\x9f\xa6_\xc4\xb5z\xf2r\xb6\x92\xcc\xbbZ\x1d^\xb5\x8fp\x98\xb8\x85\xbb\xd0\x04Ai]\xc6\x12n\xa6\x8e\xc9\xf3\x98\x85ZY\xeb.Im8\x15\x1b\t\xf68J\xa03\xd7 k \x02\xd8-(\xd9t\x94Wb4/\'\xb3f$\xcb\xff\xe4\xd2\x00\xa7\n\xbd\xf5\xdd\xdd\xe6\xa4\x0c\x0c\x95\xc7\x11W\x88\x89\xd3a\xa0\xfc(\xadwp\xb3\xbb\xb2\xe5B\x80H\x81JQ\xbf\xbd\xe9\x13\x1a\xfa\xd8X\x8aq1\xff\xc2{Q_\x8a\xc8:\x99\nD\xea\x0c\xb6\xda\x1b@\x11\xf1&6Zr\xac\xe0\xc0\xf0,\xa2\x14\xc6\x9dP\xe5@\x01-R@\xf6\xf9R-*X\nIvN\xa8\xb1\xa5`\xad\xf9\xc4\xe4\xc13\xfe\x9a\xc4n\x02\xd2\xc2dz\xcf\xa9\xe4%Z\xed.\xe4\xaet%\xc9\xda\x82h\xe8\x13\xba\xfe}\xc8\x9c\xdc\x96\x95\x00P\x17\xb5D\x85\xab\xc1j\xc4\x07\x05\xb7_\x04\xe5\x96\x85J7a*\x1dZU\x8c#\x81H\x82\xe1\xfd\x1b\x8a\xde\xbcE\x17[W\xb8h><\x87\xd4\x13\xbed\t\xd2\xf2\x0e\x1f\x8a\xb9\xc5{[\x00\xb6\xc1*\x961\xe9\x90\x00\xf5\x00%H<\x0f\xf8\xc8:/.\xa9\xd0\xbd\xd8?\xfd\x1fu\xd3\x7f\x1b\x8d\x97\xf0\x878\xdeS\xc6\xf8\x03\xe7\'U\xe6\xa4\x12\x97\x14\x9c#U\xb3\xce\xaa\x1b\xba\x8e8%-\x86\xba\xc5\xf8\xec\xe5\xbb\x1d\xf0j8\x81\xfd&\xdd\n&&\xff\x08\xd0T\xcf\xda\xcc\x8c\x19\xa0o\xb3\xb7 \xd3\xda\xb6\x0b\xaa\xc0\xf3g\xc1\x19X\x82o\xf8\xe3\x80}o\xb6ln`\xacd\xce\xa7\xd5xEp\xbb^\x8bti\x88\xe9\x0e+\xa4\x7fM\xcb\xe9}{\xd2\x0b\xcb*\xc2\xc4\xf3OQt\xf7\xb2\xdbN\x1d\xfd\x01 ]\xd5\xb0\xff\x98\xb9\x12>7\x08\xf29\xb4v\xe5\xc2d\x07\x84\xd3\r\xcdx\xf6\x8cx;\xbc\xcf\xf0V\xf8w\xfa\x9alk\xd9e\x9e\xa2w\xc8\x92T^<\x80\x94U\xcedo\xfa\xbaUw\xe9Q4\xb9\x8a\xdc^\x0f\x14("\xd0\xe7\x8d\x91\xc2$\x00\x0f\x0fC_s\x02Z\xdd\xfc\xf2m\xb8\xcd\xe8\x98\xe3\x03rY\xdeM\xf8\x89\xa3]\x19\x13\x90\xd30W\xa1\xa1U\x00\xaf\xe4\xb0\xd6\xa3Y,\xbb\x12\xd0\x18\x92\x0f~\xed\x9e2@\x03\xb2/\x13$o\\b\xe3;QUQeg\x11\x9ejg\x8e\xfai\xc6\x88\xb5f\xd4\x10QBH_n\n-\x1e)!\xde(\x18\x9d\x0e@\xbe\xa6\x83>({\xb8+\x08\x1b\x19T\x7f\xff/uu\xb2\xd3\xc7\xfaft\xd5/F\xac\xff\xad\x9e(\xeeq`\xea\xf3\xdb\xae\xf3P\x12\x12\xe9\xe6Vr\xc5\x00\xb6t\xf9\xc1KB\xe0fpc\xacF:\xfa\x96\xd8\xee\xa7\xf9!q\xf0w\xff\x05\xc6\xb3\r\xf2\x16\x99}\xe5\x99\xc0\x89\xe6\x9c\xc4nz\\\xd1\xe0\x1a\x08\xe8\xe3\xa5Y\xab\xee\x03\xe0;G\xb0\xca\xe6\xf7w\x89\xb2.S\x83\xacQ0\xb2A+\xee;K\xb2\xc4[\x9e\xa6\xec\x84\x8b\xd8\xe2\x11\x9e\xade\xb2o\x81\x18X\xf5o\xccw\x93\xfb\xc3\x88"\xd7\\\x0c\xae\xed\xba\xad\xee\xaa\x08w\xbb/\'\xc6~d\x89\xac$D\xccU\xcb\xd3\xe3\xc5S\x97h\xffq\xe8\x05\x05Q\xa6\xbf\xb1L\xa0@Jv\xa4\x1e\xa9\x1945\xaar\xa6H\xecTn|\xae\xf8n+\x1d\xb4$\xd0!+\xd7\x81\xbfI\x90\xe8\x99\x9d\xa5j\'\xc6\xda\xf1N\x8e\x94\x91E/2\x8b\xa6\xb6\xfa#b\xfb\nW\xe3y\x89\'\\u7\xd4q\xb8T\x87\x12\xfeO\xf6\xfa\xad\xe2Ft\n\x7f\x80\xc7\xda\x1e\x870Z\xa3\xe1J\x17\xdb\xb0\xd32\xa1\xe4\x9an\x0f\xd1\x9aH\xa4\x06Mx}\xbeX\xbf\xe6\\\xe0]\xfaCYAhZ\xa4\xfd\x05\x94e\xeb`\x885I6GZh~E\x90\xf7S\x84V\xdf\xa5\x04\xf6x\xf0\x8aS\xbc\xcb\'\xcf\x85\xd8\xc4\xc5U%\xc3\x85\xb5iZxU\xe8\xe0~=i1 X\xcf\xc1n\xceE\xa2i\x13">\xc1}u\x9c\xd5T\xadx\xc2\xb4&\xc4&KNu\x14\xea\x80u\x0b C\xd7\x06\x18\x9c\x0c\x0b(%\xb5\xbf\xe3\xd4\x0f\xa1\x9f\x138\xeb\xe4\xcf\xa0t\x1f*d[\x06H\x8dh<\x0cP\xe0?O\xca*\xa4KR\xcdlk\x00E16Ma\x0bR\x8dM\x0e\xc1\xfa6\xe4\xd4{\xa3\xba\xa2Y.\x1db\xdeM2\xdb+\x8bG<\xef\xcaQ\xdf\x9c$;[?\xbc&\xff\x15\x0b\xb6\x84\xa6\xd5\xf0^Q\xbci\xe8{\xefS\xa7\x94"\x98\xba\xe7Rj1\x82\x8b\xa0\r\xed\x1a{\xc62\x05\x97\xb9i\x07\xb8\xf6\x91\xa5\x82\x17\x98V\x98\x9c\x11\xf4sx\xda\x0f\x97\x07v[ot\x02;7\xdf\x95\xe7\xee~\x97\x96\r\xfdT\xfb\x93:$\xc6p\xe7\xf4h\xf5e\x8d\xeb\xbe\x0ff\xd1\x9a:\xa0\xc0N1\xb5\x07\x00\x12\x0cx,\x1a\x80=\x06\xa8\xf2,X\x1dt\xbb\xe0\x0c\xbc\x84+\x08\x90b\xa73\xae\x00\xb6\xf7\xdd4\x8bI\x0b\x8e9\x9fOZ\x1eC\xc9\x83\xfcz5_\xc4i\xc6\x03\x12\xcbq\x16s_)d.\x93\xce\xcd\xdf\xb6,\x81i\xea\xf0%\x0eaK,\xb5T\xba\\qi+\xa3DX\xfaTF\xfc\x08r\'sNh3\x00^\x9f4\xf19\x89J\xa9\xd14\xd0\xf3\xfe\r\xfe!\xd6\x8f\xe6\xfa\xdc\xc3\x14\x98}4[\xbaY\xdf\xd2K\xaf6\x94\'~.\xaaX\x0f\xe6\xd9\x1f\x8e1\xc0\x9bd\xa0\x0f\xb6\x1d\x17\x0c[\xe5OA)\xb7\x90zI\x06W6\xff\xd9\x13\xa6\x1bq\x98\xfa\xf2\x9f_\xbd\x8f\xb2d\x84\xa5\x98M*\xe0\x13\x92\xeb\x80\xa3\x99`A\x82\x80:\xef\xbf\x01\xb8~\xd3\xf0\x11\x19I\xa5\xd0\x03\xca\xfe`\x8bu\xcfh\xa4\xde\x9fz\'\xca :\x01)\xa8?\xb9dm\x8f\x8e\xe7\xe5\xfb\xa8\x82zx\xd1pA\xc1j\xf3/~\xbb\x1d\x89\x88\xa2\xac#H\xd3\xb2Pn-Vs)}k\xd3\x17\xccni\x80_\x066\xdc\xc8\x04\x16.~\x97\x96K\x02/\xacF\x81\x872-\x9d\x9b\x97I\xf3\xdb\x86\xd9t(l\x0c\x13\xff>\xc8s\xb2\x97]\xd3\x8d*7{\xfag>\x95\xbe7\x95Ob\x04\xa5\x93\x82fn\\W\xfd\x8c\xfc\xe3\xbc\x8b\xa6\xf31\xa0\x8c\x8e)\xfec\xb9\x18\xe9\xb1\xa3 r\xfb05\xd0\xdd\xd4\x10x\xf0V\xfa\xe0\x89\xf8 \xf5N]\xb4\x89\x91\xefb\xa4`\xd2\xee\x10\xfbUR`\xca\x82G\x95\xdcA\xb8\x15G\xfc\x18K&\x87\xfb>8z(\x84\xe8\xcf\x10\xd7n\xaf\xf4\xe5r\x18V\xa9\xde\x03\n\x8d\x1a;\xd0\xe2\x07\n\xfb\xcc1\xa8@L\xce\x10\xd7|L\xfc"{0\x0cm#\x8a\xbb\xdc\xa8m\x8bT\x91\r\xe8k4H\xc4\x87\xf0\x13]\xe7\xf3\x97\xd0\x1e\x04G\xa9I_\xbf\xb8/\x11\x13\x04\x88j-eO\x16P"\xc9\x12\x1fr\xeb\xd5=\xe7\xe5\x19x\\\xe9\xba\x9e\xa7\x997\xf8\xb4C+\x80\xcf\x80Q\xcfaa\xcdq\xc8!>\xe61\x14\xe8\xcb\xf3\x11\x81z\x08p\xc7l\x96hQe(w\xac\x82\xcb\x02\x10;\xa0\xa8.\xb3\xa0\x8f\x8f\xaf\xcb\x9c\xba\xbf\xfc\xfav\x9cU\xa3\xac\xed\xe4cEL\x16\x85\xad[\xc3\xd0\xbb\xc9u\x8a\xcf\x98\x89Dz\x8aR\x00)\xc8\x83?+\xb9=\xf8!\xa4=F\xcdG\x06\x99\x0b!\xc2S \xe0\xb4\x01\x92l\xfbgK\xb7\xd0\x15\xa2\xbf8GQ\xc2+\x01\xb8\xc1\xc9\xf5\xba\x91s\xb9\n\xa9\xff\xb2\x90\xbd\xa0\t\xd1\xa4\xc0\x10\xc0\xc6&\xcd\x00\xf6\x93\x88-o\x1a\x8a\x8a\xc1\xc8|Y\xc7\xfe\xe5\xcd\xaa\xc5\x9e\x95\xfe:\xea\xa0V\x97\xb1\x95\xb7_\xe3\x90\xb1"\xb0\xc5mp\xaa-\xef\xd1\x112\x0b\xc9\x97w\xc7T\xaa\xdeR\xfc\xf0\x98y\xbb\xafA\xb4>\xf5\x96W\xfa\xf5\xb1Z\xcb\xb3R\xe5Pk\x1aY\xf9t\x96\xab\xad\xf9\x12!Q\xf3\x8d\xade4\xfa_$\xb6 ~\x00\x94\xe4B\xfe\xc0V\xf6\xe8T\xc3\x13\xbd\xac\xc7\x10\x0e\xc3\xb3\x14\x10\x90\xf9\xa9\x9c\xb4m\xfb\xa1c#6C~\xa6\x93\xab\x88Vw\xaeu]\xc9sVN\xad\xaeB\x1eBuw\xcc\x10\xe3\xcd\xd9T~Rfg\xf3\xe3.\x88i\xb1\xac\x89\n\xba\x98.\xb5\x1fw\x9f\x10\xa4\xe1\'\xeb\xda\x0e\x01$\x19c\xe6\xe2\x88\xf5#\x9b\x01\x7fp\xfdX\\\x8b\xb0\x84O\n\x89\xd0\xf3$\xb7\xf4\xe4!]W\xf8\xe5S\xfa\x8e\x18\xc4\xbd\x80<\xb9\xb5\xeat\x00j\xfa#\xe3\xf1\xb5u\xaeb\x15\xe2\xf5&.\xf8\x94dln\xf7\x16\xdd\xfe\x8d`U\x15\x07\x12,\x98\xb4\x98\x846\xaf\x0b%=\x91\xbbK\xe4\x0b\xdbx \xc1\n8\xd5\x80\xff\x9eJp\xa0\xa2$F\x9c<\xa7\xc1\x17n\x0f\n&\xaf+\x81V\xfbU9\xbe\x9c\xb1\xa4\xf77\xfcw\xd2-\xd7\x90\x93\xd4\x16\x8b\x91\x11uY\x19\xd4LD\x884\xdc\xfaZ\x12\x7f\xafx\x95\x8c=?>\x8bpg8u\xe7\xef\xc4s\xb8\xc2\xf5f\xf27\xdcVL\x03\x95QU\xcf\x15\x0c\x0c\xab\xd2!b\xee\x01\x92\xcdW\x93\xd1\xd6\x07\xe0T\xfa\x8b\x14\xf4F\xf3\xff\x04\x1bG\x1c\xeeO8t\x18\xfe\xceg?a\xd3\x0e\n\t\xaa5w\xfc\xf6\xffzG\'w\x9d\xd7\xab.\x8a\xf8mJ\xf9\x873\x16+T\xa9\x18y:\xb7\x91\x83P\x0c\xa4\xae\xda\xff+\xd9\xc9\xee7^tK\xd1^\xd5_K&\xd5\xfc\x96\x1b\xba\xea\xdf8Y@%&\xc9M`\xef/\x88\xb9`\x0e\xff\xe7\xb9\xbdTo}*q\xf7_\x0e\x16o\xb4g\xbd-\xc8\n\x8c\xc6$\xce0s\xce\x19\xb0\xfeU\xe7\x83rr\xe6\x06\xf7T\xc5\xc2G9k\x9a{\xe7Don\x1d\xce\x8c\x8d\x0f\xfb\xb1^\x1d\x18\xd5e\xb5Vn\x97\x8di \x9a\xd9\xf2\\Ac\xc3\xc5V\xee\x19B\x9a\x83]\xf6\xa5:\xae\x91\xbei\x9e\xff\x18\xd4\x95\xd8\xb1\x1fk\n\x0e\xff\x80\x0e\xfc"\x86\x06\x92\xe1\xbf\x8c,\xfc\xda\xfd\x83\x9d\xb5o\xf9\x0c\xcc\xf7\x9a\xd2\x0e\x1b\xeb\xacA\xbd\x0b\x04\x06\x8e+~\xc2\xa5\xd33\xe7\xfbM\xa8\xfb\xcc\x94:\xcdf\xda\xf5\x8c\x82\xc2\x8e\xac\x0e\x9b\xd3\xae\xcd\xbfX\x05"\xf4\x15\xc6\xdb\xd3\x80\xa1*\xd6\xec\xb9\xb0\x0c\t\xe7;26z\xa7J\x1e\x00\xd1\xee,1\xcaR\x94b\xa4H\xf4c\x84\xfd\xa4u\xbft\x89\xd8\xa2\xdd \xe2#\x14\x13\x1dym\x10\xd7n\xd8,\xfe*=9\xda\xd3I\x07kE\xcc\xd2\xcaV\x7f\xdd\xddx11DN\xd3\xff\xa6J\xb0&+$u\xd0\x89\xea*\xect0\x88*z\xb4\x02#o\x1c?\xd8:%\xbc^\xb3\x98CV \xfd"\xa6\x0b\xb7/]:\xb4y8\xf5\x93x\xa8\x9a\xa8,\xcb\xcc\xa90\xd7=\xecsIc;\x9dH9\x88\xa7\xbcN\xe2\xf7\xf1\xf5\x1d*\xdd\xe4w\xd1JTj\xc4x\xa0\xa8\xe5\x80t\x16\x06\x90y5\x1c\xc7\x1fg\xa4\xebq\xec2\x1e\x8f\x14g\xe2\x1e6K\xa2\xef\xb5/\x80\xcf\xa6\xdfz\x81\xf6L\xe7\x06p\xfb\xe0e\x00\x12\xff\xc8\xe0\x0b\xa1\x89gb\xa1\xc6\xacn2\x8bqV\xc6\xc4\x96\xf2\xed\xb9\xa3\x1arke\xf6\x95\x150\xcc\xc1\x00\xdb\xc3\xb1\xe5\xf7\xed\x82\xa8m\xe3\x85\x03\xaeC\x0c]|Q\t\xe5\xb1i\xbe\x02V9.\x7fn\xdd\xc7\xf7O\xf6\xe34\x81t\x88*\xe6x\xcfc\x136\xa5\x8ev\xf9\xb0\'\xb9\x93\x003\xe2\x06\xf6\x08Y\xe2\xa4ku/\xf4\x11]>\xcc\x8f{k\xe0\x9acs\x90\xd3\x81o\xa6\xc2m<\x8a\x02D \xa1i7\xb5\xd5\xc5R$\xa9d\xe8\xef\xac\x1f\x01\x1b\xaa,\x82W]p\xad\rY\x98\xb3\x82a\x14o\x84q\x16YN\x8a\t\xfc\xa8\xf1\xfb\xcb\xa7\xba\x81\x05\xcd\x1a\x92\xfe"]-\xaeU4\x08K\xa9\xd5Ub\x8e\xee\xb3\xe8\xad\xdb@\xaa\xcf\xf6\xa9;\xab\x17s\xb7\x1a\xd1\x9d\x1d\x89\xa0i\x88\xcc\xc9n)\xa1\xd26t?I\xca\xb8\xc30\xa6,\xbd\x82H\xa3\xc1\t\x84\xf7<3\x19\xb5P\xccC{M\xbf\xfe\x87\xb7\xf6\xd9R\x17\xfb\x08fN\x9d9\xab\xb6\xa6)\xc1W\xa0aC\x08\xad\x8c\xf5\x03\xb9\xc0\xd3P\x89/\xcf\xcb\xb2q\t\xc9O\x9b\x85\xd1\x17B\xed&\x01Gc\x0e\xbb\xf47]\x89\x8d\xafNwTCE\x13\xdf\xc0\xb7\n\xb3\xb1\xbf\x05\x95\x88\xaf\xe8sF\x97T\x07\x99\xaaR\xbd2\x87\x8f\xf9\xbb\xf3N\x89&\x95l\x8a\xb9\xa0\x0b\xf3\xe4 a3\xf7R\x91\xd9B !4\x03&\n\xa2\xd4D\xeb\xeb\xab\x8f\x81z\xbf>\xdf\xb8\xb9\xce\x93\x85X_\xbc\xaa\xab\xf6G\xeaK\x81\xa8`\x0b\xac\nL\xa9a3^\xb70\x14i\xb4\xe8\xf5\xe2\xed\x07kY\n\x0b_\xc0\x08\x80\xa9\xac\x99\x80O\xbd&\x0b\xf7,v\xa1\x01w\x15\xcc\x01\x0f\xdd\xce?\xda\xa8\x94\xb6\n\xd5^\x91\xf9\xc4\xa2\x01\x94\xfe\x07\xb4\r\x96K@\xf5\xd8\xd9\xd2\x88s\x114\x85S][\xa6\xf0\xd4\xdd\x00=\xa23\xeb\xbexj\xf4]\xb2?\xe3y\x0crM\x88\xa7\xe0#2\xd0\xcfx\xf9\xeb\xaa\x1dnw\x9d\xa68y\x0b\xc6\xc2\xa7\xb200\xc51\x82\xb3\x90\xa8\xd1{\x81XdPR\x00\x07\xe8\xbav\x0c\x7f$\x10{\xc8\xd6\xa3\\\xceS\xf4\xc4\xd9E!\xc1\xd0\xdc\xcc\x14%\xb6\xb0\xd3\xef;\xab&\x93\xeb\x13\x901\x84,S&\xf1Nsl*\x03\x89@\xa1\x19\xc55\xf6\xec\x94\x89\xe7\xd18\xa5K9\xe1\xbd\x12\x8dA\xa7\xcc\xa9}\xe5\x99">\xa99\x06\xa3\xa2i\x0eX\xfa\xf5\x17L\xa2T\xe8\xc1\xc6\xee\x90\x98\xa2)Wr\x1c)o\xcf/\xa18R$2)\x035\x94J\x0b\xbdD\xbd\xe3\n&\x08\xb2\xc5\x94\xbeM\x1a\x82\x17Y\xc1A?\x7f!\xc9$\xc21P\xa1\x8cjq\x89\x1f\xda?\xfa|\xea\xd1&\x8b\xea\xb73\xc1:\x91\xdcjf\xf7d\xae\xdb\xee\xc4\xd4@\x9b\xc9\x10 \xc9a>T\x12\x1f:\x1c"]q\xeb\x95&\xc3\xc9GG6\xcf\xc1\xc7+\x06%\x02\xac,\xb1\xfc\xf7(\x95\xdaHP5\xd4H~B\x81\x8c\xf2\xb4\x83\x91+k\x9f\xfeE\xc3\x92p\xf2i\x13\xffi9\x85Yi\xf0z\xb77\x0fq\xaa%\n\xac\xc8\x834\xfd\xdd\xcbJ\x1fP\xc0]\xde\x1c$\xa7V~e\x08\x82\xb7\x17\xce\x88\x9ew\x86\xb3\xde\x0f1J\xe7\x1b\x88{\x98\x96\xc92c\x93\x04\x8f\xb3\xa1\xadU\x19M\tI\xd2\'\xd9\xa2\x08\x92\x1e\xd2\xc5\x08=\x9a\xfd\x80\x7f\x0e\xdf\x03\xfb\xfa#\x16,\x15\x1c\xa7\xf8\xcf\xe0\xf8=\xcb\xfb\xc6,\x1dLE\x91\xdf\xfd\x03\x1b\x87\xf3"^m\xacX&\x9d\r\x9d\xb2<\xe5\xe1\xb6\xb8\xd1\xd4\x89\xfd}\x94\xe3s\x8c\xed7[\x7fz\x9c\xc7\xf7\x01\x9f\\\xc5\xd7u\xe3\xbd\xf9H; w\xb8F\xc5\xc7\xab\xc0\x11\xa5n\xb1n\xc2h\xee\x19\xfdy\xfd5\x9a\xbb\x88\xcd\x1d\xa57o7I\xcc\xd1s>B\xea\r\xed\x99\xc4?\xd8\xd9\xa5ra\xb5h\x15m*\x86\xba\xc4\x97Q\x8dW\xa6g\xaaJ?\xc4\x84\xf4\x8a0Rz\xb8\xd8\xfaOj/o/\xc0\xc0\xb0\xe5\xb4\x93\x0e\xa6\x93k\xe7\x10\x05\x97,\x80\xbf\x8c\x10\xee\xee\x059\x92`\x81\xe5j\x903\x08DP\xca\xc4\xb5\xe2\x04\x0e\x16\xe6\x02"MOp.G\xf4\xd4\xf8N\xbd\n\xe8<\x91b\xf3W_M\x99\x0f\xd2\xef?l\x8d\xa5&yC]\x1d\xadtW\xf9\xd3h\x8f\xa1\xa9\xc6V \xb6\xb8\xd3\xb1{\xdf\xb9m\x1f\x1d\xc0\rA\x11d\xbb\x0b\xb5|l\xbakES\xcb\t7\xc5\xc7\x95\x85B\xc43x\xb7\x04\xb2a\xdf\xe3,\xffY\xf4v\xee(!\xb2\xf0S\xfb>^\xdf\x85\xc2X\xa45\x8f\xdd\x1ak\xe0\xf7\x18\xf9B\xd1wA/\xe4\x06\xb6\x00u\x01\xd0\xacbd\x13^\xe1Y\xff(\xdek\x84I\xe4\xcd_e\x892\x95&/\xdeZ\x8d\x05\x010\xcf\xd7\xf9p\x8f\xfe\xbd\xd1\xdb\xbbtG\x9f^xjL5\x94|5iz\xdf\x99H\x14\xa7*/\x1f\x07\xc71/\xe5\xaf\xfc\x16\x8cbZ~\'%\x1e\xaaM\x14\xd6\xec5\x99\xd5I\xda4\x1e\xda\x8c\xe99\x14\xfa\xfc\xb9\x18\x81"G\x0e^\xe3T?\x99c\xa5#/-3b%\xad\x85*aC\xf9\x0f\xfe\x7f\r\xb2:\xe7M^\xd4\x9aB\xcb\xca\xb4\xcb[\xb5\x07\xa3esa\xb4c\xfe\xc5?\xca\xac\xff\x1b\x83\xa01GU\xba\x8cO\t?.\xf6\xbf\r\x9al\xb6\xc9\x91\xe7Ai\x1b\xf5\xb0mzo\xc2\rBY\xfe\xae5,\xf9\xee\x17O\xbc\x82B\xa5\xe8c\xbc\x9e>ukvr\xc4\xda\xb6\xd4\xac\xc1=r\x8f\xab&\xe6\x98\x9b\x01\xd0\n\xaf\xfd\x8d\x12\xe9\n\xda\xa0w3\xb1\t\xdf\xa4\x92\x07\x8e\xc5h\xac\xe6\xf6\\\xd0@\x94\xe9R\xb8\xeb\xa6B%\x1bI!\xa9\x03\xcb!\xe1\x89\xc0\x8a`\x1d\xe8A\x16e2\x9d\xb2V\n\x00&V\x8c\xd7 \xba7X\xae\xfb\xd5\ryBX.\x17\n\xe5\xf3C\xca=~\xb7\x9a-\x7f\x80\x85\xe3\xdds\x1fi\x14\x81\xeeKO\xfb \xbb\xe4\x97\xbaY\x9em&a\x8b\xb1\xb3DW\xe6\xbf\xcd\xa3\xc7\xb6\x9f\xea4\x1d\x99T\x90(\xbc;\xea\x81\xfeY!\x0f\xce\xab\x92\xe9\xa7\xeb\x10\x99\xc0v\x1b\x83\x1eQ\xf0\x92\x91\xc5\xfcl\xaaGL\xd7z\x19y\x93\xc5\xacO\x94\x91\xac\xa8\xe0b\x88\t\xdd\xe2bI\x03\xfbm\xfb\xda\'\x97\xba\xf0S\x9b\x0c\xb7#\xeb\x8fq\xf6H\x11\x12\xe6\xe6LKV\xda\xf6\x17\x0f\xdf\t\x83Z|\xebL\x1b\xa3\xc7c\xb0(2\xceX\r\x91x\x9d\x86\x18?pW\xd8\x03\x07\xf2\xc1\xb6\x0f\xe2\xdd\x81H8\x8fY4\xcf\xc30\xf7\xa7\xa7\xc4H\xfcH\xd9\x1e/\xd6{\x0c-\x02)\xcd\xe1KY\x97\x80s\t\xd5\xde\x87\xa6\xd47\x99KG\xfc\x06\xdb}\xef\x0c\x90\xe0\x99?+\xfes\xe7\xce\x98{\x81\xf4\x15\x1e\x06\xa9\x91$yE\xbb\xce\'28\xf2\xcdY\x15\xf53\xab1~yq\xc9\xf2hB\xb2ZR\xc4\tJ.L\x97v\xb2#\x07,W\xfe\xd0\xd0_\xc7\x04R)\x02l\x9c\xd0\x0ce\x13\x1e4\xfe\xc0l\xa9\x00J\xb7\x90\xdd\x16u\x10\xca\x8b\xf8`\x82}=\xe7-l\xf2G\x93\xc3w\x00\xf65,]\x9a\xefv\xfb\x95\xca\x92P\n\\\x96\xf8G2N\n\x14{\xdc\xfeE\xf89hM\x98\x0eSY\x10\xcb;2\xfd\x1b\xa0\x83\xa6\x12\x10\xc0\xf3\x02\xe5\x04\xb6\xa8\xdf\xec\xee\xc2\xde\n\xe7\x18+%T\xb4,X\x7f}\x1c1\xc5\x0b\x94\x03\xcc(\x86|\xc7_\xb9\xbf\xdd$\xdb\xdf\xeb\xbb\xbf\xd6\x8c\xcbV\x80wd\xc8@n\xec)\xebu\x97*\x19\xcd\x99\xa6\x8b\x9b\xf44.\xe6\x81\x06k\x14\xba\xe5\x8f\x00\r\xdb\x0e\xb0\x1f\x95\xc7\xc2\xc5\xef7\xe9p\xfd\xd5r\xe9\xeeO%\x89%wGdI4\xd3\xc2\xa5h;\xdc\x0e\xe2\x91\xc5g\xb9\xcac\xd51\xa2\x03 \xe4\xd0H\x05\xd8\xf6H\xdd_\xa6\xb2r\xa5\x0b\x17\xfa\x80m%\x91/j\xccOj\xc9c\xc0\x02w\x08\x86G;\x17\xdb\x8d\x14Ius\x04\xebZj\xd78\xd4\xa1\xe9\xe7\xb6/\x9d\t\xd4%]\x0b\xc1\xc7\x82\\\xde\rO)\xfe5dh(_\\\x9fC\xbe\x99\x91\x19v\x91\x9bO\xee\x1a\x9b\x89\xaf~\x92^B@r\xc6k-\xedZ\xa4\xd2\nP5\x94\x93w\xabC\xa81^\xb73\xee\xf1^\x90\x06u\xd1\x89U\x1e\x97\xf4\x053\xfepQ\xdd]\xf5\x08?7\x16\xf4\x07y(\']{\xe0\x9d\xbc\x10z\xa4mS\xf6K\x1ch|m\x1e\xe2\xe96\x90MAc&\xcec\xfc\x14\xd3Q\x1b\xaf^\x9e\xee\xc4\xa3\xe4\xe7\xbd\xd5\xe6Q\xe2;\x89\x7f\xdds\xdd\x922\x90&5z^\xf1y>\xa7\x07;\xea\x8a\xb8\x7f\xcf\xf4\xb4\xed\x02\x95\x02\x95u\xb7\xc9\xf8oSp@rU[\x1d\x1e\xc2O\xe8\xc4vhWE\xb6\xdaxnoI\x85\xb8\xb4\x01?\x8f\xb4H5\x9b\xdb\t\xbby\x8c\nqb\xae\xaa\x9f\xff\xfe\xfd\x80\xd12`\xc3\x93y\x96\x924\xdc\xda?DD\xd39\xea\x82\xff4\x811+t\t@\xd4Z\xcb\xd5\x82d[$DD\xeb\x1eF\xb9\x8f\x89\xbe*\xbbu\x87\xe2\xce\xa1{\x95\xb3\xef\x82\\\xc8\xf4K\xabbGE\xe1\x97(\x84Q\x87\xab\xeax\x94\x1e\x82V\xe9Z\xf50sjo\x1aX\x7f\xae\xa3\xc5\x0b\x0f\xd6\xe7\xdbW\xdf\x99\x0c\xad\x03}\xe4\x91\xf0\xfc\xd6N&\x1b\xa0\xcf\xa7\x7f-\x19\x072j\xa0\xe1\x8e"\xbc\xd6F\x14\x1e\x08B\x82\x8f\xfeN[\x91\x0bp\xd1\x82\xcb\x94\x8fw\xff\x02\x98B\xee\xa9\xfa\xe5\x82\x1a\xec\x84G\x95<#\xe5\x926\x8e2\x81\xb1)\xafo\xee\xd0`Gw\xea\xb8k\r\xd6)\x01\xdb]\x8a\x87\x908\x91b\r\xf68W\xaf\x1fXK\x0fR\xf8\x0e\x80\xc0Uze\xd1.\xcc{\xa6\xd3\x80\xc3\xcfD\x96\xa63\xa2\xa5\xfc\xca\xe1\x88\xe6\x99H\xb3\x97m\x16@{@B\xac5\r\xa0\xe2E\xd7\xb9\xfe\xd2\x97\xf3\x01e1\t\xee\x8f\xb4\x84\xc4\'\xf0\xd3\xd9\x05}\x80\xdfKY"\xa4uY\xf1!\xdb\x9a\xb2ec\x08\xf7\x84\xad\x10\xb1e') +__pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x001\x1c\x00\x00\x12\t\x04\x00qSX\x14RP\xf1\x9a\xdcJ\xb0,}|h\x81\x00\x00\x00\x00\x00\x00\x00\x00\x07\xde\xa9\xef\xab\xd1[\xf8\x8b\x01Y\xec\xc4Q\xc4\xfag\x1bgj\x83\x9az\xdc\xd6\xb5\xba\x1b\xfb\xcd\x88\xfc\xb62\xc2R\x15\x9b\x0b\x7f=6\r\xdd\x01T\xf2\xe0i\xbd\xb5\xd8\xd2\xfe\xcdj\x93\xb1\xe6\x18\x07y\xebZ\xc8\x16\x8f3p\xd5\x9b\xfb\xba)\xb2z\xd2n\x9b\x01\xaa\x17&5-\xd0\xea\x04\xac\xd1\xd0\x94\x02-\xa9\xd2\x92zEK\x01\xe2\xdf\xb8L\xf2\'J\xfb\x87\x9f{\xb0\xb0w\x1c\x92cX\xc1o\xf9c\x93\xfcB\xc5\xcb\x1d"]\xcf\x8a\x91\xac$\'\x90\x92\x9e\xd5:j\xc46\x7f\x19\xccR-\xf3\x9fY\x1dz\xebN\xc7\x86\x89\x04\xe2\x8b\xbd\x1b\xc0\x8c}$\x87\x15\xa0\xe5]Q1\x16\xa9\x8d\xfa\xbe\xb0>\xa2.t@I@\xb6\xb2\xf5\x86\xe9\xe3\x7f\xf4\xda4\xecw\x03\'(\x88b\xbacRn\x9d\xbe?\x148\xfc\x8a\r\x10\x83\xab\xbf+\xee\x87\xc7\xcd\xe6\xc45(\xfa\xb45\xed\x08\x9f\x7fvf<\xde\xff\xab\xe5\xb2\xa1\x8cdu\xf7:[\xc9J*\x1f\xe5\xc9\xf4\xc1>r1\xb0\'w\xca\xc6%R"\xe9F|\x10\xd3\x9f\xd4f\xe9\x9c\x03\xd8d\xdd\x8ej\xce(\x9fV@\xff+\\\xddPR+\xab\x02\x08\x9e`\x85\xce\xdfn\x12\x95%\x9f\x08c\x87p\tZaK\xee=\x10\xf9\xa1\xb6-2\x91\xc5\xf7\x8b\xef\xde\xab$\x9b\xc5\x18\xae\x11\x02\xc6\xe7ME\x93\xb7\xa75\xe7\x01\xd3\xaa/\xc4\x82F8\xd3\x0e\xb2~F\xdd\xb3#\xa9\xb5\xa73\xf2\x9f\xe5\x95<\x00S-\xa4\xb4\xac\x10\x95\xd8q \r\xe34\x0f\xdb\x81%F\xc6\x98\xdd\\C\x98\xc8\x1d\x04aF!-]\xcd=`\x1fUmP\xb3\xd5\xcc\x96e\x83\x9a\xbe\xd3\x1b=a\x9f\xb4\xd7\x13}\xceOl\x9b 2\xcb\xbd\t>\xbc\xc5At\xcf\xa36\x95a\t\x14d\xe4\xcd\x91\x9a5\xa8J\x93\xc2\xca\xea\xd6\xc7\x01Y\x160^\x92\x082\x01\xbfz*\xcc4\xaf\xd8\xeb\xc4eC\x82\xc0\xd3\x0e\xd1M\xe5!\xc1\xe6\x12\x08Z\xc8\x9d\xcd%\x9dr,\xa2K\x96\xd3z\x9d\xbc\xa1\xc5\x92\xd6c\xe6\xfc\xe2\xe6\xc7\xb0\xf1\x8eo\xbd%\x9a\x1cf\x83F\x11\x01\x07\xc6\x99\xa9\x93$U`\xfa*j\x14E\xb5\x89\x1cO\x01<\xd1;$r\\\x92\xb4Z0\x13\xd8\x8d\xb7F,\xc0\x8d:\x16\xba\x99XlW\xeb\xe9O\xb0VCk\x8b\xae\xb4)V>sE\xdb\x10\xefm\x9d8\xa6\xaeO\x8aS\xfbu:\x9d\xeb90O4\x18\xd0\xfd\x97\x0fN0QC`\xa4\x88\xc1\xbb\x10\xd3\xa6\xbd\x1ap@\xc4n\xd2\xc3(\x08#\x884#/\xec\xc1Wy^uP\xddx\xc9p\xc0\xebcH\xa1s\x89\x91\x9d\xda\xd5\x12\xc5\xe3Hh\xf5{x`gu\xf1\xb5\xf6cx\xf5y}F\x8ex\x82\x08\x17\xd9\x0e\xeat\xf8\x1e\xa0>Z\xf1\xa3\x11\xd4\xeb\x85\xd7q\xc2\x8dF\xa0\xab\xc8\x89dH7\xc2\x1b\xb2\xc2\x9e\x87+\xd8\xd7\x8d\x95\xa3\xa6\xe5\xa3\x88Q\xea\xed;\xd6\xaa\xea\x02T/@N\xa3 8~\x15!\xda\x15\x15\x01\x84%\xfe\x08-=,\x11V\xb8*\xdb\xfa$\xe6,[\x95i-\xb2\xedm\x84l\x0e\xd1\xc6\xb9\xd5\xda\xd7.\xbbE\x173\xbb\xb1\x12\xe6\xcb4}-\xb5\xa2l\x138\x837a\x91XM\xd8E2\x11\xa3\x9d\xb3dR\x05\xf9\xad\xb7\x01mm\xb2U\xc0\xafAp\x87\xe4\xf1\x83\r\xf9\xfc\xe5VO\x00\xd9\xb0lT\x9c7\x15~\xee\x08\xba\xad\xd4r\x0c\xc9\xc6Y\x0eQ\x12\xeb2;~P%\x1fk\x7f\xe4U\xa1\xc9\x95a\xae\xf2\x9c\xd5@\x02\x81\xedLy]\xee\xf9wT\x99\xb8R\x9f\xdd0\x13#\xc32)\xf7\x1f\xa7\x99\x98\x1f\xba\xf1\x0c\x03*\xdf\xf2_E\xc3V\x0b\xc4\xf3\xe2\x83\x1bCe\xc4h\x83\xef\xc64\xb1\xfc\xc5su\xc7\x07y0\xd9+|\xe1\xb5\xb4&c5L\xbb=\x14\xe5\x98\xf7\x8c"\x99%6\x17~\x81\x81VF\xa9\t\xa4[\xb4S\xb6"\x94\x00\xce\x0e-\x97+\x98c\x05\x808\x87K\xe4\x82`\x10\x95x\x18\xc4\\\xe0\x86\xe6d\x01h\xf01\x91\x07\xd84\xf3\xdb0"\x06\xbbA]\x19\x05\xe5\xc6\xc9\x99\xdf\xae.\xfcN\x19I\x142\xeb7\xfb\xd1\x81^\x9e\xd4(|v\x7fl3\xa7E_\xe66\xcc\x08\x8d"\x1e(\xf4\x1e\x93\x8c\x85\xa3g`n\xe5\xe9]\x1a\xc4\xd6\xa0\x88\xf4\xa6.\xf4\xb3\xaap\xddz\xc3\xc6\xea#\xa9\xd5\xf5/(^^\xdc\x9b>\x08\xbf`=5Qs]\x9e\x14\xee\xe4Q/\x14\xcc\xdf\x89\xa6\xcb\x863\x01\xad\xbd\xb2x\x1d\xf6R\xf2\xea\x91\xa09\xe2\xbdR\xd80\x0c=\n\x84\xe5\x91\x84\x12\xf1\xeb_\x86\xa0\x7f\xf5\xb8\xf1\xd1\x1c\x87M\xdf\xf2\xc9c\xfc\xba\x82\x90Z\xe0)E\x1d\xd1y\x9a+r\x04\x07\xc8\r\xad\xc5b\xa1\xfd\xd6\xcf[In\x11\xf8I\xcd\xd9c\xea\xdc\x0e\xcd\x14\xd6G\x8a\xa7\xde\xfc\xf3\x0b\xbc.Wj\xe1\xe6$\x7f\xbf%+\xe4r(\xe5\xc8\xc5\xd3\xe2f\x18\x9dxL\xc7\x04!\xe7um\xccV\x1aF\x08J\xbd\xc7\xac\xf1\xc3\xaeC\x93\xf2\xa0\x8f-\x12d\xf8^\x0e\xa4(\xb0\xb7\xaf\xca\xf2\xf6B\xa2R\xbc\x9b\xe6a\xb5M;\xbam\xb1\xd2\xaa\xea\x0eU]m*y\xd6\x85b\xb3\xdc\x03\xcfpP\x06\xd1Iw\xcc\xbc\xfe\xcc\xcax\x7f\xa6B\x06\xf8\t\xe5\x80\xc6~\xcb\xd9\xf2\xc8`P\xff\xd3qe\xbd\xf0\xff\x17\x04V\x1b\xbb\xb5\xda\xba\x9c\x99\x17\xff_|]p\'\x84\xee4\xdf\xf6\x80[\xa6p6r\xdf\xdd\x91\xaa>\xd6\x02Lnd\x94Q\xa6\x14\x98\x85lo\xe3\xbd\x92\xa3\xe9\xd7\xfc\xb0u\xd8\x0f2J\x90P\xab\xa9\x04Q\x8e\xa0-y\xb11\xc4(\\\xa5@\xb4\x8a\x97\x99\xbd\xf7\x82p\xd5"d\xddJo*\x05\x94!\x99\xc6Ae\xa3\xc4\x1a\x92MQ\xdb\x89\x92\xf4\xaelm\x8fu_\x93\x01\x89l\x98Q\xe8\xac\x94n\x14,\x08\xeb\x86/60\xc6 \x1e\x00>\x08\xfb\x0e\xcf\xd4r\n\xac\x0b\x90\xfc\x15x\xf8\x86\x0e\xf9u\xb5\xebl\x82%R<\xd7\xf1\xa0\xb4\x89\x90Qv2\xe8\xa7b\x1d^Xn\x0c\xa5Rs-[\xfa\xb4\xef\x1c\xa1\xc6"\xb1[\xd7h\x10R=\xe8\x08\xd0mO|\xc5\xdc\xc4\x83;`\xba\x9d\xdb\xd9k\x94\xf2l\xc8\x82\xf6C,\xbf\xd3\'\xac\x08\x04)\xc8K&\xee\xea\xd7A\x91\x0f\xef\x8c\xbe\xf00;\x8f\xf2\x12\xdb\xacL\xa0\\\xceD\xda\x08\xb2\xcf\xac]\x92\x08\x93P]\xf8\xf4\x06\x898\x18\xcem\xc8\xc1\xdd\xfc#\xe8A\x04s\x1a0\x1dQs7h\x9fE\xcc\x9fB24\xd9\x97\xf0\x0c\x94\xe50\xfd\x90RT\xd5\xa5\x8c\x11\xb1\xd1\x87ST~P\xc7\xbf3@\x10\x1dzl\xc2\xbe\xf0\x13\xa3\x97~\r\xdf\x07\x94\xc5\x7fc\xbca\x07\x81\x8c\x14\x1d*\xbc\xb8~!\xcc\xf0=\xb3J\xf2;G\xdda\xa4\xaeLFN\xb4W\x1b\x80\x90\xfb\x08\xe0ReX3d\x1f4\x82\x9a\x9178\xcd\xa6\xc3\x9d\xe8\xca\xad]\x05c^\xdf\x86DKS\x13\xf1\xa6c@T\xc4t\xd1\x8cl+\x1b\x89\xe3P\x18\xfb\xd0k&_|a_\x10\n\xacz`\xa1.\x04\xfd\xfePt>\xc7^\xd3\xe0\xaaN0\x8fa4\xeb\x0e\xe8\x95\xf6\x18\x9f7&\xcar\x8a\xd5\xcbUa0"\xd8\xee\xde\x13\x85.?%\x8fm\xf0\x810e\x86\xdd%\xcf\x93\xe9\x15\x03"\xc0\x8cC\x95\xd3\xf0\x91\xcd\x01\x07\xe1\x186,N\xfc\x94\x87&l/\xc0J\xd7\x1a\xd9\x18S\x1c~\x91\xe5\xa1b\xcf\xfc\xec\x10@\xc6TtM$@(|\x9a]2\t)\xde7\x1fV\x0e,\x1d\xc8\xaa\x06\x9b\x8b\xaa\x06\'\xea\rf\xbc\xd0n\x8ee?\xd6\x17 \x18\x85\xc8I\x1a\xe8M\xf3\xda\xdd\xd5\x83%\x863\xec\xe6\xad\x11\x97\xc9\xb1n\x9d\xc8T{\x17\xcb\xbb\x8d\x10\xd4\x1d\x98\x17]7\xb7F\x97\xee\xdf\xe2\x1a\xa1\xae\x81\x17\xc0\xb65\xfe\x8d\xa6i\xe4\xc9n\xc9f\xad\xd8\x07\xd1\x96\x0fn\x7f\xfa\x86\xb2[\xf8ui\xa0\xd0\xca-\xd7\xe4\xa0\x84\xca\xf0\xfa\xa7:\x14\x88\xd2\x1bp\xb6\xb6\xa2\x1cm\xb0\x9e\xe2\x9d\x98\xb9\x93\x863\x9f\xbfj\xea\xd2\xa4\xeb{e\x03\x80\x95E\xf6p}\xdc\xbf\xdf\xa6O\x8c\xd0N\xf4Y\x1b\xa3\x86\x15\xa9\xb4\xdb \xfc\x16\xbb $\xb17\xf5\xcdn\x8c\x0f\xbcx\xe0\xa4oQB\xa5\xcc\xdf\xdf\xc1dQ\x86\x84\xd0k+\xe4\x102\xec\xe4\xed\xad [\x92<\x92<\xa8\xe6\xac\x9c\x0f*7\xb8\x84V\xc0\xbf7\x11\x88*\xaedK\x10L\xf1\xfah[\xb2\n8\x99\x02\xa6\xbct\xa9\xaf\xe1\x88f*S\xf4\x90\x8e\xd6h<\x12Q\xb7\x91R<\x8aP\x8f\xb9s\xd3(\xe6\xe5\xcc\x15\xd2\xca\x169W\xcfC\xa4\xcba\\\xd4\x14\xf0\xd2{j\xf9\x8f\x94@>\xff\xcf`k\xd0\xad!\x05Q\xd0\xee{\x9ez\xb6`\xde\x9d1L\xa1\x81\xfb\x00\x96T\x82\x8c\xdd\xdc\xe2\xdaq\'\x8d\xf2\xce\x89\xbb\x96\xe4\\\xeb7\x10b\xe9{\xc2\x92\xa4w\xb9\xb5\xf6\x8d\x83\x08 \x074;\x8ez\xfa\xa7\xe7\xbc\xea\x8e\xd7$\xd5$\xc8\xc1\xce([\xdd\x9f-s\xb2n>\x97\xa4=E\xa0\x96"9\xf9\xca\x87\x04I8\x97\xee$\x04NK\'\x06\xd3S\x0b\xfd\xdb\x8e\x92LV\xefx5bkl\xe1T8\xc2\r8H\xc52UU\x8bA\xf2\x06"b\xea\x03\xdfo(d\xa9\xa2\xa2x^\xe9\xe2\x9dV.\x04G\x8cE\x11\xe2X\xdcP\x113\xfa\xbf\x92\x13\x01\x83\xf6\x9f\xdev+\xd7W\xa1\xf6h\x90\x87VG\xc1k\xf2\xd5\x9d\x898u\xd7h%\x00Q\xefE\x87]B\xc7\xd6pd\x01\xcd\xdc7\xe9_q\x13\xd3Io\xc1\xbam=Bk\x92A\x89\xfd\xa4\x15\x80\xe3\xa2\xff\xaf\xe2\xcdQ\x85\xdd8{\xe2K\xbf1\xb3\xe9\xa2\x0e\x11MV\xff\x08\xbbU\x0c\xcd\xff\xb1\x7f\xe101\x86j6\xfa\xb6\x93\xd4\xfd\x0e\xbdsU\xe9\xa3Q5\x9f=8o\xd1\xe5\xb7\xe4\xfd\xc3\xf9N\xb0\x92\xe5\xd0\xf2Y\xe8\xc8\'\xa6r.&\xe4\xec\xa2\x80\xf2\x98\x91\xb6\x15j\xd6~\x8c\x97hI\x16\xa8E\xa4\xae\xe1r\x07T\xff\xd2\xe1\xbeN\xe3\xdb`1\xf4\xeab\'\x13\xa4q@\xe8\x1ai3?/\xe1\x97gq\x86\x17\xfeb\xbe&\xda\xdc\xa7\x1b\xd6\x84b\x06\x18/\xf2d\xbb\xcf*\xb5\x96+\xdd\xf6\x99\xc3\x9a\x947$M\x03\xed"\xd9E\x9fT\xda\x1fz\xf0X\x9f\xf0I\x18\xd1\xf8\xeb\x98\x04\xb4 n\x98v\xd1h\x80"\xb6Xx\r\xde\x8eT\x160\t$bF5\xe5M\x02vc}\xe2\xf2\x17>\x9a\x1dL\x06G\x03\x0f\xb7%\x01\x1a\xbdj\xa8\x1d>\x06\xcd<\xfdO\x03\x85\xc9\x8b\xb9\x8d\xb50(\x1c\x85.yT\x94>\xcd\xf9\x17\x98\xfe0\x16\xb2\\=Y\xa0\xa9Pk\xcf\xfb\xdd"c\xa8\x83\xea\x96q\x1f\x06\x92\x13\x95\xd6\xa1c\x90\xf4/\xb7\xa2L\x0b\xff\xd3\xb9\xbe{tD\xb3\xa6}\xbdW\x87\x8d\x00\xces\xc4\xbe\xb2\x17\xc4i\xa6T\rA\x12m\x97-f\xeca\x96\x17\xe8\xff\x1f6NJ$\xaeW@"*\xb1\x98\x92>`}~Z+w\x87\x91r\x08d\x04\xbf\xbf\x02t\xeb\x9a\t\xb8\xb2\xc2,\x13\x0b\x02\xb9%F\xa1\x8f\tM\xed\xd0\xe1\xd4\xa0\xbc\xc6\x9b\xb0_I\xdb\x12\xcc\x8e>\xc0\xb9\x1a\xe0r\x8f6\xb6\x9c\xc5_*\xba\x89#\x97m\x13<\xb59\xc2D\xdc\xa2\x1c\xb9;c\x95J\xba^\xf4U\xd7_\xf7\x98\xc2L[\xfa\x88\xcc\x9d\xbe@24\xad\x0f\xc7\x85\xaa; \xb2\x88\xcf\x075\x99\x8eH&-4cR?&1\xca\xc3`\x9eMvl\xf8\x8c\x89\x97\xd7<\x92\x19K\xe9\xa4\xf8\xe9q\xf4\x1b~\xfb\xc3\xc0\xc9\xa9\xa3\xcc\xfd\xfei5!,\x172\xd8`\x86\xb1?\x9c\xcf\x88\xf3,9\xa4\xb3\x19\xfe\xdf\xa4\x833%rs"Ba\x12r!\xcc\xf5\xdf\x02nh\xf9\xbcS\x83\xdbM\x0b\'\xc4\x13\x1f\xa1\xbf\x08i5\xba\xaa\xfc\x0b\x13|\xe0IO2\xe5\xb8\xb0\xefo\x99\xdb\x96\xfbB\xd2\xeb\xba\xb1\xb1B\xda\xa9\xfd\xf0\xfa\xd7\xefgFP\xe2L\x86.2\xf8\xea\xd6\xe7$9\xfb<\xd8\xfb\xf1Mj\xf5\x89\xa1\x90"\xa2\xcb\xbb\x7f]3\xb5g\xbdg\x1e\x15\x80\xd1 \xd1\xc3\xad\x86u\x8e\xb2\xdd,}\xd9\xc0\x9f\x04S\x99j-\xbf\x13\xf8\x05+|\xa2\x94\xbe\xc5o\xc2\xa8\r\x01\xda\xc5\xce\x04\x99I\x8c\x19mH\xf7\xf4\xf8g2/\xdc\x10{\x9a\x13\xa0#\xd0\xa7w\xc7\xfa\x98\xb4\x11\xd5\x0c\xc4\x89\x15\xdb\xfb\xcd)\x0cz.R\xc4q\xaf\xe1\xde\xa8#~\xf6W\x95\r\xbbRr\x11\xcb\x11\xba``\x8bc\xad\xb6\x88\xed\xa7%<\xe3s\x8f\xb9\xe2\xac\xf8\xfc\xa1K\xdfcr\xe4\xe5\xc7\xa3\x01\xec)\xc5\xa5\xd3\xcb\x81\xe7\x94\xfd\xf5!\xaaUb\x7f*\xa7\xe2A\xe0nJ\x7f\x0e\x88\xbd\xe5\x88\xd6X\xb2}\xe6<\x00\x9b\t\xe0L\xdfu\x0c 4\xd4\x98\xb9\xce7A\x8d\xe9]\xc1\xd8z\x93\xe9\x04\x02\xe91\xc2\xb7\x84cP\xb6Y9\x8a\xd162\xae\xbb\xeb\x88\x02Zdn\xb7\xb88<\n\xc2\x90\xfdY\x137V\x9d\xfaS@\x01\x19\xfcd\x9fyE;\x94\x90\xfa\x10#O\xdf\xfc%\xd3\xa5\t\x92\x08\x8e\xc2\x1f\xd0\x82\xe5S\x06\x8am\xf7U\xee\xca\x90i\xad\xfd\xc5\x8eI<\xf5\x8b\x87\x11\x81\xc0\xa8\x1eUi\x03r8\x8d3\xac\x94j\x8e\xa2b\xacG6\x04\x84\x02\x06\xa0\x07\x98\xbd\x8fY\x1b\xc5\x9cQ\xf5u]\x00\xdc7\x17\xee\x84u\xcd.\xe1\xbb\xc2{Z\xd77\x87\x85\xc9f\xfa\x87N\x88\x9bJ\xe8\xef\xdf\x1d/%\xb2O\xff\x1b\x12v\xe1\xc0\xbbU\xfb\xc1(\xbf\x08\xf1d\xc8\xb1Y;\xbf\x9f\x8d\xf6\xa4\x7f\x8f\x1bK\x14t\xf48\x9dJ\xe9\x16\xfe\x80\xec\x8f\x8c\xec\x92,\x12\xe9m\x8b\x91\x9b\xb15\xf2j\xf5ar\xef?\x8aC)\xa6S;\xc1\x1aL\x86\xd0\x98O\xbf\xe1\xca\xc4\xaf\x8f\xde\x17\xee\xc2m\x07\x18O\xaa\xd2?\x07\xdd\xb1\xf9\xde\x16h\xee\xa3i\xee\xc7$\xb5\xbe\xdaM\xbfwD\x8a\x9a&"\x88\xe4Y\x0f3\x11S\x05\xfb\xa6\xbdbF\x94\xa69>\xeb\xd1\xefcm(I\xac\x84\x8f\xdb\xb0\x9d\x95\x849A\xadI6\x8e\x99\x0f~\xf6\x0eL\xde\xfe<\xcfx\xfb\x85I\x948[\xd5\x0cW0\xea\xf8\xb3\xac\xbd@\x00`\xb1\xd1Uv\xcf\x1aG#W\xffV\x95\x87=\xa4\x1c\xa9:\xf2\xf0\x0f\xbc\x97\xf5\xdab\xca\x87P\x87\x16Z\xa3l3b}\xd2\x1bQ\xbd\xcap\x0b;\xc4\x9f\xb5\x04\x113\xce\xe9\x97\x05\xe7\xea\xcb\xc0\xb0h\x83\x13\xd0T\xd7\xf4\xee8\x9a\xcc\xaf\xfa\r\x082-\x15y::\x00b\xd2g\x81\xc2%~y\x8cj\xd2\x98\x88[\t\x81\'\x82j\xfb\x94\xc9Y\xc2I,\xc5\x9b\x18U&\x0e\xcd\x9e\xf7gal4v\xc9\xcd\xa8\xad#\xe6\x82\xadX`\xc6W\x12\x928\x97\xd4\xd7\xfaa\x8f\xd1I\xfc\x99>\xa5,T\xe9\xd7]O`\xdc=\xd4n:Q\xc1V#Dg\xda-\xaa \xf1\x8b\x94E\x99\xbfx\x1bv\xd1\xdf\x1f\x95\xa4VW\xf3\xaa]\x88\xd9\x98\x06.\xa9\xa5/\xee\x07L\xb5\xf94eF\xd2d\xaf\x06\x1c\xd1\xeb\xdb\xf3\xb8\xbd\xe2G\xbd\x0e\x0c\xfas\xc7)N[\xf6i\xce\x07__\xd4\xceqb\x82?\x90\x0f4t\xa2\x86\x81m\xf1!u0\xba\xa3d\xdf\xfd\xc3\xee\xa2\xce5\x16k|A\xb5\xba^@\xad \xf2\xba\x82\xe9\xb3:\xa3c\xe4<\xfd*A/;\xd7\xf1j\xab\xb5\x9f\xa6&,i\xce.\xc3\xd9\xed\xa0\xbf\x04\xcb\x0e\xf7\x9c\x968FQ\xabg\xb7\xccya\xa9\xaa\xb1\xdf\x0c\xb5u\x8d\x0f,\x80\xa9/f\xb4\x11v\xce\xeewH\x88|\x17\x03\x16l\x99\xcfEv\x85X\xdcV\x1d\xc1\xd1\xc9\xd7\x83)\xca\xa5\xc6\x8c\x88\xeb\x0e\xd6\xe1Y\x01\xeev\xfe\x8d\x8e\xe7&\xc1{\x82x_x\xa4\xca\xc7p\xb09\xbe\xd2p0\xf6c\x931J\xfe\xf9\xc1J"T\xc5\xcd\x02l(D\x89v\xca*\xf1\xd9k\xee\xffJ^UfB\x9ac\xc8C\x98\x11\x9d\x15R\x1a\xf7R7\xa7\x88\xec\xd1\xef\x80\\(\xa8N\x0b\xd3\x0c\xbepR\xb5\xc0\x89\x10!\xae\xc7\xb5X\x1e\xafa\xd1\xf0`\xb7:\x94\xc4~\xff+\x18\x0b\xdc\xfd\xb1\x92\x07\xf5\x0eE\x9d\x04K\xff\xeb7\xdf\xa8V\x89s\x9doD\x9a\xb6\xb4\x16\xa2\xf7\x0e\xe2\n\xa2\xd2\x1e\x96y\x0e-\x9e\xc9\xe4F\x159[\xf3\xcc\xe6S Yl\x83\xd5\xfbD\\\xf0\xfc\xbe\xa9\xb3\xbb[\xfeM-\x1e\xb9\xb0\xac:\x17\xd8*\x02\xfa\xb0\x05Asj\x16\x10\xe4\xfd\xf8w\xce\xac(\xa2\xbd \xfd\xc3\xea\xeeu\xefQ\xef\x8a\x97\x86vq\xd0 X\x8b\xff\x1c\x9c\x9c/[\x08#\xbb\x14\x89\x9e\xf9\xbc\xaaz\x1d\xb6_\x8b^\xf5;\x90\x18\x92\xe6\x82\x9e\x07Q\xf1\x9c\xb9\xf2L\x98D\\M\xea;\x81\xe67G[\xec\xa4M\x05V\xb1\xda\x0c\xa5\x1a\xbb.X(\xf5$\xc0\xa8\xc8\nw\t\xe3\x80z\x19y.\x8b\x91\x923\x19G\xee\x97\xd9M@\xc1`\xee\xeb\xb4}\xddz\x0fp\xb7\'\'\xb9^\xa0\x04\xaa\xfd\x9b\xdc\x08X\xc3\x03\xbdY\x95\\\xb3Gc\x89\xec\xe5[e\xa6\x98\x90\xff\xaa\x93O\xa7\xbf\x82F\xc2\xa8h\xbeh\x1b\x17\n\xa7\xfdv\x93\x86=\x85\xb0vG\x96n\xe7\xf1\xcd:\x9bPV\xb3e\x02\x08/\x17/\x9f\x1f\xd7\xea\x8d\x10\xca\xbb/\x85\nD\xcf\xaf\x99\xb9\x8ci\x11\xdc\xb5\xea\x07\xee\xcc\x1f\xfa\x18tQ\xd0kY\xb4y\xa7\xc6OZ\x93\x82\xc2L\x94\xd7\xfe$\x9b`\x19z\x95\x16u\xa2\xeb\ts\xe3\x03%`\t\x03\xcc\x84i\xa5\xffx\xa2r~\x86\xb6(\xb0&\x9aS\xf1*J\xcf\x83D\x8a:\xcad\xad\td\x95\rU/R2g1Rt\x04\xa8*Y\x1d\xae\x1f7^\x97c)\xf2\x95\xf2y\x91\xe30\xe5\xae\xfaS\xf3\xa0 \x16\x167\xdapz\xe4\xe7`4\xb1\xe2\xfb\x82\xb7\x11\xb4\x80\x10Q\xdeg\xbf;.\xf6?\x00GM\xc9b\x07\xe7z\xb2^{m\xb0!\t\xc8\xed^\xca\x9f\xae\xe9\x0b\x1a\x08g*,\xa3R\xfb\x9b\xe6 \x9e:4\xcf~p\xbc\x8d0\xbaR"\x9b{\x15\xfd\xd7u\xf5\x937\xd0l\xf9]v\x83\xaav\xf6R\xe0\x08\x96\xa9\x84\x8f\xf4\xe2M*\x0f\xb0\x90 W\xe3\xcd\x80+\xf5\xd0\x1e\t\x9e\xca:\xcb\xdf1>\xb92\xd6}o\xcc.]\x11Q\n\x96\xecC\xfa\x1a\x9c\xf4\xd3umNr\xfdQ\x81\x1c\xedb0w\xe1cC\x93\x84\xf8\xff,\x9d\x12W\xf0\xc6\xa2"\x00:\xa8c{uAqJ\x0fi\x9e\x89\xbbd\xf7\x00\x90\'\xf7,2\xe2\xea\xb1\x98h\xaa\x06\xfa3\x02\xaaH\xb5Zz\x02Z\x12\x8ct\x03\xc1\x97N\n3OXS\xc7\xd0j\xa1\xa7\x10\x00\x14~fqv\x05\x13K\xe5\x92\xc0\xd3\x00\xb3\xc8Sp\xba\xa0\xc3\xc6\xfd\xfbj,\xb9R\x11\xd8=\t\xddg\x93\x84\x84\xcd\xb0B\xec\xde\xae4\xb1\xe5l\x95L\x13\xe6p\xe0)m\xbc\xedI\xda\r\x9c=\xf8\xaa\xf2\xd52\x997\xec\x91\xa4\x8e\r\xd1\x9c&U\xc3vt\x00M\xc4\xa7I\xf6O\n\x9akjD<\x1a\xe0\xfb\x08\tb(\xe9=\x17\xabj\xfdi\x9d\xdc\xab\xa1@H\xecn\x8c"\xd2\xc6\x85hUy\x8b\xbe\xb3w*W\xd0n\x9c\xf2C\xc6\xe5\xa8o,\xda9\x9f\xbc\xdb\x18\x1e\x8d\xb2iB\xa8u\xffj\x90B\x1e\xfd\xae;)\xa7\xcc\xd7\xa7\x9de\x8fd\xed~\xdf\x90W\r\xa1\x07#\x16>\x16\x02\x14E/\x083`rVj\xdf\xed&\xa6\x8d\xc0\x94\xf4\x8f\t-\x1c\xedm+v\xfe\x90l~&\xf7kTC?\x8f)V\x1a\xc5\xca\xbb\x90\xe0o\x84\xb7}\xe0\xf4E\xe1"\x96W\xf3\xe1MK\xba"\x94\xc0(CAI\x00=9ho7\xd9\xd9\x9blca9\xa1;\x07\x0ee\xe6\xad \x82\xe0\xb4q\xe3\xc6\x1ePwk\xeed\xe8[\x07_\xddl\x14\x04\xc1\xb6\xa8\xab\x0f:\xc5\xde\x81\x1d:p\xc6\xc0\x9b\x91\x84\x7f\xd2\xad\r\x17t\x8dj\\\x1b0pT\xf6\x1d!+2\x18Pw\x9f\xdaT\xde\xa3,\x9c\x8a\xef\xc3\x87\xfdT\xe8\xf9\xf7\xe6\x98\xd1\xf5\xbd\x86I\xf2\x94\xeega\x13\x95*\x9d\xf7z|\xe6O\xc4|C\xae\xf7\x13\xea\x00kdw!\x9d\xb2\xcd=\x92u\x9cS\xb5\x8b?\xdf\x8bA\x85\x93\x92j\x07\xa9u(o\xc9\xdb\x13\x94\x81\xa0\xfeb\xf3?\x0ejf\xc1\xbb^\x86nR\x15\xe7M\xd82z\xb10\xf1J\xdf\xca\x99\x02\xe0\x10\xc5\xcd\xcb\xa6\xc5\xb4\xd8\xb6\x1c\xe3u\x83\xdf3\xc4a\xfakij\xceb"\x19\xdck\x9e\xe7B\xb2\xe5\xca\xbd\xf6f\'\xf9\x83``e\x9bm\xe3c\x9b7"\xcf4\xa5\x95\x1a~\xdc\xefM\xbfOifR\xc7$x;\xb4\xd8\x83k\x06\xad\x98]9\x0e\xa46:\xe2\xb5\xd2\x8bS\xf1\xb8\xc5\xe2\xf1\xa6\xfd\xb4\x15\xf6.|[\xc2{\x15D\xe0\xf2Rsr\xfdL\xc9\xe3\xfa\xcd\x85\xd6\x8ab\x9c5\x05)\x04\xca\xdf\xbb\xa3\x19\xbdb\x1f\xa3Q\x02\x99\x127DfU\x81p\xe8aw=\xb99\x9f\xd4\xf2\xc0\xd0\xc5f\xb0Gw\xeb\xedI2w\xdaGS\x86K.\xb7\xdc-\x8a(\r\xcce\xc1\xcd1\x90\x98 Cj\x7f{n\x1f#\xa8YV\x0e\xde\x9a\xdd\xe1\xea\xa3\xcf\xe3U\xb5\xc6?\x1436R\xeb\xe3\xbd\xcc\xe7\xde\xd4\x01\xdc&|Lu\x8b\x96\xf7.\x8a&[\x80\x81tp\xfc]iG\x8eHQ\xf6\xd5E\xc3\xfbc>\x08x\x88\x80\xb2\xe3\xc9\x89\x14\xaeEP\xf1(\x0cu\xac\xb6\xd3\x05g\xc8\x1c\xbe%G\xc21\x8c\x89\xaa1\xa4\xc1A\xdbe\x07wl\xf8\x8d\x9e\x98&0\xf5t\xc0\xcaf\x18\xe8\x9d\xf7\x1b\x18/Bo\x1bP!\xad\x00\r\xde\x15\x10\x02\xb3\xae\xc2\xdb7\xaf\xcf#\x0c\xa5\xa8\x8f\xed\xd4\x95\x88\x07\n\xabu\x94\x84%(\x8b\x8a\xea\x8f\x01w*\x81\x92\x85\xe1\xa5\xab\xab\x1dJ\xa6\x93\xf0\xee%\xff\xee\x15\x83\xdfKP\xe9)S\x15\x9f \x88u \x11\xc98Kc\xad\x14d\xaf\xfd\xa7\n>\xce\x85\x80@/\x88\xc6w\xdf\x81\\*\xe6\x06\x03\x0c\x0c\xef\x8eX\xa5\xa5\xe8\xf9\x16l\xcc\xbc,\x81\xca\x0f\x8e\x0c\xdf\xe6S\xab\x0eR\t\x883Y\x94\xdd\xfeH%\xb8\xb5\x90=6=\x8fe\t\x19\xf79\xe3\xcb(\x1a\x84\x8f\xd9\r>\x06\xb1\x12\xfdS\x7fd\xd9~74R\xa9\xe9\x921\xe8\xd0\xbd#\x89\xb5\xe2\x03\xbb\xa2X\x00\xce+\xdc\x96f\x1bn"\x07\xb7\xc3\x9f2+\x11V\x01\xb5\xa4\x8d\n.\x077\xe8\xfe\xc2Y\xde\x12mb;\x0b\xfe\xbf\xddd\xa2\x0b\x16\xea8B$\x04\x98\xffI\x83\xe8\xcd\\\nW.\x1e\x9a\xf8\x9a\x9c\xe7\x82h\xd4Z\n\xffE?\xfe\x9d\xa7\x81\xb2\xb7z\xa7\xc8\x91\xae\\\'\xb9Jr\t\x96\xdf\xef0\xe7j\xbd\xfd\xeb}\x87\x03\x8aMYb\xa1\xde\x98?\xf0\xc07\x07\x99\xc2\x9d\xd5\x9d \xe1q[\x0b\xbe\xfa\xb1\x83\x92\xafJH\x9c\x08b\xdb|c\xe3\x1b,K!i\xa6h\x91mrC4q\xf5\x92\x9b\xab\xc0\xdc\x1e\x9c]\xc8\x89\xe7:\xb3\xffW+HQ\x1a}l\x81\x93\xa91\xd1\xb3%\xacH\xd1\x9b\x8b\xd0Q\x10s\xf6g;_\x03\xd0\x8f\xbd+\xb2\x01\x9f\x16\xb3c\xba\x88r\x15N\xed\xba\x19hL\x89\xadv\x98\xb6\x87j\x0e\x93\xb4)\xa3\xc9G\xdas\x8b(\xdbW\xf9\xb6\xb2@|\x97\x87\xb1\x97W\xc2a\x90\x98X\x08~\xa0\xab\x15\x02\xd6:\\e\xb3\xa7\x94Jd\xad\x87\xe9\x17>y\xae2\x10\xc4\xbe\xb8o\xd3\xf7\xceW=\xe2\xf7=O\x1b7\xc1b\xbc\xca\xda\xbf\xa5c3\xa6\xec\x80%\x95.\x181TQ\xe7\x7f}\xac|\xf0B\xb8\x981\xc4\xf5n\x045\xe5\x8e\xb3{\xa1\x0e\xa9R\x9f\x02\x8f\x1eQc\xd8&\x06\x06\xa6\x13mgj\xbd\x8b\xdf\x99\xcc\x88Fr\x07YV\x97@\x90\xf1\xc7\x1f\x87\xdb\xa6b\xa5h\xbdA\xd2RJ\x94\r&Y9R\xc6\x87\xcb\xbcs\xb8|\xab\xc7sy:t\xca\xac\xe4\xe8\xa9,\xde\x9c\x91,J\x87\r\xb3\xe1EP\x10\x1c{-\x9aE\xdaH\xc9.-\xff\xd9\xe7\x07\x95\x0f.\xedR\xfbL\x97d\x9d=l\xf5F\xfd1S\x84\x88x\xb9?\xcf\xce!\xf0w\xae\xb90\xd6{!\xd3r\xd5\xb4\xc4\x8d#\xb4\xb4\n.\xb3P\xf1\xafD\xb5\xeep\xed\x05By\xc5\xb1\xbc\xceF\xce\x8a\x15\xeb+\x81z\x8830\xf1hm\xa1\xa1\xa5E\xeaE\x9e\xc9xR\x9d=?\x03^#Yb\xba\x07E\xde\xb5\xfbh\xa6at<\xed/2\x9e""0J\xac*\xca&yo\xb9\xc3\xdc}_\x84\xde_\x17`\x1db\xa9)!\x1b\x8d\nk?\xf6\xcd}\xaan\xc44k?\xe8E\xfaA\xc9\x033\xea\xb9#c\x1b\xb8\xb3/otu\x97\x06\xfd\xe5-0\xd2\x92?\x16\xf4\x12\x0c\x9f\x02\xc5\x1e\xf4\xacZk\xa1\xf0\xc2\x1doH\xc7\xf3\x9f\xae\x9d\x9a\\\x15tRW\xd6L\xdd\x83v\xad7\x8b\'\xa5\xe2A5V\xeb\xee\xf1\xaf\xfb\x11\xde\xf9\x19FC[P\x85Q\xa30\xc9\x98\n\xba\xf3\xcf\xbd?o\xb7\x9a\x17\xb2\xcc\xa9zy\x85\xd1\n9\xcc8\xe93U\x89\xcd9\xf1W\x9c\xf6\x02F\x9e\xb0\xf1\x0b\x8a\x17\xc3\x87\xec\x95z\xaf\\\xed\x880\x90\x02Wj\xcc\x19\x7f\x16\xb5\x93\rUjm\x0b\x93\xee\xf2\xdc\xed\x9b\xe4\x0bo\xcf\x04=\xfa\xd5E\x8f\xcc~\xd8n\xb95q9~\xb9\x07\x10yl\x8e\xd9\xc5\xd6\x04\xf7@#\x8c\xeb\x8b\xdd\xa2!\xc4\x93f\xf7\x943\xa4G,\x90\xad\xed\r\x025\xe9}\xe3s?I\xcdSZ\xe9\xc9\xaa-\xb7"\x8f#@\xd1\xcc\x97\x11G\xb5\x0b') diff --git a/dist/pyarmor_runtime_000000/__init__.py b/dist/pyarmor_runtime_000000/__init__.py index 0d5347a..9540c4a 100644 --- a/dist/pyarmor_runtime_000000/__init__.py +++ b/dist/pyarmor_runtime_000000/__init__.py @@ -1,2 +1,2 @@ -# Pyarmor 9.2.3 (trial), 000000, 2026-01-22T02:45:58.114587 +# Pyarmor 9.2.3 (trial), 000000, 2026-01-24T06:52:53.934396 from .pyarmor_runtime import __pyarmor__ diff --git a/index.html b/index.html index 3c87b3b..f155e51 100644 --- a/index.html +++ b/index.html @@ -64,11 +64,11 @@ function scrollLog(){logEl.scrollTop = logEl.scrollHeight} function updateStatus(process_status){ let emoji = '⚪', text = '未知'; - if(process_status === 'online'){ emoji = '🟢'; text = '运行中'; } - else if(process_status === 'stopped'){ emoji = '🔴'; text = '已停止'; } - else if(process_status === 'errored'){ emoji = '🔥'; text = '错误'; } - else if(process_status === 'launching' || process_status === 'starting'){ emoji = '🟡'; text = '启动中'; } - else if(process_status === 'waiting restart'){ emoji = '🟡'; text = '等待重启'; } + if(process_status === 'online'){ emoji = ' '; text = '运行中'; } + else if(process_status === 'stopped'){ emoji = ' '; text = '已停止'; } + else if(process_status === 'errored'){ emoji = ' '; text = '错误'; } + else if(process_status === 'launching' || process_status === 'starting'){ emoji = ' '; text = '启动中'; } + else if(process_status === 'waiting restart'){ emoji = ' '; text = '等待重启'; } else if(process_status === 'not_found'){ emoji = '❌'; text = '未注册到 PM2'; } statusIndicator.innerHTML = `${emoji} ${text}`; } diff --git a/web.py b/web.py index c72da33..60c7d92 100644 --- a/web.py +++ b/web.py @@ -15,128 +15,128 @@ MAX_LOG_LINES = 300 # CORS app.add_middleware( - CORSMiddleware, - allow_origins=["*"], - allow_methods=["GET"], - allow_headers=["*"], + CORSMiddleware, + allow_origins=["*"], + allow_methods=["GET"], + allow_headers=["*"], ) # ---------------- 工具 ---------------- def strip_ansi_codes(text: str) -> str: - return re.sub(r'\x1b\[[0-9;]*m', '', text) + return re.sub(r'\x1b\[[0-9;]*m', '', text) async def run_pm2(cmd: str) -> str: - process = await asyncio.create_subprocess_shell( - f"pm2 {cmd}", - stdout=asyncio.subprocess.PIPE, - stderr=asyncio.subprocess.PIPE, - ) - try: - stdout, stderr = await asyncio.wait_for(process.communicate(), timeout=15.0) - return (stdout or stderr).decode(errors="ignore").strip() - except asyncio.TimeoutError: - process.kill() - return "ERROR: PM2 命令超时" + process = await asyncio.create_subprocess_shell( + f"pm2 {cmd}", + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE, + ) + try: + stdout, stderr = await asyncio.wait_for(process.communicate(), timeout=15.0) + return (stdout or stderr).decode(errors="ignore").strip() + except asyncio.TimeoutError: + process.kill() + return "ERROR: PM2 命令超时" async def read_log_path(path: str, lines: int) -> str: - if not path: - return "无日志路径\n" - if "/dev/null" in path: - return "日志输出被禁用(PM2 配置为无日志)\n" - log_file = Path(path) - if not log_file.exists(): - return f"日志文件不存在: {path}\n" - try: - with open(log_file, "r", encoding="utf-8", errors="ignore") as f: - content_lines = f.readlines() - return "".join(content_lines[-lines:]) if content_lines else "无日志内容\n" - except Exception as e: - return f"读取日志失败 ({path}): {str(e)}\n" + if not path: + return "无日志路径\n" + if "/dev/null" in path: + return "日志输出被禁用(PM2 配置为无日志)\n" + log_file = Path(path) + if not log_file.exists(): + return f"日志文件不存在: {path}\n" + try: + with open(log_file, "r", encoding="utf-8", errors="ignore") as f: + content_lines = f.readlines() + return "".join(content_lines[-lines:]) if content_lines else "无日志内容\n" + except Exception as e: + return f"读取日志失败 ({path}): {str(e)}\n" async def get_hdmi_info() -> dict: - describe_raw = await run_pm2(f"describe {BOT_NAME}") - describe_clean = strip_ansi_codes(describe_raw) + describe_raw = await run_pm2(f"describe {BOT_NAME}") + describe_clean = strip_ansi_codes(describe_raw) - if ("No such process" in describe_clean or - "Unknown process" in describe_clean or - "not found" in describe_clean.lower() or - not describe_clean.strip()): - return { - "process_status": "not_found", - "out_path": None, - "err_path": None, - } + if ("No such process" in describe_clean or + "Unknown process" in describe_clean or + "not found" in describe_clean.lower() or + not describe_clean.strip()): + return { + "process_status": "not_found", + "out_path": None, + "err_path": None, + } - status = "unknown" - out_path = None - err_path = None + status = "unknown" + out_path = None + err_path = None - for line in describe_raw.splitlines(): - line_clean = strip_ansi_codes(line) - if line_clean.count('│') < 2: - continue - parts = [p.strip() for p in line_clean.split('│') if p.strip()] + for line in describe_raw.splitlines(): + line_clean = strip_ansi_codes(line) + if line_clean.count('│') < 2: + continue + parts = [p.strip() for p in line_clean.split('│') if p.strip()] - if len(parts) >= 2: - key = parts[0].lower() - value = parts[1] + if len(parts) >= 2: + key = parts[0].lower() + value = parts[1] - if key == "status": - status = value.lower() - elif key == "out_log_path": - out_path = value - elif key == "err_log_path": - err_path = value + if key == "status": + status = value.lower() + elif key == "out_log_path": + out_path = value + elif key == "err_log_path": + err_path = value - # 备用默认路径(仅当 describe 未提供时) - if not out_path: - out_path = str(DEFAULT_LOG_DIR / f"{BOT_NAME}-out.log") - if not err_path: - err_path = str(DEFAULT_LOG_DIR / f"{BOT_NAME}-error.log") + # 备用默认路径(仅当 describe 未提供时) + if not out_path: + out_path = str(DEFAULT_LOG_DIR / f"{BOT_NAME}-out.log") + if not err_path: + err_path = str(DEFAULT_LOG_DIR / f"{BOT_NAME}-error.log") - return { - "process_status": status, - "out_path": out_path, - "err_path": err_path, - } + return { + "process_status": status, + "out_path": out_path, + "err_path": err_path, + } # ---------------- 路由 ---------------- @app.get("/start") async def start(): - output = await run_pm2(f"start {BOT_NAME}") - return JSONResponse({"output": output}) + output = await run_pm2(f"start {BOT_NAME}") + return JSONResponse({"output": output}) @app.get("/stop") async def stop(): - output = await run_pm2(f"stop {BOT_NAME}") - return JSONResponse({"output": output}) + output = await run_pm2(f"stop {BOT_NAME}") + return JSONResponse({"output": output}) @app.get("/restart") async def restart(): - output = await run_pm2(f"restart {BOT_NAME}") - return JSONResponse({"output": output}) + output = await run_pm2(f"restart {BOT_NAME}") + return JSONResponse({"output": output}) @app.get("/status") async def status(): - full_status_raw = await run_pm2("status") - full_status = strip_ansi_codes(full_status_raw) # 去除颜色代码,前端显示更干净 + full_status_raw = await run_pm2("status") + full_status = strip_ansi_codes(full_status_raw) # 去除颜色代码,前端显示更干净 - info = await get_hdmi_info() + info = await get_hdmi_info() - recent_log = await read_log_path(info["out_path"], MAX_LOG_LINES) - recent_error = await read_log_path(info["err_path"], MAX_LOG_LINES) + recent_log = await read_log_path(info["out_path"], MAX_LOG_LINES) + recent_error = await read_log_path(info["err_path"], MAX_LOG_LINES) - if info["process_status"] == "not_found": - recent_log = "进程未注册到 PM2(可能被 pm2 delete 删除或从未保存)\n" - recent_error = "" + if info["process_status"] == "not_found": + recent_log = "进程未注册到 PM2(可能被 pm2 delete 删除或从未保存)\n" + recent_error = "" - return JSONResponse({ - "raw_status": full_status, - "process_status": info["process_status"], - "recent_log": recent_log, - "recent_error": recent_error, - }) + return JSONResponse({ + "raw_status": full_status, + "process_status": info["process_status"], + "recent_log": recent_log, + "recent_error": recent_error, + }) @app.get("/") async def index(): - return FileResponse(BASE_DIR / "index.html") + return FileResponse(BASE_DIR / "index.html")