hiddifypanel 3.0.0.dev64__cp310-cp310-manylinux2014_x86_64.whl → 3.0.0.dev65__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.
Files changed (70) hide show
  1. hiddifypanel/Events.py +27 -4
  2. hiddifypanel/VERSION +1 -1
  3. hiddifypanel/VERSION.py +1 -3
  4. hiddifypanel/__init__.py +7 -3
  5. hiddifypanel/__main__.py +13 -3
  6. hiddifypanel/base.py +88 -3
  7. hiddifypanel/base2.py +40 -3
  8. hiddifypanel/models/__init__.py +10 -3
  9. hiddifypanel/models/child.py +26 -4
  10. hiddifypanel/models/config.py +105 -4
  11. hiddifypanel/models/config_enum.py +207 -4
  12. hiddifypanel/models/domain.py +106 -4
  13. hiddifypanel/models/proxy.py +55 -3
  14. hiddifypanel/models/usage.py +58 -3
  15. hiddifypanel/models/user.py +171 -3
  16. hiddifypanel/panel/__init__.py +7 -4
  17. hiddifypanel/panel/admin/Actions.py +170 -3
  18. hiddifypanel/panel/admin/Backup.py +80 -4
  19. hiddifypanel/panel/admin/ChildAdmin.py +122 -3
  20. hiddifypanel/panel/admin/ConfigAdmin.py +54 -4
  21. hiddifypanel/panel/admin/Dashboard.py +70 -4
  22. hiddifypanel/panel/admin/DomainAdmin.py +195 -4
  23. hiddifypanel/panel/admin/ProxyAdmin.py +128 -3
  24. hiddifypanel/panel/admin/QuickSetup.py +127 -4
  25. hiddifypanel/panel/admin/SettingAdmin.py +224 -3
  26. hiddifypanel/panel/admin/Terminal.py +51 -4
  27. hiddifypanel/panel/admin/UserAdmin.py +277 -4
  28. hiddifypanel/panel/admin/__init__.py +82 -4
  29. hiddifypanel/panel/admin/adminlte.py +13 -4
  30. hiddifypanel/panel/admin/commercial_info.py +23 -3
  31. hiddifypanel/panel/admin/websocket.py +9 -3
  32. hiddifypanel/panel/admin_2.py +33 -3
  33. hiddifypanel/panel/asset.py +17 -3
  34. hiddifypanel/panel/cf_api.py +35 -4
  35. hiddifypanel/panel/clean_ip.py +125 -3
  36. hiddifypanel/panel/cli.py +172 -3
  37. hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
  38. hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
  39. hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
  40. hiddifypanel/panel/commercial/__init__.py +50 -4
  41. hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
  42. hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
  43. hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
  44. hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
  45. hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
  46. hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
  47. hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
  48. hiddifypanel/panel/common.py +98 -3
  49. hiddifypanel/panel/custom_widgets.py +71 -4
  50. hiddifypanel/panel/database.py +18 -3
  51. hiddifypanel/panel/hiddify.py +655 -4
  52. hiddifypanel/panel/hiddify_api.py +70 -3
  53. hiddifypanel/panel/init_db.py +393 -3
  54. hiddifypanel/panel/usage.py +85 -3
  55. hiddifypanel/panel/user/__init__.py +25 -4
  56. hiddifypanel/panel/user/link_maker.py +416 -3
  57. hiddifypanel/panel/user/templates/home/multi.html +1 -1
  58. hiddifypanel/panel/user/user.py +233 -3
  59. hiddifypanel/static/css/custom.css +6 -0
  60. hiddifypanel/templates/500.html +1 -1
  61. hiddifypanel/xray_api.py +109 -3
  62. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
  63. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +67 -69
  64. hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
  65. hiddifypanel-3.0.0.dev64.dist-info/top_level.txt +0 -2
  66. pyarmor_runtime_000000/__init__.py +0 -4
  67. pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
  68. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
  69. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
  70. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,226 @@
