hiddifypanel 3.0.0.dev64__cp38-cp38-manylinux2014_x86_64.whl → 3.0.0.dev66__cp38-cp38-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 (77) 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/clash_config.yml +1 -0
  58. hiddifypanel/panel/user/templates/home/multi.html +1 -1
  59. hiddifypanel/panel/user/user.py +233 -3
  60. hiddifypanel/static/css/custom.css +6 -0
  61. hiddifypanel/templates/500.html +1 -1
  62. hiddifypanel/translations/en/LC_MESSAGES/messages.mo +0 -0
  63. hiddifypanel/translations/en/LC_MESSAGES/messages.po +194 -190
  64. hiddifypanel/translations/fa/LC_MESSAGES/messages.mo +0 -0
  65. hiddifypanel/translations/fa/LC_MESSAGES/messages.po +123 -120
  66. hiddifypanel/translations/zh/LC_MESSAGES/messages.mo +0 -0
  67. hiddifypanel/translations/zh/LC_MESSAGES/messages.po +123 -121
  68. hiddifypanel/xray_api.py +109 -3
  69. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/METADATA +1 -1
  70. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/RECORD +74 -76
  71. hiddifypanel-3.0.0.dev66.dist-info/top_level.txt +1 -0
  72. hiddifypanel-3.0.0.dev64.dist-info/top_level.txt +0 -2
  73. pyarmor_runtime_000000/__init__.py +0 -4
  74. pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
  75. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/LICENSE +0 -0
  76. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/WHEEL +0 -0
  77. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/entry_points.txt +0 -0
