clash-linux commited on
Commit
432b886
·
verified ·
1 Parent(s): 66a9800

Upload 21 files

Browse files
Files changed (4) hide show
  1. app/main.py +64 -3
  2. app/sub_manager.py +2 -2
  3. data/config.yaml.raw +1 -0
  4. entrypoint.sh +23 -5
app/main.py CHANGED
@@ -39,16 +39,39 @@ initialization_error = None
39
  @app.before_request
40
  def initialize_once():
41
  """应用首次请求前的初始化"""
42
- global clash_manager, sub_manager, initialization_error, _initialized
43
 
44
  # 使用类变量确保只初始化一次
45
  if not getattr(initialize_once, '_initialized', False):
46
  logger.info("正在初始化应用 (首次请求)...")
47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  # 初始化订阅管理器
49
  sub_manager = SubscriptionManager(
50
  sub_url=SUB_URL,
51
- config_path=os.path.join(os.path.dirname(os.path.dirname(__file__)), "data", "config.yaml")
52
  )
53
 
54
  # 加载订阅并转换为Clash配置
@@ -64,7 +87,7 @@ def initialize_once():
64
 
65
  # 初始化Clash管理器
66
  clash_manager = ClashManager(
67
- config_path=os.path.join(os.path.dirname(os.path.dirname(__file__)), "data", "config.yaml"),
68
  clash_path=os.path.join(os.path.dirname(os.path.dirname(__file__)), "clash_core", "clash.meta-linux-amd64"),
69
  api_port=CLASH_API_PORT,
70
  proxy_port=CLASH_PROXY_PORT
@@ -452,6 +475,44 @@ def index():
452
  </html>
453
  """
454
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
455
  if __name__ == "__main__":
456
  # 如果直接运行此文件,将初始化应用并启动Flask服务器
457
  initialize_once()
 
39
  @app.before_request
40
  def initialize_once():
41
  """应用首次请求前的初始化"""
42
+ global clash_manager, sub_manager, initialization_error
43
 
44
  # 使用类变量确保只初始化一次
45
  if not getattr(initialize_once, '_initialized', False):
46
  logger.info("正在初始化应用 (首次请求)...")
47
 
48
+ config_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data", "config.yaml")
49
+
50
+ # 首先检查是否存在有效的本地配置文件
51
+ if os.path.exists(config_path) and os.path.getsize(config_path) > 0:
52
+ logger.info("检测到有效的本地配置文件,直接使用它启动Clash")
53
+ try:
54
+ # 初始化Clash管理器并使用本地配置文件
55
+ clash_manager = ClashManager(
56
+ config_path=config_path,
57
+ clash_path=os.path.join(os.path.dirname(os.path.dirname(__file__)), "clash_core", "clash.meta-linux-amd64"),
58
+ api_port=CLASH_API_PORT,
59
+ proxy_port=CLASH_PROXY_PORT
60
+ )
61
+
62
+ # 启动Clash Core
63
+ clash_manager.start_clash()
64
+ logger.info("成功使用本地配置文件启动Clash Core")
65
+ initialize_once._initialized = True
66
+ return
67
+ except Exception as e:
68
+ logger.warning(f"使用本地配置文件启动失败,将尝试从订阅加载: {str(e)}")
69
+ # 继续尝试从订阅加载
70
+
71
  # 初始化订阅管理器
72
  sub_manager = SubscriptionManager(
73
  sub_url=SUB_URL,
74
+ config_path=config_path
75
  )
76
 
77
  # 加载订阅并转换为Clash配置
 
87
 
88
  # 初始化Clash管理器
89
  clash_manager = ClashManager(
90
+ config_path=config_path,
91
  clash_path=os.path.join(os.path.dirname(os.path.dirname(__file__)), "clash_core", "clash.meta-linux-amd64"),
92
  api_port=CLASH_API_PORT,
93
  proxy_port=CLASH_PROXY_PORT
 
475
  </html>
476
  """
477
 
478
+ @app.route("/api/use_local_config", methods=["POST"])
479
+ @authenticate
480
+ def use_local_config():
481
+ """直接使用本地的config.yaml文件,跳过订阅转换"""
482
+ global clash_manager, sub_manager, initialization_error
483
+
484
+ try:
485
+ config_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data", "config.yaml")
486
+
487
+ # 检查文件是否存在
488
+ if not os.path.exists(config_path):
489
+ return jsonify({"success": False, "error": "本地配置文件不存在"}), 404
490
+
491
+ # 停止当前的Clash服务(如果正在运行)
492
+ if clash_manager is not None:
493
+ clash_manager.stop_clash()
494
+
495
+ # 重新初始化Clash管理器并使用本地配置文件启动
496
+ clash_manager = ClashManager(
497
+ config_path=config_path,
498
+ clash_path=os.path.join(os.path.dirname(os.path.dirname(__file__)), "clash_core", "clash.meta-linux-amd64"),
499
+ api_port=CLASH_API_PORT,
500
+ proxy_port=CLASH_PROXY_PORT
501
+ )
502
+
503
+ # 启动Clash Core
504
+ clash_manager.start_clash()
505
+ initialization_error = None
506
+
507
+ logger.info("成功使用本地配置文件启动Clash Core")
508
+ return jsonify({"success": True, "message": "已使用本地配置文件启动服务"})
509
+
510
+ except Exception as e:
511
+ error_msg = f"使用本地配置文件失败: {str(e)}"
512
+ logger.error(error_msg)
513
+ initialization_error = error_msg
514
+ return jsonify({"success": False, "error": error_msg}), 500
515
+
516
  if __name__ == "__main__":
517
  # 如果直接运行此文件,将初始化应用并启动Flask服务器
518
  initialize_once()
app/sub_manager.py CHANGED
@@ -128,10 +128,10 @@ class SubscriptionManager:
128
 
129
  cmd = [
130
  self.subconverter_path,
131
- "-f", # 添加强制转换文件标志,禁止服务器模式
132
  "-i", input_file, # 输入文件
133
  "-o", self.config_path, # 输出文件
134
- "-t", "clash" # 目标格式
 
135
  ]
136
 
137
  logger.info(f"执行命令: {' '.join(cmd)}")
 
128
 
129
  cmd = [
130
  self.subconverter_path,
 
131
  "-i", input_file, # 输入文件
132
  "-o", self.config_path, # 输出文件
133
+ "-t", "clash", # 目标格式
134
+ "--config", minimal_pref_path # 强制使用空白配置,避免默认行为
135
  ]
136
 
137
  logger.info(f"执行命令: {' '.join(cmd)}")
data/config.yaml.raw ADDED
@@ -0,0 +1 @@
 
 
1
+ dmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAcHEuYXdzNDgueXlkamMudG9wOjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT1yZWFsaXR5JmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1jaHJvbWUmc25pPWJ1eWxpdGUudHYuYXBwbGUuY29tJnBiaz02VC1rWUJmNjVFUmFFQWh4SXlITDFGQ2Z1MFFSNlAyWFFNdGN2VWd6U2pNJnNpZD03MGFkMTUwZCMlRTUlODklQTklRTQlQkQlOTklRTYlQjUlODElRTklODclOEYlRUYlQkMlOUE4OC4yNSUyMEdCDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0BwcS5hd3M0OC55eWRqYy50b3A6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXJlYWxpdHkmZmxvdz14dGxzLXJwcngtdmlzaW9uJmZwPWNocm9tZSZzbmk9YnV5bGl0ZS50di5hcHBsZS5jb20mcGJrPTZULWtZQmY2NUVSYUVBaHhJeUhMMUZDZnUwUVI2UDJYUU10Y3ZVZ3pTak0mc2lkPTcwYWQxNTBkIyVFOCVCNyU5RCVFNyVBNiVCQiVFNCVCOCU4QiVFNiVBQyVBMSVFOSU4NyU4RCVFNyVCRCVBRSVFNSU4OSVBOSVFNCVCRCU5OSVFRiVCQyU5QTYlMjAlRTUlQTQlQTkNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QHBxLmF3czQ4Lnl5ZGpjLnRvcDo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9cmVhbGl0eSZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9Y2hyb21lJnNuaT1idXlsaXRlLnR2LmFwcGxlLmNvbSZwYms9NlQta1lCZjY1RVJhRUFoeEl5SEwxRkNmdTBRUjZQMlhRTXRjdlVnelNqTSZzaWQ9NzBhZDE1MGQjJUU1JUE1JTk3JUU5JUE0JTkwJUU1JTg4JUIwJUU2JTlDJTlGJUVGJUJDJTlBMjAyNS0xMC0xMA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAcHEuYXdzNDgueXlkamMudG9wOjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT1yZWFsaXR5JmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1jaHJvbWUmc25pPWJ1eWxpdGUudHYuYXBwbGUuY29tJnBiaz02VC1rWUJmNjVFUmFFQWh4SXlITDFGQ2Z1MFFSNlAyWFFNdGN2VWd6U2pNJnNpZD03MGFkMTUwZCMlRjAlOUYlODclQjglRjAlOUYlODclQUNBV1MlRTYlOTYlQjAlRTUlOEElQTAlRTUlOUQlQTEwMSUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRiVFNiU4RSVBOCVFOCU4RCU5MA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAcHEuYXdzNDkueXlkamMudG9wOjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT1yZWFsaXR5JmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1jaHJvbWUmc25pPWJ1eWxpdGUudHYuYXBwbGUuY29tJnBiaz14T25ZMnlrTHJjRk1JaHA3R0JRdTFtU0g3eUlXLXlDYzFUaEpuVlZ0S0RjJnNpZD01YjY3NjJiZSMlRjAlOUYlODclQjglRjAlOUYlODclQUNBV1MlRTYlOTYlQjAlRTUlOEElQTAlRTUlOUQlQTEwMiUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRiVFNiU4RSVBOCVFOCU4RCU5MA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAcHEuYXdzNTAueXlkamMudG9wOjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT1yZWFsaXR5JmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1jaHJvbWUmc25pPXR2LmFwcGxlLmNvbSZwYms9TzVXQzZ3YVdER1JfRWxPSG1ocUVRR1VXRHVmY0Z4VHV1N0JQaHdXMXNFNCZzaWQ9ZTFkZjJhMTUjJUYwJTlGJTg3JUI4JUYwJTlGJTg3JUFDQVdTJUU2JTk2JUIwJUU1JThBJUEwJUU1JTlEJUExMDMlMjAlN0MlMjAlRTklQUIlOTglRTklODAlOUYlRTQlQjglOTMlRTclQkElQkYlRTYlOEUlQTglRTglOEQlOTANCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QHBxLmF3czU0Lnl5ZGpjLnRvcDo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9cmVhbGl0eSZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9Y2hyb21lJnNuaT1kb3dubG9hZC1wb3J0ZXIuaG95b3ZlcnNlLmNvbSZwYms9YXNMSlJFc3A5TDBKYlVSUVBJaEZ4YzZiWklncHVuRU9qT0plSHYzWWNFcyZzaWQ9YjBmYmUwZjAjJUYwJTlGJTg3JUI4JUYwJTlGJTg3JUFDQVdTJUU2JTk2JUIwJUU1JThBJUEwJUU1JTlEJUExMDQlMjAlN0MlMjAlRTklQUIlOTglRTklODAlOUYlRTQlQjglOTMlRTclQkElQkYlRTYlOEUlQTglRTglOEQlOTANCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QHBxLmF3czUxLnl5ZGpjLnRvcDo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9cmVhbGl0eSZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9Y2hyb21lJnNuaT1idXlsaXRlLnR2LmFwcGxlLmNvbSZwYms9Tjg2eXlXLUw5MXZPdEM5cWdKY1lBaG52YTlNNFdUM3ZjbFNuc1FvNEEyayZzaWQ9NzlmZDQ1MWUjJUYwJTlGJTg3JUFGJUYwJTlGJTg3JUI1QVdTJUU2JTk3JUE1JUU2JTlDJUFDJUU0JUI4JTlDJUU0JUJBJUFDMDElMjAlN0MlMjAlRTklQUIlOTglRTklODAlOUYlRTQlQjglOTMlRTclQkElQkYlRTYlOEUlQTglRTglOEQlOTANCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QHBxLmF3czUyLnl5ZGpjLnRvcDo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9cmVhbGl0eSZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9Y2hyb21lJnNuaT10di5hcHBsZS5jb20mcGJrPWdrZVVacHBWUXp1dGpHc1Jjc0dNVzhPclBIYm9KM3FSRnBJdmo4bGNVajQmc2lkPWMxNzQ2MThkIyVGMCU5RiU4NyVBRiVGMCU5RiU4NyVCNUFXUyVFNiU5NyVBNSVFNiU5QyVBQyVFNCVCOCU5QyVFNCVCQSVBQzAyJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGJUU2JThFJUE4JUU4JThEJTkwDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0BwcS5hd3M1NS55eWRqYy50b3A6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXJlYWxpdHkmZmxvdz14dGxzLXJwcngtdmlzaW9uJmZwPWNocm9tZSZzbmk9ZG93bmxvYWQtcG9ydGVyLmhveW92ZXJzZS5jb20mcGJrPXpaSmcxM3JKTkh3NlpxMlRHQVRtOFVBblRtcUQ5N2k4cXpyWGNKRnlFbHMmc2lkPWQ0ZjJkMzc3IyVGMCU5RiU4NyVBRiVGMCU5RiU4NyVCNUFXUyVFNiU5NyVBNSVFNiU5QyVBQyVFNCVCOCU5QyVFNCVCQSVBQzAzJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGJUU2JThFJUE4JUU4JThEJTkwDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTkyLjkuMTMwLjEyMDozNTAwMC8/aW5zZWN1cmU9MSZzbmk9d3d3LmFwcGxlLmNvbSZtcG9ydD0zNTAwMC0zOTAwMCMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTUlOUMlQTMlRTQlQkQlOTUlRTUlQTElOUUwLjElRTUlODAlOEQtJUU1JThGJUFGJUU5JTk1JUJGJUU2JTlDJTlGJUU0JUI4JThCJUU4JUJEJUJEDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdANjQuMTgxLjIzOC4zMjozNTAwMC8/aW5zZWN1cmU9MSZzbmk9dHYuYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU5QyVBMyVFNCVCRCU5NSVFNSVBMSU5RTAxLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE5Mi45LjE1Ny45ODozNTAwMC8/aW5zZWN1cmU9MSZzbmk9dHYuYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU5QyVBMyVFNCVCRCU5NSVFNSVBMSU5RTAyLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDY0LjE4MS4yNDMuMTc3OjM1MDAwLz9pbnNlY3VyZT0xJnNuaT10di5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUJBJUYwJTlGJTg3JUI4JUU3JUJFJThFJUU1JTlCJUJEJUU1JTlDJUEzJUU0JUJEJTk1JUU1JUExJTlFMDMtaHkyDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTQ2LjIzNS4yMDEuMTg5OjM1MDAwLz9pbnNlY3VyZT0xJnNuaT10di5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUJBJUYwJTlGJTg3JUI4JUU3JUJFJThFJUU1JTlCJUJEJUU1JTlDJUEzJUU0JUJEJTk1JUU1JUExJTlFMDQtaHkyDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTQ2LjIzNS4yMTIuMTkyOjM1MDAwLz9pbnNlY3VyZT0xJnNuaT10di5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUJBJUYwJTlGJTg3JUI4JUU3JUJFJThFJUU1JTlCJUJEJUU1JTlDJUEzJUU0JUJEJTk1JUU1JUExJTlFMDUtaHkyDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTM4LjIuMjI5LjE2MjozNTAwMC8/aW5zZWN1cmU9MSZzbmk9dHYuYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU5QyVBMyVFNCVCRCU5NSVFNSVBMSU5RTA2LWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE2Ny4yMzQuMjA4LjI0MDozNTAwMC8/aW5zZWN1cmU9MSZzbmk9dHYuYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU5QyVBMyVFNCVCRCU5NSVFNSVBMSU5RTA3LWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE5Mi4xOC4xMzMuMTkwOjM1MDAwLz9pbnNlY3VyZT0xJnNuaT10di5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUJBJUYwJTlGJTg3JUI4JUU3JUJFJThFJUU1JTlCJUJEJUU1JTlDJUEzJUU0JUJEJTk1JUU1JUExJTlFMDgtaHkyDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTY3LjIzNC4yMTAuMTIyOjM1MDAwLz9pbnNlY3VyZT0xJnNuaT13d3cuYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU5QyVBMyVFNCVCRCU5NSVFNSVBMSU5RTA5LWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE0Ni4yMzUuMjAzLjM0OjM1MDAwLz9pbnNlY3VyZT0xJnNuaT13d3cuYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU5QyVBMyVFNCVCRCU5NSVFNSVBMSU5RTEwLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE5My4xMjMuNzYuODQ6MzUwMDAvP2luc2VjdXJlPTEmc25pPXd3dy5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUE2JUYwJTlGJTg3JUFBJUU4JUJGJUFBJUU2JThCJTlDMiUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRi1oeTINCmh5c3RlcmlhMjovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxOTMuMTIyLjk4LjEwNzozNTAwMC8/aW5zZWN1cmU9MSZzbmk9YXBpLnB1c2guYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCMCVGMCU5RiU4NyVCNyVFOSU5RiVBOSVFNSU5QiVCRC0xJUU1JTgwJThEJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE0Ni41Ni4xNjQuMzY6MzUwMDAvP2luc2VjdXJlPTEmc25pPWFwaS5wdXNoLmFwcGxlLmNvbSZtcG9ydD0zNTAwMC0zOTAwMCMlRjAlOUYlODclQjAlRjAlOUYlODclQjclRTklOUYlQTklRTUlOUIlQkQzLTElRTUlODAlOEQlMjAlN0MlMjAlRTklQUIlOTglRTklODAlOUYlRTQlQjglOTMlRTclQkElQkYtaHkyDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTkzLjEyMy4yNDYuMjQ0OjM1MDAwLz9pbnNlY3VyZT0xJnNuaT1hcGkucHVzaC5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUIwJUYwJTlGJTg3JUI3JUU5JTlGJUE5JUU1JTlCJUJENC0xJUU1JTgwJThEJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE5My4xMjMuMjQ5LjA6MzUwMDAvP2luc2VjdXJlPTEmc25pPWFwaS5wdXNoLmFwcGxlLmNvbSZtcG9ydD0zNTAwMC0zOTAwMCMlRjAlOUYlODclQjAlRjAlOUYlODclQjclRTklOUYlQTklRTUlOUIlQkQ1LTElRTUlODAlOEQlMjAlN0MlMjAlRTklQUIlOTglRTklODAlOUYlRTQlQjglOTMlRTclQkElQkYtaHkyDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTkzLjEyMy4yNDAuMTE5OjM1MDAwLz9pbnNlY3VyZT0xJnNuaT13d3cuYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCMCVGMCU5RiU4NyVCNyVFOSU5RiVBOSVFNSU5QiVCRDYtMiVFNSU4MCU4RCUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRi1oeTINCmh5c3RlcmlhMjovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxOTMuMTIzLjI1MC4yMTk6MzUwMDAvP2luc2VjdXJlPTEmc25pPXd3dy5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUIwJUYwJTlGJTg3JUI3JUU5JTlGJUE5JUU1JTlCJUJENy0yJUU1JTgwJThEJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE5My4xMjMuMjMxLjE0ODozNTAwMC8/aW5zZWN1cmU9MSZzbmk9d3d3LmFwcGxlLmNvbSZtcG9ydD0zNTAwMC0zOTAwMCMlRjAlOUYlODclQjAlRjAlOUYlODclQjclRTklOUYlQTklRTUlOUIlQkQ4LTIlRTUlODAlOEQlMjAlN0MlMjAlRTklQUIlOTglRTklODAlOUYlRTQlQjglOTMlRTclQkElQkYtaHkyDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTUyLjY5LjIyNS4xOTY6MzUwMDAvP2luc2VjdXJlPTEmc25pPXd3dy5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUIwJUYwJTlGJTg3JUI3JUU5JTlGJUE5JUU1JTlCJUJEOS0yJUU1JTgwJThEJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE0Ni41Ni4xMDAuMTAzOjM1MDAwLz9pbnNlY3VyZT0xJnNuaT13d3cuYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCMCVGMCU5RiU4NyVCNyVFOSU5RiVBOSVFNSU5QiVCRDEwLTIlRTUlODAlOEQlMjAlN0MlMjAlRTklQUIlOTglRTklODAlOUYlRTQlQjglOTMlRTclQkElQkYtaHkyDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTMyLjE0NS4yMzkuMjUwOjM1MDAwLz9pbnNlY3VyZT0xJnNuaT1hcGkucHVzaC5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUE5JUYwJTlGJTg3JUFBJUU1JUJFJUI3JUU1JTlCJUJEJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE0MS4xNDcuMTkuNTg6MzUwMDAvP2luc2VjdXJlPTEmc25pPWFwaS5wdXNoLmFwcGxlLmNvbSZtcG9ydD0zNTAwMC0zOTAwMCMlRjAlOUYlODclQTklRjAlOUYlODclQUElRTUlQkUlQjclRTUlOUIlQkQyJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE1Mi42Ny45NS4xODM6MzUwMDAvP2luc2VjdXJlPTEmc25pPXd3dy5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUE4JUYwJTlGJTg3JUFEJUU3JTkxJTlFJUU1JUEzJUFCJUU4JThCJThGJUU5JUJCJThFJUU0JUI4JTk2JTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE1Mi42OS4xODAuMjI2OjM1MDAwLz9pbnNlY3VyZT0xJnNuaT1hcGkucHVzaC5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUE2JUYwJTlGJTg3JUJBJUU2JUJFJUIzJUU1JUE0JUE3JUU1JTg4JUE5JUU0JUJBJTlBJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE1OC4xNzkuMTguMjUxOjM1MDAwLz9pbnNlY3VyZT0xJnNuaT1hcGkucHVzaC5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUE2JUYwJTlGJTg3JUJBJUU2JUJFJUIzJUU1JUE0JUE3JUU1JTg4JUE5JUU0JUJBJTlBMiUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRi1oeTINCmh5c3RlcmlhMjovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxNTkuMTMuMzUuMjQ1OjM1MDAwLz9pbnNlY3VyZT0xJnNuaT1hcGkucHVzaC5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUE2JUYwJTlGJTg3JUJBJUU2JUJFJUIzJUU1JUE0JUE3JUU1JTg4JUE5JUU0JUJBJTlBMyUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRi1oeTINCmh5c3RlcmlhMjovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxNTIuNjkuMjIwLjIxMjozNTAwMC8/aW5zZWN1cmU9MSZzbmk9YXBpLnB1c2guYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCOCVGMCU5RiU4NyVBQyVFNiU5NiVCMCVFNSU4QSVBMCVFNSU5RCVBMSUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRi1oeTINCmh5c3RlcmlhMjovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxNTguMTc4LjIzNi4xMDQ6MzUwMDAvP2luc2VjdXJlPTEmc25pPWFwaS5wdXNoLmFwcGxlLmNvbSZtcG9ydD0zNTAwMC0zOTAwMCMlRjAlOUYlODclQjglRjAlOUYlODclQUMlRTYlOTYlQjAlRTUlOEElQTAlRTUlOUQlQTEyJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE0MC4yNDUuMzUuNzg6MzUwMDAvP2luc2VjdXJlPTEmc25pPXd3dy5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUI4JUYwJTlGJTg3JUFDJUU2JTk2JUIwJUU1JThBJUEwJUU1JTlEJUExMyUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRi1oeTINCmh5c3RlcmlhMjovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxNDAuMjQ1LjM3LjE3MDozNTAwMC8/aW5zZWN1cmU9MSZzbmk9d3d3LmFwcGxlLmNvbSZtcG9ydD0zNTAwMC0zOTAwMCMlRjAlOUYlODclQjglRjAlOUYlODclQUMlRTYlOTYlQjAlRTUlOEElQTAlRTUlOUQlQTE0JTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE0MC4yNDUuNDYuMTc6MzUwMDAvP2luc2VjdXJlPTEmc25pPXd3dy5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUI4JUYwJTlGJTg3JUFDJUU2JTk2JUIwJUU1JThBJUEwJUU1JTlEJUExNSUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRi1oeTINCmh5c3RlcmlhMjovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxNDAuMjQ1LjM2LjIwNzozNTAwMC8/aW5zZWN1cmU9MSZzbmk9d3d3LmFwcGxlLmNvbSZtcG9ydD0zNTAwMC0zOTAwMCMlRjAlOUYlODclQjglRjAlOUYlODclQUMlRTYlOTYlQjAlRTUlOEElQTAlRTUlOUQlQTE2JTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDEyOS4xNDYuOTUuMTY1OjM1MDAwLz9pbnNlY3VyZT0xJnNuaT13d3cuYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU4NyVBNCVFNSU4NyVCMCVFNSU5RiU4RSUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRi1oeTINCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDEwNC4xOC4yMC4yMDo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD11czIuZ2xvYmFscy1kb3dubG9hZC5jb20mcGF0aD0lMkZwcSUyRnVzMiZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmcD1jaHJvbWUmc25pPXVzMi5nbG9iYWxzLWRvd25sb2FkLmNvbSMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTklOTglQkYlRTQlQkIlODAlRTYlOUMlQUMwMi0wLjElRTUlODAlOEQNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDEwNC4xOC4yMC4yMDo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD11czMuZ2xvYmFscy1kb3dubG9hZC5jb20mcGF0aD0lMkZwcSUyRnVzMyZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmcD1jaHJvbWUmc25pPXVzMy5nbG9iYWxzLWRvd25sb2FkLmNvbSMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTklOTglQkYlRTQlQkIlODAlRTYlOUMlQUMwMy0wLjElRTUlODAlOEQNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDEwNC4xOC4yMC4yMDo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD11czQuZ2xvYmFscy1kb3dubG9hZC5jb20mcGF0aD0lMkZwcSUyRnVzNCZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmcD1jaHJvbWUmc25pPXVzNC5nbG9iYWxzLWRvd25sb2FkLmNvbSMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTklOTglQkYlRTQlQkIlODAlRTYlOUMlQUMwNC0wLjElRTUlODAlOEQNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDEwNC4xOC4yMC4yMDo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD11czUuZ2xvYmFscy1kb3dubG9hZC5jb20mcGF0aD0lMkZwcSUyRnVzNSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmcD1jaHJvbWUmc25pPXVzNS5nbG9iYWxzLWRvd25sb2FkLmNvbSMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTklOTglQkYlRTQlQkIlODAlRTYlOUMlQUMwNS0wLjElRTUlODAlOEQNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDEwNC4xOC4yMC4yMDo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD11czYuZ2xvYmFscy1kb3dubG9hZC5jb20mcGF0aD0lMkZwcSUyRnVzNiZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmcD1jaHJvbWUmc25pPXVzNi5nbG9iYWxzLWRvd25sb2FkLmNvbSMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTklOTglQkYlRTQlQkIlODAlRTYlOUMlQUMwNi0wLjElRTUlODAlOEQNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDEwNC4xOC4yMC4yMDo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD11czcuZ2xvYmFscy1kb3dubG9hZC5jb20mcGF0aD0lMkZwcSUyRnVzNyZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmcD1jaHJvbWUmc25pPXVzNy5nbG9iYWxzLWRvd25sb2FkLmNvbSMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTklOTglQkYlRTQlQkIlODAlRTYlOUMlQUMwNy0wLjElRTUlODAlOEQNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE5My4xMjMuMjI2LjU6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXJlYWxpdHkmZmxvdz14dGxzLXJwcngtdmlzaW9uJmZwPWVkZ2Umc25pPWJ1eWxpdGUubXVzaWMuYXBwbGUuY29tJnBiaz04blQ1eDVPTS05N2liV01mdTV5MG1ydldkbXV3VmVnX2ZfUkU1WWNsX3l3JnNpZD1jNTgzNWIxZiMlRjAlOUYlODclQjAlRjAlOUYlODclQjclRTklOUYlQTklRTUlOUIlQkQlRTklQTYlOTYlRTUlQjAlOTQwMQ0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTkzLjEyMi4xMTQuMTU6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXJlYWxpdHkmZmxvdz14dGxzLXJwcngtdmlzaW9uJmZwPWlvcyZzbmk9YnV5bGl0ZS5tdXNpYy5hcHBsZS5jb20mcGJrPWF6WUZ6VHRUNGUyVXdwbUJ6WklDbGU4cUpPTGpOOGtjNWJxOGk4YVZTajAmc2lkPWMyODljNjVkIyVGMCU5RiU4NyVCMCVGMCU5RiU4NyVCNyVFOSU5RiVBOSVFNSU5QiVCRCVFOSVBNiU5NiVFNSVCMCU5NDAyDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxMzEuMTg2LjIyLjIzODo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9cmVhbGl0eSZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9Y2hyb21lJnNuaT1idXlsaXRlLm11c2ljLmFwcGxlLmNvbSZwYms9UC0tQXNldVY3c0d2Z3k3WUo4aVg1OEd4ZVA1LU0yb3EwTXEyWXhQQVhScyZzaWQ9ZjAwZDQwZjM4NDgyIyVGMCU5RiU4NyVCMCVGMCU5RiU4NyVCNyVFOSU5RiVBOSVFNSU5QiVCRCVFOSVBNiU5NiVFNSVCMCU5NDAzDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0BwcS5oa3QxLnl5ZGpjLnRvcDo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9dGxzJmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1pb3Mmc25pPWRvd25sb2FkLmdsb2JhbHMtZG93bmxvYWQuY29tIyVGMCU5RiU4NyVBRCVGMCU5RiU4NyVCMCVFOSVBNiU5OSVFNiVCOCVBRkhLVDElMjAlN0MlMjAlRTQlQjglODklRTclQkQlOTElRTYlOEUlQTglRTglOEQlOTANCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QHBxLmhrdDIueXlkamMudG9wOjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT10bHMmZmxvdz14dGxzLXJwcngtdmlzaW9uJmZwPWlvcyZzbmk9ZG93bmxvYWQuZ2xvYmFscy1kb3dubG9hZC5jb20jJUYwJTlGJTg3JUFEJUYwJTlGJTg3JUIwJUU5JUE2JTk5JUU2JUI4JUFGSEtUMiUyMCU3QyUyMCVFNCVCOCU4OSVFNyVCRCU5MSVFNiU4RSVBOCVFOCU4RCU5MA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAcHEuaGt0My55eWRqYy50b3A6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9aW9zJnNuaT1kb3dubG9hZC5nbG9iYWxzLWRvd25sb2FkLmNvbSMlRjAlOUYlODclQUQlRjAlOUYlODclQjAlRTklQTYlOTklRTYlQjglQUZIS1QzJTIwJTdDJTIwJUU0JUI4JTg5JUU3JUJEJTkxJUU2JThFJUE4JUU4JThEJTkwDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0BwcS5oa3Q0Lnl5ZGpjLnRvcDo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9dGxzJmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1pb3Mmc25pPWRvd25sb2FkLmdsb2JhbHMtZG93bmxvYWQuY29tIyVGMCU5RiU4NyVBRCVGMCU5RiU4NyVCMCVFOSVBNiU5OSVFNiVCOCVBRkhLVDQlMjAlN0MlMjAlRTQlQjglODklRTclQkQlOTElRTYlOEUlQTglRTglOEQlOTANCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QHBxLmhpbmV0LnR3MS55eWRqYy50b3A6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9Y2hyb21lJnNuaT1kb3dubG9hZC55eWRqYy50b3AjJUYwJTlGJTg3JUI5JUYwJTlGJTg3JUJDJUU1JThGJUIwJUU2JUI5JUJFJTIwJTdDJTIwJUU5JTgxJUJGJUU1JTg1JThEJUU2JTk5JTlBJUU5JUFCJTk4JUU1JUIzJUIwJUU0JUJEJUJGJUU3JTk0JUE4DQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0BwcS5oaW5ldC50dzIueXlkamMudG9wOjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT10bHMmZmxvdz14dGxzLXJwcngtdmlzaW9uJmZwPWNocm9tZSZzbmk9ZG93bmxvYWQueXlkamMudG9wIyVGMCU5RiU4NyVCOSVGMCU5RiU4NyVCQyVFNSU4RiVCMCVFNiVCOSVCRTIlMjAlN0MlMjAlRTklODElQkYlRTUlODUlOEQlRTYlOTklOUElRTklQUIlOTglRTUlQjMlQjAlRTQlQkQlQkYlRTclOTQlQTgNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QHBxLmhpbmV0LnR3My55eWRqYy50b3A6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9Y2hyb21lJnNuaT1kb3dubG9hZC55eWRqYy50b3AjJUYwJTlGJTg3JUI5JUYwJTlGJTg3JUJDJUU1JThGJUIwJUU2JUI5JUJFMyUyMCU3QyUyMCVFOSU4MSVCRiVFNSU4NSU4RCVFNiU5OSU5QSVFOSVBQiU5OCVFNSVCMyVCMCVFNCVCRCVCRiVFNyU5NCVBOA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTcyLjY3Ljc5LjEzNjo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD1qcDEueG4tLWdocXU1Zm0yN2I2N3cuY29tJnBhdGg9JTJGcHElMkZqcDEmaGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT10bHMmZnA9Y2hyb21lJnNuaT0jJUYwJTlGJTg3JUFGJUYwJTlGJTg3JUI1JUU2JTk3JUE1JUU2JTlDJUFDJUU5JUFCJTk4JUU5JTgwJTlGMDEtMC4xJUU1JTgwJThEDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AyMy4yMjcuMzguMDo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD1pbjFfcHFfdXNlcl92aXBfYXBpLnBxdmlwLnRvcCZwYXRoPSUyRnBxJTJGaW4xJmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9dGxzJmZwPWNocm9tZSZzbmk9IyVGMCU5RiU4NyVBRSVGMCU5RiU4NyVCMyVFNSU4RCVCMCVFNSVCQSVBNjAxLTAuMDElRTUlODAlOEQNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDIzLjIyNy4zOC4wOjQ0Mz90eXBlPXdzJmVuY3J5cHRpb249bm9uZSZob3N0PWluMl9wcV91c2VyX3ZpcF9hcGkucHF2aXAudG9wJnBhdGg9JTJGcHElMkZpbjImaGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT10bHMmZnA9Y2hyb21lJnNuaT0jJUYwJTlGJTg3JUFFJUYwJTlGJTg3JUIzJUU1JThEJUIwJUU1JUJBJUE2MDItMC4wMSVFNSU4MCU4RA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMjMuMjI3LjM4LjA6NDQzP3R5cGU9d3MmZW5jcnlwdGlvbj1ub25lJmhvc3Q9aW4zX3BxX3VzZXJfdmlwX2FwaS5wcXZpcC50b3AmcGF0aD0lMkZwcSUyRmluMyZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmcD1jaHJvbWUmc25pPSMlRjAlOUYlODclQUUlRjAlOUYlODclQjMlRTUlOEQlQjAlRTUlQkElQTYwMy0wLjAxJUU1JTgwJThEDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AyMy4yMjcuMzguMDo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD1pbjRfcHFfdXNlcl92aXBfYXBpLnBxdmlwLnRvcCZwYXRoPSUyRnBxJTJGaW40JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9dGxzJmZwPWNocm9tZSZzbmk9IyVGMCU5RiU4NyVBRSVGMCU5RiU4NyVCMyVFNSU4RCVCMCVFNSVCQSVBNjA0LTAuMDElRTUlODAlOEQNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDIzLjIyNy4zOC4wOjQ0Mz90eXBlPXdzJmVuY3J5cHRpb249bm9uZSZob3N0PXVzMV9wcV91c2VyX3ZpcF9hcGkucHF2aXAudG9wJnBhdGg9JTJGcHElMkZ1czEmaGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT10bHMmZnA9Y2hyb21lJnNuaT0jJUYwJTlGJTg3JUJBJUYwJTlGJTg3JUI4JUU3JUJFJThFJUU1JTlCJUJEJUU2JUI0JTlCJUU2JTlEJTg5JUU3JTlGJUI2MDEtMC4wMSVFNSU4MCU4RA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMjMuMjI3LjM4LjA6NDQzP3R5cGU9d3MmZW5jcnlwdGlvbj1ub25lJmhvc3Q9dXMyX3BxX3VzZXJfdmlwX2FwaS5wcXZpcC50b3AmcGF0aD0lMkZwcSUyRnVzMiZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmcD1jaHJvbWUmc25pPSMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTYlQjQlOUIlRTYlOUQlODklRTclOUYlQjYwMi0wLjAxJUU1JTgwJThEDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AyMy4yMjcuMzguMDo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD11czNfcHFfdXNlcl92aXBfYXBpLnBxdmlwLnRvcCZwYXRoPSUyRnBxJTJGdXMzJmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9dGxzJmZwPWNocm9tZSZzbmk9IyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNiVCNCU5QiVFNiU5RCU4OSVFNyU5RiVCNjAzLTAuMDElRTUlODAlOEQNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDIzLjIyNy4zOC4wOjQ0Mz90eXBlPXdzJmVuY3J5cHRpb249bm9uZSZob3N0PXVzNF9wcV91c2VyX3ZpcF9hcGkucHF2aXAudG9wJnBhdGg9JTJGcHElMkZ1czQmaGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT10bHMmZnA9Y2hyb21lJnNuaT0jJUYwJTlGJTg3JUJBJUYwJTlGJTg3JUI4JUU3JUJFJThFJUU1JTlCJUJEJUU2JUI0JTlCJUU2JTlEJTg5JUU3JTlGJUI2MDQtMC4wMSVFNSU4MCU4RA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMjMuMjI3LjM4LjA6NDQzP3R5cGU9d3MmZW5jcnlwdGlvbj1ub25lJmhvc3Q9dXM1X3BxX3VzZXJfdmlwX2FwaS5wcXZpcC50b3AmcGF0aD0lMkZwcSUyRnVzNSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmcD1pb3Mmc25pPSMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTYlQjQlOUIlRTYlOUQlODklRTclOUYlQjYwNS0wLjAxJUU1JTgwJThEDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxNDYuMjM1LjIwOC4xNjI6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9aW9zJnNuaT1kY3BxanMueXlkamMudG9wIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU5QyVBMyVFNCVCRCU5NSVFNSVBMSU5RTAxJTIwJTdDJTIwJUU0JUI4JTg5JUU3JUJEJTkxJUU2JThFJUE4JUU4JThEJTkwDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0A2NC4xODEuMjI1LjE1MDo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9dGxzJmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1pb3Mmc25pPWRjcHFqcy55eWRqYy50b3AjJUYwJTlGJTg3JUJBJUYwJTlGJTg3JUI4JUU3JUJFJThFJUU1JTlCJUJEJUU1JTlDJUEzJUU0JUJEJTk1JUU1JUExJTlFMDIlMjAlN0MlMjAlRTQlQjglODklRTclQkQlOTElRTYlOEUlQTglRTglOEQlOTANCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE5Mi45LjEyOS4yMDY6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9aW9zJnNuaT1kY3BxanMueXlkamMudG9wIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU5QyVBMyVFNCVCRCU5NSVFNSVBMSU5RTAzJTIwJTdDJTIwJUU0JUI4JTg5JUU3JUJEJTkxJUU2JThFJUE4JUU4JThEJTkwDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0A2NC4xODEuMjMzLjkwOjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT10bHMmZmxvdz14dGxzLXJwcngtdmlzaW9uJmZwPWlvcyZzbmk9ZGNwcWpzLnl5ZGpjLnRvcCMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTUlOUMlQTMlRTQlQkQlOTUlRTUlQTElOUUwNCUyMCU3QyUyMCVFNCVCOCU4OSVFNyVCRCU5MSVFNiU4RSVBOCVFOCU4RCU5MA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTQ2LjIzNS4yMjguMzQ6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9aW9zJnNuaT1kY3BxanMueXlkamMudG9wIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU5QyVBMyVFNCVCRCU5NSVFNSVBMSU5RTA1JTIwJTdDJTIwJUU0JUI4JTg5JUU3JUJEJTkxJUU2JThFJUE4JUU4JThEJTkwDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxNDAuMjQ1LjQzLjE5OTo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9cmVhbGl0eSZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9Y2hyb21lJnNuaT10di5hcHBsZS5jb20mcGJrPVdtejJxMnR3ZldZdTZGck81eFUxTTg3TE81S2preUdpZjBBdVBMTk1QVzAmc2lkPWE4NjEwMzk2NWFjOTEzZjIjJUYwJTlGJTg3JUI4JUYwJTlGJTg3JUFDJUU2JTk2JUIwJUU1JThBJUEwJUU1JTlEJUExDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxNDAuMjQ1LjU4LjU2OjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT1yZWFsaXR5JmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1jaHJvbWUmc25pPXR2LmFwcGxlLmNvbSZwYms9V216MnEydHdmV1l1NkZyTzV4VTFNODdMTzVLamt5R2lmMEF1UExOTVBXMCZzaWQ9YTg2MTAzOTY1YWM5MTNmMiMlRjAlOUYlODclQjglRjAlOUYlODclQUMlRTYlOTYlQjAlRTUlOEElQTAlRTUlOUQlQTEyDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AyMTMuMzUuMTA4LjIyOjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT1yZWFsaXR5JmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1jaHJvbWUmc25pPWJ1eWxpdGUubXVzaWMuYXBwbGUuY29tJnBiaz1JUG5vMXc5R1V4aFJOMkpZX3lJa2EyRE5sbnVKSFFlYjNfMHlPQ000cFFnJnNpZD0zYWU1NGRiNDgzM2MjJUYwJTlGJTg3JUI4JUYwJTlGJTg3JUFDJUU2JTk2JUIwJUU1JThBJUEwJUU1JTlEJUExMw0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTY4LjEzOC4xNjUuMTA5OjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT1yZWFsaXR5JmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1pb3Mmc25pPWJ1eWxpdGUubXVzaWMuYXBwbGUuY29tJnBiaz1rUi1fNUoyRVBpQjlucmRneVhqZ3pmSlFueFFvZGtHZVZfamdLT0VubEVNJnNpZD1mYzgxNDM3NGFiYmEjJUYwJTlGJTg3JUI4JUYwJTlGJTg3JUFDJUU2JTk2JUIwJUU1JThBJUEwJUU1JTlEJUExNA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTUyLjcwLjk5LjE4MDo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9cmVhbGl0eSZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9Y2hyb21lJnNuaT1idXlsaXRlLm11c2ljLmFwcGxlLmNvbSZwYms9SUhKN3c3bTEzUXNZUEZxOGVwcGRxeVR5ZUxtWHpUdE9HOUVHdV8tZXAyYyZzaWQ9NDk4MjQyODNhMjQxIyVGMCU5RiU4NyVBRiVGMCU5RiU4NyVCNSVFNiU5NyVBNSVFNiU5QyVBQyVFNCVCOCU5QyVFNCVCQSVBQw0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTMwLjE2Mi4xNjMuMjE2OjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT1yZWFsaXR5JmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1jaHJvbWUmc25pPWJ1eWxpdGUudHYuYXBwbGUuY29tJnBiaz1iNVd1V29kZDN0QjljSFdVSnVvRUZOdmdZVk9jTHVEeWpheEh5NzB1bVU0JnNpZD01MDIxMTg0MyMlRjAlOUYlODclQUMlRjAlOUYlODclQTclRTglOEIlQjElRTUlOUIlQkQlRTQlQkMlQTYlRTYlOTUlQTYNCg==
entrypoint.sh CHANGED
@@ -53,10 +53,24 @@ if [ -f ".env" ]; then
53
  export $(grep -v '^#' .env | xargs -d '\n')
54
  fi
55
 
56
- # 检查必要的环境变量
57
- if [ -z "$SUB_URL" ]; then
58
- echo "${RED}Error: SUB_URL environment variable is not set!${NC}"
59
- exit 1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  fi
61
 
62
  # 设置默认端口
@@ -74,7 +88,11 @@ echo "Environment:"
74
  echo "FLASK_PORT: ${FLASK_PORT:-7860}"
75
  echo "CLASH_PROXY_PORT: ${CLASH_PROXY_PORT:-7890}"
76
  echo "CLASH_API_PORT: ${CLASH_API_PORT:-9090}"
77
- echo "SUB_URL: [hidden]"
 
 
 
 
78
  echo "API_KEY: [hidden]"
79
 
80
  # 检查必要的环境变量
 
53
  export $(grep -v '^#' .env | xargs -d '\n')
54
  fi
55
 
56
+ # 检查是否使用本地配置文件
57
+ if [ "${USE_LOCAL_CONFIG}" = "true" ]; then
58
+ echo "${GREEN}Using local config.yaml file (skipping subscription)...${NC}"
59
+ # 检查配置文件是否存在
60
+ if [ -f "/app/data/config.yaml" ]; then
61
+ echo "${GREEN}Local config.yaml found${NC}"
62
+ else
63
+ echo "${RED}Error: Local config.yaml not found in /app/data/!${NC}"
64
+ echo "${YELLOW}Please mount your config.yaml to /app/data/config.yaml${NC}"
65
+ exit 1
66
+ fi
67
+ else
68
+ # 检查必要的环境变量
69
+ if [ -z "$SUB_URL" ]; then
70
+ echo "${RED}Error: SUB_URL environment variable is not set!${NC}"
71
+ echo "${YELLOW}Either set SUB_URL or use USE_LOCAL_CONFIG=true${NC}"
72
+ exit 1
73
+ fi
74
  fi
75
 
76
  # 设置默认端口
 
88
  echo "FLASK_PORT: ${FLASK_PORT:-7860}"
89
  echo "CLASH_PROXY_PORT: ${CLASH_PROXY_PORT:-7890}"
90
  echo "CLASH_API_PORT: ${CLASH_API_PORT:-9090}"
91
+ if [ "${USE_LOCAL_CONFIG}" = "true" ]; then
92
+ echo "Using local config: YES"
93
+ else
94
+ echo "SUB_URL: [hidden]"
95
+ fi
96
  echo "API_KEY: [hidden]"
97
 
98
  # 检查必要的环境变量