1
- # 2023-04-08T16:23:31.851670
2
- from pyarmor_runtime_000000 import __pyarmor__
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\x004*\x00\x00\x12\t\x04\x00\xf3C\x88[\xf1\n\xc3\x92\x1d3\xc4\xa8\xd7F\xb43\x00\x00\x00\x00\x00\x00\x00\x00\x802\x9b\x13E\'\xf3\xca\x99\xd6%x\xc1\x05\x97\xc6\xbfud\xb0\x8bR\xe7(?Z\xfe\xe9\x1e\x0e\xa3\xa7=\xf1\x90\x96\xde\xc3\x8d{1\xc9\xae\t\x14\x17\xb1\x88n\xe0{R\x1b\xe1\xb6|\xc7\xb7\x9f0 \x8d\x84\xdf\xadQS\xaf^o\xdbr\xd6\xcc"\xa3\xe0R\xa0\x92Q\xce\x17\xfa\xb5\x1d\x8a%\t:,\xc6\xe5\x00\xc8q\x8e\t\xc3\x96\xdc,j\x87\x80-_\x96/\xa6\t.\x1eb\xd4\xbb\xa4R\xf3#G\xe3\xc9\xf5\xa8\x0e\x9e\xfa\xd7\x05o\xce\xb0\xa3\x8d\x14\xdf\xc0\x97d\nx\x0b\xc1\xb3\xe6Q\xf6>\xad*S\x18OL\x1e\x94B\xfat\xc9\xc4\x1a8\x89\xde\xd3Q\x03^<\x02\xc9W\xb6p\xb6\x9f1\x1d\x8e\xb1\xae&b\xac\x16O,\xba\xd5\x1e\\\x1fu\x8b\x9f\xda\xd3\xd3\xb9\x8b\xfb\xe8;\x13\x8fN\x84N\xd8\xbd\x05ka&\xf2\xee\xa7\x85\xa1\x87V4B%mh\x85K\r\xd0\x14\xb93\x07\x1e\xef\x17\x0f\xdf\xe0\xcaC?q\xfd\xd3\x11\xc8c\xe5\xbb\xfcY\xb4K\xd8\xeaU\xb5w\x10C\x0f\xee&\x8er\xfb\xdd\xbc\x94\x89\x8d\xd2\xba\xc0e;\x08=}\xf8~\xc9d\x000\xd8O\xc5\xe7\x83\x86?o\x00\xd4\xcc\xc0\x83\x96\xe6O+\x1f\xce\x83+\x8ev0y\xb0\xcd\xde\x96C3\x10\xdc\x9f\xc2y\x96\xc5\xf6Xzy\xa7\xa5\xc8\n\xa3\xf4x\x14\xf0\xf7]e\xe7S\xf2\x89\x01WQ\xf6\x9ch\xadj+j\xd9?\xaa\x01\xb5\xc9A\x11\x19\x95\x8fpq!\xb8\xe9\xe7u\xe1.AK\x01\xfca\xddW\x86\xcb\xddc\xc0\xb9^\x8b\xaflI\xf0\x90\x9e{\xb2\xdbm\xef\x8ff\xf7@\xad\xff3\xc9F\x94\x1de\x907h:\x9d\xd6\xc1c\xa8\x0e\xc6&\xe3\x9eQ\xe6\xc3~\x16C\xb0\r\x9b\xfb\xf5\xe2\xfd\x89\xa9\xe7\x05\xa0\x19\x11&J.\xc5\xf17@\xefLO~s\xaa\x00\xb3\x1aFt\x1c\x84d\xd9\xdc*\xc79h~\xde~\xbd\xfab:\xf6\x94\xcf\x1f\x05^{\x05-`"H\xdfd\xe7hs\xce\x9e\x02\x08\xbd|\xe2\x85`\xb4\'G\xe6\x98\\%H\xa4l\x12\x109:cj\\\xfc\x17]9\xfeo\x16@%\xbcPwhI\x19\x9eK\x0b+\x13\xee\x08\xc9\x80\xe9\xfc\x9f\x10,q\xfd\xd9A\x85TA\xa7\x7fW\x10rO\xba\x85\x9bdg\xef\xe6d\xe5\x14L\xfcn\xaa\xa3\x8a\xca\xaa\xca\xa3\xdf\xa4\xce\x10\x81\xb4\xd6\xf2\xab\xd7\xfc"u\xd6\xc6-\xde\xc703\xc3\xf7\r\xd0\'\x96\xe2A@\xd98\xa2\x0b\x01po\xdf\xa48+0\xa2\x05\x85\x94\x91\xa61\x00\xa1^\x90}\x98\xd1\x8e\xffD^\xc1\x9cD\xa8\xaa\xb0\xf2b8\xf0\xf0B\xef\xe1M4\xd8&\x82\xb8\xb0\x05\xdeD\x1c:\x05\x92\xd4#aP\xeb1t\xe2\xbb\x83\xa3\xa4tz\xd2\x90\xb6=\x8a\xba\x99\xd1\xea>\xd4\x11\x11u~\x98\x1b\xa0z\xcb\xa1\x8c\x8f\x9b\xd3\xdbd[\xc8\xfdd\xf6\xc3L\xc2\xe0\xe8\x94\xf6\x9d\xb2\x98\x00\x81b3M\xe8\xd2\xfdG&\x80\xe2De\x7f\x0e[\xc6C\x97q\ti\\\xecp\x1f\xc8B\x9a\x9a\xe9\x00\xc2n\x83<\xb3\xf8\x92\x00\xd29A|5\x8c\xf0fZ\xee/\x07jN\xc0^D\x8e\xb4\xfe\xfbS\xb0u\xaa\xe0\x9f\xc7^n\x1a\x83\x01\x80\xeaA.\x00,\xe4\xb79\xec\xc9\xb66\xe6<\xee\xf0\x8a\xff\xe2\x99~M{<\xef\xe3\xaf\x88\xb2\xf1_`\x86\xab\x1b\xdd\x0cZ\xfe\xb4\xd0\xe1\x8eir\xef\xbc\x1bg\x96\x94\x06\\\xb3\xc6\xce\xac\xbc\x835c\x18\xfd\xdb\x89\xae\xa0\xe5\x98W\'X\xe8\xe0\x88-!\x05\x12\xd6"\xcfD\xfdC\xe85\x0eq\xea\xaf\x1f\xfa\xa8\xc2\xd4\xa0T\x80}\xd4\t\x11\xe7}l\x99\x8fkW\xbfJ:x\xe7\xf3k\x82\x07\x9d\xb9~\r\xe3\xad|\xcdt\x7f\xc2Z\x00Qw\xb9\x0b\xd7j?\x0f\x16\xd8\xd7\x18\xa8\xb55r\xca\xd7\x13\xe0?\x1f\x0f$\xadE@m#\xbe3\xb9\xba\\\x9a\x84\xb9\xfc\x07\x11\x8f)\xfb0Y|sP"\x8e\x9d\x1a\x8c\xb6\xac\xe5\xc1\xea\xfd\xcb\x18\xe8\xad\xc4\r\xb0\x94\x84\r&W\x8d\x0e\xe1\x03\x89Ub\x9aAX\xa1"#3\xd2:\xdf\xe8\xdf~\x971\xfcnX\xdb\x94\x18\xea/N\xc7\xbb.\x80i\xaajQ\x95,\xc7r\xfd-\xea\xe2!\xda0\x91m\x91\xec\x1b\xd6\xdaA\xefl\x04\xa1Oy\x0c\xa8\xfc\xa3\xc3\x15q\xcd\xb3\x85`I\x1a\xd0u\x83\xb0\xfaQ\xf8\xcc\xa4\x9b\xa1\x13\xef\x14\xc1f\xb8t\x89>\xd0`A\xf0\xf9J\x03\xc4\x11G\x87\xe7=\xa6a\x83!(\r\xbf\xf1\xc6\x11\xd4\xee\x89\x1f\x15\x0c??H\x10n\xb0\xae\xd6\xf8.>Pz\xd0\x1b\xd5\x99\xd0\xccQS\x98\xf1W\xc1\xcet\xff#\xd6\x83\xb0\xca\xf6\x0c\xa5\xe9z\xed\xa5\xfc\xc8\x8bn%6\xe1\x9e\x0e\xb8\x8fj\x04\xf4?\xa2\x95=\x95\xde\xc8}]\x8aD\x90XZv\xc9\xfb\xce\xe4\xe0\xe1J\x90\n*\ti\xa4\x19]\x075x\xe1\xb4&:\xac&\x17\xb1W\x83!\xafs\x8b\xaa\xfb\x82U\x042\x03\xa7\x02uR\x1a\xc7$\xf4\x05\xc4\xb4-\xd3\xc2\x90\xd0\x80\x88J\xa8.\xc6p\xa2\xe5\xc7j8_GF?\xe3\xf9~r\x1cfSh-\xb3\xcbY\xbf\xf3f\xc1\x8a\x1a.\xc5\x8f\x9f\x81\xdc\xcc\\\xce\xae\xad\x96JM\x0cc:l\x12\xb0?U\xf5l\xaeB{@\x1a\xc7N\xcf3c\x89^\x848\xb9\xb5LB\x9a\xb8\xa3$\xafDm\'"\xd4\xebn\xca\xb0(\xb1\xf42\x17\xcb\x98\xba\x0f\xdc\xe2\xc6\xc4\x02\xa5\x8a3~\xcf\x81\xea8;\xb4\xb6E\xfd\xe7f9r\xfc\x04\x1a\x08\x10\xf6\x94\x9f\x8a\x04\x11\xd00\\\x99\xc9\\\xf7\xb2\xd0\xb9\x95\xbb\xbb\xbf\xd4\x89\t\xf6\xec\xd6\x84\x8f\x94\x97\xc9\xd4\xb63~\xe8rl\x0ef\x0f\x99\xc8P\xa7bP\n\x10\xf5AO\x03#L\xbcF:\x94\x9d\xfb\x12\xfe\xf5\x1bq\x1c\xfb\x01\x0f\xbb`Z\x7f\x18\x12<\x0c\xcf`\xe6f-G\x80P\na\xcd"\xf1r_\xd3\xc2\x08\xc3\x94\x8d\xd8L\xae \xb9e\x19>\xb6\x17\x98\x82@L\x1c[\x11w\xf7\xf1\x08t\x7fr\x80r\xa7\x15\xb6\x7f\x15F\xf6\x11o&\x16L[\xd4\xc9\x1c2\xd8\xea1\xd9\x08\xbf\xcd\xba\xa2\x9c\xbf\xbd4p\xb12\xdaJ\xba}}c\xd0Cn\xc3\xcaq\xfe\x11\xa81\x02\xf2\xf4f[q\x90\xdb\xb5\x98\xef\xee\xa1bh\xa2\x04\xe4]Sn\xe3\xf5\t\xe2\x1bx\xc7\xbf@\x01\xbf.$\xfb\xbe\x02\'\xe8\x84\xa7\xcb~\x84\xe47\xe11\xa2\xc9x\xe2\x1f\xbd\x11E.\r\x1fK\xe1A\rH\x02\xc9\xe8%\x9cO\xa2.\xb2\xac\x99zgE\x9e\xee\xfa\x97]A9\xbc\xd6\x8b\x82@M\xae\x089\xa7\xd1f1\xcf\xa0\x12\xf1_\xe523\xf1\xf7\xa7\x83\xee\xd7\xf5\xf6K\xcb\xa5\x8e;\x11\x85\x8bM\xba\x14\x07\xc5\x1d\xa1L\xee\xaa\x97\xe2\x84\x9b\xb7\xd7N\x1e\x07\x91\xce\xa3\x81\x14}\xea\x14G\xebN\xa3`\xf3}\xbb\xc2\x0bn\xaf|\xaaR\xf6\xfd!\xa2l*\x1d \xb5\xa5\xba\xa2n\\\xa3\xe0\xd2T\x82[\xc1=Lu\xcfj \xc1\xdd\x10\xa11[]\x1co\x93#\x96\xc9\xd6A|\x06#\x8f\x1a\xd8h\xdfl\xe6\xf0N/\x08\x7f%F\xc28&\x85\x18w/8O\x7f9\xcb\xa6\xc5\xa0\x15\xc8\x85Hs\x1c\xae\x1e!\x16\x0bs0\xeaA>\x0e\x81&\x9e\xec%\x00\x7f`^g\xa3\x19\xef\x19r\x1d\xcaP\xc3+3\x1d\x996\xee\x8e\x0c\xdas7B\xe3\x9f\xc6\xf2\xa1\xc7\xae\xffG\xd2c\x00\xd6HU\xe3\x88x)Vd\x81\n\xe7\xbd\xf9\xb76L\xf1\x15!\x15\xc7#\x81\x10h\x15-\xedN+\xc167y\xa4\xed]C\x14\xbc\xe1_3\x91\x17\x91\xdc\x17\xfcmoG\xfb\xbb\xab\xce\xba\xa97I\xd1\xd5k\x8dp\xe8\x06\xf0\xc4\xe8Y\x14;3\xde\xd2\xbeU\xab\x8f\x96\x1fM\x835\xaf\x82\x8a&gz\xdf\xf647\xec\x92\xd4\x0c\xa2Y\xaa\xce\xf55Tw2\xc8AeC/\xf0\xc7ha\xc8l*\x11\\||`\x13@I\xa4\x11>\xf0JTIh/\xdd[ig9\x9c\xd0f\x9f\xad>\xc2Q\xb3\xf7\n\x07B+\x01\xa4\x87\xd7(\xde\'\x0c\xb7\xe2\x10\x05\x01!\xd8\x836\xdf\xc1\xd2\x0b\x89\xc8\x91\n\x8c\x8a\x12\'\xa6t\x98\x93\x06\xafJ\xbe\x12nF\x13\x9f\xbe\x06\x1e,\x8a\x97\x19\xeemop\xebG\x85-r\xe4J\xa9\x1b\x88\xe5`p%\xc9*W\xd6\x0f@\xd3\xfd\x9fj.eJ\xd1D\xb6\xf3\x1drL"\xed\xc8d\x9a\xa8qf\xf3g\x80\xe4\xe3\x8ba\xef\xe7#%3\x1e\xe7h\xbaU\xe4X\x0eA\x8d\xec\xf9@76n6\xba\xad\xd4\xe9W$\x8ftd\xf4\x989\xc6OJ\xff\xa1\x0f\x1a\xe0`\xeb\xf4D5-\x01\x11\x8dx\xebt\x1a\xdd\xbc\x02~^\xd2\x17\xab\xc0\xbal\xb9l\x01\x8a\x9d\x82\x13\xf0\x96\'\xc4\x15Ep\x82\xf8\x05Z?\x0f\xad\xe2\xe0s\xc77G\xca\xcc\x16]z^\xb2\xc0j\x00S\x0f\x83oH2;\x82\xea\xec\xbc\xc1\xac\x8f9\xf4\x16 \x9b\x0c\xcf\xf2\x00\xc9\x0c\xae\xf2$#\x9f\xf74\xaaN\x91\x18n\x18\xfb\x18\xaf\x14\x1fJ\xc1n8\x18\x11\xca\xa3\x99P5@\xdc)\xd7R&\xfcMks.U\xf2\xa6DwiA8\xbd\x8d0\x0f\x9c\xc1\xf6\xda\xf6\x0e\xfb\xe5F\xd0\xc2\xc1b\xf4\xb9\x03\xb4\xb3=\x8a\xf8-\xdfZ\x1eU\x07\xa1-\xdc\xec fN\xf5\x07\x18\xcd\xc8D\xad\xb0\xc7\xfcW\x0b\x0c\x86\xf4\xfao\r\x93;\x97\x1b\xdf\x92@X\xee\xedd\xb2x8mY\xb5\x83z`\x03B\xd8\xf4;\x8f+\xd76\x19\xd8\x84\x07 \xc1h\xd6]m\x97\xbdw\xec\xc9\xf5\x9f\xb2B\x8e\xef\xa5\xa4\x13H\xc8\xf8\x8b\xaa\x99\x81\xa7#\xef\xcdL\xbe\x11\xba\x9d}\x95\xa20\x86\xfd\x94\xcd\xa5\x1d\x13g\x00d\no\x80P\xc0\xe7\x17\'\xa8\xc2<g\xcd\xb0\xee\x8e\xdb[!\x07\xbfP\xefU\tz\xd8(^\xcd\xce$~x3\x98,\xc9gG{\xe1(\xb2)\x0et\x95\xa9\xa2D\xf0\x17\x88\xde5)\xa2\x9c3\xd8X\xaa\t\x04\xae\x8d\xc3\nk\x02~\x8c\x88l>\x94\xd1|;0\x8ae 0\x0f\x12\x00\xc5\'w%72\xf9k\xd5-\x95\x8f\x7f\xad\x10\xca\xa4}q\xd8;\xfca&|7AL#\xe6\x07i\xc3@\xbf\xb6y\xb0F\x83]\xb7\x19Z.\x95"\x99)\x9cS\xf2C\xe9UM l\xb8\x90\x11\xe0\xd6\x8c\xce\xeb\x1a\xb6\x1f\xe3\xda\xc5\xccs\xf3\xc5T\x152p\xfc\x18+\x17G<\xc8\xc5\x8f\xac\\\x84\x84{\xab\xa2<\xf7\xa5\xf8(@n\xa2\x07\xe3Q\x10\xed\xd0\xc7w\xd2\xfd\xdb:\xb8\xdf\x12\xac\x91ab\xc3Vm\xfb\xcaR9Z\xc2]\xdaW<Hjg\xdc\x16\xc4\x12\xbd\xae\xa1~\xfe\x1av\xd5/\xfex\x15\xc1\x85\x1f\xb0\xcd\xf7\xb3\xdd8\x933\x12\xcdc>\xb9S?+TaO\x0c\xc1\xf5\xa1\x03\xba\x97\xcdw\xeeJ\x90\xb8Y\x17\xe1\x1ae\x06\x1c\x80.\x12j\x196\xbf\xac\xdbd\xce\x9bB\xd5io7\x1e)Ms\x11\xf8\x97\xe2*\xfb@8K-\x05\xb0\xd5\xc1\xf4\xf85w\xd6\xe7\x98gV\xba/Ff\x0f\x11\x1d)P\xf1\xdf\xad\x16\xdfy\xf0\t\xd7/\xb2\x0e\xe9\xcb(m\x88N\xbc\xb8\t\xd0\x18\xf4?\xfd\x0c\xd3\x9f\xc2\xe0V4qg\xa5f\x80\x1e[\x90 _\x00\xb3\xb9!\xf7n\xb6\xffg:u\x80AB\xbe@\x80\x17S\x1d\xee\x00\x9et@\xb7\xb2\xd5\x0e\xdaQ\xf56\x1cE%?\xb4l{\x1e\xe9\xb8\xc0@u\xd6\x9b\xc7}\xe9\x9aL\xca9\x04\xdf\\\x08|G5\xef\xd5\xfc\xa9\x0b\xb3z5\xe3Q\x97J\xb5\xa7\x03\xfd@\x86y\xf3qe\xe9\xc9\xf8\xd7\xea\x85B\xd0\xd6M\x8a+\xe6`.cA\xa4\x05\x14\xcc\xc0\xab\x0b2D\xf45z\x14\xec\xf3 \x91yG\x10\xd7\xbbL\xdb\x1b\x9c\x0f\x12q-\x01i\x0e\xd0:v}\x8f\xe1{\xc4~\x96\x80d\xe8\x01(\xff#?HI]2\xdbu\xf4\x1bZ[\xecR\xbfi\xdc\xa7\x92>a_\xbd\x99\xcdl\x9aG^\xe1\xdb\xbe\x98R\xf0r\x8e;\xb0=zmt\xb7\x8a\xfeY\xf0\x05$\xdb\x91\xbfs?\x9f1\xf9{6\xc5\xc40\x8a\xbd\x83\x84H\xbb+\xd49\xf0>\x11-\x9b\x9f\xdb%\x91A\x0ezWN\xce5\xb5\xfa\xcb\x149\x0eu\xff\xdd\xf1\x19\xdb\xf1[\x8c+\x88\xa9\x9fL\x89k<@m#;\x9e3\xb1\xfeN\r\xbd&\xaa\xcb\\S\x06\x9e\xba\xa9\x12_yWQf\x12\xb82\x9c\x86\xdd"\xc6l^\xb47ov\xd6\x90\x03N\xa8\x99\xff\x950\xe4d\x95;\xfe\x03#F\xa1Fd\xfb\xf7\xb9\xf2\x1b\xb3PL\xb5J>SA\xf5\x99\xe8\xea\xd9\xdcM\xb6\xda\xdd\xb5\xc6\x8a=V\xe8z\x93\xac\x0b\x00t!.\x1aK\x889\x95!\x10\xa4\xfd\xf7\xb7\x90\xb9P\xea\xc7\x83\xa7\xf8\xb9\xf23w\x963N6}\x1bj#\xb4ZJ\xd0\xfe\xae\xc7`yh\xa9\xb7G\x17\xd2\xae\xc7:\xf1\x99ioa\xa1n\xf2\x1ew\x0f\xa3\x80K{\x13\x1a^J\xc2\xef\xf5\xad\x8e\'V\xa6\x80\x99F\x98G\x14I%\x8d\xed(\x96\xcd\xd9\xbd\xcdQ\xeb\xdf-\xbf\xf7\xea\xa41!\xc9&\xe6\x95\xb45\x16.-\x1ex\xb9\xd6h\xa7\x9ax]\xcd\xcc\x91\xa7\xa9\x9e4\xf0_\nr2\x99\xa2\x0e\x98\xb0m\xd6i%\x97(s\x98B\xad\xa5\xbf|\xf7\xa6P\xbc\x0c\x91na{A\xddb\xcd\x95\xa70U\xdfMFT\x84\xda\x85d\x87\xd7J\x07\xf9\x91\x16-\xd5\x0bJ$x\x93x\xc5P\xda\xd5\x1d\x13\x97j\xceW\xbc`\xef\xffsN\xac\xb5\x16\x905\x87U\\9\xd3\xd2\x15\xad\x9b\x11C}\xb1\xc9\xe3\xda\xd3\xe0\xd4\x11\xd3\x1d\xf0\x89%\x89\xff\xefr\xff(I\'W\xa7|\xed\x9f7\xae_\x0e\xbf\x94\xee\xf2\x82\x8cy\xd7&I\xd9\xd23\xde\xa6\xce\xac\xd9P?8\x7f\xf0\xdcI\xec(\xff\xfe\xef\xf4>Z\xf1\xe1\xb2\xd7\x8c\x8c\xce\xf7dn\x0e\'CEEw*\xe5\xe2~C\x933A\xc2\xb5\x14\\!T\xceq6\x9cZ\x86&\xb6\\\x12W\xc5\xff\xc8Gx(\np2\xf8\x97\x03\xc58\x11\n%\x01j\xff)s\xb9\x03\xed\xe3\xccU\xa3\xac\xe3\xd3nKX.\xa7\xf6o\x10t\x18F0t\xa4:.\x02\xf7\xc4\xa2)\xe21\xc6\xb8\x11\x8a\xbb\xf2(\x05*\x92\x0f5\x9a\x99\xba\xd7\x1c?^\xa6\xb2\x13s\xa2\xae\xa4D\xca\xado\x94\x8f6-\x1ej\x91^\xcd\x1c\x1d"\x8f\xf7\xc1\xa7\xbcG\xa8\xac\x00\xa3\xfa\xb6\xc9FA\xd8D\x8a\xc7,\xf0\x14#\xae\x8ck\xc8~o\x8b\xd4F\xc5\x03\x92\xaa)(\x81\xc3\x11&\x00\x82\xc7\xc0\x8d>\xf1\x82L\xc2\x869\x91\x90H\x9b|\x11\x95\xc9I\xff\xe8b\xdeZ)\x90.\xd4i\xaa\xde\x8ff\x946\xb1s\x00\xbd\x0c%q\x0e\xfc\xd8\xdc\xb3\xd3\x8a\x8d\x1aK]\xf0\xa0\xc9\xfe\xd4\xff\x12\x9a\xce\xb3\x1b`\xdc\xe5\xd3(\xa2\xe6\r\xa5d\x8a\xc2\x1c\xf0\xda\xbb:\x10\x1e\x85O!\\\x00\xdd\x19\x185\xdb\xfe\xcc\x12L2\xa8\x8b>\x1b\x12\xf3k\x94\x02\x9dx\xa4\x06<$\xbc9\x04\xfd\x1d\x8c\xe2\x07q;\x9c\xd0\x13K\x94K-@\xfce\x95\x05\x17P\xe8)\xf1\xcc\xfe\x981\x04\xb2+\xf8\xd2\xe1\xea]H\x9f\x0c\x10\x01\xdc1\xd2&,\x89]M\x85\xbe\x19\x7f\xd9\xc3)N1X:\xa2\xde.\xec\xaf\xa8\x9f\x19\xaa%\xb8\xa8\x1bk;\x19\xf3\x99\x80\xae\xc6\xc1\xd8\x17\xe4\t\x13[U\xc1\xb1\x06|\x1b\xeb\xccWv\xc6\xea{\xe1\xb2\x01g\xb7o,\xcdX\xbeJ\x86\x8a\x83I\xe4j\x941Th\xd9B\x19\xa9\xdf\xe1=19\\\xd2i\xc6)d\xf1k\xdf\xecq\xb2G4\xd9>M\xf2\xa26K\xf4\x7fm$i\n\x0c\xb6\xcbNJV\x17\xfca\x15`\xa0u\x1e\x9b\xca\xba\x16\x9e\xc0\xaf\xe4\x9a\xa0\xbd\xa3o\xb0\xda\x89\xe94\xca\xd9&\xe5\xcep\xe6|\x86a*\x8f\xb6\xf4\x15E\xb9\xfc\x93\xd1P\x02\x02W\xbd\xaa\xbcr@\xce\xd2\xfe<+$\x8f?|\x9b\x05\x03\xa4\xbeS\xc8\xd4u)f\xdd\x04\xe0\xb1\'\xbf\xea\xb1\x8e\xc4\xfa\xdcj3]\x1aW\x043\xde\x84W\xe1\x05\xf8/\x10\x8a\x10C\xc4\x9d\x16\xb3"\x9eF\xea\xe0*\xb7$\x10h\xc2\t9~\xee\x16C\xf7\xefl\xe1\xc0\xbc\xa0?c\xa6\x05T\xb4#\xbb\x8a\xde\x1d7\xc8\xb4p\xe1\x81`5~\x08X\xd2\xf3%\x0cI-`\x99`r\xe4\xa2\xf0\x04X\x91\xd3\xb1!\xa0R\xa8e\xcd_T\x93\x15\xc4\xf5\xfdKB-D;\xf4X\x7f#\x84\x19\xf8\x83\xee\x1d\x91\xbd\x93\x1d\xc1\xdb&\x84\xdb\x1b\x8eX\xc1\x98\xd6\xe3\\\xe6\x89\xa5~\xf9/7.E\xca\xf8\xdcg\xe4\xf4\xb9}\xd1\xc3l\x00\x843\x99\x83;>>\x81@\x96%\xbe3\xca{\xd9\x1a\\#\xb7\xc0\xe7\x88\x19\xaeU\xc5xR8\xc4\x89:\x88\x16\x17\xbfC=\x1d}%F4\x00\x82C\x81%_\x02\xce\x8c\xf1+gS\x1bsw\x1bX\x17^4{\xb2a\x08\x83\\\xe9\xb1\xd7+\x1b=3\x0b(\xc6V\xb5`\xd3a\xc1\x85\xc4t\xbeuM\xafT\xf6\xba\xb4\t\x93\xba\xe8\xbe\x8bT\x7f=\x88)\xb6\xac\x9d\xfd\xc9\xa9\x19\xd9\x1c\x98\x80\xec\x97\xc00\x8d\xf5\xe6\xa8\xa3\xdd\xf7C4\xf3\xf0\xf3\xafo\xb2\x10\xb3\x99\x84\x07T\xb49\x01\x8a\x13\x7f\x9d\x1c$\xa1\xb8\xd1\x1eI"#f\x9c\x12\x92dp\x8d\x8e3p\xa0\xbb\xca\xd9\xa3\xd2)\xebo\xf1Sh\x13\xe6\x8b\x94\x89\xf3\xf4\xca7{\x99\x8f<9\xc1;\x82y\xda\xa9\r\xa3\xaf\x96\x0f\x18\x19:>L\xf2\xafP\xa9\x9f\xc8\x8af({\x1e\xbc\xd9\x94\x86!@\x87\x01#oU\x93\x07\x07\x12\x03\xc5\x00\xf3e\xa9\xd2\x1c\x99\xef$l\x87\xdcPJ\xc0\x04\xc7\x1bM\x9e#\rop\xd7eM\nf\x9dbg8\x00\xc5\xc6d\xdf\xbe;\x08\xc1\xca\xa8\xcc\xd4>Q\x17\x91\xf30i\xb3\'\xfd\x15\xc9\x8b\xc97\x01\xb0!\xa2Z\x96\xf8\xa6\x06\x1e\x7f\x8bS\xc75 r\x94\xe7\x928\xeb\x04\x1b\xdb\r\x8cH\x10\xce\xd2\xb4o\xfd\xe2\xb0~s\xa8}\xda\n\x1a\x1f\x067\x938\xfc\x8e\xc5\nO\xd9\xd2\xa6\xb6\x04\x7fn\xe3GVG\x94\x13xY\xdb\xad\xd6\tlh\xbad"\xf8z\xf8\xc7H\xa6\xd8\x10p\xb1\xce\xd2\xb6M\xb9\xd7]\xdf\x01e\x88\x1c{L\xb3ru\xe7\xa5\xcdfr\xc0l\xdc<\x8a\xb6\x9b\xff\x07\xf7\xf4\xe8=\xbb\xe8\x16Q\x83\x9f\xe8\xff\x0ex\x1e\xcb\x8b\x14e\xec9\x91w\x98\x9b\xe9\xba\xef\x81(\xe7\xd2\xf9\xbc\x00\x1c\x1d\xf6\x11\xf2M\xb8\xa8HO8\xf4\x19\xa7A,\xfc\xc4\x05\x1b\x11\x84z\xb9Y\x1b\xc3\xed\x18\xe4x\xeb\xd0\x04D)X\xd5\xacr\x0b\xd2\xd2M\xd7\x9bN\xc1\x82L2\xe5"\x0e\xeb\xe6n\xe7\xb3\xd4\xaa\xcb\xd4\x87\x93\xd4+\x85\xd7\x08\xa7\xf3\xd1\x9a\x85\x93H\xe3\xd7\x88(\'6\x00\xb5\xc8\x00\xf9\x1d-\x8a\x82\x11\x89\x82\xac\xb3\xb0\x95\x9d\xa4\xfcus\x02\xc2dSe\x00\xd1~u\x7fZ\xacY\xd5\x83\xcf\xbb\xd8@&\xfao\xdb\xc1\'3\x8d\xcfEr_\xb4\x14hGX\xe8\xac\xc9\x96\xb3v~[\xa0U\xee\x89\x86I\xb1\t\xcf,\x84\x04\xff\xa6\xb0\xaf`\x0f\xf2O\x1d~\x8dn\xcb\xf6\x03\xff\xc8\xe4a\x07\xd6\x19`\x87\xcf\x87%\xdd\xd7\xe2/\xc5KS\xad5c\xc3I\xf2@\x84\x08\x0bi\x81\xc7\x1e]\x186\t\xc1\xc0\xb1\xb2u\x05\x03\xd6\xa6\xb3\xe5!\xec(&v\x8e,\xb7u\x98Tbl{\xf1-@\x8b\xfa\xb4\xf0\x93C\xf1\xe0\x03:\x9cX\xeep}o\xab<\x87\xc9\xd0\xee@\xf4\xc6Q\x8c\xa2\x93#\x02\x99\x164\x95\xc6\x14\xfe\xb2RB1\xb7N\xea\xf4\xcb\x8fa\xb6)\x91\xf6\xa0\xc5\xf1O,U\xee\xdbC\\\xda\x94\x0e\xcb\xaa\n\x9e\xdc\xa3\xf3\x85G\x90)6\x0014\x1eUEg\xa6\xa9%\xcd\x9b\x93\x02.S\x19\x16\xd2\xc4\xca-\xd3/\xa2\x9b\xe7R\xfc^;p|\t\xc4zwq\xe79\xd8Tr\xe6>\xcb\xc8\x91\xe7j\xc7\x00\x97\xa6Jh1\x0c\xb1\xc6i\x14\x00\x1c\xf4`%\xca3\x90KK?\x1b\x97\x1f\xedt\xfa@\x92 J`\x98:\'\xaeB/\x9f.\x8c\xea\xfeX\x85\x0f\xc8\xff\xbfE7{v\x94i\xa1\x8ct^\xfed\x91\x1bAe\x97\xe3dU[@(\x01GZ#\xf692F\x95!\xc6\xae\r\x90\n\xd3\x86}KiZ^\xcbJ\xa5\xbeK\xfeN\xd4\xc9\xebbvZ\x85\xc2\x11\x10\x99F7\xf2\x07z\x9a6=[\x10>\x03\x19\xd9\x0cbnP\x08\xf6C\xeb\x8c\x1c\x91&\xee\x11\x89\xb0j\xd5\xccm\x85)o\x05\xb2\r\xc0$a\xd9A\xe1[\xcd\xc0\x08S\xd2\xec\xd7K\x12\x00c\x16|\xba\xdf*\x89\xe8\xec\xd8\x0f2\xc7\x94+f\x03\xbdc\xa4*o6v\x8bN\xa6q\xcf\xa3\xcb(|\x8f\x05\x0e\xccT\xad\xc8 \r\x10uO\xdc\xce\xfc\xd9\x85]A:$\xd1\xb5.z%\xa2\xbaO\x1a\x98ZAV\xfe\xfe\xea\xf5 \xe6\xb3\x95\x8f\x13\xb1X<C\x80\x14\xfc\xe1\x84\x93\x7fg \x0ej.\xdb=\xab\xeeX\xa7\x94\xd2\xac\x8e4u\xc5\xf1zr\xd2\xf8q\xe4\x18\x06%\xaf}p\xe0=3\x15\x9e\x04\x1f\x82v\x1ak\xfa\xcc\xff\x80\xf5_\x1f\x9fi\x1c \x9aa\xffue\x07r\x1f\x1d\x16\xec\x89\x01\xf2S\xc7Q\x04\x88z\xb3o\xfb\x96C\x0b\x7fb\xb1\xa4\xb5F\xa1}O\xac\xd2\x10;\x8d\xc4\xdc\xef M\x85\x99\x850\x87\x93c;/*\x15\xbc\x06\x88$>\x86m\x13\xc8\x11I\x18\xa7jJ\xbc!\xc9\x06Gy\xc1\xde:(\x1b\xb9k=\xab\xb1%\x87D\xcd\xbc:\xbf\xc5\xe5$7\xfc\x11\xe8\xf8\x1dK\xfa.\x16\xf0\xebv\xa3k^\xd0\x1b\xed\xc1\x02\xdfj\xb2C4\xa1\x02\xfa\xf8\x95\x1d\x07\xc7\xac\x8a\xc6S\xc3\n\xaf\x11\xc9\x84\xf9\xb0\x01qBJ\xd1\xaa\xc5\x96\x11CS9"\x87\x92\xb6e\xb88qr\xa1\xaac\x0c\xe1\xa8\x05\x1c\x82B\x15\x81\xc7\xfa\xb6^Y@8g\xf4N-\xbc3_)\x08\x11<\xbd\xf8\x9c\xbb\x92\xc0F)4\xf3m\x9e\xeb\xd4<Am\xab\xf1/\xd8uU$o\x86|j\x97\xc3Vb\xa2\xe4L\x9f,\x1cq\xf0\x12ek\xa5|fJ\x08\xf1jRi<\xc4\xc7\x1a/\x82\xe2\xf3\x8b-v\xb7\xa1\xaf \xbbk1t\xbd^\x1b\xc7\xecD?7E\x8a\xa70T\'\x00\xd4\x85\\O\xea,\xdbJ\x1b.,\xf3=^\x96\x99~\xaa}\xc9\x07\xcc\xd2\xb0\x98\xe8\x16\xf4\xa5-\xe0\xcf\xd4\x986\x08/\xdb\xa4\xe2\x0e\xc2:\x91\x05\x95\x01\x1d\x8fe\x94\xd9\xb7\x91\x88\r\x17\xcc[\xe8!]\xd4\xaar\xc1\\AbY\x11Tp\xc7\xac\xb1~\x9e\xcd{\xb1\x07\xed\xe8[\x9d\xf9\n-&sL>3\x8fA\xa2\xa9\xf3\xe6\xe7-\xe9\xc7m.hn\xf7z\xe7I\xee\xbdL@\xa3\xad>\xff-RK\x1e6\xc3f\xad\xa1%KZ\xcb:d\x03d\xcb\xc0\xfb\x98\xd8r\n\xa8Yd"H\x0e\x0ck*K\xf3w\x99\xac/\xc2\xa0\x17\xe6\xecT\xa0\x1b\x1c\xa4X\x1f\x98\x87\x0b:\xfa\xbf\x19\xc0\x83U\x08(\xd5\xb1\x89\xaff\x9e\xf4\xa4T\xc1\xaa~o#\x1adM\x15U\xc9\xbaDO\x91\xb0(\xdb\xe3o&\x12J>\xc0\x8cg\xc9\r\xa0\xba\xc0eW\xc3\xef\x1c\x97\xdf\xa7\xe3\xa1Fx\xe61\xd93\x8dr\x9e\x1f\xab5{V\xd5\xcb;\x18c\xbd\x16\xdb\x07VD\xf5\x85\x87ODG\xf7\xca\xad\x984\x9e\xacq \xf9\xcb\xf8@\x10\xfe\x07\xd4\x81A\x03\xed*\x95\n\xf7h{ O\xc3L\xe5\xa5\xad;\x8eY\xd0\x96\x8bVi\xfeq\xbd\x17\xd7\xa3tv\xee\xf8\xd0\x80Y,\x1a_\xc7\x8e\xb5\x81\xd7\x91\xb9\x9d\x17\x0f^\x04D\x08Tug\xcbcF\x80\xd9\xae\x89\r\xd4\xec\x826\x81D\xb0\x8c\xb9v=/\xed\x848\x94\x18@:\x92\xe9N\xcdz\xf9\xa6_\t\x88b~\x14\xa1[\xadO\xc6\x81\xb1\x9f\x8e\x1d\xc5>\xd0\x10d\xfa\xc2\xda\xae\xfdm\xfal\x12e\xf6~$\xb9\xb1\x1e\xf9\x02F\xbed\xc7f\xa7\xc4\x10l\x98&Z\xe1\xefx\x88\x1a\x9c=6-#\xbb=\xec\xde\n\xd1$\x04\xe6\x04\xbb\x19\x05#}\x8f\x9e\x04\xb6x\xc2\xf2\xff\x83\xa5\x1b\xb8nB\xeb\x1ft\x8b\x82\xfd\xc28:\x12*\x1e\x8c\xb1u\xd6\xfe\x9f\x9c<\xa7R\xd2)U\x8c7m\xb5\x9b4\xdb\x81V\x81\xf4\xddhe\xcdW\x8b\xfc\x06\xf8\x93\x87\xf5\xc6Ba{\x88\x1a\xd4U\x8db%3eM\x86\xc8\xa2\xe4\x8f\xdcG\xce\x10o8dv\x8dC6r\xc1=4\xd1\x92]\xee\xd2XO}\xba\xc2p\xe5\x1f\xed\x96\x1f\xa8\x8c$\xed\x99\x9f\xf3w\xd1I\x8c@\x11\x10k\xdd\xb4L?\x02~\xc0\xf4\x8e\xde\x93\x8d,\x0b\xb1=\xb9\x0e\x10\x1d\xc4I\xec\x91\xa9\x88.\xfa\x84\xd9p\x98\xd77s"\xc36\xfc\x07[\xec\xbaw\xa6_\x186KoN<6t4\xa2t\x1cJ4.\xa5QK\xed\xfc\xa4J\xeac`\x81\xd3\x00\x1a-Y5\xfe6\xb6\xe0W\xe5\xc5\xf6/\xa3\xa7M\xe4\xf7\xd0{4\xba\x85\xeb\x1bn\x8b\x97\x7f6?\x84~\xe0\x04In\xd1F\x95ijj\x1eW\xd1 \xb1\xd8\xdb\x13\xf6\x05)h\x17\x0bSN\xd0\xd4l|1W\x9d\xa3m,\xd8\x89\xa9\x0c\xad\xa6`P\xef\xcc3\xcf\xb2\xa1\xe8~\xe1\x7f\xbd\xa2\xd6\xe8cJ\xacs\xd1\xdf\x11\xe6Pc\x02\xbd\x92f\x9b\x95\xc5\xa9\xc3\xce.\xd9e\xaeI\x94r\xdfI\x82\xd0\xe1\xdc@\xd0c\xd8S~\x19\x1b[\xfcQtJ\xe1\t\x86\x85?\xf6\xc1w\xd9Q\xfb\\\x1b\x06\xbd\xa9Ih\x05+LO\xa6\x8f\x082\xb1p\x1f\xb1\xf5\x8aF\xcc\x1f\xf9\x07\xbfG\xa6\xa8<8@\x9f\x92l\xbb8#\xd3U\xdfAf\x0f\x08\n\xfbf\xe2\xb0\xfc\x9fTbq\xeb\x05\xa0n\x967A\x99\xff\n\xf3\xd6#]6\xa0y\x84\xc80\xc9\xd9V?\xbf\xfao\x0bNK\xd5\xc9gB\xf4\xfa\xb3F|<>A\xb9\xcbHb\x06\xbe\xd6\x99b8\x97\x14\xa2\x9c\x12\xa5\xfdf\x9c\x06\x90\x01\x03\xcd\xde\x88\x93\xbb\xaak\x0c,\x06N\xaa\xdf\x90.\xff\xb5{=\x17(\x80\xc3\x9a!/\x96\x10CQ\x1e\xb7\xef\xb2}v\x0eV\xafR\xd4\xb7\xf3.!\xdd\xcb3\xafE\xee\xf46#\x1e\x11\xb11t\xcc[G\x81\xbf\xc2\xd2\x01?p\x87:\x0e\xc3\xbb\xce\x83B\xfc5\x90\x05\x9cVMc\xc3\xf6Ew4@\x84\x90\x9eob\x17\xa7\x19\xa8\xe1\xd5\x89\xa8\xa7\x08^\xda\xb8yi\xe29\xd8\xc3\xfec\xa1\xc9\xda\x83\x8e\x93\xcd\x1c\x06O\x9cb{\x84a\xb9y\x93\xaa0%b\xaag;\xb3\xd6\xbb\xb4(\xdbfG@/\x14\xc52\x93-\xde\xbe\x84]%@\xb7M\xf3\xce\xa6\x8597\xdb\xb5\xf6m\x05\x98\xa0\xfeo/\xb0\xeaZ\x83h\x03\xccTB\xce)\x0b\x90\xbf-\x87\xfeG$\x87\x94\x1c[\xf6,\x83\x952\xc6dx\x9as\xefK\xcb\x03\xd6\x9e\xcc\xa8\xf8A]\xb1\xfb\xc5\xbfV\xe6j\n\xe0eW\x88\x82\x92\xde\xff\x1b\xc9\x82`\x1f\xad\x7f\xd9 _2\xd6\xd6\x16\xed\xa4\xe2\xfb\xd2\xefm\x8ea\x91\xc1\x8d\xfeFz\xe6\tsO\xef\x83\x03\xeaW\x03w\xc6\xf3h\x07\x14\x88\xc9|8\xdbK\x1b\x81@\xf4\xc8W+.T\x1c\ta\xb4\x8bL\x81\xb0\x8b&\xedk\xdcX2*\x96Gr\x11\x8f\x16D\xa3~\xe7B4\x92P\x9a\xc4\xc0 \xfb\xf4\xc9\xaf\xc1\xe4U\xc3\xac"Z4\xc8\x1c V#;\x00\xc9!2\xe8PP1\x90\x83N\xcd\xbf\x83\xe9\x84V\xff\xd3\xae;+\xed,f\x0f)\xf0\x0b\x17\xdc\xdf\x13J\xf0E\xd1\x8fY\xa9\xcdZ\xdc\x01\xf0\x1a\t\t\xbd\\\xd0\x0c\x95Ecq\x06\xa7U31\xf1\xa4\n,\xf9\x80\xe9\xe9\x86\xe4\xdc\xc7\x04\x12V[\xdaw\x91\xc0W\xe1\x11\'\xd1\xb1\xec\x94t\x89W\xc73\x1d\x18\x82\x82yR\xacX\xd5\xd5\xd8\x82k\xbcDy\xb8\x14\xa8\xe1\xd9\xbeh\xb4\xf6\x80\xfc6_\xe6\xdeeL\x94\x86{\r*HWC]\xb8\xa1%\x9e\xafQ7\x93M\x84\x05OT`\xbe\x10%&\xa2K\x029\xfeI\xcew\xf0\xb01\xf6\x17i\x95\xb0\xb1\xbc;\x9a\xdb\xed\xd3Q\x08\x1d\x87\xa0\x8d\\\x04\xb5\x02\x85\xb4\x01\x8e\xf6Z\x19QD\'\x97a\x00\x0f\xd2\xa7\xc9\x99\xa8E\x12\xd7\n\x16\x0f\xcc\xce\x0cn\xd6\xb2\xceXx\x90\x0f1\xf3\xf1\x97\x9cf2w\x97\xf2_\x80m6i\x0c\xab\xbf\xcb\x85\xb3(\xd8\xe1\xc6\xc9\x8e\xc2gq\x1a\xaa\xe7\x90\xbf\xcb#a\xdc\xc8\xabO\x90)D\t\xca\x02mUr\x08\xbb\xceFg\xcb\x13\xfb\xf1\xd7\x86\xac\x1c\xd9`[\x123\xe4K\x9e\xff\x85\x89\x01\xca\x17\x88!rR\xee 7t\xd9\xe7\xd0(\xd9\x1e&\xffh\xe5\r4\xc2Wmo\x83]\xbe\x9cF\x07k\xb9_\x8c\x83,"=\xd8\xc9\xca\xa3\xd1\xe7\x0be\xb9P\xb7\x8f\xe4TU\xdd\xc6\xefW\xe3q`\xdf\x91\xe8w\xbf\xef)\xd1\xf3\xe7M\x93\x1b\xea8p\x1b\x9a<H\xa4\xf9^\x96\x8e\xf6y\x8b\xc3R\x90\x8c\xf5\xfe\xd3\x0e\x7f\x12\x05_\x14w\x80\n\xcfg\xf8\xf9d\xd2\xbf:a\n\xc5\xcfX{\xae\x1e^\x01p\x9c\xf5\xf7\xf1\xd8\x82|m\x97\x87[\x02\xab\xa5%\x10\xf655\xc6kU\xc7x:\xb0B\xeeA@&\xf6\x9f0}\xf8OFP\xa4b\xcd/xB\x93_\x80\x19\x08=\x06\xa7%\x98p\xb8\x03\x95w\x1b*ji%\x92\xb9g\xfd\xc1\xceX5iei\xac(k024[\x10a\xb7\xeb\xd42m9\xb5je\x1b\xc4fl\x1d\xf9\x07O\xb6\xa0\x1b\xf1u=\n\x14$\x82P\x9d\xaft<H\x9e#+B\x1b\xe7\x01\x8c\xaaR r\xe7\xc6\xe1\x82P?i\xd7\x1d`\xea\x8a\xc2\x0cnP\xbe\x8bY\xd1\x8fhW\xef\x12(\x87\xa3/\xa1\xba\xc2\xee{Ra\x81\x0e\xe17\t\\\')d\xbb;\xbaY\x08\xc0\xca\xdcu\x152;Yi\x8f}%\xfe\xe5\x1f5\xec\xf4!\x13\xfd\x16`y\x86fF\xb2\x90\xd0\x99\xf9\x10\xd3\x82\xd5H\x85\xf3x,0\r\xc4n\xad\xe7\xf6@\n\x1ds@\xfbA\xe7\x8a\xc7\x7fA\xb4\x94\xed~\xfei\xd2"\xb2g\x83\xfcW\x89\x06\xf0\xb3:w"\xa7\x8e \xf4Nh\xa3\x89\xa5q\xfc\xeb\xcan\xcf\xe7\xc0\xd4f\xac\xea\x05\xa7\x8c;X\xe8\t\xc2\x17\x0f\xcd\xe3\xf5G?\xff:\xd8\x03&4\xc4D\xc0\xaa>\x0c\xb3M\xb8^\x0cC\xec\xa2X\x06\xf1(UJ\x1bp\xc6 \xdaC\x8f\xcb\x8eq\x0b\x1b\x0c\x1a\xbb\xdeiw\xd515{u\xd5V\xe9\x97\xd1\xc1\xdb\x95\xa4\xbf\xc4|\xa0q@\xc8\xac$\x96\x8f\xdfF\xe62\x96\xe5{\x9dgis\x1a\xa6\xd6\xa3\x81N\xc7\xda\x8bL\x87\xbf\x13\x1a\xcd\x9f\xab\xdbjW\x06\xfd.\x12\x8b\x8d\xa8\x95Zc\xa3\x17Y\x03\x85\xcc_\xa2\x1e\x96\xcbq\x85\x98;\xe9\xd3\xb1\xa1\xc4\xfe\x06\x7fG\xce%\x0eo\x01\x8d\xbc\xf4c\xbb\xdfe\xf4\xebo\x16\xd4\xdbXE\xdf+R\x80\xf9\x1c\xecO\x11\xbd\xd8\xa8\xc4\xf1~R\x93\xeb\x99\xba\x15\xa2\xe9\r\xe8\xe2\x91\xb4\xa9\xb5\xfd\xfa\xc8\xf9\xd2l|RJH0\xc5\x07H\x07\xba-\x1c\xd0z\xf3\x9bi\x15-\xfd\xac\xa7\xbc\x87 \xe1\xe3\xeb\x19\xa4\xa1\xad\xee%\xa0\xcf1ezt\xb7\xb1\x16\x97u\r\xe1\xc5\xe3\x97\x13\xe5\xf6\x08\x88\\\xc2]\xa2\t\xd4\xac\xbfx7\xec\x83\xf5\x83\xfe\xd9V\x84\x86\x9e0\x180\x9dr\x97\xc6\xf2\xf2?<\x8c\xaa\xf3\x07\x16jcMo]V\xcd\x19\'\x8a\xd2\xf8i\x84\xb6\x1a0\xcf\xa2\x87Hi\xab\x93\x9b\xac\xc0cw\x98\x9c\xc3\xc9/i\xae\xb1\x82\t\xa0\x8f\xee\x8e\xeb^T\xb3\xcf\x1b\x03\xf0\xd5K\x8d\xeb}2\x80\xc5\x8a\x91,\x8b\xcd\xc93t\xf7*\xfc\x08\xf8G\x01\x8e$\x89}\xb6F?\x94y\x17\xd8\x869\xe3\xaf\x02\xae\xd9\x00\x0fl\xd0\\\xe9vC\x1f\x1d|\xb7\xae_nI\xd0\x9b\x19\xab\xb4\n\xeb\xc5*\xb3\xefk\xe0/\x1b\x9d3\xf2\x14\xfa\xdf(\xc9\xe1\x11Y\x86:\xf9\xbc\x0fJ<U\x05Hd\x93\x03\xb3\x83\xc1d\xa2\x12\'\xc1\xe8B\x8aq\xfa\xa8y\xe7\x9f\x1c>Or\xda\xcf\x1c6^\xe4\x04\x07\x82\xfb\xcb]`6;\xe7\xdfMBm\x91\x92\xec\xd0\xa3\xdd\xb1Cu`\xe1 \x8b\xdc\xc4\x1c\xe7\xf4\xb0\xef\xba\x9b\xc0%\x0c\xad\xbf\xae\\O7\x84\xf5\xb0\xcad\x7fq\xa0\xfa\xce\x18\x0c\\+\x96C\x9b\xd3B\xa7\xff\x84\x87\x04K\xaf?\xe1\xf6<\x92\xc5\xc8\x1d\x9eeMB\xa9\x1b\x05@ja\xd1GAC:)}\xa0Zb\x97Z\xa1\xb0\xa3Y#\xbbP\xd7C\xeaB\xd0\xfeyg\xed\xa3\xf5d\xc6\xe4\xff#K%\x9e#\xc1\xf2\xe7\x163\x04k\x12\xac\xe8\x16\xd4\nz\'c*\xa8\x19\xde@\xb8o7\xb4\xb1\xd3\x9c\x98\x9f\x00v\xbb.\x12\x1b\'\x92\x90Z\xc93M\xb1\xa7?\xc1;\x906\xe7\xba\xfb\x87|&\xc0\x8d\xfcw\x95\xcd\xd3\xad\xa6bDCn\xaa.Qn\x18\xa2H\xd7\xab\nF:N\x0c\x00\x96\xde\xa8\x92\x04\xdffw\x86\xf4\xd7\xf4\x08j\xcc\xc2\xc2\xfe\x85\x8c\xbd\\_\xea\xd2\x14\xc1\x0bk\x8epm\x8d+\x12\xce\xc3\xab\xa4A\x85\x923\x03\x84yT\xeb;\xba$\xde\xa5\xd95\xbanN\xbe\xe9\x16uU\xbe\x86\xa1\xca\xf4\xb7\xe9\x99\xda\x9dK,\xfc]\xa8\xcf\x94\xad\x8a\x80\x14\x01\x16U\x0e\xe7\xf4\xa3\x82zP\x1f\xbe\x19I@\x12\tN\xa2\x17\'\xe4\xfb\xe9\\&8\xb0(\xbd\xed@\xa0D\xaaw\xe3z8\xe1Sy\xadO\xbf\xb0g*\x04%f\xa2W\xb5L$\xf9\x8f\xf8\x0b)Q(gt\x87\x94{\x84l\xf5\xdb\x841\x1e?\xa5\x1bmv}\x8e\xdb\x06\xe6\xd7\x1d#\xe9\xa6j\xb7"oUQ\xd7\x8d\xf1o\xb8\xea\xd1\xfaJ\x0c\xd0l-9m\\\xba2\x13\xfb\x8fs\x9f-\xf3p\x11\xa4\xed\x9d\x11\xd0\xd8I\x93%j\xb0\x93\xd8\xb6x\xf8B\xb3\x94C\x1fr|%0\xa2\xcaV\xc4\x90\xfa\xd9c\xc4\x9b\xc1\xa8\xbf\xf2\xd6\xec\xb5t)$a\xf7\x9b\x1d]H!\xc5\xf8\xa3\xc4q3\xefZ\xb7\xdbT3\xa4\x94%\x1a\xd5\x8a\xae\xef\xa7\rd\xc7\x0f`\x19B"\xbc\x8bP\x9dL_/Fn\xd5\xee1\xaf\x82\xb5\xc9\xb2\x17\xaa3zW\xdbn\x03b:\xd1T\x96\xe3\x0cw=\x1c\x98\x92\xe9\xb9\xeai\x10\x07\x0fUv\xbb\t\xedH\'\x7f\x13^\x1b\xef\x96\x04\xa1\x0c\x98P1\xb4hZ\'\x1e\xde\x1c\xf1hHd*C\x82\xc6<9\xcbF!\xc1\xb4\n\xabf\x84\xdbj\x13\x9d\x9c\x1a\x9c\xea\x13\xec\xcf\xa6\xe2\xb8L\xf5\xdf\xdc\xb0\xeby\x10u\xa8\xaa\xa7\xbf\x87i\xb9\x8a\x9e\xbf\xd60\xfaBx\x86\x93\xba\xedl>V\x0c\xec\xe1\x1cv\xf52\xa9A<\xf0\xcdn\xe9\xbd\x8a\x17\xe9@uKijJ\xf1\xc3\x9a\xbc\xb81FN9\xddl\xc0\xf1\xda\x9c\x0b\xc4\xdf\xf2ch\xe7\xf7?i\x92\xffz.\xf5\xa3~\xdc$\x8e\x15oc\x0f\x10\xdf\xdc#Z\xb4\x16P\xe3K\xfc\xff$\xca!\xafor\x96\xc8\x10\xbe\x92\xb5=\x98&{(\xba\x1c\x98\xb9\x9f\x86\xf3I\xa1\x838m\t6-\x10\x94W\xaf}\xdbIwOD\xb3\xa4\xc0\xc5T\xcf\xdf\xf1\x94\x83K/\xe9@\xd6\x02\x91\xa5\x05[\\<N\x0b\xaf\xb3\xd6\x8a\x99]\xa8\xe4\xd9\x93_\xb5No\xad\x88a\x03hC\xe6\xa0!]8\xddfXv\xf2l\xf6A\x9eX% \xc2\xe4\xe6\xd1\xe1JI\xd0\xceo\xf5\x05\xd1\x1d\x14\xb3\x1d\xac\xe5\x91\xa5\xf6\x13\xe0\x9a\xa2\xa9b\xf3\xb8\x88\x82\xdda\x86B\x95\xc6\xb3\xd2\xa4\x8f\xbb\x17\x89b\x9c\x0c3i\x82\xa6\xc8\x18\x93\x99~Y<r\x9c4\x12\xdcA\x0fuU\x02\x89\xd4\rp\xa9\xfex,\x8a\xd0\x02$\xb8hYvV\xa2D\xbb<\xd9\x16\xb6O\xae\xb9E\x1e\xbc#\xcf?\xb4[bm%\xf1\x84O\xba\rV?\xc3\xe7P\xe6F\xffI\xce\x1f\x952Z"\x1dy\xecI]\x1c\xf9\x0c}\xc4cL\xf4\xb4[\xfb$x\x1c6\xd3\xfa\x18\x0b\xe0\xcc\'\x16r\xd3e\xef\xcd\xf3\x9e\xa0R\xf7\xcf\xfd /\xf5\xa9n1\x19\xa0\xaa\x9f\xca\xf3\xd2\xb0EpmC;c\xf3\xab@.\n=j\x97\xef\x01\x03\x12\xef-\x93\xee\xf1l\xd3\xdb\xe5t\xc5*\xa4\x84\x02=\xb3\xb83w\xf0\x8c\x82\xd9\xac\xcarV\xd2n\xe1\xe6s\\X\x8fRc\xe0\x08~\xfa,}%\xc9\x81(vw#$\xc1\x93tL\xfc)\x08\xdbo\xd3\xd8\xcb\xcf\xf3\xfe\xc0\t^tY\xaf.\xe7?\x0f\xf8\x81@\xa9\x89\x85K\xd9\xc0\x08\xef\x92\x83XW\xc3\xcfKW/\xe1\x8e\x98&\xa2\xfd\xd6K\xb7\x0brU\x1d)\x1b^u\xfe\xaf\x85?s&j\xb8p\xc3\xe4\xb5\xf5\x17\xc4\x1fp4\x01\xf9~\xed\xdf\x94c\xba\xe8\x8aQ\xc8\x0c\xa2gL\x8fh\x15/{$\t\xa2\xf2\xf3\xd5\xe2l~\xfc<sJ\x0eQ\xaf\xd6\x04\x8d^\x93\x9b\xdf\x9c\xc4\xad\xd2IP\x0c\xce\xe7\xe0 \xd0m\xc17D\x82k\xf6*\xba\x9a\x1a\x0b`;\xc10\xf7\x86\xb6\x1a\x9c0\xf0\x88O\x82C\x17\x90#\xc8\xcb\x06\x13\xc3\xbf.\xf8\xb1z\x15=\x16\xcf0\xad\n\x8cZ\xa6\xcd\x9bV((\x88v\x7f\x10G\x06(\x11n\x19\xb4\x1c\x98\xef\xe8[\x8b\x06\xeb\xa4\xdc\x89\xfd\x14LE\xb8\x02{%\xf5\xddU\x96\xb7t_\xc6\xa0\xab\x80\xbe\x9d\xcd\xd4\x03_\x95~J\xb0vy\xc3\x94_\xc8\xd5Z~\x10N\xa1Jm)Y\xca\x8b\x98\x99\xbfUL\x10*@9j\x997\x9dCu@\xf6\xb6\xa6\xda\xf2\xb4_\xe3\xd0\x99\x85hp\x81W\xbbaXG(km#\xa2\xa9I"\x81H\xd3\x846\x1d\x1e\n,\xe6\x04\xa7\xe3\xbbl\xad\x1b\xf0.39\xffpHZ\xa1bO"_\x12\xc4\xcb\xb5\xca\x1f\xdf\xdby\x96$\xef+\x86\xf0\xa5\xb2\x04a\xba\x1b\xfcj\xf2\x95i?\xf5L\x02\xf8\xe1\xd9k\xe0\xe3<\x8a6\xe4-Z\xb0\xe1&1\x8f\x8e\xf6\x08\xdfG\xc4D~}\x80u\x93h\x1cEc\xae>uUa\xe9s+C \xd3\x93)t\x88R\x9e\tU\xc5C\xd0\xfa\xa3l\xd7\x06sR\x10\r\xae\xa5N\x80\xb4\xdd\x88\xa2D\xda\tcJ\x08\x12\xf4\xa1\xf4\x11\xd2\xa9;Q\xfd\xac:T)l"\x96\xe9?\xbb\xad\xdd\x1bx\xf6\xde\xa3\xd0\x95\xebBr\xbd<\xb1\xef\xad\xa1\xb6\xfaK\x13D\r\xd2\x87E\xb5\x11I\xc0\x16\xfc\xb6\xfb\xd9%\'\xb1\xc3\xc9\x88\x93#\xb6\xb7\xebt\x08\xc1\xe9%\xa4yN&G\xc8\xcd\x18,@\xd3RFX\xbaz\x8f|\xcb\x91+\x0c\xb3Y\xa0\xbc&jn\xe6D\xac\x8fPR\xa2\x9e\xc1\xceP{N{\xcf\xb7\x8e\xe4\xec\x84\x01u\xbb4\xe7\r?\xc7\xbd\xa3S\x11#\x884\xf0d\xdb\x1e\x95~\xbc\x87\x98\xff\x9f\x95\xba\xec\xe3\xf3\x15\xf6\x18\x19-\xe6\xfd\xb8I\xf63\xe6\xb3\x02\xd2HJ\xcc\x16\xbb\\d\xf6R\xeaG\xa1M\x99\x88\x8e\xc2\xefi\xd4\xd6X\n\x92~Qv\xfd\xe0e\xe8\x1c\xabj\xe2\xd3?\x88\x1e)\xc0\xcf/9\x89\xc7\xdc\x12\xec_\xf3\xd7*\x9d\xfd\xaa/\xe8|\x07I\x126\xb0\xe0\x06\x1b0uD\x9a\x89,\xa3b\xe0S\xd1\x04\x9b\x0c\x91p\xdd\x0e\x01f\x8c>]\xef)!wE!\x07 C\xbb\xda\'\xfa{J`|"\xeb\xf7\x05\xc8x\x9b\'(\xd0X"\xa0\x87\x81\xca\xb8h"c\xa6}&\xc0\x94y\x0c\xa3\xb2\xb9\x8a\xdc\x9cf\x1c\xe4\xb1\xd1\x9f)\x08\x98\xe6\xd2\xf52k\x07\xd5\xdd\xb7_\xfd\xc6\x01\xc7cc\xe52\xe7H\xed\x939\xc7B\x84\xc30\x89a\xa7\x94\xa73\xfeY%h\x10\x8fe>=K\xab\\S7\xcf\xbf\x83\x7f9\xc5"\xc9\x9e\xe03\x19{Wd\t&t\xf0\xaf\x01\xd0*PA\x94mP\xeecu\xf9>\x11;\xb5j\xc6J\xac\xa6 \xf7\xdf\x0bk\xb3@{\x18{[\xdbr|\xd9U\x05j>!9\xc5\x07M=\xca\xbc\xea\x15\x9d\x90u\xa56s\xbc\x9a8\xcd\xbdk\xfb\x109\xbe7\xca\xc2\x93\x9c"!\xbe\x06-d\x9e3N\xa4\xf3\xbe(g\xd3\xf4"\x1d/;b\xf2F\xb6\xe7\x95*\xf9\x1e\x90\x18\x0c\x8co \x14o9*c\x05s\x81\x90\xf4\xfbaG\xcb\xde\xe4\x90\xd5\xae\xbc\x8al\xd4C0\x94\x1e\xdc\xf4&\x8d\x9f\xc0,\xa6P\xad\xf2\x85X\x11\x84)\xf4\xea\xc0\xd18\x82\x17\xa4Y\xe2\x08\np\x9e\x1eX\xf1\x7f\x1d\x9c\xa6\x0e9Y<\xe5ETp#\xd7\x05\xf0\x0f\xbd\x14\x00\xf1p\xfdi\xf6,\x1e\xc1\xd9\xb3\x1c\xd4\xda"h\xb7\x89Tp\x07\xe5\xeb\xe0%\x9b\x1e\xb2+\xc6\xdbV\xb3\xbc\xd5\x81\xf4\xcd(\x90\xbb}H\xa7A\xddu\xdc\xb4\xee\xd0\xccm$\x0f\x07\xfa\x9c\x9bf\xbf\xa9\x06:\xd50\n\xed6\x16K\xc4\x8en\x89\xf1\x0b\xeb\xac\x1f8\xc4(\x06\xd6K\xbb\x00a5x\xa2\x11\xa30\x11\xb1+\x8b\xb2zaL\xadP\x16D\x9a\x8f\xf3\xc5\x05\xba\xfc\x85n\\Pc<#R\xd3A\xb3,\x92<\xac\xedN\x12\x8c+\x144\x87^\x8c\xeb~/^\xee\xafpj\xf3m\x8eA\xa4A\x1a}\xffEj\xd3\xc7\xa9\xb2\xea\xba\xe1\xf0#\x93\x9c\xf0\x86w\xbf\xed\xdf:\xdc\x92\xb0\x8b\x06\xa8zb\xb8\x10\xe2\xea>\xbe,\xec\x83\x85\xa2\x95r\xbd\xa6A\x1fh-a\xb73\x86\x80!]\xd4\xa6\xd5Dd\xb7\x02\xf5\x05\xa7~\xe4\xe0\xbf\xdd]\xf9^\rpK\x03\xc9I\xa9\n:\x9e\xafSTO\x93\xe86\xd8\x1f\xad\xc6I\xf1\x03*\xf1\x1eZ9l\xe7\xdfB\xe9\x8db\x92[\xc6\x10\xb0\xcb\xe4EL\'t4,\xe3\xc5q\xb0v+\x84Z\xca?\xaf\x92\x90\n\xecS\xff]&\x10o\x10\x92F_\xa9\xbf\xdfBE\x1bW\r\xae\xad\xf7\\>\x1f\x12\xccG\x893\x178E\xfdu\xd0\x02\\V\xddo\x87\x11M/\x94\x83\xae\xd5\n\xd5\xd6=v\xf8\xb0\xe0z\x98\xf7\x97\x8f\x18w\x06\xe7\xec\xfe\x17\x16;\x0e\xca75d\x17\xaf\xa6\xef#=\xde\xb9\x85\xf3\xa7\xcauj_\xb5\xab\xa5j\xef\x17\x1e\xfa\xbb\xed2#\x0ej@[\xe5\x1b\x98*\t\xf9\xa4M\x11\xfb\x1c\xe1\xf7\x82\x1a\x8en_v\xae\xc2\xbeH\xb38\xde\xca\xae\xb4\xddj\xf5bu\x9e3$\xba\xb3\x9d9\x7f\x17\xe6|\x12\xf5\x87\xf2\x04\x8bE\xfbu\xa7pm\xa7i\xdc|\x03\xfc\xad\xacFK\xf1\xb0\xfb<u\xc4\xbe\x9d\xc54\xfa\xff\xea\xb8W\x03mP\xd41\xdb\x8a\xe3\x0f\xcb\xc7\x1c\xf7\xd2K\xc6\x03Ikn\x80\x000\x9ce\xf3s\x80,\x7f\xc6\x16\xdc\x89\x08\x1a\xb4\xa2\xff\x0c\xef\t)\xff\x16\x06.m\x92\x06\x1a\xc8\x9e\xe7>\xe2\xeb?tX\xef9>\x95[\x06,<n\x81\xbf\x0c\xb94\x86\x9e\x13\xee\x07\xf6\xcd\xba\xbd#\x9a\xbc\xb2\x85\x14\x95\xb6B\xe4X`\x0e\x9c\xd0H\x0ft\x1a=\xfa\xe5R\x96j\xd6s\xf3\xf4\x01 \xfe\x8e(\xad\xed\'Dn(C\xcb\x1b\xe9\xa9y\xd9\x93\x92\xe5\xa4>\xc0\xa2:\r\x9d\x15\xe0\\0\xa7(\x96\x82\xb0\x9d$6j\x1dM\xd5\x851l\xae\xb8\x0c\x1c\xa6\x9a\xbdPk\xd5ok\x8dB7\x9b\xbc\xee\xee\xce\xef\xd14\'@\xedEO\x07?\'\x1e\x98\'\x0b\t\xb5\xd7\xb8\xcfD\xa4/\xd6\xe1ht\xea\xadB\xcf\xf5\xdc\xc3\xc7F1En\xc8$\xdf\xb4nNJe\xccg\xe3\xb3\xb1')
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 CommercialSettings(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 c.key.commercial() and (not is_parent or c.key.show_in_parent()) ]
141
+ print(cat,cat_configs)
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"))],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>&nbsp'+_(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,39 @@
1
- # 2023-04-08T16:23:31.878858
2
- from pyarmor_runtime_000000 import __pyarmor__
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\x04\x0b\x00\x00\x12\t\x04\x00\xeb{\xb0\xd2qT\x11\xe7Xp)#\xb0\xd0\xafW\x00\x00\x00\x00\x00\x00\x00\x00\xbe\xbb\x98\x95\xf6?!\xd48L\xf9aNF|\xb3\xd9\xf4O\x8d\xf4R\x13#\xa1\x9by\x11\x89\xc8\xd3\xd2n\xd9\xa4\x11\xe2\xb6c\x8a\x0e\x98\x16P\x0c\x9e\x9cB\xe7 a\xb2\xbeih\xdf\x1c\x95\xad\x8f\x9d\xbc\x86q\xf1\x9b\xb0\xc9\xe1\xae\x7fm\xae\xc3\xfa\xd2\x94\xd7\x06\xe0j\xa6\xa7\\!\xa5\xf6\xcd\xbe$\x9b\xac\x81\xe1(\x04\x0f\x01\x06Y\x0ff\x1c\xc8\xceCt5\x10\xae\xc7\xf6\xc3\xcdl\x1d\x16Q,b\xe1\xa6Y\xdcf\x02\xddI\xea\xa7\xd0\xd4k\xc1\x96\xb9\x91\x04\x98\xdeV\xbf\xdb\x1c\x07S\x18\xba\xd9\xde\xa2\x01r\x8a\xfe\xa6i\xc3\xce\xa2\xe8,\x93\x82Vwg\x02\x13d\xee\xfb\xbd\xe7\xd0ad\x91\xad\xb5\xbb\xec\xd6+y\xe9\xf6\xc4>\xac\x12P;\xac0`\x04u\xa7\x84\xb1F\xe7\xa5Sev\xd3\xbd\x80|F\x0b$\xcf\x19\xff^\xa2\x14A\x96\xb3\xe9\x94\x12\xc6W\xc8\x02\xca\x11Din\xff\xd5\xa9Q\x1eV\xae\xdb|\r\xc4<\xdd]D)\xccLk\xc4\x0c\x03\x1e>[\x90-\xbd\xfd\xa6\x01\x19k4\xc0\x1al\\f\xc1\x89\xe6p\xe7\x98\x06R\x8b\x16\xf8\xa9\xecLj}\'\x86\x17\xc5u\xe8\xdf-^\x0f\x8e\x8bPx\xe1v)dfVk\xfc\xff\x87\x8a\x0bJ\x915\xba<9\x83O\xe8$\x86\xfeKXw\xef9\xf2\xec \\^\xe9H\xe98NP\x02GY\xbf=\x95~%\x9cW\xb2K!\x96\x97\x18\xb0\x1f\xd8{%O\x80Pi\xa9\xde\x16\xc5G0(\x90\xb8\x11\x08\xf5&8\x0e\x9f\x1aa\xb7\xc2cd\x03\xd4\xfd\x98\x9d>\xb9D\xe2\xcc\xf9\xa2\x11CG\xda.#\x08_\xcc\xd7#\xc0\xb0\xafA\x92\xaf*^\xcf\xce \x12\x08\xa1\x85\x0e\xd5\xa8?\x96\x8c\xb1\xbf\xb7f\x7fb\xf2\x0eQu\xa1\xd0\xd4T\xf3\x95\x93CSs\r\x84EQ\xdf\x1f\xfc%=\xf7\x84\xd7\xe1f:?\x9a\x80\xb5\xaf\x81\x8f\xfd\xe7\xebZ\xeeN\xd7\xab\xb5\x1akM\x049\x0c\xf2RO\xf8\x9f<\xe5\xd4\x05O\x06\x97\x87\xab\t\x0b\xbdM\rUmp\x07\xe8\xe9\xa3*v6\xb5\xea\xde\x13\x9dI\xbb\x80\xe0\x0b\xdb/H\x00+r\xac,\x002\x1b\x11\xbcs\x8e\xb9/;\x19\xa5\xc8\xa4\x81W\xa8\x14\x07\x1di\xa42@\x117\xbel\xab\x85\x92W\xcc\xc9\xc3\t\xeeTX\xc6D\x8b\xc4\xd5\xb4`\x9d\xc7]O^\xce\x86\x99\x89r\xf6\x96\x01\xc8\x0b\x15\xa7\x9c\xe5\xe5\xe2\xa8\x89\xcb\xfcc\x81\x97\x98\x19\x0eNV\\\x1c\xbdz\x10K\xd20V\xe8-N\xcb\xd8\x9a\x11vY\xd6\xaevzi}\xbf\x0c\x06J\x043L\xe2O\xcd}\x0e\x90\rk K\xd9\xf3\x83\xd0\x0eu\x11\x96\x17\x89\xd750\x03\xbfT\t%,=\x15)\xdeZ\x9e\xba\xafb\xf5\xbf\x04[\xf4\xf5\x93`f<1\x10\x81\xf5\xfe\x81\xa3\xef|\xef\x84\xfc\xd1 :\xb3)\x86\x8f\xa0t\x97\xe4A\xe2\xbc\xd9\xc6Y?\xdegA\rV0\xe9a%\xdb\x12\xc6.\x02\xbb\x84\xbf\x1dGz\xd4\x8dq\xc06Oy\xc7\xd7\xbeN\xa4"+_\xdf\x87\x0c`Y)\xcb\x94=F\x97\xaa\x0e\xd2\xee\x90\x11\xd3Y\x1eS\xcf\xf4\xa1\x86\xf6\x17TP\x91\xf1\x1e\xe1;\x80\x97a\xa1\xcd\xb5u\xa6\xfc\xed\xbc]\x02-\x1e\xea\xf9\xa3qh\xef\xfaG\x0e\x9a.\x82\xa6\xed\x90\xa2V\xc1z\t\xfeo0\x08,\xfc\xd2\xd5\x96\x82\xa8\n\xc9\x0bWd_7\xdeG\xd3\x95\x18\x8a\xaf\x02\x99\xfdY\xe4\xce\xba|\xc9/\xde`?7\xde\xca`\xb8\x9fV\x10\xdd\xce2\x825b\x0c\x8d\xf7\xf2b\x81\x93h\xb8\x11E\xbf/\xa1\x93\xf3\x83#\x16I\xef\x0ca\x93\x17\x11\xbd\x9e\xa9\xd8\xc4I)\xbe,\x06\x87\x1c\x08k\x8dh\x0e\xe0\xce\xa3\x94\xebfJ\x01\x15u1\xdfL\xff\xc2N\xcbH^\xe5\xa0\xef\xc9\x19\x08\x15\xed\x95\x01\xc5\rp<"]U\xaa\x17\xbe\xcd\t\xf4\xd0\x9bL\xa1-:\xb5$i\x1ekhR\xa8Wg\x89\xe0\x84\x9d\x8dQ\xff\xca\xcd\x01i\xda1u\xb0\x15\xfc\xa1+\xbe\xdb5\xd4UX6\x979l\xeb\t\xd8\xd0\xf34\xb4\xd0S\x15\x9f@\xa4;>~\x8c\xafX\xfd\x05v\x86\xfc\x83=\x1c\xd2y\xae\xa8\xeb\x1d\x0f\x01`*N\x98\xcc\xa8K*m\xa8\xc5\'u\xf0u\xb7A\x0e\xbd\xb4\x9cRY\x1e\xd73\x9e\xee\xda\xfeT\xec\xcb\x10t6/\x1b\xba\xd6lK4\xb9\x82{3\xcc\x8d\xb4\xc2\x07S\xe9\x07uYc\xa4\xa3\x06\xaf]\xfdP\xcc\xfb\x94e\x19\xc2O\xc6P\xf8\xeb\xda\xe5n\x0e\xc7\x0ee\xd5\x88\xb4!\xa9\x9f\xa7\xbeFi\xa7u\x95.\xaa\x9a\xe7\xd0F\x90\xcd\xb3\x10\x10\xf8m\xec\xf5"\xb1\xedw\x04\xe6\x19\x1c\xf7\xfa\xb4\x98x\x94i\xa3V\x1e\x9bK\xe2\x8c!\x8bG\x10\x98\x91\xf2\xf3\xa4\xcf\xc1\x91N\xf8\xde\xf0;Q\xb4q~\x01\x07B\xcf\xeb\x04\x11\x7f\x8b\xff\xa2*^\xb8\xd5X\x85tvB\xa7\xdfl\xa8\x91g\xc8\x90s\xc1\xbe\xfeZ\xa7\x84\x056\xd8\x01`\xdf\xdf\x02(b\xdc\xa87\xd3\xc8\x82i5\xc6\xb8,\x99\x87\xad|O%\xb6Nn\x80%\x15\x89\xf6\x8b\x92\xb6tY\x9eC\x81\xaaE/\xc2`\x02\xa5\x0bW\xd7q\xc4\xc2e\x9fk\xc2\x8b\xeeW\x06b{,-\xdeau\x98(\x8f\xb8\x13R>\xb3]\xbf\x18\xb4\xd4\x07F\xec,\xed8\x18\x9c\xc3\xc4\xcd\xd9\x03\xa49\xba\x80w\x98s\x00\xba\xd9\xd5\xca\x18\xd5\x7f\x00\xc5lD4\xcb\xc8\xe0\xbd\'\xba\xbe6C\xd9\x84\xfb8\x90\xf9\xb9\xc6j[G\xb4\xc6t\xb6|\xcaMBlO_\xad\xdf\xbeB\xc0i:3B\xb9\x98e7\xde\xe1\xa5\x19\xce\xbe\x1d<\xe1\xe4\xf0\x16r\xb5\x9dZM\x0fF"\t\xa9}\x0b\tP\xbf\x02\xf64\x18.\x86\x93\xa1!F\xafl\x0bv$i}\xa0\xcc\xbc\x0b\x85b"{\x9d\xa0\xa7\xbc\xba\x92\x0f\xde O\x89\xfc\xbb\x84\xday\x8a[tv\xa4\xf5\xa2g\nb\xb6\x94G\x98MX!UC\xa6\xbbW\xb8\xa1\x08\x95\x16\xe2\x86\xbfa)1\x92\x894\x88\xef-U\xb3=L6\xcf\x9f,9\xba\xc6`\xa0\xd0\x92\xd3W\xbbc\x82\xe1V\r6\x04\xb5\xd71\xf4\xe6\x88\x80\x1b\xdb\xc6/\xa5^\xab\xae\x92\x88\x1e\xa1i"\xf19\xc1\xe8\'\x7f\xf67\x94r\xbf\xa8\xcd\xf9\x04\x9e\x8d\x90\xb2\xa7 \xc99\xd0\xff\xecR\xef\xba\x0cIf\n\x02\x9d\xe2\xa9zH\xb7\x86\xc0\xa6{\x14\x94\xe7\x18\x84U{?\xdc\xf5\xe8K\xc7c\x91\x86\t\x0e\x1a\x1c\'\x93B\x1c\x0cD\x0e\x1dn\x08z\x90\xd8_\xcbxm[\xd1\xf9\xd8\xe75@\x83\xd4GV\xb9\xb5\x19\x82\x00\x9dlI\xd1R\xf0\xc4\xf7\nKv\x04rN\xd5\xd7\x83\x1d\x0btJ\xc0\x9d*\xc7\xd9\xf8\xd4\x8f`\xc1\xca\xa4e\x96dR<\xe4\xb5A\xf5\xff\xd2[{\x1a\xa1\xc9W:\xba\xa7\xa8\xa2\r\xfe\x04\xd9\xa7W\xf6\xc9f\x0eZ\x84Z\r\xef)\x8cUGXM\xab\xe9~\x00\xdbx\x04d\x14e}\x88\x95$\x05\x91z\x80F}k\x8d\\\x08\xc5\xa1!\x9ak\x96\xba|\xb9\xe5\xfd\xab\x14}u\xe0\x9cGb\x83\x07\x94y2\xd7\xb8f\'B\'\x11\n\xa9\xcb\x82\xe0\xae(Hk\xf2\x06\x02\x99\xb0\x94\xef.\x87\xbf\xa8EW&\x8c\x19\x9f\x97\x90p\xf7\x0b\x0b\xe0\xad\xfc-JH\x1fA\x84F\xf3\xbbS\xa7\xf3q6\xdf\x19YN\xdaAH\xac\r\xc2\x82h(}1\x0b\t\xa6\xd4?\xa88\xc1d\x10pK\xff\x10[\xe0\r\xb1P\xbe`\xedTF!nwzi\xb1\xa8\xe0}\x9f\x02\x16\x97la\xc6gF\xf7\x95\xb4\xc3\x07\xd9&\xb7d_\xb0\xd8%Z\x96\x8a\x0bK\xee\x1b\xf5\xbb\x9a\x9a\x1d\r\xe5\x94\xae\xe4\xcd\x91q\x18\x06\xfb\xd1\x01\xa7\n\x95\xb6\x94\xb3\xc1\x92\x14O\x95\xbc\xf3\xfd\x93c\xd89H\x9b\x11\x0ej\xfc\x8d\xf0\xed\xa2\xa4\x12\xb4\x90)B\xd4BfXRn\xfd\x03\x14V.\xab\xa7\xc0\xd1\xa1\xf9\xc4\x95\x96\xb3\xf4\x9f\x00\x16?}\x82/\x1f\xe1P\xe7\x90\xcd4\xe7y\x11\xee\xf1\xf4\xd8\x05a\x13\r\xf6iB\x96\'C_<|\x8a\x90\xea\x1e{\xaes\xc1\xa6OnV\x99\n\x0b\xcf \xad\xd50Iq\x89\xc4\xf7\x7f\x1d\x84[c\x88\x16\xb7\xae\x88\xa9\xc6P_$\x8b\'\x9dTD\xf7\xca\xf4\xdbX|\xa5sh\xe2\xf2hR\xa9\xe3\xd0\x08\xb9\x15\xa42Mlg\xf0\x93k\x18\xea~\x8b\xbb\xfd\xe0\x9aW\xf4.z\xdd\xfa\x03Y\xd9F\xd3+?\xbc!\xd1\n\x02\xa3]\xed-\x85\xe2_"\x87AW\x93+\x81\xb3i\x88?\x83)\xbdpWU\xb3\x9b\x02\xfb7\xd7!\xd1\xfbP\xef\xaa\n!\x93\x9f\xcd%<B~]\tF\xcb9\xa7\\\x82=\xecR\xb9\xe3\xffQ\tU\xcc\xd0=\xbe\xe5`\x0e\x1d\x80\xfa\xd4K9\xab\x92\x89\xd2\x17\xbeca7\x0f\x8f\xaa{8,H\xf0\r@\xbaO,\xf2\xbb3a\x12\xf2\x9b=\x07\x92\xb0l30E[\xd0\xe5o\xc0\xa8\r\xc5,Gz`\xd0O\xce\x1e\x1cv{\xcd\xe0m\xb7\xf4\x89U\xc3\xbf;V\xc8\xbdaF\x9a\xb6_P\x04\xa5\xe3\xe3\x03\xa7:^\xb4\xcc\x8b~\xdc\xca\x06Ay\xec\xb10\x8e\xb8\xa3\xe6Y\x06\xe9\xcc[\x9c\x06\x18\xfa\xefU\x15\x88\xa5HZ\xf2\x7f\xcet\x93cV->\xa1\xf1O\x03!\xb1 \xc0\x9c)\x0e\xca\xacEi0\xc67?\xebW\x9c\x11\x01\xbc\x88\r\xcbu\x08U\xb7\xfb\xa3*\xaf\x96\xc0\x9a5\xff\xca\xe5\x916\xfd\xd3\xfd\xaf \xb5\xc5\xbc\xb9\xe3\xb7\x0f\xea\x9a\x01\xa0t\xbf\xa9d\xeb_)[h+\xf5V\xe7Y\x15\xf7\x96\xd6\xd3\xa70\t\x05{\x1f\xe0:O\x18uvl\xfa\xb6\x91\xb3\xd02\x01meP\x99\x00\x9bh\xb1\xf0\x80M\xd7\x14\x01\xbd\xbdXI\xc4>\xa2\x0c\xe8\x8c\xad\x8a\xfb?H\x10=Q\x93w\x0ci\x01Hwv\x9d\xbb\xad\xf7\xca\xbbR\r\xa4\xee\xe5\xdc_f\x9a\xefo\xa5\xee\xc7m*\xd1\x19Q\xb5\xe1\xe4\xac\xb3k\xf4S\xc2\xc3\xa6\x88}\xb8fAh\xfdCdT\xb9x-r;0\xb83\x9e\x11si\xcd\xc54\xf2\x80+m4\xa8y\xb0=44\x15\x8c\x89\xb1\xf5XWa\xe0\xd8\x95\x98\x9c\xf83\xf2\xc0[\xcf\x82E\x8a\n\xb4\x90\xeb\xb3w\x9aA\xb3\xa5\xf5\xda\x92\xa9\r\x1f\xe3G\xba[\xd0\xca\x98N\x9eP/\xd9\xd6\xd5\x17\xd1\x85\x84\xdc\xe0\x8b\xf1\xb1\t\xc4\r\t\xd5\xd6\xa5\xa2\xff\x1d\xbf\xc0\xd5\n\x013T\xfa\x9aN\xab3\x01<\xab\xd3\x06S1\x81\xa4\xd6\xbd\xf6E\xff\xf2|@\x9a@\xb9\xdd3/\xbey\'\xc3\x05\xc6\xc1\xa3b\x1d\x88\xc4\\2~#F\xfd\x95\xc2$\x97\xdf,6\xecA\x9d\xb4\x9f\xe3\xcd\x9d\xf6Gi6W\xceX\xf8\xd0\xc9\xbe\xd1\x9b\x1f\xdb\xc1\x06\\\x1e\x8c\xae\xe9D\x9f\xc5F\xffR]u\x1f\xc1\x04\x9d\x8bm\x9cF\x17\x04\x0c\xbd!0>\xb2\xe1\x86\xb3\xf6[\xaa\x17l\x16\xfc:2\x0b\xe2Meg,l\r\xbc\xac\xc8>\xac\x92I4\x8f\xe3T*\xb0X\xc2W\x8a\x8b\xc2C2\x9anm@\xc9g\xf9\xe7\x890\x13\x86\xec\x80\xb8]iw4\x879}L\xbf\xf3\xbal\xf4Z\x0c\x08\xdb\xa37\xdcH\x11\\<\xc4\x8fR>\xce\x96\xf8\xf9\xe0[\xf3\x7f^iP\xae"\x8e4\xf5\x83\x08\xc8mH2Z\xfd\xab\x8d\xb1\xc6 ')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from flask_admin.contrib import sqla
2
+ from hiddifypanel.panel.database import db
3
+ from wtforms.validators import Regexp
4
+ from hiddifypanel.models import User, Domain, DomainType, StrConfig, ConfigEnum, get_hconfigs,ShowDomain,hconfig
5
+ from wtforms.validators import Regexp, ValidationError
6
+ from hiddifypanel.panel.admin.adminlte import AdminLTEModelView
7
+ from flask_babelex import gettext as __
8
+ from flask_babelex import lazy_gettext as _
9
+ from hiddifypanel.panel import hiddify,hiddify_api
10
+ from flask import Markup
11
+ from flask import Flask
12
+ from flask_sqlalchemy import SQLAlchemy
13
+ from flask_admin import Admin
14
+ from flask_admin.contrib.sqla import ModelView
15
+ from wtforms import SelectMultipleField
16
+
17
+
18
+ from wtforms.widgets import ListWidget, CheckboxInput
19
+ from sqlalchemy.orm import backref
20
+ # Define a custom field type for the related domains
21
+ from flask_admin.form.fields import Select2TagsField,Select2Field
22
+
23
+
24
+
25
+ class ProxyDetailsAdmin(AdminLTEModelView):
26
+ column_hide_backrefs = True
27
+ form_excluded_columns=['child']
28
+ column_exclude_list =['child']
29
+ # list_template = 'model/domain_list.html'
30
+ # edit_modal = True
31
+ # form_overrides = {'work_with': Select2Field}
32
+
33
+ def after_model_change(self, form, model, is_created):
34
+ if hconfig(ConfigEnum.parent_panel):
35
+ hiddify_api.sync_child_to_parent()
36
+ def after_model_delete(self, model):
37
+ if hconfig(ConfigEnum.parent_panel):
38
+ hiddify_api.sync_child_to_parent()#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
39
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,51 @@
1
- # 2023-04-08T16:23:31.871228
2
- from pyarmor_runtime_000000 import __pyarmor__
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\x00e\x08\x00\x00\x12\t\x04\x00\x8c\xb7~\x94\xef\x86g\x855\xe9\x9f\x7f\xfa\x9f[\x13\x00\x00\x00\x00\x00\x00\x00\x00\x1ce)z\xff\x0f\rWn\xb4I\tJ\xd7\x01\xd4\r\xacrpO\xdf\x07lc@\xd7\xc6\x85\xb3!Wp\xde\x16\x9eF\x86?\xae\xe1\xb5M\xfe\xec\x17Rm,\xf2\xe1|\xe7\xe7=\xd0\xf8F\x8e\xc5$\xe8\xbd\xeaG,\x0c\xcc\xfc\xca\x04\xf7\xb1\xaf\xfbh\xa8\xfa\x1f\xbf\xcc\xd4\x0e\x88\x89}I\xd0\xca\x15I\xd9\xed\x97\xa8\x15<\xdfON\xbe\xb41+_\x12\xffft{\x15\x0f\x8aL\x04\x04p\x95\xad\xf2\xf5[\x03@9<(\xf9\x8f&&&\xb7\x99%\xe0\x8a\x93\xecH\xfd#\xdcnz\x07P\x82\x1ff\x15\x9d\xb8W\xab\x7f+\x11\n\xddR\x07F73KE.d\x03\xfd> \xae\xf0\xd0\x9f\x00\x13$\xa4\xe3#5\xc9\xb9\xeb\xdc/\xe5\xed\x83c-\xe8E\th\xdbs9\xac\xe7\xb1\xfb\xf7\xbd\xcf\xc0C\xc7\xe0SSx\x88\xc8\x08\xcc4\xce\xc8\xa0(:\xb9\x8e\xa9\xabE\xb8R\x850\xfe\x02erG\x00\xfbC\xfd\xdb)d\r\xf1[\'*6g\x96\x04\xb2\x7fs\xf3V\x98x\x90\xe9\xd6\xc4B\xda\x8a\xa9|o\xeb2HF\xeaV\xdd\xb8\xb6\xa7y\x90\xde\x1b\xdf\xe2\x95\x99Eu\xd4\xbc\xf8ZK\xa2\xc3P\x17\xd0\x81c\xe0\x82!m\xa6\x1bt\xc2\x92\x835J\xeaG\xb2\xbc\n\xf9\xba\xb5\xe8\xc7\xfe\xeb\xa1\x13\xa6\xd1E\x8cueM\xc4\xbd\xf4,\xd4\xc4c\xa2\x16\xf1`\x82MZx\xb1+P\xc0\xca\xd68L\xda0\x13\xc2\xbe\xc75-(a\x7f\x14E\xadm\xb9\xf5.\x1a\x9dZ\x9b\\\xb2\xbd@@?\xf2Ut\xfd\x10\x92\'{\x1e={s9\x1c!\x12\xd3\xf2-\xd7\xd9\t\xa8\x19\xf6\xf4\x19\xe0b\x87T \x86Z\xe7\x90\xdb$M\xef\x92\xda\xac\xd8\xe1\xceX\xcb\t?\xd2\x8c\x92U\xd8UW\xa6\xe9bI\x9b\x08\xc7\x8f\xa7R\x12\x92\x8a\xa0\x1bk\xfb\x18M\x10\x04\xad\xc5\x13\xc3\xb0\xc0\x04\x0f\xd8\x80\xc3\x88LR,\xbd$\xc5|\x95\x94Q@_\xe3\xa6e\x15g\xf2t`}\xca/.\xd0\'B?\xc1\xf1D\xd5iMBX{\xbc\xb7hD\xcbr\x8e\x08{\xcb\xcd\xdf";h,0\xc8\x8b+D\xabc\xecE\xe69\n\xd2\x00j\xc4-\xd2V;\x9d\xba\xbb\x1cv\xc6\xe4\xc36\x97\xbbF\'\xcc\xa0\x9c\x01[\x14\xf9}\x9e\x95\xb5\x9e\x0fU[\x91]\xd1\xc8\x00u~\xe3c\x98\x14\xf9\xe9\xf2\xed\x81io\xfbU\x8f\x93\x9d\x18\x12\r\x9f\x0bw\x8aE\xb3\x18\xa6a\x98\xa1*_V\x9fQ\xad\xb9J(|8\xc0\'Wb\x0e\xc6\x05\xfe\xdbu\xdc\x93\x1b\xaa-\xb4\x15I"\xbfk\x92\x86\x9f\x84\x19\x8d^;L.\xec:I\xa7\x06\x11\xcfw\x88\xd0\xadV\xb8\x17\x85C\x88S\xa4<f\x86\xff\x95\xaf\x06\xfa\xa3\x8e/A\xa5\x17\xdb\xc8\xbe\xb5\x81p\x97tg\x10\x90\x87\x88\x8cQ\xb8\xd3\xf3\xecK\xbe\xc2\xb0M\xbd\x19\xaf\xe6\xf2\xd1\xf5\x18\xa4\'\xff\x9c\x1b\xd7\x80PH\xef\x94T\xea)\xdc${ q\x155\xf7\\v$fX\xc6\xe8\xe9\x07Q\xa9\xa4r\xf9\xbb\xbbJ\xfc\xfb\xc1\xaf\xb5"<\xc1\x97\xa7\xf2\x05\xf7\xdd\x10\xde\xe3R\xb9\xd2\xeb31i\xe99\xfc\x0c\xa4\x8c\x9c\x7f1\x9aa\x86\xdf\x98\x8a;\xfed$\xf6\xa5\xf3\x97?\xee)\x1a\x1du\xd5E\xbbD\xf0~\x1fxh\x91\xafr\x81\xe88\x8dr\xc9\x1c8\x0b\xe6\xe0\x0b\x17\x90\xa3O>\xe3\x94\x84\x05\xbb\xfaW\x89N\xcb\xcdc\x80\xde.85F\x93\x02TR\x1e\x1cD\x8d\xf7\xa7\x1b\xf2\x9b\xebK\xb6rA\x03\xc2G\x8c\xe3\x03\x14\x04)\xfe\x9a\x18\xa8\x08\xccR\xa9\xf0\xf9\xb4CVy\x16\x9b\xc6a\x81S\xd3\xb1\xa6\x0cR\x9b)\x9c\xf1%\x18\xb2\xf3=\xe4\xee\xd0\x14XC:\xbe\xccGp8b\xf6\xb6\xb3j\xbc\xd9\x00 %\xe5\xb03~\xf63\x94-\xf0\xbc\xe6\x96\xf5\x9b\xad\'\xd9g\x18uk\xef|M\xf4\xd1\xa16<\x04f\'8,}L\x14\x90\xaf7\x86\x0f\x1e\xcc\xa9\x88\xc9\xbd\x08Z\x97*\x9d~\xc8\xc5\x1cH\x17!\x9e\'3 \x05\xa1\x99\xa7S\xb2=\xef\x05\xb0@\x0f\xa29\xf9\xcd*t!\x16\xfe\xa1\xd8\x96EX\xc4"\xf5w*m\xdd\xd9I?3\xbc2\x97\xc2@\x1c\xa5\xcb\x0f;\xdb\xfa9\xfb\xef\x7fN\x84\xe5\xe7G\xd0\x1d\xc4\x93<\xb9\xa8\x08d\x16R|\xac>\xde\xba\nv\xea\x9ex%\xbft\xb4Qi\\\'\x834P\xbc\x92\'\x81\xa4*J\x18\x9c\x90\xb6\xa5\x9f\x175ro\x8bT\xc97\x1boL[>\xc3\xbf\xfd\xc4m\x0e\xa4\xa7\xf9\x15\x9a\x04p\xa7\xca\x9a\xac4])\x1a\xbb\xf6w\xa0\xbb\xae\x14\x9b~t9\xa3\xd7\x87\xd2\x17s\xf3\xfd\x18\xe2G\x05\x89\xcc\xb2\x9a.\xee\x03\xb7\x87|=[\x8em\xb6\x9a\xa7L\xab\xdd4\x91m\xaa6gDL#\x1d$\xb2\x8c\xbb\x92]\xb2\xa9\xbc$g\xff\x92\xad\x82\xbdIN\xb90{\xeaD\xf7\xd9r\xa3(qj\xa9P\x15\xba\xeb\xb4\xb7@\xdeNk \xa2\x83\xcf\xf9F\xb8\xcd!\xc3.\xack\x8f\xc0\xd3\x8e\xb9\xea\x19\xefs\xbc\x9e\xd4\x08r\x85\xea\xeaf\x92\xe3\xf3\xe6\xc2\xbc\x84\xd2\x99\xb7\x00\xe2@!\xdc\xc8\x12M\x92{|`:\xfb*@\xcfI\xc1e\xc0\xcf\xa9S\x95\x1a{d\xa1\x18\xb6r1\xd5\xaa!$\xac\xef\x8eX5&\xa4dH\xc4\xcb\xd3\xd6\xe2q\x1d\xd2\xb4q\xb0\xe1\x81\xda\xbcX\x9b\xca\xbd\'z\xe4\x15\x1c\xf8@/L7}\xa4\xb9\xc5\x8c\x15: \xa6t\'\x9d\xf3m\x19w\xb8\xc8\xbd\x135,a\x9dY\x08/Y*:\x0b\x1e/*t\xda{ca\xf3\x02HN$\xf0A\xa4\xb5y\xa7\x08%\xd2\xa3HDk\x1f\x8b;\x84\xbe\x17\xa4\xd8\x9b\xe9\xccU\x94E9\xd2\x1e\xcd\xd2\xfa\xe4\xde\xe6\xb3\xd4\xd0C\xf9s!\xbct\xe4U&\x07Ei\x0c#i\xb6\x844{?\xa5 [\xd7\x1aXDP\x95\xccc}\xd1\xd5\xc6\xc6\xde\xce\x01`E\xeb\xec\x1b\x1eL\xdf9\xdeN\x03\xd7\x1b<\x1a\xec\xc6\xfb!t@6\xd10\xa7y3{\xf2\n\xa6\x7f\x83|\xf1\xc9\'\xbe\xa2<\x8c\xebp\x88\x7fIBI\x1c\x1f|)\xc8m\xa7\xa0\x90\x11\xf8\xb54\xcc\xba\x13-\x01\xa1\xe5\x7f[5\x12$\x884nx?+\xf7\xdd\xd40\xe2\x85\xeb\xe9\x97\xa6\x10%\x9d\xae\xd6\xb2\x18\x8d\xc3l\x84g\x06\nN\x11\xb3!\x884\xa90\xa7M\xea\xb3\x12K\xaf>Q\xeb#y\xea\x1e\x9e\xff\x93?\n\xfdK\x1b\\G\xbf\x87\x81\xbe@\xb1i}\xce\xe5i5\xff\x7f~\xedD\xda\x07\x8f\xf1u\xed\xc8\\\x94\\\xbbDR\xea\xcd\xdd\xc9Jx|\xe7\x04\x01\xa6\x95,T\x14\x1a\xcdw(GG\xbb\xcdd\xa7\xff\x8c\xd4\x10}\xddG\x92\r\xdc1K\x1ehA\x10\xc7\x0b|9\xd4\xdak\x02\xb6\x92!j\xa7\xde\xdbtg\xfa"\x977\xadi\xf6"\xc1\x8b\n\xbbi\xd0W\xcd\x07\xc31\xd6\xecz\xac,\xfeBf4\x9f0@\xdaAJ\n14\x1dGE\x80\xed\xdcP\xbc\x07\x1cwg\'g#\xce\xa7\x1bG\xb1\x05\xcex\xed\x12\x04,\x0f\x06m"\x80~5\xc2b\x18\x8c\x01\xfbgJ\xeb\xe2\x8a"d\xb6\xfd@\xe8\x1cF\x07\x9b\xab\x0f\xa7[\'\xbe\xde\xe1\xecM(\xf4\xe1\x8d\xa9b\xdf^G\x13\xa9\x15\xb6Z\xca\x1e\x84?\x86\x1f\x81\x8a\xba\xc0\x1b\xd2-\xe9<}\xe7b`\xa4?\xaf\xd4\xdb\x86\xf6\x10\x9fW\x04\xb3\x19\x7f\x8awe\xfa\x03\xa8|\xe6\x12k\xac0\xd6\x10\x10\xe17lD\x9e\x89\'\xc9T\x93H\xe7K,A\xfd\x02\\\xcc\xbc\xceLB\x84(\x02P\xba\xf3\xae\xf7(\xd8\x89p\xe6\x90<\x8bJD\x13\xe3M\x1b\x14\xd1\x904w\xae\x83\r\xe3\xf10\xa6HV\xc3^Q\xf8I\xcf\xb5\xa7\x91C\x92T"`\xebcK8E\x068b#M\x93\x15_\xecf\xbf\xe4\xb0\x92\xce\n\x90.\x819\xf9\x12\xfaY\xbc\xed\xc5\xb7q\x9e}dE\xdd\xbb\xf1n\x00q~D\xb0\xa4\xef\xc3\x99\xb9\xb5\x18\xb7\x9a$\x08\xdfq\x14\\\x87h\x875JE\xbf+I\xc3\xde\xd6H\x00\x80\x84\x9f\xe3y\xf1\xbe\x07\xb9\xe7(\x81t/\x10\xfeB\x1a\x07\xd1j\x14~\x90\x05\xe7\xc0\xff\xfc\x19\xf4\xcf\'\xc2\x85\xaf\x8a\xa0\x89\xda!\x94\xdc\xffzS5x\xb6\xfdk\xe0\xb4\xabY\xa4\xcf$~\xa9`\x0fO\x9219Z\xaf\xf4.\x1b\xda\xa7\x9f\x96\xdfN\x12\xf7\xa0\xed?\x12\xc4\x05\\\x84t\x94\xe4\x8f5\xf8@\x88\xf3\xafb\xe9\xb0\x8d\xcd\xc0\x828\x88\x14\xaf\xe4\xd0\x95\x9bH]\xd1*\xf2\xa9\xef\xb7\x1bcl\x8e\xdf\xc6\x9a\xcb,h\xfb=\xb6\xb7')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from .ProxyDetailsAdmin import ProxyDetailsAdmin
2
+ from .CommercialSettings import CommercialSettings
3
+ from hiddifypanel.panel import hiddify
4
+ from hiddifypanel.models import *
5
+ from hiddifypanel.panel.database import db
6
+ from hiddifypanel import Events
7
+
8
+ commercial=False
9
+ def init_app(app):
10
+ from . import restapi
11
+ restapi.init_app(app)
12
+ return
13
+
14
+
15
+
16
+
17
+ def config_changed_event(conf,old_value):
18
+
19
+
20
+ if conf.key==ConfigEnum.is_parent:
21
+ if conf.value and not is_valid():
22
+ set_hconfig(ConfigEnum.is_parent,False)
23
+ if not old_value and conf.value:
24
+ Domain.query.delete()
25
+ db.session.commit()
26
+ db.session.add(ParentDomain(domain=hiddify.get_ip(4)+".sslip.io"))
27
+ db.session.commit()
28
+
29
+ Events.config_changed.subscribe(config_changed_event)
30
+
31
+
32
+
33
+ # def db_init_event(db_version):
34
+ # if not is_valid():
35
+ # db.add(BoolConfig(ConfigEnum.db_version,10,child_id=0))
36
+ # db.add(BoolConfig(ConfigEnum.db_version,11,child_id=0))
37
+ # return
38
+ # # if hconfig(ConfigEnum.is_parent) and ParentDomain.query.count()==0:
39
+ # # external_ip=hiddify.get_ip(4)
40
+ # # db.session.add(ParentDomain(domain=f"{external_ip}.sslip.io",show_domains=[]))
41
+ # Events.db_init_event.subscribe(db_init_event)
42
+
43
+
44
+
45
+ def admin_prehook(flaskadmin,admin_bp):
46
+ # flaskadmin.add_view(ParentDomainAdmin(ParentDomain, db.session))
47
+ flaskadmin.add_view(ProxyDetailsAdmin(Proxy, db.session))
48
+ CommercialSettings.register(admin_bp)
49
+
50
+ Events.admin_prehook.subscribe(admin_prehook)#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
51
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,16 @@
1
- # 2023-04-08T16:23:31.947996
2
- from pyarmor_runtime_000000 import __pyarmor__
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\x001\x04\x00\x00\x12\t\x04\x00\x94\xaa\xaexv\x0fL\x0f\xab\xce\xbf\x10\x81i\xf3\x93\x00\x00\x00\x00\x00\x00\x00\x00\x8fJ\x11ld1\xf4\xcc\xc2\xeabf\xa5^\x12^5\x88\xcb\x81\x12\xd9I8++\xd7$\xb2\xf6S%w;U\x07\xf9\xb0V\xde\xb9\x8c\x90\xf8&U\x9d*\xc8\xa4W\xc0\xcc\xeao\xca\x19M\xb6\xb2\xef_ x\xaf\x07\x12@\xd4\x17\xb5\x10{]\x7fj\xea\x04\xd4\xdd\xea1\xf3b\xd2<K\xdcS\x88\x14\xd6\x84\xfc\xca\xfb|\xa6}Q\xfa\xa3\x8dG\xf4\xf8\x93\x19\x91ZoT\x8eH\xc5=\x10}TnE\xca\xb6"f\x9b\x87qTP\x92\xf1/R\xca\xbe\x1d\xd5\x0e\xbf\xaa\x0f\x8c\'\x0b\'a\xc10\x0el\xd3\xb8\x97\x08v\xe9\xdb\xa4\xb1\x9eeo\x82\x1d\xe3\xc6\xaam&\xa7\x17\xb9\x91f\xb3*@\x8b\xf04%\r\t\x9e\x93\xc1\x01\xd9E\x92\xd6\x06\xcd\xea\xa1;H\x12\x08\x88_\x91\xad\xdaz\x92\xd9\x06\n.\x87\xbb\xe2u?\xa26\x12\xeaN"\xde\xbd\xf5B\xb2\x99\xbc\xbbo\xb7\xc9\xbd\xfa=l\xb3\x18\xa6\x90\xc7\xfd"\x8c\x84\x7f\xb6\xa3\x8b\xf9U\xfb\xec\xdf\x04I\x93i\xcb\x1e?U\x9dL\xc0\x14KM\xd1\xe6G\xc6\x88\xfe\x8f\x1cs\xff&\xf3\xb9\xac\xcd\x99\xf1\xd53\x85\x901M\xf2dI\xcf\xba$\x00\xa0\x8f\xe4\xcc\x80\xa0\xc5)\x17\x1f\xe1KT?\xe0\x8f\xcf=p\x83\xb9\x11\xf4\xc4\r\xfe9\xb1\x1e3_c\xd5\x94Z\xfcA9"\x90\xcf\xfbZ\x86K\xc6\xd8\x0e^\x05\xf4\x04_\x93\xdbl\xc0]9\x9f\x84\xda\x95DG\xd4g>M\xea\xe3\xca\x8d3R\xc5\xd5\xc8\xa81Z\xfeP\xa0\xf0<v#\\\x08p\x80 \xd6\x10Y\x9e\xccb\xb7\x13$NN\xcd\xa7\x87\x1e\xea\x0f\x10Q\xa3\xbd \xa00k2\x18\xf6\xf3\xe0\x98\xbbf\xfa\xa6\xd0\xf9\xb1N\x10bZ\xf2:)E\x95\xb2\xa1\xa9\x1c^\xc4]%\xf3\xf2.\xf7\xa1\x01\x9a\x19\xc2\xd9\xed9\xad<e\xd2`k\xde\x1a\x81\xf9\xb0\xe1\xd4-\xaf_;\x17\xebIyK\xe0[\x82\xb7\x1f\\\x8b\xb5\x94\xb5\x86\xac\x0cL\x90:\x9aY\xa0\x89\r\x07\xd9u.\xe8-8/\xbc\xb8w\x94\xd3\x87LNp=\xa6g!N\xb7a\xd1@\xe9n\xa0/k\x92\xec\x03:\x10a\xdcF\xfa/\xe9\xd7\xfc\xbd\xc3\x11\xbe\xb4\'gY\xc7.\xe2\xa6\xc6\xd9\x0fJ\x0c~\xaf\xfa@\xa0\xf8\x11\x8eUj\xe2\xe4\xc5\xc2E\xe3\x08\x11\xb6\xca\xc8\xb8tW\xe9\xeaG_e\x0b\xa9\xb8\xe1\xd2\xc8\x01\\y;\x8e\x08X\xc2\x8e\xb1\xdb\xf2\x8bR\x8d\x1d\xbd\xe6\x95%\xcd\'\x0eE\x8a\x1eit3q\xfa*w\xf9\xea]\x0b}\n\xf5\x92\xaf\xab\xd6dFZ\x96\x1b\xe5\xe4\xdc\xccw\xf6Ws\x0b]\xb3\x89G\xcb\xa3\xd5\x98\x07\xfb0%{-\x15\xba\x9b\xa1R\xc18?\xe9\xf6f\x14R\x8e0\xec \xa1\xe5=z\xbc\xa4\xbc\xf8\xc1\x85\xe4\x14\x98{\xa9\th\x9b\x05\x98i5\x8a\x11l\xe4\xd3%\xf1\xb4\x12\xeb{\xe8~\xeb\x95\x0b\xa2\x00\xe9Q@i\xc4\xe1\xaa\x04\xfa\xcc\xf3\xcf\x95\x7f\xe0\x85\xcd\xc7\xa1\x91m8\\\xbd`\xb0\xf4/S\xdc<\xa5\x0e\x1d\xd1\\\xb9\xae\xce\xd9\x04\xe7\x11\x9bj\xebr!\xe3\x90v\x96\x8f\t\xef\xdc\x1eA2d~\x10=\x9eL\x08\xc5\xb0ai\xe7\xe3\x05\x1b\xab\xca\xde}\x8f\x85\x06Vw\xbfX\xe0\xeb?\x84\xa5\xdf\xf2\x92\x85s\x9aA"\xd1\xd9\x96Q~\x8c\xad=!\xb8\xacgG%>#\x17\x8fv\xed\x17}\xab\xd5\xc2V\xec\xf3F\xdb\xfd\xbd\x9c\x85\n\x8a\xc8\x10x\xc6@o>b\x8dK\xca\xf2\x0f\xcd\xd01\xe3\x13p \x0cp\x06\xc9\xd4\x91PB6\xc3dE\xc4\x11\xf1\xa1\xc9\xe4\xcd\xe2\xc3":B\xc0\xd0y-t\x9ajj\xa7\'\x07NE+f\xc9\x85\x85\xb9+\xe9\xa8u\x07\xc7\'\x16k\xc1\xad\x18\x13y\x88\xf5\x03\x04\xd5\x02\x9f\x82\xc5A\xd5rO \xc2\xb4\xe5\x1e\x0f\x8e\xdb\n\xca\xb3}\x12\xf0\xe7\xf8\x912h\xf9l>\xd0\xa0a\x95O\xf9\xb5\xa2\xd0\xcf\xc9\x12Q>\x80XY\xb4Z\x19\xf4\x80\xa4\x04\x86p\xa5\xca\x03\xb0\x15\x90dG\xcb\x896\xa99\x9a\x16(\xb5]p\xd5%\xf0\xa7\xc8\x05\xc2G\x88\xbb\xa2fn\xea\xb9C\xbe\x14\xa7\xd7]\xa6/O\xa5e\x86\x088P\x85m^\xad\xe9\xafA\xc0*Xe\x87\xb1\x19\xae3av\xbd_8~T\xc7\x13')
1
+ from flask import Blueprint
2
+ from flask_restful import Api
3
+ from .tgbot import bot,register_bot,TGBotResource
4
+
5
+
6
+ bp = Blueprint("api", __name__, url_prefix="/<proxy_path>/<user_secret>/api/v1")
7
+ api = Api(bp)
8
+
9
+
10
+ def init_app(app):
11
+ api.add_resource(TGBotResource, "/tgbot/")
12
+ with app.app_context():
13
+ register_bot()
14
+ app.register_blueprint(bp)
4
15
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
16
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,59 @@
1
- # 2023-04-08T16:23:31.959388
2
- from pyarmor_runtime_000000 import __pyarmor__
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\x00b\r\x00\x00\x12\t\x04\x00\xd1\xf8\xacRr\xe3\x9d\xcb\x82^\xe0\x16\xcf\x0f\xc2P\x00\x00\x00\x00\x00\x00\x00\x008n\x168;\x17\x04\x93\x94\xfc\xaf\xe8+q\xfer\xe7\x08_\xd9k\xddW\xa3V\xe0\x17x\x85\xdfZ\x8f\xa3BP\x01\xd9\xb5\x18\x0e\xbc/-\xeb\x0e\xbfV\x93U\x0e/\xa7\xab\x8c\xc6\x94\r\x1fj\x820\xf6\xa2\x86wa0\x13\x1a\xf4y\x19&\xb9\xec\xa3\x19\x84\xd0\xca\x9d{\xb84\xe9\xbb\xe3{\x7f\x0c\x99/\xf7\xfdkb\xad\xae:\xf5/@4\xdb`\x11\x9a\xc8\xb3L\xed%\x8e\x979\xd6T\x069Rwx}\x8b^\xd0\xe3\xa3\xcb\x92\xaa\xe5\xa5\xc2]\xa9}X\x96\xeb|Z\x07\r\x95\xd5Op\xa1\xdd\xcb\xed\xe9\x1b\xefH\xdf\xa8(K\xb8iV\x83.$\xfatg7\x9a\\\xcb\xd6\xc9\xbd_!\x921\xae\x84\xe1)\xaa\xe5\xe1FP -V\xd68\xcfjV\x08\x97\xb0\xb1\xc0\\\xfcj\x9d>\x93\x0e,\xec\x9c?\x01\n\x1c\xcd\x19\x11\x04\xdc\xcf!\x97\x9c\xec\xae/T\x9f\xcd+smv\xb2\xf1\xca\x16\xef\x02\x90\r/\x0b\xa2\x1d\xe1\x89:\x8b\x8dZ\xee\x10\xcc6\x91\xbb\xb8\x86}\xeb\xd9\xbb\xb0\x1e\x9c\x7f\xc0\xcfU\xda\xe3]CT\xdb\xa9\xd3D\xe3\xf7.L\x82\x84\x98\x89\t\x9c \x9e\xe8R\xe6\x94fB\xfa\xf0\r!\x9cY\xf0>\xe5\x9b_\x0e\xb67`\x95\xb6b"\xc3Ox\xde\xde\xc24\x90\xae\x90r\xe2\x90P#\xae\xaa\xc1(\xa2V\xda\xec\xd2L\t\x95\xb3\xbb\xd1\xb0\xbekPS\xec\x8a5,f\xea\xde\xd1\xc6\x17\taX,\xd3r\x1d\xd0\x0c\x01x\xd3\x01\t}\'/\xc3H:\xef\xb6\xba\x8b\x11\xb8\x1d\xdd\x96\xd6\x14\x1d\'\x81i\xb0*\xb8\xb3M\xddP\xe7 \x9e;\x8cS\x08$\x9ay\xa3lY1&|\xcd\x91Y\xe7g\x0fi\xb8\xa60l\x8a\xb8yP\xf7\x99\n\x1bD0\r\xfa\x10A\xa6\x11X\xbe\xc0\xcbj\xd7\xce\xca~\xca2,\x98\x16N\xa9\x92\x90l!\x8f\xf5\x9c\x99#\nq\xab\xf0\xac\x19\xf1DEc\xef\x8c\xa1\x91A\x97 \xdd\xb7\x8c)\xbe~\xb9\xda\x92\xddU4\xaf\x94\xd2\x8b>(s\x9c\xdd\x88\xfa\xa7)\x81\xc3\xa1\xc9N\xf59J\x92\xc3\x89<\x89]\xbc@}\x94\xb0\xed\xf3\x99b\xbe\xab\x123\x9dkGVB0\x01;\xe1\xdeG\x0e\x07\xd25\xdbL\xe9\x85\x9fJ\xb0ng\x92?\xfd\x108\xdc\xa6\xb3\xc1\xaf\xa4r\xc9\xd8.b@+qI\xb0\xd8\xff!\xf6\xf2\xc5\xdc[\xc9\xa7\x08\xc7\xc6\xf2\xcf6\xb5\xa9nzrd\xef1\n\xa1j\xfa\x931\xc0\x0f\x9c^\xca\x93U\x939\x04\x1b\x11jo\x92\xf7@\x07\x98<\x15\xd1\xc66\x99\xd1\x17\x9c\xeb\xf2\xfa.q\x12\x9b3\x01-\xb3\xf7\xf0\x7f+\xdc\xe2\xe80\xd2i\x88\x9a\x1eZ\x016\xf7?\xe4\xcfA\x93\x89\x13 \xcaV\xb8\xcc\xff\xd2\x833;\xab:\xa8\xc7}\tg\xbc\x14\x01\xf4\xb3\xad\xf5\xb4\xb0_\x18\x9a\xff\xc2\xfawh\xc3\x84\xb9\x0f\x8a\xfc\xc77<\xe6\xc1\xe0\xc2.\x15Q\xed\x9bN\xd59\xb2}\xa0u\x1e\xcd_:),\x18\xee\r\xf6\x11\xdcc\xc0\xb4\x1f(,ws6c\x8c\x01\x03:D\xaa\t *\x19n\x1a5\xa6\n\xdb\x98gq\xfc\x1e\x82\xe7\x0c\xe1\xfd\xc9\xda\x11w03\xbdp(Q\xcb\x1f\xb4\xc9\x10\xffNm\xe8\x9e\xa2I\xe7D\xc72\xe8\xa3\xb7Yo\xe9\xbf\xa0!\xbcW\xf8\xdb\xc7\xce\xfd&\x0c"\xfa\x18+\x0c-MkC\xfa\n\xe8\xf6\xfe\xb0\x03y\xfb\x81\x9a\xd3\x15\x87{^\x83\xc5\xc4\x9f\xf7\x85\xd6\xe07\x1e\xf1\x0fZMP\x85\xf2\xf7>p\xb4Kys\x8c\xbb\xb9\xd6\xd0%hw\xe7Q\x80\xbc\xfa\xa4\xac&,z\xfe^\xef\xc4\xe6\xa7WV!\xfa\xc1\x8f\xf1\x9d\xe0\x9e\\\xcbT\xd9\x8dP7G\x04d\xcdLR\x8f&x+EV\xbd\xfb\xfd\x95\r#\xa0l9VZ7G\xeb\xcaL\xc7]\xac\xdb1\x1a7\x11\xf1;^\xa2CoO\xe6k\xbc\xc9\xc2\xe4^\xd6iE`?\xdb\xd5\xf9dl\xa3a\x954\xe9\xcc\x9c\xea\\\xf3L\x1f\xb6\x8b\xf9f\xf2\x9b\xdd\xe0\xb7(kV\xb2G, \xd3I\xb0\xde\x1a(\x96\xfa\x8cOc\xd7\x8d\x18\x14\x8f\x08\xec\xdd\xcd\x9d\xe4\x8bg\xab\xa6\xdbu\x14\x10\xa7\xbc\x90~\xd0OCM\x837p\xc0\x85I\x006\xc3&\x84\t\xb9g\xda\xfb\xd7P\xe6\xf3\x9er\xc9d\xa6\xb2k\x88\xe3\x91e\x18\x92MO\x829\'\x82k\x9eHl\xf0\xa5L\xc31\xba8CO\xf9\x82b=\xc4s\xd5\x88b\xf4\x15(\x18`H\xeeV\xd1~\x1e\x19\xcb\xed8\xfdBe\xa26\xec\x04#_k\x05d\xddp\x01\xce\'\x13\xff@\xfa\\\x19\xb1{\x89NsA\x06\x03\xa4.\x96?\xab\xd4\xc4\x8c\xa0\x9e\'\x1b\\0\x8b\x87\x9fE\xcc\xb6\x8c.\x08\xe4tQ\xbc\x15\xdcYn0\xe4\xa2Ij\xd9L]\x85\x11\x9f\xc8\x17\x86\xf9>\xd0\xe4\xcf\x86\x9a\xe7\xcff\xa1j\x9ad\xdc\xfa:\x98\x07R@\xb3\xc1\xa0\x9a\x8c\xb3\xcc\x03\xa1`\xd9\x18\xed\xb0\x00\x08\xbaq\x83n>*9\xd6K\x04k\xe7\x9fN\x13uQ\x0e)7Z]\xe5\xea\x85\xd1B\x1b3\xdc\xbd\'I\x16\xeb\xc1x\xa3\xf9\xe09\x93jA\xbe\xac\xffy\xf6Id\x9f\x19\xd2n\x1dQ\t\xcd\xc0B-\n\x98Pk\x1b\xb8!\x07i\xac\x1aN\xad\x7f\xd2\xb5K\xcen\xd1\xedW7\x05#\x12\x8f\xd9\xec\xaae\xdac\xa3\xe7\xc3kP^E\xb1\xb7F\x9e\x9b\x1cq!\xb3_\xd4eMl\x8d\x9eVhy&\x19\x15 \x8a\xc7x\xef(\xab\x97\t;u\xe3\x0c\xb21\x13\xda\t\x9d\x81\xbc\'\x949\xff\x16s\xe7rl\xeb\xa0\xeb\xb9\xe3d\x1d\x08\xee6V\x18}\xff\x9e\x1f\xf4\xa5u5\xaf\x9clK\xe6\x0b\xe0,\xadU{\xdf\xdf*{\x7f\xf2\xd12\xdf\x9e\x9f?\x9f{\xefM\x01\xd6\xe6\x99\x98 #\x9b\x06|\xf9\xedk\xe5\xa4[z\x96\x86\x8a\xbe\x94m\xc6\xf8\xee\x0b\x96W\xdb\xfam\xff\x87p<\xc3\x14\xd7\x96.\xac\xe5\xfeL\xcb\xbf\x00D\xd0\xaa\x18|_=\x91\xcaD\xfd\x80\xe0A-\xc7i\x9f\xaf\xc6\x8c1\xb4\xd2\xfbU\x8b\xb0\x95\x84\x92\x06\xb8\xb0p\xcf\x01\x9bBI\xdc]\x81\xb0\x94f_^]D\xf3"\x98\x91TU\x92\xceP=\x00^[!8h\xb7.^\xec\x90G\x977lg\nk<\n$\x12\x9ea\xba\x16\x9f@\xfbe$&u\xe1,\xcf\x0f}b\xc9\xf1AY\x1e\xbb1\xa62?Gj\xbc54A\x89\x00C\xa0\xd2Iw\x80\x1e\x00\nk\xe26J\xc4\xaa\xc2\x9c\xf8R\xe0\xb2\xecU*\x93@\xfc.5f\x00@S\xf9\x8eg!\xddHX\x99\xd6;=\x11\x11\xff\xad\x1a\x9c@\xaa\xbci\xb7\xfd\x8bQ_\xc7\x86[h\x1e\xedn\xab\xd4\xe3B\xaf\xe8_\xc9-7\x8c\x04+Yr\xc8\x83\x92&G\xdf\x05\xfc:\xa5\xbcL>\xa6\xb9\xe6\xb2\xab\xda\x8ed\x8e\x83\xa3\xd6\x9fj\x87D\xca\x81\xdf\x00\xea\x9a\xdf\x1bT\xa6\xd7\xe6^\x19]\xdb\xf07\x8b\xbfj:\xa0\xba\x05%\xe3D\xd6\xb8A\xd3\xeb&Te\xc4\x04V\xc3\x07\x85\xf3\xce[?\xff\x0b\xf9\xedA\xde\x01\x1b\x05\x0b\xd6\x14\xfaJ#\x8a\x08pOS\x90\xbe\xb5\xc1\x81Y;\xbeE/ \xb1&[\xee\xd7\x05\x1a \xe9\xa6i\xaf\x93\xc6&)\xf0j\xcc>6\xbc\x1b\x0fI\xb6:\x7f\x9d\xd4X\x91\xfa)\x1c\xbf-\xb8\x94\xb4\x14\xe8\xabC\xb2\xaePg\x1d\xb0\xb9\x04K\xe2\xf1\xe7W\x18\xef\x1e\xb6;\xb9\xf0\x82\xb0j<4TuN\xd5\xb1\xa4\x08\xf5\xee\xd2&LI\x90>\xa4n\x1cp\xb9\xcaJ\xedN\xb08\xbc\xae7\xfe-\xd1\xf4 \x93qR:\xac\xa7F\xe2\x8a\x9fu\xafU\xebr\x9er\x03I\x97\x8bk)[\x99UA\xb6\xc9\xa8\x8c;\xef\x98\x1b\xfa\xb2a\xaetsV\x05,\xfc\x83\xd5\x16\x1e\x18\x15\xe4\xc0\xf8\xa5a\tFh\xcd\x04\xc8\xd0#=\t\x92\xb8\xf4\xe9\xaa\x8f\xda\x06\xacb\x8a\x93\xe8\xeb!A \x1f\xbbw/\xf2R\x85\xecw(^\xcb\xe8\x15\x07\x16\xd9\xa2\xcbX2^h\x05taW\xd4\x88\x90a8\xeb&4\xbcn\r\xad\xba\x8eu_Y\xd3B\xa3\x91E1\x98\xb1\x93\xd7ZZ\xb9Aq\xbb\x85\xa7\x84b{c\xce\xc3\xd2K\x14$9\xa2\xb4\xc69\x06\xec\x9c\x96\xbdz\xe5\x08~\xaa\x9bv\xb7\xbe\x8f\x9e\x97\x97\xda\x07"c\r;\xa3m))\xe0\xf9#f\xef\xd5\x93"%C\x18O\xff\xf2"U\xd6ky\x160\xa7\xbaX\x0e~\xf9\x0e\x99\x1d\xcf\xa2\xb2\x98\xe9C\xad\xc7\x93\x07\x14\xf8\x87n\xcb\xe5\xe7\xfd\r\x95]hAc\xaa<5\x8eq\x04\x1b\xf0\xf1t>o\xadRW\xe2\x7fr\xe1\xf53\xc1L\xfe\x97NNq\xc5\x1cP\x1b\xc2\x94\x84\x15\xfa\xf4\x19\xfe\xe9\r\xce\xac\xe7\xca\x15\xbd\xcd\x02\x8a\xe8\x84\x0ec\x96PI@"\xf7\xdd\xd5\xeb\n\xd9\xe7\xcc\x0768\xd2\xd1\xbfs\x08(_\xf5\x00\xe7\x9d\xaf\x98\x8av^\xa1\x94\x82\r\xd9Bb\xda\x12\x01\x86Zo\xa1\xc3=S\xb9\x8c\xa0\xd0\'\'\xd8T\xf8\xa1\x9c\xfa\xf4\x9b\x15\xfd\xef\x01x\x8bw\xfb\x9au\xd4\xb5\xe3\xefRx"T\xed)243b[\x13D\xdd\xa4\x06\x98\x1c\x94\x06\x99\x17\x973.\x19\x10\x8f_\xf2H\xa2\x1a\x08mi\xe6\'\xbd`\x7f\x12k\xc4\xfe\xfd\x06\xcd\xa5f\xa0\x11\rC\x00\xad&\x1c\xcf\xed\x18J\x9e{W\x83.o2\xb4\xbd\x87\x93\x18\xb5\xe7\xc8e\x06`\x82$\x19Vy\xa21\xe5\xdd\x01\xc4\xd4\x9f=\x168[\x9d\xba\xfe#\x84\x8a\xc6\xbd2\xda\xe3^;\xc2\x9b\xcff-\xeb\xf6\x03]\xb3\x9bcA\xfa\x82\x88\xab\xe2 \xfeP\xab\xa1\x8c)m\xe0,\xd5j\xc8\xdbbT+\xd5\x9c\x14\xf1\xec\xa3\xd7\xde\x04S\\+\xea\x8a077\x08\xb2Q\xbc8\xb1=\xcd\xa1\xef\xad\xae%\xb9\xd8\xf8?,\x9c=\x9f\xf6Q:\n\x9bT\x8f\xf3}a\x90\x9c\x03h)*\xb8\x1c\xc9\x9f\n\x84[\x924Tt\t\xa03\xf7\xba\x8e\xeb``:\x83\x9dd\x91E`\xc2\xc6\x1e\x03\x1c\x89nn#\x97\r\xd3\xe0Vm\x150\xab9\x0f\xa3\x1b\x7fZ\xe7\xd1:\xe9\x1c\xf3\xd5<\x0e#:I\x93%\x08\xef\x17J\x96\xc9\xe7\xc1N\x93w\x83M\x1e!\xc8\xbc\x12\xc5MP(6\x08C}\x06\xccGW\xfb-\x14\xc1\xd64\x99\xddnt\xc8p\xde\xea\xe9\xc2.\x02\'\xd1=D\xc9\xc5y\xbeX\xd5\x95s)\xd2\x99\x13\xdb\x1f\xcf\xa8#\xb3\xf6a\x0f\x84\xf6\xbb\xd4\xef\xa0\x17f\xa2\xcb\xec:o 4M\xb0w\\\xa48|\xd1EdYN\xa1\x1f\x1aR\xd3\xb5\x9a\n\xc2e\xc3\xb0t\xad~w\x90\n\xcc\x06\xea\x83\xe2$\xbeR\x0c\xfe\xb24\xaf;\x96g\xa9A\xc5:\xf0r\x1c\x05\xd6\x95\x04\x16\xd3u\x08\xd9\x87`h\x9b\x94\xd4)\x14\x1e\xc0T\x15\xacB~\xc7\x0c\xdb7\x12\x04\x1a!c{\xc6\xe9\xd5=.\xa0\xaf\xf9\xc6\xed\x92~\x9b\x8f"\xc1\xc4<\x00\xf0\xbf\xe99\x08\xc6\xa2\x91V\xc5\xaa\x0b\xa90\xef%\xd6\x9b*\x03IjK\x11xq\xc6\xeaF\xd4O6\xa3\xc5\'\xa5\xb1\xe7\xcc\x0e\xc2\xad\xd7lp\xa8\xc0\x8al9PpX\xbb\xb2\xa8`\t\xbc>\xf83\xa7\xadl.jA\x95\x13\xca\x8c\x8e\xcaW\xe0\xa9\x82o\xf3fb\x15\x13\xda\xc6\x81\xca=\x05\xe5\r\xaewI\xd5\xe4\x1a<\xc5Pu\x9b\x13\xd1\xea\xd6l\x0e\xe4\xd4\x84\x12\x90\xff_\'\x8b\x01y\xd2/x&%\x0f\xe9q\xa6;*\xdbO\xb2\x12\x1c\x8c"j\x08\xf7G\xd4\xb8\x0e\x93\x8e\xfb\xd7\xb5aX\xe29\xb9\xb6s\xe7\xf1\xe1\xc4\xddI\xa3!\xcf\xe6B\xaa3\xfb\xe9J\xe0\'H\xaan\xdf\xdb\xb7\x007\xcf,\xd8\x14\x9fiq]S\x07\xec\xe8\t\xde\x90dl\xda\x02\xf7Hf\xde^\xbc\x88\xabA\x13\xec)\xd9\xfe\xe3\xc6\xff\xbd#\r\x9d\r\xf4\x9eD\x11gXT\xeb\x1e\xbe\x03z\xcc\x84\x06q\xc1N\xa6\xff%\xdf\xc6\xd6\xc0\xd5\x0e\x03\xdbnm\xd9`P\xfa\x8e|\xce\x96\x87}R\x8d\xfd\xbb\x04\xee\x89M\xcc2\x81\xd4.\x01\xf8\x86\xe2\x14\x04}_\xbd&\xd0W\xb5\x00^=\x19Z\xa2\xb8\xa3XWb\x01{\xfe\xc6\x1e\xc8q\xa1\xef\xad^a\xddW\xf4\x84\x8cy\xc0\xaaFC\xa1\xc6\xf3\xb7\xd6\x94\xe6\xa7v\x11*w\xff&!\xbf\x82s\xc1\xaa\xb4\x8b&\xd1K\xa7\t\xefLB\x01\xdc\x1b\xac\xdf\xa8}J\x88\xf0\xc4\x10\xc2h\xa2\x9f=<\xae\xc7\xe44\xc1\xb9\x7f8\x9d\xff^_\xe3\xa55B\x8f@\xbf{\x93\xfc\xef\x14\xa0\x90\x97\x1e\x7f\xca\x10\x18\x88\xea0U\xd4\x1d\xbc\xd2\x99\x7f\x08\xd6\xa5\xd2\x0c\xdam\xb0-\xa7N_^o$\xd2]\xe3\x81\x1aO\xc3\xcf\xaa\xef\rL\x1a\r<\xba\xe6\xd8\xc1+\xf5$\x1e!\xd4\xdd\xd1\x91\x93,\xa1L\x9e\xa7=\x15\xb0\xc4\xc2rj\x80\x0c\x10P\x9b\x92\x07\xe0\x93\xa0\x8cH\x7f\xc0G\xc8\x1f\xe3\x89[\x91\xfe\xb6\xb1\xd8\xedI\xc65\x92\xc1d\x84\x16\x9c\x11D\x01\x94\x0f+\xd4\xbf\xf1\x91@\xfa[*\xbby\xd9Z\xfd1\xa7\xc7H\xbbX\xec\x9b&&j\x8d\xf2\xf6x\n\xe5\x05\xd32\x91\xfd\xb5\xc3\xea\xe3\xc0Q\t]y<\x01\xa5\xfe\x08%\x1a\xd29\xf9L\xf4\xdd\xf0\xc4\xd1\xce\xdfD\xbaZ<)\x14\xf0Qb\x0fd&s\x94Z,\xd3\x95E\xc8\x0c\x85\x8c\x98\x8a\xa2\xcek\t\xb8\xd0o$\xd0]~\xd5\x84\xec\x1a\xf7\xb9Uq{\x12\xe2\x14\x91\x9d\xa1\xbf\xca\x9a\xe2\xfa\xcf\xcc\xd5\x91\xdbZV\xc0@%G\xed\xa4\x81,v\xa1B \x1a\x88im\xdd\x1daQ\xa1\x1d~\x976\n\xa5pz\x8e\xa0\xce\x80\x90\xd9\xfa"V\xe5~fI\x810\xb3\xd8(\x95\x8e4\xac\t\x1f\x9e\xa2\x99=\xac\x93L\xe6\xedZ\x00>\xc0')
1
+ import time
2
+ import telebot
3
+ from flask import abort, request
4
+ from flask_restful import Resource
5
+
6
+ from hiddifypanel.models import *
7
+
8
+ logger = telebot.logger
9
+
10
+
11
+ class ExceptionHandler(telebot.ExceptionHandler):
12
+ def handle(self, exception):
13
+ logger.error(exception)
14
+
15
+
16
+ bot = telebot.TeleBot("", parse_mode="HTML", threaded=False, exception_handler=ExceptionHandler())
17
+ bot.username=''
18
+
19
+ def register_bot():
20
+ try:
21
+ global bot
22
+ token = hconfig(ConfigEnum.telegram_bot_token)
23
+ if token:
24
+ bot.token = hconfig(ConfigEnum.telegram_bot_token)
25
+ try:
26
+ bot.username=bot.get_me().username
27
+ except:
28
+ pass
29
+ bot.remove_webhook()
30
+ time.sleep(0.1)
31
+ domain = (ParentDomain if hconfig(ConfigEnum.is_parent) else Domain).query.first().domain
32
+ proxy_path = hconfig(ConfigEnum.proxy_path)
33
+ user_secret = hconfig(ConfigEnum.admin_secret)
34
+ bot.set_webhook(url=f"https://{domain}/{proxy_path}/{user_secret}/api/v1/tgbot/")
35
+ except Exception as e:
36
+ print(e)
37
+ import traceback
38
+ traceback.print_stack()
39
+
40
+
41
+
42
+
43
+ class TGBotResource(Resource):
44
+ def post(self):
45
+ try:
46
+ if request.headers.get('content-type') == 'application/json':
47
+ json_string = request.get_data().decode('utf-8')
48
+ update = telebot.types.Update.de_json(json_string)
49
+ bot.process_new_updates([update])
50
+ return ''
51
+ else:
52
+ abort(403)
53
+ except Exception as e:
54
+ print("Error", e)
55
+ import traceback
56
+ traceback.print_exc()
57
+ return "", 500
4
58
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
59
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,13 @@
1
- # 2023-04-08T16:23:31.926848
2
- from pyarmor_runtime_000000 import __pyarmor__
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\x9f\x05\x00\x00\x12\t\x04\x00\xfd\x88$|M\x04So#\x7f\x95\x8fF0\xd2\xf2\x00\x00\x00\x00\x00\x00\x00\x00\xeb\x1c,\xce)Z\xc5\x83m\xddGN=9zS\xf45{s\xa8\x0f\x15o\x18\xf3\x0f1\xd3\xb7f\x96\xac\xbd\x19\xe8v\xc6\x9d\x02{;\x8dPZ\x03)~\x95\r\xb2\x1eJ\xe7\xbc\x87\x93\xb9\x0c\x1a\xdd\x84\xcb\xb6\xa6\x0b=\xe9*\xd4z\x14\x1fe\xc7L\xb9\xf3"F\xf0\xfd\xda#\x84\xd2\x83\xaf\x9d\t\xd0@\xb7;\n\xe7\xaam&\x1f\x14\xdae\x1e\x10y6\xfc\xf7\xb9\x03q\x14\x7f\xc9s\xe9\x15\xc7y9\xa7\xcf&\x88\x05hG\x10\xc0M\x88\x036x\xc5\x96\x15j\xc9\x81\x0f\xe4\xe4\xb7sa\x88\x9e\x7f\xdd^\xe4\x90\x04\xe7)\xa4\xd6N\xa5\xb5p"\n\x95#kdWp4\xdfA"\x0f\xc7u\xa2V\x93\x06\x00\x88\xeb\x97j\xadT\x1c\xab_\xde gz\xbb_\xc8;\xb3\xcd\xc3H\x1f\xe8\xe9>\xf2\xde\xfb\xd7\xb1\x9e\xe1\x1cKt\xce\xac\'\xfa\x99\xd7j*,\xc4\xe4Cq\xe2SY\xb2\xde\xf7!O\x89\xbe\xa2S\x87\xaairZD\x82<\xc5;\xe9\x0b\xedEGxy\xa5\x83"\xec\'\xd0C\x06\xa3\xbd\x0e\x0e\xc9(0\xd6\x02m\xc6c\xf8+\xf9\xe8_\xfa\xacFg|\xea\xbe\xa6\x9d\xc1Ck\x93$IS\xc3Y\xca\x15\xadT\xb6\xee\x02\xb1\xf2N~z"\x1e\xf9TM\xccp!F\xb8T`Z\x87\xed\x9c&\x115\xe8\xabF\xa9\xcb\xdf5I\xe9n\xc4\x9b\xaa\xdb\x9cr\xc9\xb0\x1d\x81)\xbf\xbf\xb3\xcd\xe2Pc\xf6\x05C,g\xe8\xdc\x1b\x1aY\x81\x9b\xd0\x18\xca\x7fp9\x18n\x82V\x9f\xe4\x13\xd5\xf8\x9a\xb2\xb1\xb1\x93P6\x7f\xf8\x13\t%\xed\xcd\xccF}\xcd\xffo\xaa\x84Byk\x90\xa8\xad\xf4\xca\xf5\xc7o\x7fzU\xdc\x91\x1b\x1bS\xbd\xe7\xe6\x993\x8d\xbdn\xe3(lP\xf1\x06\xbf\x8a\xc2\xba\x15\x7f\x7f\x92\t\rQ\rM\xd8\x17x\x161\xaf\xc2\x92\x81\xdeu\xdeL\xec\xbf\xf0{\x81\xcd\xf7\xc4\xcd\xc0,\r\xeb\xea\xc3\xf5{$X+\x07r\x85\t\xd6\x91\xd4\xcb7\xe3\xf1\xf2\xac\xb9\xfef~\'$\x95\xfbysIS\x80\xb47\xe6P\xf7\xf0\xf4\xf8]\xa6\x9f\x8e\xe7\x93J\xad\xad\r\x16\xa9@|\xd87\xdb\xa1\x1c\x1a\x88)\xa2\x08]l\xed\r\xb0\xf7\xb3\xca\x05S\xd3\x0fD\xb38\xae\x7f\xce6{4"\xe6\xc54t\x884\xd7PD "\xd9[\x12gx\xc7`\x1c"81\x19\xd4%\xe6\xb4\x07Lg\xcfI\x8e"v\xd8\x80\xb45\x05&e\t\x9a\x05<$\xf6\xa8\xcavR\xf8\x8eX\xda\x9c\xcfV\xb6\xa0\x08U\xcd\x9d-\xaa<\xc1J\xbf\xbe\xfa\xca\xa66\xccHc\xbd\x91\x9bX]\x83/p\x13\xdc\xb4x1\x1e\xce\xae\xc7@\x0b\xa9\xf6CC\x8fc\x86b\xcd\x9d\xee\xfb\xb9\xb7\x9cA\x85\xf8& e\x7f\x88\x14\x83\x19\xaeE\xb8\x07\x17{\x1d\xc5\xbc\xa2\xb0B\x01\xd6\xd8\xf3\xa4\x84\xb9B|\x0b\x88L\xc4\xf79@\xd3\xc2{!6\xcb\x8e\x8d\x02\x15R\xa1\x05iTa\xf6\xc8\xe9%\\\x85\x8e\xa4J\x10\xd4m\xd9\x03\xe9{\x15\xce\x12<M0\x9f"\xa5\x1d8\xc6v\xd5\xe2_@\xde\xa6\xadD\xdb\x1557\xa2\xa3\xf8\x0fb\x88\xdc\xfa\xea\x9bG\x16g/\x12\xb7\x06\x85\xcb\x17\xd3\x7f\x8b\xf8\xd3\xc5?u\xba\x88!\xa7\x98\x84(\\\x9f\xc8q\xeb\xcfnY\x87tKa\xe3\x93\x10\xc0!y7nL\xc5\xd8\xa5@\x89\xfe\xa2\x89&\xe8\xf7\xc7\xd2>\xae\x7fx\xa2\xf0\x835\xcc8\x7f\xe8\xc8\xa3\xe8\xa6;\xfaZ\x83\xd2\x97\xca\xfd7\x8fK\x8bZ\xe3\xb1\xa0\xe8\x08\x15\x04gK\xd0:\xbf\x8d\xb9Dl2\xa3\x13\xfd.\x06Xm_\x99\xd1)\x84dE>\xf0\xda<l{\xcaC~;;\xd7\xeb\x089%v\xa1~\xb3\xce{"\xc8\x1a\xec0\x92\x1dF\xd3\xcfI\xe3P\x84\xd2\xa4\xb2\x04N\x83\x9b\xf3J\x89u;]\x03\x1b\x97(\xdb\xe9\xcd\xd6?QA\xc3\xf3\xfd9\xfbXD\\\xfc\xe9=.\xb8\x12\xb9\x93g\xcfG8H\xa6\xea\xd0\xb4\x81\x8e&\xadv\xe1\xe4u\x08\xc0\xe5\x8dS\xdb\xaeq\xb2_\xe8\xdcu0\xae_\x06\x05\xdf+\x01_3/\x9bbE\n\xab\x1a\x89\xb4jH\xc4\x03\xfd\xa3\x0e\x96\xb2O8\xd9.\xff\xadG\xe6EA\xdf\xf75\x8e`a8\xbeac\xca\xdc\t\x7f\xf4U\x8couG\xa9\x94k\x9fV\xbf\x15\xe1\xfd\x8f\x0c\x0b\x96AJ\xad5\x01\x8b\xaf\xbf\x96\x1a\x02W\x99\x19\x9b#\xf5\xa8\x9f$\xcf\x82\x8d}\xae\x15Uc\xcc\xea\xf4Ucd\x90\x88\xae\xd1[\x08\x9c\xc9\xe6}b\xe1\x87\xf3\x10\x9b\x07\x08\x13R\xe4VI\xc8\xf3\x10o\xe8\xe9\x16\xe9\x98]\xf9\xddF\xeb{\xe8\tZ\xa3O\x1d\xdb\x95H\x04v\x1a\'\\\x81\x8a\xd2?\xc8eH\x16\x9b\x86\xb2\x9b\xd3\x04\xbf\'.\x18.\xb7h\x85<\x8a\x1c\xf5\xfa B\xe6:\x90\x0b\x97\xee\xb5\xa3uS\x0f,\xb6\x8c\xe4|\xd1\x98\x00\x00H\xf3\x88\xbe}MS\xda>\x83\xf3\xee\x14\xb4\x9c\xf2\xf59+\x9a\xb84\xf7\xb9\xa98\x8cV\xf9\t\xeaH\xc1\x98k\xafU\xaa\xbd\x7fU\x11M,^\xe3\xb2@3PK!\x92\x90a\xa8,\xd3\x03\xec\xe8\xf5S\xde\xc9b\xd7\x0e\xf2\xfc\xff\x84\xee\x1dG1<\x17\x8f\xe8\xa9\xa3\x16\x86\xe0\xa5Lg8K\x9bV\x1e\x1f\xc2\xbf*O\xad\xfbv-z\xdd\x9e\xcd\x045)\xa1\xf9\xa9\x9a\xcdn)\x90\xd3\x80B\xf8)g\x87\xfcZ\x02\x99\xf7\xd2\xd7\xe0\x10\xe0\x1e\xe9\xc7Ki\x91\x05]\xf6\x8e\x11\\\xddCKUQF\x7f\x7f\xdbTnB\xbfq\xaa\x89\x85\x1d\xfc"p\xb5\x9f\xf8\x01re\xba\xe1\x94\xe8\xea\x8aTVE&\x89_<\xc8\xe0L\xdb\x7f\x8c\xcfH\xd9y*\x1f\x17]\xc5wy_\xb7o\x8b\x80\x82\xeeF\xb7\x92\xec\xfd\x06\xc6PV')
1
+ from . import bot
2
+
3
+
4
+ @bot.message_handler(func=lambda message: True)
5
+ def not_handled(message):
6
+ bot.reply_to(message, "We can not understand your request")
7
+
8
+
9
+ @bot.callback_query_handler(func=lambda call: True)
10
+ def update_usage_callback(call): # <- passes a CallbackQuery type object to your function
11
+ bot.answer_callback_query(call.id, "Incorrect callback", cache_time=1)
4
12
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
13
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product