hiddifypanel 3.0.0.dev63__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 (72) 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/templates/config.html +1 -1
  32. hiddifypanel/panel/admin/templates/proxy.html +2 -2
  33. hiddifypanel/panel/admin/websocket.py +9 -3
  34. hiddifypanel/panel/admin_2.py +33 -3
  35. hiddifypanel/panel/asset.py +17 -3
  36. hiddifypanel/panel/cf_api.py +35 -4
  37. hiddifypanel/panel/clean_ip.py +125 -3
  38. hiddifypanel/panel/cli.py +172 -3
  39. hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
  40. hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
  41. hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
  42. hiddifypanel/panel/commercial/__init__.py +50 -4
  43. hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
  44. hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
  45. hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
  46. hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
  47. hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
  48. hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
  49. hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
  50. hiddifypanel/panel/common.py +98 -3
  51. hiddifypanel/panel/custom_widgets.py +71 -4
  52. hiddifypanel/panel/database.py +18 -3
  53. hiddifypanel/panel/hiddify.py +655 -4
  54. hiddifypanel/panel/hiddify_api.py +70 -3
  55. hiddifypanel/panel/init_db.py +393 -3
  56. hiddifypanel/panel/usage.py +85 -3
  57. hiddifypanel/panel/user/__init__.py +25 -4
  58. hiddifypanel/panel/user/link_maker.py +416 -3
  59. hiddifypanel/panel/user/templates/home/multi.html +1 -1
  60. hiddifypanel/panel/user/user.py +233 -3
  61. hiddifypanel/static/css/custom.css +11 -0
  62. hiddifypanel/templates/500.html +1 -1
  63. hiddifypanel/xray_api.py +109 -3
  64. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
  65. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +69 -71
  66. hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
  67. hiddifypanel-3.0.0.dev63.dist-info/top_level.txt +0 -2
  68. pyarmor_runtime_000000/__init__.py +0 -4
  69. pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
  70. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
  71. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
  72. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,19 @@
