hiddifypanel 3.0.0.dev64__cp310-cp310-manylinux2014_x86_64.whl → 3.0.0.dev66__cp310-cp310-manylinux2014_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hiddifypanel/Events.py +27 -4
- hiddifypanel/VERSION +1 -1
- hiddifypanel/VERSION.py +1 -3
- hiddifypanel/__init__.py +7 -3
- hiddifypanel/__main__.py +13 -3
- hiddifypanel/base.py +88 -3
- hiddifypanel/base2.py +40 -3
- hiddifypanel/models/__init__.py +10 -3
- hiddifypanel/models/child.py +26 -4
- hiddifypanel/models/config.py +105 -4
- hiddifypanel/models/config_enum.py +207 -4
- hiddifypanel/models/domain.py +106 -4
- hiddifypanel/models/proxy.py +55 -3
- hiddifypanel/models/usage.py +58 -3
- hiddifypanel/models/user.py +171 -3
- hiddifypanel/panel/__init__.py +7 -4
- hiddifypanel/panel/admin/Actions.py +170 -3
- hiddifypanel/panel/admin/Backup.py +80 -4
- hiddifypanel/panel/admin/ChildAdmin.py +122 -3
- hiddifypanel/panel/admin/ConfigAdmin.py +54 -4
- hiddifypanel/panel/admin/Dashboard.py +70 -4
- hiddifypanel/panel/admin/DomainAdmin.py +195 -4
- hiddifypanel/panel/admin/ProxyAdmin.py +128 -3
- hiddifypanel/panel/admin/QuickSetup.py +127 -4
- hiddifypanel/panel/admin/SettingAdmin.py +224 -3
- hiddifypanel/panel/admin/Terminal.py +51 -4
- hiddifypanel/panel/admin/UserAdmin.py +277 -4
- hiddifypanel/panel/admin/__init__.py +82 -4
- hiddifypanel/panel/admin/adminlte.py +13 -4
- hiddifypanel/panel/admin/commercial_info.py +23 -3
- hiddifypanel/panel/admin/websocket.py +9 -3
- hiddifypanel/panel/admin_2.py +33 -3
- hiddifypanel/panel/asset.py +17 -3
- hiddifypanel/panel/cf_api.py +35 -4
- hiddifypanel/panel/clean_ip.py +125 -3
- hiddifypanel/panel/cli.py +172 -3
- hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
- hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
- hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
- hiddifypanel/panel/commercial/__init__.py +50 -4
- hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
- hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
- hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
- hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
- hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
- hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
- hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
- hiddifypanel/panel/common.py +98 -3
- hiddifypanel/panel/custom_widgets.py +71 -4
- hiddifypanel/panel/database.py +18 -3
- hiddifypanel/panel/hiddify.py +655 -4
- hiddifypanel/panel/hiddify_api.py +70 -3
- hiddifypanel/panel/init_db.py +393 -3
- hiddifypanel/panel/usage.py +85 -3
- hiddifypanel/panel/user/__init__.py +25 -4
- hiddifypanel/panel/user/link_maker.py +416 -3
- hiddifypanel/panel/user/templates/clash_config.yml +1 -0
- hiddifypanel/panel/user/templates/home/multi.html +1 -1
- hiddifypanel/panel/user/user.py +233 -3
- hiddifypanel/static/css/custom.css +6 -0
- hiddifypanel/templates/500.html +1 -1
- hiddifypanel/translations/en/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/en/LC_MESSAGES/messages.po +194 -190
- hiddifypanel/translations/fa/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/fa/LC_MESSAGES/messages.po +123 -120
- hiddifypanel/translations/zh/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/zh/LC_MESSAGES/messages.po +123 -121
- hiddifypanel/xray_api.py +109 -3
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/METADATA +1 -1
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/RECORD +74 -76
- hiddifypanel-3.0.0.dev66.dist-info/top_level.txt +1 -0
- hiddifypanel-3.0.0.dev64.dist-info/top_level.txt +0 -2
- pyarmor_runtime_000000/__init__.py +0 -4
- pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/LICENSE +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/WHEEL +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,226 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
__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\x00\xd1)\x00\x00\x12\t\x04\x00\xe88C\\\x7f_\xb3\x86\x9c3\xcf\x10\xea\xbc\xc5\xbd\x00\x00\x00\x00\x00\x00\x00\x00$Z\x1d\xd5\x04\xbc\xe4,\x14~\xb9t\x84\x01\xa4\xbeP`I\xe6\x12@s\xf7{\x1d\n\xdf\x97\xa3\x1c\\Z1\xd6\x9eL\xe1\xdd\xb9\xda\xa4\x8f;+AJzF\xe5%\xbb0l\x05\x8a-\xcb\xa1\xb4\xfdL)\x90\xcb\x06z\xfe\xb8\xbb\x92\xb8\xf6UU\xca\xd1\xd8\xc9F\xff\xabf\xc7\x85NMK65*\x81\xba\xa8I~\xba\xdaPh\x96\xd9\xb1Bj\x05/\xc1\x9c\xf9\x1c\xef\xc0\nH7\x0e8F\xa3\xf4\xe79\x84\x87\xa8\x9bIB\x80_Y\xbc\xec\xf6W\xf7k\xa92I\x89>M,\x93\x89\x0c~`\x00\x04\xc1\x86\x06\xb7\xe6\xd5~\xd9\xe3\xcbo\xac\xd6b\xc4\x0eFA\xa9\x9a\x12\x87\x980\xdc\x86\x06\xf5\x95\x92\xc8\xdf-\x00$\xf6\\\xbe@\x84\xa1\x85\x96\xcdl\xdb\x04\xe7\xae\x03\xb4\x98\xe4\x1bv\xdc\x99rN\x87\xbf\xf3\xe8V\x04\xf7~oq\r;\x10\xc6\xbd\xf8\'\x1e\xa9\xbf!b\x12\\\x95\xd1\xb4\xd4\x10UA\xcej\xce\xbd\xee\xd4Da\xf8E\tP`\xd0C\xe9\xceP\x91\xb3\xf3\\\xec\xd9\xbbP\xaev\xdb\xd7\x19,3q\xd6z\x99\xbfkSb\x1a\x96m\xd8\xa9\xc4\x87\x97\x05\xb6\xd6\xe4\xd9\xa2\x0eP\xe8\xa8\x03\xa9E\xec*#Dv\x8d\xfa\x0f\x16B\xc9U\x0f\x97\xf4E\xe0\x18Y\xe3\xdb-\xf3\x0e\x80\x8a\xd3\t\xfb\x11\xb9\x923<b\xc7B5\xf9\xc3\xfe\x99\x94\xc6\xa0f D\x8cH\xe3\xe9~\xddJ\xf1\xff\xa1\xabq\xff`\xc2\x8bK\xd3\xcb\xca\xe1C\xc3\xec\x86 \xb74\xb4\xae\xca\xe3v\x90\x118\xa9s\xd9\x89\xc1\x1fW\xfd.\xc4z\x05*\x8a"\xb4\xc4\xcbJ\xd1\xaf\xe8S\xd1\xd2"n@\xa1\x13\xcb\x9d\xc8x\x13\x1f\xe1b\x83\xe0\x02\xc0\x18F6e\x17\xa3\xd6\xe9/\x12\x95\xd8\xe8\xa1\x03]\xcb\xe4F\xc3\x17\x9fJ\r\x1f9\x06\xa3\x8es\xcc)\x15\x83u\x02g\xda n\x18\x83\xe7\xa5\x8ct\x0e;\n\x7f\x1e!\xb9\x18N\xd9M\x81l\x13)\xcf\xbb\xd2\xde\xc3\xcayE\xb1\xe1\xd1\xc8x\x014\x91<\xa8`R49\x12\x9fIG\r\xeaW\t\xbe\xcc\t\xf1[\xe6D/\x07\xc1\x80w\xde\x82E\x9e\xcc\xb3\x9d\x89v\x1bv\x1b!\xd6\xc0\xbdE\x18L\xc1\xd5\xe9y5\x88\x8e\x7f\xdc\xe0\xdfK\x03\x13\x9a\x89?\xd0\xd9y\x9e\xf7\xdd\xf3g?\x13\xb8\x92;"\xb7\xadp\x10\x04\xe8\xa1\xde\xe7\xe5E\x1aA\xdb;9\x1c\xc6\xe3a\xbd[P\x15\xb89\x8c\x9eZ\xbd\x05xM\xcal\xb5\xc6Y\xddD\x1b\x80\xf7\x11\xd4\x193*\x99(\xf2\t\x88~nR\xdd\xac\xccAxik\n\x81[e\x98F\x0fw\x12\xd1\x848Y\xb9\xc3%(\x03\x9dB\x87\xcb\x1e\x18\x1d\xb0\x89\xd0\xfc\x15\xe9\xbb%\xb0\x8e\x03\xe8\xc1\xae\xa5"uL\xce\xf2\xb2\x8f\x92S\xf6\x96`\x8aD\xfb&~\x83\x9d\xdf\x85&V\x8c\x11w\xa7\xd6d3\x0c\xce\xc4\xce\x95\x15G\xf0\x9a2\xd4\xb6d\xfa"\xd0\xbe\xca\x9b\x0b\xaax\xf1\x1dpz\xff\xb8\x12\xc2\x0cQ\xd8j7[-f\xfc\x15\xec\x1e\x9fRn\x8cI\xebt\x10\xab\xf6\x06\xfe\x0fv\x13V\xbd\x94?\xe3IT\x11s\x1fD\x85|v\xdc\xe0g\xd7]Z>lMK\x08\xfa:\xb8\xdc\xf3d\xcd7J[\xd1\xe3i\x9f\x7f\xfdd\xb9d\xda{\xe2\'\xfau\x1c\xf40\xa9\x95\xbf\xbf60\xbf\xc4:i\xe8n\x9c*\xf9\xcb{\x16\xe1\xa6\xd1=\xfb_5\xac<\xd8\x0c\xd9\x8b\x08\xac\x1e\xc5\xb2\'\xa3\x19\xd5\xa6\x04>\xce5LI\xd3\xf9\x07I\xe72D\xf9\xa1}\xa9\xf9\xa6\xf04edG\x12%\x1c\xe1\x9a\xc9\x92\x13\x9c \xa8\x94\xb6\x15\xfa[\xad7\x14\xddzsk\xa7\x85D\xf5SW\x8d9)/\x83\x82\x8d\xbf/+oe\xfa\xef\x9e\x9e\x91\xf3\xe1\xf8\x12\xe9\xe3\x8d\xae\xa9\xee\xf3f\x93\xddGB\x8b\x13Y\x7f.\xac\xe0\xe1\xbcr\xd7\xec\xc7&\x1a\xf4i\xc7]s\xf3C\x9dV\x1b\x12\xfd\xc75|\xba\xae\xe9Q:x\xc8\xd1*\xe1\x0e\xb4\x9fE#\xa1\x95Nn\xab\xa9_x8\xbf@\x8c\xa8\x85\xc4F\x86\xe6\x9f`D\xff\x05\xc3C\r\x12\xe9\xdb!\xa1\x06\x97.d;\x96\xdc\xcb|k\xa0I\xc5\xed.\xb1*\x92HQ\xbcz\\x\x1d\x14\x05\xca\xca\xc9Y\x00\xcdV\x9b\xfd:\xa4Tm\xf6\xfd\xcc#\x87zz\x99\x14\xd4$uX1\xda\xd0C\xa8\xe6.$\x15&\x91\x0e\xea\x01\x19\x9a2\x90\'a\x95\xf6G\xb2QD\x97\xf0\xa5\x0c\xd3{\xb8\x8e\xe9\xaf7\xae\x9b1\xc9\x08~\x81\x15L@\x1ec \xfeV\xd4\xc4\xd0log\xe7\x18\x98\xf8<\xcfv\xd6\xfc"\xf8\xdd;<0.I\x90\xe1\x18d\xd1\r1\x9f{\xce\xf9U+\x1b$\xfb\xc3V\xe8\xced\x13Z\xbaF\x8e\x10c\x16X\x08r97\xbd\x0e\xf6\x06\xdd\xa4O\xdf\xf1\xe9a0\x163\xcb\xb4\xc4uQ[\xf6J%Ew\x06<\x18^7\x9d\xc8\xb1\xacd5\\\xd7{?\x08\xac\x19\xd1Q\xeb\xf4c\x87N\xb5T\xc6qh\x12m\x8a\x95a]\x03\\\xf2\x97\x88\xff\x95\x90Y\x13\x98\x89\xf4\xac\xcd\x04=0AUN\x02\x89\x14\x9b\xf5\x94g\x98M\x9e\xe8H(CVtj\n\x07X\xa3\xb8\x8e\xf0\xfat\xbd\xa6i\xfe\x1a}\x963\x19]\xb2\xf9V|G8=\x1c)\xb0 [Q\xddY\x18\x9d\xb0\xac\xf3\x15\xd0#\xbb\xa5\xdc\xc7\xd2r\xc4\x87\r&v\xde\xee<X\x1a\xcc\xf2\xd25\x8c\xbd^\xa7\xbe\xa8\'\xb9\xab\xc4>\xae\xf7\xd6\x85\xa6\xde\xbc^d\x95E\xbf~t\x93\x88<B^&\xb5&+\']\xd6\xaf6Z\xe4\x8c\xa5e=f\x8f\x86\xb6\xdf\xd6x\xab\xf4\xa6\xe1\xd0\x83\xaeKE\xe8\xff\x85\xb2F\x7f\x93q\xe1\x00\x91\xa3:\x01\x12\xa8^\xd0Y:\x94\x99\xd2\x8b3\xd6b\xbe=\xc3\xb1\xa3\xff;\xcd\xd6\xbb|9F\xc8U2\xf7n\xe8\xcc\xe8\xd7h\xd8\x80\xac|\xd6\xc6@J\xb8\xd2\x82\x1be\xa7zE_\xa8\x08\xce\xc4I\xe1\xc8\xb2W\xf0\x00z\xf8\x15\x89\x7f\x1b\xe3\x8e\xca\xb1\xbb\xa49\x1c\xfa\xda&\xbf\x90;\x08\xcf\x8e\xb1\xf8t\xe2\x83\xf6\x8cNsN\xb1\xd9\x17k\x9e\xdbj\xa4\xf4\xf1\xeeu\xe1\x18\x0e_\n\xffw9\xbd\xbd\x9fM\xda\xef(gaDq\x9f\x18\x17\x00D\x9f5\xbc\x06\x7fP@\x15\xf0\x15\xe0\xc6\xa7\xc4\xc3\xd1\xc1\xe7\x10\xfb#\xce\xc6x\x92\xe3\xfb\x9f\x9bS\xc9\xda\xd0\xeb\xfbo\x84\xc6\t\xad\x81\xf5\xa9\xcf\x0b\xeap\xf3>q\x8f\xc9\xb86\xc0d\\\xa6{\xc3\xe7_\xbe\xd0\xf7\xa3I\x7f\tom\xccR\xf78\xd2\xdc\n\xd3M\xa8I\xf2\xdc\x11l\x8ad\xb0)6\x1a\xf51\xf3\x10\x87s!\x93\x90W\xa0\x9c>\x1b\xa4\x18\xc53H7\x97\x12&\xb1\xa6ud\x03 P\xc0\t\xcd\xcc\x13tA\xbf_:\xb6\x8c\xf4\x8a`\x1e_\xb0D\xc8\x87_fx\x8a\xf6\x14\xe4\x95<]\x85\x9c\xf3-9NG\x8d6y\x11\x94\xc02\xa2\xf9\xe3\x93\x88\x10tq\x1b\x94\xc93[m\x1dk\x98\x94g\xd1\xad\xc1*\x94\xbe\xdb\xb4}8\xacYhn\xfba\x12\xd9VdK\xe8\xb5\xdd\x8a\xea\xf0d6\x01\xdcD\xea\xa3\x94(t\x8a\\\x9f\xec\xef.[\xc0o\xf04},\x9d\xaf?\x9a\xbbg\xcf2C\xaa\xef\x9a\xdd\xf2\xd0\x1b\xc2:\xc9-\xacv\xb9Pwk \xb7s\x80$\x137\'\x07S\x890\x83#\xce\xbc\xe7\xf5mM,\xf4\xf3 ,\x97\xbd\xaeB\x89\x18X\x06\xabpg\x99z\xe4Q\x0c\x96\xb9\x1d\xb9\xaby\x7f\'\x0b\x0e\xf1\xaa\xd7\xf8\xe6\xc2\x81fH\x95\xfcN\xe0\xd1\xf5\x1b\xc5lU\xa4H\x8c\x0f\xf4\xa6T\xf0\xa2A7\x07\x0fqh-\x84Af\x10\x9f\xf2{\x8a2H\x03\xab\xe4\xd7/\xf4\x86\xe9\x17\x1fASG\xc6#\x1e\x8c\x85Kp\xda\x04x5\xb1W\rp\xd5\xabe\x05\xf8\x1e\xf8yO\x84=\xb8/\xa7g#9\x99\xff\x10/y\x17\xc3*" q`\xa3\xfe\xa6,\xfaI\x0b\x93\x05\xfdi\x17\xe6\xf7\xa1K\xe9\xc8\xe6\xad_\xcb\xb1\xde$\x0eo\xba\xbc\xa5\x1cE\x98\x94\xfa\xcfx(ZC\xe8\x8e\xa5.\xea\xdf\x08\xb5\xbb[5A\xe4=\xfe\x05\xb5\x8f\xe0\x10\xf6$\xd7i;\x05\xde\xda\x9a\x80\xf2t\xe8\x19\xba\xf4\x84=e\xdat\x8a\x13Y\x02!\x8a\x81\xb47<\xa7\xd3\x81\xd8\x82\xcd\x05\xd5\xf7n\x9f\xbd\x83\xf4\xb1\xcf,\xa9\x08\\\x0b\xb5IU6\xc0xa^@\xaa|\x17h\xa2i&\x8f\x88\xa4\xd2\x91=e\x98\x9c\xcar\xc7\x19\xed\xd7\xa5\xdep\xcc\xda\x965~\x92\xbfB\xceh\xa3\xa5\xd7\x8a\xa5\xa46\xd4M\xf6\xce\xcb\xfa\n\xd3\xdd\xb0\x948r\xf7\x8dn\xb2(\xa3h\x17\xaa\x1au;=g\xec\x97(V\xe8a\x17|P2$\x86y/h\\@\x95\xean\xa9=0U\xc4\x8c7\xe8\x06\x1f\xc8\x91\xabC\xff\x7f\xfe?\xd8\x83__;F\x8f\x1d\xd3\xd1\x0e\x14\x86}\x12$\x02p\xab\x0f\x97\x99\x9e\x03\xc7\\\xb2\x84pSCH\x99\xc8u\xd5\xb4\xe0\rB<5\x04\xe4\x94E\x92h\xc0\xaa\xd9M|c\xa6\x87\xa2\x94b \xef:j\xe9\xcd("I\x03\xdc?\xa9\xa9\xb2A\xb9\x05\xb8\xe5\xe1\xcd\xec\xefx_\x9a\xa4\x13\x1e\x91\x9ea\xd8km9\xe2Q8\x97k^>e\x1e\xe7t\xc3\'\x93\xef\x0c\x07\x96\x86\xe7\xbcqK\xac\x16@\xcd\xee\xe8c\xc1YJ\xa2\xe2\x00L\x02~\xc8&\xe1#%\x9e\'\xcbs_\x08L\x91\xe2\x96\xaa\x18\xb2em\x11*\xfc\xfd\xba\xa1I\xff\x1dLb\xe6\xca\x18\x0b\xee\x89\xf4z\xc8&U\xb9BW\xea\n\xdfS\x17\xe1?=C/\xe8\x02?\x93}\x98\xda\xebm\x14\xbf-\x0f\xe1\x7f\xd0\r;\x06\x8e\xa5>\x12\xa9:sF\x98K\xdc\x01\n\xf2\xce\xec\xb7/\xfb\x12\x1d$\x90\xf5\x1c_\xdf\x81\x9a\x96*\xfa\x0c\xb2^k/E\xdc\x85\xd9\xda\xa5\xb5aFh2\x0b\xebo\xef\x02/\x9bJ\xbbDV\x1bk\xd5\n\xb6*\x87jM\xab\x1b\x80X\x9c\'Z\x86\t\xa0\x12\x19I\x9dqj\xb4\x8d)\xbb\x19\n\x1a\xd3P\xcb\x9f\x97\xa9\xaf>R\xd6\x177y91\x1a\xadg\xbf\xb1p2\xfd\xa7\xf4\xc7\x04\x14f)\x0c\x81F\x1fU\x8aE9u\xe1\x84Q\xc5\xab\t\xf6\n\\\xd4\xb8\xea\\\x84\xf2\x14\x83\xd34\xde\t%Iu\x8c%p\xb6\r\xe8\xf7\xdd\xf0\xf7Z\xaa=\x08\xee\xbe\xd4\x97\xe2\xfd\x18\xa5\xb9d\xee\x81\xef\xd83\xaa!Bq\xe4\xf5f\x80\xf7\x1c/\xc3\x90wE?\x10\xb8_\xb4\x8a\xdc\xd2H\x84\xa1\xa1\xfc\x04L2\xf7ZZ\x9ep\x98\xc8t=\xbdZ\x0b/9l0\xa5\xceCg\xf3\xdd\x8b\xd1\rJl\x9e\'66\xe8w\x94\xce\x11\xc7G\x1e\xd8V6Q\xfePZx\xd9\xe4^\x87\xc1\xcb7\xb16?\x9eRj\xb5z\xd6\xad\x87O\x0b&2`\x0e\xf3hK^]~W.\x89\xb6d\x0e\xb4\x1e\xf4\xdb\xda\x15\x05\xb3\x00\xe1\\K|\x86\x9b\xfbmJ \xa6\xe9&/\x91\xbc(%E\xa2/U\xb5\xf5\xd9\xf9\xeb(\xa8\x97\x81T\xbaY\xa7\x816\xfd\xd2\xb1\x0c\xd20\xfa\x04+\xc5\xd7\'\xb8Z\x19\x14\x9d\xaa\xdcis>\xb0\xd2\x9e\xe1\xa7Z\xc7\xf2\x1a\x07\xb3\x10F\x98r\x82\x83\x9aRH\xbb\xed\xce*\xae\x17\xb8/\\\xd6[\rO\xc7\x94\xc0]:\xc8\xf6\x1a_4x\xcaON)h\xdbc+\x1fL\x85\x17\x98\xa2G\xd52\xa9^0\xe5\xff\xfa\x84\xf4\xc2\xf1\xf7\xc5l\x93\x8f4_\xff\xae\xb1\xc9!:\xe6\x1d\x11\xca\xcc{\x8d\t\x8fug<A\x82!I\x04h\xb3\x03\x00\r\xf7\xed\x97\x98G\xc1;\xc4\'z\xb6p\x95\xfb\x03mg:X\xca^\xf5%)\xe7?\xb1\xd7\xc3\xfb}\xe8e\x1eR\x8a\xc5\xbfZ\x90\xd9\xf4V8fxlH\x06\x1d\xb1\x00\xbc\x92\xe9\x87\xa4\x99\xe6d\x16\x06\xd2A\xb3\xed[\x89]\xbb\xf2\x97S\xc1_\x96`\xa0\xa0#B\xadH,\xd9WB)\xb1@>\xbc\x95\xfa\x92d\x92\xf9\x1a\xcc\xe2\xe2\x12\xeb\x8f\xec\xda\x0c5\x979#s\t~\xfda\x8a\x10\xb3\xfd\xed\x1e\x07QT\x19\xcf\x89\x91\xc4\x01k@rVf\x8d\xb2Jc\x7f"\xfc \xf9\xcdB?\x05ZI\xbb\xe1\xb3\xad\x0cn\xb0\xf2\xb2$I\xb9\xf7\x85\xf7p\xe5\xb7\xff\xcc\x9cV\x9a\xe0t\xb0m\xed_k\x80\x86\xad\xcd$\xe60\x01ps\xf5V\xf4gQ6\x18\xa3u{\x16\xa8\xbc\xb2\x13\xf3i\x83\xc0/Xe\xd2\x11\xf9\xbcx\x98/\x85\x9aX\xb7\xeei\x85\x9c\xdd\xd7&l\xed\x9b\x8bk\xcb\x11q\x16\xd64\xcc\xbbl\xca\xd1(\xbcM\xb3\xa9\xccf\x93\xc5n\xdb\xf9\xf7\xd5\xec\x81_K\xd7\xd2T\xd6\xa7 \xe3\xc9\xa8q5|8\x96*\x15-\xc26\xe5\x13\x073[ k\x03=\x8c@5\xb4\x97\x16\xaa6\x9f\xa2;\nx\xfd\xd9\x1e5\xa6\x7f\xb5u\x83\xb5\xd5x\xd4\xa0\x93\x08\x8fN\xaf,\x19s\x0c\xe2-\xe7<X\xb8\xea\xd9Vb\x9ck\xc3\x87\xf0\x06\x12\x96by\xb2DD\xcb\xd0\xf0\xa6~)\xbbj\xabo2\xd8\xeb)\xc2\x95\xbf"4\xc3\xcab\xfb`\xf6\x15#\x05\x7fd\x1d\x8f/\xc1\x9f\xa3\x84^A,\xb2\xd7T\x86\xd61\x19\xdb\xaa\xf7I\xbfb\x9d\x82\x17\x87(a\xd1\xcd\xb4\x96\xd21\xe6\xbb\x0f\xf3{\x190G\xa5\x156k\xc5\xe4K\xd6F\x15\xce\xee\xee\xbc\xbeZ+\xb3u\x86)Dv\xbbs\xdb\xa31\x01\x16j\x9eT\x16A\xa9%T\xd3\xe0o^(\xa2m\xd4r\x9a\x9bn\x82\x99\x8fv\x0b\t\xa0\x1c\xfdI@\xaa\xfc\x1e\x12/\xf8U\xc1\xc0@\x1aU\xcf\xd2N\x055\xfcD\xd7\x1f\xc3<\xb0\xf4\x04\xd4L\xddIZ\x82\xe2\xfd\xde=+m\x87\xa6Rl*\x94lv\xd3<\xb2\xb3\xf9\x83:\x9b\x86v\x80\xde\x8e\x8c\r\x89\xd0\xde\xf2@\xd6\x98\xba\xa0\x8d\xba\xaeZW\x18\xde\x02\x0c\xd0\x04\x04\x89\xe2\xb4\x16\x86J\xc2:\x17\xa9\xd6>\xd8\x89K]\x01\xcf\xa9C\x86\x13[\x7feA\xfb+c\xa7\x18\x97\xdc\xb0&\x8aD\xd4\x94\xa5\xc2\xfc\xde\x93\xe3;\x86\xa1\x94\x9dz\x85\xb3\\%\x00\xff\xa8\xf2\xc9\x8acw4L\xf9gi\x18\xe95@\x0c`\xc9\xeahw0\x96;\x99b\x94\n\xe9\xc1\xde\x7fE\xc0\x12\xd9\xcd\x0f\x99e\x9f\x86\x9d-a\xb0\xac7U\x02$X{9\x83\xb4\xc7\xf5\xcd<\x0b\xa3\xb0\x1b\x05\x1b\xb0O\xf3\xb6\xdd\x870\x81I\xd5\xcb\x04\xb9C\xa9e\xdf\x8b\xbb\x84\x94\xae\xc6\xaf\xfe\xa5\xa9\xcc\xc4\xaeZ\x9c\x960\x99\xd1\x1a\x1e\x93\x80vJ\x82w?\xcb6!\xd8y`2\x117\xdc,QM<\x01\xd9\x8bW{\x8dI\x9c\xdc\\\xde\xdc\xb0@Gv\xa0\xb3\xbb%p\xd8\xc1\x14\x9e/\xe8\x90\x8fk\x1fA\x1b\n]0\xe6\xd5\x8c\xe6\xff\xbb1i\x9f\x93\xd3\x02 \xe0\xcaM\x98\xf2\xe4\xbc\xf1\xf2\x9cH\x0e\xc0\xb5|\xf5_\x921y\xb7\xe1h-\xb1"\xd0\xb5\xc6\xec\x00\xef\x06<\xdd\xcfS\xff\xbfI\xee\x85!\nR\xe6\x83"an\x0c\xa8\xbfNw4\x94\x1d\xf7\x1f~,`D\xc6\xc5c\xfc\xef\x8b\x01\x0b\x87u.\xb9\xbe\xfc\xeb\xc5\x04\t\xc9F\xa9K\xa1\x8f$]\x80u\x15\xcd\xce\x8ai\x8a]N\xe53Q\x07\x82\x0c\x06\xcc\x7f.\xaf!\xefd\xa4%\x9dnY\x02\x1a\xa1PTC\xa7\xb7|\x06\x9b\xfb3\x91\xd6I,\x82\xde\xc6+\x94#\xaa\x10\xef\x07>%\xfb\xb9\xd4T\x83=\xa3\xc2\xb9\xe7\xa0@\xe5\x0fl$GDgAS\xb5\xd0#\x91\x10Pc\xef\xde\xab\xa6\xdfik\x85\x12\xec\x84D\x1d\xad\x1d\xc3|\x0f\xd2\xe6\xa9\xb6\x90LW\x02\xf7\xdf\x92\xd3U\xf2\xfa?\x87B\x0e4\xd1\x02\xf0<~*\xa1\x1af\xc5\x15\xf5\x13\xa52\xd4[\xae\x01\x86\x8b\'?K\xc9\x81\x81\x18\xfd^\xc1\xd4\xc0\xa6S\x12T\x0c\xc2\xd4\x1d4Q\xef\xf2\xd1\xee:\x0b\xda\xadK6\xf5Yv\x10\x7f\xcdlG\xbe\xc6\x8a\x8fl\xde\xb6\xd5N\xbcG]\xb8\x99\xcb\x83\xa5\xbd\xc8F\xe9\x85\xe4\xcf\x13\xed\x8a)\xaf+\xc5l\xf3D\xc1\x1a}PH\x1b\x1b\xb3\x0c\x1bL\xda\x07\xf1G\xa4\xb5\x84\xe2\xaa\xca\xae\x1a!]2\xd7E\x8eY\xc1\xbbVf7\x8d\xd9\xd0\x90\x1cw\'?\n\xf8k\xc9|Fn\x89:\x0c\xca\x1d\xd7\xbd\xdeo\xf1L^\x8c\x8e[Wg\x80\xb7\xdb\xed9\xac\xb1}\xc7\x10\xa2N\x8d,m\x8f\n\xe1\xaa\xfc\xe9de\xc29\x17+\x1e\x99\xacK\xe7\x1cV\x00rZ&M_f\xf4eT\xcdb<\x81@\xe4dX\xacni\xcef9\xf1\x89]-\xf2B\xb9\xdfgm\xa0\xe7Rb\x1a\x9d\xaa\xc5\xd0G\xb5\xd3\xc5\x0c\xedm\xb0\xda\xdfG8\xeb\xba\x04\xebr\xb1M\x159\xda4v?\xc5\xe3\x87\xcd\xbb\x9b\xa4\xcf\xb3<\xea\x91R\x9c\xf4\xaf\x8e\xd2\x83V?(>\xd8\x04/G\xb7\x8e\x87\xb2\xb8\x91\xb3\xc1\x87\xeb1\xbb*\xf4r\x0c`HS>1\xc9p\xbd\xb6K\xb6-\xc1\xe0z{\x84&\x82W\xbf\xaf\xd6\x1d\x0f\x02\'\xf43\xc9\xa1-\x87\xa6\xa5cQ[xc\x84\x19n\x0e\xe3\xac\x8be\xd6\x94\x8e\x93\x95\xcb\x10\x80\xb5\xc1\xa4~[\xca\x9b\x95p>\xdb\xd2#v\x88\x9a-z\x88\xda\x96\x889\x05\xd7\xc5\x8627M\xfd\xc4\x0f\xd8_B\xba\x0c\xc4*\xf6\xbcp\x82>\x9eb\x9a$w4\x04I\xe88\xa1W\xec\xfe$\x98w\x0748\x1b\xa2QY\x1a\xc0\x0fC\xb5|48\x05\xf5p\x94\xbb!\xfeJ.\r\xbcW\xa5\xf8z\r\n\rOg\x9f0\xf08\n\xbb\x92y\xde\x13\xd2\xacY\xd8v\x1cx\xc7\xff\x87E\r\x8f\xf38\xc3\x8b\x19\xa9\x9b\xc7\xae}\x16\x15(a\x10J\xbe\xc8\\s\x1d#U\xe0\xa7,\xe9\x1a"\xf8\xb7\x19\xdf\xcb1n*\x16\x96\x89@*\x7f<\xdc\xdd\xf9\x07\xb1=g\xc0\xd8D\xb9\x05|f\x07\xb5\x9a<\xb8\x91\xd7\x89\'R\xe7j\xf4\xc6;K\x19\x10G\xb9\x9dfx\x04\xdf\xc6\xca\xcf\x90\xd1\xe4\xed\x7f\xab\x82\xeb\\\x16\xce5\xd8\xbd\xaf\x9fYR\xd6Q\xf1\xaa\xf87b\xaeN\x00\xc6}\xdaX\x92\x83\x07U\xc9\xdc\x92VNj\xca\xc2*\xcf\xe1\x97\xc2\x084;\x99-\x8d\xc3+a\xce"\xbf\xc6\x01\xb7\x08\xadQ\x91Y\xce\'\x8d5\x96T\x82\x01N&p_\x04l\x02\xc3\x13\xab\xee\x0f\xd6\xbe3"l\x1e#)\xd4\x7f\xd9\x12\xc3\x01\n\x82\xd5\xd1Z\x1c\x861\xadBb4\xf0\xdc\x94I\xd5\x8e\xcf\xa9\xaaw\x9a\x85\x84\xc7\xff\x89\xe1\x89\t\xdf\xfb\xf9\x14)47\xfc\x90\x82]\xa2\x06y\xfah\x86\xfd\x1c\xb9\x0f\xc4\x17\xff\xf0\xda"\x9a\xda\xe3\x03\xc5\xd7\xfa\x836]\xaa\xca9\xe9\x88R\x1c\xb3{]g\xec\xc4l2\xa1\x06:f\xdc\r\xa2x03\xaaC$J\x08,\xdf\xa3]V\xe4\xfc\x81c\x96[\xb8wlH\xa0;E\x1aUtS\x95&r\xa4!\xbb\x80*\x89\xf1\x99-o\xf3\x9f\x9f\x0c\xa4\x86(\x1f\x03\x08\xe8\x0b\x0c\xc6\xcd\xa3\x00s\xec\xd69\xa1:\xf7\xf5\x99\xd4V\x1e\x03t:\xf6\xfcX\xca\x08\xb6n\xba\xa6\x7f\x83;q\x85JA\x10\x8d:\xa5;\xf5\xf0\xd5\xab.\x94T\xa3\xee};\xb8,\xb0M-\xef\x97\xcd\x1b\x0ck\t\xe30\x03=\x9b\xf3\xc1QL\x05\xbb\xabU\x12\x97,y\x1d\x89\x1e\x8f\x1f\xf1\xf9\xea\x0e]\x88\x03\xb9>J\xacw\x8df\xa5\xd6\xeb\x05"\xc5.c\xd7\xf3\x0f\xb7x\x89MF\x98\xba\xefUf\x1fe\xed@\xd4q3\xef\x00\xed\xdb\xe1\xbd\xb5>\xec+\x99\xcfJ\x81p\xfa\xad\xd7\xca\x9b\xac2\x94\'\xdf\xb9\x99\xf4\x101t\xaa\xd0_\xd5\xda\xc6\x0b\xa9\x15\xcc%|\x94/\xc6\x90\xa6C/\xb7MH\xab\xf3\xf2\x88i\x11\x85\xe4\t\xa7\xd1\x8a\x88\x109\xe9wW\x1b\xb2I\xa4\xd4\x7f\x1c\xe2\xae\xf7\'\r\xca\xf0\x90\\&|\x08\xec;\xcc.\x0fX#\x860Fc\x9a\x87q\x94\x18\x8a\xc3r\x0bh\x92\x98\xad\xa9K6O\xc4\x9d\x97A\xb1k0\xc7\xba\xd3\xca\x86\xac\xd8\x83\x11et\xd8\xa7-\x18m\xd3D\xae\xe3\x9be3\xf2\n\x9c+\xc0&\x96\x17@\xf8\xff6\xb0\x0br\xe9\xcdS\xcc\nv\x18x\xaf\xde\x8a_93\xca\xdc\xac\x90\xaaz\xc3\x9e\x82\xa7\x06\x18\x15\x08\xb8g\x97\xbf\xdf\x0c\xb0Y\xebc+\x01w<G\xfd\xd0\xd5\x94\xbe\x12\x8e\x19\xbb{\xdc\xc5h\x92\xf6\x96\x08-\xed\xda9#\t\xd5,\xd6o2\xce\x12i\xc2\xfe\xb3\xbd\xae\xde)X\xbd\xdbJ\xaf\x07\x0b\xe6P\xd7\xdc\xac"X\x1d\xb2)\x949Ty\xf82]\xc581\xefc\xd0\x99\xda\xfc\x8d\xc2\x1f2\xaf"\x05\x10\x9a\xdf\x0e4%~i#\xab\x06c>\xd5ofQ\xe4\x99\xc7]\x06\xe7\x8f\xc7\xf8\x99%\xc6\xd0\x1f\x13f\x93?\xfb\x92R\xae\xefy\x1c\x89?\x920\xe2\xff\xa6\xb0iF\x93\x9a\x81\x92\xfb\xd7\xd3]\xaf2|\xd7_\xc4%\xf9W\xd3\x11\xb64u\xdf\x8e\x9b\xc2\xb7\x1c\x8a\xe7\xf8\xf4\x86\xf0\xa1o/\x04\x8aK^\xf5q/\xc6\x17]\xdac\xe3F\xdb\x8cS+\xbdn\xc5\x06\x85O\x0e\xc2\x16\x1f\xfb\x05\xe8y\xfbSRf\n\xbe\x9c\xf0y\x9b\xf2\x06\x8f.G\xff\xd4\xf6\xfd\x19+\x06\x8a;\xc6\xbfR\xbc[\x9c\xa6s\xe8u~\t\xdf\x16\x95f\x81`\xdax\x0e\x88\x8d97\xc0\xb9p\xc5\x8eR\x0c\x01\xc7\xb0(\xfa\xaa\x1d&\x9c\x0071\x8d\x17\x02/Q\xa6\xab?\x83\x0e\xdd"\xd5\x0b/*1\xa4\x87\xab\xdb\xedg#\xff\n[\x1c\xb4\xee\xe3\x05:h\t<\xb3\xb4\xc66]\xab\x10\xd0b\x08w[\xdb\xf1\x80?\xcfl \xdaog\x9dl\xddH\xd0\xc6\x0c\r\xb2\x97Y\x90\xec\x15)\xc0\xbd!GkU?K!qG\xb5Wf6\xfbO\xfaT\xcb\x07}\x911\xed[\nC\x19\xcd\xd1P\xccs]\xa0\xdd\xff\x93\xe2A\xae\xd7\xea\xfd\x94\x7f\xb9\xa3\xe3\x7f\x9f\xa4M>\x86\xa4c\xd1\xfdAd\x9c\\\xa5\xae\xa5\x90\x11\x84B\xaf\xdcn\'\x90\x1d\x9dd^\x1c[\xe8\xd4A\x03\x9a\x9bq\xea\x85\xab\x08\xdd7x6\x94F8y\x84\xa1\x87v\xe8\xbc\xae\'v\xc7o\x85\x8b\x98\xac\xdc\x01$\x1b=\x12\xac\x95\xe4\x07\x1f\xbd\xda\xf8g\xb2S\xb4\xdb\nlD2L\x1b\x8a\xecCFe\xcd\xdc\xf2\x1fD\xa3\xc4\x98E\xc3\x15\x1b\xdc\xdfL\x13\x87^\rJ\x1bj\xb7\xed\xb5|7V\x95%\xf7\x97\xd8\xca|\xc0\x8e[s\x15\xdb;\x8e!M\x1cu\xab\xa9\xcc\x07\n\r\x850\x842!J\'\xbb\x02\xbe\x1f\x1e\x9bA^W}\xad\xd0\xa5q?\xb1\xc6\xbac,N\x9d?N)\x8a>\xa1\x88\xd1\xc7[\xff\x0b\xe0\x12\x19\x9a\x9d=\x108\xc1de\x97\xac\xbf\x1bz\xbc\x13\xba\xfa!\xf9\x9c\x16vPIN\xa3\x92i-z\x8e\t\xf3\xb3\xe9\xc1\x90\xd9\xd3R\xd0i\xe3z \xdc\\3\x7f\x8b\xb9\x1c\xe3\xc33b\'\x00\x8d\x94\r\x83\x8c\xec\xe1\xf8w\xa8A\x99\xc7\\rj\xe4z\x8a\x870\xf2y\xc1\xe3\xf7\xe5+\xe7.\xfa\xa8\x99$\xe8|\x1c\x92\xdd\x06\xe3Y-\xab\x14\x84\xf49\xa0@\x19\nXQ\x81\xf0_\xe1\x10\x01\xdf\x12\xe9A\x7fA"i\x97\x8e\xfdt\x0f\x86\xba\xff\x19t\x1ce\xbe&\x80,\xb0P\xc9\xd8D\xb3\xcb\xe2\xea\xd4\xea\xbf\xcebm\xceE\x87K\x17\x1d\xd0q\xff\xc4\xfc\xf4c\xf8\xef\x9d\xc3D\xab\x1a\x84\xf4$\xaf\xac@\xc6\x14\x0c\xf5\xff\xf9\xdf\x16\xedm\x9c\xe5\xf3S\xb8\x94\xe1\x7f\x16k=\xf7>\xc8\xde\x86\xeb\xc4E\x0e\x960\x1dO\xc2\xa4\xbcY\x1f[\xd3\xf3\xd3o\xf7\x89\xe5[\xad\x96Y\xae\x15\xf9]c\xea\xae\x99\x97b\xc8\xfa\x106\xf5\t\xe0,uL:\xf9\xb5\xef\xbe\xbeT\x1b\x17\x82P\x16\x86\x9c\x9a\xd7\x10\xf0q\xc56\xcdk\xcb\xf4(%<\xec<v\xc8F2E\xf6Y\x9c\x83/F\xc6\x13\xa2r\xb9\xd2\xb3\x02\xfe8;\xce!P\xf09\xf19\xf4\x99\x9f/\xbd\xe7\xdb\xdem\x12\x0c\xcfn\\\x19\xadF\x9dpl~\x04\xdd\x0c\x06\xe3\xaf\xfd;\x8c\xa1\x96\x17\xab)\xcc\xc1\xddv4s\n\xb6\x1d\x10\x0fqy\x91\x1a\x1f^9Gh)\x03\xa9\x0cM\xc6a3\\c\xfeC\x8b\x15\x98\xdf\xa4"\x8a?\xcag\x9d\xb7_M|\xfa\xf8\xaf\xb2\xc7\xb9\x7f\x80\xbd{vV\x96BgL\x84|\xb0_\xd6u\x06M=\xcd\xa4\xcc8`[t\x14\xdc3\xdb\xf4\x8a\xb4\x91\xb3B%\xbcN\xb1\xd5\xd0\xb9e\x8c\x03\xc5\xf4bI[\xe3\xda\x89G\x1c\xf5\x04\xfd\xe2\xc37\xe14\x18H\xebQ9"$\x80 Wj2CYOl\xc3{\'\xa3&\x00\xa2N\xfd(N"\x0f\x8d\xae\x04\xdf\x98\xd0\xb6\xe5\xfb#k{\xc3\x85\xb3\x9f\xca\x9c`p\xb1P\xba{z(\x83\xf1}\x05D\xe2|\x95\x1e[\xaadz\\\xc0\x10\xb0\t5\x14Nw\x88I\xeb\xa2M\x86U\xeb*\x04\xf4\x95\xe5\'\xa3\x81\xd5\xda\x81\x06\xf7\xcf$\x94\x97\xd3\x8f\xf1\xcc\xb2l3\xfa\x14\x10\xbd\x1c\xf5S\xef\xaf_\xf9\xe55\xe42\xf7\xebeA\xa1\xef\xc8\x1b(1<\x95\xc6\x99\x12\x87\xca\xd9$\x1e{pi5\xba\x17\t\xcf\x04\x05\xe60\xc5\x9e\x84\x87\x84\xf4\xbb\xdcjQ\xc8W\xf1c\x89\xa6z\x9e\x0c|\x13,\x99\x8e\xbfa\xe6\x13]|\xbf\x13\x8f^@\xf8\x8a\xb9~\x1a!?|\xa3}\x8f\xb3\x7f\x03\x7f\xce\xcc\x93vbku\xfa\x9b\x02%i\x9d\x18\xd91\xf7\x17\xb4H4\x16?\xe5\x1d\x94P8\x86y\x8bS\xe7\x8a\xe1Fb|\\y-\\:\xab\xd2\x02[s\xcfSO\x80\x92\x8a\xc5\x16\xd1\xe5\t\xec*\xd6\xed\xce\xc6\x18!~|Q\xeaN\xae0r\x1e*\x94\x91\xb3\'\x9cY\x9e\xdei\xcc\x0eY\xcfa\xd38\x95\x0c\x19t\x01_Fm\xbc\x0f \xd5\x8a\x179e7\xd0\xe1\x84?\xc3\xb4\xb0\xef\'L\x190\x9a\xf6\xbd\xb1\xaapB\x9f\xa0\xfa;\xfa\xe5\xc2\x04\xbd\x9dG\xd1\xacm\xef\xb8\xce\xc3\n`\xf0\xd5E*J\xb9\xe9\xf5!\xa5\xd0r\xc6C\x1bl\x81y\xf3<\x0f\xa2\xd2\x17\xc4\xd8\x14F\x8ea\xdc\x9a\x11\x1f~M\x06\xbc_\xb8\xec\xe39\xdd\xb1\xfb\x17\xa0\xdc\xeb\xd5\xf7\xc7I\x9e>\xef:8l^|\xaf94\xbe\x9fr!\xc1\x18e\xea\xc4\x99\xed\xcd\x91e\xcb\xc80\xde\xd7Ny\x1b\xc0\xc1H\x85d\xd3\xf2\x88\xb4[\xf6W\xf3\xf5>G\x02\x8b5\xf2\x9d\x0cc\x99N\xb1\xbb\x13\x1f\x18)\x07.|1F%\xdf6f\xe0\x13\xaf_\x1c\x0e5\\\xf9\x99\xfe\xe7\xe3\x9f\xae;\x10\xdf\x93\x1dt\xef|Z\xa4\xdbF,`\x8f_\xb2)\xa5< \xe0\xcc\xf7eK\x85\xa0`\x8d\xf4\xd8\xac\xb0Y,\x06X`M\x93\x93(\x14\x95)(\x1c4\xb8L\xdao\xbe\xc3F\xceS\xbf%\xa9\x13\xa3\xc8K\xf0\xd2\xf2\xe9\xbb\xa4\xd7\xf7\xbb\xca\xd4La`<\xcdgJU\xb0\x10E\xa0\xb4\xe6\xc6\x9f\xa3\x92/e}\x81\xb9E\xae\x9a\xb4j\xdd\x15\xa5H\xc7\xe1\x8e\xf9\xd2:z\r\xc9=T\xfc\xf5\x8c\xd1\xd0\x04\xa0\x18C\x14\xd7\x88\xfe:\x98\xfe\xf5\xa7\x13\x18M\x17\x1f\xc5`\x80wn\xa0\x1f\xf4S\xf0\xbc\x17HJ\x1dC\xc4\x87\xe6\r\x99\x04\x1e\x82\xacd\xd9A\xcd\xf1\xd7\x04R\x9dW\xf6\x10y\x18S:\xc1J\xa5\t|b\xf0/.!\xeb\xa5f\x8e2\xed{xd\xf1\\\xd5\xb8\xaf\x1a\xa8#\x80\x9e[W\xd3Y\xfd\xa1D\x9e\x9e\xcbRX\xc50\xec\xac\x01\xda\x88\x1fP\xa4jn\x01n\x1c\xe1\x84F\x96\x81\x16\xb6\xf4U\xfb8\xcf\x8a\xdb\xfd@>\x11\xeeN\x8fmc\xfe\xb4\x8f\x067/d\x94\xa2\x04\xec\x01E/T\xfe\xaa\xaeT\xddC\x1d{?}`\xfd\xae\xe5\x98\x8e}\\MQ\xb7\x97\x05\xcc}\xcf\xd0t\xf1\xfd}\xa6\x87W\x8em^\x16O-%\x1e\n(\xcc\x9a/\xc6\xc0\xdf\xbb}\x9c!\xfdc\xca\x8cX\x0c#\xae\x8b\xeaE\nb\xc0\x8a\xed_YDG}.\xed2\xcd\xa3\x90\x8d\xbc\xb9\xa5\xb0@\x97\xab~\x8e\x1f#\xfa\x8c&\xd1\xff\xa7\xb7\xc3\xbcmi\x17k\xe4\x8f\xc6=m)\xc8FD\xc2\xa3\x00}\xfc\xfa\x91\x80\x1fG\x93$\xecVvq^\x93?h\x0f\xbb\xec\xf8\xbd\x93\xbb\x88\xe5-\x88\xe9\x8c\x07\xdfYSQ\x16\xad5g\x92\xb7\x06\x80\xc5`p\xaa\x9d\xce\xac\xb2\xc2\xe0\xaeD\xaf\xa2\x18=\xaa\xeb!\x85\x12\xd7\x1d\xb1\x98rMhD\xa2sX\x10\xf0/\xe2\xa9\xd9H\xd6l\x90\xe0\xbb\xde\x97\xd3\xc28*/\xdd\x8e\xb6"\xf4Kb\x85S\x8e\xcbX\xd2|iqI\xfa\xee\x15y\x03\x14d\xa1\x93\x88\xe9\xe4U\xe9"avbA\x9be\xe3\xe0%\xc4%\x02\xe1{p\x03\xd3hy\xa4\x03\xb3\x11\xd112\xf7\xc5\xbb\x92\xca\x80\xa7\xd3\x15\xef\x12\xa21j T\x8dit\xed\xd8q\xd7\x07;\x9a\xbek\xcb\xf5\x00\x1b\x93\xde\xd2H&\x1aJ\xcf\xfc}>\xea\x96\x11\xd8(\x9b}\xcb\xe4=\xd8\xff2\x1d)\xb8\x00\x8a_\xa6r\x9bd\xbd\xa8Zb\x14\xf2/\x90\xab\xab\xa1\xd8\xe5\xf2\xbd\xc4\x00\x98\xed\xbe\x8cR\x85\x93\xff\x99\x85\x08\x03\xe9\x82\xd2\xf0\xc7\xf2\x01b\xe2\x14\rC\xc0G\x02\r]\x1e\xdd\x06y\x98(\xd4Ch\x9d\xa2Ro\xd8Fy\xc8\xdb`\x14\x18\x89\xc9L\x9e\xc0\x92Qmj\xae\xef\x12\xd1\x1edM\x075\xd6=%\x86O\x84\'\x01t\xa7\'\x84\x89&Y\x06\t\x15ik"#\x99r\xa4\x11\x80tY>\xe7\xddso\x06\xa1<fH\xde\x9b\x8cY\xa4\x05\xd1,\x04\xd1\xa6y\xae\xc2\x8d5A\x0f\x9d$\xbb\xc2\xfc\x99v\x0fw\xbcsx\x12\x10+\xbb\xbc\x8d\x07\xf8\'\xf8dR<r\x12\xb5\x12B\x1ee>_|WI\xcd\x81\xc2Fp\x06\x8d\x0fa4\xae#\x18PK\x94\x04C6*\x1d\xd7\x7f\x18\xc5WZ\xd1\x953\x83\x1cP\x92\x8a\x0f\x88\xef(\xfb\x04\x9f\x16\x1eM~*\x0fyf\xe8\xa1\xb8\x9e\xdf&Cp\xec\xfb\xda\x02e\xe1|\xfa\xb5N<\x17/o d-\x15\xcf\x12\xc2\xd2C\xaf(-\xa2:9\x06\xe5\xb8\x05b\xf20l\xca\x8ch\xb5\xf5\x01\xca\x98\xfe\x0f\xb5\x0e\xc0\xca{\x8ds\xe2\xebg\xa4\xe77\xb21A\xddh\xaa\toAB\x8d\xf2\xb0?;W\xf3\x98I\x7f\xed\xbdl\xe2\x12\x01\xf9\x19\xc6\xa89\x8e{\x18N\xc3cPhA\xad\x89;\x03\x81\xbf\xb7\xcf\xa4p`\xb0\xd9\xc4RpQ\xb7W\x96"\x1c,L\xdd<0YsyK\xc9\x14\xde\xb3\x85\xc7\xe8\x16\xae\xff\xf9M>\x04\x144\x8a\xf7\x87\xa6\xa8\x00(\x0e\xc0{\x8b(W\xc3+P=s^\x93\xc3\x15\xe9\xc60\x1aZ\xee\xb6\xe0b\x1f@\x16\xb7\xea\xe0\xed\xec\x19\xda\xc2.\x16\xab\xec&\xd0\xd7\xb6\xd0\x8f\xf8\xb41\xf7(\x8f\x07x\x02\xc9c\xce\x91\xc7\xc5\xb8\xf3*@\x98\xd7K\xa9X\x1aY\xcc\x7fw-\x1f|\xb7@\xa2\x90\xc3\x99v3\'Ab-\xc7\x99b\xb6t\x97\x0c\xce\x98#oS\xf679?w\x1bM)JQ\x80Fh\x91\x9c{\x10H\x16h\xdcF=\xa7\xeb~"\xc6\xaaPlT\xa0\xdc{*\xe7b\xa9\x1f\xba\x1c\x9a\x91\x13\x84\x81\xac\x8cClm\'\xeb\x07[\xd8\xe1\xf1\x1e\x17\\\x7f\x86\x1b\xde\x18\xb4\x94K\xf3\x99\xa2I\x91\xa6\x03R\x8a\xfe\x1a\x12\xa0o.\xd8\xe0aJ>\x98\x9blf\xcd^;s\x81r\x18\xea3\x96\x89\xb9\xe8{[\xf4Q\x8b9\x14\x13\xfd\x01\x8eGX\xfc\xcfB~\x95N\xc6\xa6\x07\xcd\xd1 /\x95r\xfa\x94\xdf\x00\x06\x8c\xad\xcd\x8a\x0e\xc33,\xf8R\x9bc\xde\xba\xa7\x87\xf9hvp2<\xe2og\x1aQZ\x0e\xfbL!\xa3n?:\x14<\xb5w\x1eQ\xb5\x9a\xfb\x96<we\x1f\xfd\x90H\x95\x95v)3\x81\xa5\xaaaj$\x90%\x1e`\t\xf8\x00\xdd\x8b\xb7c\x9an\x0b\xd1H\xa1\xdeH\xbeVbK\x89v\x08\xc5\xcb\xde\x90\xf8\xc9)dn\x82\x93\x9a``\x13\xc8\xf3\xd4nj\x92U=.\xda\x1e\x9a\x01\xc6V\xca\x1cq\x98\x9bL\xc9\xafl\xcf\xdc\x07`\xd3\xc9\xaf\xfcl\xc7\xffE\x86\xdd\xfb\x14\xdb%:\xb41S\x05\x8a$\x0f /\xadY\x1a\xfa\xecdl\xebE\x91\x9f\xbc\xd0\x0e\\\xa8\x9b\xf0>\xaf\x14k\x0e3?&\x8a.\x14\xc5X\xa2\xa7\x0b\x96\xb9\xbd\x86e\xd2 $\x1dv\xc8x(\xa8\xa3{\xa1h\xbfI\xf0\xebR\x82\xd1\x98\x93\xff@RH\xf9=\xd5Gpzw\xd4\xa4qh\x0b\xb9\x9aG\x84\x80\xdd\x8f\xe4d>!\x9c\x9d\xbbxK\x1a\x89\x04nT\'\xb0\xaevoUD_/\xed\x05Q\xf1\xaf9\xcf<\xe3\xac9gI\xa7\xf2~\xf1y%u\x00\x9e\xadS\xd0$\x9a\xa7\x19r\xf4\x1d\x99&\x1bLp\xaaW\xef\x0f\xa9\x84\x06\x0c\x91_3K0\x95\xa6\'\x88\x03p\xb2\x9e\xb3\x9b\xe0\xe7\xf8V\x94Z\xd3\xab\xe0\xf6[\x99#K\xf9\x11\'D\x87\xef\x8cg_\x85M\x15\xa7\xf5\x8c\xb1*X\xe3w\xf4D\xf1AJqv\x8e\xe2\xcb\xe3"\xb2\xf7r\x8e\xee\n/\x84\xe3\xa9\xfdM\xaf>\xd1\x01><\x17\x04g\xb6[<\xda\xd7\xcc\t{>\x97}\xfcg\xd0RfX\x98\xbcP\xfa\x96\xcb\x81\xd4\xb1\x8e\xd7\x1a\xaa\nTf/g\xa8%\xd5\xff\x0c\x93\xe95,\xd9\xd2\x19\xc7\x0c\xbe\x07\r\x1d\x0e\xa8\xe2\x97B\x16J\xe6\x00\xaaT4Q\xf0\x9c\xbd<\x15!\xa5\x1d\xf1Y\xec+\xdb\x0e\x838\xa2\x02j\x7fAQg\xf8\x14\x01\xe1\xaf&k\x1f\xb7Y\xab\x14\xb4\xab\xac\x83(b\xbe\x00\xa3\xd2b\x12^\x94\xa3G<\xd8X\xdf\xcb\x9d\x909S\x17\xd2\x9cU#\xb5\xc2\xc1\xa1\xa5\x89=\xc6\x0c\x02i@\x89\xa0\xe8\xdfUH\xfb\xdfb s5\x17@\xc6\xfc\x12\xc4\xf0\x01wz\xdc\xa0\xd6\xe6\xae0z\xa8\x85\x98I\xee\xc4!\xfd:\x1e\xfd%\n\x9b\x12q\xc2\xe5"\xc3\xf55+\xf7p\xe0\xa9\x8a\x7f\x1aW\x80\xe7_\xca\xec\xd4#0\x94\xcc\x14i\xa2\xd1\xf7\x8a\xd3\xe1\xd7\xb8\x18\x1bP\x05;\x84\x0f\x99\xc9\n\x90\xe3\xa0g\xb2-\x92?x}\x08\x1e\xa4\x80\x88\x15\xd4N\xe9\xa6\xf1\xfcJ\xca\x12\x05\xbde\x98b\x8c\x9d1\x99a\x1f:\xc8=.D\x91I\xc3\xd5\xcdO=R\x1f\xeb\xbe\xad\n\x85S\nu\xcc\x88\xfa\x94\x85.]\xdbi\xe3\xc3\x99\x0e\xa2_y\xd2\xea>\xf8)\x00\x87\x14+\xb7\n\xef\xd5\x16\xb6\xe9-\xbd\xee\xad\x0fx5}\x7fS\xa2u\xa9~!\x9c\xbb\xae\x1bP\xa9~\x11\x97bsK\xda-\x97w\x87\xaf\xa8\x9d\xbd\xc5\xcc\xf5c\xc9\xd92\x11\x0e0\x99f\xbb\xce\x8a\x940L\\\xd5\xc2eD\xffb\x8d\x0c\xdf\x9c]\x11D\xc3\xcfBW\x11\x8b\xd7\x91\xbf\x8c\xd7pP2\xf1\x7f\xd1\xc6\xf6\x1c\xec\x18\xb8T\xc99!\xe2\x13`\xf4\x08\xa7\xee\xa4\x04\xb7\xb3\xaf\x85\x15\xf0\xadV\x9a9kh\xc8\xd5\xb9\xa5\x07mOnN\x9e\xd6\x1b\x99B\xa2\xe3!5\x80\xd8\x12\xe9\xd0\xea\x8fn\x9f\x16\xd6^\x01\xf0\x86\xe1\t\xd5>\x85\\\xa1\xc8\x16^\x8d-\x0b\xe9\xe5\xf4\x9a\x9a\x95\x18\xc6\x0c:\xea\x1b{\xafc\x12\xd5,\xf6e#I:~3\xd2\xb5r\xa5p\x06\r\xef\xd6\xf0\xd3\xbbJ\xc6W\xd6\x80\xf4\x10\xe9;\r~\xe4\xf7\x9a\xe1\x95U\xbaI\x8c\xe5],\xc45\x19uY\x80\x01\xd0\x14^\x12\xda_\x99\xe1\xdda!\xc9\xb2L`oa\x84\xba\x16\xe5\xe4\xd06u\x08\x85x\xe6#}\xe4H\xf4x\xeb\xc8\xcf\xd5H\xd0\x0c\xd3Ma\xafn\x8dD\xbf\x1a\xb1\x1f2c\x80lV\xa3ME\x0f\xfcA"\xbb\x9b\xb6\xb2{\xafH\xf2=\x15n\xb3\xeaE\xae\xee\xfd\x83dw[\xd4)\xc5\x1fG@\xf5\xdeP\x99\x16\xeb\x8d\xda$\x13\xac\xe2\xf9\x97\'eG\x91i\xc17\xb9m%\xd0\x13\'\xe9B\xec\xdd\x8dE\xc2\xb1s\xc8{\x8e\x02\xc7\xd9\xcac.\xd1(G\x15\xeeYnz_\xf3\xaf?\xf5\xbd\x1c9\xac\'\\\x8d\xdf8\xff\x83h(\xecc\x07G\x88\xb2\x1b\x1d\x96\xe2\xd7\xcf\xe3\xa6O\xab\xd1c\xb3:\x88\xaf\xe2\xd9\xea\x14\x12\xe5\x8bQ\xc8\x16=@\xf3\x0c\xf8=qJoF\xae\xaeD\xbe&\x05\x11\xceHr\x16sM\x95\x99-\xc4\xc4\x11!\xf4\x9d\xa7\xc3\xd8\xccNzdP\x96\xfd\x920i\xd4F9\xd5P\x86\x06&\'\xebp\xf9\x90\xa2\xfc\x03\xacmS<\x84$lm\xb7\x9fW\xed\xf8\xdb\xab\xc5\x00\xd8\x92\xfcp^\x11\x1a\x99\xd2\x8e\xe7\xbc\xce\xa7[5\x846\xba\x1b\xee\xff.#\x00\xd9\xfa\x9c\xa0\xfd\x04\xd1\xeb.5\x8f\x00\x03\x0e\x9e\xc3\xe0\x1e\xe3\x1fL\noSk\xf5\x04\x9fBX:\xe3\xd06\xb0F\xaf\xfeU\xe8\xc20\x94y\xee\x9c\xc9\xa6K^\x07\xa1?\x17\xeb$\xf3\xa7\x9a>\xef\x872\xf5r\xa0\x9a\xa0E\xec2^\x1cw\xc5\x81y\xe94\x8a\xeb\x01>\xef+G\xa1-{\x9d\x15\xbd\xc8\xb7\xbf2w\xdaK\x88M\x80\x9d\xc9s\xf39\xc7\xd7\x92\xe1:b4YB\x86`a\xd7\xf1[\xec\\\xb2\xffE\x17\xa9Y[\xa6\xc9\xaa\xe7|\xd5\x90[T\xb5D\xfbEm^Z\xbc\x1cNza\xeb\\9\x8aas:\xdee\xa7MP:\x804\x13O\x96\x15!\x8e\xech{S\xf1Hq\xe2a\xe9c\x0e-\x9a\xb4\xc59a\xa0QF,\xcf\xa8-xX\xda\xc4\xbd\xe2ox\x97\x10\x15\xdb\xbayW\xc6\xf8E:\xfeU\xa1\x1d\xeer\x0c\x82\x1a#\x16I#\x92]\xf5\xcdA\xde\x90\xade,\x9b\xfe\xcd\xc5\xc4\x033\xfd<\xd7,9\xc6\r,x\xeck\x83\xdf\xcfC\x84\xb5\xf7\x97_\xd2\x88\x0b6\x9c,_\xef0\x84\x8e3Xv\x18\xa3Y\x0b3Rl\x9d\x01-Q>\x13\x08\xcc\x01:\x1a\x19\xe7d\x88\x00A\xbf\xe9zI\xcc\x93\xef\x00\x91\xdcg\xb2Yp\x01\xaa\xa4X\x80\xa9\xac\xe57mU\xbf\x7f\x05r/3\\BE\xf7J\xeektn<\xbd\x06\\\x7f\x05z\x02\x80<\x1d\x03\x1e`\x1d\x89\xd9\x9af\xa5\xc4\x90\xfaR\xae\xaa\x00\x81\xe4#\x105\x1fAPa\x03\xd8\x8b/c\x83gm\x82\x97\xec\x00\xa8&\x13\xd8\xcb\xdf\xde@H\x1bh\x99T\xe0 *\xb2\x02\xf3\xbd\x83\xa4/\x95\xd6\x05\x10\xa9_"Y\x9b\x9c\xd0.\x833\x89\x02\x1a6\x04G\x1c\x99\xd8~\xc5?\x99\xd9v\xe3\x88x\xc8\xc4\xb8\x92-x\xc7\x0e\x13<\x92&|/}*HP\xaa\xa2D\xe3+!A\xe1\xda\x1es\x08;\xedY\xdd\xfc\'6\x87A\x12\xc4~C\xbe\xee\xe6\x1f\x9a\xb0\x8b\x8e\x0e\tA \x14\xceg\x12\xf9\x97\xb0\xc6\xcd9\x07@\x16/\xf9r\xd6\x1eQN:\xbf\x05I\x02\xe3c\\{\xc7:n\']\x9e\xcc^0\xe3\x94#\xbd\x05\xcf\xd1\x9ai\xe77(\x01\x0e\'f\xbf\xec2\x88*\xc9PKi^\xc2\xc2\xe24\x9f\x94\xe8 \x81\xb5\x7fG\xfdJ\xdb\xff>\x01\x9f\xb2rq\xdb\x93/\x08\xe2~\xceY\xa6 \xdb\xe88\x05\x94&\xc2\xe5ibT\x92R}\xb3\xd4@\xc7\xa3S\xdf\xaf\x89eJ==\xc0:\xe2a|\x12Y\x8aeu_\x07B\x9a]d\x90{\x1c\xdde\xf4l\x82\xe4\xf8\x97\x13\xce\xa6\xce\xcd^\x927\nV\x1f\xc9}d\x16\xa0o\xc2\x81\x8a\xd8\xbcQ&^\x9e\xee\n\xa0\xb7\x18+\xc6\xf1\x9a8\x8bMP3\x8f"?\xdd\xd7\x98\x9f{\xc0\xc5\xfbB\x85W\x7f\xb65\x94j\xbe\xd8\xbd\xf43\xe5m\xc3\xa9\xa8\xf4\xe4\xa4\xcd\xae\xf5\xa23{\n\x13p\x00\x149H\xa2\xff\x83u\x81\x81xd\x8e\x91\xca\xeeJ\x9e\xbcg\x13\tP\xf3J\x91\x89\xff\x9eR8\xa7\xdcM\xa68\xbbT\xd1\x90+\xef\xbax\xb6\xc6E\xcc\xba_K\xe6\xffa}\xbe!\xc5`\xfc\x07\xc8;mt\xbf\xa3e{7)\x81\xc3-\x99E\x9b1zR\xfc h\xc3\x1bl\x1a\x1bNz\x93\xafo\x8e\xbb\x8b\xa3R\xacB\xfe|\xf25\xef$\x85B\xdd\x17\x8e\x10\x03\xef[\xea\xach?QJN/\xc9q\x9d)g\t\x12\r\xd7\xcf\xa6He\xdf\xfc&\xe3\xf3\xdaN\xc7"4\xb5\x1bfd\xca\xfcy!xa\x02\xd5\xef\xef\xfc\xf2\xf8\xec\xf5\x17Ze\x83sk\x98\xac\xa7S\x9d\xe4\xb9\x9bqQ\xcc_F\xe9H\'{\xbc\r\x90\xb5\xefK\xba\xc3\xa1\xc6\xec\x8c\x80C\x16=\xe5x\xcdy+G\xef\x95\x89[\x07\xd2_\x8at\xd1\xfaYf\xa4=\rg/Zo\x87\xc7x/\xfcM\xdb\x87MD\x04\'A\xf8\x00\x89\xffC\x91y\x89d$\xc7X\xc4\x8b\xb6\x8d\xfb}\xd3\xed\xb1\x94\n\x84x\x86\xc8\xb6V\xf06\xd4\xce!\x9b820\x02\xf3\x7f\xb6\xdd\x87\xb4\xec\x0fa`z\x8b\xae\xa5}\xb7\xf0\xfe\xee\x85\x83\x1euo\xcc\'\xd8\xc668\x1f\xa2\x1d\xe2#\x1a>\x1aKXhh\x97\xee\xf9\xb5Y$\xd9\x13\x82\xc4\xee\x1fO\xb6\x85p\xd7\x90\x0c \x9a\x85\xfc\x86\xc9/\x1ads(\xb6\xean\x97\xd0\xf637K\xff\xb37O*\xbc_\x11\x81\xa8\xa1q\x0f\xdf\xcb\xe7P\xd2\xd2\xcf\xc4~5\xfc\x91\x83\x84\xb8yN.\x9chE\xcb2\xb7\xcf\xe5YS\xb3\xa0\x1d\xb1\x13y\xe7\x0f$o,M\x0c\xc5\xda\x99\t(3\x0b\x91\x8a\t\xfb\xde\'\xa6\xc0SC\xec\x02^\x9bZ\xc9IS\x94\xefo#(\xaa\xe8\xc8~\x04\xfa\x14U\x98\xc7\xfe\xd1$q\xa1l\xb7_Uf\xcaZ\x97Tc\x91\xa3\x14\x85Wm\x96\xb7\xccE\xc6\xe67\xb8\x9b\rAW\xb4Z01nZ\x19\xba\xd1\xcc5\xf4}*\r\x83\x19\xc0n\xfc@tm\xb1\xdc\xb3M\xef\xf1\xd9\x97\xd6\xbc\x9d\xa45\xf2v$\x05\x83\x06\xe4g\xbb\xdcof\x00y\xa6\xb8\xeck\x1b\xf0~\xb6\xc8\xb3\xa7\xac\xbd\xe8\x8b\x99\xdc\xf3*\xbc\xf4\xc3d\xd7_\xace\xa4\xa9\x03\x1c\xcf\x1b\xf6\xabm\xec{r\x05G=\x1a\xf5\xea\xe4P^c\x843\xb0\x8fL\xb6\x13\xd8\xbc\x04L\x00^\x809\x9a\xb3\xf8++ysl&\xc6\x08\xcd\x08\x8c+\xc1\xef\xf7G\xd2\xdf\xa1\x8fb\xb8x\xe7a\xc3G\xb5\xd0UO\xb5\x87*_\xb3)\xd5\xe8h\xdcT\x08~j!<\x9e\xc8\n\x98\xea\x11\x0e\xa0\xaf\x0f\x99}wA\xa0d%ES\x13\xb4P\xca\xd7 n\xe6\xe0n\n \x05=\x1e\xd3\xf5\xba%\xc4X\xa0\xa7\x8a{\xe0_\x9ey\xaf<\'.M\\\xb8\xc5\xd7\xdf\xff\xc6\xd2XT\x01\x85t\x8e\x8e\xc8E\xf9\xd9\x93NDl\xabUvC\xed\xeb\xde\xc7\xfc\xb6.`\xf231\xf5\x1d\xbf]\xdf\xb0\xff\xb1K\x1b\x02T\xf9(\xa0lM\xb7\xce\xf0\x12\x137rP\xd5\x96\xc1\xf4g\x86\xd1\xdb?\'\xf4\xb1\xc5!\xe8~U\xcb\x85P@\xc3\x88J&\x8e\xbb\x14\xc1\xc0y\x83J\xbaj\xec\xe4\xe8\x95N\x98\xba\x87\xc8\x85\xa6\xc4\xb96\xd5\x0e\xdf\xee)}\xf8gA(:\xfeZ\xd7\xaa\n\xf7\x1e)E\x85\xf6\x9d\x97\x9a-\x03\xe5\xef1\xfd\x1a\xcf\xdb\xd4\xe9\x0c\xcb{9\xe9\xccM\xca\xb3\x1e:\xe4\x9c\x7f\x0e\x1aCG\'\x99\xf4\xcd\x18\x8e\x89\xca\xc6\xac\xf3$\xee\xe2[\x01w:\xa8')
|
1
|
+
import flask_babel,flask_babelex
|
2
|
+
from hiddifypanel.models import BoolConfig,StrConfig,ConfigEnum,hconfig,ConfigCategory
|
3
|
+
from wtforms.validators import Regexp, ValidationError
|
4
|
+
from flask_babelex import lazy_gettext as _
|
5
|
+
# from flask_babelex import gettext as _
|
6
|
+
import wtforms as wtf
|
7
|
+
from flask_wtf import FlaskForm, CSRFProtect
|
8
|
+
from flask_bootstrap import SwitchField
|
9
|
+
|
10
|
+
from flask_admin.base import expose
|
11
|
+
# from gettext import gettext as _
|
12
|
+
|
13
|
+
|
14
|
+
import re
|
15
|
+
from flask import render_template,current_app, Markup,url_for
|
16
|
+
from hiddifypanel.panel.hiddify import flash
|
17
|
+
from hiddifypanel.models import *
|
18
|
+
from hiddifypanel.panel.database import db
|
19
|
+
from wtforms.fields import *
|
20
|
+
from flask_classful import FlaskView
|
21
|
+
from hiddifypanel.panel import hiddify,hiddify_api,custom_widgets
|
22
|
+
|
23
|
+
class SettingAdmin(FlaskView):
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
def index(self):
|
28
|
+
form=get_config_form()
|
29
|
+
return render_template('config.html',form=form)
|
30
|
+
|
31
|
+
|
32
|
+
def post(self):
|
33
|
+
form=get_config_form()
|
34
|
+
if form.validate_on_submit():
|
35
|
+
|
36
|
+
|
37
|
+
boolconfigs=BoolConfig.query.filter(BoolConfig.child_id==0).all()
|
38
|
+
bool_types={c.key:'bool' for c in boolconfigs}
|
39
|
+
old_configs=get_hconfigs()
|
40
|
+
for cat,vs in form.data.items():#[c for c in ConfigEnum]:
|
41
|
+
|
42
|
+
if type(vs) is dict:
|
43
|
+
for k,v in vs.items():
|
44
|
+
|
45
|
+
if k in [c for c in ConfigEnum]:
|
46
|
+
#if not k.commercial():continue
|
47
|
+
if k in bool_types:
|
48
|
+
BoolConfig.query.filter(BoolConfig.key==k,BoolConfig.child_id==0).first().value=v
|
49
|
+
else:
|
50
|
+
if "_domain" in k or k in [ConfigEnum.admin_secret]:
|
51
|
+
v=v.lower()
|
52
|
+
if "port" in k:
|
53
|
+
for p in v.split(","):
|
54
|
+
for k2,v2 in vs.items():
|
55
|
+
if "port" in k2 and k!=k2 and p in v2:
|
56
|
+
flash(_("Port is already used! in")+f" {k2} {k}",'error')
|
57
|
+
return render_template('config.html', form=form)
|
58
|
+
if k == ConfigEnum.parent_panel and v!='':
|
59
|
+
# v=(v+"/").replace("/admin",'')
|
60
|
+
v=re.sub("(/admin/.*)","/",v)
|
61
|
+
|
62
|
+
try:
|
63
|
+
if hiddify_api.sync_child_to_parent(v)['status']!=200:
|
64
|
+
flash(_("Can not connect to parent panel!"),'error')
|
65
|
+
return render_template('config.html', form=form)
|
66
|
+
except:
|
67
|
+
flash(_("Can not connect to parent panel!"),'error')
|
68
|
+
return render_template('config.html', form=form)
|
69
|
+
StrConfig.query.filter(StrConfig.key==k,StrConfig.child_id==0).first().value=v
|
70
|
+
|
71
|
+
# print(cat,vs)
|
72
|
+
|
73
|
+
db.session.commit()
|
74
|
+
flask_babel.refresh()
|
75
|
+
flask_babelex.refresh()
|
76
|
+
|
77
|
+
|
78
|
+
from hiddifypanel.panel.commercial.telegrambot import register_bot
|
79
|
+
register_bot()
|
80
|
+
if hconfig(ConfigEnum.parent_panel):
|
81
|
+
hiddify_api.sync_child_to_parent()
|
82
|
+
reset_action=hiddify.check_need_reset(old_configs)
|
83
|
+
if reset_action:
|
84
|
+
return reset_action
|
85
|
+
|
86
|
+
if old_configs[ConfigEnum.admin_lang]!=hconfig(ConfigEnum.admin_lang):
|
87
|
+
form=get_config_form()
|
88
|
+
return render_template('config.html', form=form)
|
89
|
+
flash(_('config.validation-error'), 'danger')
|
90
|
+
return render_template('config.html', form=form)
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
# form=HelloForm()
|
97
|
+
# # return render('config.html',form=form)
|
98
|
+
# return render_template('config.html',form=HelloForm())
|
99
|
+
form=get_config_form()
|
100
|
+
return render_template('config.html',form=form)
|
101
|
+
|
102
|
+
def get_babel_string(self):
|
103
|
+
res=""
|
104
|
+
strconfigs=StrConfig.query.all()
|
105
|
+
boolconfigs=BoolConfig.query.all()
|
106
|
+
bool_types={c.key:'bool' for c in boolconfigs}
|
107
|
+
|
108
|
+
configs=[*boolconfigs,*strconfigs]
|
109
|
+
for cat in ConfigCategory:
|
110
|
+
if cat=='hidden':continue
|
111
|
+
|
112
|
+
cat_configs=[c for c in configs if c.key.category()==cat]
|
113
|
+
|
114
|
+
for c in cat_configs:
|
115
|
+
res+=f'{{{{_("config.{c.key}.label")}}}} {{{{_("config.{c.key}.description")}}}}'
|
116
|
+
|
117
|
+
|
118
|
+
res+=f'{{{{_("config.{cat}.label")}}}}{{{{_("config.{cat}.description")}}}}'
|
119
|
+
for c in ConfigEnum:
|
120
|
+
res+=f'{{{{_("config.{c}.label")}}}} {{{{_("config.{c}.description")}}}}'
|
121
|
+
return res
|
122
|
+
|
123
|
+
|
124
|
+
def get_config_form():
|
125
|
+
|
126
|
+
|
127
|
+
strconfigs=StrConfig.query.filter(StrConfig.child_id==0).all()
|
128
|
+
boolconfigs=BoolConfig.query.filter(BoolConfig.child_id==0).all()
|
129
|
+
bool_types={c.key:'bool' for c in boolconfigs}
|
130
|
+
|
131
|
+
configs=[*boolconfigs,*strconfigs]
|
132
|
+
# categories=sorted([ c for c in {c.key.category():1 for c in configs}])
|
133
|
+
# dict_configs={cat:[c for c in configs if c.category==cat] for cat in categories}
|
134
|
+
class DynamicForm(FlaskForm):
|
135
|
+
pass
|
136
|
+
is_parent=hconfig(ConfigEnum.is_parent)
|
137
|
+
for cat in ConfigCategory:
|
138
|
+
if cat=='hidden':continue
|
139
|
+
|
140
|
+
cat_configs=[c for c in configs if c.key.category()==cat and (not is_parent or c.key.show_in_parent()) ]
|
141
|
+
|
142
|
+
if len(cat_configs)==0:continue
|
143
|
+
|
144
|
+
class CategoryForm(FlaskForm):
|
145
|
+
description_for_fieldset=wtf.fields.TextAreaField("",description=_(f'config.{cat}.description'),render_kw={"class":"d-none"})
|
146
|
+
for c in cat_configs:
|
147
|
+
if c.key in bool_types:
|
148
|
+
field= SwitchField(_(f'config.{c.key}.label'), default=c.value,description=_(f'config.{c.key}.description'))
|
149
|
+
elif c.key==ConfigEnum.lang or c.key==ConfigEnum.admin_lang:
|
150
|
+
field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("en",_("lang.en")),("fa",_("lang.fa")),("zh",_("lang.zh"))],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
|
151
|
+
elif c.key==ConfigEnum.country :
|
152
|
+
field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("ir",_("Iran")),("zh",_("China")),("other",_("Others"))],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
|
153
|
+
elif c.key==ConfigEnum.package_mode:
|
154
|
+
field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("release",_("Release")),("develop",_("Develop"))],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
|
155
|
+
elif c.key==ConfigEnum.utls:
|
156
|
+
field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("none","None"),("chrome","Chrome"),("edge","Edge"),("ios","iOS"),("android","Android"),("safari","Safari"),("firefox","Firefox"),('random','random'),('randomized','randomized')],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
|
157
|
+
elif c.key==ConfigEnum.telegram_lib:
|
158
|
+
# if hconfig(ConfigEnum.telegram_lib)=='python':
|
159
|
+
# continue6
|
160
|
+
libs=[("python",_("lib.telegram.python")),("tgo",_("lib.telegram.go")),("orig",_("lib.telegram.orignal")),("erlang",_("lib.telegram.erlang"))]
|
161
|
+
field=wtf.fields.SelectField(_("config.telegram_lib.label"),choices=libs,description=_("config.telegram_lib.description"),default=hconfig(ConfigEnum.telegram_lib))
|
162
|
+
elif c.key==ConfigEnum.branding_freetext:
|
163
|
+
validators=[wtf.validators.Length(max=2048)]
|
164
|
+
render_kw={'class':"ltr",'maxlength':2048}
|
165
|
+
field= custom_widgets.CKTextAreaField(_(f'config.{c.key}.label'), validators, default=c.value, description=_(f'config.{c.key}.description'),render_kw=render_kw)
|
166
|
+
else:
|
167
|
+
render_kw={'class':"ltr"}
|
168
|
+
validators=[]
|
169
|
+
if c.key==ConfigEnum.domain_fronting_domain:
|
170
|
+
validators.append(wtf.validators.Regexp("^([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})|$",re.IGNORECASE,_("config.Invalid domain")))
|
171
|
+
validators.append(hiddify.validate_domain_exist)
|
172
|
+
elif '_domain' in c.key:
|
173
|
+
validators.append(wtf.validators.Regexp("^([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})$",re.IGNORECASE,_("config.Invalid domain")))
|
174
|
+
validators.append(hiddify.validate_domain_exist)
|
175
|
+
|
176
|
+
if c.key!=ConfigEnum.decoy_domain:
|
177
|
+
validators.append(wtf.validators.NoneOf([d.domain.lower() for d in Domain.query.all()],_("config.Domain already used")))
|
178
|
+
validators.append(wtf.validators.NoneOf([cc.value.lower() for cc in StrConfig.query.filter(StrConfig.child_id==0).all() if cc.key!=c.key and "fakedomain" in cc.key and cc.key!=ConfigEnum.decoy_domain],_("config.Domain already used")))
|
179
|
+
render_kw['required']=""
|
180
|
+
|
181
|
+
if c.key ==ConfigEnum.parent_panel:
|
182
|
+
validators.append(wtf.validators.Regexp("()|(http(s|)://([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})/.*)",re.IGNORECASE,_("Invalid admin link")))
|
183
|
+
if c.key == ConfigEnum.telegram_bot_token:
|
184
|
+
validators.append(wtf.validators.Regexp("()|^([0-9]{8,12}:[a-zA-Z0-9_-]{30,40})|$",re.IGNORECASE,_("config.Invalid telegram bot token")))
|
185
|
+
if c.key==ConfigEnum.branding_site :
|
186
|
+
validators.append(wtf.validators.Regexp("()|(http(s|)://([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})/?.*)",re.IGNORECASE,_("config.Invalid brand link")))
|
187
|
+
# render_kw['required']=""
|
188
|
+
|
189
|
+
if 'secret' in c.key:
|
190
|
+
validators.append(wtf.validators.Regexp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",re.IGNORECASE,_('config.invalid uuid')))
|
191
|
+
render_kw['required']=""
|
192
|
+
|
193
|
+
if c.key==ConfigEnum.proxy_path:
|
194
|
+
validators.append(wtf.validators.Regexp("^[a-zA-Z0-9]*$",re.IGNORECASE,_("config.Invalid proxy path")))
|
195
|
+
render_kw['required']=""
|
196
|
+
|
197
|
+
if 'port' in c.key:
|
198
|
+
if c.key in [ConfigEnum.http_ports,ConfigEnum.tls_ports]:
|
199
|
+
validators.append(wtf.validators.Regexp("^(\d+)(,\d+)*$",re.IGNORECASE,_("config.Invalid port")))
|
200
|
+
render_kw['required']=""
|
201
|
+
else:
|
202
|
+
validators.append(wtf.validators.Regexp("^(\d+)(,\d+)*$|^$",re.IGNORECASE,_("config.Invalid port")))
|
203
|
+
|
204
|
+
|
205
|
+
# validators.append(wtf.validators.Regexp("^(\d+)(,\d+)*$",re.IGNORECASE,_("config.port is required")))
|
206
|
+
|
207
|
+
for val in validators:
|
208
|
+
if hasattr(val,"regex"):
|
209
|
+
render_kw['pattern']=val.regex.pattern
|
210
|
+
render_kw['title']=val.message
|
211
|
+
field= wtf.fields.StringField(_(f'config.{c.key}.label'), validators, default=c.value, description=_(f'config.{c.key}.description'),render_kw=render_kw)
|
212
|
+
setattr(CategoryForm,c.key , field)
|
213
|
+
|
214
|
+
multifield=wtf.fields.FormField(CategoryForm,Markup('<i class="fa-solid fa-plus"></i> '+_(f'config.{cat}.label')))
|
215
|
+
|
216
|
+
setattr(DynamicForm, cat, multifield)
|
217
|
+
|
218
|
+
setattr(DynamicForm,"submit",wtf.fields.SubmitField(_('Submit')))
|
219
|
+
|
220
|
+
|
221
|
+
return DynamicForm()
|
222
|
+
|
223
|
+
|
224
|
+
|
4
225
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
226
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -1,5 +1,52 @@
|
|
1
|
-
#
|
2
|
-
from
|
3
|
-
|
4
|
-
|
1
|
+
# #!/usr/bin/env python3
|
2
|
+
# from hiddifypanel.panel.database import db
|
3
|
+
# import uuid
|
4
|
+
# from flask_babelex import gettext as _
|
5
|
+
# from flask_bootstrap import SwitchField
|
6
|
+
# # from flask_babelex import gettext as _
|
7
|
+
# import wtforms as wtf
|
8
|
+
# from flask_wtf import FlaskForm
|
9
|
+
# import pathlib
|
10
|
+
# from hiddifypanel.models import BoolConfig,StrConfig,ConfigEnum,hconfig,Proxy,User,Domain,DomainType
|
11
|
+
|
12
|
+
# from datetime import datetime,timedelta,date
|
13
|
+
# import os,sys
|
14
|
+
# import json
|
15
|
+
# import urllib.request
|
16
|
+
# import subprocess
|
17
|
+
# import re
|
18
|
+
# from hiddifypanel.panel import hiddify
|
19
|
+
# from flask import current_app,render_template,request,Response,Markup,url_for
|
20
|
+
# from hiddifypanel.panel.hiddify import flash
|
21
|
+
# from flask_wtf.file import FileField, FileRequired
|
22
|
+
# import json
|
23
|
+
|
24
|
+
# from flask_classful import FlaskView
|
25
|
+
# from flask import Flask, render_template
|
26
|
+
# from flask_socketio import SocketIO, send, emit
|
27
|
+
# from flask_socketio import Namespace, disconnect
|
28
|
+
# from flask import current_app as app
|
29
|
+
|
30
|
+
# class Terminal(Namespace):
|
31
|
+
|
32
|
+
# def on_connect(self):
|
33
|
+
# pass
|
34
|
+
|
35
|
+
# def on_disconnect(self):
|
36
|
+
# disconnect()
|
37
|
+
# app.logger.info("socket disconnected")
|
38
|
+
# db.session.remove() # this is important
|
39
|
+
|
40
|
+
# def on_get_foo_details(self, **kwargs):
|
41
|
+
# try:
|
42
|
+
# # Do something useful like print statement
|
43
|
+
# print("Hello! Awesome world")
|
44
|
+
# # Then send a event back to the world
|
45
|
+
# emit("event_name", dict(random_key="random_value"), namespace=self.namespace)
|
46
|
+
# # or
|
47
|
+
# emit("event_name", dict(random_key="random_value"))
|
48
|
+
# except Exception as e:
|
49
|
+
# print("Catch the exception")
|
50
|
+
# # Db session remove is important
|
51
|
+
# db.session.remove()#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
52
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|