hiddifypanel/Events.py CHANGED
@@ -1,5 +1,28 @@
1
- # 2023-04-08T16:23:19.902495
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xea\x08\x00\x00\x12\t\x04\x00/x\xbe\x0e\xf2\xdd\xd2B\xd2\xc0\x0f\x19\x028\xc5\xad\x00\x00\x00\x00\x00\x00\x00\x00\x82\xdbNF\x91(\xe8w\xfd\':\xb0\xaf\xd8`C\xe7\xb9\xf5\x8aF\xc8\x8d|kx\x15m\xfb?M:X\xad\xa1\xda^.?\x9aP\x89\xd2\xde\x1e\xee\xa5\xa3\xfe\x15\x03Fk\xa9<x$hrFc\xca\xd0i\xdb\x057\xcfp\x07\xb3\x1d\x98\xd8\x83\xff\xdc\xbdb@2\x92\x95\x0ev\x1c\xc9N\x9a \xfc\x15X\\kz*\x1c[\x1dz\x0c\xd7\x17{)\xb4zNAQ\xec\x1fx\x9c\xdf\xce\x9aQ\xde\x99\xebss<@\xd0\xf6@\x81\xc8X\xb9|\xe9\xa6\x87\xe5b\xbe\n_y~2\xf6B\x8bUyW\x01\xed\xdfC\xad\xa9PZ\xa0\xbc\xfe(5I\x14\x83\x83[\x9e7\x87L\x13aq\xcc9Y,\x94\xbe\x0etj\xe9q\x91\xf8\xdc\xe5\xa7\x8a\x0e\xaa\xd7\xb7\xfb\x12\x8d\xe42\xd5q1M\x8bp\x0egr\x8aB\xf3\x1e\x9c\xab\xfby\xfe\x9eBmJ-1\x98.:\xed\x19\x1f^\x1e\xf1\x11\xda\xdevQ\t\xea\xa0\x13\x96u\xab\x8f\xc2\xe2,\xc1Z\xf1\xe8\x8c\x10\xc2\xc4\xc8\x16\x8f\x11\n\x8b\x86\xe6\xaf\xea\xb5\x9f\x1d"1\xf6P`\xe97\xc3\xc0\x01|\x80\xb1\xf8\xed\x12\xb7\x8e\x938\xed\xe8\xe7G!\x1a\x92\x87_\xf0\x94c\xb2\xae\x8a\xb7wZ&\xb4\xee\xa8h\x08\xd0>1\x00\xcbkl"\xfc\x9a\x1b\xdc\xa2\xaf\x9b\xf1\x9f\xfc\xeb\xba7\x85\x99\xe7\xfb)\xac\xf37,Gh\xd6\xddm\xf9\t\xcaj\xe4=V(\xb8\xad\x943\xb8\xc1m\xc2\xa6\x8bs\xcb \xa0\x9a\xde\x91\xb2&\xc4Q\xb0S\x13\xb8\xb9\xb9z\xc9\xb4\xf3\x04\x88\xfc\x90o\x9a^B\xa6\xba2 \xac\xd4\xd7\x87\xed\x13)\xff\x81\xb5\x1b\x063gy\xa5\x1a\xd1wE\xa4\xb9(I\x1d\x08\x8byl3/\xf1\xa4+j#\xdaP>\x00\xa1\xf7\xb3\x98,\x82*rX2\x88\x003\xda\xd4\xae\xacR\xd3w\xb3\x8d\x17\xa43\x02\xea1\x8c70\x0f\xdb- *S\x88\x81\xe1w!\xf2^65\xe1\x00,%\xb3\x99\xae\xe7\xb0M\xec,\xc6*\x9d\x99\xa8[\xdcA\x16\x87\x9f\x18\xaa9\xa93\x90|\xa9\xfe\xd9Z%p\x07\x84\x80\xb5\xd9M\xaa\xd4\xfa"G\x82"\xbc\x1c\xf9P\xcc\xd2\xbd\xd5t\xaf\x80j"\\\xbe\xd7\xbdw\x1e@\x82\xf4\x9d\xf9\xbb\xc9\xbf\xc3H\xb2\x13\xc5\x93K%\x16\x96b\xdbr"\xb6Y\xfc8\xb0J"\xb0\xf7\x1e\x7f\xef\x8aF\xddu%}\x98\x95!1\xb7y\x0e<[\xab\xc3\x91\xcc\xd0\x8bf\xa6@\x98\x00eY\xbf\xae\xd4\xea:\xa4\x89\x9a\xces\xb5\x81K\x86.zLB\x9d\x13\xd09\xc6%D\x90n\xd3\xe7f\x1d\x83G[\x13\xf6o\x8e\xc8\x9e\xfe\x1d\xd6Tn_$\xfd\xe3\xd5\xbe\x07k>K\x1alzm\x82t\xfeFz\n\x8b;d\xc7\xb4\xef~p\xa7\xc6\xbb\x0e\x85J~mi\x1b.\x1e\xcdwIT|\x95|\xef\x7f\xa3\xd8~<?\xb2\x01\xc4G\x86 \xa4m\xea\x93\xa9L\xfa\xa3YG\x19\xf1\xca\xfe|@\xfe\xaeCQ\xd5g\xbc\xd2\x04\x1bb\x0c\x01Sk\xc0\x05\x01\x0fj5\x8bg\x1b7\xda\x85\xe1E\x89\xd0H?\x02R\xb4\xa4`D\xe6\xe5b\xda+\xe3\x95n\x0eC\xb7/rU\x85\x8e\x0c\xa8\xce\x0b\xc1r\xfa\xe7t\xbc\xd9\xdbV\xee\x96\x11\xb5il\xdcNr\x8dJ\x075R\xad\xc7\x93y\xde\xfe\\E]\xb9\x95I\x90\xaf[\xbe\xf2\x8b=\x8c\xdb\x9bs\x02P\xa5\xba^\x96\x8c\xcc{s\x06\x1b\xad\xc7\xd74o\xb8\x1f~\xf5\xef\xf0r\x0f )\x82\xc0\x1b7\x07d\xb1X\x14\x95\x8b\x03\xb3\xcb\x9f\xffS\x18\xbcr\x1b|\xa5x\xe5\xc4\x9fI\x04\x92\xb0\xb9Z\xc3\xc2\xaa\xfe`\x1e\xa1\x10\xe2\x06\x0c\x14\xafm\n\x03\x06\x85T\xb0I;\xa6\xd8\t\xe9\xa8`{\x03\x95\xa7\x90\xef\x0c\xe1[B\x17\x9f\x048}8\x93\x96\xa4\x81\xf2\xf6\xf99\x89"\xc4\tH\xf3\xf3\x95\xfa\xc5\x1b\xd9\xe5K\xb9\xf3\xcbf\xdc\x1b[\xfdbE\xdbU{.\x95\x91-\xa4\x16\x9f+7 e\x04\xd8\x19n\xd2"\x95L5Ks\\\x7f"\x87\xfd\x82\x12\x8at\x0b2\xf7\x8e\xad\xd8\x9aR\xf0\x04(L\'%#K\xbd"\xe1]F\xfbQ+\xfe\x1c\xd1\xba\xae\xf9\x01\x92\x98\r;$\xde\x0b9\x8a\x80\x0b\xdc8\x1f{Yd7\x05\xafE#>\x90 \xc0J\\n\x96\x15\xee\xa1\xc7*q9\x96l\xf8!\xcbH\x83\xfd\x80\xfaE\xdb\x03\xfcx\xbd\xf9\x88\x97\xf8@\xb8\xa6N\x1c\xbe \xa2\x05TSRw\xb7AI\x8f\xd4\x98\xe7\xd3\xff\x97\x9f\x0eLKP\xb6\x0f\x07*i \xe8\x06\xd5\xc1\xe2i{\xd4K9\x0f\xb4\x17\xfd\x86\x8ad_\x14^XU6\xecv\'t7YN\x8b\xf7@>\x9f\xa8\xab\x12\x0e\x82\x84+\x01$\x93\xc2\x13\xbfk:\xb2\xfah\xb0\xbd=\xe3Z\x00\xde\xf2\xd8\x92\x8e\xeb\xc6\xd6\xf9\xbb8\x894<=ww\xe1\xe2\xf1\xf7\xe9\x8d.\xad\xdb\xbc\xb4\x14\xb80!\xde\t\xd7\x00\x92DB\xfc\x02\xa0\xce\x17Y\xdf\x9e_Q\xd4c\xb9@T\x0c\x8eP\xbc\xd6i\xb69!\x92#E\x08\xbc\x89\xa0\xb9\xae\xffE\xda[+\xc7\xear6\\\x87\xee\xfc\x81\x04\xcc\x84yE\xfeu\xbc3\xc0C\x9e\xf833<C}M\x1aW\xd1\xadx\xc5\xf7g\xd8W\x0e\x82\x08\x8dSt\xcb\xaa\x13@[65APK\xe1\r\xec\xdcg\xa2g\x9a\x19\xa6\x84\xb4l\xef\x05\x12^_\xe5!\xd3\xa7\x0b\x87\xbb\xd9\xc6\xb6\xf0\xe1\xe8#_\x1e\x15\xa0\xcd\x01p4"*)\xdak\x00\x80:\xbd\xed9\xdaeA\x0f\x86g_$\x97\x1e\xc5\x17\xd7\xc1\xc6P\x8d\x82\xfc"\xa2\x98\x05`\xd9\xf9\x19\xa8J \x19\xeb\xce\xd5F\x80\xfa\xd1\xa8\x82\xaa\xe2VA\xbf^l\x03\x9a\\\x046\x1fF;)\x98\x13\x12\xc8\xe1\xd6 \x07ff\xef\xba\x00\x8e\x86\xff`rZ[W\xca\x11]\xbf\x88\xb3<\x87\x1f5\xf9ND0-\xac-&\xa4V\xb8\xf0\xb8@\x04\x81d\xefY\xd7S>zC\xff\xffG\xaa\x1d\xb9\xd3u,\xd8\'\x95\xdb\xd3\xfd\xe4j\xe5W\rC(\xde\xdf@@\xac{\x1b\x94!\xe0N\x8f\xb0\x8d8\x049\xb0N\xd9<\xf1\xec\xb7\xcb5\xe31\xf1\x9a\x14\xe1\x1a\xc8\x80\xaaTU\x00r\x00\xb4\x1b\x0c%\x01\xb0\x90g\x15\xd3h\xff<\xec?;\x1a\x1e\x9b\xa4\x1e5\x85\x17x\x1e9\xb2\xc2/\xd7O\xfc&M\x1e\xbb\x84:\xf6-\xb8\xdb\x83\x01Q\xcb#\x9b+\xe0\xdc"\xac\xc7\x12\xe9R\x1e\xe8\xe0\x9aC\xcf\xe4\xc8\xfcNX,\xa5\xfc\xf0\xb27\x1d?\xe9N\'\xcf<\x14q\x96%\xa6\xe83!>?\x07z\xe22T\xebga\xcd\xf1A\t\nhC\xf4\x89\x01\xf7$KY\x04\x90\xec\xc6\xc3\xf5d8\x97#9F\xd3*\xd4\xc0\x07\x0e\x10\xa1"\xf6\xf0:\xf1\xd8<\xa9\x05]\x8e\xf6\xff\x14\xee\x89o/\xef\x99E[\t\xab \xfd\'\x011\xf9-\xe6\x83\xb4]\xa0\xab\xc7\xbd\x8b>k\xf9y\xb4\xfb\xef<\xa7\xd1\xd6\xdf\xb5}V\x1a4\xcc9fl\xab8\xf2\x18y\x9a\xc0&\xe5[\xdf\xe2\xf9\x1a\x82\x9a\x80\x94v\xc1%l\xd2\xa1\xfdzd\xd9\nK\x83\xec\x15\xad\xe7\'bn\xfd\xd0\xe7\x84\xff\xdd\xab\xabh\xbb\'\'\x0f5\x81L\xa6\xad\xbfh\xd5\x0e\xcf\x80B3\xc2\xee\xfe|\xc1\xd5Xl\x01\xe6\xf5\x18C\xacj\x1bnw\x03\x0f0\xbd\xc7\x18[\xd5)\xc2>\xa5{\xae\xb3\xb3n\xa4\xe9\x1d\x90K\xe4\x86\xf1`l\x93-\xc0 &\xd4Ps{E\xeb\xee\xe5\xd2\xbe\x04\xc5\xcd\x10\x08\xc8#\xb6A\xa3(\xbc\x85\x94\xd3\xd1\xa8\xb7/\xf1@\xa9j>\xa7\xf4\x07\x01\x82\xafb\x82\xf86\xb6sB\xbc\xe6\x89\xbf`\x83\x96\x91\xc7%{\xf4X\xaf\xe9\xd1\x8e\x1d\xfe\xca\xc8\t<e\x0fM\n|\xf8\xe62\xd0\xeen\xfc\xe1\xb3\x0eY\xaf\xbf.\nHi\xcb\x04\xf6\xd38\xf1\xf1\xf7\x05\xd3\x99hJ\xdamv\xdd\xfe\xd8=\x9f\xeb\xb1\'}v\xb1\x15;\x80>\xbe\xb2\xdb\x1c\x88I\xe9\xcd`\xcbC\xf9\xbf\x1d\x82\xf9\xa5:\x91\xfc\xc4\x12~u\xe5\x03\x07~aa\xb4\xa61\xbc\x03W\xd1we\xefl\xcf\xa8\x18\x88\x9e\xc3\x807\x18\xf3*tX4\xe5\x91\xaf\xc9\xaf/\x161\xfd\x97\xee\xea\xa8f;\xcb0\x04\xe4x8k\xf5g/3\xd8\xcd\x84Uk\xe9\xcf\xe9\x00f\xe3\xa7\xa0\rm\x0e\xe0A/\xb5\x8aE0\xea\xa3\x97\xe5\x1bR\x90#\x07\xe4\xce{F\xf7\t\xcc\x19\xd5\xd3\xf2\x06\xa4\x01o\r\x93?\xcfH\x1f\x15\x04d9\x8fH\xe3\xe3\xa8p\xc9\x7f\x1d\x05\xd1o\xcf\x7f\xe5D\xd1FGB\xa2*y!\xdf\xa6aH|\xe3\x92\x13\xc6X\x9aV\xf9x\x96\xb6\x18\xae;g\xa4\xa5\xd2\xf3V\x17|\x19Q\xd4y\xc7a\xd9Mzsb\t\x99\x03\xa1\x1d21R\xc9&\xd9M$1\x90\x02\xbe\x03\xb3+V\xa3\x98\x9e\xc5\x80\x86\x81\x999!\xdb\xac%\x9cF\x90\xdd?\xf2\xcf\xf5\x81\xec\xc8\xdcD\xa5Em\x045\xa3(\xfdg\xc6(\xd3N\x1e\xc7\xc7\xd8\xff\x0c\xb4x\x18y\xe7%d\x93\x0e}V>\x94\x07\xe2\x12\x80\xa7_\xbc\xc5\xed\xa6\xe7j\xe7\xa5!\x94\x8d\x7fbZ')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ class Event:
2
+ def __init__(self, name):
3
+ self.name = name
4
+ self.callbacks = []
5
+
6
+ def subscribe(self, callback):
7
+ self.callbacks.append(callback)
8
+
9
+ def unsubscribe(self, callback):
10
+ self.callbacks.remove(callback)
11
+
12
+ def notify(self, **data):
13
+ for callback in self.callbacks:
14
+ if type(data)==dict:
15
+ callback(**data)
16
+ else:
17
+ callback(data)
18
+
19
+
20
+ config_changed=Event('config_changed')
21
+ user_changed=Event('user_changed')
22
+ domain_changed=Event('domain_changed')
23
+ parentdomain_changed=Event('parentdomain_changed')
24
+ admin_prehook=Event('admin_prehook')
25
+
26
+
27
+ db_init_event=Event('db_init')#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
28
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/VERSION CHANGED
@@ -1 +1 @@
1
- 3.0.0.dev64
1
+ 3.0.0.dev66
hiddifypanel/VERSION.py CHANGED
@@ -1,5 +1,3 @@
1
- # 2023-04-08T16:23:19.889569
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00b\x01\x00\x00\x12\t\x04\x00\xc0R~\x1dB\xf8\x10\xaf\'\xf3h\x06\xe2\xef\t\x0e\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x81\x0b\xe1\xa5I\xb1r\xb1\x83\x8c\xe8\xdb\x8aY/\xe7\x85\xf4\x1a\xbc\x05\xa2m\x04n\x1ai\xfe\xe7\\\xce\x02\re\x8eSR\x1f\x85(\xcf\x1c9\xbb\x01r\xbdX\xae\xa4C\x83\x8er\xf0\xb1\xaec=8\x9e\xcd\xda\x91\x1aA\xaa\x01\xbd\xc1\x9e\x07b\x186\x83\xbdJ:\x82P\x81\x97(xa\x07\x00\xc2\x9f$\x11\xdb\xe35BNs9\x07>\xfbr\xd5\xdd\xba\x02\xa2\xe1\x04hZ\x90\x81E\x8bod`\x9f\xeb3\x9a%\xebC\x0b.\xc6\xb2\x14\xfb\x97\xb5eA\\\xf9D\xf2\x0bZU\xb1O\xcc\xf6\xdc\xa8\x0f;\x150\xc6\xba\x00\xcanE\x1c(\xb8\xceL\x94D\x15:Hl:\x9a\xb6\x1f\\5\xe0EAHH\x19\xd5cj\x01cd\xf3\xc8\x15\xb2\xdc\xde\xe5\xce+\xb7\x9c\xac\x0b\x94\x0b\xb6\xe7U+jY\xa5J\xe8\x11\x95\xe1\x0c\xf2W\x04\x05g\xa9\xc9]]^\x8al\xbc\x86\xab=\xc1L\x9a\xdb\x04\xfc\xcc\xc2t\x0f\xfe\x17\xc6\x80L\x8ag\x00\xf56\xd3\xb18\xfeJ\xa8\xd9\x9bD\xa8Iy\x0eM\x02B\x1e\xacb\xe7\x14\x9f\xd3g\xb8Rn\xfd"\x16\x0e\x0c\x08N\xa1\n\x18\x0c\x85\x8ff%\xea\x13:\xaa|Sn\xba\xbf\x8f\xa7B\x98)\x8a\xc0e\xd5+\x02\xe6\xe4\xea9y\x17j\x08\x00"\xe4CvN\xdcj1\x05gV\xb0\xe8\xb5\x1eDK\xe7`T\x904~e\xcd\xfd\xae\x0fz\x17')
1
+ __version__='3.0.0.dev66'
4
2
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
3
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/__init__.py CHANGED
@@ -1,5 +1,9 @@
1
- # 2023-04-08T16:23:19.891883
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b"PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x15\x02\x00\x00\x12\t\x04\x00D\ru\xf8!\xf3\xa9\xb1\x8b>\xa1WB\x9c\xeb\xdc\x00\x00\x00\x00\x00\x00\x00\x00YuGF\xe6\xc8\xf6?\x8aC\xda\xad\x84\x9d\x1f3\xe2s\xd0o\xcd\xda\x86\xf7z\xe1g\x8b\x12\xf0\xb3\x04\x18i\x02\x87h\xe0\xdd\x08\xfc\x02\xd0\xe6\x92Y\xcc\x86\xe3\xd6>_\x12\xecr\x9e\xe7?\n\xbd1\xa87\x10\x0c\xfd\xc8\xb5\xfd\x7f\xc4\xf89(\xa0\r-\xd2b'M\x1b\xe8B\x081k\xa97\x9d1\x127X1\xb3`I\xf5\xbe\x05\rj9\xb7\x92p\xac\xd5-hj\xde\x15\\\xb2\xcf\x7f\xab-\xf5B\xc2~{\xa5o\xabC\xb1\x19\x10\xc5\xd1\xb8\xa1r\x7f\xf92#g\x10sJ\x01!\x94\xa0\x0favX\x91\xc8\xa3%/\xb2\xaf^2z]\x01\xf7\xf3\xffyd\x97\xfb\x18\xd7\x18y\xbd?\xc3\x92\x9b\x18\x19\x82d\x1f\xc1n\x8f\xd9\xbd\xbb\xb5X\x12ST\x88b\x12\xd9r\x8f\xe2\xcdQOA\x13f\x1c^\xafS\xf3\xaa\x97\xbdu*'\x01\xc6\xccu~\xa6\x0b\xb0\xf1\x96T\xcb\x08N\xc8\xf5\xd5/q\xd8F\xed\xca\xfbZ\x94\xcf\xbd\xbb)G\xcfG\xacU\x8f\x80\xac\xe9\xca\xda7\xbf\xaeY<#\x00\xe7.\xafLk\xaa\xff\xa4\xb4\x07\\?:\xfc\x82YY\xbbb\xd1t=\x84\xa4U\x06\xbe:\xe9\xd9\xaa\x9f\x04d\x81\xca\xef\x82\xd8g\xed\xf9v\xbb\xbds]\xfc\xbe\xde\xa8;\xedN\xfc;\x7f_\xc9\xbc)\x7f\xa69\xb5\x9a\x99C\xef\xbf)x2\tZ\xaa\x8d\xc8\xcc\xd8\x8eb\x1a\x0e^\xe3t\xcb\xf5\x83-\x90\xbf\xda\x02fG\xa4\xbf\x82\xf8\x8b`\xd2\xdc\r\x88z\x84\r\x90\x84p\x8d\xa3\xd8\xbd\xe9\xaf(\x0b|\xe1\xe9\xd3\xdb\xcc\xd5\r\x9d\x19\xd8L\x1bj\x1e\xe5\xdd\x87\xb4\xc7\x03W\xef\x80\xd7^j4I\xf4\xd5-\xcbP\xc0\xba\xbe\xf2\xe6lR\rL\xb2\x0c\x06\x92\xa1f\x91f=\xa8\x97\x07\xe9\x80]A\xb2S\xbaBp\x07A\xef'H\xbe\x94w//\xce?\x80\x9c\xba\x05\xef\xe9\xcbY\xc9uD\xc6\xdf/\x12\t\x8d\x15e\xae\r\xce\xb1\x17\x9f\xe4\xa1?'p\x00\xb8\xdb\xac\x086\x0e<<\x8do\x1e\xeecR\xbbz\x9fZ\xce\xca\xc5\x8b\x1d7\xde\xe4w\xfb\xa2\xfb\xb1U \x00|\xa8")
1
+ from .VERSION import __version__
2
+ from . import Events
3
+ from .base import create_app, create_app_wsgi
4
+ from . import panel
5
+ __all__ = ["create_app", "create_app_wsgi","create_cli_app"]
6
+
7
+ # application = create_app_wsgi()
4
8
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
9
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/__main__.py CHANGED
@@ -1,5 +1,15 @@
1
- # 2023-04-08T16:23:19.896335
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x9a\x02\x00\x00\x12\t\x04\x00x\xa3\xca\xbeX\x08\xf6*\xab\xc6\x92B\xf2\xbc\xe2\xe0\x00\x00\x00\x00\x00\x00\x00\x00\xee\x07]\x05j\x16\xd5\xa94\xdd\xf6w\xd2\xc3\x8d&\x9e\xca\x9e{\x1d\x115\xbf0O,\x1e\x1a\xfa9\x1e\x9dfLS\x94\r\xa4\xa1\xac\xb7d6\xdfM\xbb\xbe\x10\xbf\xdfM;/\xdb\xc6g\xd0\x13\x00\xec\x81h\x051\xdb\xd1\xd2\x1ex\xc7\xb97|\x9bF\xbb\x90\xe7~\x95?\xe2\xf3nh`Y\xc8\x1f\xd6\xf05M\x1a\xee\xdb\xc6\xef\x8d\x82\xdf\xd7\x08\xefW}\xd6\r\x9b\xf7\xc3\xc7\xef\x135\x16\x8e\xb3\xabI\xd1X\xc6\x16>I\xae\xe6d\xf6\x05Q\x99\xf0\xc6p*\xb5g\xec:\xb3/\x17\x12\xcb\xb9RG\xf3&h\xee\x15\xc9Ku\\\xbca\x8dD\x94\xfc\xe8\xf7R\xd0\x90\xf1\x167\xe0J\\\x1a\x1c\xe4\n\xe7\xba\xe3\xa5\xc9\x1b\xb9\x80\x8a\t\xf0\xe6e\x86O\x97\x99\xa3I\x00\x83l@]0l\xe2\xa2\xf5b\x9f\x86\xea%\x08n\xc88\x9c?\xa0U\xc5\xae=`$A\xc6\xb7my\xc9\xa4QVw<v\xd9\x86\r]\xe3Ec\xa4\xa5\xb2\xe4\x9eq\x1f\x8ab\x08\x01\xab\x0bmXk\x83X\xf0\xdezD\xde\xbaB|\xe3\xe7-/vIno\xd0S\x17\xdc\xdd\xcc\xbf\xc6\xc6\xc0u\xfb\xa3\x1f\xd4H-\xd2\x9c\xa7\xfb\xb9[m2-)..\x0e#\x83\x13J\xe8\x84s\xcb\x1d\xea8EG\xb6\xca\x8a\xd2\xea\x03\xb9\xee\x00\\p[j}=T~qI\xa7sC-\xd9b&\xea\xb2^\xd3\x16i\x0b\xa4\xac8\x88dw\x06\x19\xb5\x96^&\xd8\x02hE\xb2\xe8I,\x0b\xd8l\xba\x9f\xd4q\xd8nA)`\xca9Ki\x00L)\xd6\xb6"9\xe4\xd8\xdb\x04\x140\xa4\x7f\x1aZ\xaf\xed\xa1\xe7{P\xff\xd9\xedQ\xab\xd2^\x8d]\r\x1e\xd2q\x01\x10\xea\xec2\xf4x\xb2\xd6\xacG\xfe\x82\x07\x1d\x1d\x99\xec/\x86\xf4\x16D"unz`\x83\x9d\xc3h\xf5\x03\x8f\xec\xeen\x8b\x86\x96$/b\xd0\x10\xa8b\x16\x81y\x7f\x01H/\xf3!!\xcd\xba:[\x1cC\xe17\x9e\xdaMm\xd0\x13\x11\x1eZcz\x90\xd3\x85\xc1\xd4\xfd\xeb\xd4dy\xbe\xa7\xa8I\x1e1/\x9d\xfdW\xef\x9d\x1c\x0cg7`]\x85!)\x94\x8d\xd4q\r\x1e\xa7\xefz\x81\xde\x1f\xfe\xd2;\xea\x86j\xfbV\x115?\xc7\x80\x95\x15\xe2\x04\xdf\xaf~\xd6+k\x84\x08\xf7:0I!F\xde\xb0\xad\xf2\xb0M\x96\x87\x83\x96d/Qx\xeb\x01\x86\xdd\xd1\x17\x1cD6\xc4c\xc6\x13\xdd\xdc>\x93\x04\xf7\x99y\xd1\xad\xf6\x1bt\x11$\xaa\x9f\xa19\x97b_R\x8e\x8c\xd7\x91\x9dohq\xa2\xd0\x1aN\xf0\xb1g\xfe\xc3`{#\xe3\x9b\x96{@\xb5L\xbeR\xd6x\xf2\xdb\x0c+\xe3@')
1
+ import click
2
+ from flask.cli import FlaskGroup
3
+
4
+ from . import create_app_wsgi
5
+
6
+
7
+ @click.group(cls=FlaskGroup, create_app=create_app_wsgi)
8
+ def main():
9
+ """Management script for the hiddifypanel application."""
10
+
11
+
12
+ if __name__ == "__main__": # pragma: no cover
13
+ main()
4
14
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
15
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/base.py CHANGED
@@ -1,5 +1,90 @@
1
- # 2023-04-08T16:23:19.912210
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00O\x0e\x00\x00\x12\t\x04\x004\x8cj\xc3\xa2(\xf9\xdd8~\xae\xe0\x8e7J\x1c\x00\x00\x00\x00\x00\x00\x00\x00s\xdc\x04:D5Bb_m\x1e\x10\xa1\xb6B\x9d\xde\x13\x1c\xae\xe6\xf4\xe6b\x97\x1fU\x96\x9a\xe6N\n\xfdX\xec0\x80\x94\xb3\xf1\x1c\xaen$,\xe2\x1d\xd2\xba\xd2\xb2\x80\x17\xd7_\xf0\x05\xda\x9f*tr\xe5\xd5k\x0f\xc0\xaaG\xedr=\x8f\xd7R\xff\x83|\x13\x05\xb1\xbe\xaex\xa3\x15(\xd7\x01bb\x97\xb6U/F\xd0\x8c\xf2\x84\xc5\x99T\xfd\xea@\xa9k\xcb\xe6\x7f\xf7\'-\xb1\x1b\xdd\x0e*l\x9d\x81\xf6\xd0t\xf0\x8d\xccx\x18\xeb29\x97R\xa9]P*\x02St`\x15Q"tJ~\xcd;\x0ed\xa9"\xf2\x97\xd6\xc5^\xc9\xbb\xe7\xff\x94\xb0\x89\x11\xaa\xc1\xfb1\'\xbd\xbel*\xbc+\xdf\xe2c1@\x97\xb2\xfe8\xd17\xa4y\xb5Os\x07/\r_\xcc\\_\x93\xf3\xa5\x05\xfa\xae\xb9\x0f\x94\xa9\xfa\x88\xe3\xb6A\xa5\x1c5\x07*\x95g\xe5sgh\xf1\xe5\xd4t\x1b$\x93\x89C9x\xdd\n\xbfIm}`\xdf\x88\x82z\xe9\xf5\xd7\x9d\xc3\x928\xee\xc6*\x16\xc1cO\xf6\'\x05a\xd2\x1d\xb4\xc2w\xff\xf6\xcd3p\xb6YSY\x01\xce\x16\xef\x03{\x99\xe5-\x8eF\x93,\x8a\xa3\xc8\x96\x7f\x07\xb4\xee\x1f\x1a\xb8\x94\xe2\xc2\x1a\xed\x07\rj\xb6\x9e\x94\x89r\xee:\xce\x0e\xf8\xeb\xb7\xe7\xc0\x07f\xb7\xcdJ\xa3\xd6\x9b\xf0\xe3\x9cS\xcd!67\xf6\x8d+\xb29\xfd\xb8\xd6\x18.;j\xecp7\x9e\xbf\x0b"*\x85\xaa\xa9\xc4\xe8\xce(\xfdmOY\xf1n]\xda\x96@X%\xbf\xf6\xedM\xef\x06\x15f\xa9\x14YUN;5\xf61\xa8\xa0\x08i\xc5\x19\x90\x04\xdc\x08f\xa1\xc6\x86i^\xadO+\xf3\xfdt\xe1\xe0\xf7ZP\xd1\xc9\x9c}2\x0cV\x12\xd3\x89\x14\x8d\x14\x82I4\xba\x19\xffc\x1f\xe0\xbeRt\x0c\x9a\xd0\x1dZq2\x8d\xc7\r\xa2\xb9\x9c|\x81\xa9\x97Wf\xda\x08\xe5\x953Nl0c\xbc\x18\x0b\xe9&]\xf8\x81\x14H\xf1\xc2iA\xe3\xb3FyQ\x01y\xaf\xe2(\xc9z=\xc7b\xae\xa3\xd9\x18f\x83\xfb\x8a\xcf/*\x1f\xb8*\x9b3\xfc\xcf1\xe8\x9d=0\t\xee\xe4\xea\x0c \x0c\xcf\xd9p\x8b^\xcb\x96\xbc\x99\xffo\x7f\xce[\x95\xc9\x16\x7fH\x9d\xf6\xb9\xf3tq$\xab\xbcbG\x88\x98W93\xe9\xe9S\xa54\xec\xa4\x85\xa8&\x13\x9e\xf6\xf7\xfe\x00\xea\xa9\x02`\xd4k\xfayY\t\x1b\xd1w\xe9\xddZ\x06b$\xcb\x8a\xb7\n\x97k@\x8eqf0\xbb\xf3\x9b0\xcbd\xdb\xbb\x88\xa90\xb1\xcc\x13\xaddk\xcf\x0c\xa6\xceCJj\xee\x14\x9eT0L\xef\xa9\x19\x16\xed)\x19\x8c\xb7\x1c!\x84\xea\xc7\xb4\x99\x82\xb0A\xd8[)/^\x9dB\xb7\x83m\x17\r\t\x91\t\xc8Wu\x14W{<\xd3ku@Z\xb9\x00U\xec[\x82\x1c\x081R\x15\'\xcf\xd8\x14\x9645@\x8b\n\r\xe3\xd0\n\x10b"\xe00\x15\xe8\x8ee\xe7P\xab\xf9#\xab\xe5\xa5\x02\xf9CQ\x9a\xac}_U\x17\x16\xb5dJ\x8d\x80Rsm,\x8ckUa\x87l\xf0\x80\xd9\xde;5\xae\xc2\x9e\xca\x98?\xf3\x83\x7f\xbf\xd5s\xfa\xf3\xb7\x0bQ\xf6\xf3a/\xbcY\xf9\x8e\x8a\xc4\xff\xfc0[\x9b\xd0\xa4\xcaO\'\xb5[y\xfd(\xf8\x9f\xd3P\n\xe0\xbds\x02h\xb9Jp+8\x8c:\xf7DG{\x15\xcc\x82\x0c\xd0\x010\xe0_^\x01\x14\x9f\xae;\xb2\xb08,\xfa\xdfr_?\x04\xfd\xa4N\x83\x90!\x1bZ/\xccU\x15\x8d\xedB\x12\xf6\xb5\xffW\xf0=a6\x94\xae\xb3\x82\xa2\x84\xaf>\xf9.[\xf2$\x86\x98\xeapLH\x1cg\x0fs-\x15S\xdeb\x95\xa4\xc7\xab_O\xf8 \x02\x89IC\xb0)\xec\xcc\xbf\xb1\xc2\xd1\x1f\xb9;\xd0\x15\xc4\xa9\x04\x085\xf3\xe1\xd7\xbe\xb5\x1d\x84\xe8d\x02\x13\xa5\xac\x04\xd3\xb4\xac;>\x91I\xef\xd4\x19\xf0\xf2}\xed\xc1^\x00\xd5\xa5/V\xaf|T\xfe\xbc\xe3K\xdbv\x0b\x841^\xe0\x9d\xf9>k\x14\x06\xd7\x15s\xe6\x9f3.\x81P\x10"$\x07rU}\xe5\x8f#U\xa0!\xa3\x982\xcf\x1f\x18\x08\xed\xae\xf3pA\x9c\x9f\xdcq?v\x17.\xfc\xe5\x00I\x88\xa9\xac\x1e\xa40\x1b\x91\x91\xa8\xefLaNM\xed\xfe\xce\xb1c\xb6v\xe6\x04&Sr7\xa0\xdd\x0c\xdbn\nm\xc1\x98&\xa9\xcc\xc3!\x8d:*\x9f\xbf\xa4*l\x8c26$h\xfb\xfb C\x0e:\x99U\xd0\x1a\xa0N&\xd5\xa253\x8c\x0c\x9c\x10m\xc3\xdf\x1d\tK\x04\xe4\x9cX\x11\xbe\x92\x13\x80z\xfc\x94\x03\x8f\xec\x15\xbc)\xdc\x91\x98\xcf\x99\xa7\x8ds\\)p\xb7\xbc\x89\xb6<\xcf^\xc51\x0e\xb6a\xe7\x8b-I\x12\x0c8 F0\xff;\x8a\x9a\x87-\x00\xd5I]\xaa\x00\xdbN\'\x00\xb6d\x0f\xbc\xc0\x97\xf2\xcc\x97\x96\xfd\xfe\xd3\x85\x842\x89\xbf|;\xbb\x95eag\x8556Q\x91Z\xa0\xf6\xcbp\x993\x9d\x16\x08S\x83\xda\xe5\xcb\xbe\x8d5x0\xcd\xbbPAr@FV\xab\\Unc$\xc4\x91\xe4\xd6\x9a\xf7n\xf2\x1d\x88\x19\xabk~\x11pqI\xaf\xcb\t\xa2)\x19"}\xcau\xaf\xf9\xd8({+\x89\xf7)\xddN\xfe\x8e\xfa\xcb\x95\x16\xf6\xd0\xd7\x9b~\xcb \x8f%\x05\x92l2o\x0eMF\xaa\x0c\x0c\x85b\xc1\xc1\xda\x88Z8\xa2q\xa8\xfdb\xc5U\x18\xe4\xeb \xa9~\x9c\xd0\xe6\x8aF\x83\x9f\x94\xe2<\xd6\x1a\xc24\xd8\xb2e\xa1L\xd7`\xe9\x04\xd9\xfc\xfeGF?Rz\x96\x84y\xd07j\xdd\xe8\xf7\xca\x9e\xc0]YQ\xa8Zb\x15\xb4]\\\x856\x94\x80\t\x8a8?{J\x82\xb4\x856i-\xf9-\xba}4%\x94\xfb\xe0\xc0_(\x13\xb2j\xa8\x96\n\x81\t\xbe\xadZB<\xda\x9d\x81k\x19\xdb\x04\x03\x9e\xf5\xc4\r\xbbvD^-\xaaq\xc0\xe1s\x89\xc9|\xffY\xf7\n\x82}C^l\xbb,\xb5\x85\x9a,\xe0\xb1\xa1\xccj+\x9e\x88\xa6\x8f0\nW\xef\n[\xec;\r\x90\x07SW\x7f*q\xf5m\r\xb6,D\x9e\xcf\xd6\xa5:0\x12\xec\xc4lX\xc9\x00\x03f\x96\x94.\xe5\x00=\xab\x1c\xbe\xf1\xb5\x05BD\xe1J\x04\x1b\xf8c\xa0\x86\x08\x8c\x1f\x92\x1b8\x96\x1e\x1f\x9bNw/7\xc7E\xe2\xa3\xe9\x8d\x11\x08\xb4\xc8\x08y\x1a\xadr!\xe4o\xe7\x94\xfbp\x07\x8eW\xe6\x07:\xfaZ\xa3\xcf4~\xa4i\xe8i20\xa7\xa8\xce[\xef4\xf0\xf2F\xac\xb9\xbf \x01\x19v\tR\xb7\xb1\xe5\xfc=I\xae+\xb2\x91u\x12L\x9f\x00v\x02\x94\xd1S&\xda\x96\xa8\xec\xb5\x03\xf7\xd7\xe3\x9fsv\xb7\xc5\xf5|&\xe3G\xae\xd0\xf1O\xf5\t\x98\xe9P\xd1$\xf58\xc0\x0ePK\x15\xdfp\xfbsQ\xf9\xfd,\'\xf7>\xeb\xc8\xdbV\xcb\xec1\x12\xe5\xe0\xf5\x11\x95nXIZr\x96\x84\x07\xe2\xdcAa\xe1Q\xb7\x96\x98\x07OQ\xcb\xca\x98\xd4\x12\x16B\x16\xa3\x0c\xfc?9\x08O\xa7\xe3\xb6\xc2\xa1\x90\x96\xe2N1k\x04le?\xaa\xb9\xa5l}\xcb\xf6\x9e\xee+c\x9b?\xd5A:\x87\x98\xf2B\x1cY\xa9We3\x8a\xbb\xa3<\xbe\x16\xaa-]\xe2zB\xe8`pM\xcc\x1d\xa47ZL\x15\xf4\xf1/g\x8f\xb3\x97i{\xbc\x8c"\xbf\xdbp\xe5\x8a\xaf\x11\x0b\x05_Z\xd7\r\x0c\x87J\xf5]\xfdR\xf2{\\\xce=W\x80\xe9\xfe\xcf\xee[\'^\x8e\xf0\x11\x9a\xe2n\xa1\x89jE~E\xb3E#mx\x9fbF\x97m\x9cq\x12\x00\xb19\xbc\xb4&\x99\xf1\xcan\xd8\x84]\xb7\x8bA0\xee\x93X\xd5\x14\x15\xf5\x0f\x10\xfcC\x05OK\xfc\xa2\xdf\xa1\x1d\x18\x1c\xef\x06A\t\x8c\xc7\x18X\xc6\xfcn`\xf6\x106\x9c\xa1\xca\xe5?#\xe3\xe5\xf4\xc2-\x94\xea\x01n\x17\xa5\xe3\xb2\x0b}(e\x90\x08VR\x84\xf2\xc5"|\xcf\x16In4\xa4A\x89\xbf.\xcd|%uh\x1c\xb7\x9e\xc67\x96\xc06\x91\xd0\x16\x07\xfdkz\xe7\x87:\xa1\x8e~\x8e\xad\x0cQ\xbe\xe1\x7f\xe5\x80\xda\xfcy\xa8#\xe1_d=\xb0Q)t\xa2\xf1\xc9N\x80\xbaN\x05\xc8\x02\x1a\xdd\xa0\x0e\xecN\x84q\x94\xdb\xb5Z\xe5\xd7\x10\xa8c\xdc\x08\xe9X\xbde\x86\x12zL\xb6\xb1\xbf\x1d\xa2\xfa_\xf0s\rp\x93\x06\x92=\x1aq5\xbe1\xb7\x1e\xf4\x96I\xe4\xc2m\x99o\x953w\x01\xa4\x9b\x10\x04\x10\xdc\xd3\xe9\x9c04ar\x97\xf7\xd5\x8bno\x8a\xacS\x13\xb3\xd2\xbf\xf1\xe2\xfbH\xfac\xa0\xca\xdaP\n\xa5\xb6`\x00\xafi\xfd(R/\xe2\x97\x17\xc4jz\xf4\xe9G\\\xf6\x1f\xd3K\xeex\xbfy\xc1a\xd1\xacPD\xdf&\x80\xca\xfd\xf5|\x1c\xda\x98(\xc7\x9cf \x10\xa9\x93g\x06>\x04\x17_\xba\xc4\x8brz\xe9\xc1\xcf6\xff#\xe6\x1a\xc3.|"\xe8Sd\xf3\x19\x9c\xb4\x05\xc1xO\x0f\xc8\x81\xc8e\x94\x06\xb1Ei\xe5P_\xe9\xd91TP\xf47\x96EW?\xfe\x17/\xfc\x89j\xb1|\x12\x01\x9f\x1c\rp\xb8V\xc9\x03SD\x84:\xa1\xe46U\x90\xbd\x96>\xcc}\x92\xbd\x19\xf4\xac\x1f\xc4V+6\x98KU\xf6P\xe2\x015\xcb\x16\xadOFO\xef\x04a\x9d\xabS4\xe7m\x1a9#\xa9|\x00\xc1\xb1]\xbf*\x8e0?\x9e_\x06\xb1\xab^\xd9\xfa\\I\x85\xf4\xda\x10\xda\xcc\xb0\xc3\x01\xfbW\xc2\xc6\xb9K1}\xf6\x8c.h\xf9,?\xa7\xd2a\x8f\x9b\x11;k\xec\x8b\xafp\xba\xf6\x12\xd5\n-\xe6\xb8\x1a\xd5\x90\xe0\xb3\x8dD\xdd\xd8\x14\xf1\x96\x02\xbcr<,\xe6\x12\x9c\xb1w&\x16\xdd\x13\x14&\x9d;;\xc4S\xec\xde\xc1C\xb5\x88,/\xd8\x88\xf2\x84X\xd8\xa3`\xc5\xc9I\x99\xebR\t\xf7\xea]\xa9\xb5\xd1\x18\xd7urP4\xd9\xe2\xd7Ee&\x96\x85\xe2\x88\xfe\xbc\x84q\'I(\xf5\xe5s8\xff\xfc@\xc4\xcd\xaaq\x99\x84\n\x9f\xe7jd|\x10\x055AR<)\xd8\x1a\x88\x98\x08\x8cq\xfb\xbb\xf8!\xe9\x05\xe7\xb7\xd5\xec\xd0"\xc6\x00\xb2K\x9f\xee\x06>\xea\xdb)\xc6(\x1b\xa7?i\xc1\xad@\xba\xaeeM\xd7"\xdb\'\x83\x955\xd9\xc2\r/\x19\xa2\x1f8\x8emC[$\x8dP\xab\xbb9\xd4F\xc54\xff\xdba\x08\xb7F\x81\x87\xcc\x00\x90\xa3\x9dF\xde\xec\xc3\x82\x1a\xbauy\x02d\xd8\x87\xda\x98\\T\xe8\xa1\x890r\xe4\xf4:\xab\x0b\x02\xa7\x17\x8a\x83\t`\xf4\xe7W<\x9d-\x1b\xb9C{\xe1\xef\xb7\x0b\xe1\x89^\x7f\x8c\x92?Fo\xad\xf5\x89\x80XX\xaa\xbd\x17R\x91\xedty\xa6c\x95\x83FN\x012S\x0b\x00:\xe8\xc8\xd6\xe2\x95\x92\xe3\x16\xb3\xd8\xe5\xdb\x8f\xe5`P@\xf7\xd0\x18:z0\x98$\x85\xe4\x00\xe4@\x85m\x11\x977\xd7)\x8e8?K}\xa5o\xde\n|\x01\xc9x\xde\xe6\x8c\xf4b\x10\xaf\xa3\x8aa\xf1\xce\x9c\xb3X*\xf8\xa0\x88\x1fZ|#\\\xc6\xf4\xaaN\\[\xd5\xc7\x8e\xbd\x9b\xed\xe1\x90\xdfh\xaa\x14\x0e\x01\xdb\x91\xde\x9d\x1fQ\xb7\x00{\xe1cQ\x1f z\xd9\x89O\x86?\x83\x07J\x10\xc4\xc9\x13\xa5+\x88\x08\xfb\xa6k\x07\x9dlj\x95\xd6\xd5:\xa8\xe3\x81\xbf\x81Y\xff\xac\xbd\xe1\xef\xefS]\xb1\xd3|Cp\xcb4\xdc\x1c:\xf2C8R\xc9\x9b \xa5\n#w\x88\xde\x80\xf4%f5\xb6\xff\x17Wtuc\xb8\x94H\x00\xda\xf7&\xd3<1\xc6y\x8a\xa8\x03\xd5.\x8a\x05\x14J\x0fn9\x04\x01\xc0\xaf\xd7\xda\x9c\xf3\xf7\xa6e\\\xb8\x80\x8c\xe2\x93\xd4\x1fP\xde\xc7y\xcd\xfc8H@}|\xbe\xae\xa9P\x0b\xb9N\x8b\x13\x95\x1c\xf0\xd5Z\xd1\xf6\xb1\x92p\x06X\xff\xe0\xcf\xd8$J\xaa\xe4\xf9\xc6m\xec9\x15\xdb\xc84\xa3\xa8-ue{\x1a]\xbd\n\x9f(\xef\xe8\xbf:=G#\xf7\\\x93.\xb8}d\x03\x82aO\x0f\xff\xb0\xa1\x08,\xe4\x86\xe1Q\xb2\x1e\xa8\x89\xbb\xf5\xfd\t\xbf`a-\xb6\xb83\xd2\xbf\xe8\xa1@\x8a\xc5=.\xa1g\xb3\xdc\x1d\xd2\xbbx\x1a\xcc\x08\xda\xd5\xee\xfc\xc7\xc3\xe3r\x98$L5J\x1b[\x92Nl\xc40\xcdD}\xf9\xaf\xba\xcf=\xc6\x88c\xed\t\xd0\x830\xce\x9f#\xb2\xb7\x86\x16@;\xba\xc0\xd6\x03\x02\x89\xacyV\x02pi\xda\xd5=&m\x0b\xfeK*Fv^\xd1\xc4s\xf2\x04\xaf\x08\xd2\xae\xf7\xc3\\\x89 \x9d\x07\xae\xb1\xcc\xd4\x1f=}z\xcbb\xdf\x19\x15\xb8\r\x9f!\xc0d\xa5%\xdbh\x055\xec\xdcE=7\xdaWA\xc4\x8d\xbe\x813;\xeb\xb4\x0c\x17`\xe6e!r\xd1\xbf/\xa5?\x07\xc5\x9d\xd8\xbbU\xe5\x9dK)G&\xac\x84\xb0!\xad\xa1/=\xa8\xb3]r\xde7\xbaI\xee4%\xb0b\xa9\x87\x89\xd8w\x13N\x97\tw\tE.\xca\xcb\xbc[\x13P\xed.\x94H\xbf\n\xf5\xbc\xf4\'\xde\xb6\x08RZ\xc6\xa5\x86\xe9\x0f$2o(\xbb\xfdh\xf8\x8a\x01c\x12\xc5\x87\xb8\xb2\x9c\xde9P\xe0t\xee*>\x06.\xad\xbdA\xd3\xb0\'\xd6G00\xe4\x14\xf9\x86Z6\xb4\xc7\x90,\xfc\xe0\xe1\xda3\xf2\x16\xf06F%\xcf])\xdb\xae\xf9\x982\x92\xb7\xa5\x13\x15\xe3\xb1\x93\xa9\x1f>\xbb\xfb\r<\xe9\xf3\x8c\xb8\x9dO7f\xfdQ<\x11,fR\t\xc6\xc5\xc6\x8e\xff\xdbi\xf3J\xe8\x1f\xd5%\xefc\x88\xfc\x950\xc0l.\xa4\xce\xf9/\x81\xd9\xc5,\xe2\xf6\x1d\x8a\xccm\xa6L\xec\xaay\xe8{\xd7\xf7\xaa\xd4;\xb6\xdc\xed\xcd\xc1K\xc4\xba\xa0\x9ea\xffD\xd3\xd4\xb5@\x8fR\xad\x9e|\x04\x82;\xc8\x96\xaef\xee\x06g\xf8\xb7]L\x03\xf3\xa0p\xdb\xb4\x0e\r.J\x084\xb3,n\xee\xc5\x87\x9a\x19\t\xeaKd\xc4\x0bZ\xa9\x8ar\x8a\x99\x80?\xab\x13\xef\r*\xfe\xb2\xc1\xec\xd3\x0b\x15|\xef\xd6\x94M\x1b\'}/\xa6A\xd5pY\x7f<\x0e\xc8#91T\x96\xa9\x91\n T)\xeb\xe6\xacA\x9e\x93/"\xde\rR\x88\xb0\x101e\xf8S\x82u~\xaaM-\x13~V\x86\t\x04\xc7\xf5\xad\xddU\x9a\x170\x86\xbcC\xc6\xe5\xcd\x03\xfd$9\xcd\xe7.\xe4\x87,\x92\x9b6\xd8V\xb8\xc6\x02X*\xbey\xb4/\x08\xca\xe5I\xb9\x7f\xbc\xa1\xafy\xa3Fn\xf7oLBpn\xb5\xd3\xc8u\xebz\xbd\x1d\xff\xde\xc2*\xb3\x06\x1c1\xd8}O\x81\xcdl\x0b\x99\xb8\x1f\xd6YE\x84\xecLR\xa0\xcfW}\xf1\xae\x19\x8a\x93\x82\x069f\x91\x1e\xf3h\x1b+x@\xd0\xa2\x0f,3oP\tk\xf86\x9c\xd77\x8d(3\x83\xd2T\xb9&\x0bY\xef\x87\xfe\x8d\xcdG\xb4\t\x9b\xd0Q\x03\x88\x87\xc5\rr\xd2:\x1c\xd5\xc4\x8dq\x17\\d\xb8\xbf\xb5\xeec;\x04\x00\x98\xa8$\xd2')
1
+ import flask_bootstrap
2
+ import hiddifypanel
3
+ from dynaconf import FlaskDynaconf
4
+ from flask import Flask, request, g
5
+ from flask_babelex import Babel
6
+ from hiddifypanel.panel.init_db import init_db
7
+ import hiddifypanel
8
+ from hiddifypanel.models import *
9
+ from dotenv import dotenv_values
10
+ def create_app(cli=False,**config):
11
+ app = Flask(__name__, static_url_path="/<proxy_path>/static/", instance_relative_config=True)
12
+ import os
13
+ # os.environ['DOTENV_PATH']="/opt/vscode/workspace/HiddifyPanel/"
14
+ # FlaskDynaconf(app,load_dotenv=False)
15
+ for c,v in dotenv_values('app.cfg').items():
16
+ if v.isdecimal():
17
+ v= int(v)
18
+ else:
19
+ v=True if v.lower()=="true" else (False if v.lower()=="false" else v)
20
+
21
+
22
+ app.config[c]=v
23
+
24
+
25
+ app.jinja_env.line_statement_prefix = '%'
26
+ app.is_cli=cli
27
+ flask_bootstrap.Bootstrap4(app)
28
+ hiddifypanel.panel.database.init_app(app)
29
+ with app.app_context():
30
+ init_db()
31
+
32
+
33
+ hiddifypanel.panel.common.init_app(app)
34
+ hiddifypanel.panel.admin.init_app(app)
35
+ hiddifypanel.panel.user.init_app(app)
36
+ hiddifypanel.panel.cli.init_app(app)
37
+ hiddifypanel.panel.commercial.init_app(app)
38
+
39
+ app.config.update(config) # Override with passed config
40
+ app.config['WTF_CSRF_CHECK_DEFAULT'] = False
41
+
42
+ babel = Babel(app)
43
+
44
+ @babel.localeselector
45
+ def get_locale():
46
+ # Put your logic here. Application can store locale in
47
+ # user profile, cookie, session, etc.
48
+ from hiddifypanel.models import ConfigEnum, hconfig
49
+ if "admin" in request.base_url:
50
+ g.locale = hconfig(ConfigEnum.admin_lang) or hconfig(ConfigEnum.lang) or 'fa'
51
+ else:
52
+ g.locale = hconfig(ConfigEnum.lang) or "fa"
53
+ return g.locale
54
+
55
+ from flask_wtf.csrf import CSRFProtect
56
+
57
+ csrf = CSRFProtect(app)
58
+
59
+ @app.before_request
60
+ def check_csrf():
61
+ if "/admin/user/" in request.base_url: return
62
+ if "/admin/domain/" in request.base_url: return
63
+ if "/admin/actions/" in request.base_url: return
64
+ if "/api/v1/" in request.base_url: return
65
+ csrf.protect()
66
+
67
+ app.jinja_env.globals['get_locale'] = get_locale
68
+ app.jinja_env.globals['version'] = hiddifypanel.__version__
69
+
70
+ return app
71
+
72
+
73
+ def create_app_wsgi():
74
+ # workaround for Flask issue
75
+ # that doesn't allow **config
76
+ # to be passed to create_app
77
+ # https://github.com/pallets/flask/issues/4170
78
+ app = create_app()
79
+ return app
80
+
81
+
82
+ def create_cli_app():
83
+ # workaround for Flask issue
84
+ # that doesn't allow **config
85
+ # to be passed to create_app
86
+ # https://github.com/pallets/flask/issues/4170
87
+ app = create_app(cli=True)
88
+ return app
4
89
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
90
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/base2.py CHANGED
@@ -1,5 +1,42 @@
1
- # 2023-04-08T16:23:19.887614
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x1b\x05\x00\x00\x12\t\x04\x00\xc2)|\xa7\x93\xaa\xa1NO\xe5\x87\x18\xe0P\x0e\x01\x00\x00\x00\x00\x00\x00\x00\x00\xd7M9\x1b\x98$a\x99\xc8\nP/\xc2\x8d\xeb\xac?\xc2\xe6\x942\xf2\x1c\xc8w\x05\x88\x89\xa0N\x152\x0b\xd5\x13S5\xedS{_\x1b\xbe\xb5\xd44\xfc\x1c\xbf\xd3GD<\x1e\xc3\x9f<x\x1c\xb8!\xa6\xfb\xb6\xd6\xa6\xb5\xddt\x98\x9d\x0fR8\xeb\x071\xf3\xe7P\xd0\x91\xfc\x0bd\xf3\xcb#\x13)g\x15\x17\xde/\xe9Q{8\x85\xda\xc4\x12_\xacy}>\x81E\xf2\xcd\xedi\x18\x7f\x9d\xde\xc9y\xc9\xfc\xf16\xd0\x99\x90\xd2\x01\xae+\xed\xba\xe0\x17\xa4#\xc1z\xe0\x1d\xfc\x88<\xba\xfaHX$\x10P\xe6\x06+`\xcaNQ\xd8L\x03a,\x98\x003ACn\x19tD\xadlw\xb6\x8e\xc4\x9f|\xb7\x97-\xe3\x10\xdc7A3\xc8(0\xe5\x91\xbbe>#\x18\x94p\x84\x14\x8a!\x9c\x18\x94W\x0c\r\xf1\xde\xae{\x9f\x8b\x95\x8e\x14\x07\xdf\xb3w\x8b%5\xf8\xc1\xee\x0fG\x13\x18\x88\xe6O\xeb1\xed\x83A\xf6`\x9a\x13r$g0=\xacpI\x95\xa3wP\xf0\x16\xe6W\x88\xc2A\x11\x05R\xb1jo\xd6\xf8\xbe\x12e\x90\xa5\x89\xf8\x7f0Q\xf2\xf0?\xeaY\x87\x7f{\x9c\x9d&&#Tzta\x840\x05\x87p\xf7$\xe5\xb6\x94D.\xdf\xe4JH\x93;\xf6\xcc~_ce\xed\xba\x9fJ\xf6\x00\xdd\x02\\\xe1\x8a\xe1\x07\xd7\xc1\x87&\xc6z\xa7RLo\xe8>f\xb9\xbc\x94\xc3\xff\xae2/f\xe4\x93\xc9\xe6y\xab\xa8*gmmC8\xc7\xff\x03\xda\xa40\xc5\xd4\xe2\xf0\x89`%\x17K\xf5\xbd\xee\x9b&H\x14\x8aV\xebp\x9f0\xd5]\xaf\x17\x95\x8c{$\xb6\xf5\'f]\xd6R\xe6-\x8c\xe1\xbf\xc6E_f\xbfC\x01\xf2&Y4\xa8\x1b4\xdbmWzE\xfb\xad\xfd\xe0\x90\xe1\xb51\x01O\xedg66*\x96\xf3\xf6\x85\xf0\xb3Y\xfc\x94\xf3\xa9\r\xdaG\x1f\x87\xf7\xd5\x0ef\x8c\x86"\xf6u\xda\xce7@c#\xb8^w\xe4\xa2\x82\x88~j\xce\x14\xe6\xf1\x11\xde\x9cc9\xa1\x80\x96\x86F\x80K\xd5\xed\xad^>\xf7\xd5\xd2j\x03\xb3F\x15G\x0e\xb10\xcf\xbf\xb2Y\xa14D\xe9G\x07\x1c\xad\x98N\'}\xaaJ\xb3\xe6x\xe3\xb4\x90\x8c\xcc\x1b\xdd\xceF"ICN\xffIv>\xbb\xb9I\x10NV\x9ex7\xe7[\xf1\xfc\x88\xe3O\xdbH\xda\xde\xa7\xc9\x0fq5\xb9\x01$\xd2\x86(\x8c\r\x0c\xb6\x05\x9d\xbe\x1fQ\xc9\xea\xc1)p|\x95Yw\xe0w\xaf\xd7\xcd\xe63:4\x0fX;\xc8M\xbbWAb\x85\x913<*\x8c@n\x9f\xc4\x03Y\x1ak\xaeR\xff\xc4\xf0Q%j4\x81\xfe\xf6\xe6\xe2c\x93\xa0g\xad\xcf\xd7\xf6p\xfb\xe0\x1b\x8bLd{\x8f\xabB\x8d586\xd3\x91\xdau\x0b\xec\x96\x7f&\xfb\'\xc2\xab\xb1 \xfe\x8c\xf8\xc1e\xe1\xdb\xcf4=\xad\xbds\x084\xefp\xe9\xbe\xedVcl\xd2\x9a\xcf<\xcfA\xa3\x10\xac\xa0|g\xccC\x02\xb4vP\xd2\xc4\xaf"\xe6G\x02lA\x9c\xbc\xe8\xd1\xd3\xc4\x93\xb0\x9d\x8b\xf2\x8ci\x8b\xd1\x7f\x84M\xf4F)q\x17W\x8b\xe5\x99n\x99\xe24\xe0\x11\x99^\xaa\xa1\xa9\x83\x92\n.\xfc\xe6Ks]\xba\x01\x0f\x0b\xdab\xa64\x8bX\x86X\xc0\x82\xb4\xce\x11(\x8b\xb1\xa1?\xc1\xb8u\x87\xf9\x13\xd2^\xad\xa8\x7f\xd22Y\xfb\x1a\x80*\x13M\xd0\xf9\xc9\x94PQ\x8dQW\x1c\xe4\xcf\xdb\xb6\xa8\xf4_\x13J\x1e85V\x82\xe8\x10\x9cK\xf6\xf5\x92\xa0H\xcft\x85w\xab?\x00o !t\x96\xb9\x1d\x02\xb8\t\xea\x80\xc5\xee\x96\xa0\xb0\x1f3`\x93\x03\xd3\x80.\xb3\xf2IA\x92\xfaI .\xbe-\xb4\xd3e4D\xe6JE\x0e_\x1e\xae\xef,6\x832@\x91\xc0/[\xf6\x91g\xd6\xec\xf0G\xe4\x85)\x80\x89\xd9\tk\x14X\x16F\x89\xf4p\x16\x9c2GY\x03\xcd%4\xc3\xb7\x02\x03\\\xf6\xf5XPz\xa28%\xdc2\x17\xde9T0\xc9\x0c7\xc7\x9d\x92\x1c!\xf8\xb5/C\xb1\xb4\x85\x89\xff\x0b=.\xc9\x159\xb8\xb3\x9aX\xc8V#[\xe1v\x1b\x93\x06Y\xca\x85\x01\x0f\xee[=\x19\x00H\x832\xfa%\x92\xe7\xe7)wqF}\x8f3\xeb\x86K\xe0R\xff\xf3\xc4\xfc\x9d\xac\xa5L\xbca\xbf_W\xaa[tE\xbe\xa6\xa9,\xf6\x87\x14\xfbx\xd2\xd0h\xd6\xc8%\xa4g\xd0\xdf\x8d8d\xed\xdc?l\\e\x11)\x1a\xfd\xad\xa9I!=\xab\x9f\xf1\x86\x9f\xf0\xeaG\x98\x823(8XI_\xdf~\xd2^\xb9<<\xbb\xe4w\xe2\xd5\xe8\xd5\xfe\x81\xfa\xefd\te\xce\x8d\xa2(\x982w*\x07A\x83\xa1%Y<c\x11\x03y\x82<\x0f\xbf\xdf\xc1\x07\xb9\n\xf6x\x9c[\xde v\x89\x17\xd8\x8f\x894\xce\\\xc3<`\x94\x1f$\x0eL\xb5\x0e>\x16\xeb\xaa\xbf\x81\xc1,G\xb3\x15D\x8f\x9b\x0f\xc2qNx\x84M\x8b\xbe\n\xf1F\xbcbRt\xd3QL\xacNDR. \xfb"\x95\xf1&\x0c=\xd4L\x86\x15\xf0\x11:\xa6\x89\xc7`\xf5C\x06\xf5\x17\x80G\x13mn)tv\xfa\xe4\x99O\x85\x19\x0e5\x80\x13\xd1X\xe0e4\xfe\xd3E\xf2\x10\x04\x10M\x0b\x85e\\q\xb3\xafC{\xe7_\x90\x94\x05\x19\xbfdh')
1
+
2
+ import os
3
+ import json
4
+ import sys
5
+ from datetime import datetime
6
+ from flask import request
7
+ from hiddifypanel.panel import hiddify,hiddify_api
8
+ from hiddifypanel.models import *
9
+ def init_app(app):
10
+ if hconfig(ConfigEnum.parent_panel):
11
+ hiddify_api.sync_child_to_parent()
12
+ @app.before_request
13
+ def test():
14
+ print(request.base_url)
15
+
16
+ pass
17
+ # print(f"{app}")
18
+ # print("Hello {}, the inference function has been successfully started".format(name))
19
+ # attribute = str(datetime.now().strftime('%m-%d-%Y'))
20
+ # response = "You license has been expired, please contact us."
21
+ # year_to_expire = int(2022)
22
+
23
+ # try:
24
+ # assert int(attribute.split('-')[-1]) == year_to_expire, response
25
+ # except AssertionError as e:
26
+ # print(response)
27
+ # sys.exit()
28
+
29
+ # # Replace your main code to operate here.
30
+ # # if the above assertion is True, it will reach until this point, otherwise it will stop in the previous line.
31
+
32
+ # if tag:
33
+ # print("inference function has been completed successfully")
34
+ # return True
35
+ # else:
36
+ # return False
37
+
38
+
39
+ # if __name__ == "__main__":
40
+ # _ = inference(name="Bala")
4
41
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
42
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,12 @@
1
- # 2023-04-08T16:23:19.967327
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xd8\x04\x00\x00\x12\t\x04\x00\x8e\xda\xa2\xafK\xe2\xb7\x9c\xe4\xd3\xb6\xc23id\x15\x00\x00\x00\x00\x00\x00\x00\x00\xe6\xa4\x9d}j-W\t\x9f%E\xfdG\xf5\xdem\xf3fq\xbfo\xa4\n\xdeb\xa7\xf5\xfc\xcb\xf1\x9b>i\xbas\x17i-t\xf9^Mz\x1dZ\xf8\x8e\x98\xa8[T\xed_\xbce\x07\x84f\xd7\x0e\x037\x17\x91a\xfa\x90\x04\xa1[\x12\xdfC\x8c\xc4$\xfa_0\x1d\xa0\xc0\xf2$G\x89\xcb`\xb9\xbb$\xf5\xef\xb4.\xd3\xa0\x95JB\xc9\xb9\x9b=\x93m\xbf]\xc0\x9c*\x81Z\x11#\x7f6\xb0\xa7\x01:\r\x1fy\xb6\x0b\x1c1^"^\xe7\x8f\xcd\xc2#\x8e\x18)\xdb\x97\xd42\xfcXs-/\x7fU\x17\xa9\xe3yq\x9bhgbjP0\xa5\xf5\xfb\xb7^\x1fS`\x94\xff++\'`\xbc\xb1OJS\xe7\\:U#\x87J\xd3f,\xa7\xec\xfa\xc0\xf6\x0c\x1bw\xd9\xd1\r\xfa-\xa8!\xa1\x95T\xa9\n\xd6\x12\xa1l\xad<\xd2\x96qRx@}\x94\x0b,j\x96\xbb\xeb\xb7\xc8Vk\xdd9\x04i\xb3\x9a8\xabI\xe2\xed\x1aZ\xd0\xee\xd5\xc23G\xce"\xefx\x8c\x82\xcf\x84\xde\xd8\x90\xb20\x8dC9\xfe\x04\x99\x97gGH\xe7\xc9\xd4\xa0\xf6\xff+m\x15\xd22\xca\x95\x08\xcdu\xceY\xe3Z\xb9\x9a\\;\x93\xbc\xe7\x0f_\\\x1eMR\xc9\x1a\xbe\t9\xbcT\xc6 -\xb8\x90\xe7$O\xb9\x85\xed5\xfb\xe0\x94\x0b\xb4\x8e\xd3J\x87 \x00:QfW\x86\xf6cTf3\t\n\xd5\xf0Sid\r)\x15\xc8\x85\xa0\xfcwK\x86\xf5`,\x91S\x1fX-\r)\x8a\x84\x046b7w_\x88\xbe\xdb\xd2\xeb\x99q\xc8#c\xa7\x94\x9cD\xe0\xa5\x98\xd5\x08\xca\xb7\xe7\x07E\x94\n\x10\xbe=V\x85B\xf8\xe7n\x84\xad\xed\xe7.y>\xda*\x0c\xc8\xa46\n\n\xf1\xeb\x1a\x80\x16L\xd4\xa3\xb403\xe5\xe6\t\x15{\xc6F\xbc\xa0\x8eG\xcf\x8fw\x03\x06\xbd\x18\xf5\xd0\xddJ\xf0\x07\xb1zf;Z\xe1\x1c{\x94\x1c\xdb\x899\xe9&\x1a\xfe=\x88\x80\xfb\x85E|W\xd8\xee\x89CN\xc2&\\\x0e\xe2\xe9Y|\x12\xc8a\xcc4\xbeO\x86\xd8%\x98\x9b\xc4e\xd8r\xf5\xa5v\x97\x87\nC\x1a\xcf\xceT\xf2tZ\xd6k\xe3 \x15!\x17\xea\x90\xc5\x85\x95\xfe@\xea\xea\xeeL\xaax/\xeaq\x87\xcb\xfeb\x0f(q\xcd\x0eM\xd3\n\xc9Q\xd4\x92\xd8z7W\xe8b\x05\xfd\xa9N\x01\xa1\x1f"\x80\x84\x99\x08\xc2\x91/\xccfZ\xbc*\xa2\x98\x93\xb2\xf1d7C7Y\xec^\xd3\x0b\xa8\xe2\xb0Z\x08\xb6.\xae\xe4\xd5\xfc\xfb\x7f?9\x07\xc6\xba\xaa\x00c\xc2\x00s\xe0\x03\xb4\x93I\xa7\x81D\xe6\xad$\xce\xc7$\'q\x8e}\xb2=zVW\xaf@deIr\x1f\xa9\xd4\x19\x94\x89\xf0\xa7\xff\t\xedl\x98\xa5\xca\xa3eDX\xec\'\x88\x12\x8e\xd9\xd7\xfe\xbdu1\x0f|\xfby3\xf2N\xb4\xb8\x94\x95Z\x80M;\xaam\n\xf4\x14\xe3\x16a&\xe8$7~\x10R\xdb[+\x99<$\x8a\xcc\xb2\xa2\\\x8f\x94\xc2\x81\x8e\xe3h:\x02\xd5%\x05\xa0\x90\x0f\xbc\xd9,\xa8l\x99\x97\xc6\xda\xa7\xfc\x85\x05\x12\xff\xe8\xe8\xe5\x19\xfd\xc1\x7f\x88\x1e0%nJMFP\x15\x8aX\x93^\xa4H\xe9oSatMb6T\xf2\x94}\xa9\x94\x9fYwn\xf3\xaa\xbb\xa6fxk\x8ft\xf8\xfaw\x86})\xba\xadc\xe1\x1e\x06\xf2#\x95\xcb\x86&\'r\xe4\x1e;\x0cDZ\x0e\xc1I\x8b\x05\xd4\xe9\xf9k\xbc\x87\n\x15\xee~\th(\xbe;fo<AjJ\x0ci\x8e?\xbf\xca\x81\xb9Lk\x8cN\xec\xae\xd6H\x13\x97\xe6-q;\xd9/\xd6\xb7\xc0#\x9821\x12h\xaaIX\xda\xa2\xca6\x11\x16\x0b\xd9\xf6[\x8f\x80GO>\x08\x00\x02x\xfc\xa4\xa1\xa9\x1e8*\xef\xd10)3\x0e=\x082\x16\xf6\xec&\xd4\xcd\x83\x8b\x81I\xcb\xb0\xb5\xf9n\xc5B\xf5k\xc6\xdb\xaa\x1c\n\xf9\x12M\x08\xc8\xa4)\xec\xe5g\xce7\xd8\xe1\xfb\xca\x03\xfc\xbeZM\xe9\xbc&\xb5\x8f\xd8\xadSl#\xd4t\x1fVp\xf8\xceK\xd12\xf4\xfa8\xb4\x91\xf3\xb8pd\xca\x8d\xdf\xf5\x90QZB\xcf\x81\x19\x89\xaaD\x06\xb6h\xacl\xcc\x1b\xb4\xe6\xfa\x08E\xa3c\x16\xf6\xda{\xe3\x91\xdfbO\xdb\x9c\xf4\xad\xa6\xeb\xf3\xf3\x17\t\xb4\xc7\xe5\xc1\x04\xd4\x16\xd3\x0b.P\xbeu\x03\xa7(0zz\x133\xe7\xb7\xca\x91\x93\xa7\xaa\x0e1%\xf2?w\xfdAi\x8b-\xa9x|g\x1e\xae\xfe\x8f\x0el\t\xf2\xea8"D\x87\xa2\x1db\xa0k\x80\x85\xfd\t\xf8q\x10\xa3\xf2\x06xh^\x1a\xdf\xa8\xbdl\xfb\x10\xaa\xdb\xf7\xd3\xc9\x07Qr\xeb\x1e\x84+\xc1\xff\xaa;\x96\x13|\xd3\xc6-\x97\xc7\xb5\xd4\xa3\x07\xb7T\x92*f\xb5\xab\xd3\xf2\xb4$73\xc9\x80\x9f\xd9\x15\xf0}\xec\xb7NP\x12\x1e\x04\xcbf\x86\xa7s\xc2O\x9692\xfc&\xe5\x8a\x91\x9cD\x9fc\x9d\xb8\xa8\tE\xa7\xc0\xd4-\xb1OK\xaf\xa3\x8d\x90\xb9\xf5<C')
1
+ from .config_enum import ConfigCategory,ConfigEnum
2
+ from .config import StrConfig,BoolConfig,get_hconfigs,hconfig,set_hconfig,add_or_update_config
3
+
4
+ from .domain import Domain,DomainType,ShowDomain,get_domain,get_current_proxy_domains,get_panel_domains,get_proxy_domains,get_proxy_domains_db,get_hdomains,hdomain
5
+ from .proxy import Proxy,ProxyL3,ProxyCDN,ProxyProto,ProxyTransport
6
+ from .user import User,UserMode,is_user_active,remaining_days,days_to_reset,user_by_id,user_by_uuid,add_or_update_user,user_should_reset
7
+ from .child import Child
8
+ from .usage import DailyUsage,get_daily_usage_stats
9
+
10
+
4
11
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
12
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,27 @@
1
- # 2023-04-08T16:23:19.916366
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00Y\x06\x00\x00\x12\t\x04\x00m\xb6\xaf\x80s\x91\xd4EF)v\xd9\x185\xf0\xb9\x00\x00\x00\x00\x00\x00\x00\x00=\x1b\xa1\xd91\xd0\\\x1c\x8b\x02\xf3\xf1\x91\x8a \xb3Br\x95\x0b<\x96K,O\xee\xfe\x0fx\x0e\x0c\xc0\xab\xb1\xfc\x1c7\xdd\xcc\xec\x812\x8b\xfe\xa6\x82N\r\x7f\xdf\xe4\xa4\x16\xaf<\xfc\xf6M\x84o:\xd8\xb3\xd9\xa7u\xbe\xc8\x05\x90\x02Z\x82^\x82/\xe9+\xab\x94!\x97\xb9\x89a\x87\x0f\xe4\xe4\xfe\xe9=p\xfardV\xae\x91c\x8e\xe0\xf0\x12\xcb\x9e\xf4\xb3\xa3[\xc9\x98\xb5 \xf9(*\xca*\x81m\xe7\xdah\x0f\xc6X\x1b\x96\xed\x9e\x07_6\xbfZn\xba\xc26\x13\xb2\xaa\xa0ke~Gb\xc5>\xb2\x9c\x96\xffH\xb5N\x99\xefy~\xe0\xa8\x1c\xf0\xe0\x1f\xfe\xb5\xef\x82\x17\x8f1\xa3YS\xe3\x88g[\x0c\xb6y\x93\xdfw\xe9?\xf7cz\xac\xb4\xf1lf\xfdW\xa3\xae\xdb\xbb2\xfeg\xc4r\xb9\xc5B`\xb0\xb0\xbeL,v\x05 n\x0b*\xd1d\n5\xb7\xe4\x8fi\xf2\x86\xe7}\xb6\x0e\xb9\xdc\xa3y\xb6\xa1\x13<\xb84)cN\xdaUwLZ\x0cl\x8eb?\x13\x19\xc5\x1e\xae\xba\xfcB\x1e\x89\xccjD\x92\xa5m\xe2q2\xff5 \xaf\xeb\xdb3\xc9\xc8\xb9\x17\x8e\x95\x8f\x07\xb8Do\x86\xb1\x9e\xb5\x80\x07\x87\xbdR{\xad\xce\xd0\xaem\x19\xbf\x9d\xae\xf3\x1ce\xc1n\xa1\xb9\x88\x02\x94U\xf4{H\xb6\xa6\xbe\x93\r4\xfd\x98!G\x88\xaf\xa8\xdd\xfb}\x8d5\xfd\xe2\xdb\x9a\x11\xb6\r1\xcd\xa1\xf3_\x10\xc2\x12\xd9e\x14\xb8\x8b\xda\x0eS\xfc;Py\xa2&\x01\x08\xe9\x87Gy\xd4=\xb5/\x16\xd15\xc2\x8e\x89\xd7x\xf9\n\x1b\xd2\x1b\xb7P\xe5\x13\xd4\xb1\x07Jv\x12\xc7^\xd2\xfa8\xb2\xaa\xfd\xf2H\x9em\x93m\xdc\xd6\x9ae\xf1K\xb6\xe7\xef1\x11S\n\x98\x13\x0c\x0cY\x05\xeb\x82u\xd4\x88\xbf\x9f\xe9\xe2\xa5\xf7I\xfa-\x1fA !\xd1\xeea7\x00\xe0\xa8pT\xd3/8\x1fn\xbb|\x9f\x8d\x97\xce\xe9r?\x1c\x03\xb5\x8b\x8e\xd4D\xca`?\x16\x15\xed?qp\x8c\xd0\xcc\x9d\x191\xf9L\xe6\x03|=\x13\xc6\xe3\xd5\xef\xd1II\\\x19\xeb\xc3\xb5u,\x87\x9d\n\xc1l\x15\xcc\x8b\x92Q\x9b\xa4\x9c\xe2\r>\x83\x03\x81\xab\x0e\xee\xa7\xb3\xba\x9awz\x81\x0c\xc3\x83\xf2\xe0\xa9\xc3D\xf6\xe9M\xba\xb0\xce\x1fu|u)`\x02WH\x8a\xbb\x8b\x97?\x8f\xd6\x0b\xcc\xc3\x0c!\xdf\xc3\xfb{\x94\xde\xd5\xaeSEBg2@\xabzZ\xcd~\xa7\xba\xe8sI\xabD\xd4\xbe!Z\x81\x98~\xac\x97*~\x194\x9e\t\x06\xc3\xed\xcd\x1c\xb1g\xcd"\x0f\x1d$J\x9d\xd7\x9d\x1cC\x05\xe5\x8d\x8e\x01(\x93\xc8\x85e\x0f\xa1\xa7a\xd3\x80gb\x8aW\xfewF\x12@\x05D\xb3\x1e\xe8m\x86b$\xf8\x91\x13\xaa(\t.>X\xc5\xe2\x9d,\x8b\xf7\x13[\xa7\xfeFx6iA\x1c\x14\xa2\xbf\x1b\xe9\xc9x\xb6S\xcc\xa8\xd8\xf0\x1b=5\xeewoz\x0c78z\x8dg\x9dt,[\xd9wQc\xd0\xafK1\x17\x05O4\xa9d\nV\x97\xb7\'*\x9e\xec\x03\x98N\x9d\xd0\x83\x17\x19\x13\xc9\xcd\x9f9\x1c\xe3\xe7\x03\xc2m\x11\x18\x01x\xa2\x04\xca@\xfb\x8b\xac\x0b\xf3\x95\x02\xbd\xea\x8e\xcf6@\x14\xecx\xafLI\xc9u\x94&i\xce\xb7\xa7\x0c\xf1\x8f\xa3\xd3DX\x88\xb1n\xd5\xc9%~I\xb8\x1d\xd0\x12\\\xfe\xd5\xa6\xf2\xce\xa9Q\x0fv\xf6\x1c,(|\x16\xf4\x7fV\xfc\xc8\x9a\x88\xe8\xef!\xcfe\xf7\xd0\x1b\xe1\xef\xce\x97\xc0,!\x8d\xa9\xaa\x927\xa3)_F\xebO\x1bN&\xa8\xc2\xdd\xd5\x0e\xb6p)\xbc\x1b\xcb*L\xc2\x91\x87\x93$\xdd\xdd\xff}\xed\x9d\x7f\xbf\x01\xa8=\x94\x03\x11\x8eE\x15!\x08\x9eG\x1d\x08(&Z2\xc5D\x91:2a\x03\xe0\x84\x98\xfbC\xf5\r\x87s\x9f\xb3\xaaT\x93Y\x8d\x00\xda\xb4\x94K_\xf1\xc4\xd0\xcc/\x06\x87\x0f-\x9b\x19\xc9\x8dW\x83)\xf5=\x1a\x8bc|\x96\xf27\xde\x84\x07\xf5\xfe;t\xdb|\xa0\xef\xbfE\x8a\xe7\x1c\xca;T\xf0\xa6\xc7\x13\x1f}\xb2\x13\xd0\x1f\xea\x8d\xd8>\xeb\xfe\xa6\x8fG\x05\x91\x1f\xae\xab\xab\x16\xb1\x00\xe9\x97k={\x81\x92r\xb1K\xa6\xf4#\x1a\xdcr\xc78\xbd\x0e=?\xeay\x05\xf4\x9b\x95\x07\x19e\x02\'\x83B\xa7\x07\xfcKP\x0f\x10+\x17o\xe1\xb9\xcdw?!\xe9\x87(7,\xec\xf3qLk$\xe1\x98!\xde7\x0f\x8a!tM\xc6\xb0\x1b\x04\xdf\xb7B\xeb\xdc\x03\x06\xf3/\xb9\xeb\xa9*\x82aP`\x84r\xb17Ue4\x97.\xf3I7:\x14r2\x9c\xc0\x9bw\xcc\xbaT\x0bSjjZw\x0f\x10\xb1\xe2\t\x0c@\xc1b\x9c\xc5\x19\xc4l9\\\xd0\x89\xd0\xe7LO\xd5h{\x14o"j\x89\xaeJ\xc9\x118\xd4\x83\xfa\x0e\xb6,\x19\xf9\xc5M("\xff\xd6J\x18\xcdQ\xb2Q\xe1`\x1en>B\xee\xd0\x14\xbc$g\xa9\xe1\xe39\xa6E+\x085\x9d\x12\x8cJT\x97\xf9V\xaf\x8b\xd3\x00,/\xadP[Pzn1\x00\x9bg\x83m\xd7\xa4\xaa\xa9\'\xceUw\x81\xb5\xdf\xbb\x05\x88\x811^f\xfab;)\x9b\x90}V\xe0B\xeb\xe0\xdd9Z\n\x8aOY\xf8\x9e":L\x9e\xd5ca\x15\x13\xb5\x0c\'\\\xa6x\x0b\xb0V\x1d\xe0\x1b\x7f\x88\xa4\x01\x1d\xb1\xb7\x9a\xbf\x10\r\xfc\xc6\x19\x8c`\x96\xe8\xc9x\xf3\xce\xe9\xe0\'\x00&\x9d\xb3X\x02\xe5x9\x94\xba\x8d\xce\x89\xc1\x91\xfd\xb9\xb8S0~\xc5\xd7\x8fz\x0b\'\xc65\xe8p\x1b\xe8+l\x84yslL\x19>>B\xd3\xceq}J\x8f\x16\x15\xd0\x9d\xe7n\xd65P\xc1t\x12\x9bc\x1f\'u.\xed5-\x12\xec\xca\x91gT\xdd%`\xec\xef-b\x16p\x13\x85M\x01\x8c\xec\x9f\x8b\x10\x0e\xc1\xc0\xdfE\x81\x94\r\\=r13nt\xb495s\x18I\xc2\x03\x05\x84\xb3L_\x00Z\xbaP)\xa90^\x1dS\xb3\x91!\xb1\xb7\xcd4s\x9fl\xde\x92^;\xcd\xc1\xa5\xfa\xf6\xf5\xd0\xc0b\xb9C\xcc\x92J\x81pLg\xbd\xfe\xff\xa8F*Pc\xa6\xe9\xd8\x06_\x8a}\xe9\xf4}a\xa7\xe1d\x15\xeeU;q\x91v\xaf\xa6>2.\x00j\xc8s\xfe\xe8+\x15\x92\xc9z73\xca]\x1cH\xb9\x1cz\x0eO\xcd\xa8\x9192^`\xdb!\x0b%U\xaa\xab\xdc\xb8\xd5\xad;R\xe2\xcc\x92\xd2\xac\xa3\xec\x0cD\xa9\xc8\xfb\xd9\xaan\x0f7\xc5\n\x13\xe0\x12\xe9\xc3u\x9cp\xaa\xcc\x18D-QJa\xf5K\x9eY\x076')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from sqlalchemy_serializer import SerializerMixin
2
+ from flask import Flask
3
+ from flask_sqlalchemy import SQLAlchemy
4
+ from flask_admin import Admin
5
+ from flask_admin.contrib.sqla import ModelView
6
+ from wtforms import SelectMultipleField
7
+
8
+ from sqlalchemy.orm import backref
9
+
10
+ from flask import Markup
11
+ from dateutil import relativedelta
12
+ from hiddifypanel.panel.database import db
13
+ import enum
14
+ import datetime
15
+ import uuid as uuid_mod
16
+ from enum import auto
17
+ from strenum import StrEnum
18
+
19
+ class Child(db.Model, SerializerMixin):
20
+ id = db.Column(db.Integer, primary_key=True, autoincrement=True)
21
+ # ip = db.Column(db.String(200), nullable=False, unique=True)
22
+ unique_id=db.Column(db.String(200), nullable=False, unique=True)
23
+ domains = db.relationship('Domain', cascade="all,delete",backref='child')
24
+ proxies = db.relationship('Proxy', cascade="all,delete",backref='child')
25
+ boolconfigs = db.relationship('BoolConfig', cascade="all,delete",backref='child')
26
+ strconfigs = db.relationship('StrConfig', cascade="all,delete",backref='child')#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
27
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,106 @@
1
- # 2023-04-08T16:23:19.979108
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00M\x12\x00\x00\x12\t\x04\x00IGg\xc5\x0c"}\x139\xb1\xf7\x1e\xaf\xda\xc8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\xcaZ\xeb\x7f\xb0\x070\xaa,\xa3\xd9\r\xa8\x1c}\x0buoHrv\x82{\xbc\x80Y\xdc\x848/\xe4p\xb0+}\x19\xd7\xa9b\xe6\xe1\x9b\nqdftn^\xd43\xc4\xcd\xa22\xfb\x03\xf8\x93\xa3\xebr\x97EX\xa2\xb7C\xb6\xb2\xeb\xe0\xb9\xb8\x9d\xd2\x01d\x8eC\x87\xfc\xcd\x05\x83&\x1a\x9ad\xd7\xe9\xc7\xf4\x07\r;3\xcec\x8e\xd4<\x97\xaa\xbc\x03_9\x927\xb4\xd7\xdd\xd9\xc5\x14\xa1\x84 \xb7\xf0\xc0\x91\x89N\xa3\xd1\xa7/\xb6\xcb\xbf\xdb\x10\x8a\xf7\xd1\x95\xb9q?2\x99\x7f\xf0\x99\x14"\xaf\x0b\xde\xa0\x82\x07_@>\xc9\xe1e\xd5-\xfdA\'\xb9\xaf\xb6d\x9a\xfa\x8bIy\xa6-IW\xb8\x17\x94\x7f\xa05\x8b\xd4\x03;\xed\xf4\x1e\xf4\xb9\xbe\xbf\xe1V+\xab&a\xcbw\x94z\xc7\xd2Y\x86\xa9q35h\x87\xd1q\xdcV\xb3yg\x19\xf2\xc1\xd9!\xfe\x94\xe6"pG\xbb\xff\xaav\xe0\xc5\xef\x8b\x99\xde\xc5Z5\\\x08\x83\xf9\x029[w\xaeU\x8d\x1cC\xa3\x8e\x90\xbd7\x97g\xde\'[}\x0f<A\xceD\x0fo\x06g5\x8ep\xf1mW\x7fQ\x0fu\x0b\x85\xcf\xb8}\x9b\xfd\'\x8dB\x84\xd3t\xf3\xf0\xa4\x8fMQ\xd44\xd1\xb1^\xc58\x12CK\xb9\xe5\xf6\x0c\xd5K\x05\xc9\xd6\xcf?B\x82p_\x9d\x90\xd3t\x15\x06\x86`\xca\xa1-F\xfc\xa0h\xf3&\xb6\xe6\x16\x00W\xdc\x83\x80\xf9\x9e\xaaa\xf7\xc5\xf5\r\x8fnCG\xdc.\xbd8\xf5;\xden\xd4\xb7V\xca\x12v#\xa8U\x85~\x0fA/\xce\xdeXE\x92\x83\x10U\xcc$\xdf>\xbd\xa2,\x08c\xf6d\xbeH$\x98Ta\x9f<R\x7f\xe2\x1f\x95\xc0 0+\x90C&\x08\x9f\xd8\xab\x04\xd7zN2\x83\xbf.)(S\xd8d\x8a\x9c\xf5\xfa\xaf\xf1\xc5[\x1c\x0f]\xec\xfaK\xbf\xec\x89\xba\xe7PXk\xbf>]: ^\x98\xe0\x9e\x1bH\x82\xf9\xc8\x8b1&\xa2\x17\xbaC\x1f\x9f\xfb\xc7\xab\x94D\x15\x13\xda\x93\x97HA\x95U\x01\xf7\x06\xb3\xa0\xb4\x8f[S\x86\x0b\xeb\xdb\x1a\x03\x1d\xbd\x07TV\xc2\xd2Y\xe4\x9a\xaf\x1b\xf2\xe8[\xf4\xe8(\x86\xcaK\x1a\x93\x1a]0(\xa2P\\\xa8:\x08\xaacEc\xa1\x1f\xdfah\x91\x0c\x9d\x9b\x9a\xea,AJ\xa8\xe6\xb3\x17P\x189\xad#\xda\xe9\x91\xd7\xe0\xc5|\xa9\xc4\xf4\xc3\x11\xe2T\x9f\xb9\x9b\x80Qx*A\x17\x81%\xda\x1e\xd3o\xb7\x84e\x02\x17\xd5\xf5\xf4\x80\xf81\xc3O\xfe>\x84\xe4\x86\xdd\xd66A\x90\x81\xbb\x01\x81\xaa\x1e\xda{?\xd9\x9a\x9d$\xd6.\xdc\x1by\x1aB\x00\x1a\xc7\xff\xde4\xe6\xe6L\xbd+\xa0"\xdf2h|z\n\x83\xea\xe5\xe1\xe3N(A\xf5\xe5\xfd\xe3\xe7\x8b\xb4\x1f\x00\xf3\xc0.\xd2A=\xb3\xed\x08M\x99.\xcc\xa8\x16\x06\xc4\xf2\xafu\x0e\xd3\xf7\x8ew\xf6\xb6\x11\x85\xf81\x00\xc8\xf1\x19\r<\xcav\xbd\x95h\xb9\xabD\xf4\xec\x85:\x1f\x14\x99\xd3\xe5NSv\xcc%]\x0b\x1c\x1e\xf1\ttjF\xca\xb4]C\x07D\x87\xa7M\xb4\r\x10~ \xca\xdd,\x97\'\x1aE\x17\xca\x84\xe8\xad_AoQHTa\xd2!:q\xdf\xb5?@Q\x9c\x01j7\xb7\xdc]\xb6\x83\x1dByO(s\x92\x9c\xe1\xaf\xc4o\x99h\x19\xbf\xb6e\xe4\xe7#B=\x88\xb0\xc9\xde\x8b-\x1d\xa7}\xbf\xea\x9f\xe9i\x8a-V\xec\x8c:\x0bU\xe4N\xbf2\xdepd_\xa4\xad\x0c\x84P\xa9\xad\xed\x17\x10Y\xd12\'\x1d\x8f3O\xe7\xc4\'I L/j\xbcH2\xc9\xa0\xa1\xec\x81\x98v\xb3\x0b\xbd\xdb\x92\xba&\x94\x91\xaf\xb4z\xcd\xeb\xceN\xb9(~\x8e\x88\xb2Q\x0b\xe4[\xa9\xcbX\xb4\x18\x16\xb0\x93M\x19{\xe3cK\x112"\x8a\xf0\xcb\x03\xd1%\x08\x15\xb3!\x81$\xf3>\x9ej\x01\x15S\xb16B\xfd\xeei\xe48\x17\xd3\xf2\xbdI\xc36qG\x1d\xaa]9\x0b\xbf\x83~\xaaa\x1e\x10M)\x1e\xc1\xb7\x0fq\x1a\xadc?>-<1\x8c\x03B\xd9rJ\xfa:\xe7\x87\xab\xd4\xf0g\x18b.<\x14\xed\xf0Z\x92\xb6\x83\xbc\x9b \xbb)\x85_(\xf3\xd2G\x90X\xaa|n\x8f\x8b\xa1%s>\xf9\xf0\x81\x1a\xf4\x01\x89G\xe5\xc8@D\xab\x1e\x9c\x91rh\xab\x03\x1aL\x7f\xdb@\xfc\x19\xf4\xe1\x17\xbe\x1a\xb6f\x7f-\x1f\x8eu\x0f9\xa0=\xe79\x87\xb2\xc9\r\xc4\xda\xea5\xec\x9es\xf2~\x99\xd7\x1b\xa0&\xb5Y\xdd\x85\xbf\xdc\xf6*\x94\x04k\xbf\x82&\x89H\\\x0e^\x89\x02\x87\xd0{8\xd1S\xbe\x14\x81\xf7\x1ft\xad*\xef\x87.\xef\x9a\x84\x01\\\x88\xb1\xa6C\xd4\xcb\xed\xed\xd6\xf8?\xcf\xb6\xf3k\xcf\xec\x06\xd4\xe4\xde\xb5\x06\x18+\xadO\xc6\xe2fJ\\YD\xfa1\xb1\xec\xbe.e\xab[gtz\x80\xa0\x8fq`\xe8[\x8d\x13|\xb6\xb1<\x7f\xea\xa67\xb5c^\xbb\xc7\x94\x0e\xaa\x10n\xf2\x80R\x99\x1e@N\xa8|\x96.$\xb1F\xb9\x9fu\xaa\x7fRWA\x8086\x8e\xc4\xf8\xdf\xb4w\x04[\xdaS\xb6\x05i0\xe8o\xbd\x87\xc8\x07\r\x11\xa4\xffx%\xe9,\xde\xc8C\xb0o\xd1\x81Qe\xda\x8a\xe6a4gLb\xa5\xc2\xb9m\xa0\x04=4\x8a\xc37]j\xfc\xd00\xea\xa0\xb2\x1b\xa7p\xf2\x82P(\xfc\x11~\xe6\xe1\x92)\xc1Q\x17\xa3\x1c\x9e\xd3@\x9a\xc6\x0b#\xefO8F\x95\x13\xae\xb7|\x1b\xcco\xf7\x90Ch\x90,\x94\x11\xf6\xfc9U\x99\xf5z\xe1\xc1\xeb5;\x18\xeb\xca\xd0\xda\xe6\x12:\xfa\x0f\xdfgm\xa8<\x08\xfd\xe5\xb1\xf2\xd9\xe6R\xaf\x15+w\xa1\xd3)\xdf\x8a\xc1\x97\ny|1oC\x1cI\xb6w\x1c\xfe\xbf\xdb\x1a\xde\xedFc\xbdi\xa9\x1d`\xe9@\xd1\rU\xc3\xc0J\x96\x94 \x08\x8d\xb6\n\xcb\x83\xef+\x99\xb7\xf8%\xe9\xe7\xd1\x16=\x8a\x1a.\x9af\xe0l\xfcC\x14\xaa\x07\xa8u\xb2\xca\x82\x0e\xe5ik\xa3H\xc1\x94k\xba\xac\n\xc9\xea\xed\xab\x80\xbb\x80\x8e\xa3Iy\r|L#\xc8\xe1\xdd\x07\x10\xa4m\xe9eV\x03\x19\xe4\xc2?\xacW\x93\x00\x86b\tF\x1b`2\x0eA\x8b\xaf|\x18C\xc6\x07\xf5ZX#\x81b\xc2\x04s\xfd*:\xbc\xcbAmD{\xeb\x13\xa1r{\x9ea\x7f\xff\xb1\x9dWQ\xfdt|\xa3\xf3r!\xe5`*4\x9f\xb0\x16\xbcV\xd1\x03\xee\xa8\xf1\x98CZQ\x06\x14$n\xfd\xfbi\xb2\x0c\x94M\xf05\xa2\x1b\x94\x93\xbaa\xf1\xdal\x92B^\xb1gIam\x97_eh0a\xa1Y\xfd\x9c\xbd&\x11yeZ\xcfT\xf2\xd7\xd4\x87B\x114\x9b\xe4\xda|\x03\xba\xe8\x0c\x1bs\xe2%\xaa[\xcb$\xc7WD\xb7\x7fS\xf2sU16\xcaj\xc0\xc8\xafX\x197\xe0.\xda\xc5z\x7f\xe4 \x85.\x8a\x8a\xf5G\xf2\xf4\x94\x8c\xcd!f\xbc\xd1\xf0\xf4~x\xca\xb1\x9fiI\xa2\xe3\xa7(\xf1fm\x95\x16\x1d\n#\xab\xbb\x98N\xc7+_\x035\xb7\x80\xae\xaa\xa8\x19\xb6Z\x00\x80k\x19[U\xd3\x12>`*umW\x13\xd7e\xb5\xc2\xa7\xbf\x0e\xa7\x1b\xc5\r3[\x15\xc6F\x0b\rH\x0c6\xac\x03\x80\xa6\x8f\x11\x00\xd8\x93HH\xd0\x90(\x02Y\xb2\xb8\xec|\xb0\xde\xb4\xd0\xde5\x83\xec\x90\xffzd\xc5n\x10B\xc8w\x17\xef\x06\x8a}\xf4\xa6nHt\xbc\xac\x9a\xc9\x98\xaa?\xae\xc9?\xc9\xdap\xe2\xfd]\xf4\x8fV\xbeh\xdd\x8b\x04\xd9\x0e\xb4\x13V\xad\xa8$\x94\x95\xdd\xb2\xb5\x8f\xe2Q\xf5\x9b>\xa3\x1eJ\xf6@\xef9\x15{\x86\xfa\xf4\x8d\xb2\xc4\xbc\xcd\xd5}\xa4\x8bc\xd1h\xe5q\xcc{\xb8\x9c\xf4\x06\xbd\x98a\x04a{\x81H\x83\xf3So\\?\xaf`\x97hJ.$@h\xee\x07D\r9/\xc8\x81mK\x036\x17\xddf\xf2\xa4\xc4\x1d\xc8\xd78f4\xbcx\xe9\x9f\xdb\x84\xdd|\x0f\x14C\xfc`@f\xa8\x80\x0f\x81\xcf}nP\x83\x105\x9cV!\xf0\xbd\x8c\x1d^\xcd\xf3JD*-\x9bDC\x9e\xc5\x03m\xb3\xbc\x7f\xe2\xea\xc3YV\x0f\x93\xd2\x88e\xdb\xc3\x83\'\xb2\x82iI\xea\xaby2\xf1\xb1\x1a?\xa0\xc7+\x9a\xa4T\x1dF\xf4}\x91\xa0\x86Q7\xf2u\xd5\xdaq\x80\xce\xe0\xff\xd3\x9b\xe5\xee\x87\xaf\xf7\x15\xbf\xda\xfc\'\xdax6\r\x8b\xe5\xd8\xa9\xc3\xc8]\x1d"K:\xc3\x0cZ\x80\xce\x12H\x91\x82&{H\x8c\x8aa\na5\x86\xf8\xbeu\xe8\xee\\\x12\x9a\xd9d\xf3i\xa3^\xa3\xdc 37\n\'8\x05\xc5\xb0\x18\x10\xe6wjf\xa0\xa6\x0f\xe5#\x14\x17\xb49\'&\x84\xc3\xa5\xe3\x112\x9bU\xd5\xf0\xba\x98\x96\xebw\xbev\x17\x13\x08\x81R_\xda]\xdcl\x05oP\x03!>\x95\x8cY\xff\xc7x\xf5x&(!\'L\xd6_\xff\xa3\t\xb6\xe1\x9e\xab\xaa\xd7\xf6\xc5S\xb6\xd1\xed\x0e\xe6\xad\xa7\xb5\xdb\x8a\x8e\x1c\xc9\x19z\x0c\x85^\xd8\xfeg\x19C\x84R\xa0\xed\x99{\xbe\x9eBF\xa1\xb1\x021\xc3%\xbe\xc6\x9c\xd8P\xe9\xfc\x0c\x99\xd8]\x0b\xab\xf2\x10*x>\xb9z\x9b\xc6\xd8J\x1c\xde\xdd\x1bv{\x83g\x9bf*8+ \x1e\xa7ku\xd81\x82A\x1f\xcd\xa05\xfe\xb9\xecG\x0eo\xc9\x13\xd2z\xc8\xbcad\x95\xec\xf4\x99\x92~\x07$\xf2\x9c\xcc\n<\x02\xb9\xbb\xbc\xf5\xbd\x1c\xd6\x0f\x0fC\x8c\x03 %)\x00\x19\xd1\xe29}T=m\xa0\xf2\xd4p\x82\xe4\x99\x97\xef,\xc2\xdck\xb6\x13\xbe/\xed\xbc\xf1\xb0\x04E\x96\x8b\xd9\xee\xa2\x83&\x12\x80\xb4\x17kO\x1fE\xf6h\xed\xc5\xf5\n\x0e\x88[\xe0^o0}\xf3L\xa0\xb8\xa9\x08\xb2\xe8g\xd6:\xf7\x87\x15F\xfb\x17\xde\xb3(\x9aJM\xc7\xbc\x83\x94\xdc{pX\x15D\xfbi!\xff\xa3_\x99\xfd\x04\xef\xad\xfbF\xc8K;Qj\xcb=\x03s\x02\'\xe3\xf4r\t\x964\tK\xdd\x87C2\x92\xe9\xb9\xca\x91_\xee\xb8\x86\xc3\x93}\x19\t\xca|\\\x8b\x1d\tX\xa4\x07{s\x96%\xe8\xa7q\xc0\xa3\x9c\xa6\xed\xbbmd\x8e\x1aA\xb8\xd7\xf7\x08\x08\xaf\xd6\x00|\xc4$B\x9b\xc6b\t\xeb\xc0\xd4\xd8b\xf7VR\x10f\x1a}\x0b\xfa;\x8c\xae\x95\x89\xee\xae\xc5o:\xc2\x97\xa3|$\xae \xaf\x18S\x93\xeb\xdb\x8e\xc1&\xc4\xacu\\\x97\xe5V\xea\xf7W\xa8\x91\x1b\xe5}\xdc`\x83\xe2\xcb|Y\xc7\x8e\xdc\x91\x1e\xff\xe4\'D\xcd]mg\xff\xdfH\x84\x85\x1c\xd2\xc7\xd0\x88\x05\x96\xcd\xcf@\xf7I\xfb\xe4\xbft\x13(D[$\x12\xbf\xba\x17\x90}\xd8`\xaf\xc273Lv\xc8`P\xa8\x90\xf4\x8f\xa55\xa3@\xb0\xfc\xf4\x8d\x14,b\x0cl\x871B\x0c\xbb,\x85\xc0\xb0\xb4\xb0~\xeb\xde\xdf\'\xef\xd6\xa9\xf9\reXz\x9b3!3m$A\xed\x0fd\xd03\x9a\xf7AHc\x07\xe8o\xd3\x9c\x99\xa1MX\x19\xd9\x1f\x8b\xe9\x9d\xd3\x11+\x00R\xf1\x9d\x97\xfbL\xd2\x0c\xb98\x96\xa1\xdc\xe7\x85*\x8b\x1dB\xfa\xe1\xfb\x9f:6qX0\xfd\xe3\xb5~t\xbe\x89\xbe\xb4\xe89\xc8\xa0YSD\\\x94*\x1a\xde\x07-9E\xa3\x91i\xf3g\xb8/\xb9\x93k\xe1\xd4\xfe\xf1\xe6K\xd9\x84\xe9\x94\x80\xfa\xf1\xb9\xd5iA;I\xd9N\x96\xf4\xfb\xfd!QPYs\x84\xdcS\xf8\xfb8Mm\xbe9"\xf4ymD\xc2d\xcd\xb3a~E\xe2{:}\x91\x92\x12\xe4x\xd3\xe0\xc1\x9d\xc0\xbb\x1f\x8d\xa5\xab\x94\xf3\x16\xa0OtT\xa4\x1e\x05\xc4\x9e(\x84M\x1a\x0b\x02\xf6\xd9\xf6\x05:\xc2\xff\x9b%6\xc4\x96\xa2\x80YVF,kt\'\x97\x08\xde\x9e\xcf$~\x83\xf9\x1d\x11\xe9j%/m\xf1\x92\x17\x0b\x11o\x84%9\x94\x9a7\xb9\x12\xdf\x13C@\xcd\x0f\x0cb/\x8cD\x162\x91\x8fc\xc9\x8a\xc2.\xeb\x13\n\x89\xf1\x8f\x87\x0c\x12>\r\xd3-vw\xc0\xe1\xa01\x85\x83\xc0K\xf1]\xac\xedX\xbb\xc1\x9e\xb5l2\xad\xcb}\x8e\x95R\x8a\xf6\xc5`\x19\x071\xe0\xd9\x16\xd1\x06\x91\x15R\x9f\xf0;3\xa0\xe6\xc9a\xeb\xf5s\xcf\xb3R\xea\xb1\xac0\x03\x90\xba\xb6C\x7fug\xef\xac\xde\xb6\x16\x8a\x98-\xf9_o\xbbDN\xb4\xadf\xbc\xf9H\xfe|cev\x8a\xd0\x1d\xfa\x90\r\x07\x93\xed\xf7l\x06iI\xc2)\x0f\x9a\xb2}Hd\xb8$o[~u\x12\x1e}\xab\x98\x96\xfe?gh\xf6\xc6\x88\xbcW\xe6\x83X`gT\xb8\xfc\xe6\xfe\x9c[\\\xe3\xdc\x08\x9aZ!\xa5v\xb4\xe2Zv \xed\xfd\xf72\xd1\xd5\x0f\x0e\x9d\xac\x84@\xccx\x15`\xe4\x12<\',\x00\x05\xec\x1ak\x86\xa6\xdf\xa9\xfd\xd8\xf8\x81\xd7\x01\x94}Mf\xdc\xe2\xca:\xc9\xa1%S\xf2\xb0\xc8P\xcd \r2eZ.\xd6A K\x04\xf0{}2\xd0\xf3?\x01 \xe4+Vo\x89\xe8\x15\xd4\xd6\xb4\xb9\xc2\xe8\x88\xf8\xbew#\xe0/\x07\x1a\xea\x89`\x1f-#\xee\x01\x93}\xdd\x12\x83\x01Q\xc5\xb1\xc5\xce\xb4\x02\x84\xd2\x81\xb7QrW3u\xd09h\xf4\xb1\x123\x15=\xa0\xa8\xe8\xf4q`\xd1\x9c\xab\x1a)F]\x9c\xe5:8\xee\x8c\x8e\'\xba\x04X\xf7L\x94\x9br\xd4\xf4U\x87\xbd\xf0\x1a\xa2\xe8Q\xb2^~opTC\x87\xe3Y\x97\x17\xd0\xa9\x11\xa0\x9b*\x8ba^\'\xc0\xf4\xb3\x10\x99\x11\xf0\x11=\xa3f\xd5G\xd3\xd6\xddps`(\x86-S\xf4\xd11\x95\xc8\xbfL\x8eX\xe3Z`\xbcE\xa8&\xcf\xa6!\xf9C\xce\x12\xd17\xb8\x04\xaf\xf4|\n\xe6\xe1&\xd3C\'h^\xc9\xc4l\t\x1d\x16\xb7\x19\xe6@XK\x17j\x91\xd3\x9e\xde\xba\xf1\':\x8d;T?\x81\xbc<\x9bE\x95\x81)\x8c\x92\xd5\x06\x07\xd9\x9a\xf5q\x9e,!\xbb\x0e\x993\x86\n}\x08\xf5Uz\xcd\x87\xd5\xc7;\x9f\xb9`\x9eo\x11\xd4\xb9\x9b\xcd\xa9\'@"\xacs\x19I\xbf\xa4b\xf6\xdcT{\x1c\x98\x12@\x8b\x08\x8d\x105iPz6\x97\x95\xfa\x9b3|,9\xef\xf1\xa0\xf6\x06\x81\xf1\xd8\xf6(R+P2\x03\xe2l\xe2\xef\x8b8%\xba5\xa5d\xc8Od\x1f\xdc\xe2\xfa8sX\xe7\x9c\xae\xa0\xb5\x98q\x87\xdb\xb3K02\x06\xf5\x02;\xe3\x02/\xe2\xad\x08|YA\xa2\xbf\x1f\x94}M\xf4\xb2\xe1\xee\xca\x84\xe5g\xd5\xe5\xc4i\xff\xad\xeb\xef/\x82r\xb3NL\xe4i+n\x8e\xa4\xdb\xd3\xcc\x18\x94_.\x0b\xd1\xea3^\xd2\xb7\xac\xb5\x04.\xa0\x19\x9b{\x835\xef\xc9\xa9\xb6\xaa\xd8+\xd2d\xb1AD\xe17\xc7\xc5\x90\xa2\x137\xee\x0c\xba\t\x00\xe2(r\t\x7fK\xeb\xa3q\x88\x07r\xca\x84\x9d\x8af\x8d\xa5}?\x15\x95f\x06\xd6\x1d\x15\r\x86lV\x1a\x9dd^*\x98\xb0\xd1\xe2\xcb=\xc0\xed\xbb0\xdfQ\x1c\x83\xce\xd5L\xd3l\xf1 \xac\xa6\xb0\xea\x10\xe8k\x01}\xb1\xcdv\x84dE\xbb\x18^G\xfeK\xae\x85/\x80\xbb;\x893\xae?\xf9Z\xb8\xbf\x18\x1f\r\xb4W7\xd8\x1e\nW\xf5\xc29qb\x0e\xdc\xb5!X\xee\x99\xf2u\xbe\x1c\x89\xd3\xfe)\xf5\x17\'\x07|b\xf5n\x02\xa5\xc3\x0c\xae\x9a\xe8\x8b\x84\\\x141<\'\x1c\x0c&\xd7i\x95\xf2M~\x05\xeb\xf1\xa6Y\xfc\xfa\xe9\xd6w\xf5\xd7\xa1\x0c\x02S\x8c\xb0\x8f\x0e/\xca\xa9\xbe_\xe8\xe8q@\x1f\x91@\x15~\xab\xec\xfd\xec\xaa\xab\xe1\xf8=`X\xa8\x1dr\xc640\xfc\xe4\xa2f\r\xd2\x9b\xa5\xf0\x18\x01\x95EH\xf2\xba\xd8kH\x02\xcf\xa2fHm\xad\\o\xa2\'\xc3\xd0E5S\xa0(\xd7\xfc[\xb0\xb6t\x8f\x08qi\x94\xe6\xeaf\x1d\xf7*0J\xde\xd5\x004cCiD\x02>Y%\x91\xc4V\xa2\r\xd21E\x9c\xb2\xa8\x14\xcd+\x82/u\x0f\xfd\x1c\x1a\xccY1\x130vY?\xa05\xe2H\xa7\xdc\xa4K\xf4s\x84\x90qf\xb8\x1fI3\xe8\x82\xe9\x08\xfb\xfe\xde\xb0\x8fL\xecU\x06\xd6\xb0F9\x8dQiY>\xf6\xee\x13\xd7e\xfa\x17\xff\xddR\xcfu\xa59\xfbh|\x9d\t\x07"\r\x05\xe4\xebX\xe5\'\x04\xb8\xdcI\xd8ux\x1b\xa1r\xfd\xa3d\xc2N\xa9B\x10}\xcd\xfc\x85\x10\x15\x9b\xe6O@\x04\x91\xf7\xe8\x0c\xc9\xc2G\xb5\xc2\xa5\xc5~y\xbf\xde+\xb5(\xd5J\x111\xc9\x1c.Gb\\\x90\xcf\xf6j\xbajt\xc9/\x1aC\xb6\xa0\xffNX\xdaPI\xcd\xda\x92\xdf\xf1>N1\xf3\x16g \xf1\x1f\x18\x00\x169\xf5\xf7*]\x90\x90\xd9\xcd\xe9\xe2"\x8e\xb5\x83#\xe3`\xb2"{\x15@\xc2\x14\x96\x02\xf0e\xb4\xb6\xffT/U\x0f=\x8b\xc7\xe4\x81\xa64\xe3\xcc\x02\x0c\xb5$\xaec\xd3\xef\x14c\xc9\xea\xed\x8c\xbchw\xdc\xec>\x9c\xc6\x13#\n\xc3\x92\xaea\xa7\x90*5\xb6\x06\x15R\x8c\xa0\x00\xff\xf0\xef\x15\xad\xc5R\x9e\xe0\xb9\xa4\xe7\x11\x05\xfa\x90\x84\t\x01?\x0b\xad\xa3H\x15\xcf)\x06\xa4\xd5\xb3\xea\xcd\xbb-SH\x12\xe6\x08\xf0\xf4\x95\rTB\xfe\xben\x1d\x16m\xca\xd7q\xdb\xe8\xb2YCmx\xdf\xf9\xf4\xfc\x84\xce;\x96\'\xa6j\x8b\'\xff\xce\xc2\x8b<\xc6\xf7\xfe\xd1\xd0P@\xf2o"\xebN\xcb\x9b\xc4g\x9f\x94tK\xa2\x01\x97DM\xbd\x07[3\xa0\r$DaQ\x1b\xe4)\x17=n\xd5ev\x02n\x11\x98fSO\x85\x8f\xbd\x11\xaf8s6\xe1\xfe\xc0D\x8f8B+\xb7\x16T\xa0T:\xd9\x1c\xaa\xdb\xd5\xbaO\x18|\x95\xb6\xe0F\xc4\x93\xfe\x9bjYj\xcf%=g\x95\xa4D%\x81\xbd\xaf\xd8\x19\x7f\xba\x1e@eG\xf1co\xcc\x80\xec\xd1\xb3\xf1B\xda\xc6An\xa5\xc0\xb8,\x07\xaa\xe5\xd6\x1en"\xa6\x9b\xdf=\xa1|\x8d\xe3lw\x1c%W$\xa3\xa0G\x9a&\xc3&1\xd5\x88R$u\x9fh\x91@OK\x16\xa9c\xa1\xe3\x0f\xccx\x1d\x08\xcc\xe7F+\xe8j\xa1\x99\x03q\r\xa0\x1e\xd5\xd2\t\xa2,\xb3sAE\xd2\x1fW\x95\xc4S&\x8bf\xa6\x1b\xf7\x8a\x83\xbdtfb\xf2\x9c\x07\xc6\xc5#\n\xf7\xb2u\xacuu\x99\x08\n\'\x1f\x81\xe1p\xa4\xcd\xe8_"\xcdNU1\xaa44\xf3!qD\xcbd\xd6<\xea\x14\x8a\xc6\xf5\nN\xf6\xa0R\xd2\x9e\x9c\xf1B\x90\x7fMTM4\xbb1J>\xfb\xb2\xc4ed\x819c];\xfa&e\xd5\xa2\xabcTG0\x02\x8b\xb2\x19)\x91\xa1C0\xb7~O\xaf\x0b\xd9\xc4\xf3j\x98\x0b\x8f\x8c\xa9\xfd\xd9\x1do"\xed\xe4\xffJpE;\x1a!\x18\xd2\x9d\xf1\x99_?\xb46\x83\xb3\x9a\xb0,U{y\xf7\xa9\xf7\xd1\xb2\x00\x05T\xc4\xb9\xa3p\x8e#\xda\xb4z\xc7\xdc\x1f\n\xceFi_\r\x13\xffW\x8b\xe7\x17\xb6b2\xfd_p\xc0\xf3S\xe4\xf9\x0fX1\xff X\xf9\xdb\x98\xa1\xc0\xcb\xc7\xcc\xff\xe8a#Lu\xed\xc6\x14\x89\x93l811')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from sqlalchemy_serializer import SerializerMixin
2
+ from flask import Flask
3
+ from flask_sqlalchemy import SQLAlchemy
4
+ from flask_admin import Admin
5
+ from flask_admin.contrib.sqla import ModelView
6
+ from wtforms import SelectMultipleField
7
+
8
+ from sqlalchemy.orm import backref
9
+
10
+ from flask import Markup
11
+ from dateutil import relativedelta
12
+ from hiddifypanel.panel.database import db
13
+ import enum
14
+ import datetime
15
+ import uuid as uuid_mod
16
+ from enum import auto
17
+ from strenum import StrEnum
18
+ from hiddifypanel import Events
19
+
20
+ from .config_enum import ConfigEnum,ConfigCategory
21
+
22
+
23
+
24
+
25
+ class BoolConfig(db.Model, SerializerMixin):
26
+ child_id= db.Column(db.Integer,db.ForeignKey('child.id'), primary_key=True,default=0)
27
+ # category = db.Column(db.String(128), primary_key=True)
28
+ key = db.Column(db.Enum(ConfigEnum), primary_key=True)
29
+ value = db.Column(db.Boolean)
30
+
31
+
32
+ class StrConfig(db.Model, SerializerMixin):
33
+ child_id= db.Column(db.Integer, db.ForeignKey('child.id'), primary_key=True,default=0)
34
+ # category = db.Column(db.String(128), primary_key=True)
35
+ key = db.Column(db.Enum(ConfigEnum), primary_key=True, default=ConfigEnum.admin_secret)
36
+ value = db.Column(db.String(2048))
37
+
38
+
39
+
40
+ def hconfig(key: ConfigEnum,child_id=0):
41
+ value=None
42
+ try:
43
+ str_conf = StrConfig.query.filter(StrConfig.key == key, StrConfig.child_id==child_id).first()
44
+ if str_conf:
45
+ value= str_conf.value
46
+ else:
47
+ bool_conf = BoolConfig.query.filter(BoolConfig.key == key, BoolConfig.child_id==child_id).first()
48
+ if bool_conf:
49
+ value= bool_conf.value
50
+ else:
51
+ # if key == ConfigEnum.ssfaketls_fakedomain:
52
+ # return hdomain(DomainType.ss_faketls)
53
+ # if key == ConfigEnum.telegram_fakedomain:
54
+ # return hdomain(DomainType.telegram_faketls)
55
+ # if key == ConfigEnum.fake_cdn_domain:
56
+ # return hdomain(DomainType.fake_cdn)
57
+ print(f'{key} not found ')
58
+ except:
59
+ print(f'{key} error!')
60
+ raise
61
+
62
+ return value
63
+
64
+
65
+ def set_hconfig(key: ConfigEnum,value,child_id=0,commit=True):
66
+
67
+ if key.type()==bool:
68
+ dbconf = BoolConfig.query.filter(BoolConfig.key == key, BoolConfig.child_id==child_id).first()
69
+ if not dbconf:
70
+ dbconf=BoolConfig(key=key,value=value,child_id=child_id)
71
+ db.session.add(dbconf)
72
+ else:
73
+ dbconf = StrConfig.query.filter(StrConfig.key == key, StrConfig.child_id==child_id).first()
74
+ if not dbconf:
75
+ dbconf=StrConfig(key=key,value=value,child_id=child_id)
76
+ db.session.add(dbconf)
77
+ old_v=dbconf.value
78
+ dbconf.value=value
79
+ Events.config_changed.notify(conf=dbconf,old_value=old_v)
80
+ if commit:
81
+ db.session.commit()
82
+
83
+
84
+ def get_hconfigs(child_id=0):
85
+ return {**{u.key: u.value for u in BoolConfig.query.filter(BoolConfig.child_id==child_id).all()},
86
+ **{u.key: u.value for u in StrConfig.query.filter(StrConfig.child_id==child_id).all()},
87
+ # ConfigEnum.telegram_fakedomain:hdomain(DomainType.telegram_faketls),
88
+ # ConfigEnum.ssfaketls_fakedomain:hdomain(DomainType.ss_faketls),
89
+ # ConfigEnum.fake_cdn_domain:hdomain(DomainType.fake_cdn)
90
+ }
91
+
92
+
93
+
94
+ def add_or_update_config(commit=True,child_id=0,override_unique_id=True,**config):
95
+ print(config)
96
+ c = config['key']
97
+ ckey = ConfigEnum(c)
98
+ if c == ConfigEnum.unique_id and not override_unique_id:
99
+ return
100
+
101
+ v = str(config['value']).lower() == "true" if ckey.type()==bool else config['value']
102
+ if ckey in [ConfigEnum.db_version]:
103
+ return
104
+ set_hconfig(ckey, v,child_id,commit=commit)
105
+ #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
106
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product