1
- # 2023-04-08T15:11:21.807466
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\xd9\x07\x00\x00\x12\t\x04\x008\xf8\x14\x8e\xf7\x1b\xd7=\t*\x9d\x90\\f/\xe7\x00\x00\x00\x00\x00\x00\x00\x00%nf\xaa\xc6\xffV\xa9\xf1\xdeP&\xdf*\xd4\x86\x84\x16\x15"\xdb\xa6\xc8\xb1l#\x0be\xf0\xa5\xc15\xa6\xfb\xc1\xcf\xf48\x97\xc8h\xe9\xe2\x1b\xa7\xc0\xc8R\x8bP\x0cQF\x99\xcc\x8a\xe0n\xbf\x02\xeaj\x15\xcf\xd4+O\xc7\xb5d\xb5\xfc\xe2j7\x9e<W\xeeD\x05\x84A\x9b\x84m\xb1\xd7\r=\xb8\x9c\xc8\x85\xbe\x8e\x97>\xb0\xfc%F\x83l\x11\xef\xef\r<(\x91\x0c\x86q\xa8V\xb4;\xf6N\x9c\xaf\xd1X\x9du\xc4\x8f\xde\xa0\xb3d\x8f\xf2\x04\x0bi\xf2\x8c\x8e\x03oLlT\xd7\xc5\xe1<\x10\x7f\xa9\xa4\xa5N\xda\xc6\xc1\xe2\xd0\xfc/\xda\x00T!\x1eXF\x0b:\xf6p\xfbxF\x93\xdb\x17\xbf\x9dT\x94\x98T\x8e0\x8f\x07\x11$\xfc\xb3q}1\xb2\x86\xc3(A\x96\xf8l\xde\xa2X\xeb\xb21\xef\x1aB\x14\x12\xef\xa1[N~S\x7f\x8f*\xf3\xfc\x12\x1e\xc8\tg\x12K\xc0\x0c\xddZZ<\xf0:H_\xff\xa1\xcdM\x9b\xb0+%\xa6ZF\x0c\xab\xa5\xac\xab\xdc\xc7&A\xcc\xd83v\xe3s \x8fm\xf8\x1c\x0c\xf59\xa0~(\xd30g \xe0\xbfU\xeeB\xf0F2\xfb\x1d\xd8\xd1}\xa2\xda\x9c\xccG\x96M\xdfjS\xbaZ\xba\xae0\xfa\xf7\t\xbc\x14d\xbdn\xb320\xec\x9a\x03\x81\x1d^\xc3"$j\x94\x83\xa0lH6\xb0ph(\'\xc6\xa2\x19\xd8\xf6@\x12\x11\xe0Y\xcfU\xaa\xfe\xa2\x93\xcc\x91\xcbk\xb8\x12\x17vP\xb6\xaaB\xa7\xbc\xf8\xad\xa3_\x0e\'\xec\xca>5\xcb\xe3\xad\xb4\x12\x90\x88\xafq&\xa5\xe9\xe6\x18]b\x13\xc0\xd4\x932\xd9\xc6\x08K]k\x0b\x87\xd7\x02B\xf7l\xac\x84a\xcd\xbaUry\xfa\xc0\xea\xa6\x97 \xfep\x9d\x040\xba\x8aj\xa1z\x04\x84\xd3m\xd7\xe8\xc8?\xf3\x9e\xa2\xfe\xc2S\x12\xf3\xa0\xef\xe0\xc5\x97\xc5\x1c\xfdL\x83\xbd\x83\x11%c\xdf\xf2\x98?\xbe\x80\x9c\x0b\x172\x9e\x0fN[\xa8)\xd9\x1a\xa5ja\x82\xb6#>4h\xe4\xdc\xc9L\x1e4<81\x15\x88\x16\xc21\x8c\xc7\x1a\n\xb6\x9e\xb9\xc9\xe2\xbd\xfd\xa9\xce\xd3Zj\xfc\xa6\xa8\xb9\xcd\xb1\xc4 ^\xb7\x90\x03\xe4\x1a\xbd\xa2\xe6\xc01\x99\xe0\xcb\x8f^I\xdee\xbb\x87\x1cE\xb2\x8b\x03}bP\xff!\x94B\xb9A\x06/u\x91p\xc7vE\x8d\x9d\xdf\xa0D\xb9\xef\xb2\xb2\xaaEt\xfc\x86k\xf5\x0czg{\x1c[\xe9\x95\x8a\xef\x92p\xe7\x1f\xf2\xe9z\xe5\xfcZF$\xc7\xb5)B-\xed\xd1*\xea\xea\xbc\xc7fI\xcee\x90e\xa8Wx\x88\x98\n\x9aQ\xf2\r\xd6\'\xaa\x92\x86t\x9b\xf6\x03\x85i:D\xd5Z\xc5{\xcd\x8d\xbd2NA+\x12\x10\x08|z/\x0bI\x83\xb8\xa5{\x82\x12ji\xb3r\xa2\xf9zTq\x0e\xdfd\x8as\xfc]8S\xe5\x141\xd4\xd9\x91\xba\xebf\x07T8\xe1\xac\x94\xa7J\xeeL7\xad\xceC\xe0\xf6(@\x11\xde\xab\x9f\x13\xdf\x1f\\_:\x9c\x8bY\xa7\xbb\x8f\xf0\xb9\x99\xfc\xcc\x15\xe1\x81\r&\r\xbc\x86\xb7\x83\xae\x9a\x00\xd0\xb1\xc3\x10%\xb4\xac\xa8\x0f\x1e\xab\x19\xa8\xb8\xc2=\x90k\n\xf4y+8\xf3\xaa\x94:\xb3J\x87?\x12\xa7#\xdf\xe5\x07bQ;\x17\xc0\xad\x19X\x99qp\x9f6\nC/\x10\xa5\x96\xcc\xa3\xf2\xe5 \xb5:@\xbd$\x8c\xc2dc\x8f\x97B\n\xdb1\xe1\xc11a\xba\x1e\x9d_a=\x8aVt\xb1*\xbe\xab{5\x02\xe8\xd8\x83C@4\xfe\xcc \tx<H@.\xde\xb6\x9c\x12\x11\x89\xebOI\x9f\xef\x07uy\x86\xcdmL\xaas\xf9~-\xe2\x88k\xf0\\MT\x840Z\xa3XO\x93\xda\x9f\x95A\xb0\x18\xb5C|\x9f/\xd5\xa7~\x7fY\xe6\\\xf8\xb8\xcf\xdbE=\xee7RmB\xe0\xb2\xf0\xa6\xcd\r\x9dP;\xb8\x90\xc5bc\xf2\x9aG\xc5uhr\xcc6y\x12J,\xd7\x0ce\xd5\xfe+\xd5\x1a\x9a\xef\xc2*^V{\xfa\x84\xe6\xdb\x17\x98\xc1\xaaJ\xa7\xbblw\x13\t\xec\xe17\xa2&|X\xef\x89B\x00\x05\xda\xa3\xca\x10\xec\xfe\xf6RU\xea\xf3\x9b4J\xb6e\xc6\xce\xcbQd\xad\xb6\x1ar\xaf\x88\x80F\x98#c3\xb56\xd6u\xcaq\xf5\xc9t\xe8A\t\xe1%\x1c&\xd3=Z%W\x9fW5J\x8e4\x86\x92\x1f\xda\xc93\xca6=|\x00\xac\x8e\x1c\xb1\x19\xb2\xba\x0en\xf5\r=\xcbA\xd3(\xe1x\x85\xae~2\xafz\x05V\x1c\x9f\xf7\xa3\x87\x8c\xd1\x9f\xd1<\xbe\x92\xd5\x9a\xfcG\xb4q\xe5\xc4\xa7X\x98\x85u\xdd\xae\x97\x14`V\xb8I1\x899\xa9\x91\ra\xef\xe6\xd8\xc3\x883$9w\xbd\'[~\xfe\x0b\xddk`\xd4\xa3\xc8\x19\xd0\xfa\x02\xe9\xc0\x16y\xfd\x15\xc6v\xd1\x8e\xbbi\xbeRw\x8ag\x83&\xf0\xa9\x0e\xbc\x1dk\xb1\xea\x97\x02\t\xdb\x03\x13/)\x9e\x1aw[Uq\xf7\xfa\xa4\x05\xed8\xfb\xb3\xf6\\\xba\xa3\xf2\xfa\x80\xfe3\xdaYq\r\xe8b\xcdh+\x03\xaeV\n)7\xb7Lg,\xd6\x86M\xc0\x8b\x85\xc9\xf9G\x07\xe0\x04\x95gR\'p\x02\x99O\x9e\xf76\x84\x1ae\x19\x1d\x17\xa7)(KQ\xe6\x12\x1b\xbf\xbeV\xffC7K\x01r\xcd\xbeC\xede8\x87\xed\xca<\x8ce\xf4\x19\nf\xeb\x96#5\xdd\x91\x7f-G\xad\x89\xc7\xb8\xcbjFD\x15\x9c\xd9\x08_,\xf6\x0c\'S\x01\xad\x93\xc3\xe55\x1d\x85\xd9m\x1e\xf8\x19}\xcc1\xc8\xa0Ts \xa1\x86V2Jb\xbcL%D\xa0\xb8\x88\xf3\xb7\xb8\x18\xc2\xf0\x10\xf0\x85\xb8D\xde\xc2Wr\'Q\x8f\x9d\xf3D\x93\xa7\xf0\x03_\xb9~n\\\xd6\x18\x1bTw\xd9\t\xba\xc7/\xaa\xb8\xb4\x1f`\x94\xd6\xeb\xe0&\xf3\xb8c\x07\xb4t\xe4v\xbc[\x00\xc64\xedH~\xfet\x0fN(Z\xe1Lq9<\xd9\x04\xfa\x11\r\xc3 \xc5\x99X1f\xf7I\xb5\x97Btx\xd2\t\xde\xdc2\x8f\xdf\xaf\xeb\x91X\x88\x9eQ\x0b\xff\x1c:\xa6\xda\xabP1r\x85>\x08\xc1\xa4O\x03\xa0\x0f\x8dO\x7f\xe3\x89cD\x8e\x17$\x985\xa3W!\xf1\xd2!6\xbe\xc5Rm\xf0\xcd\xe76\x07\xe2\xd6-n\xff\xcd\xccJ\x94\xf6>\x16\xdb!\x1b\x89\xe7\xb5\r^}J\x85\xab\xcam\xb4\xd6L\xa2\xe9 +\x0b~\xa1\xfe<\x01L\xcb\xaeJg\xe3\xcf,\xdc\xe9L\xb1\rk\x1cPU\x00\xa4\\\xb9\x0fV\x98\xc0tr$\x91\x99\xed\x8e\x0f)\x08X\'y\x1c\x16\x1dy\x0evr\x122\x06\xe4*n\xc2\xfcBg/\x8c?z\x90-\xd2|7HX\xde\xee\xa8\x7fLX\xbd\xaa\xdf3e\x10\xe6\xe7\x8b\xae\xa3!\xb8\xc56\\\xdc\x9bE"\xda\x7f\x82E\x8d\xa9V\x1b}\xf9O\x11.O\xe2\xfb\xbf a;;[i\xb0\x82\x17\xcb\xbe@\x0be[\x13\xf9&\xcf\xb3\x10\xe2# I\x02\x14G\x99\xdbq\xb3"\xc6\x8f\r\xdfi\xd9\xfd\xddH\x85&m\xcaJH_#uA\x95\xfb\xc9L\xb0\x8f\x86g>\x9c\xd6\x00\xb8NiS\xde\xc3\xf9\\\xf0\x8fG\xa6X\xd8w\x82\x0c\xf6I7m\x9a4\xee\x0c\xc7\x0bc\xd6\xeb\xfco\xae\x9e,\xaa\xf5bQg,\x85\x15\x8e\xb3k\xd3+\xf5\x1b+\xff$\xa3(\xc2\xab\xf0>\xefNj\x8a\xff\x99\xc0\xab\x15\xc2P\xe4 \xdb\x17$\t\x88|\xc0\xd1\'"\xecM\x842\xcc\xd2\xa8\x02w\x1b?\x00\xb5\x94\xb8\xf3Y|#\xfd\x9c\xdf\xbfa2\x96\xfcVG\x06\xb4d\xe1\'\x80\xbd0\x97\x11.3\xccy\x0e\xa3I\x99\xc2Q\xa2\xb3\xf5Y\xed\xf8\xd0\x91\xb9!\x89BL\xe2\xa4W\xe2\x01\x1d\x98~\x1b[\xad\xe0\xear\x8aI\x1be\xd5&\'\x80\xdb\x8c\xe3{\xb8\x8b\x98\x98^gq*\xdd\x01;\xfe\xee\xb5\x83Q\x01\x04y\xa0\xc3b\x1b\xe0\xf1h\x10\x7f\x8a\nu\xc9\x8c\'\xb3Oc\xf4\xdc\xc0\x16d\xd8\xc8,\x1b\x00l\xceVa\x1e\x95\xf4J\xb9\x19\x93\xed\xc8-z\x80f!\x87<\xb4\xd1\xa3[\xba\x9b\x8c\xc6-\x17\xb5\x81\x08+\xcc\xc1\xc0-\x10\xc1\x0bC\x1e\xa8\x8e\x9a\x01\x8ak:')
1
+ from flask import g, send_from_directory, url_for
2
+
3
+
4
+ def send_static(path):
5
+ return send_from_directory('static/assets', path)
6
+
7
+
8
+ def init_app(app):
9
+ @app.url_defaults
10
+ def add_asset(endpoint, values):
11
+ def get_asset(path):
12
+ return url_for('asset', proxy_path=g.proxy_path, path=path)
13
+ g.asset_url = get_asset
14
+
15
+ app.add_url_rule('/<proxy_path>/asset/<path:path>',
16
+ 'asset', view_func=send_static)
17
+ pass
4
18
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
19
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,36 @@
1
- # 2023-04-08T15:11:21.695639
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\x11\t\x00\x00\x12\t\x04\x00\x1bb\xf1e\xd09\xb5\x1b\x9d\x1e`\x1e{\x9c\xc7\\\x00\x00\x00\x00\x00\x00\x00\x00\xc8\xec\xd5\xf9G\\Y\xf1\x0c\xd3\xed\xab1\xa9\x86\xa2\x90\xed\xe8\xc9\xbd\x1e\xbd=z\xc6k\xe3A`[\xa6j\x1a\xa8\xb2w\x8e\xa0/\x88AS\xb9\xda\xbe\x1d\x0c\xcb\x02\xd4\xd1\x1diVb\x9d\xd7\xee\xb5\x90\x13\x99\xd2\xbf\x14!DT4\x89\xb2F\t \x97\xc2;&~`\xcf>\xd7f\xe5\x19\x86\xc4\x12Q\x8a\r\xc1 \xf6b/\x01\xe9\xda\xa6`\x18(\xdec\xe7`/N\x86 \xc3\x80\xa4\x106\xb52C\xcb\xed\x13\xd26\x90\x9c\x9d}\xb4K,x\x18\t\xdf\xf8Y\xf9\xa5|\xea\xa4-^\x81\xfd<\xdek\x85\x0c\x08\xf3\xa0n\xa2wP\xd9\xd7\xb5g0\x93`6\xe6\x96t\x0f\x9c\x9d\x85\xd4\xd0^x\x18\xb6*7\xcc~\xe0\xd9*/dZ>Z^s\x9c\xf6\xbd\xa1\x1d\x88\xf7\x8d\x1f/J\xf0q\xc0\xca{\xeb\x80\xbf\r\xdc<+q\x1b(\xee\xf1\x07ce\xbf\x97}M\xaeVI\xbc\xd0\x98\x0b\x02\xb3\xbc\xad\xcd\xf63\xa3p\xfe\x7f\xeb\xfc/\xb1\xbe`\xb2\xdf\xf9N\x1e\xff\xe8\x14\x9bW\xf8F\x92\xd8\xea\xc0\xd5M\xff\n\x0b\r\x14\x9e<!\x8b\xfc\x00M\xd8Dd\x1fb\x13Qf\x02"\xb2\xba\x87\xebw\xb8,\xa8\xa4\xf8\xe1cx"\x7fE:T\xd2\x84\x0b:\xb7\x14\xa8\xfe\x1b\xa8\xd1\x97\xc3\x03\xfd\xfc\\\xaeR\x92\x1d\xa5\t\x08"X\xc8,\xddb\x1c\xf0\xaf\x9d\x82^s Tw\x13!}\x85\xd5\xa2\xb1\x98\xe5\xde\xd1\xb4.\x13\x12\xd8\x19\xe0\xd5RT\x88Z\x88%\x8c\xb8\xb6km\xfeg\xc9\xfd\x0bO\x188\xc1\xe8\xdb\x8cx[\xde\xe5\xa9\x8f\xe6\t\x13u\x00\x04\x01\x04M\xeb;\xa0\x84>\xc4P&m\x08\xb2\xdd\xf0|{\x11\xb0\x15\xed\xccC:Hu<\xa0hk\x02rC\xf2&~2n\xc5Dn~tJ\xd4N\x07(G9<\x88\x83\x83\xdbb\x1e/\xcb\x94\xc7\xfbZ\xff\xa3U\xf8\x14\xf4\xef\x95\x95V\xbe6t\x06X\xfcCT\x05\x9c.$^ObJ4\n\xf4\xb4 M\xe6\x99\x02\x98\xa53in\x93X\xb1\xc9t\x148\x17\xf7\xc4\xc3\xa9\xe7c\xa4\x17!e\xf3\x90\xaf\xa7\xb3GE\xfd\x16U&\x9a\xec\xb1\xe9\x9e\xee\xe6g\xd6\xeb\xc2ut\xcc.\x9f\xb4_\xd7\xa4\x14\x16\xba\x83T_yvt.\xb0\xfa\x1ag\xa4\x88\x85\tq\x18\xf3\xd1.\xf1\x9d6\xb5\x0f\t\xaf\xef\xb8\xcd\x06*\xe6\x902\x8e\x9e\xf13K\xf7GA^!L\xac\xc0:\xff\xdd\x15+\xc2\xc0rrV\x15(\x18\xe2\x17}=\xcby\xfc\x10tb)\xd5\x98\x84\n\x9f\'\x07G\x9b\x92d\x94>j\xc3j\x8cZ\xea<9\xa8\xf6\xc3\xfaF\xe2\xc3\xc5\x1b\xe8\xcfr\x12\x8fd\xf1Rs\x7fZ\x9e\xc6\xd7\x00`\x97U&\xa6%\xa9\xfb6\x06\x96E\xc4\x96\xb9~Q\xb1\xbb\x1d%\x86\n\x07C\xb3-\xb6,\xf9\x95\x00\xa4\x11\x9dpz\x96\xd1\x13i\xe5{Wgkc\xd8_h\x85\xd3\x10 \x1e\xf8 \x9dV58z\xdfO\xbe\x82\xfc\x1945oLe\x16\x00\xf2YWC\x9e\xa85\xddON\xd4\xaa}\x0c*\xb4^W\x02O\x00d\x02\x1e\x9c\xc6\x19/a\xe7\xe2y20\x1c\x93\x1f\xee\xce\xd8\x9c\xbaFE\x13\xef\xb0\n\xeb\xd0\x0b\xe5\xeb\xd7\x1c^\xf0\xb6\x12\x99\x81\x0c\xcc\x12T*\xd0\xac\xcb\x14M\xcd\xf3\x83\xe0\xb7\x9d\xd6\x89\x8d\xcam\xe2\xb4#\x01\xfe\xfd\x84\x9a\x06s\x03w\xe4\x9e!\x81D\xa0$>;\xad\xcb(\xb90\xb9\x1f\x1b\xf5:\x10\xf2;h\x1a$*\x18\xfe\xd7\x95ZT\x99\xd3\xf0\x8a>Z7P\x84\x80 \xc22\xff\x07C\x08\xd5\x94\xfd\x02\xab\x89\x05}s"\xcd\xcb\x0c\t\x99\xa0D\\O\x9c7\x92\xb8\xdcV*\xa4g\xd1\xe6\xbcZKPD\x15A\xdaj\xa4\xa5u\xd4\xfa\x9cb!!y\xed\xae \xcc\x97\xb0.\xb7\x8a\xba#]#\x0e\x8e\xee\xac\xd4\x87\xa0\xcf%\x861v\x08\x04y\xe2_\xc7[\x1d\xcdsR\tu-\xc3\xcd\xda\x17\x19\xc8@C\xcfd\xc5\xf4\r!d }@]\nY\xd0\xa7\x9f`\xf0G\xa4Z/>\x8f\xa7\xca\xa2a\xf4\xc8\xce\x18_\x13\x9b\xc1H\xa5\x01\x8b\x901\x99\r\\#\x19\xd1y\xc6\xacC\xf1\xdd\xd9\xb9\xdev\x1aV\xae\xd8\xfdc\x83\xe7\x07\xf8g\xd1,\xf6\x00\x00\xd7k\x81\xdf[\xe6\x06\x07\xd7\xec\xe1\xc7\r\x80}\xe8m\x11\\\x19Y\xb7\xfd;blB{8X\xd6\x1d[\xdb[\xa6.9\x1a4>D\x88\xcen\'ro\x88\xa5\x12\xeeHn\x96Pf\x1eh\xc6fr\xcb\xd6\xbbw1\x08-\xbea\xc1.&]7,\xd8\xb5 \xbcx\x1d\xc8\xd6nn\xf6\xb3s\xda1\x8c4G9\xa9V\xc2C\x80*5\x93<d\xb5~\xf3\n\xd4\xf8\xe2r,*\xc8\xeeA<\xb3eC\x81\xc6R\xc6\x01\x1f,%R]\xa5\x10\xa6\xcc \xaf\xd2\xdd\xf3\xb0R;\x88\xb1^R\xcb\xf3y6\x85\x19\xc3v\x83\xecA\xaf\xa4\xf1\xbe\xf2\x1d\x03S\x03\xd9\x16\xd5dI\xca\x13\xb2\x1eL\xe8\xd3\xe3\xfeA\xbf\xa81\x92\x90\xd7\xce\xab\x137\xa8h\xbd\x83\x18\xc6p\xc56\'\x08\xc5\x91\xf2t{z3\xbbRl\xd4`l\xe4\x97@\xc1\xa8\x88C\xafl\xb5D\xd9\xf3\xfa>\xdf\xf3\xe3\xbc\x0b\x9b9]CRq\xc3t\xdcB\x1b I$\xcb\x9a%\x16\xbf\xe8AD\xa3\x96\x1e\xe8L\x9a\xf1\xe0\x1b\xe7omAV|\x93\x9f\xa9\x07!\xbcm\xf7\x92H>u/`\x11\x82^7\xcenE\x89G\xdaU\xd2\xd7\xb6\xd6E\x0b\xd9\xa00\xd4J^\xa1\xe1\xe4~\xda\x98\xe3\x88\x8a(\x8d\x07\xbb\xeb\x0c\xbe\xd5a\xc0G\xb2\xf4\xc6\xee\xe8\xb0\xcd\nn\xc3L\xb3\xe0%\xf2\x0b\xd6\x83\x86\x0cB\xab\x8d.\xdf\xbd%\x8a\x19\x86\x97\xe1<\xe5:\xa8\x9b:-N\x9a\xb6)UlUr\xba\x0fBI\x8e+\x11\xf7m\x99_`#\xdb\x92\xd8\xd4\x0c`\xb5\x13\xa5i\x91&L\xb6/\x96,\xf5C\x1ae\xffo\xb5\x93Y\xfd!\xd3\x18\xde\xb1%i\x84\x941\'L\x02\x06\xa1P\xaa\xf4\xbc\xdc\xc1a2\xbal\x1f\xbc\xc7\x17h\xb0\x19\xc3\xf2\x94\xf1\x9d\xcapB\x02\xf38\x1b\xc79\x1f\xe4\x9f_\xa6V\x05zv\x17\x98\x81>zy\xa6\x05\t\x8632frNN\x92\xe7\xed5t\x9c\xc2\xf7\xfc\xc1\xabc>\x9d\xe2W\xa8l3\x9f>\xcb\xf4\xfaU\xef\xa3\xf7\xbb\x14*H7\x1e\x92\x8a]\xf5\xe7\x0b\xfc"\x1d\xc3\xa0m\x0f>\x1e>.\x04\xea5\xe6\xa0C\xfc\xffE\xee\xc9Z#\x19\xa0\xc8\'xe\xcb\xbb\xb7\x8f\xf8%\nk#\x04\xcc\x07\x08C\xe6\xe5\xa0\xa3|\xe91\x0cC*\xc89\xe4\xc2\xae\xa3\xf5U\x05M\x1a\x9c{\x8b\xba!\x13\x88(\xd6K\xe6\xc8:\x0emz\xf6\x1d\xf6B.\x191^Q\n\x96\x91\x1b\xcdj~sB(\xf2\x8fu\xf0p\xa6\xc1\x15\x90l\x91\x18\xa7\xef\x80\x8d\x0cU\xc8\xc2\x05\xd6\x12\xfa\xfe\x80kU\xfd(\x0fF\xd0g\x12B.a\xe1K\xacnL\xd9\xbal@\x02\xd2\xaa\xcd\xaeMB\xa3Y"\x917\xb9\x1c\xefe\x7fRw\'R\x14\xc3\x9a\xfc\x0e$\xbaG|`\x8f\xdc\xa0\xa8PV\x85\xff\xf3\x93\x98\xfb\xc0\x90\xc0_\xb2R\xc4\x11\xa0\x7f\x90o\xca\xda\xd55\xab\x04\x1f\xc8\x88?\x12lG-\xabD\x14\x8c\x98\x1c\xa1\xd5\rv\xa4\x1a\xbbs\x1a\xd8\x10\x8b\x80p\xbf\xc6\xaa\x19\x14\x80\xfdMf\xf3Oj&p7kF\x00\x904gB\x92z\x14\xafZ\x00\xba-\xb1\x9a\xf9\x9c,\x15\xb6?\x1b\xbbu\x9c\xb6\x03\x07\xaf\xb6a\x17b\x1b\x15\x8f\x18\xd8\xe1\x03l\'\x96y\x19z\xe8\xeahV\xf6?\x19`\xf44tQ\x1fLi?\xc2\xff7N\xb04|\xc5\xc0\xb7Ro\xfeg2e\xb6\xc9\xd5\xce\xd6\xe5\x91\xe4U\x91 \xcaU\xe6\x87\xa2\xd3\xef\xb6s_\xad\x8a\xbe>\xdfJ\x1d\xc02\xe6\xf2\xae\xc37\xff\xbd\xc4\xc20\xfc\x0c)\t\x9e \xd8\xea\xff\x9d^1\xc7\xb3\x8c\xd9\xd1\xc2\xd2\xc24\x90\x06\x16\x9b\xe2>P\x11Iu\xd8\x1f1\x15\xc1gN\x81\x1c\xa8\xce\x07\x95C+\x16v\xe2%\xc4\xdd\x84\xbd\xc1\xfdX\x98\xef[d\x90\xe6\xdaw\xac\xf0y\xfd\x05\xb6S\xc4\x06\x06\x9e\x18gG\xe7)h\xbb\xdc\t6\x86\x90.\x1d+\xe7\xcb\xdc\xfaR\xf1\x98\xfe\x9eF<\xb4@\xb5y\xea^\x16\x81\xff\x9a\xe5\xcb\x8aI\xb1|H8e\x8c\x9f\x11s\x7f\xc6\xe3Y\x88\x7f\xcaCACi\x0b8\xa9\x13\xed(s\xba/^zf\x0c!tr\x12\xae\xcd\x11\xa0\xfe@+\x01Sz%\xe8\xfb)\x1a\xa4?R2\xb9<\xb3\x84H\xbb\xd1\x94I\xd2\xe3\xff\x18\xf9\x0fyas\x86T\x00\xce\xeat M\x88\xd2\xe6\xae\xd5|\xae2\x9e\x04\x1e\x97\x9b\x84\xfb\x86$\xae:\x85\x84ry.1Q\xf6\x10\xd7\xfe,\xc1\x04\xe7ye\xa3o\xef\xea\xb5\xb7\x0e?\x89\x9cJ\x1f\xda\xa5\xb4\x1a\x0b\x0f\x8e\x01\x8f\xe9\xd8\x0cLQ\xbf\x8e\xa8\xc18\xeb\x08fM\xdbt\xc9\'B\xe144\xd74\x999C\x87i\x0b@\xe2BC\x1b\xc2\xd3C9j\xfd\xd4B\xacd\xd3\xcb\xb6\xb3\t\xed\xaf\xc6\xe5~\xc98\xcdSm\x81\xfa&\xa7-i\xe3\\\xe8-N\xa3OO\xf4\x90=\x9c\x81\x8a\xea\x8aN\x0e#\xcc\xfcgO\xf2"\xda\xc5\n2\x83\xfe\xdd')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from hiddifypanel.models import *
2
+ import CloudFlare
3
+
4
+
5
+ def add_or_update_domain(domain,ip,dns_type="A",proxied=True):
6
+ res=False
7
+ if hconfig(ConfigEnum.cloudflare):
8
+ cf=CloudFlare.CloudFlare(token=hconfig(ConfigEnum.cloudflare))
9
+ zone=get_zone(cf, domain)
10
+ if zone:
11
+ dns=get_dns(cf,zone,domain)
12
+ data={'name':domain[:-len(zone['name'])], 'type':dns_type, 'content':ip,'proxied':proxied}
13
+ if dns:
14
+ cf.zones.dns_records.put(zone['id'],dns['id'],data=data)
15
+ else:
16
+ cf.zones.dns_records.post(zone['id'],data=data)
17
+ res= True
18
+ return res
19
+
20
+ def get_zone(cf,domain):
21
+ zones= cf.zones.get();
22
+ res=""
23
+ if zones:
24
+ related_zone=[z for z in zones if z['name'] in domain]
25
+ if len(related_zone):
26
+ res= related_zone[0]
27
+ return res
28
+
29
+ def get_dns(cf,zone,domain):
30
+ dns_rec=cf.zones.dns_records(zone['id'])
31
+ rel_dns=[d for d in dns_rec if d['name']==domain]
32
+ res=""
33
+ if len(rel_dns):
34
+ res=rel_dns[0]
35
+ return res#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
36
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,127 @@
1
- # 2023-04-08T15:11:21.822788
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\xf1\x15\x00\x00\x12\t\x04\x001\xf8\xfc$\xc4\xb9\xd7\x8ayC\xa0\xe0\x8b\xe7\xdet\x00\x00\x00\x00\x00\x00\x00\x006*`\xbbW/\xcb\xc1;\xf4]:Y\x8dQ6\xbd\xcb\xdd:>\x16\xa8\x04p\x00\xf0#\x89\xce@q\x9bU\x9a\x89\xe02lpg\x1cS\\^%Yi\xd2\xb8\x900\x90 \xa5A\xb6\xd6R\xe8\xee3\xd0x\x9b\xa8\xb3\x87rGv\\\x89\x18)\x12E\xd1\x8b\xc6\x07@\xcf1\xff\xcb\x8ce[\x81az\xd3\xc4_\xe9\x0c \'\x0e<\x03\xf8\x1bX,u\xbd:\x00\xddr,\x94\x1f?\xde!Q*\x00z:\xeb\xb9\xb4\xfc\x83)\xf0\xcf\xc1\x8f\xf6N2vl\xce|\xba$\xd9\x1c\x87\x87\xefF\xfa\x05\xd7\x18iNw\xcd\xcc\x0c\x8e\xd6m\x1b\xda6\x08\x8aXd\x1b\xaa\xf5W\xcd\xf5\xcf\xbb\x85\xed6\xe8Ydt\x81+\xd3\xb9\xe6ffZW|,\xfb^*N]\xe4\x00\x11o\x9ek\xbc\xa3\x16\xdc\x17\xf9\xdf\xcd\x95\xa9\xa9\x0f\xe7e\xc9\xddO\xc0\xe1v\x0f\x06ca\xf8\xca|I\x8e$\x11T\x89ei\x1fS\xc0\xde\\\x16\x03\xf2,7)\'\x05\x85\x0e\x0f\xd2\x8c%rO>\xf8%We\x1a\x10\x14\x0c\xbd\xb8l\xf1}\x96\xa2 ?\xd7\xef\xb1d\xcf\x1bBS\xf7o\x03&\xa3\xa3\xf7\xef\xea\xc3\xd2*\xb8\xac\x8a]\xa9K\xd6\xb8_\xee\xba)\xa7S\xdd\x7f9\xfa\xe5g\xca\x012EU\x0f>E\xc9\xee[#\x15\xf7"\xfcU\xf9\xa4\xa7\xf8w\xf1L\xa9\xbb\x8f#\'a\x8f\xafl\x01\xddw\xfcW\x9cl\xd3\x93\xd0\xb7\xdb3c\x18\xf8\xb1\x9ae\xaf\xe9]\xc0\x00\xdf%\xee\xf7\xbc\xf6TZ\x11Ok\x05\xb1\xdc\xf4\xe3\x0f\x98+\xa2\xd3\x90\x8c\x17=\xdfq\xd5?\x03\x19\x8f\xa2\r*\xa48\xa3V\xd6\xa2\xc4K\x80\xb0\xdcoa?\x917M\xd8o\x99\x18Y\xcd\xd8\x8d\xba\xe3\x04,\xef\x91\xd1\xea\x9d\xe1\xc4\x89\xf8\t\xf8\xe9\xde\x86AFCQ\xcd\xf6e\xefZ\xa9\x13L\xcb\xfb \xae/\xa7a\xa0V\xd6\x19\x06\x84/\xa2\x11\xfb\xc1\x03\x8d[\xd6\xb66\xcb$\xcc4\xfc\xdaS\xa6-\xa4q\xfa\xfa\xf8\xcf\x86\x93\xf0K\xe6\x18\xc5C\x84\xe4mF\xbd\xfc\x7fets4~5\x94n\x9aOn\x97\xd0<\xcd6D\xdd\x8c\x83wC\xd3\xf2&U)h\xe79}\xe5u\x88\xc8\x8b\x913J{\x0e\x8c\x90\xe1mJ1Nc)!\xa8h\xe4\xea\x7f\x99\xf4\x14\xe6\xc7\xae\x821\x8c#\xb2\xf8k\xeb\xf4>T\xbd\xf8\t$*\\Czv\x15L=\xafYV\xcf\xa3c;\xe9\xce*.\n)\x19\xcd/\xde\xcd\xe9\x04\xfb\x81o=\x1e\x02\x11\xe3\xa3\x06\xddb>\xb6\x0e\xf1\xac\xf6\x15\x97W\xa0KF\xd1\xe3\xdc\xd94\xf9\xf2\xba\x07\x08\xfcF\xcb]w\x1a\x10N\xb1\\\x86\x06=\x84\xc9i`~\x92;K\xe4U.`\xb2\xbd\x84\x9d\x0c\x86PF\x89\x8d\xe2\xe6\xeecCjBI\x9f\xa4!\xb0\n\xc3\xe1\x88\x89\xe0\x8e\x9e\xf1\x9bD)\xcfW\xc2\xcb\x98\x15\xbc\xc9\x81\x87\x15\xeeY\xb8,\xdb\xfch\x81\xb9\r\x92Zg\xe8/\xe1\xfe\xbe\n\x1f\xe8_\x93\xcd\xa3\xda\xf8\xac\x87\x14\xbaL\xf7\t\x8c\x1fr\xcf\x19\xb1\xb5N\x9c\x82eK\xcb\xb7\x06\xaf\xc2#T\x18\xea\x94UZ\x12T<\xb8\x8c\x14\x99\x91XZZ\xf3\xf6@\x84=\xbbZ)\xce\xc3\xf8\xd9\x01\xa6\xcc\xdc\xb3\xecj\x1f\xb3\x80J\xfd\xc1\xe7\xab\x7fi\xc4\x90b\xab\xa8\xb2\x14m\xf3j]\x12\xdc\xb5\xa1\x7fI\x8f\x07( 7\x10\x9b`\xc9\xffdn\xbc\xd7\xc05o\x83G\xf7\xf3\xbd\x85\xc35G\x7f3\xe3\xad\xc8\xbe\xc4C\x0f\xf7\x9bex\xcdz_\xefGT\xba/)R\x92\x05\xfeO\x91\xba\xfa0\x91\x99\n\x1f\xfc\xf8\x92\x16y\xc4Lb)\xf2\x8f\x9c\x1aO\x17I\r\xbc\xa2\xc6\xff\xbc{\xda\xd45\xd3\x1d\xee\x90\xfb\x9e\x92\x8b\xe2@g\xca\xb3\xceQ\x16.L\xc5\x8cGuk\x80\x98]\x98bj\xb4n#\x02y\xbf\x94i5\xf0\x06t\x19\x05\xb2\xcf\x95A\xe3\xc0\xcf\xd4\xb2e\x16\xf7`\xc6\xf4\xd2\x05\xf4\xf9o\xeb\xa6\x82\xea\xa8\xcaO\xdd\xd7\xd4\x00\x04c?\xf2D3\xbcd\x1e\xd9\x84\xaa\x0bU`\xd2\x96o\xc1\xcb\xd9\xce\x8a\xf2\xb9q\xe7\xe5\xff)A\xbd\xcaZ\x81\x84\x9c)t\x0c\x8c\x8b\xcf\xa8\x8ah\xd2A\x17Z\xfarJ\xdf\xac\x9d\xf5\xad?\xaa\x8e\xea\xa8\xceQQ\x0b\x95v\xc5\x87\x96X(\xad\xf7y\x03\xaf\xf9G\xaa\xad\x15W\x15\x9f\xc2`<j+B\xb1\x84\xb8\x84\x9a\x01G\x06 (0\xeb\rC\xceT\xa0\xd8\xf6;\x8f\xdf\x08\x92$R\xff\x975\xde\x9a\x99\xe0\xe6\x1f\x8d\x8dwkV\x90\x94L2H\x9a6\x02p\xda=\xdep\xc6\xa4\xa8$f\x84Yk`\xe4S\xe6B[G\xbb\x08\xa8\xdb\xf1\xd4t\xd0\x12\xb3=$\xff\x9f\n\xa9cj]\xfd\xd5\xb5\\\x12\xea\xd3\x8e\xf3\xbf\xcbz\xf8\x19\xc0\x00\xdb\x12h\xc0\xcdj\x19\xba"\x19\x98\xa3.Q\xfa\x80\xa7-D\x9dS\xd1\xba\x8b\xae\xd6\x13;Z\xb1\x9c\x93Ll)\xbe\xdd\xcd\xa2Kd_\xaa\xf1\xce{\x13\xdd g\xcc\xd5\xfe\x91\x1dM\xf9\r\xf9\xb9\xd9\xdaj\x13&\xca\xd1\x80Lr\xa3d\x8b\x00K\x80\xe1\x8e.<\x9f,4\xe4\xa0\xe3\x13\xb83h\xc9c!\xcf\x82\xd4\x91qa\xbb\xc0LHI\xd7\xd1\x0f\xbbg\xd4\xda\xfd\xd02\xdd\xed\xc8\xc7\xe8\x8e1\x84\xfd{\xb4\x14\x8d\x8ax_\xe7\x0f\x89\x18\xb5\\\x97UyO\xeb`\xfaS\xf8\x14\xb9\xb9\xbf\x80\x89\xc5\xf2\xfc\xf5\x95\t1/\xf1\x91\xbe\xb2$\xf2\x18?\xa0V\xfd\xc5\x08L\xb7\xb3\x94(\xec\xf6v\x10\xb9kI\x19\x89a\x95\xd9\xf5\x87\x0f\x11\xb8~\x80\xc0\x10M\xadz\xb5\xcb/\'H\xbc\xd2\x84\xe4I\xf4Pn\xc3h\xfd\xdf4\xcc\x8e\x8e\xff\xea*\x838\xec\xf1\x8b-\x05\xa3\x11\r\x9a\xe7\xb6"\xde\xf7\x0eG\xfe\xdf\x88\x816\xd4@2\x9b\x13\x03\xd0v1]\xb3\x13\xdcc0\xc2\xa5l4\xe7\xac\x9e\x8c-N\xca\xd3j\x1b\x00\xab\xa2\x1b{\xc3A\xc7|\xceV\xb9\xb1\xeb\xc3\xd9T\x96\xe3#\xf4\x9d.\x7fUa\x94\xa4\xb2Qba\xbb\xb7\x0f\xf6\xf4\xcbg\x14xS\xadr5\xc7\xf0\x87\xd4vW\xde\xb8}\xd8)X\xd7\x997\x9d\x16\xd2\xc8\x83q\xe4\xaae\x08\xe4\x9b\x9b\xa13\xde\x00N\x8f[H\xe9\xe21\xa7B\xc0P\xd5\xb1\xc1\xddX\x1dy\xa8*\x0fq\x9d\xb5\xf9be\xa0AH.\x84\xd8\xb8TO\xf4w`\x13O\xd7\x17\xb4\x9f\xbcl\x18\xf3\xda\xd3\xda4\x98s.\x95C\xbf\x8b\xb9\x04\xaf\xa4\xf4\xfa\xeer\xd3]\xdfE\x8bn\xd1\xf6XN\x0b\x98p\xd4\x9f>\xd7\xa6iF~K\x94\xa3K\x1e{\x0cc\x8c\xa4\xddi\xc71S\xf9\t\x07\x98^\x93\x14#\x0b8r\xad!b\xbc\x89\xadD\x80G\xa6\xbfYh\xe3\xe4R\xf5\xd3\xfd\x19\xe2\x1a\xfc\xd3\x1ae\x93\x97]\x95F\x86\xae\xe1Z:s\x99\xb0\x864%\xd2\x92\xb5\x84\xb6\x96\x86\xad\xf7 \xb55Zb\xaa\x9d\xccI\xc4\xc5\x94\x1e\x8d\\\t\xaf\xd6\tR\xe4\xc5\x9em\x06\x00\xbd\x91U\xf8\xef\x8a^<\xbc\xa6\x14R\x83\xb5\xe1\xe4\x82%\x88\x87C\xf7\xf0\xdf\xe1mg\xc1\xd7\xd0\x9e\x0c\x15R\x1c\xc3\xae\xf7\xbd\xaf\x10\xc1^\xb0M\xd6\x9f\xe4\xfdF\xd8\x18m\x07LWb\x94\x9f\xaej\xa0[M\xff\xa3\xf2\xca\xc8\xed\xd6\xac\x07\xd8\xe3\xe3\xf7\xb1\x19\xa4\xb4\'Q\xc56\xcbo\xc1\xa1M\xb1\x95\xd6\xbf\xc8\x80\xf2l\x06\xfe\xfb\xf5\xf1\x02bp\xc7\x1fR\x9b&\xca*[F;\x18z"\x05\x8fv\xb7\xdcd\xb1\x1b\xab`\x18\x97k\xb0F\xc9\x9a\xf3j\x92\xa1\xdd\x8d\x83s\x13\xa8\x9e\xe9\xab\x1a\x0epW\xb6\xc6yxeo\xa7\xdaS\xb2]\xf6\x17\x1aa\xa9\xfb]\x8b\x18\xb3\xd6sf\x0c\x8e\x04\x10\xcd\x14\x130\x7f\xa8]\x1e\xda\xd3\xaef\x98\x87\x95:\xe8\x19\xb8Z\xa5\xd0\xcf\xd9\xaew\xb0hr&qf\xd7\xa3\x06!#\x15x\x11\xc4\xc2\xbf1j\xeaq\x03@4+\xb7{\xd9\x84\xe8\xad\xc1\x02\xb8\xf6\xef6{~\x81\x15\x99\x15\x1b\x7f\xd2(0\xdb?"\x93>\x98\x8d\xadM\x96\x06\xb8\x95V\x8e :\xba\x9fL\x9a*\xd4p3\xf6K\xbf\xa7p\x9f\xb2\xe4\x11<\xa4\xa0\xc3\xcdg\xb6\xd7\xb8\x1d\x1a$@\x9eNf\xab\r\xfd\xeeT\xcf\xf0\xcdd\xf9R\x7f\xafG\xed\xd4\xb6\xc8}\xa6\xa5\xc6\xab\x1d\x13j\x98\x1b\xf6\x96\x99\x99\xd6*\xddz\x01\x8b\x85PD\xe1\x07\xc7\xaf-S\x1a\xcdL\xf3(\x1a\x13\xdbq\xd2o\r)c\xc79\xf1U(E\xb2\x00\xdc\xd5@\x92\xd2t\xc5&\x86\xfee\x16\x90\xc8\x07\xd4\x13\xecR\xb6\x02g\xc8AM\xae\xa2\xb7L\xf0hh\xcd\x86\x1f\xd63\xber\x84\x87\xa3C?\xe3\xc0\x18\xf7\xfb\xf7\xe7_u_)/\xe29\xea\x99Eo\xbb\xa0D\'\xe5s\xda\xde\xb6\xd7Lu+(\x9dM{\x8a\x92\xa4s\xa6xK\x94\xa9\xcf\x0e\x0bbT\x01\x1a\x86\xe3\xab)\x16\x14\x8d6jDMr~\x87\xe3=\xeb\xac+\x9fMS\xbf\xe0h\xd1\x91\x96o\xf0g\x12U:e\xbcgpd\xda,\x80\xd3\xb4\x95$;O\x8cn\xc4\x92T\x1c\xc1\xf0\x03H\xc6\xc9\x08\xf5\x1b\x1av? $\xe1\x85\xe2\xdd\x03\xd13\xa4T\xab\xcf9\xdb9\xe2\xb5\xb4g\xc2p\xe1O\xac\xc7\xfb\x13\x1a/\xe0\xac\x18\xec\xc1N\x08\xe0P\xfb\x83\xef\xe2.__\xf0\xd9\xce\xb2\xb4\x9b\xf0>\x99\xaaR\x1a\\<\x05V\x8eB\x9f\x94\x91\xff\xc5\xf4\x9f\xedR\x10h|\xffB\xb7q:A\x9dZ\xd4\x0f\x9a\xe2r\xf4E\x83\xaf\x1b\xb2-z[\xb2\xe9\n]s\xc4\xa1E\n{Y\x82cY\xfa\xef\x0e\x88\xa16uN=\x88\xd0\xe5C\xb9\x83t)\xad\n\xca>\xbe\x021GS\x0e!\x14\x12\x1e`O\xfa\xccb\xf2x%\xcbJWs\xf9\xfc\xeb\xda:\x8c)+Ud\x128\xcb\xc88\x7f\xed/\xc5\x14\x07\x12aF\x98\xc6\x101\x0e\xcc\n\x87G\x12\xbcG\xa7\xe0\x04\xfb\x9e\x19P\xd9s5:NR=\x94\x8b\xacT.\xa0\xb5\x0b\xd3\x8fpV\xa9\x1b\xe7Ws~`\xd4L\x86\xaa\xfe\x01\xdd\xd6\x87\x10\xd1\xbd\xe7"k\xf2\xd0\xd1\xa1`\x9c\xc7+\xe6\x81x\xedg\xd7rF\xc9\xbfY\x12\xfa@\xca\x134Y\xb7\xdb\x1d\xb5f\xd2\xfap|\xff\x0e\x9a\xb7B\x9fI\x19s\xcb\xf1\xed\xf5-\x9fT]Y0N\n\x89\xd4\xbc\xcdjR>\t\x86\x7f\xaf![~x\xf3ARl\xdb\xf6\xd4A\x98t\xf1\n\xc8\xd6\xd1\x0f\xcb\xf0\xe2\xdf\xfck\xe9\x12a\xcc\xabAYY\x1b\xdb\xf3\x17*5b\xeeF\xb0Fb[\x10\xb7\x8f\x95\xdb\\\x0fY\xafN\xe9\xceK>W,\xf5\x85\xe4\xbcH\xd0XW\xb4\xfb\xcbw\x90\x92\\\x9a&\xad\xb5\xdf"\xfc\x05b\x96\xb5\xd1|K*\rB\x8c\xc4\x1e\xbc\x1a\xce\x9d\x89\xbc\xc6\xc1\x10k\xf5\x9c9B`\xfa\xb8\x8f\xa2>w(L\x0cj=F\x19m\x82gW\x94\xd6\x80\x16\xcb\x19lE\xb3,\xc2\xbc\x01Z\xaf\xa5pW\xa81\x03\xa6\x8a\x98\xcc+\x0e\x0b\x82\x81\x0f\x07\xce=\xa4\xc9\x15TU\xbcT\xfaM+Q\xba~%\x11J6\xcc\xcd\xe3\xf9L1\xfd\x08\xc5{!\x0f5t<\xe0\xf8\xbc\x088\x83\xe7P\x86m6\xa6\x08\xce^\x07\xcd\x1b\x89H\xf4\xf0\xb9\xb0\'\xab\xe1}?2\xcdy\x13\x93\xd0\x8fW\x82L\x15\xd5.\x8c\n\xd4\x1a\xf1R@rq\xff\xf8f\xe3\x90_\xe7\xe0\xbctM\xad\xa0\xb3\xa54\x0f\x87\x86\xe9+\xfb\xf5\x8e\xc2!\x04\xdd8\r\x9d\x8b\xcd};Y\xe6\x17\x04\xec\xcfH\x84m\x02<-\x95\xf7\x8a\xaaxE\xda\x18)\x16\xec\xc8\x13!:\x1fC\xc4\xbd\xc90\x07\xdd\x19\xab\xcb\xa8\'\xe8$\xb4\x81\x16\xdd\x15\x86\xb6\xaaq\x8c\x88F\xcc\x1f\x0es\x9e]p&\x8f\x95\x98\xe7 i\x06\xf1!\x95O&\xce\x81\x0f\xef\x85\xaf\x9d\x8d\xab-\x99\xed\x1f\x8c\x99\x85B\xc1\xb3\xb5\xdc\xb5\xcb\x86\x1d\x06R-\xf8m p\xb8\x0c\xa9?\xea\'J}i\xe2\xe7\xdc\xd7#\xd2\x0b\x85if\xe1)\x1e\xcaDFg\xa5S\x9b^\x9a\xfa*\xec9cw\t\x809*D\xbchZ\xbcI\xa5a\xefX\xca\xdc\xbcu\xa3\x94\x14\xaa\xe3\xff\x9es\xb5\x8a!\'<\xfdd`\xa2B\x83.K9q\xabV/\xb6QLFW\\\xdb\xaa\xc0\x86\x93\x1fv\x12[/1\xc9\xe6u\x80D\xf5jG\xd0w\x1fnj!4\x88\xcc\xd4\xed8\x01q\x06\x94&\x16\xfc\xd0\x88\xa5\xff\xcb\x8d\xc2K/\x9c\x80\'\xd6\xd7\x17%\x93@\x17.S\xd1\xb3\xe3-\xa3l\xe8\x18>\x06Y%\x9a\xf8\xa9\xa0\xfd\xd3\xeb\xde\x1d\xfc\x15\\\xb3\xc93\xb9E\xcb\xab"j\xfa\x83\x06=\x04\x83Bk\n\xef$\xae\xb6\x92db\xa5\x85\x05q5\x9a\x15\x04^W\xc4\x19(\x89\x9d\nR\xaa3Z-*K\xe6\xc1\xb7\xa9\xe7\xc2\xc0\xe8b\xc2\x17\x9c\x15\x83M\xcbE\xd5\x85\x95\xcc\x9e\xca\xec\x8d^Hl\x8f\x8d<G\x9b\xa5\x9e+\xf8\xcd\xc6\x99l\xeb\x92}\xab\x9e\xf1\x1e\x1c+\x196d\x1e\xf7}\xc3\x9bQ\xb9\xf8\xd3\xd8\xb6i\x9f\x83s\xf1\xdb\xd0\x11\xf6]\xad\xe1q#<o\xe3\x9d66k\x15\xf6wGR\xf9\xce\x80%dH\xeca\xa2\xabG\x93\x06\x00\xef\xc7T\x8a\xf3j\x18g\x9fqc\x88\x8c\xd5\x855\xf4\x88J\x0e\xa9\xcb\xd1{\x16\xdf4\xae\xad$\x97\xee\x99\x9cl/\x8b\xe1\xb8\x97\xed\n\xefQF\xf0\x19+pb\xc0\x03\xca\xf59y\x876\x9a{\x01\xa1o\xd1\x85Z\xb5\x01\xcc!UN]\xaaW\x1e\xa3^\xc0\xa0\xe0\x86\x00\x16\x19\x1b!\xf7\x87\xdf;\x1e\x0f\xbe^\x16\ts\xf8\x95?d@q3n\xf3A2F\xdc\x95B\xc8\xf4u\xdePw\x0c\x16\xc6\xd1i_-J_\xa6yJ\xf0\xder\x194w\xee\xb5Z\x10\xd4\xdcX\xf2k\n5B\xc9\xec$\xe9\xc8\xe4S\x81\x15S\xc4-\x9a\xeb\xae\x04\xe3\xf1\xe7\x1b\xfb\xb5\x87R\x86*\xa3\x12\xd3\xc1\xd6VAU\t\x92\xf8\xb8f\xbd\xc2\x14\xf3\x98,l\xdc\xefC\xa1\x1a\xb8\xd9)\x90\x86\xa8\x07\x93\xd2\x82\xee<\x80ve)u\xf8\x15R \x16\xb6\x15b\xbf\xdb\xfb\x1a\x9e\xf2\xa6\xe2\x80\x89\x16\xf1G\x0e\xe8\\\xb7 =\x15?\t\xa78x\x7f\x9f]I2W\x9flL\xf0!\x15H\xe1\r\x86l\xd4{]t\x9d\x1c\n\x1e\xa3\x13%"\x81\xfd}\xa5\xba\xa4\xfa~\xf6\x0b\xc4\xba\xa8\x90\xbc\x11w\xef\xb0\x81K\x9b\xec\x7f\xbd\x02_\x8d\x10\xb1r@7\xe1EObQP\xa6\xc6\x01\xc75\xb0V\xf7\n*eJ\xa2\xcc\xf2=\xd8\xae\x07\xa4\x93\xb6\xa5x\x83@Z\xad`\xe6^7\xf0D\xf1B\xa5\x99\xc83\xf3{\xe7\xbba\x9e\xcah\x0f/\xcc&+K\xb6\x8f\xae\xbcX\n\x8f\xa6\xa6\'\x068-\xeb\xe9\xa9\x18\x9a\xa3\x82?_H\x8b\xb2\x0e0\xbaNz,f[\xfe\r\xc0\xf1%\x1dN\x1f,\xb76\x8c\x94\x89\x08\xa2\xd2(\xba\x9cVf>\xa4\xceH\x1d\xa4\x87\xa4\x8a\xf8k{b\xf1\xefC(\xa9\xa5q\xa8\x88&\xc5_\xd6j\xca\x12m\xc8d\x9bz\x99\xe1\xeaa\xc8@9\xbe \x1f\xf8\xfb\xf5#^\xc1\xf7\x15\xd6\x12\xe3\xd2\x169@$\xbd\x02\xdb\xa4~N\xc0\x90\xe0\xa6\xb1\xdf\xa8\xd5\x82\xbc\x08\xf3\xeb\xa5s\xe5\x9fI\xa1\xa2\xba\xcb\x94z\xdf*\x9d\xe6\xe1\x15@1\x97\xc8\xe4\xb0\x146\x98\xb7Z\xf1\xab\x1b\na\x82\x1a\xea7\xc01~_\x85\xc4\xae\x9a01\xb6<\x9f!^\xf6\xe9\xa7U$\xda\x11\xa9\xf3\x8c1l\xb2\x0c7\xc5C\x88\x14\xc5\x1d\x92\x1fW\xba\xc9D\xe1\xe4\x8c\xffi\xb4\x92H\xb7\x06\x99-\x86v5\xd8:\x02\xf3\xa4N\xff\x10\xf4\xee\x92\xdeJ\xa6\x86\xd6\xe0\xaakW\x12\xf7\xa1\x9c_\xb1\xcb\xcd\r,\xc8\xf0\xfb\x8d\x8b\x94\xe8X\x8d\x9a\x99%L\x04\xcb 9\x9f\xdbL\xc5\x0f\rj\x1ft\x85$\xfa\x98\xa0i\x1a\xaa\xd8Ma/\xfa\x89OY`\x06\xbb\x836\x14\xb6v\xd9/\x01I\x89\x19wThBU?\x10\xae\xb6[\xa9a\xd4\xad\xef\x87\x8f\xe2Rc<AO\xd6\x1a\xecq\x08\xcb\x97\xc2\xfek\x8bT\xf0\xb8K\xa8\xc7\xde\xea\xb2\xfe\x1f\xb7=\xe8\x86v\x95\x95\xa9\xa61\xba\xb8\x15\xb5\xb4f\x9b^\x85\xfc\xb9W\xd3\x90\xf2v\xbbo\xec\xdf\xb0\xd2X\x0c\xcf[\x07\xb27*\xd6\'\xf3\x00\x9dZ\n\xba\x9a~\x83:\x1d\x85\'\x94]\xa9\xf2.Q\xe1\xda\xa1\x81\x05\xees}\xad\x0e\xedc\xf6D\x00\xd2\xd6\xfd\xb9\xb8\xb5(\xa0o\xd25\xd8\x0eM\x98\xe4B\xe9\xb3t\x94,\x18\xa8\xa7M\xdc\xbf\x13Y\xa0K\xa6\x8c\xd6\xc0\xaeE\xbcA\xf9\xac\x1d\xdd\xdf&\xd0\xb8"\x9f\xf6\x9bdzDP\xdf\xf6\xbe\xfb\x02X\x9b\x07Q\xeap\xc1\x8b\xae\xf7\x96\xcbf\x06\xb1\xd7]I\xf1\x8b\xd1\xd1\xb0(\xe7\xb6j\xa4v\xff\xe0Y\xc7\x13\x1f\xb3\xaf\x8b\xb4\x85\xf7%\x9b\x05\x19\x0b\xa5\xac\xe2\xcf\xfe }\x1a\xc7\xa9\xeb,\xb4\x9d[;\xf40\x9f\xc7\xf8\xeaypX\xc6d\x89\x87\xef\xc0\x14\xee\xd9\xf8\x84\xe2\x0e\x13\xeb\xde\xbd\xf6a\x92\x7fm\x14,\xbb\x94\x9b\x1d3\x91\x16\xb6\\\x976\xee]:E\xdf\x02\xf8u\x8e:\xcb\xd2vE\xfdWd\xfbX\xd8b\x9d%.\x7f\x8bC\xf7+\x8e\x1d;0^\x88xL-\xdf\x9c\xb7\x15\x13`e\xc1\xff\x0bK\xfd\xb7\x85\xe9\xfe{D\xc2\x8d\x8b\xd6o\x92\xbaG\x03\xef\xdcP_\x9b\xbc\xbf\x03\xe0\xce\xf6x$\x8a_\xa3\xb1\xf9~\x85\x13l\t\xf8\x9d\x96\x9d\xf0\xec]\xf4\xb6`\xcb\x9e\x01\xddz7q\x9a\xbe\xb7\xf6uR\xfb4V\xb1L3\xdfx!\'\xceO\xb3^\xfe\t\x02\x893\'1\x80\xbe?]\x04\x87\xd5\xfb\r\x9d\x13\x1f\xe2\xa8\xf1\xdc\x9c\x8a\xb0\xa4OA\x00|Oc\x0cTnq\xc6\xdc\xea\x8a\xf246\x88\xde\xefIt}\xa9q\xffE,\x07\xe8E\x01\x7f\xd5\xf0w\x1d\xc9\no\xc5\xbe\xfda\x82\xc0\xc1\xe9\x10\xe9\x07\xc7S\xcbW\x16\x1e\x99\xa4\xcd\xf4\xa9\xe6\xb5|"\x99\xc7\xb7\xb9R\xe6\x0c\xf45c\xd8d4w\xb9J\xc0\xb9R\xe4\xdf^\x91\xa3\x9fpS\x89\x91\x9a\xa4\xf7\x7f\xa2\xd1\x16\x1c\x94W3d&\xa9\x83\xabh\x011`\xbfHG]\xfe\x07\xb6\xf7\xf7\xe5r3@\x81\x15p\xcbi|\xdf/\xc3\xe8\xdf<\x90`\x93\xef\x0cB\\\x9cB\xca?\x05\xc6\'\xfc\x12\xd8\x19\x89\xe3\x13E\xc6|\x9e\xaf\xc8\x83W(\x9f\xc6\x80\xca\xcdN\xea\x03\xcc;\xe6o"\xc3\xf0}<`4\x94R\xc3_\xc7A\xd9\xfcP\xf1M\xa0\x12\xc0u1\xd9a\xeaEK\xc1Ul\x8b\x9a\x16_\x17\xb7\xc0\xbaeSJ\x1b!\x1a\x8d\xf3\x15\x99\x07\xa6\xa6\x9bs\x80X\x08[B/J\xb3\\\xd6\x04S\xd0\x8f\x8f\x9a I9\xe0\xd2\x9d\xb8\xc2\x80\xf2X\xb9C\xebL{?\xbb~\xb1\xa0\xd1\x92\x08\x1c)\x16\x19\xc15|\x9e\xa3t\xe2\xef\x95\xee\'h:\xeb\xee \xb4\xe7K\xde\xc8}\xaa\x9d*\xf4)5\x07qnD%\x1eh)\xc4C\x85\x0bG)K\xb1n\x00!\x1a\x9cwh\xaep\xdf\xba\x08m:\xd2\xbc\xbe\xabcE{\xbc}\x0b\xd0\xe8\xddC\x82\x8b\x9b\xf5\x82\x93\x96x\\i\xfc!6p\xa5h\xcbX"\x84\xd5\xb7\x15C\xc8\xc5(\x0blPs\x88K\x1c\x08\xe932\xa7>\xc5\r\xcboO\x01z\xc0_\x89Y\x0bj\x91\xa0\x92Z\xb6\x19\xe9\x05=\xad\xde\x1d@r\xd3\xeaae\x00:\xb7t\xc7A\x83\xf6\xe3+j\x8f\xd9tN\x1fK\xc3\x16\x81\xf9\xc9\xbf\xd6\x1e\xc5\xf0,\xef\xc9\n\xb0\xe8\xd3\x87\x01#T\xbe\x97~H\xbe\x97~E\xcc@-\x87\x10\x1d\r\xc0\x8d!\xe0\x02\x7f\x1b\xe6\xfa\x91l=H|/=\xc7\xc6}d\xda\xc8\'f#\x99\x0b\xdcs\r\xc2`\xc0\xd5<\x19]\x17r\xd5\xf9\xa1P\x1e\xfagE\xb9\xd0\xf4#\x08E\x88\x85A\x04\x9a\xb4\xa3\x95R\x1f\xd5\x7f\x90\x0b\xb2,Q\xd2\x96\x10\xafT\xfc\x8d\xd9S\xd8\xc5\tM\xd2\xd6\xcf\xec\xc5\xd4\xf6C\xd0O\xd6\xcf0\xc0\xbc+\xfc\x15\xd7\xbdF8^\xe3\xf7\xfe\xb3\xca\xdf\'\x89\xbe\x8d\xe6>\xa1\xd4\xe7?_\xcb\x94\x96o]\x04F[\xa8`H\xf9\xef\xcf\xd0p\xc1\xdb\xd8\x1a\xa3"#;\xe2qG\xe7\xdf\xac\xaa\x92(\xab8k\xa4\x12vh\xb0\x04O\x9e\xe5\xbd\x87\xe0i\xcf\x19\xad\xe1Sy\xdc\x99\xb9_\x91\xb7\xfd\xbfo\xe5\x03r\x9d\xca3l<h\x0f\tO\xb7v\xfd\x10\x98\xd8\xcd\x84\x99\xbf\x9e\x1a8e\x16"\x1eh\xf8\xae\xf8\xa1\xa9B\xa7<\x8d=)\xb1hO\x1am;\xcc\xb6J"\xd7\x83\x05\x15)\xaa\xe3\x7f\xf7\x15\x0fg\xcc\x83v/\x049y\xc0fiBnst\xc6F\x9f]_\x8b\xdc"\xa82\xa0\x06\xa2B\x1f5?\xcf#\x8f\x07\xa8N)\xb1GM\xc3]\xfa\x96B\xbdi\xfbq\x8e\xacy\xf5\xc6\xcc\xba\xb7\x13fO}9\x9f\xf4\xc5\xe0\xd7\xe81\xca\xd4\xdf\xa9\xcd\x856%\xf1A\xab\xad\xf5r\xb7r\x8b\rU\xf4l\x9b\xc7a9k\xca\x19K\xb2\xf0\xcaK^ 3\x93c2\x08Mp\xf5\x10B\x10\xe7E\x0eto\x04\xf8\xb5)ajlz\xe6\x91!7\xfa~\xe1\x19=2v\xf7\xef\xca\x19\xb7W\x92\x8f!\xcd7\x90)\xdb\x9d\xad\xc0A\xa5\xff\x98\x84\x98\xb5\xaf\tB\xf3rG\xa4\xa0\xb3\x01\xd29\xec, \x80J\xe1\x1fE\x1fA\x8f\xc5j\x03u\xc9\x81so\x1b-\x0e\x90I1\x12\xb4\n]\x8b\x8dJT\x8a\x9e\xc4\xabN\xcc\xb6\x83\x83\x8a\xdc\xf6NF\x1d\xfd\x9cV\x05\xd9\xa8t\xde\xeeU\xf1\x8d\xd0\x19\xd2Y=\xf7\xb5\xber\xd8\x98\x88\xc1\x00bN\xc8\x1b\\\x8eX\x98\x10M\x92M6\xf0\x8f\xd2\x19d\xedO\xf4!\xe7\xfa\xe7\xb6tlR\xb6rf\xee\x93\x9aU\xd2*\xc0\xc2\xdd\xb8\xd9\t\rh!l~\x00\x87~+\xfb\xd5MbL\x7f5\x04\x1a\x9c\xa2,\x08\xe3\x1d\xa1p\xd5\xd1\xad\x9c!G\xbfut\x7f\x9eN\xc1,\x0f\xe6\xb6\xac\xeeV\xf7q\xe8\xba\x95P\xc6\xa4g.\xfel\xd8Su+t\xd2\x81D\x89\x8bie\xae\xd4\x82\xe9\xd6\x0e\x03\x16\xff\xe9z;)\x00\x0b*\rux\xbb\xfdnT\xbf\x0e\xdf\x19\x9d\xcf\xb5\xe3IV\x89\x93h\xf2%6EV\xfd\xa3F\xda\x8a\xe1\xf1^\xaa\x90^\xb6B\xd3\xecj\xcf~\xea\xf5\xf7\xf2\x02~\xb7x-\x14\x87L\x1dm\x90\xa6+\xad\xa8\xcb\x99\xf7\x95\x7f]\xdb\xde\x91k)\xa3[\xae\x93\xdb\xbb\xbeK\x8c\x92\xc4\xcfl\xad')
1
+ from hiddifypanel.models import *
2
+ from flask_babelex import gettext as _
3
+ default_ips="""
4
+ mcix.ircf.space MCI
5
+ mci.ircf.space MCI
6
+ mtn.ircf.space MTN
7
+ mtnx.ircf.space MTN
8
+ rtl.ircf.space RTL
9
+ mkh.ircf.space MKH
10
+ hwb.ircf.space HWB
11
+ ast.ircf.space AST
12
+ sht.ircf.space SHT
13
+ prs.ircf.space PRS
14
+ mbt.ircf.space MBT
15
+ ask.ircf.space ASK
16
+ rsp.ircf.space RSP
17
+ afn.ircf.space AFN
18
+ ztl.ircf.space ZTL
19
+ psm.ircf.space PSM
20
+ """
21
+ from flask import request,flash
22
+ import maxminddb
23
+ import os
24
+ import re
25
+ import random
26
+
27
+ try:
28
+ ipasn = maxminddb.open_database('GeoLite2-ASN.mmdb') if os.path.exists('GeoLite2-ASN.mmdb') else {}
29
+ ipcountry = maxminddb.open_database('GeoLite2-Country.mmdb') if os.path.exists('GeoLite2-Country.mmdb') else {}
30
+ except Exception as e:
31
+ print("Error can not load maxminddb")
32
+
33
+
34
+ asn_map={
35
+ '58224':'MKH',
36
+ '197207':'MCI',
37
+ '12880':'ITC',
38
+ '44244':'MTN',
39
+ '57218':'RTL',
40
+ '16322':'PRS',
41
+ '56402':'HWB',
42
+ '41689':'AST',
43
+ '43754':'AST',
44
+ '31549':'SHT',
45
+ '205647':'SHT',
46
+ '50810':'MBT',
47
+ '39308':'ASK',
48
+ '205207':'RSP',
49
+ '25184':'AFR',
50
+ '394510':'ZTL',
51
+ '206065':'ZTL',
52
+ '49100':'PSM'
53
+ }
54
+
55
+ def get_asn_short_name(user_ip=None):
56
+ user_ip=user_ip or get_real_user_ip()
57
+ asnres = ipasn.get(user_ip) if ipasn else {'autonomous_system_number':'unknown'}
58
+ asn = f"{asnres.get('autonomous_system_number','unknown')}" if asnres else "unknown"
59
+ return asn_map.get(asn,"unknown")
60
+ def get_country(user_ip=None):
61
+ user_ip=user_ip or get_real_user_ip()
62
+ return (ipcountry.get(user_ip) or {}).get('country',{}).get('iso_code','unknown')
63
+ def get_real_user_ip_debug(user_ip=None):
64
+ user_ip=user_ip or get_real_user_ip()
65
+ asnres = ipasn.get(user_ip) or {}
66
+ asn = f"{asnres.get('autonomous_system_number','unknown')}" if asnres else "unknown"
67
+ asn_dscr = f"{asnres.get('autonomous_system_organization','unknown')}" if asnres else "unknown"
68
+ asn_short=get_asn_short_name(user_ip)
69
+ country=get_country(user_ip)
70
+ default=get_host_base_on_asn(default_ips,asn_short).replace(".ircf.space","")
71
+ return f'{user_ip} {country} {asn} {asn_short} {"ERROR" if asn_short=="unknown" else ""} fullname={asn_dscr} default:{default}'
72
+
73
+ def get_real_user_ip():
74
+ user_ip=request.remote_addr
75
+ for header in ['CF-Connecting-IP','ar-real-ip','X-Forwarded-For']:
76
+ if header in request.headers:
77
+ user_ip= request.headers.get(header)
78
+ break
79
+
80
+ return user_ip
81
+
82
+ def get_host_base_on_asn(ips,asn_short):
83
+ if type(ips)==str:
84
+ ips=re.split('[ \t\r\n;,]+',ips.strip())
85
+ valid_hosts=[ip for ip in ips if len(ip)>5]
86
+
87
+ if len(ips)%2 !=0 or len(valid_hosts)==0:
88
+ flash(_("Error! auto cdn ip can not be find, please contact admin."))
89
+ if len(valid_hosts)==0:return
90
+
91
+ all_hosts=[]
92
+ for i in range(0,len(ips),2):
93
+ if asn_short == ips[i+1]:
94
+ print("selected ",ips[i],ips[i+1])
95
+ all_hosts.append(ips[i])
96
+
97
+ selected= random.sample(valid_hosts,1)[0]
98
+ if len(all_hosts):
99
+ selected= random.sample(all_hosts, 1)[0]
100
+
101
+ return selected
102
+
103
+ def get_clean_ip(ips,resolve=False,default_asn=None):
104
+ if not ips:
105
+ ips=default_ips
106
+
107
+ ips=re.split('[ \t\r\n;,]+',ips.strip())
108
+ user_ip=get_real_user_ip()
109
+ asn_short = get_asn_short_name(user_ip)
110
+ country=get_country(user_ip)
111
+ print("Real user ip",get_real_user_ip_debug(), user_ip,asn_short,country)
112
+ is_morteza_format=any([format for format in asn_map.values() if format in ips])
113
+ print("IPs",ips)
114
+ if is_morteza_format:
115
+ if country.lower()!=hconfig(ConfigEnum.country) and default_asn:
116
+ asn_short=default_asn
117
+ selected_server=get_host_base_on_asn(ips, asn_short)
118
+ else:
119
+ selected_server=random.sample(ips, 1)[0]
120
+ print("selected_server",selected_server)
121
+ if resolve:
122
+ from hiddifypanel.panel import hiddify
123
+ selected_server=hiddify.get_domain_ip(selected_server) or selected_server
124
+ return selected_server
125
+
4
126
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
127
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/panel/cli.py CHANGED
@@ -1,5 +1,174 @@
1
- # 2023-04-08T15:11:21.790308
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\xdf"\x00\x00\x12\t\x04\x00V\xfc\\D">\xdc\xd6\xdd\x0c\x99\xe9/\xf5\x15G\x00\x00\x00\x00\x00\x00\x00\x00hK\xa7\xd6%VEl-*\xc8$\xbb\x9a.\xf4\xe1\x91\xf2\xcc3a\xde[\x07\x00\x1a\xe6X\xd6\xed\xa9\x11\xcfQx\xe4\xd4\x19\xaf\xb0\xfe\xbfY\xf0\x9d\x9d\x8d\xbc\xc8\x89K\xd1J\x1a\x96\xe6\xb7T\xd4\xc8\r\x8f\xceCo~ga\xb50\xa1\x99VS\xe3\x14\\(s\xd7\xaa\x0e\x94\xffF\x86\x82\\[\xe3\xaf`il\xfa\xb5}v]\xe7\xbe\x1e\xdb\x06W\xa8\x9e\x9f\xff\x14g\x83\xc7\xc0D\x12\xfe\x987SdO}\x83\x9cnF1\x1a#\xc5\x90\x12\xa2\xdf\xd3\x1f\xac8T\xd4anZC\xa7\xdf[\xfe\\=\xf9xy\xf2\xeat\xf2\x11\xe4++\x03\xd6\xaf\xf8\x06 \xdd&:I\xe6\xacEf\xbe\x11\x8d{\xdf\xe1\x15\x01k\xf1\x1b\xfa\xd6BW{#\xd6O"\xb08l\xc1D\x99\xbe|\x17T\x96\xae\x10\xc6\x04\xe8 \x19*\x85\xf2.\x12\xaf\x12Z\xd0;\x990\xd4\xfeY\xa4<\x89\x96\xd2\xa7\x9e\x13d\xae\x1ft\xca\x1c\xb2A}v\xa5o<\xc9\xd4\xf6U\xd5\xa2.<\xb5M\xd0\tv\xf4H2BXC\xc8DZ\x14\x95\x9d\xb8M\x0c\x85\x19U\x1b\xd8\xe9\x83\x18\xb5\xfdw\x96\xe5\x0f\xe7\xf9\xcc\x8c\xc9\xc2\'W\xf6St^\x94b\xdc7l\xc5 \xaa\xd3\\\xd6\xd6\x88_\xc0\t\x17\x1dQ\x9c\x7fmP\xa0\xdav\xc5\xc6\x1c\xd7D\xc3\xe3\xcd"o\x02\xcb\xfc\x06f\xfa\x1f\x9c\x13\xf3\x9b\x95X5\xbc\xa9\x8a\xff\xf1\xa9\x84;\x11\x185|a\xfa\x0e\xfb$\x80$\x81\x98\xa1\xd8Y%\xc7\r\xba\xd62\x08}\x15\xf6(\x88\xc4o\x00\xe9VW\x0cLP"\xe5\xb1\x93O\xc7\xa2d\xa3\x0e\xf4X\xd0#O\x06\xc7\x9b\xfbLso\x8d\x9f\xbaZ\xba\xac\xab\xdc\xf2]\x85\xdfm\xfd\xd0\x84\xab\xaa\xac\xb8C\x18 \x17~\xd4B-\xf7\xd0\x01\xe7M\x8dpPz\xd9\xf1dDt\xcfg\xcdd\xa9w\xdf\x82\xeaQp~\xb4%g\xd3\xbcDf-\xa1\x17\xc7\xcbn\xa0\xd4\xc5\xb1Qb\xa8\xeb\xef\xe5lW\xba\x11H\x8a\x1a\xfbM\t&\xed\x8dQ\xb5b\xd0:\xc4\xccL\xfc\xfc\xabq9\x95\xeb\x9e\x1a\xa7^28\x1a$\xe4\x88\x83\xe5\xc2\x80\x8b\x9b\x7f-\x0e\xd4\xca\xfb`\x14 \x00\xae:\x80\xff}[{\x1eLu\x98\xc7\x11\x90\xcd\xdb\x9eq\x94a0\xcb\x98\xaf{onz\x0b\xc5\x1d.\xa6\x9c;Yr\xf7\n\xcfv\xb0`fD\x89\xc0)\xf8@\xd7j\xa4\xfb\x13l\xec\x88rJW\xa4e}ot\xd4Rz\x9e\x98\x16\xd5\x1c\xdf\x90\xb7\x97\nm\xab\xe1+\xfb\xd7\xb9\x91\xd3\xc5\x9b@\xda.\x8e\x18\xe9j\x8e,/\xbe\x15\x08\x91A\x8eH\xda\x00u\x85\x88\xf4\x00\x0b.\xa2|t\xfd\xe7#\x13\x8b\xbdv[\xcb\x9c~\x7f\xa3\x03\x16\xf6\x9b\xdal|\x99k\x91E\xd4\x89\xdd\xadg\r\xc6\xd2\xa3~\xa3\xc1uzP\x9d\xf5\x06\x88\xd6\x0fh}\xa1\x98\x85\xcf8V\xe1\x11,\xe3HA\x06h\xccv20$Q\x90h\xc4]/\x7f(w\x18\xfcd\xc8H^\xe5\xad\x1ei\xb5a\x16\xab4\xd5f\xfcL\x129\xa7\xed8f\xfd\xa23\xc9\xfd\xe4\xea\xbbw\xaexF#CV\x0ec\xd2{\xf6\xc7f3\x0c\xad\xbd&\x8f@\xf7J`\xab\xa7L\xa7\x8fot\xf6\xa7\x9a/\xd5\xab\x10\xa9VC\rX9\xee\xe3\xab\xcdm5{\xbb\xb2b\x05\xfe\xc7IS\xab\xe5\ta\x11-m:\xceN\xf3\xf2X\x0b\xc8\xce\x98.N3\x02\xdc\xd2\xf3w \xf7\xf0\xcdn\x94(\xfbV\xb31\xce\xf4=r8\x0b_a\xady\x1b\xec\xcf\xc3\x1cfQ\xb7\xfa\xcaD\xd3\xf6\xa7s\xa0\xe4n\x8e\xa0\xad\xd1\x16\xfa\'uo\xc0\xdf\xab\x8a\xfb\x0b\xd8!\xaeL\xb1\xd2~\x8aEb\x14_\x9a\xc77\x1b\x8b\x90\'\x0c\xba\x83$-\x03W\x92\x9b\xa1\x84\xe7\x17\x18c\x19\xc5\xcb\xf4\x0c\xe1&{\x1ff\xb3(@\xb7]\xb9\xce\xa1j\xe7\xba\xe9[W\xa9"s\xaf\xd8\xb0\x98\xcd\x81#9\x0f\x99$n=J\xc8\xd1\xbcP\xc4\xc5=\x0b\xc2\xf8:\x9f\xa3`\xb0\'\x89eFh\xf4\x87n{l\xf3\x11\xa33\x92{\x81h\xbe#\x19Mj\x93\x1ep\xbc\x97\xe4\x8c\x99\xd3\xc2\xc1\\\xa8\xab\xfa\x0c\xc7bnv7P\xb3\xb3b\xcf\xb4\x94\xf49\x17\xa1\x0fW\x0f\x1c\xd2y\xdc\xd4V&{\xae%\xe2\xc5\xdfe\x928\xfa\xb7\xd8\xa4B\x98\x1e$\xc4\x00D\xe1K\xc9yu\n\x99>\xa5\xb4W\xeb\xd2\xeb$\xf9\x87\x84\xaf\xe4\x1e\x0f\xfe\xc8\xdd\xc4_\x9a\xd9Z\xfa.#8}\x07\x1bk-\xf5wU\x96\xde\xe1\xb1\xb7S\xfc:\xd3\xc3u\xf2|Mv.Q\xc4\x87\x03\x1d\xe7:2\xadu\x0f@\xb4\x00\x9f\xb0\xdbJ\x91\x0b\xf4A1n\x85B|f\t\x08\xdaT#_P\x0e\xc6\xfd`k\xdd\x89\xd3\x8a\x8ekV\x986)\xe9kbH\xa0s\x03\x8d\x98\xe0r\x93\xd0P\xcb6\xeb6eW&\x9d\x97\xb9\xa7%\xc8\x13\xbd\xf3B0\x19\x18\x9e\xa6\xb4*\x08\xd9!(\x8dV\x95\xadt\x90\xec\xcei\x81\xb4\xdb\x03\xb8g\xd5Jc\x16\xe2e\xec\xc0\x8f\x85\x1c\xd2\x19\x8e;+\x8d\x8aKh/\xd9\xe4?\x0b\x7fk\x18\xfeVaP\xf1\xc5N|\xc3\x0b\xf0O>v$\x06\xd6S\xe1\x0e\xe2M\x9f\x87c\xba\xb5bh(6\x10[*\x00\xfd[\x87\xf1\xa5\x1f#J]\xf3Q\x02\xc6\xe0N\x9f\xc8m\xbbr\x1e@\x8b\xec\xa6\xd1\xd7a\xc5\xde\xb9u\x95\x8c\xdc\x1fr\xb1C)",c/\xd3PG\x88\x958\x8a/\xcb\xe0\x1f\xff!\x8b\nuy~\xf0\x0cg\xae\xbd\xaf\x94A,\n\xde}\xd1\x0e\xed\xdd2\xcaj\xf2k/rv{\xd3\xb3WCX9\xc6\x96\xc1\x92\x04\xec\x1f\x90\x05q\xfbh\xd3\xd2G\xed\x87\xe1s\xab\xde\x8f!\xe9d\x04&B\xf6\xfd\x97\x1f\x88\x8d\xc6eV\xc0k\xf7\xb6\xd9\xc9\'\xf4\xa7b\xca\x1c\x1e\x98\x8cW\xa1\x0b\x08\xb9\x93F\xa85\xc6\xb6\xb7\x10\xbd\xf5;\x8a&~\x8c\xd9\x13\xa7\x97\xf0\x1e\x02\x90zfO\x14\xd9\xf2\xfa\x1eQ\xe1:\xab\xbf\xe9\x03\x8fNH\x0c`\x97\x1f\xe4M{c\xfb#U\x9f\x19\xb6;f\xec\xdf\xd2U\xb6\x82W\xf6+\xb7\x99\x9d\xd6#\xf6\xcd2f\xc9~\x89\x071\x8f\xe0lmt;\x9dV5M\xa1\x1a\xa8\xea\x11\xb95\t\xd6\x06\xfek\xa2LzD\xe9(\x8bo\x92\x84\xca\xf7\x17\x04k\xfe\xd0\xe0t\xcbs\xdf\x99xM\xdf\xf4\xae\xbf\x9a\xb6\x05\xf5\x9f4`\x94\x1b>\xb1\x15\xf3\xbfY\xb2\xa6lO\xbb\x8aLS\xa9\x82*\x12\xaa7\xf6{j_\x9bx\xf7c\x95<\x08\x95I\x1b\xe8\xe4\n\x97\xc4\xc3\x06\xe0\xebw\n\x13&\xb9\xb1\xbb\xf8\xfbp\xa7\xd31\xbe\xa5\'\xcc\xbc\xc8\x9bvp\xbc\xda\xf3\x19?\x05\x8fta-\xde\x0f\x0eI\x88\xa9\xb3GQ\xe7\x04\x05\x01\xb0\x9f\xf3L\xd8\xd1\xfaK\xe0\x85\xdc\xb2\x17"3\xec\'p0\xe6\x12\xc4\xe5\x16m@\xa5\t1\xab\xa3\xd4\xfbG8\x06\x0e\xa9\x9a\xcb\x1a\x8f\x8b\xees\x02\xa4\xcb\xd3\xe4a+\xae*i9\xde\xc4\xfc\xcd\xa6Hr\xfef\xa9\xe1\xe1\x9cg6\xe0c\x9a4\x993W?k\xceT+\xadVd\x03M\xe2\xb8\x89\xa4_)\xcc\xc1\x142\x16I\xe8L\x7f\xc6\xba\xbcF:\xc3_<\xa7`S\x17n\x9eT\xc9e\xd4f\x7f\xfa\x0e\xb0\xb5\xe2n\x10{\x19\xc3\x9b6T\x16\xc7v\x18\x030\xacvNm\x1d=O<|\xd6.\n\x00\xc4\xfb\x04UF]\xb7\x9d\xd0c\xbb\x84\xf6-O?\xb3&g%G\x12"LDwR<\xaa\r\x17[\xbb*\xd0\xf1\x89}1La\x1a1n\xdbQ\xfdE\t\xfea\xe7co1sG\x87\xb8\x11\x17#J\xa0N\xbe\xa6\x12\x08h\x9f\x14\xa3\xbc\xb8\x10\xfc\x90\x9c6RrS\xf1ch\xa4\x88\xbb\xdb\xbb\xb7\xe7\x04\x92M\xeb\x91d.\xc3i\x9f?\xean\xb1\x95\xa9\x81\xea\x8f\x80\x8f\x8b/\xe8,\xf5\xa84t\xc1\xdd\xd0j\xfaN|\xe2\x84\xf1LmA\xdb\xc0\x92\xcb\x93\x0b\xe7Hb\x1eH\x12\x14(!k\x0bc\xc5+\x8fd\xd2\xa16\x07\x0c\x98^\x10.\xe5X\x96\xdc\x85\xc46\xc8+\x9d\xb4\x0fht\x04`\xe2\x16\x1bXw\xb5\x8aR\x84\xca\xa7\xc5R\x9a\x12y\'S\\<\xbf\x0c\x92\x03|XC\xdfVO\xff\x93\x08\x95\x89\xec\xc7\xc9\x8df<"\xc9\xb7\xff\xb4\xed\x037\xf7S\xb1\x84j\xbf\x97JH9d\xc4K)\x95W!br\xfbF\xe7<\xb4\xb8\xce\x97}\xde\xa1\xea\x95\xe1n\x15 \x9e\xe4\x821\x1a\xe9\xe3\x8f!\xba\xa1^\x06\xdbYka\xc8\x1e\x9a\x86"\xa2\x8e\xef\xc3d\xe3\xacZ\x0b\xe6&\xf6\xd7k\xd3\x153V\xcf\x19\xdcuK\tu\x8a$wP|\x9b\x9c7\xb8tL"\x10\x9e\x8c\xe6b\xf2\x13XY\xd5\xd0\x05\xcc\xf6\x15fA\x16\xaa\xe3\xa7Ph\xca\xa2\xaa0\xee_\xd6Y\xdb\xa8\x17\'\xa6\x8bj|\x8e\xc7\x84Z\xb1\x14\n\xb1)\x85\x8f\n\x11\x1b\xff\x01\xeb~\\g\x8cg\xa3\xc3\x88\x18f<\xbeX\x908Ou\x81d.3\n\xa8\xd7\xc6\xdb\x0c\xd0t\xf5\x1f\xca\xfe\x9dk\xa1\xd0\x8b5\xf1p\xe2<\xae\xfa\x8fHo\xe7\x0fJH\xf2bD\xcf\x16\xa2\xfd3Y~A\x04\xbbQH\x99z\x84\xd7b\xf4\x01\xfb\xf64\x06\x1d(a\x14\xfdz\xb7\x94$\xc8L\xdf\x9a88\xd68\x94\xf4\x81\x93^\x8cW!\xa4\x01n3\'XF~\xa7U\xfb_\xc1\xd1I\xd7\x9c\x08x\xb9\x7f8\xc9\xdc6\xb6\x86\xfa\xe8_}\xafO\xae\xc2O\x9ez^\xa0\xf2\xd3*\x7f \xb7XSq$\xdf\x1fpC~v\x15\x8fo\xbbj\x80\xff*\x8e\xce \xba\xe62qM\x19\x04\xdd\xc4\xfc\xd7\xf0;n\xfah8w<;\xc6\xa9|\x9a\xf0\x80\xb6\xba7\xe8\x14)\xe7\xf9H8\x01%\xcb\xb97\xf9\xce\xe3\x8d\x88zV\x81\x1e\x98\'%\xb5\xd7\xbc\\F\x7f*z\x1d\x03\xf1\xd2\x05\x00i9w3\xe8V\xd1\xee\xca\x919@\x84\\\xed[\x86\xe0\x16\xc9\xdd|\xf9QY/\xe9`\x86o\xcb\xdd\xe1\t\xd5\xe3,\xb6-B\x02\x88\xdb\xfe\xd9iCz\x9f\x94!\x1a\xbe\xc7r\xe2\xbb\xc8\xfaDb=\xff\x8et\xf3\xaa\xb2l\xd2(\x0e\x98\x13\xe1\x0bi\xa8\x83\x00\xa4\xab\xb3\x0c\x1dBq\x89\xeaG\x0e\xfb\xf3\x06\xb6\xb8=X\xcf8\xf5\xa7\xb6~\xa5\xd9\xb7\x1e\x0bC7\x93a\xda\xcc\xab?W#MHy\xe2\x85#\xf3m\x9d\xc7\x110\x9cQg\xae\xeb\x85\x81\xc5k\xbd\x08m4z\x1c5\xf8\x06\xd45\x99\xa1\x16\xac6\xd7\xef\x8b\xc9L"\x9a>3\xfdqCS]\xcb\xfe\xd3\x08\x87\xc0e\x15\x1f\xdbL\x8a{T\\\x92\x1e\x8a(\x87<d\x8bIKCY\xd6v\xbcx\xd6\xd9\xf0\x17^\xc4V\xb2\x97\x8dU\x96\x89\xea\xcf\x9f\xa0a+v&\xe8\x0e\xef\xd5\x9c\x8e \xf9\x9c\xb8\xff\xd1\xc7\xb2\x1e\xdd>xjk\xc6\x18\xe6\xff^\xec\xd2Q \xa1M\x929n\xad\x13\x907\xe2\xff\n\x9d^\x13\xd7\x01\xbb\xbb\xb8A\xd5RE\x99\xb1\x9e\'\xcdiR\x92\xd4F\xc1J\xa6\xe4g+\xf6\x8d2X\x8d\xf6\x96\'A-\xb9\x83h\x9b6\xd1\xeb!1\xe3\xf0\xf6K\x9e\x92\xe6}|v\xbf\xfcA\x82\xc6\xcb\x04\rmI\xed\x08Xc+\x0cK\xab:\xd6F\xe8\xb5\t1\xac_4\xf1c83\x93\xa9\x83#$x\xfa\x96Y\'\xdf\xed\x13sJ\xbe\xdb\xc4kd?3\xda\xc5\xe7\x1d\xcb\xdc\x12\x04\x18\x80l\xa5D\xd3\x16\xd5\x0cw\x114:\x8e\xcd\x13\xb3\xcc\x96\xdc\x1c|_+\x95\'\xce\xbb\xe7_\x94\xcb\xab\xbf\xf3\x81q\xbe3\xec\xd4\xd9]\xbeWz{\xf0\xe0\x15\x89p\x7f\xbc\x80\x05\xc4\xb7\xd5G5\xae\x0c\xc0\x08\x126\xd2\xb7F\x1f\x96\x1b\xe3\xca\x94\x86\x85pS\xa1\xb7HR\xd5\xaa\x98Mb=M8\nu\xc2#0d\x95l\x97X\xdf\x9a\xe6\xfe\x7f\xc55I\xfa\xaf)\x88\x9d\xfe\x82\x90\xe4lB\xa0$UDJ\xa0\x0b\xf4\x93\x91\xdc\xb9LP\xb4x\x01d\x86U4\xed2\x94\xd9\xc5\xd7\xc9\xb0\xceC\x08\xf6\x1c\xb6\x9c\n\xf7?\x94Y\x1aP\x89\'}\x02R\x13.%"-Ds\x1a\xcbA\xffG\x83OD\x8c\xd5\xd4\x8c\x1b\t\x02d}\xfb.\xc8\x9d>;\xd2D\xa7\'\xbaMa\xd1zF\x8d\xf8(\xef\xf3%\x91&%w\x1a\raM\xb5\xbb\xe2\xb6\xa4\xbf\xd7\xb6\xfa\xcf\x97puf%&\xbe\x1cT\x13\x96\x10@\xc9Id\x9d\x99\xbavc\xea\x9b\xac\x13\xb94\';\xa7\x19Hd\x80\xd8\xea\x1f\xb5\x18r\xf2\x0f\xb8W\xd0\xa6\xa3\x80\x8d\xc5\xa5\xa0\xba\xc6\x8a\x03\x00\xeb[\xeca:}D-x\xda\xb0\xa2u\xfb\x83\x85\xa8\x9cU/\x97\x825\x0e\xb7<88\xdc+>\xee\x86\xe2\xc0hS\x02\x05\xaf\x89\xfc=\x0b\x18f\xde\x17Q\xd8fTu\xca\x06\xc0\xe0Ei\xc3;\xd0\xbe\x1b\xaco\x00\xed\xad\xfc1`o\xd3n\r\x93xf\xfe=\xcd+PN\x8e\xa8\x8c\xad:\x9c\x88{\xcd\xa0C\xbd\xe9V\x1d\xe2N\x97\x1f_2\x88Z]v\xef\x9a\xa2\xa8\x01E\xb8dj\x91C\x17t\xea)\x92A`\x0c\xf8"\xd6%\xa6\xa2\xb9\x89b\xa0\xfa\xd3h\xe8\xfc\xe6e\x01\xcc\xbe\x16\xdf\x03\xd4^\xdd\xa2\x7f\x81|G\xea\xf8D\xf5\xb7\xe7\x14\xec\xc7\xd3\xf7\x9e\xf9\xa0-\x90,\xe7\xe6V\x0bQ)m\x92H\xf4\xb4\xa1\xa8PW\xe1bd\xa0X\xe9{"\x0f9\r+)\xb9\x8e\xd6\x05\xea/\xadB\x1cY(B2/?\xba8\xf7\xefw\x83\x99\xde\xfc\xd4\xac\xea4J\xed\xf6S\xdc\xcbF\x8ci)UO1\x88\xd7\xa9ow\xc1\xba\x03\x8b\xaed\xf3q\xf3\xfe\xc2pN\xf9\xeb\xea\x93\xee\xc4N\x90\x8a\x87\x00\xd0l#7\xc4\xac\r\x16\x0eY\xf6\xf0\xc8\xa1k\xea\xdb\xf7c\xe4\xfc#m\x19\x1d\xb1Ui:\x99\x99/[\xe9\x0f&\xa1K\xd7I\xbf\x9e/\xe6>\xe3.\xc7U\xe0\x1e\x1f\x11\x7f\xd8&*\xb7\\fZ\xb8\xd6\x0b\xbeH\xe2F\x03\x80O\xb0p%\xe0\xfd\xc1x\t\x8eaF@\xdc\xe1\xd3\xb6\r\xf7h\xf4AX\xf3\xce\xc6\x97\x0b\xf0d\x10d\x81\xfa\x10\xae\x9d\xf8R\xad\x1ep?\x83b\xbe9\xbdY\xaeA\xd6\xd5]\xbf\xd6QT$\xc3\xff\x8c\x1d\x88\xf2\x9f4A\x93W\xcf\xcaYb\xe9\xb6M\x0e\xffy\xdeJ}\x0b\xc6(!\xfa\xf1\x08;\xa1\xf7\xca\x93\x0fJ/\xf3|G\x08\xe0\x1aE\xac\xb7\x91\xca]\xed\xe7\xc8\x8d\xf4\xcd"\x97\xfe\xfeD\x12n\x10{J"\xad\xc5\xb0\xa2>\xb5\x8e.\x14\xb1\xe9\x16LOh\xb3~\x8e!\xfa:w\x04\x93\xc3\x8e\x05\xf0BLT\xed\x94\xf3\x1d\xd4\xdb\x97&\xae\x1a\xfd\xe2\x13P\xa4\xa1]q\xb2\xc2Z\x89=\xd1\xb8\x88c\xd0v,\xe6\'\xc7%\xb9eJB\x12\x8bTK\xdf\x83I\x0bTt@\x16\x19\x03\x9c\xf8\x02S\xfa:\xca\xf6\xa1\x8f\xcf\xcd\xd3\xd5#\xc2\xc6(\xee\xac[T\x94\x8deJPA\xb5R\xe3J4\x93\xbdC\x16\xaf\x15\xa6\xc4\x1e\x85\x1e\xdb\x967"O\xd6\xb4\n\x9ad\xf2y\xfbT\xd9J\xe4,\xd6T`L/ \xf3\xbe*\xe9\x99{6\xf9&l\\5"Z+\x18:\xb3\xc6\x1fDb\x8bv\xc0\xe0\xd1\xba\xf6m\x7f\x16,\xa6\x90\xdf\xa3\x1c-\x9c\xb4\xb0\x94\xafK;\xf2\xaaJ\xc8\xac{\xe7\x9d\x8a\xa8\x1d\xf4(a\x82R\x9b]1\xf0\xa0\x99\xd4\x08V\x95\xc0\xe4u8-\x06(\xc1\xfb\xe3\xb9K\x96\xea\x0eF\xe6\xb8\xd7I`\x16\xf2\xe4\x0f\x86EF[^|\x18-\x88\xe8\xc3\xd9\xf6Bu-N\xb3\x0f3\xd9\xd4=\x18\xdd:\x12\xf1w\xa1}E^\xd0\x82\x18\x1e\xac\xcd\x05\xf0\x17`\x11\xbb#:\xab-\x8fQ\x17\xed\xd8\xaa*\xf7\x98\xcdT\xf4\x12\xe9v\x19\x0b|\xb3\xb8\xdedb\x82\xbby_\x9fl#;\x1d\xbc\x013\x94"\xb0\xb3\xdc\x19w\x81C\xdb\x8fK\x13\xcf\xef+\x80\xaem\xeb[\x06\xc0\xa4\x89\x13\xbe\x17\xde\xeaoJ\x00\xad\x07\xb9\xba\xba\xa0*\xa9\xb6\xf1\xd3\x8b\xcc\xd5\xf2n\xf6\xab\xf6\xd2\xd8\x03\xd9\xe4DS\n\x941\xdb\xd2\x17\x08}\xbd\x0e\x06\xc4\xb1\xa8A\x9aC\x97\x1a#^\xcc8\x9d~\xd7\x00X\xa5\xcdX\x1c\xd7;t0\x17s\xf5p\x12\xe3\xcc\xca\xeb\xa0\x99dJV&\x834\xd1\xf0\xc6\x00n\xde\x06j,\xc9\x9c\xe9\x1c\xec\xf3k\x80_\x83\xa3\x07\xac\xe3\x04\x06\x8e\xe5\x9f^\xaf\xcf\xc6\\\x02\x19AW\xb8\t\xd3Ds\xa2\xeaM1&:\xd5\xeeyz\xad\x13I\xa5\xa8\x0e\xc1.\xd0\x17.\xb13J\x88c\x96C\xcdI\x0e\xc9\xf8\xbd\xd2\xa2\xffz)-\xf7S\xb0\x8a\xf1\xf7(\xde\xc6\xc6\x18\x04\xfb\xc8\'\x93\x96\xb1\xba\x9e\xaf,\x0b\x1aN\x9c\xbf\x1d\x1a\xb3\xa4\x19~2\xca8HF\x99Q\xfe\x93\xc28\xf0R\x10>S\xeb\x84{\xf0\'\x153o\x1f\x99\xfc:\xa6n^.\x80tX\x82\x99\xfd\xb1\xb0\xf7rx\xdd L\xc1\xb9\xdc@z\xa9\x0eJ\x12\xd0\xdd~H\xef^\xda\xc6\xfb\xa4\xf1\xfdIYNy/\xbb\xcbI\xe5)\x05\x82\x84K\xbd\xd2\x03r\x9d\r\xfb\x19a\xbf`s\x10m\x90\xf9\xddY\xda\x7f=78\xddv\x06\xb4~\xa7Qu\xb8\xabm\xee\xdeN\x02\xee\xc1\xe9Sz\xb3#^\x0b\xdc\xee\x87\no\x07I\x1b\x014\x82\xf3\xed\xbe\xa2:SUhL\xb5\xce\xe9\x96\xa3\xfc\x01\xda\x92(\xfb\xc4\xe1\x1e\xad\xf0\x8c\xe6\xdd\xfb+\xab\x97\xa9\xab\xfb\xb0\xf1\x08\xd1tT\\%\xc7i\xdd\xf8%Wz\x81\xf8(3ZfLo\x04\x0c\xc2gqD\xed!\xc6\xebk\xa7\xb0\xd1\xb3\x13\x03;\x06;\x08\xb7A\xe4\x1aB\xe63\x81^T\xad4\xf6\xaeW\x83V\xcb\xb1h\xe1[\xa4U\xbf\xf6\xff\xb4\x04I\x8c<Y\xa4\xb7\xb1(,]\xbd\xfd\xe4+\x86]>\xde\xc2\x04\xd0\xafL\xc7!\xde\xbdQd\xda\xca\xcd\x1d\x10\xf9kl;\xdbP\xd1\xbd\x97\xb5\x8f\x0e\xb1\x97\x92\xdf@\x9f%~Hc\x82I\xa9G\xf9\xdbSz\xf3T\x02\xc1\xbc\xe5jV\xf1\x06\x06f\xf4\x81\x1e\x176\x9f\x99\xc8\xc5l=\x00\x977\x94\xd1Q\x80eV\xc0!\xe2a\x1eg\x9d\x7f^\x89\xe7~\xee\x12\x1d\xf3\xde\x97\xc4\xa1j`dv\xa9\xce \x0b\xd4\xde*kaU\xa49n\xe5Am\x17\xfb\xd3\x1c\xb4n\xfaK*\xfb\x8a\xca\xd5X\xa8\xe7*.\x0e\x96\xe3\xa2KN\x01-6\xf1\xf1H\x1f\x92\xfc\xee\xbf\xab\x10\x82\xc4\x80\xbb\x8b\x04M9\x08!O\x93\xa9\xf1qw!\x04S\xfc\xea\x962\xb6]c\n\xce\x13\x136\'\x8b\xff5\x05\xcf\x88\x89\xab\xcfpY1\x13)H\x1d\x0bY}\x0e\x84(\xa83\xd1\xaf&"\xf3w\xecdz\x9eL\x9bd\xb4\xe1=\xf0\xber/lV\xf1\xaa\x92tah\x9ef\x9f\xf3Lq\xf1.\x1cf1\x06>\xcc 1;H\xaf\xe6\xd4\xd8\x8b\x1e\xf7\xfa\xe7J\xaee\xde\xac~\xe8\xb3&\x03\xefy\xda5\xc4!\x9b\xe6\xde\x17\xc7\xea)\x8b\xc3P#{\xc1\x14\x02\xbdl\x01\xed8\x0bz/\xfd\xf4\xff\xf6(\x08\x91j\x0c\x86|8\xe3\xc4R \x8a0V\x9d\x98\xbc<ol]\t\xe8\xed\x9c\x1d\xd4\x15\x03bY\xb0\xc0\xbe[\xfc\x844\xdc\xc31\x88\xde\xc6d}\xe3+\xf6\xa2\x88\x93\t\x93\xd6\x87\x9b\xe7X\xe0\xff\xf49s(\x91s\x90\x0bP\xe2BB3\xdb)\x1eSm\xde\xa9\x10\x0f\xbdc\xeb-\x99#R\xe4\x98d\xd8\xdcp\x9f\xa8\x0c\xea\x8d\xdf%\xb8\xdd\x90mR\x1d\xf3&\x962wgaqq\x89\x05\xe2\x80\xa4\xc73,\xa3!7\x8d\x0e\x00\xa7\xc2\nB\xe5T\x88\xda\xb9\xb3\xa5>.\xb3"K\xe6\xfe\x8c|\x99\xdc\xd3\xb2wYyoXU*\x11\x95\x9a\xe0cc\xa0\x9a\xd8\xac\xb28\n\xa3\x1eVN\xa9,\x1b+z\xa9\x0e7?G\x8dR\xa44\xf7r+\xfb\xfd\x1e\xce|\x01#a\xa6\x8dy%\xbd{i([T\x95\x9dC*;^\x90D\x19\x9d\x83\x11p\xf6\x00\x01/86a(\xeb\xa0\x01\xfd4\xf2\x98\xf8\x15\xab\x1eA\xe1\xaazb\xdf%\x0c\xc9\x7f\x831\x88\x8d^\xc4\xff\x06\x9e\x14\x7fP\x13\x90m=\xab\xff\xad\xb5\xe8\xaf\xe9\xf2\x1fM\x01\xdd\xe4\x10\x98\xa4\x89VV\xd2z\xf5}M^O\x04\\:\xd82l\xd6+\xda@\x84\xec>\t\x03\xb5\xaa\x97\x95\xf2\xde\ty\xac\xf1K\x987\xc8\xd9\x94r\x9e\xcd\x9eo\xdbC\xdc\xbe\x17\x98F\xecG\xe8\xe8\x1b^\x01\xfc{%\x8f\xac\xe3\x00\x18y9\xabz\xdc\xd2\xb3\xfe\xc0T\xc8\xb7\x8d{\xb2\xda\xd2\x7fi\x92\xd7\x1dw\xf2\xe9N\x0c.\xd7\xefh\xb6\x1f<\xc7\xd1\xe3\xb4\xfc\x96\x0c\xa6\x80au\xb1\x01\xdf\xe4O\x96\xb6\xdd\xb9\xe25\xe4\xb7\x99hkd\x00\xb0\x13\xf7\x8d\xa7\xac\xd2\xc6V\xdb\x1a\xcf&\x1a%D6b\x1bM3f\xffA\xe6\xef\xd9>:\r\xf1"\x8a$\xd5V\xeaq\x02?\x95\xa4>I\xe97V\x96>1h\xb7\xec)\x1f\xd9^]mH\x00\x9ct\xe6\xc54\x18\xf9\x1e\xaf\xf1\x97\x17\xd2\xdb\tS\x920\xa4\x87\xfb\x00\x05k\x80\xfa4v\xd7\xc3\xfc\xda\xb0\xe6e\x8f\xcc\x1b}\xb4\r.\x12\x08%\x9c5\x8d\x83H\xd0a\xb8\xa8\xbbN\xbfy\x8e\x82\x8f\xca\xe1\xa6\x1f\xdd\x9f\x1e\\\xa7b\xe2]\xa3\xc1+\xd3\xe8/\xd1\xddn\xf7t/Ja\x88\xb9d\xcc\x7f\x08f\x8c4VN \x95\x1a\x1fO\xc0\x05\xf4M8\xc9\xa4\x04$\xd8:\xdbn\x9eU!\x15\xc5-8W\nb/\xae\xab\x7f\xd6O\xf8\xc0\x01\x18\xb7\xab\x8by\x8d\xe1\xe6\xc8Xx\x1f\x16gbup\xa1\t\x0f\xb7Ke\r\xe0\xda\x91\'j]#\xc4\xb2\xc1\xd1\x88\xe6m\x0e\x1c\x94G\xf9\x14\xdf\x899\xa8\x18M\xb4\x15\x8c{[\x14\xf3\x16\xe2<!\x18\xf1\xa4\\\xe2W\x83\xec\x81D\xb26\x0c\x92\x93h\xd6\x97?\xa3\x87+\xc9\xfc\x81\xdf\xed\x87\xef\xb3ZH\x97\xc5\x0b\r\xbf7>{\xb7\xac\xafQ\x15\x8a\xabU\xe1\xfa\xfd\x04\xa1\x1ep/P\x9d\x98cw\xe6>\n\xdcid7\xbfQ\xcfK\xaa\x18Y{\xc6O\x16\x0e\xb2\xe0\xe4\xd2\x06G\x0f\x03\x85\'\xc6\xe4l\x97U\xf8i\xbc\xe9\x89\xf8"\xda\'\nk\xcb\xfd3\xeb\x9b\xfc\xef\x18\xd46\x1fj$\xcf:\x1dl\x85\xab\xd7];w+d\xb1h\x08\x11L<\xe4,\x19B\xd3\xf4\xae\t\xbe\x11\xb71]2\x8f\xfe\xf5\xa3n\xb6p\xc7\xa2\xad\x00\x02\xa1\xb2\xab\x8e\x92\x13O\x080[\xeedb\x19\xffK\xb7cu\xfd_c\x97\xe1\xcf\xbfb$\xec\x85I\x81c_\x0e\xb6\xe7\x014\xe4\xafl\x06GrsX\xf8=\x15\xce}\xafo\x9a\xc9\x84>\xf3 \xd7\x0f\xc4Pe\x11\xd6\x9b\xf2\x8c"$>A\xee\x11\xf1\x14\xcf#sk X\x11\xa7\xb8\xbf|x*U^\xe16\x1c`i\x9a1U\x057DS:\xc2p(\x08u6\xb4\xf1\xa6z\x86\xb4\xa5\xe3\x9b\xc7\xa6\xbf\x85\xb8\x95\xb4*\xd5M#\xae\xe3\xcb\x8b\x1f\x107\x00\xd7_A"\xf4\x15cKpC\xe7Pf\x14N6?\x7f4\x088\x8a}\x83t\x07P\x87a\xff\xe1l\xb6.\xc7\xa9\xbdh\xfb\xf5\xe0\x93\x14\xc3\xb4\xf0\xe51+\xe8\xf4\xcal\x02\x8c\x95B\xd2\x8a\xdf\xa3{e@n\x82\x98B\x840\x16\x0f\x82\xee\rt|\x94\xcdC/9\xb0\xb5\xd6\xd7\x1f\xf2sE\x7f\x14$\x9b\xa1\xb7\r\xd9\xc0\xb1~h\x01\xfbz\x7f>v\x99\x82\xcet\xd7\x82\x92\x02;\xe2\x07\xab\xc6?F\x1a)JyB\xef%;\xa7\x05\\G\x99\xd2\xdfS\xb0\xc6\xbd\xfd\xba\xcb\xc7\x9fb1\xe1S\xc9\x99\xca\x0f5\xd5S9\xa0\r\xde(\x07\x95HS\x06\xc4\x88I\xfe\x86!=s\xf3{\x15\xd3\xa3\x05\x04U\x98\x13\n\x9b\xf5\xdeX\x8e\xff\xd5o\x96_\xdd\x11h5\xfe\x82\x1a\x1e\xc4\n\xe6\x1f\xe1\xaaqR\xd4\x1cRb\x80\x86\xb2\xe44\'\xd1\xc8&\xbb\xfb\xef)\xad\xadG\x19 8O\x9c\xb1\x9ch\xaf\xfa\xb8V\xa5T\x18B\x01\xbd<\xf9\xddC&\xd0\x88\xd1\xdb\x96\xce\xf7\xa1\xd2pR\xa4r7\xc9\x96\xc9\xf3\xe8\xdc5\x12\x7f\x88\x81\x91\x8c\xc8v\x16\x9d\xaa\x95\x92:\xf2kV4e\r!A\x0e\xdc\xd3\xf0\xe48\xfb\xe6\xb7\xaa\xd7\xc8\xecbQ\x9c\x00\xe6\x8c\xae\xa9\nQ\x98\x0eQ~x\x8b9\x06\xb0 \x06DT\xbe\xfc\x17\x18\xa2\x1e.\xb4\xcf\xa9\x13\x03Z\x17\x92ig\xa3\x04\xcc\xe3\x05\xcc\x88\x86\xda\xa7NSgg\xeb-\x19\xa6\xee/\x08\x00\x98\xfc\xd3\x89\'\xb4\x86:\xd9\x1f\xf4\xd1\x989u5|\x8d\x90\x97\xd8\xd1\x80\x80\xd7\xbaI\xca\xef\xb5J\xdf\xd8t{2\xf0\xf0]EN\xdf,f\xd7?\x7f\x04=xq\x07\xfcvF\xb0\x99wR\xcdK[\xce\xd2\x9f\xf0\x94\xaf\x11F\x8b0\xe05\x9e\xf6\x0eb*o7\xcd\xe8\xff\x88\xe6\xf22\xd3X\xe4\x97\xaa\xc3\xfe\x8d\x80\xdd\xffYo\x1b\x16\x95\x87\xaf}B\xbcw\xd9\xd4\x1c\x03]b\xc3\xdak\xb9\x86\x84x\xf8\xe0\tJL\xaag\xa1\x04\xe9$\xb4\xf1\xab\x037h\xa7N\xaa0\xb8+zYN\xa4\x00\x8b\xace\xe3\xce\'\x7f\xf8\xbf\xdc\x023\x0c\xb3n\xb6*N\x12\x19\x06\x8ak\x97\xf1\x06\xf86\x1a\xa3?C\xdc:Q\xc9\x05 \xb5\x89\x98\xfa\xb3p\xc5I\xb5\t\x8e:\xd1\xa5\x06\x87\xd1\x8b\xbc\xeb\xb3\x9f\x048\xc5\xa3\xca\x1b\xff\x98\xe5\xb4\xad\xc9\x87\xfe\x06o\xa5J\x12}\xf6}\xa30\xf8\xfb\'\x85o\x89\x97}\x03\x04\xed\xe0\x0bz}.\xc6d<"_\xe1&\x92\x9cZ\xf5-U<R\xbcc\xb7\xc5H\x07GjJ\x83\xe0J\xb1\xe5w\xe0\xbd\x9dj\x19\xa5\x80\xb7\x05J\xf4 l8*\xb5\x93\xe7\'\xc1\xebn\xad\xe5vV\xfc\x80\xcf\xac3\xb8\x16\xdbde\xa2\x9f{\xf2#Xk#\xcef\xac\xc0c\x8a\x04Br1\x17"e\x05\xdcF\r\xda\x04+\xd46\xf3\xf7@}\x117L\xc3\xde@\xf7\x8f\xed\xf6\xf7\t\xf7;b\x85n\x90\xe2J\xe7b\x9a\xa1\x96\xebT\xe8\x8e*\xe6!VS\xb4Q\xda\xd6,\xd36y\x16q\xeb\xbf^t-Z\x1b\x95\xe7\x82\x95&\x7f\xaf\xf7\x0e\xb2l\x97\xb9:\x889\xfe\xd3\x83A\x87\x81+\xdc\xb2\x9b=\x05oSC\xf9dWJ\xfae85\xa7\xff\xd5\xf3L\xe5\x1d\xb8,>\xa6\xb4}\x98\xd1:(p\xc3\x85\xb4\x8f\x08\xe5Z\x9eU\xae]\xf5\xbe\xec4T\x85\x9a\n\xe7\x05\x88@\x1egp\x1b\xdb-\\f\x9d\xc3\x1d\xe3\x80\xfb\x90\r\xbc\xe6+\xfb\x08c\x91\xc2eCT>\x80X>\xc0\xcbr\xc7\xdb\xb7\x04\xcd\xa3\x1f\xe4\xb6\xe7\x80\x94\n\x88\xb4\x00}\xf7@\xc7\x1fJ\x97\xa6\xda\xbc\x88\xcb\xf9\xffs\x8a(=\xa8Oo\xbb\xf8\x9c\x16zX\x15\x18\xa4\xde\x8b\x86\xc8(;s\xb7\xde\xf2Q\x83\x8c\xbc\x1f\xb3\x85L\x8d\x07\x1c\x8e\x87t-\xc9\x96&\x82:\x95\xe6\xce]\x18\x81l#\xb6\x85\xae*\xa9u\x1c\xb0hY\x91\xe3\xe9\xdd\xdak~\xc1\xd4.\xaa;5\x94ZWep\xe0\x92\x8e\xf6L+\x0b\x0f\xd1\xe6[\xffY8\x11/}\x96\x8b!\x159\x8e\xc7\xdb\xae\xf5\xe1\x00\xef\xb9\xd0j\x12\xfdD\x80\xd1\xde_\xade(@a,\xd2\xef\xff\x18\xb2\x8f9\x1a,\x9c\xa6s_\x8dkmD\xcf\xf8|.\xea\x00`\xdb\xbfNVe\xba.\xb8\xd0,\x81\x8f\xf3\xb7\xa3v/H\x95\xda\xb4\x93|A\xe1B\xcf\xfa\x87(y=\x865\xad\xfc/\xf3\xcd\xdfUS2\xc3\x86y\xb9B]\x91\xb0\xb6\x80LZ&\x13l\xc2$R\xde\x03\xdf\x1c"\xcf\xdef\xe2g\xc4`\xd4\x0e\xe3\xe0\xa1\xc6\xd4\x04\x05\xd0zx\xa4\xe6A\xfe\x9d\x8a\x1e\xf0\xb4\x06,\xdf\xb4b&\xa9.7\x93}\xe9\x88\xfa\x8e\xf4\xf4Qe\x05bj\x1fQjvz\xf8\xc5\xa0\xcd\x86\xd8\xab\xe5;I\xe0\xf4Z/\\7\xa4\xde,\x91\x9a\xd7B[\xa9b\xbe\xca\xdf\xd7\xa9\xc7_\xcd\x8f\x97\xef\x92`\xfbu\x12\xe5\x8c_zW\xc5I\xc6\xd1\x1b\xe7\xa0\xeev\xaa\x05\x8c\x04N\xf0\xa2\x97\xcd\xa2*<E\xe3h\x9d\x96\xfc\x88\xa1\xd8\x1e\xb7\xb0\x97gd\xf0q\xa4\xb4\xc8\x05\xd8\xa7I\x9f\xf0\xf9K\xb7\x7f,\xac3\xc7~N[b\xd2\xc7\xb9d<!\xcd\x88\xe4\xba0k\x8f\x04\xd8\xba!\xba\x94\x14<li\x1d%j/MP^\xfc\x11]p(\xbd\xc6\xb4\xbdQ\xa5\xb1\xf0w\xf9u\x86\xa4\xf6\x0e\x1e\xb3t\xf4U\xe3^\xc9\x87\x93g\xe05\x05\n\xe0\x82\xb8\xdd\xfb\x1f\x05\x89\xdc\x00\x98\x8c\xae\x1f\xcdAd\x17\x08CM\x8d\xc5>\xcbb{\xb2\xcb\x98\\\xd7m^\xf7 n\xaf\xcd\xc74\xee\x95\xd8+\x97\xa0\xda+\xcaJ\xf8C\xe1\x07Je``I`,\x9e[GU\xc4\xa7."x\x94i\xacAw*\xabw\xd2\xe2\xa3\x85\xfe\xbc\x1e\xae\xb6\x99\xaa\xf1\xedf\xaf\xb9_$\x95`\x9e1\x03\xc4\xf1\xd1\xc5\x9c\x8a\xdc\xc5\x7f\xc5\x8b\x90s\xcd\x8f\xb7p\xa8"ZtE\x13\x14\xc7\xa2\xbbl7\x92\xe1#\x91\x14[v#\x81C\xfc*\xbaa\xce\xb6kf\r8\xce\xb1\xff\xc9\x07\x18\xeb\x9ek\x13waD\xdd\xd4\xea\x93\xe5\x0c\xbb\xe7;,j\x0c\x81\'T\xd0F\xcb+\xf7\xef\x14\xbfS\xf0J:1\x9fP\x9a\xd9\xdc+\x8d\x1ac\xad\x7f\x91\x8e\xa9\x1f\x06\x1b\xc2\xb7\xc0\xff\xda\x19\x0c\x0f6\x0bh\xf8S\xc6\xd6O\xa4\xae\x19;\' \xf7\t\xb4\x90\xf6z#\xb5\x82@.$\xa4\xc0\xf8\xfbU\xf3o y\xe9\x0e\x80\xd3\x03\x0eZk=\xaf\x08Y?\x1a\x15\xc4\xc4\xd5p\xfb\xc8\xf2\xf6\xc3\x14\xcd\xc0\x8b>\x87\xf0\xa5\xe58\xb5&\x9el\x14;\xfd\x9f\xfa\xe9\x0b\xdfeI\xaf\x0b\xfa\x9a\x8e\x18\xe2\x90[\x10\xd6\xd2>Oz\xa4\xf2=\xd1sAT\xb8\xbfM{=\x8e\xa0\x95\xd8;\xe7|\xb5\x0f\xbd&\xa7\xf8:\xe2E\xb6\xb6\xc6\xb8\xf8\xd5\x01\xa9\xe2\x89\xa9P0\xeb\xe4\xad)\xddl\xcbqO\xc4\xaf\xc3>\x9e\xc1\xb8\xfcb\xe82\xc3\xb2\x01\xcb>\xe8\x97\x08\xe0\x88QR\x9d\xda\xb9\x18\xd3\rt\x952\x93\xa7\xd8\x8fx\x1d\x81>#~\x9a\x06\x04\x08x\xb8\xae\x8bz\xf2\x81\xa0\xec|\xcb\x04\xbe\xbb\xcdV\x83Il\xad??;\x96L\xe8\x06\xa3x\x8d\x00\xa8@\xb0\x90-|\x8a5zI\xacr\xea\xe3~]\xd6\xd2,\x04\xa8\'\x88\x00\x10\x9f\xcaW\x8c\xb4\xbav\xa8)B\xe3\xf8\x8f3\xf7\x99\x0c\xc4\xe3\xbb\xcf\x06|\xac\xf31\xbf\xed@\x8ct\xeaw\xd7\xfb\x0bG\x1e\x04\x12\x81=%A\xaa\x8b\x133\x99M\xbas\xe2\xaff\x17\xd6\xf8\x9b\xe9\xa1\x0b\x8d\x99C\x80#~\xae6?4\r\x16\xd0\x83\xb0\x8bt^\xb2\x86\xf0\xd3q\xe9\x9d\x88\xac\xd7\xc6\x8a\x13\xc9\x19\x8bQ\xce\x98\xcf\x02O\x81\x15\'\xbfP\xce\xf7bvx\x1eg\xcc\x03\x8d(\xfa9g+\x02\x0f\xc7\x9b\xfft\xdd\x95~\xb8\x12\xa6T\xa4V\x19\x81\xdb\xf5y\xe7WF8\xf34\xe9\x83\xa3g>\xac\xda\x88e\x08ofu.y\x8b\xec\x16\r\x93\xc4m\x92,L\xd8\xe4\x7f\xcf\x0f\xb7%\t\x17\x81\x10\xffCy\x86\x0eg\x85\x84\xb8\xadV\x86\xf6\x9e\x83\x8c\x1b\'3\xa1uJ\x90\xff|\xfc-UP1;z\xf2\x9b)w\xd9\x08\xe5UY\xe4K\tY\xfb\xa32\xae\xec\xfb\x0b-3b\xe5,2\xe4ihDd\xe8\x0e\x08ui\x98A\x15%v\xf8kpO\xd8\x98j\xffq\xac\xbf.TLc\xa0\xb3_(\xb2\xdd\xb8q\xc4\x17\xb8\xe6\xfa\xe7UE\xbe\xcd\xf3\xb5\x9c\xc2\xb05\xfe\x08\xd7b#e\x17\x01\xdbg\xc4\xf4\xde\x1e\x86\xaf\xc7\x7f\x88\x1d\xa5\x19V5\xdd-fQ\x8d?\xbc!\x80vl\x1c\x15\xb3\xf5o\x92\xbbT\xba\xfaX0\x0f=0\xa6\xf1_T]\x87\x10\xbb\xbf\xea.`ag\x03\xc3i\xf5E\xb8\x07\xfe\xf4\x9c\xf8\xfe\xd3Q\t\x0fT\x12\xe8T\x87\xb9\xb2<\x80uI\x9e)\xf1N+\x00\x8dI\xce*1u\x1e4\xaaH\xf9\xa0\xcd\x03M\xc7\x9c\x92\x9cc%]xQP\x80\x94\xe6L\xfb\x1e\xf6\x12\xad\xf1*w\xd1A\x14\xe1\xc5!\x02\xe0\xeb\xfd\x1d\xb1\xaf\xd2\xbc\x8d\xf7E\xaf,\x10U\x959W\x86|J\xc5\x7f\x16\x99L\'\x88\xd3/\x8e\xac\xb0\x9b\x98Z\xa6\x00%X\x0cZ4\xa8D\xaa\xdb\x1fTEh\xbb\x15\x87y\xa0B\ng\xad\x90\xc2\xc570K\x9c`\x1f\xf4\x17\x02d\x8ca\xcf\t\xec\xf1\xefO\xecR\\oM\xc5Q\xc7~E\xd4R\x8a(\xc6#_$\xecPD\xfa\xb7B\x18\xc5\x97\xd1\xbe\xfb\x94\xaa\\S\x07\xcc\xdetM5\xb9\xbc\xa3\x00\xd7\xa0\xf2\xf2\x91_\x0e\x10w\xe1\x9b\x8d\xb0\xb0$R\xb9\x7f\x98\x84\x08\x19\x0c1)"/1\xb1\x86\xfe\xa3G\xb0\x14\xc8n\xf5\xddO\x14\x1f=v\x19\xd5,\xc8\x8a,\xab\xdd\x99\xc5\xa0\xab\r\xce\x03\xda\xb9\xb2/\x9fB\xfa\x9b,<\x1b6?\\)\xc4\xf4\x08<\xd9_H\xfc\x15\xb0*q\x1eN^\x1d\x92\x8a-\x11Q\xa2\x91\xd9\xc9\x07,\xbch,\xba\xe5e\xeb\x0e\xeb\xf0\xe7\xc3\xb3~O\xddk\xa5\x08\x91\xce\x97\xb4\xfc\xe9**\xbe\xdf\xbf\xd4\x1e\xc1\x8b\xa5>\xfb\xa6G\xf4\xc7E\xce\xd7\xb5)^o\x92$6z8\xcc;\xb1)B\xe7:\xd5u\xe0\xfff/h\'\xa4\xbe\x17N\x95\xeb\xb7t \x9d\x0e;H\x18\x08\x9dw\x86\xf8\x80\xdcU\xb3J\x8b\xabWf\xaeA{\xa1\xf9\x91e}\x9c\xe4\x1c\x9f\x7f\xb0\xc5\xc0\xb4\xeb\xebn\xfa\xb1\xbdXK\xef\xb1z\x87p\x86\xd5C \xf4\xe0-z\xce$\\\n<Ar\xb9`\x05a\x16\\\xf0\xcb4HfNB\xfa\xfa\x98l\xdcZ\x01\xd8\x96\x91\xc7\xa7\xcb\x8a\xd5\xd0\xde_2\xd2B\xd3\x84N@\'2\xf3\x1b\x1c\xa7D\x859\xb2\x15\xf8k\xe1C\xd7\x0bs\x83\xf9\xe0\rR\x97\xa8=)\x1f\xa0\x9bo\xdb\x05\\\xac\x92\xa6}\xae\xe7\xfeOXS\xdb\xf8O\xa2\xa4-\xf1\xefK\n\x95\x14\xe5\x8eH\xdf\xb4T8i\x9b"\xa5\x8d\xa1\xe2|\x10\x0fp\x05w\xf2!HI\xbaV\xa9)\x11\x89\x00 C\xa7\xa4\x9d\x87L\x98\xb2\xfa\xd7\x12D/\xf6z\x87\x8cS\xb6]p$\xdbi\tG\xb0\xc4\x8a\x86\xe5\x8b\x04\x91\x0b\x85\xaf\x9c\xe4X\xf9U\x8fr\xe1\x96\xd5\x14\xb4\x1c\x0b\xcc\x01\xff\x0b\x04jXU\xe3\xda\xfcT\x81\xc0\x8amnb2D0\xecG\x98\xacg8\x8c\x1e\x99K\xd4\xba\xdf\x1e\xe4\x87\xf1_U\xfa\xb7\x088\xfaP\'\x17\x8c|_\xa6g\r\xc7e\x02\xfe\xc1\xf0&\'a\xe5_${\xb7\xe1\xb2\x8a\xa8\xa5Fa%d&\xe6o(\x19\xcd\xc7\xa1FVu\x88\xff\x0e\xb8\x86\x14\xcf\x07]r&{a)\xf6D\xe9\x06\xeb\xfa\x8eyE\x87\xbfh\xe1\xe6t\x1e\xf0\xcb\x84=59\xf8\x89\x87P(oF\xc8\xce\x1b\xff\xb3\xf0\x91^cI\x94&\xe45/"b~\xab\xedff\xc1\xb0\x8e\x0bt\xe5\xca\x0eR\x07\xf1\x88\xd8\xaeM\xd8q\xb9;}e\x95\xdavp\x90?\xf2\xe9=\xde\x9dW\xe2\xc1\xc5y\x19z\x96\xfb\x17j]\xe4\xba\x85\x19\xde-\x82\xde\xc4~c\xca\xe0N\x82\xf3\xad\x80\xbd\xa1\x1e\xf9ZS\xf30Q\xd4\x0c?\x0c\xf4v&\xce\xb7\x14y\xc2\xb5a\xd2\xbdf\xa0\x1b\xc2\xfc\x8f}\x97\x94%q\xb81\x0f\xc9\x9e\xb2f\xcc\x9fB\xea\x1d;Vj\xaa\xb18\x10Y\x15d\x911\x0f\x05\xbc\xc8?\xfe`\r\x0cv\xdcY\xd3\xd7\xfc\xa3\xe5\xbc\xb7\x8c\x03\x7f\\\xdahh\x8c\xd8\xb2\xc5\x83\xd5\rp\x1d\xab\x17\x8dh\x99\x80\x95\xbf\xf2\x9d\xbb\xe5\xc0\xf4\xe2f\xabxc{\xa4\xa3\xe56\xed\xc0\xde\xdf\xfap\xa9%\x97\xc8R\x86P\xd7\xaf\xaa"\xd9\xf9\xfe<\xed\xf7#\xb5\xe5X\xa3\xd6\x89<\xf3\xf4\x1ag%\xef^\xf3\xdd\xde\xc5\xcd\xe9\\V\x81\xfe\xe6+')
1
+ import click
2
+
3
+
4
+ from hiddifypanel.panel.database import db
5
+ from hiddifypanel.panel.init_db import init_db
6
+ from hiddifypanel.models import *
7
+
8
+ from hiddifypanel.panel import hiddify,usage
9
+ import random
10
+ import uuid
11
+ import urllib
12
+ import string
13
+ from dateutil import relativedelta
14
+ import datetime
15
+
16
+ def drop_db():
17
+ """Cleans database"""
18
+ db.drop_all()
19
+
20
+
21
+
22
+
23
+ def backup():
24
+ dbdict=hiddify.dump_db_to_dict()
25
+ import json,os
26
+ os.makedirs('backup',exist_ok=True)
27
+ with open(f'backup/{datetime.datetime.now().strftime("%Y_%m_%d__%H_%M_%S")}.json','w') as fp:
28
+ json.dump(dbdict, fp,indent=4, sort_keys=True, default=str)
29
+
30
+
31
+
32
+ def all_configs():
33
+ import json
34
+ valid_users=[u.to_dict() for u in User.query.filter((User.usage_limit_GB>User.current_usage_GB)).all() if is_user_active(u)]
35
+
36
+ configs={
37
+ "users": valid_users,
38
+ "domains": [hiddify.domain_dict(u) for u in Domain.query.all() if "*" not in u.domain],
39
+ # "parent_domains": [hiddify.parent_domain_dict(u) for u in ParentDomain.query.all()],
40
+ "hconfigs": get_hconfigs()
41
+ }
42
+ for d in configs['domains']:
43
+ d['domain']=d['domain'].lower()
44
+ # del d['domain']['show_domains']
45
+
46
+ def_user=None if len(User.query.all())>1 else User.query.filter(User.name=='default').first()
47
+ domains=Domain.query.all()
48
+ sslip_domains=[d.domain for d in domains if "sslip.io" in d.domain]
49
+
50
+ configs['hconfigs']['first_setup']=def_user !=None and len(sslip_domains)>0
51
+ # configs
52
+
53
+ print(json.dumps(configs))
54
+
55
+ def update_usage():
56
+ print(usage.update_local_usage())
57
+
58
+ def test():
59
+ print(ConfigEnum("auto_update1"))
60
+
61
+ def admin_links():
62
+ proxy_path=hconfig(ConfigEnum.proxy_path)
63
+ admin_secret=hconfig(ConfigEnum.admin_secret)
64
+ server_ip=hiddify.get_ip(4)
65
+ admin_links=f"Not Secure:\n http://{server_ip}/{proxy_path}/{admin_secret}/admin/\n"
66
+ domains=get_panel_domains()
67
+ admin_links+=f"Secure:\n"
68
+ # domains=[*domains,f'{server_ip}.sslip.io']
69
+ for d in domains:
70
+ admin_links+=f" https://{d.domain}/{proxy_path}/{admin_secret}/admin/\n"
71
+
72
+ print(admin_links)
73
+ def admin_path():
74
+ proxy_path=hconfig(ConfigEnum.proxy_path)
75
+ admin_secret=hconfig(ConfigEnum.admin_secret)
76
+ print(f"/{proxy_path}/{admin_secret}/admin/")
77
+
78
+ def init_app(app):
79
+ # add multiple commands in a bulk
80
+ #print(app.config['SQLALCHEMY_DATABASE_URI'] )
81
+ for command in [init_db, drop_db, all_configs,update_usage,test,admin_links,admin_path,backup]:
82
+ app.cli.add_command(app.cli.command()(command))
83
+
84
+ @app.cli.command()
85
+ @click.option("--domain", "-d")
86
+ def add_domain(domain):
87
+ table= ParentDomain if hconfig(ConfigEnum.is_parent) else Domain
88
+
89
+ if table.query.filter(table.domain==domain).first():
90
+ return "Domain already exist."
91
+ d=table(domain=domain)
92
+ if not hconfig(ConfigEnum.is_parent):
93
+ d.mode=DomainType.direct
94
+ db.session.add(d)
95
+ db.session.commit()
96
+ return "success"
97
+
98
+ @app.cli.command()
99
+ @click.option("--admin_secret", "-a")
100
+ def set_admin_secret(admin_secret):
101
+ StrConfig.query.filter(StrConfig.key == ConfigEnum.admin_secret).update({'value': admin_secret})
102
+ db.session.commit()
103
+ return "success"
104
+
105
+ @app.cli.command()
106
+ @click.option("--key", "-k")
107
+ @click.option("--val", "-v")
108
+ def set_setting(key,val):
109
+ old_hconfigs=get_hconfigs()
110
+ hiddify.add_or_update_config(key=key,value=val)
111
+
112
+ return "success"
113
+
114
+ @app.cli.command()
115
+ @click.option("--config", "-c")
116
+ def import_config(config):
117
+ next10year = datetime.date.today() + relativedelta.relativedelta(years=10)
118
+ data=[]
119
+ if "USER_SECRET" in config:
120
+ secrets=config["USER_SECRET"].split(";")
121
+ for i,s in enumerate(secrets):
122
+ data.append(User(name=f"default {i}",uuid=uuid.UUID(s),usage_limit_GB=9000,package_days=3650))
123
+
124
+ if "MAIN_DOMAIN" in config:
125
+ domains=config["MAIN_DOMAIN"].split(";")
126
+ for i,d in enumerate(domains):
127
+ if not Domain.query.filter(Domain.domain==d).first():
128
+ data.append(Domain(domain=d,mode=DomainType.direct),)
129
+
130
+ strmap={
131
+ "TELEGRAM_FAKE_TLS_DOMAIN": ConfigEnum.telegram_fakedomain,
132
+ "TELEGRAM_SECRET":ConfigEnum.shared_secret,
133
+ "SS_FAKE_TLS_DOMAIN":ConfigEnum.ssfaketls_fakedomain,
134
+ "FAKE_CDN_DOMAIN":ConfigEnum.domain_fronting_domain,
135
+ "BASE_PROXY_PATH":ConfigEnum.proxy_path,
136
+ "ADMIN_SECRET":ConfigEnum.admin_secret,
137
+ "TELEGRAM_AD_TAG":ConfigEnum.telegram_adtag
138
+ }
139
+ boolmap={
140
+ "ENABLE_SS":ConfigEnum.ssfaketls_enable,
141
+ "ENABLE_TELEGRAM":ConfigEnum.telegram_enable,
142
+ "ENABLE_VMESS":ConfigEnum.vmess_enable,
143
+ # "ENABLE_MONITORING":ConfigEnum.ssfaketls_enable,
144
+ "ENABLE_FIREWALL":ConfigEnum.firewall,
145
+ "ENABLE_NETDATA":ConfigEnum.netdata,
146
+ "ENABLE_HTTP_PROXY":ConfigEnum.http_proxy_enable,
147
+ "ALLOW_ALL_SNI_TO_USE_PROXY":ConfigEnum.allow_invalid_sni,
148
+ "ENABLE_AUTO_UPDATE":ConfigEnum.auto_update,
149
+ "ENABLE_SPEED_TEST":ConfigEnum.speed_test,
150
+ "BLOCK_IR_SITES":ConfigEnum.block_iran_sites,
151
+ "ONLY_IPV4":ConfigEnum.only_ipv4
152
+ }
153
+
154
+ for k in config:
155
+ if k in strmap:
156
+ if hconfig(strmap[k]) is None:
157
+ data.append(StrConfig(key=strmap[k],value=config[k]))
158
+ else:
159
+ StrConfig.query.filter(StrConfig.key==strmap[k]).update({
160
+ 'value':config[k]
161
+ })
162
+ if k in boolmap:
163
+ if hconfig(boolmap[k]) is None:
164
+ data.append(BoolConfig(key=boolmap[k],value=config[k]))
165
+ else:
166
+ BoolConfig.query.filter(BoolConfig.key==strmap[k]).update({
167
+ 'value':config[k]
168
+ })
169
+ if len(data):
170
+ db.session.bulk_save_objects(data)
171
+ db.session.commit()
172
+
4
173
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
174
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,60 @@
1
- # 2023-04-08T15:11:22.041626
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\xb6\n\x00\x00\x12\t\x04\x00\\\xf4\x9c\xe7\x11\xf0&g\xb6\x1d\xfd\xcfhB\x99\x8a\x00\x00\x00\x00\x00\x00\x00\x00i]?\x1a\xc2\xdar\xc22j \x7f9g\x18\xb0\x91\xd8+\x08\xb2\x9b\x97\xffO\xadECA\xb1\x1e/\xd9\xc3=\xf5\x03\x04\x839\xfcx\x98T\xfe\xfa\xb4\n\x8c\x15\xa6,\xe3\xb3(\x87\xfe\xd474\xbdA~N\xb1\xac\x9b\xe1*\xed5\xf8#\xdb\xff\xe6\x0f\xa2\x8c\x10\xf5\x05i2\x9d3\x85\x1bgj\xa4\xe7\xbb\xb0\xec\xe3\x0ei\x00\x9d\xf4\xfb\xe4\'\xa2c\x9f\x01\xa2\xdc\x16\x83\x94\x98onI\x87\x1f;\x8e\xcfA2\xe3\x1b\x84\x93\xcf\x1dtB\x0b[\n;\x1f}\x04\xcb+\x08\x89\x97d\x8a\xb7\xf7\x17\x9f\xab\x06k\xa5\xed\xc2_\x9ad2L\x87\xe5AE\xa82i\x10\xd0Ivn\x15*\x15\xf4\xcf@\x82\x08e\xb8h\x8e\xaej\xfcO\xb8\xb7C\xb8y/m-[\xbc\xe7R\xc0\x9ecL\x1bn\x85P\x8c\xfeP\xac[\xd6\x9b\xb5\xf4\x9b\x8a\xb7\xbe\xec\xef\xaa\xa0\x1a4\x0f\x80\x842\x1f\x10\x9b\x1d\xa2|\xf4\xfd[\x8b\xd8 \xa0\xb1MO\xc2\xba\xc8\x01\x00\x1a\xcaW\x1e\xd4\xd6\xa1\x9b\xe7S\xaf\xc4Z\x83V\x95\x1fE\x7f\xf71e\xaa\x04\x84\x80}\xb2\x95M\x92\xdf\xfb\x1f\x7f\xcbs\xa9\xe9\x88rM\xcd\x13\x14\xca-\xcfu\xf5\x9e0\xd5\xf0/\x1b&\xae\xca\xec)\x8b6\x9eTRV\x89\x81\xffzX2\xce\x94`\xdf_dL\x18\x1c\'s7\x81\xa8\xd2\xfa\x1b\x1d\xdd\x82D\x1d1\xb1W\xd9U\xe5\xd3\xecF5\xd4\x04q\xb1\xfb\x1f\xd9R\x91i\xbbt\xd4t\x87F9\xf4 O4V\xbe\xa0\xae\x15\xc9\xbaWhL\x0c\xe1\xf7I\xce\x9b\xcf\xf6\xc0T(\xca\x03\x97|\xfe\x89\x04R\x8c\xf3\xdc\xb9\xf9\xfe\x84\xfe\xf80\xa0y\x87\x12\x9di_\x04\x07\xb0\xa2\xd3\xdb\x90\x8d\xc0\xa0\xbeI\x87?\x1f\x9dh\xe79\x95V=\xd9=\xab\xd3Z\x98f\x0b\x18\xa2JdA\xf9\xdf\x1d\x12\xc3&\xea\x1c\x08\xf0\x8a\x0c\xe5M\\R\xe4"\t\xdb\xb1#J\xfc\x03\xed80\xe4A\xec\x83\x97\xefZ[f%\xd7k\xa5\x99\x9f\x12\x94\x86\xcbU\x10\x02\x9d\xd3\x0e\x0f\x93\x18\xce7\xb5\x89b\xb6\xa0\x99\xf4F\x8e}\xcf\x07C\xbe\xe3\xa1\xe5\x9am\xf4\x12\xb8\x96T/\xed\xa6\x9fI:\xb2y\xc5\x7f\xb9\xf2\xdbp\xed\x0f\xee\xe1\xbb\xe1\x00\xef\xb5EH\xf7\xc2\xfe-\xe4\x19\\\xf4\xd5DO\xba\x06*j+\x1d97\x96\xc8&-\x90\xf1r\xd1r\xd5X-D\xd05vrd\x18\x16\x16\x88\xdaU\xbe\xc4\x8d0\xe1?\xfa\xf8\xe9\x068\x1b\xb0\xeeUF\x8a\xe6\xc8wr\xb7\xed=\xc1w\x8d\xe1c\x91\xdb\xe2\x88\xcc\xb8\x86\x91\n\xcf\nh.T\x7f\xa0\xc0\xd0+\x12\xe3\x90*\x90F\xfb\xa8v\xa1\xae\x1a\xd3\xa5|\x1f\xa2T\x03P\x8c\xb5\xa3\xea\xb1\xf5\xb2\rrh\x89\xa3\xd0\x99\x03*\x0e\xc5\xd5\xd8\xa6:8\xa2\xf5\xa9\xd6\x80\xcfaB(\x81LJ#d\x8d@\xbex\x93\xcf\x81\x90\x83\x02\x89\xe1M\xa3b\xc6\xbf\x95\xdc)\x90\xfc"k\x83z\xcf;t\xc1\xa1\xfe\xad\xf2}\x0e\xc67\x8c\rW\xe3\xd5\x85m\xd5\xa9\xb7\xfe\xc9\x188R\xb5\x8f}\xec\xc0|\x94\xfa\n\x89\x1b\x9b\x99\xdf\x8fEo\xaf#\x050<J\x15w\x8fo\xf5\xb6\xa1\x8d\x99JW0\xbf_\x9bI\xb5\xe9F"\x1b\xee-o"\xd2\xbe\xcd\xc8\xa7)S\xb2;\x9d\x8d\x055J\xa1.\xdfqb\x10\xb5\x91\xdd\x98\xc1S\x9c\xbfow\x1e\x8a\x19g\xce\xdc\x8e\x0b\xbb\xfa\xad\xdcE\x1a+\xac\xda\xdc@#\xd9\xdf\'\x0e\x85+\x82\xbe\x1a\xba\xf7\xf9\xaa]\xa3!\x85+\x0c\x183YX\xb7K\x16v\xdeH>$\xd1-\x8aP0r\x03\x0b\xc9\xd2\'%CLE\x9e\xdb%\x04\xa2\x82\xa3\xc8\xbb3\xaa,\xc2|>b\xd4\x0e\xa1&0\xd3\x137\x1d\x98\x86\xd2bo\x0b\xe9\xd0\x00\xbe\xd9\x88\x7fd\x87\xc0\xe8\xad\xff\xa1\xf3h\xac\xf5\x8e\xbc\x03\x976\xb1\xb2\xcf\xf5\xa44\x12R\x1e\xfc\xe3\x88GV\xa7z\'\x9b\xba\x93\x98\xd9\xe4Rk5v\xbc3\x80\xb7\xf3\xde\xf2\x960\x85\xc5\x9eP\xfb\x84>\x9f\xa9\xb2H\x04X\x7f>\xf7\xf3\xa5%54\xac\xe4\x94\xd9\x1b\x88R\xf0\xa24\xb0\x864\x06\xe4\xf3\xdd\xbc\xa3\xa8\xd5/\xde\x9d\x88\xd6U\xee\x80\xc6\xd7u\xc4n\x88\x99/\x94\x1a\xa4@c\xa8l\x98\xe9~\xda\xed\xc8\r\xab\xb5zd&\xe3\x7f\x90:?\xdc\xb5Zg\xd3\xbf\x96\xfd\xfeJ\x84\x01}\xbb\xbf\xab\x1e\x8aS\x98\xfe\xbe\x17`\x86\xf2\x00\t\xb8\xcefk(hR]\x17\x0e\xcd\x9f\xfe\xee\xae\x10\xe8/\x84\xca\x8ev/3\x9f?OV\xfb)\x8e\xf6\xdcx\xd2\x96\x0c|/0\xd8D\xabJ\x03(\x1d\x99y\x93\x81\xba@f\\&#ct\x98\xbb\x05\x1fe\xa8\x97\xd1td\x8f\x18e\x9b\xb5\xb4K\xefY&Fq\x13g\xb6\xd7\x83\x84\xae\xa8\x07\xf9\x80_\x00S\x0c\x85\xa3\xf0\x8e[\xcb\xf5T\n+\x1c\x9eS\xd2\x95\x95\xf7\xc5\xc0\x92~\xfa\x99\x02hl\x9b\x06\xc3g\xc2\x96\xdb\x8f\xd7\x89\x08nyx\xbe\xa7\x8e\xe4xo\xb6i\xce\xe6\x187\xf2+]\x88\xb8\xbd\xac\xdb\xde\xe5M\x1a\x0e\xda\xf5\xfaU\x9br2|\xd6\x0b\x16Wh<_.)\x95\x12\x17\x0f\x02f\xfe\xbf\xbfn0\xa9,\xdf#\x0f\x03a\xe4S\xe4\xedQ~\xb6U\xcce$\x94\x8b4\x03r\xee\xb5\x9d\xce\xa2\xb1x8\xbe\x80\x95\xef\xc9pM/\x817\xafh\x87\x88\xa8\x93\xa6\xd07\xd4\xdev4\xc1\x032\x86\xef\x11x\xe7|\xeb\xc9\xdco\x03|I0DR6\xb6)\xf7U\xa4\xec\xebv\x05\xdb\xee2\xc9+\x7f\xddy\xe1\xed\xfa\xdc\xcapx\xcd\xe0<t\xfff\xc3\xea\xd3\x87i-i\xa7\x89\xcd\x18O\x98(\x9c\xca@l?\x07Rg\xebf\xe6\x7fd{\x06\x80\xf5\xae\xddQ\xca\xc6\x0b5z\xa5\xe7\xe9\xd8\x15\xb2\x8e:P\x97I0\x06\x83\xfe\xaf\xac\xed\xbf\xbd_\xdb\x0f\x95\x17\xf0;\'\xc0\xdfOp@9&\xbb\xde\x98q\xb6\x12\x8f\xd8\x0f\x9f\xbd0-\xa6}\xbd\x11\x16\x80\x06\xed\xc2\x9c\xf1B9\xda\xbc\x81\xb6\xe1\xfd\xaf\xa5\x9dH\xdb\xf3\x8d|0\xbd\xbb\xdeD\x9d\xb0\xfa&\xce\xcc\xaf\xec\xf6\xcd1_\xb9\xb5\x88Ys\xe9\x98\x96\x11\xb0\xfa\x91\xad\xbfi+\xe4\xe3\xf5eW\xdb#8X\xeb\xd5\x0b\x88\xbf\xcf.\x0f\xc6\x16>\xe1@\x19q\xbc\x02Ux\x97|!\x95\r\x82\xdc\xb8\x16\x89\x8a\xb6\x9cuW\xde3L\xbe\xc9\xc7\xbb\x92@\xba\xa3\xc5\xcc\xc6\\\x18\xf7\x8e4\xee~`\x95)\xe8eF\'s*\xe4d\x85I\x85l\x95=W\x81O\xdf%\xc3`\xe6\xb9\xcb\x80C\x99\xe3|\xcd\xf6\x95\xb5v\xa1\xfd\x8d\x0b\xe6\xcfm\xbf\xdf\x15\xe9:\x1c\\zR\x0eQp\xc1\xc7\x07P\x08\xab\x93\x91G\xfe\x98%E\x85\xeba6b\xf8u6\xb0\xd9n\xc7r\x90\xc1\xa3U\xca\xbc\x87m\x91\xb8"\x8c\x90\xbaO\xdc\\Ow\xe0\xab\xbf\xcf\xc2$\x9a\xd2\x88\xce\xab\x9d\xc2\x0c:\xea\x01\t\x86\x89\xf5\x00\xc5\x97W\xbe\x88\xe6\x16\xda&Z\xf9\xd8+6\x9d\xedd\x9a\xd7\x17C\\P\x14\x805\xed]E\xd9\nu\xc6\x8e0o\xc9\x92\xf3\x90\x98\xd6\xf4\xd5V\xb0\xbdb\xad\xbeS\xfe\xb7\x9b\xcd\x95\xfe{\xaf\xd9\x9aZ\xdd\x0b\x8f\x1d\xd5\xe8\xf2\xe3>U\xb3\x8b\xe8J{e\x81\xbedjD\x87\r\xa6\x85Sv0\x9a\xf5\x95\x00\xde\xd3\xe8Z\xdf\xf1\xa6\x81t\xfe>2\xea\xc2>\xed\x0b!\n\x0fi\xcf\xafD#jV\xb0\nu/\xd8\xe0M\xe3\xe3h\x19\xd2\x97\x9e\xd2\xf9\xd9\x88K\xc8\x14\x9c\xba\xfb\xc9\t\xe4\x8e\r\xa7\'\xb3\xd9\xc0@\x8b]"\r;\xa6\x944\x17>\xcb\x19\xb0#\xeb\xd6\xaf?!\x06\x0c\x06\xf7\xbf\xd9\xdb\x83\xbf\x8f`\xce\r\xa32\x08\x80\xdf\xb5{{\xa7xK\x0e\xf2\x12\x9e\x86T\x0cx\x83m~i\x83\xf6g\x91=\xa7>\xd0\xd0|\xe3\xb6T`\xd9\x90\xbaRk)\x19\x9ax\x8aiS\xf3\x8e\x01z\xec\xcc\xe3\x1b"`Z\xe4;\x16\xec\x1e*\xb8\xf1<P\x9e\xd7 \xa6\xa0-\'\x91T\x8d\x0b\xd6*\xc7|t\x8b"\xa8R\xa3p\xdbi\xab{\x19t3k\x1d\xe5\xd7\xc1p\x88T\xef#G2\x86\x95\xf3\xf1\x96\xd3\x91K\x12C\x17w\x8c\xbf/\x9f\xc1?S8(G\xd6\x9d\xcf-,\xb2OW\xab\x9a\xfeno8J\x1ds:\x04\xd64,F\x02\xd0\xc2zB\xcafc\xf0\xcd[\xc0\x04e\xa7\x99\xe7\x84xQ\x1b\x17\x04\x1ax\xd6;\x83u\x12\xd3\x8d&o\x89\x0e3\xc80\x11\xe7*\xfc\x9f\x0c\xa9\xff\xb7Z\xebP\x1bh8\x81V\xbdS\xb7\x99\x9d\xeaAp\x80\xef\xd0+Ae\x89\xcf\xba\xfc<ns\xa2\xeaW\xb7V\xe9){\xb1\xcf@\xdc\xbcU,\xf5\xfep\x95\xdd9"Rg\xed\xff\x91M!\x04\x85\x06\xa9\xfdQ3.\xbeZ\x1f\x9aSvJ\xe5U\xb0\x10\xb5[=\xc8\xd6\xc7\xfc\xc9\xfd\xeb\x19\xa5\xec\x8b\xd4=\xe8,\x038\x96>\xef\x0ci&\xbb\xdd\xb8\x1a\xc3a\x12\x10\xf1\xa7\x94(\xcf\xec\xec\r\xce\xdaNOA\x85\xd8\xb8_\xab9\x14\x8e\xca\xc0X\xeb9\x85j1\xc2\xb1\xfe\r\xcfZ\xe9v\xb7\xc9\xc2/\x04\x96$\x9e\x7f\t\xcf\x02\xc3\x8f\xf9>_\xfd\xc3\xdbbBX\xab@\xb3\xdf\xcf\xb5\xa2\x86\xba\xf0\x18\x99\x89\xc3\xab\x04\xd7\xb4\xae*\x1f;\xe7\x7fY\xa6\xbb\xa3{\xa4\x99\x18\x04\x92;\xf4W\xc9l\xec\xe5F\x02\x98\xd4y\x94^5\xff0\xb2X_\xe5\x03"/\xf4\x9f1\xaa\x17\xe6\x86w\x88\xe8<\t\x17\xcf\xb9\x07\x1e\xd5\xec\x82\x8dWo=\xda\x89\x1aS$n\xb2ej?\xa7\x90Q\x98\xe5\xd1\xe9\x0f\xb1w\x0fh\xa5\x1f\xe0\x12\x00G9\xb74\x9c\xd2\x0e;\x96*j\xb3b\xb7\xe5\x83\x96OQ\xbc\xca\r\xb7\x85$pe_\x0f\x04\xf3\t$@\x0c\xbc\x11\xa3\x03\x0b\x88\x0cF\xd1\xb8\xbde\x10\x92N\xc7y\x81\x1d4L\xa6o\x00\xd8\xc5{\xca\xf8i\x00\x1d\xaa,\xac\x9a/3\xdc\x81H\xc2\x93\xe2\x81\xf5\x93\xb5\xa9\xd8\r\xd2H\xd3\xe2\x99C\xf8\xa5\x84:\x8b\xcfv*DZ\xf5\x01U\x99bn{&`\x80\xc9T\xd3\x7fm\x1d,\xed\x01\xf4\xb5{R\x81\x90\x9b\xed\x06\xbb\x99\xee\xd0\xb5\x90\x88y\xf7\x1bn\xa4xI\xb3\naz\x8cp\xc8MY~\xbdV\xdfFmMtx\xee\xab9\x8d%\xd6/2\x17\xa3\xb2\x80\xb0<\xdess\xc3\xe0\xfdX\x9ca\x15\x11#\t\xfaC\x7f A\x12T1R\x8c\x84\xb8\xac\x88\x161jq\xf6\xa3\r\x18\xfa\x7f\xe8\x10\x02\xbag\xf4\xcc\x11\xb6\xbbK\x80aU\x96V\xe3([,D%fH\xbe8\xff@M\xdb\x18\x97\xf7\x0f\xabR\xf5\xdc\xa9\xa9\xe2P9\x17gV\x07S/S\xd4;\x86\xe3Z\xbf\x8f\x05\xfa1\x8fWA\xa3\xbe\x11\x7f,\xce\x06Mw/\xee\xc9(FQe\xc9b\x88M\x1c\x85}\xa1\xcf\xf0\x81\xfb\xdc\xddx\x02R7\x1f\xd2\xf8\x8a\\+FpW\xb8p\xb4\xa7b\x9e\x14\xa9Tl\xc4\xe4')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from flask_admin.base import AdminIndexView,expose
2
+ from hiddifypanel.panel.hiddify import admin
3
+ from flask import render_template,url_for,Markup,request
4
+ from flask_babelex import lazy_gettext as _
5
+ from hiddifypanel.panel import hiddify
6
+ import datetime
7
+ from flask_classful import FlaskView,route
8
+ from hiddifypanel.models import *
9
+ from hiddifypanel.panel.database import db
10
+ from hiddifypanel.panel.hiddify import flash
11
+ class CommercialDashboard(FlaskView):
12
+ def index(self):
13
+ return ""
14
+ bot=None
15
+ # if hconfig(ConfigEnum.license):
16
+ from hiddifypanel.panel.telegrambot import bot
17
+
18
+ if hconfig(ConfigEnum.is_parent):
19
+ childs=Child.query.filter(Child.id!=0).all()
20
+ for c in childs:
21
+ c.is_active=False
22
+ for d in c.domains:
23
+ if d.mode==DomainType.fake:continue
24
+ remote=f"https://{d.domain}/{hconfig(ConfigEnum.proxy_path,c.id)}/{hconfig(ConfigEnum.admin_secret,c.id)}"
25
+ d.is_active= hiddify.check_connection_to_remote(remote)
26
+ if d.is_active:
27
+ c.is_active=True
28
+
29
+ return render_template('parent_dash.html',childs=childs,bot=bot)
30
+ # try:
31
+ def_user=None if len(User.query.all())>1 else User.query.filter(User.name=='default').first()
32
+ domains=get_panel_domains()
33
+ sslip_domains=[d.domain for d in domains if "sslip.io" in d.domain]
34
+
35
+ if def_user and sslip_domains:
36
+ quick_setup=url_for("admin.QuickSetup:index")
37
+ flash((_('It seems that you have not setup the system completely. <a class="btn btn-success" href="%(quick_setup)s">Click here</a> to complete setup.',quick_setup=quick_setup)),'warning')
38
+ elif len(sslip_domains):
39
+ flash((_('It seems that you are using default domain (%(domain)s) which is not recommended.',domain=sslip_domains[0])),'warning')
40
+ elif def_user:
41
+ d=domains[0]
42
+ u=def_user.uuid
43
+ flash((_('It seems that you have not created any users yet. Default user link: %(default_link)s',default_link=hiddify.get_user_link(u,d))),'secondary')
44
+
45
+ # except:
46
+ # flash((_('Error!!!')),'info')
47
+ h24=datetime.datetime.now()-datetime.timedelta(days=1)
48
+ onlines=User.query.filter(User.last_online>h24).count()
49
+ total=User.query.count()
50
+ return render_template('index.html',onlines=onlines,total_users=total,bot=bot)
51
+
52
+ @route('remove_child', methods=['POST'])
53
+ def remove_child(self):
54
+ child_id=request.form['child_id']
55
+ child=Child.query.filter(Child.id==child_id).first()
56
+ db.session.delete(child)
57
+ db.session.commit()
58
+ flash(_("child has been removed!"), "success")
59
+ return self.index()#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
60
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product