root 4 周之前
父節點
當前提交
3e5fdc139a

+ 1 - 1
booker_builtin.py

@@ -294,7 +294,7 @@ class BuiltinBookerGCO:
             instance.set_log(self.m_logger)
             instance.set_config(plg_cfg)
             instance.create_session()
-            
+            success = True
             with self.m_lock:
                 all_keys = [apt.routing_key for apt in self.m_cfg.appointment_types]
                 self.m_tasks.append(

+ 9 - 0
config/config.json

@@ -0,0 +1,9 @@
+{
+  "redis": {
+    "host": "text.skin",
+    "port": 6379,
+    "db": 0,
+    "password": "STEs2x6ML0U1HlpE9SojM6YU7QPhqzY8"
+  },
+  "group_list": []
+}

+ 1507 - 0
config/config_booker.json

@@ -0,0 +1,1507 @@
+{
+  "version": 202606011114,
+  "redis": {
+    "host": "text.skin",
+    "port": 6379,
+    "db": 0,
+    "password": "STEs2x6ML0U1HlpE9SojM6YU7QPhqzY8"
+  },
+  "group_list": [
+    {
+      "identifier": "vfs.ie.nl",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "built-in",
+        "account_pool_id": "ie.nl.booker",
+        "target_instances": 1,
+        "keep_alive": 120,
+        "account_cd": 10800,
+        "booking_cooldown": 300,
+        "max_bookings_per_account": 8
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.nl.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Netherlands"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/irl/en/nld/login",
+      "free_config": {
+        "mission_code": "nld",
+        "mission_name": "Netherlands",
+        "country_code": "irl",
+        "country_name": "Ireland",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.dub.nl.tourist": {
+            "center_name": "Netherlands Visa Application Center - Dublin",
+            "address": "Cunningham House, 130 Francis Street, Dublin 8  D08 H48R",
+            "vac_code": "NTDB",
+            "category_name": "All Short stay Categories",
+            "category_code": "TA",
+            "subcategory_name": "Tourist",
+            "subcategory_code": "To"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.sg.fr",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "built-in",
+        "account_pool_id": "sg.fr.booker",
+        "target_instances": 1,
+        "keep_alive": 120,
+        "account_cd": 10800,
+        "booking_cooldown": 10,
+        "max_bookings_per_account": 8
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.sin.fr.tourist",
+          "city": "Singapore",
+          "visa_type": "Tourist",
+          "country": "France"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/sgp/en/fra/login",
+      "free_config": {
+        "mission_code": "fra",
+        "mission_name": "France",
+        "country_code": "sgp",
+        "country_name": "Singapore",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.sin.fr.tourist": {
+            "center_name": "France Visa Application Center, Singapore",
+            "address": "79 Anson Road #15-01 Singapore 079906",
+            "vac_code": "FRSN",
+            "category_name": "Short Stay",
+            "category_code": "02",
+            "subcategory_name": "Short Stay Tourist, Family Visit",
+            "subcategory_code": "Six"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.au.fr",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "built-in",
+        "account_pool_id": "au.fr.booker",
+        "target_instances": 1,
+        "keep_alive": 120,
+        "account_cd": 10800,
+        "booking_cooldown": 10,
+        "max_bookings_per_account": 8
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.syd.fr.tourist",
+          "city": "Sydney",
+          "visa_type": "Tourist",
+          "country": "France"
+        },
+        {
+          "weight": 10,
+          "routing_key": "slot.mel.fr.tourist",
+          "city": "Melbourne",
+          "visa_type": "Tourist",
+          "country": "France"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/aus/en/fra/login",
+      "free_config": {
+        "mission_code": "fra",
+        "mission_name": "France",
+        "country_code": "aus",
+        "country_name": "Australia",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.syd.fr.tourist": {
+            "center_name": "France Visa Application Center - Sydney",
+            "address": "France Visa Application Center,Level 6, 88 Pitt Street,Sydney NSW 2000",
+            "vac_code": "SYD",
+            "category_name": "VISA",
+            "category_code": "VISA",
+            "subcategory_name": "Short Stay Schengen Visa",
+            "subcategory_code": "ShortStaySchengenVisa"
+          },
+          "slot.mel.fr.tourist": {
+            "center_name": "France Visa Application Center - Melbourne",
+            "address": "Level 5 332 St. Kilda road level 5 Melbourne 3004",
+            "vac_code": "MEL",
+            "category_name": "VISA",
+            "category_code": "VISA",
+            "subcategory_name": "Short Stay Schengen Visa",
+            "subcategory_code": "ShortStaySchengenVisa"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.gb.it",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "built-in",
+        "account_pool_id": "gb.it.booker",
+        "target_instances": 0,
+        "keep_alive": 120,
+        "account_cd": 10800,
+        "booking_cooldown": 10,
+        "max_bookings_per_account": 8
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 80,
+          "routing_key": "slot.lon.it.tourist",
+          "city": "London",
+          "visa_type": "Tourist",
+          "country": "Italy"
+        },
+        {
+          "weight": 20,
+          "routing_key": "slot.man.it.tourist",
+          "city": "Manchester",
+          "visa_type": "Tourist",
+          "country": "Italy"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/gbr/en/ita/login",
+      "free_config": {
+        "mission_code": "ita",
+        "mission_name": "Italy",
+        "country_code": "gbr",
+        "country_name": "United Kingdom",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.lon.it.tourist": {
+            "center_name": "Italy Visa Application Centre, London",
+            "address": "Ground floor, 8- 20  Pocock St London SE1 0BW , United Kingdom",
+            "vac_code": "ILON",
+            "category_name": "Italy UK VisaCategory",
+            "category_code": "UKITVED",
+            "subcategory_name": "Tourist/ Business/ EU Family",
+            "subcategory_code": "TBE"
+          },
+          "slot.man.it.tourist": {
+            "center_name": "Italy Visa Application Centre, Manchester",
+            "address": "50 Devonshire Street North, M12 6JH",
+            "vac_code": "IMAN",
+            "category_name": "Italy UK VisaCategory",
+            "category_code": "UKITVED",
+            "subcategory_name": "Tourist/ Business/ EU Family",
+            "subcategory_code": "TBE"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.gb.nl",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "built-in",
+        "account_pool_id": "gb.nl.booker",
+        "target_instances": 1,
+        "keep_alive": 120,
+        "account_cd": 10800,
+        "booking_cooldown": 10,
+        "max_bookings_per_account": 8
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 90,
+          "routing_key": "slot.lon.nl.tourist",
+          "city": "London",
+          "visa_type": "Tourist",
+          "country": "Netherlands"
+        },
+        {
+          "weight": 10,
+          "routing_key": "slot.man.nl.tourist",
+          "city": "Manchester",
+          "visa_type": "Tourist",
+          "country": "Netherlands"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/gbr/en/nld/login",
+      "free_config": {
+        "mission_code": "nld",
+        "mission_name": "Netherland",
+        "country_code": "gbr",
+        "country_name": "United Kingdom",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.lon.nl.tourist": {
+            "center_name": "Netherlands Visa application centre - London",
+            "address": "66 Wilson Street, EC2A 2BT",
+            "vac_code": "NAKN",
+            "category_name": "Schengen Visa",
+            "category_code": "Schengen Visa",
+            "subcategory_name": "Tourism",
+            "subcategory_code": "TA"
+          },
+          "slot.man.nl.tourist": {
+            "center_name": "Netherlands Visa application centre - Manchester",
+            "address": "50 Devonshire Street North, M12 6JH",
+            "vac_code": "NAKT",
+            "category_name": "Schengen Visa",
+            "category_code": "Schengen Visa",
+            "subcategory_name": "Tourism",
+            "subcategory_code": "TA"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.gb.no",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "built-in",
+        "account_pool_id": "gb.no.booker",
+        "target_instances": 1,
+        "keep_alive": 120,
+        "account_cd": 10800,
+        "booking_cooldown": 10,
+        "max_bookings_per_account": 8
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.lon.no.tourist",
+          "city": "London",
+          "visa_type": "Tourist",
+          "country": "Norway"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/gbr/en/nor/login",
+      "free_config": {
+        "mission_code": "nor",
+        "mission_name": "Norway",
+        "country_code": "gbr",
+        "country_name": "United Kingdom",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.lon.no.tourist": {
+            "center_name": "Norway Visa Application Centre, London",
+            "address": "66 Wilson street, EC2A 2BT",
+            "vac_code": "NLON",
+            "category_name": "Schengen Visa C",
+            "category_code": "SCHVISA",
+            "subcategory_name": "Tourist Visa",
+            "subcategory_code": "TOU"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.ie.at",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "built-in",
+        "account_pool_id": "ie.at.booker",
+        "target_instances": 1,
+        "keep_alive": 120,
+        "account_cd": 10800,
+        "booking_cooldown": 300,
+        "max_bookings_per_account": 8
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.at.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Austria"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/irl/en/aut/login",
+      "free_config": {
+        "mission_code": "aut",
+        "mission_name": "Austria",
+        "country_code": "irl",
+        "country_name": "Ireland",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.dub.at.tourist": {
+            "center_name": "Austria / Switzerland / Liechtenstein/ Slovenia Visa Application Center, Dublin",
+            "address": "Cunningham House, 130 Francis Street, Dublin 8 D08 H48R",
+            "vac_code": "AUT-DUB",
+            "category_name": "Other Visas",
+            "category_code": "Default_Austria_Ireland ",
+            "subcategory_name": "All Visas ",
+            "subcategory_code": "TA"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.ie.dk",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "built-in",
+        "account_pool_id": "ie.dk.booker",
+        "target_instances": 1,
+        "keep_alive": 120,
+        "account_cd": 10800,
+        "booking_cooldown": 10,
+        "max_bookings_per_account": 8
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.dk.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Denmark"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/irl/en/dnk/login",
+      "free_config": {
+        "mission_code": "dnk",
+        "mission_name": "Denmark",
+        "country_code": "irl",
+        "country_name": "Ireland",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.dub.dk.tourist": {
+            "center_name": "Denmark Visa Application Center, Dublin ",
+            "address": "Cunningham House, 130 Francis Street, Dublin 8 D08 H48R",
+            "vac_code": "DIDUB",
+            "category_name": "Schengen Visa",
+            "category_code": "SV",
+            "subcategory_name": "Tourism",
+            "subcategory_code": "TV"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.ie.fi",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "built-in",
+        "account_pool_id": "ie.fi.booker",
+        "target_instances": 1,
+        "keep_alive": 120,
+        "account_cd": 10800,
+        "booking_cooldown": 10,
+        "max_bookings_per_account": 8
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.fi.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Finland"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/irl/en/fin/login",
+      "free_config": {
+        "mission_code": "fin",
+        "mission_name": "Finland",
+        "country_code": "irl",
+        "country_name": "Ireland",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.dub.fi.tourist": {
+            "center_name": "Application Centre, Dublin",
+            "address": "Cunningham House, 130 Francis Street, Dublin 8 D08 H48R",
+            "vac_code": "Dubb",
+            "category_name": "VISA",
+            "category_code": "S S",
+            "subcategory_name": "Tourist Category",
+            "subcategory_code": "Tourist Category"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.ie.hu",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "built-in",
+        "account_pool_id": "ie.hu.booker",
+        "target_instances": 1,
+        "keep_alive": 120,
+        "account_cd": 10800,
+        "booking_cooldown": 180,
+        "max_bookings_per_account": 8
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.hu.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Hungary"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/irl/en/hun/login",
+      "free_config": {
+        "mission_code": "hun",
+        "mission_name": "Hungary",
+        "country_code": "irl",
+        "country_name": "Ireland",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.dub.hu.tourist": {
+            "center_name": "Ireland Visa Application Center,Dublin",
+            "address": "Cunningham House, 130 Francis Street Dublin",
+            "vac_code": "DUB",
+            "category_name": "Short Stay",
+            "category_code": "SS",
+            "subcategory_name": "Schengen Visa",
+            "subcategory_code": "Schengen Visa"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.ie.is",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "built-in",
+        "account_pool_id": "ie.is.booker",
+        "target_instances": 0,
+        "keep_alive": 120,
+        "account_cd": 10800,
+        "booking_cooldown": 10,
+        "max_bookings_per_account": 8
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.is.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Iceland"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/irl/en/isl/login",
+      "free_config": {
+        "mission_code": "isl",
+        "mission_name": "Iceland",
+        "country_code": "irl",
+        "country_name": "Ireland",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.dub.is.tourist": {
+            "center_name": "Iceland Visa Application Center- Dublin",
+            "address": "Cunningham House, 130 Francis Street, Dublin, Ireland- DO8 H48R",
+            "vac_code": "DUB",
+            "category_name": "C-Visa",
+            "category_code": "CVI",
+            "subcategory_name": "Tourism",
+            "subcategory_code": "OTT"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.gb.at",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "built-in",
+        "account_pool_id": "gb.at.booker",
+        "target_instances": 1,
+        "keep_alive": 120,
+        "account_cd": 10800,
+        "booking_cooldown": 10,
+        "max_bookings_per_account": 8
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.lon.at.tourist",
+          "city": "London",
+          "visa_type": "Tourist",
+          "country": "Austria"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/gbr/en/aut/login",
+      "free_config": {
+        "mission_code": "aut",
+        "mission_name": "Austria",
+        "country_code": "gbr",
+        "country_name": "United Kingdom",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.lon.at.tourist": {
+            "center_name": "Austria Visa Application Centre, London",
+            "address": "66 Wilson Street, EC2A 2BT",
+            "vac_code": "ADN",
+            "category_name": "Visa  to  Austria",
+            "category_code": "Visa  to  Austria",
+            "subcategory_name": "Tourism",
+            "subcategory_code": "TA"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "bls.ie.es",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "spain-isp"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 3600,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "order",
+        "target_instances": 0,
+        "keep_alive": 120,
+        "account_cd": 10800,
+        "booking_cooldown": 10,
+        "max_bookings_per_account": 1
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "bls_plugin",
+        "plugin_bin": "bls_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.es.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Spain"
+        }
+      ],
+      "website": "https://ireland.blsspainglobal.com/Global/bls/visatypeverification",
+      "free_config": {
+        "domain": "ireland.blsspainglobal.com",
+        "ocr_model": "data/ctc.pth",
+        "apt_configs": {
+          "slot.dub.es.tourist": {
+            "location": "Dublin",
+            "jurisdiction": null,
+            "visa_type": "Schengen Visa/ Short Term Visa",
+            "visa_subtype": "Tourist Visa",
+            "appointment_type": "Individual",
+            "appointment_category": "Normal",
+            "mission_code": "EMBASSY_DUBLIN"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "bls.gb.es",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "spain-isp"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 3600,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "order",
+        "target_instances": 0,
+        "keep_alive": 120,
+        "account_cd": 10800,
+        "booking_cooldown": 10,
+        "max_bookings_per_account": 1
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "bls_plugin",
+        "plugin_bin": "bls_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.lon.es.tourist",
+          "city": "London",
+          "visa_type": "Tourist",
+          "country": "Spain"
+        }
+      ],
+      "website": "https://uk.blsspainglobal.com/Global/bls/visatypeverification",
+      "free_config": {
+        "domain": "uk.blsspainglobal.com",
+        "ocr_model": "data/ocr.pth",
+        "apt_configs": {
+          "slot.lon.es.tourist": {
+            "location": "Dublin",
+            "jurisdiction": "Greater London",
+            "visa_type": "Short Term Visa(Maximum stay of 90 days)",
+            "visa_subtype": "Tourist Visa",
+            "appointment_type": "Individual",
+            "appointment_category": "Normal",
+            "mission_code": "LHR"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "tls.gb.fr",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 900,
+      "session_max_life": 1800,
+      "active_time_start": "07:00",
+      "active_time_end": "17:30",
+      "booker": {
+        "account_source": "order",
+        "target_instances": 1,
+        "keep_alive": 60,
+        "account_cd": 1800,
+        "booking_cooldown": 3,
+        "max_bookings_per_account": 1
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "tls_plugin",
+        "plugin_bin": "tls_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.lon.fr.tourist",
+          "city": "London",
+          "visa_type": "Tourist",
+          "country": "France"
+        }
+      ],
+      "website": "https://visas-fr.tlscontact.com/en-us/country/gb/vac/gbLON2fr",
+      "free_config": {
+        "tls_url": "https://visas-fr.tlscontact.com/en-us/country/gb/vac/gbLON2fr",
+        "location": "London",
+        "capsolver_key": "CAP-5441DD341DD3CC2FAEF0BE6FE493EE9A",
+        "login_captcha": {
+          "solve_advance": true,
+          "site_key": "6LcDpXcfAAAAAM7wOEsF_38DNsL20tTvPTKxpyn0",
+          "page_url": "https://i2-auth.visas-fr.tlscontact.com",
+          "task": "ReCaptchaV2TaskProxyLess"
+        }
+      }
+    },
+    {
+      "identifier": "tls.cn.hgh.fr",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 900,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "15:30",
+      "booker": {
+        "account_source": "order",
+        "target_instances": 1,
+        "keep_alive": 60,
+        "account_cd": 1800,
+        "booking_cooldown": 3,
+        "max_bookings_per_account": 1
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "tls_plugin",
+        "plugin_bin": "tls_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.hgh.fr.tourist",
+          "city": "Hangzhou",
+          "visa_type": "Tourist",
+          "country": "France"
+        }
+      ],
+      "website": "https://visas-fr.tlscontact.com/en-us/country/cn/vac/cnHGH2fr",
+      "free_config": {
+        "tls_url": "https://visas-fr.tlscontact.com/en-us/country/cn/vac/cnHGH2fr",
+        "location": "Hangzhou",
+        "capsolver_key": "CAP-5441DD341DD3CC2FAEF0BE6FE493EE9A",
+        "login_captcha": {
+          "solve_advance": false,
+          "site_key": "6LcDpXcfAAAAAM7wOEsF_38DNsL20tTvPTKxpyn0",
+          "page_url": "https://i2-auth.visas-fr.tlscontact.com",
+          "task": "ReCaptchaV2TaskProxyLess"
+        }
+      }
+    },
+    {
+      "identifier": "tls.cn.can.fr",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 900,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "15:30",
+      "booker": {
+        "account_source": "order",
+        "target_instances": 1,
+        "keep_alive": 60,
+        "account_cd": 1800,
+        "booking_cooldown": 3,
+        "max_bookings_per_account": 1
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "tls_plugin",
+        "plugin_bin": "tls_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.can.fr.tourist",
+          "city": "Guangzhou",
+          "visa_type": "Tourist",
+          "country": "France"
+        }
+      ],
+      "website": "https://visas-fr.tlscontact.com/en-us/country/cn/vac/cnHCAN2fr",
+      "free_config": {
+        "tls_url": "https://visas-fr.tlscontact.com/en-us/country/cn/vac/cnHCAN2fr",
+        "location": "Guangzhou",
+        "capsolver_key": "CAP-5441DD341DD3CC2FAEF0BE6FE493EE9A",
+        "login_captcha": {
+          "solve_advance": false,
+          "site_key": "6LcDpXcfAAAAAM7wOEsF_38DNsL20tTvPTKxpyn0",
+          "page_url": "https://i2-auth.visas-fr.tlscontact.com",
+          "task": "ReCaptchaV2TaskProxyLess"
+        }
+      }
+    },
+    {
+      "identifier": "tls.cn.bjs.fr",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 900,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "15:30",
+      "booker": {
+        "account_source": "order",
+        "target_instances": 1,
+        "keep_alive": 60,
+        "account_cd": 1800,
+        "booking_cooldown": 3,
+        "max_bookings_per_account": 1
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "tls_plugin",
+        "plugin_bin": "tls_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.bjs.fr.tourist",
+          "city": "Beijing",
+          "visa_type": "Tourist",
+          "country": "France"
+        }
+      ],
+      "website": "https://visas-fr.tlscontact.com/en-us/country/cn/vac/cnBJS2fr",
+      "free_config": {
+        "tls_url": "https://visas-fr.tlscontact.com/en-us/country/cn/vac/cnBJS2fr",
+        "location": "Beijing",
+        "capsolver_key": "CAP-5441DD341DD3CC2FAEF0BE6FE493EE9A",
+        "login_captcha": {
+          "solve_advance": false,
+          "site_key": "6LcDpXcfAAAAAM7wOEsF_38DNsL20tTvPTKxpyn0",
+          "page_url": "https://i2-auth.visas-fr.tlscontact.com",
+          "task": "ReCaptchaV2TaskProxyLess"
+        }
+      }
+    },
+    {
+      "identifier": "tls.cn.sha.fr",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 900,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "15:30",
+      "booker": {
+        "account_source": "order",
+        "target_instances": 1,
+        "keep_alive": 60,
+        "account_cd": 1800,
+        "booking_cooldown": 3,
+        "max_bookings_per_account": 1
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "tls_plugin",
+        "plugin_bin": "tls_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.sha.fr.tourist",
+          "city": "Shanghai",
+          "visa_type": "Tourist",
+          "country": "France"
+        }
+      ],
+      "website": "https://visas-fr.tlscontact.com/en-us/country/cn/vac/cnSHA2fr",
+      "free_config": {
+        "tls_url": "https://visas-fr.tlscontact.com/en-us/country/cn/vac/cnSHA2fr",
+        "location": "Shanghai",
+        "capsolver_key": "CAP-5441DD341DD3CC2FAEF0BE6FE493EE9A",
+        "login_captcha": {
+          "solve_advance": false,
+          "site_key": "6LcDpXcfAAAAAM7wOEsF_38DNsL20tTvPTKxpyn0",
+          "page_url": "https://i2-auth.visas-fr.tlscontact.com",
+          "task": "ReCaptchaV2TaskProxyLess"
+        }
+      }
+    },
+    {
+      "identifier": "tls.ie.fr",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 900,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "order",
+        "target_instances": 1,
+        "keep_alive": 60,
+        "account_cd": 1800,
+        "booking_cooldown": 3,
+        "max_bookings_per_account": 1
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "tls_plugin",
+        "plugin_bin": "tls_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.fr.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "France"
+        }
+      ],
+      "website": "https://visas-fr.tlscontact.com/en-us/country/ie/vac/ieDUB2fr",
+      "free_config": {
+        "tls_url": "https://visas-fr.tlscontact.com/en-us/country/ie/vac/ieDUB2fr",
+        "location": "Dublin",
+        "capsolver_key": "CAP-5441DD341DD3CC2FAEF0BE6FE493EE9A",
+        "login_captcha": {
+          "solve_advance": false,
+          "site_key": "6LcDpXcfAAAAAM7wOEsF_38DNsL20tTvPTKxpyn0",
+          "page_url": "https://i2-auth.visas-fr.tlscontact.com",
+          "task": "ReCaptchaV2TaskProxyLess"
+        }
+      }
+    },
+    {
+      "identifier": "vfs.cn.at",
+      "debug": false,
+      "enable": true,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "built-in",
+        "account_pool_id": "cn.at.booker",
+        "target_instances": 1,
+        "keep_alive": 120,
+        "account_cd": 10800,
+        "booking_cooldown": 10,
+        "max_bookings_per_account": 8
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 1,
+          "routing_key": "slot.bjs.at.tourist",
+          "city": "Beijing",
+          "visa_type": "Tourist",
+          "country": "Austria"
+        },
+        {
+          "weight": 0,
+          "routing_key": "slot.can.at.tourist",
+          "city": "Guangzhou",
+          "visa_type": "Tourist",
+          "country": "Austria"
+        },
+        {
+          "weight": 0,
+          "routing_key": "slot.szx.at.tourist",
+          "city": "Shenzhen",
+          "visa_type": "Tourist",
+          "country": "Austria"
+        },
+        {
+          "weight": 1,
+          "routing_key": "slot.sha.at.tourist",
+          "city": "Shanghai",
+          "visa_type": "Tourist",
+          "country": "Austria"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/chn/en/aut/login",
+      "free_config": {
+        "mission_code": "aut",
+        "mission_name": "Austria",
+        "country_code": "chn",
+        "country_name": "China",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.bjs.at.tourist": {
+            "center_name": "Austria Visa Application Center, Beijing",
+            "address": "7/F, GAL Tower, No. 78, Pazhou Avenue, Haizhu District",
+            "vac_code": "Bei",
+            "category_name": "Visa Type C-Schengen",
+            "category_code": "VTC",
+            "subcategory_name": "Tourism (90 days)",
+            "subcategory_code": "TR"
+          },
+          "slot.can.at.tourist": {
+            "center_name": "Austria Visa Application Center, Guangzhou",
+            "address": "7/F, GAL Tower, No. 78, Pazhou Avenue, Haizhu District",
+            "vac_code": "Gua",
+            "category_name": "Visa Type C-Schengen",
+            "category_code": "VTC",
+            "subcategory_name": "Tourism (90 days)",
+            "subcategory_code": "TR"
+          },
+          "slot.sha.at.tourist": {
+            "center_name": "Austria Visa Application Center, Shanghai",
+            "address": "3F, Jiushi Commercial Building, No. 213, Middle Sichuan Road, Huangpu District",
+            "vac_code": "Shaa",
+            "category_name": "Visa Type C - Tourism Visa",
+            "category_code": "TT",
+            "subcategory_name": "Visa Type C - Tourism Visa",
+            "subcategory_code": "VTCT"
+          },
+          "slot.szx.at.tourist": {
+            "center_name": "Austria Visa Application Center, Shenzhen",
+            "address": "Unit 2303, Floor 23, East Tower, C Future City, No. 9285 Binhe Avenue, Futian District",
+            "vac_code": "ASSZA",
+            "category_name": "Visa Type C-Schengen",
+            "category_code": "VTC",
+            "subcategory_name": "Tourism (90 days)",
+            "subcategory_code": "TR"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "e-konsulat.ie.pl",
+      "debug": false,
+      "enable": false,
+      "need_account": false,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "",
+        "target_instances": 0,
+        "account_cd": 0,
+        "booking_cooldown": 10,
+        "max_bookings_per_account": 1
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "pol_plugin",
+        "plugin_bin": "pol_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.pl.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Poland"
+        }
+      ],
+      "website": "https://secure.e-konsulat.gov.pl/placowki/151/wiza-schengen/wizyty/weryfikacja-obrazkowa",
+      "free_config": {
+        "query_url": "https://secure.e-konsulat.gov.pl/placowki/151/wiza-schengen/wizyty/weryfikacja-obrazkowa",
+        "service_type": "Wiza Schengen",
+        "location": "Dublin"
+      }
+    },
+    {
+      "identifier": "e-konsulat.jp.pl",
+      "debug": false,
+      "enable": false,
+      "need_account": false,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "",
+        "target_instances": 0,
+        "account_cd": 0,
+        "booking_cooldown": 10,
+        "max_bookings_per_account": 1
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "pol_plugin",
+        "plugin_bin": "pol_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.tyo.pl.tourist",
+          "city": "Tokyo",
+          "visa_type": "Tourist",
+          "country": "Poland"
+        }
+      ],
+      "website": "https://secure.e-konsulat.gov.pl/placowki/178/wiza-krajowa/wizyty/weryfikacja-obrazkowa",
+      "free_config": {
+        "query_url": "https://secure.e-konsulat.gov.pl/placowki/178/wiza-krajowa/wizyty/weryfikacja-obrazkowa",
+        "service_type": "wiza krajowa",
+        "location": "Tokio"
+      }
+    },
+    {
+      "identifier": "visaonweb.ie.be",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "local"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 10800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "",
+        "target_instances": 0,
+        "account_cd": 0,
+        "booking_cooldown": 10,
+        "max_bookings_per_account": 1
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "bel_plugin",
+        "plugin_bin": "bel_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.be.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Belgium"
+        }
+      ],
+      "website": "https://visaonweb.diplomatie.be/en",
+      "free_config": {
+        "capsolver_key": "CAP-5441DD341DD3CC2FAEF0BE6FE493EE9A"
+      }
+    },
+    {
+      "identifier": "visametric.ie.de",
+      "debug": false,
+      "enable": false,
+      "need_account": false,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 900,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "",
+        "account_pool_id": "",
+        "target_instances": 1,
+        "account_cd": 0,
+        "booking_cooldown": 10,
+        "max_bookings_per_account": 1
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "de_plugin",
+        "plugin_bin": "de_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.de.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Germany"
+        }
+      ],
+      "website": "https://ie-appointment.visametric.com/en",
+      "free_config": {
+        "base_url": "https://ie-appointment.visametric.com",
+        "consularid": 1
+      }
+    },
+    {
+      "identifier": "pernotami.ie.it",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 900,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "order",
+        "target_instances": 1,
+        "keep_alive": 120,
+        "account_cd": 10800,
+        "booking_cooldown": 10,
+        "max_bookings_per_account": 1
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "ita_plugin",
+        "plugin_bin": "ita_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.it.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Italy"
+        }
+      ],
+      "website": "https://prenotami.esteri.it/Home",
+      "free_config": {
+        "capsolver_key": "03db1d1ff2f4a33e84ef1da99bd83336bed3710153525"
+      }
+    },
+    {
+      "identifier": "greekemba.ie.gr",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 86400,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "booker": {
+        "account_source": "order",
+        "target_instances": 10,
+        "keep_alive": 120,
+        "account_cd": 10800,
+        "booking_cooldown": 30,
+        "max_bookings_per_account": 1
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "grc_plugin",
+        "plugin_bin": "grc_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.gr.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Greece"
+        }
+      ],
+      "website": "https://www.supersaas.com/schedule/GreekEmbassyInDublin/Visas",
+      "free_config": {}
+    }
+  ]
+}

+ 1584 - 0
config/config_sentinel.json

@@ -0,0 +1,1584 @@
+{
+  "version": 202606011112,
+  "redis": {
+    "host": "text.skin",
+    "port": 6379,
+    "db": 0,
+    "password": "STEs2x6ML0U1HlpE9SojM6YU7QPhqzY8"
+  },
+  "group_list": [
+    {
+      "identifier": "vfs.ie.nl",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "ie.nl.sentinel",
+        "target_instances": 1,
+        "account_cd": 10800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.nl.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Netherlands"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/irl/en/nld/login",
+      "free_config": {
+        "mission_code": "nld",
+        "mission_name": "Netherlands",
+        "country_code": "irl",
+        "country_name": "Ireland",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.dub.nl.tourist": {
+            "center_name": "Netherlands Visa Application Center - Dublin",
+            "address": "Cunningham House, 130 Francis Street, Dublin 8  D08 H48R",
+            "vac_code": "NTDB",
+            "category_name": "All Short stay Categories",
+            "category_code": "TA",
+            "subcategory_name": "Tourist",
+            "subcategory_code": "To"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.sg.fr",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "sg.fr.sentinel",
+        "target_instances": 1,
+        "account_cd": 10800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.sin.fr.tourist",
+          "city": "Singapore",
+          "visa_type": "Tourist",
+          "country": "France"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/sgp/en/fra/login",
+      "free_config": {
+        "mission_code": "fra",
+        "mission_name": "France",
+        "country_code": "sgp",
+        "country_name": "Singapore",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.sin.fr.tourist": {
+            "center_name": "France Visa Application Center, Singapore",
+            "address": "79 Anson Road #15-01 Singapore 079906",
+            "vac_code": "FRSN",
+            "category_name": "Short Stay",
+            "category_code": "02",
+            "subcategory_name": "Short Stay Tourist, Family Visit",
+            "subcategory_code": "Six"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.au.fr",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "au.fr.sentinel",
+        "target_instances": 1,
+        "account_cd": 10800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.syd.fr.tourist",
+          "city": "Sydney",
+          "visa_type": "Tourist",
+          "country": "France"
+        },
+        {
+          "weight": 10,
+          "routing_key": "slot.mel.fr.tourist",
+          "city": "Melbourne",
+          "visa_type": "Tourist",
+          "country": "France"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/aus/en/fra/login",
+      "free_config": {
+        "mission_code": "fra",
+        "mission_name": "France",
+        "country_code": "aus",
+        "country_name": "Australia",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.syd.fr.tourist": {
+            "center_name": "France Visa Application Center - Sydney",
+            "address": "France Visa Application Center,Level 6, 88 Pitt Street,Sydney NSW 2000",
+            "vac_code": "SYD",
+            "category_name": "VISA",
+            "category_code": "VISA",
+            "subcategory_name": "Short Stay Schengen Visa",
+            "subcategory_code": "ShortStaySchengenVisa"
+          },
+          "slot.mel.fr.tourist": {
+            "center_name": "France Visa Application Center - Melbourne",
+            "address": "Level 5 332 St. Kilda road level 5 Melbourne 3004",
+            "vac_code": "MEL",
+            "category_name": "VISA",
+            "category_code": "VISA",
+            "subcategory_name": "Short Stay Schengen Visa",
+            "subcategory_code": "ShortStaySchengenVisa"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.gb.it",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "gb.it.sentinel",
+        "target_instances": 1,
+        "account_cd": 10800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 80,
+          "routing_key": "slot.lon.it.tourist",
+          "city": "London",
+          "visa_type": "Tourist",
+          "country": "Italy"
+        },
+        {
+          "weight": 20,
+          "routing_key": "slot.man.it.tourist",
+          "city": "Manchester",
+          "visa_type": "Tourist",
+          "country": "Italy"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/gbr/en/ita/login",
+      "free_config": {
+        "mission_code": "ita",
+        "mission_name": "Italy",
+        "country_code": "gbr",
+        "country_name": "United Kingdom",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.lon.it.tourist": {
+            "center_name": "Italy Visa Application Centre, London",
+            "address": "Ground floor, 8- 20  Pocock St London SE1 0BW , United Kingdom",
+            "vac_code": "ILON",
+            "category_name": "Italy UK VisaCategory",
+            "category_code": "UKITVED",
+            "subcategory_name": "Tourist/ Business/ EU Family",
+            "subcategory_code": "TBE"
+          },
+          "slot.man.it.tourist": {
+            "center_name": "Italy Visa Application Centre, Manchester",
+            "address": "50 Devonshire Street North, M12 6JH",
+            "vac_code": "IMAN",
+            "category_name": "Italy UK VisaCategory",
+            "category_code": "UKITVED",
+            "subcategory_name": "Tourist/ Business/ EU Family",
+            "subcategory_code": "TBE"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.gb.nl",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "gb.nl.sentinel",
+        "target_instances": 1,
+        "account_cd": 10800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 90,
+          "routing_key": "slot.lon.nl.tourist",
+          "city": "London",
+          "visa_type": "Tourist",
+          "country": "Netherlands"
+        },
+        {
+          "weight": 10,
+          "routing_key": "slot.man.nl.tourist",
+          "city": "Manchester",
+          "visa_type": "Tourist",
+          "country": "Netherlands"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/gbr/en/nld/login",
+      "free_config": {
+        "mission_code": "nld",
+        "mission_name": "Netherland",
+        "country_code": "gbr",
+        "country_name": "United Kingdom",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.lon.nl.tourist": {
+            "center_name": "Netherlands Visa application centre - London",
+            "address": "66 Wilson Street, EC2A 2BT",
+            "vac_code": "NAKN",
+            "category_name": "Schengen Visa",
+            "category_code": "Schengen Visa",
+            "subcategory_name": "Tourism",
+            "subcategory_code": "TA"
+          },
+          "slot.man.nl.tourist": {
+            "center_name": "Netherlands Visa application centre - Manchester",
+            "address": "50 Devonshire Street North, M12 6JH",
+            "vac_code": "NAKT",
+            "category_name": "Schengen Visa",
+            "category_code": "Schengen Visa",
+            "subcategory_name": "Tourism",
+            "subcategory_code": "TA"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.gb.no",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "gb.no.sentinel",
+        "target_instances": 1,
+        "account_cd": 10800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.lon.no.tourist",
+          "city": "London",
+          "visa_type": "Tourist",
+          "country": "Norway"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/gbr/en/nor/login",
+      "free_config": {
+        "mission_code": "nor",
+        "mission_name": "Norway",
+        "country_code": "gbr",
+        "country_name": "United Kingdom",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.lon.no.tourist": {
+            "center_name": "Norway Visa Application Centre, London",
+            "address": "66 Wilson street, EC2A 2BT",
+            "vac_code": "NLON",
+            "category_name": "Schengen Visa C",
+            "category_code": "SCHVISA",
+            "subcategory_name": "Tourist Visa",
+            "subcategory_code": "TOU"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.ie.at",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "ie.at.sentinel",
+        "target_instances": 1,
+        "account_cd": 10800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.at.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Austria"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/irl/en/aut/login",
+      "free_config": {
+        "mission_code": "aut",
+        "mission_name": "Austria",
+        "country_code": "irl",
+        "country_name": "Ireland",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.dub.at.tourist": {
+            "center_name": "Austria / Switzerland / Liechtenstein/ Slovenia Visa Application Center, Dublin",
+            "address": "Cunningham House, 130 Francis Street, Dublin 8 D08 H48R",
+            "vac_code": "AUT-DUB",
+            "category_name": "Other Visas",
+            "category_code": "Default_Austria_Ireland ",
+            "subcategory_name": "All Visas ",
+            "subcategory_code": "TA"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.ie.dk",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "ie.dk.sentinel",
+        "target_instances": 1,
+        "account_cd": 10800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.dk.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Denmark"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/irl/en/dnk/login",
+      "free_config": {
+        "mission_code": "dnk",
+        "mission_name": "Denmark",
+        "country_code": "irl",
+        "country_name": "Ireland",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.dub.dk.tourist": {
+            "center_name": "Denmark Visa Application Center, Dublin ",
+            "address": "Cunningham House, 130 Francis Street, Dublin 8 D08 H48R",
+            "vac_code": "DIDUB",
+            "category_name": "Schengen Visa",
+            "category_code": "SV",
+            "subcategory_name": "Tourism",
+            "subcategory_code": "TV"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.ie.fi",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "ie.fi.sentinel",
+        "target_instances": 1,
+        "account_cd": 10800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.fi.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Finland"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/irl/en/fin/login",
+      "free_config": {
+        "mission_code": "fin",
+        "mission_name": "Finland",
+        "country_code": "irl",
+        "country_name": "Ireland",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.dub.fi.tourist": {
+            "center_name": "Application Centre, Dublin",
+            "address": "Cunningham House, 130 Francis Street, Dublin 8 D08 H48R",
+            "vac_code": "Dubb",
+            "category_name": "VISA",
+            "category_code": "S S",
+            "subcategory_name": "Tourist Category",
+            "subcategory_code": "Tourist Category"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.ie.hu",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "ie.hu.sentinel",
+        "target_instances": 1,
+        "account_cd": 10800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.hu.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Hungary"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/irl/en/hun/login",
+      "free_config": {
+        "mission_code": "hun",
+        "mission_name": "Hungary",
+        "country_code": "irl",
+        "country_name": "Ireland",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.dub.hu.tourist": {
+            "center_name": "Ireland Visa Application Center,Dublin",
+            "address": "Cunningham House, 130 Francis Street Dublin",
+            "vac_code": "DUB",
+            "category_name": "Short Stay",
+            "category_code": "SS",
+            "subcategory_name": "Schengen Visa",
+            "subcategory_code": "Schengen Visa"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.ie.is",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "ie.is.sentinel",
+        "target_instances": 1,
+        "account_cd": 10800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.is.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Iceland"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/irl/en/isl/login",
+      "free_config": {
+        "mission_code": "isl",
+        "mission_name": "Iceland",
+        "country_code": "irl",
+        "country_name": "Ireland",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.dub.is.tourist": {
+            "center_name": "Iceland Visa Application Center- Dublin",
+            "address": "Cunningham House, 130 Francis Street, Dublin, Ireland- DO8 H48R",
+            "vac_code": "DUB",
+            "category_name": "C-Visa",
+            "category_code": "CVI",
+            "subcategory_name": "Tourism",
+            "subcategory_code": "OTT"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "vfs.gb.at",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "gb.at.sentinel",
+        "target_instances": 1,
+        "account_cd": 10800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.lon.at.tourist",
+          "city": "London",
+          "visa_type": "Tourist",
+          "country": "Austria"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/gbr/en/aut/login",
+      "free_config": {
+        "mission_code": "aut",
+        "mission_name": "Austria",
+        "country_code": "gbr",
+        "country_name": "United Kingdom",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.lon.at.tourist": {
+            "center_name": "Austria Visa Application Centre, London",
+            "address": "66 Wilson Street, EC2A 2BT",
+            "vac_code": "ADN",
+            "category_name": "Visa  to  Austria",
+            "category_code": "Visa  to  Austria",
+            "subcategory_name": "Tourism",
+            "subcategory_code": "TA"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "bls.ie.es",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "spain-isp"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 3600,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "ie.es.sentinel",
+        "target_instances": 1,
+        "account_cd": 10800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 180,
+          "random_max": 360
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "bls_plugin",
+        "plugin_bin": "bls_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.es.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Spain"
+        }
+      ],
+      "website": "https://ireland.blsspainglobal.com/Global/bls/visatypeverification",
+      "free_config": {
+        "domain": "ireland.blsspainglobal.com",
+        "ocr_model": "data/ctc.pth",
+        "apt_configs": {
+          "slot.dub.es.tourist": {
+            "location": "Dublin",
+            "jurisdiction": null,
+            "visa_type": "Schengen Visa/ Short Term Visa",
+            "visa_subtype": "Tourist Visa",
+            "appointment_type": "Individual",
+            "appointment_category": "Normal",
+            "mission_code": "EMBASSY_DUBLIN"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "bls.gb.es",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "spain-isp"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 3600,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "gb.es.sentinel",
+        "target_instances": 1,
+        "account_cd": 10800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "bls_plugin",
+        "plugin_bin": "bls_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.lon.es.tourist",
+          "city": "London",
+          "visa_type": "Tourist",
+          "country": "Spain"
+        }
+      ],
+      "website": "https://uk.blsspainglobal.com/Global/bls/visatypeverification",
+      "free_config": {
+        "domain": "uk.blsspainglobal.com",
+        "ocr_model": "data/ocr.pth",
+        "apt_configs": {
+          "slot.lon.es.tourist": {
+            "location": "Dublin",
+            "jurisdiction": "Greater London",
+            "visa_type": "Short Term Visa(Maximum stay of 90 days)",
+            "visa_subtype": "Tourist Visa",
+            "appointment_type": "Individual",
+            "appointment_category": "Normal",
+            "mission_code": "LHR"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "tls.gb.fr",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 900,
+      "session_max_life": 1800,
+      "active_time_start": "07:00",
+      "active_time_end": "17:30",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "tls.gb.lon.fr.sentinel",
+        "target_instances": 3,
+        "account_cd": 1800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 55,
+          "random_max": 65
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "tls_plugin",
+        "plugin_bin": "tls_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.lon.fr.tourist",
+          "city": "London",
+          "visa_type": "Tourist",
+          "country": "France"
+        }
+      ],
+      "website": "https://visas-fr.tlscontact.com/en-us/country/gb/vac/gbLON2fr",
+      "free_config": {
+        "tls_url": "https://visas-fr.tlscontact.com/en-us/country/gb/vac/gbLON2fr",
+        "location": "London",
+        "capsolver_key": "CAP-5441DD341DD3CC2FAEF0BE6FE493EE9A",
+        "login_captcha": {
+          "solve_advance": false,
+          "site_key": "6LcDpXcfAAAAAM7wOEsF_38DNsL20tTvPTKxpyn0",
+          "page_url": "https://i2-auth.visas-fr.tlscontact.com",
+          "task": "ReCaptchaV2TaskProxyLess"
+        }
+      }
+    },
+    {
+      "identifier": "tls.cn.bjs.fr",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 900,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "15:00",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "tls.cn.bjs.fr.sentinel",
+        "target_instances": 2,
+        "account_cd": 1800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 55,
+          "random_max": 65
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "tls_plugin",
+        "plugin_bin": "tls_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.bjs.fr.tourist",
+          "city": "Beijing",
+          "visa_type": "Tourist",
+          "country": "France"
+        }
+      ],
+      "website": "https://visas-fr.tlscontact.com/en-us/country/cn/vac/cnBJS2fr",
+      "free_config": {
+        "tls_url": "https://visas-fr.tlscontact.com/en-us/country/cn/vac/cnBJS2fr",
+        "location": "Beijing",
+        "capsolver_key": "CAP-5441DD341DD3CC2FAEF0BE6FE493EE9A",
+        "login_captcha": {
+          "solve_advance": false,
+          "site_key": "6LcDpXcfAAAAAM7wOEsF_38DNsL20tTvPTKxpyn0",
+          "page_url": "https://i2-auth.visas-fr.tlscontact.com",
+          "task": "ReCaptchaV2TaskProxyLess"
+        }
+      }
+    },
+    {
+      "identifier": "tls.cn.hgh.fr",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 900,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "15:00",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "tls.cn.hgh.fr.sentinel",
+        "target_instances": 3,
+        "account_cd": 1800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 55,
+          "random_max": 65
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "tls_plugin",
+        "plugin_bin": "tls_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.hgh.fr.tourist",
+          "city": "Hangzhou",
+          "visa_type": "Tourist",
+          "country": "France"
+        }
+      ],
+      "website": "https://visas-fr.tlscontact.com/en-us/country/cn/vac/cnHGH2fr",
+      "free_config": {
+        "tls_url": "https://visas-fr.tlscontact.com/en-us/country/cn/vac/cnHGH2fr",
+        "location": "Hangzhou",
+        "capsolver_key": "CAP-5441DD341DD3CC2FAEF0BE6FE493EE9A",
+        "login_captcha": {
+          "solve_advance": false,
+          "site_key": "6LcDpXcfAAAAAM7wOEsF_38DNsL20tTvPTKxpyn0",
+          "page_url": "https://i2-auth.visas-fr.tlscontact.com",
+          "task": "ReCaptchaV2TaskProxyLess"
+        }
+      }
+    },
+    {
+      "identifier": "tls.cn.can.fr",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 900,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "15:00",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "tls.cn.can.fr.sentinel",
+        "target_instances": 5,
+        "account_cd": 1800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 55,
+          "random_max": 65
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "tls_plugin",
+        "plugin_bin": "tls_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.can.fr.tourist",
+          "city": "Guangzhou",
+          "visa_type": "Tourist",
+          "country": "France"
+        }
+      ],
+      "website": "https://visas-fr.tlscontact.com/en-us/country/cn/vac/cnCAN2fr",
+      "free_config": {
+        "tls_url": "https://visas-fr.tlscontact.com/en-us/country/cn/vac/cnCAN2fr",
+        "location": "Guangzhou",
+        "capsolver_key": "CAP-5441DD341DD3CC2FAEF0BE6FE493EE9A",
+        "login_captcha": {
+          "solve_advance": false,
+          "site_key": "6LcDpXcfAAAAAM7wOEsF_38DNsL20tTvPTKxpyn0",
+          "page_url": "https://i2-auth.visas-fr.tlscontact.com",
+          "task": "ReCaptchaV2TaskProxyLess"
+        }
+      }
+    },
+    {
+      "identifier": "tls.cn.sha.fr",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 900,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "15:00",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "tls.cn.sha.fr.sentinel",
+        "target_instances": 1,
+        "account_cd": 1800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 55,
+          "random_max": 65
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "tls_plugin",
+        "plugin_bin": "tls_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.sha.fr.tourist",
+          "city": "Shanghai",
+          "visa_type": "Tourist",
+          "country": "France"
+        }
+      ],
+      "website": "https://visas-fr.tlscontact.com/en-us/country/cn/vac/cnSHA2fr",
+      "free_config": {
+        "tls_url": "https://visas-fr.tlscontact.com/en-us/country/cn/vac/cnSHA2fr",
+        "location": "Shanghai",
+        "capsolver_key": "CAP-5441DD341DD3CC2FAEF0BE6FE493EE9A",
+        "login_captcha": {
+          "solve_advance": false,
+          "site_key": "6LcDpXcfAAAAAM7wOEsF_38DNsL20tTvPTKxpyn0",
+          "page_url": "https://i2-auth.visas-fr.tlscontact.com",
+          "task": "ReCaptchaV2TaskProxyLess"
+        }
+      }
+    },
+    {
+      "identifier": "tls.ie.fr",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap-good"
+      ],
+      "proxy_cd": 900,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "tls.ie.fr.sentinel",
+        "target_instances": 1,
+        "account_cd": 1800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "tls_plugin",
+        "plugin_bin": "tls_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.fr.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "France"
+        }
+      ],
+      "website": "https://visas-fr.tlscontact.com/en-us/country/ie/vac/ieDUB2fr",
+      "free_config": {
+        "tls_url": "https://visas-fr.tlscontact.com/en-us/country/ie/vac/ieDUB2fr",
+        "location": "Dublin",
+        "capsolver_key": "CAP-5441DD341DD3CC2FAEF0BE6FE493EE9A",
+        "login_captcha": {
+          "solve_advance": false,
+          "site_key": "6LcDpXcfAAAAAM7wOEsF_38DNsL20tTvPTKxpyn0",
+          "page_url": "https://i2-auth.visas-fr.tlscontact.com",
+          "task": "ReCaptchaV2TaskProxyLess"
+        }
+      }
+    },
+    {
+      "identifier": "vfs.cn.at",
+      "debug": false,
+      "enable": true,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "cn.at.sentinel",
+        "target_instances": 1,
+        "account_cd": 10800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "vfs_plugin",
+        "plugin_bin": "vfs_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 0,
+          "routing_key": "slot.bjs.at.tourist",
+          "city": "Beijing",
+          "visa_type": "Tourist",
+          "country": "Austria"
+        },
+        {
+          "weight": 0,
+          "routing_key": "slot.can.at.tourist",
+          "city": "Guangzhou",
+          "visa_type": "Tourist",
+          "country": "Austria"
+        },
+        {
+          "weight": 0,
+          "routing_key": "slot.szx.at.tourist",
+          "city": "Shenzhen",
+          "visa_type": "Tourist",
+          "country": "Austria"
+        },
+        {
+          "weight": 1,
+          "routing_key": "slot.sha.at.tourist",
+          "city": "Shanghai",
+          "visa_type": "Tourist",
+          "country": "Austria"
+        }
+      ],
+      "website": "https://visa.vfsglobal.com/chn/en/aut/login",
+      "free_config": {
+        "mission_code": "aut",
+        "mission_name": "Austria",
+        "country_code": "chn",
+        "country_name": "China",
+        "culture_code": "en-US",
+        "language": "en",
+        "apt_configs": {
+          "slot.bjs.at.tourist": {
+            "center_name": "Austria Visa Application Center, Beijing",
+            "address": "7/F, GAL Tower, No. 78, Pazhou Avenue, Haizhu District",
+            "vac_code": "Bei",
+            "category_name": "Visa Type C-Schengen",
+            "category_code": "VTC",
+            "subcategory_name": "Tourism (90 days)",
+            "subcategory_code": "TR"
+          },
+          "slot.can.at.tourist": {
+            "center_name": "Austria Visa Application Center, Guangzhou",
+            "address": "7/F, GAL Tower, No. 78, Pazhou Avenue, Haizhu District",
+            "vac_code": "Gua",
+            "category_name": "Visa Type C-Schengen",
+            "category_code": "VTC",
+            "subcategory_name": "Tourism (90 days)",
+            "subcategory_code": "TR"
+          },
+          "slot.sha.at.tourist": {
+            "center_name": "Austria Visa Application Center, Shanghai",
+            "address": "3F, Jiushi Commercial Building, No. 213, Middle Sichuan Road, Huangpu District",
+            "vac_code": "Shaa",
+            "category_name": "Visa Type C - Tourism Visa",
+            "category_code": "TT",
+            "subcategory_name": "Visa Type C - Tourism Visa",
+            "subcategory_code": "VTCT"
+          },
+          "slot.szx.at.tourist": {
+            "center_name": "Austria Visa Application Center, Shenzhen",
+            "address": "Unit 2303, Floor 23, East Tower, C Future City, No. 9285 Binhe Avenue, Futian District",
+            "vac_code": "ASSZA",
+            "category_name": "Visa Type C-Schengen",
+            "category_code": "VTC",
+            "subcategory_name": "Tourism (90 days)",
+            "subcategory_code": "TR"
+          }
+        }
+      }
+    },
+    {
+      "identifier": "e-konsulat.ie.pl",
+      "debug": false,
+      "enable": false,
+      "need_account": false,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 1800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "",
+        "account_pool_id": "",
+        "target_instances": 1,
+        "account_cd": 0,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "pol_plugin",
+        "plugin_bin": "pol_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.pl.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Poland"
+        }
+      ],
+      "website": "https://secure.e-konsulat.gov.pl/placowki/151/wiza-schengen/wizyty/weryfikacja-obrazkowa",
+      "free_config": {
+        "query_url": "https://secure.e-konsulat.gov.pl/placowki/151/wiza-schengen/wizyty/weryfikacja-obrazkowa",
+        "service_type": "Wiza Schengen",
+        "location": "Dublin"
+      }
+    },
+    {
+      "identifier": "visaonweb.ie.be",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "local"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 10800,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "ie.be.sentinel",
+        "target_instances": 1,
+        "account_cd": 3600,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "bel_plugin",
+        "plugin_bin": "bel_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.be.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Belgium"
+        }
+      ],
+      "website": "https://visaonweb.diplomatie.be/en",
+      "free_config": {
+        "capsolver_key": "CAP-5441DD341DD3CC2FAEF0BE6FE493EE9A"
+      }
+    },
+    {
+      "identifier": "visametric.ie.de",
+      "debug": false,
+      "enable": false,
+      "need_account": false,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 900,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "",
+        "account_pool_id": "",
+        "target_instances": 1,
+        "account_cd": 0,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "de_plugin",
+        "plugin_bin": "de_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.de.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Germany"
+        }
+      ],
+      "website": "https://ie-appointment.visametric.com/en",
+      "free_config": {
+        "base_url": "https://ie-appointment.visametric.com",
+        "consularid": 1
+      }
+    },
+    {
+      "identifier": "pernotami.ie.it",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 900,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "ie.it.sentinel",
+        "target_instances": 1,
+        "account_cd": 10800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "ita_plugin",
+        "plugin_bin": "ita_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.it.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Italy"
+        }
+      ],
+      "website": "https://prenotami.esteri.it/Home",
+      "free_config": {
+        "capsolver_key": "03db1d1ff2f4a33e84ef1da99bd83336bed3710153525"
+      }
+    },
+    {
+      "identifier": "greekemba.ie.gr",
+      "debug": false,
+      "enable": false,
+      "need_account": true,
+      "need_proxy": true,
+      "proxy_pool": [
+        "proxy-cheap"
+      ],
+      "proxy_cd": 300,
+      "session_max_life": 86400,
+      "active_time_start": "00:00",
+      "active_time_end": "23:59",
+      "sentinel": {
+        "account_source": "built-in",
+        "account_pool_id": "ie.gr.sentinel",
+        "target_instances": 1,
+        "account_cd": 10800,
+        "signal_ttl": 30,
+        "query_wait": {
+          "mode": "Random",
+          "fixed_wait": 10,
+          "random_min": 60,
+          "random_max": 300
+        }
+      },
+      "plugin_config": {
+        "lib_path": "plugins",
+        "plugin_name": "grc_plugin",
+        "plugin_bin": "grc_plugin.py",
+        "plugin_proto": "IVSPlg"
+      },
+      "appointment_types": [
+        {
+          "weight": 10,
+          "routing_key": "slot.dub.gr.tourist",
+          "city": "Dublin",
+          "visa_type": "Tourist",
+          "country": "Greece"
+        }
+      ],
+      "website": "https://www.supersaas.com/schedule/GreekEmbassyInDublin/Visas",
+      "free_config": {}
+    }
+  ]
+}

+ 52 - 2
plugins/tls_plugin.py

@@ -300,10 +300,11 @@ class TlsPlugin(IVSPlg):
         init_y = random.randint(10, viewport_height - 10)
         self.mouse.move(init_x, init_y) 
 
-        max_steps = 10 
+        max_steps = 10
+        stuck_counter = 0
+        last_url = ""
         session_created = False
         has_submitted_login = False
-        
         other_langs = ['fr-fr', 'ar-ar', 'cb-ph', 'id-id', 'km-kh', 'mk-mk', 'ru-ru', 'sq-al', 'th-th', 'tl-ph', 'uz-uz', 'vi-vn', 'zh-cn', 'hy-am', 'zh-hk']
         
         for step in range(max_steps):
@@ -315,6 +316,49 @@ class TlsPlugin(IVSPlg):
             current_html_content = self.page.html
             self._log(f"--- [Router Step {step+1}] Current URL: {current_url} ---")
             
+            if current_url == last_url:
+                stuck_counter += 1
+            else:
+                last_url = current_url
+                stuck_counter = 0
+            
+             # 在某个页面卡住3轮以上,直接重试
+            if stuck_counter >= 3:
+                self._log("[WARN] Page stucked, try to refresh...")
+                self.page.refresh()
+                self.page.wait.load_start(timeout=5)
+                stuck_counter = 0
+                continue
+            
+            server_error_indicators = [
+                "502 Bad Gateway",
+                "503 Service Temporarily Unavailable",
+            ]
+            
+            # 网络出现故障,直接重试
+            if any(err in current_html_content for err in server_error_indicators):
+                self._log(f"[WARN] Server network error, try to refresh (Step: {step})...")
+                time.sleep(2)
+                self.page.refresh()
+                self.page.wait.load_start(timeout=5)
+                continue
+            
+            # 特征1: 必须是 <p> 标签,且包含指定文案 (绝对不会匹配到 <script> 标签里的字典)
+            spa_error_p = self.page.ele('xpath://p[contains(text(), "It looks like something went wrong")]', timeout=0.1)
+            # 特征2: 必须是 <div> 标签,且直接包含 "Error code:" 文本
+            error_code_div = self.page.ele('xpath://div[contains(text(), "Error code:")]', timeout=0.1)
+            if spa_error_p or error_code_div:
+                extracted_code = "Unknown"
+                if error_code_div:
+                    span_ele = error_code_div.ele('tag:span', timeout=0.1)
+                    if span_ele:
+                        extracted_code = span_ele.text
+                self._log(f"[WARN] Frontend application error page detected (Error Code: {extracted_code}). Triggering fallback page refresh (Step: {step})...")                
+                time.sleep(2)
+                self.page.refresh()
+                self.page.wait.load_start(timeout=5)
+                continue
+            
             cloudflare_blocked_indicators = [
                 "Sorry, you have been blocked" in current_html_content,
                 "You are being rate limited" in current_html_content,
@@ -503,6 +547,12 @@ class TlsPlugin(IVSPlg):
             
             self._log("State: Transitioning or Unknown. Waiting 2 seconds...")
             time.sleep(2)
+            
+            # 如果处于某些特定的复杂页面且久久不动,尝试主动刷新
+            if step > 0 and step % 4 == 0: 
+                self._log("[WARN] Unknown state persisted for too long. Attempting fallback refresh...")
+                self.page.refresh()
+                self.page.wait.load_start(timeout=3)
                 
         if not session_created:
             raise BizLogicError(f"Failed to reach appointment-booking after {max_steps} navigation steps. Stuck at: {self.page.url}")

+ 41 - 15
plugins/vfs_plugin.py

@@ -23,6 +23,7 @@ from vs_plg import IVSPlg
 from vs_types import VSPlgConfig, AppointmentType, VSQueryResult, VSBookResult, DateAvailability, AvailabilityStatus, NotFoundError, PermissionDeniedError, RateLimiteddError, SessionExpiredOrInvalidError, BizLogicError 
 from toolkit.vs_cloud_api import VSCloudApi
 from toolkit.mihomo_tunnel import MihomoTunnel
+from toolkit.captcha_breaker import recognize_vfs_captcha_with_qwen
 from utils.cloudflare_bypass_for_scraping import CloudflareBypasser
 
 
@@ -273,8 +274,15 @@ class VfsPlugin(IVSPlg):
         self._log("Handling Cloudflare challenge...")
         
         cf_bypasser = CloudflareBypasser(self.page, log=self.config.debug)
-        cf_token = ""
         
+        if 'Attention Required! | Cloudflare' in self.page.title and 'Sorry, you have been blocked' in self.page.html:
+            self._log(f'Block by cloudflare, try refresh...')
+            self.page.refresh()
+            self.page.wait.doc_loaded()
+        time.sleep(random.uniform(3, 5))
+        cf_bypasser.handle_waiting_room()
+        
+        cf_token = ""
         for i in range(40):
             time.sleep(1)
             self._handle_cookie_banner()
@@ -355,7 +363,7 @@ class VfsPlugin(IVSPlg):
         try:
             self.real_ip = self._get_realnetwork_ip()
         except:
-            self.real_ip = "0.0.0.0"
+            self.real_ip = self.config.proxy.ip
 
     def query(self, apt_type: AppointmentType) -> VSQueryResult:
         """查询可预约 Slot"""
@@ -687,17 +695,32 @@ class VfsPlugin(IVSPlg):
         recipient = self.config.account.username
         subject_keywords = "One Time Password"
         body_keywords = "OTP"
+        
         if not sent_at:
             now_utc = datetime.utcnow()
             sent_at = now_utc.strftime("%Y-%m-%d %H:%M:%S")
+            
         self._log(f"Waiting for OTP email...")
         content_out = VSCloudApi.Instance().fetch_mail_content(
-            master_email, sender, recipient, subject_keywords, body_keywords, sent_at, 300
+            master_email, sender, recipient, subject_keywords, body_keywords, sent_at, 300, only_text=False
         )
         if content_out:
-            match = re.search(r'\b\d{6}\b', content_out)
+            parts = content_out.split("\n")
+            text_parts = [p for p in parts if not p.startswith("data:image")]
+            email_text = " ".join(text_parts)
+            image_urls = [p for p in parts if p.startswith("data:image")]
+            match = re.search(r'\b\d{6}\b', email_text)
             if match:
+                self._log("Found OTP from email text via Regex.")
                 return match.group(0)
+            if image_urls:
+                self._log("OTP not found in text, trying LLM image recognition...")
+                target_image_b64 = image_urls[0]
+                
+                otp_code = recognize_vfs_captcha_with_qwen(target_image_b64)
+                if otp_code:
+                    self._log(f"Successfully extracted OTP from image: {otp_code}")
+                    return otp_code
         raise BizLogicError(message="OTP code not found")
 
 
@@ -968,22 +991,25 @@ class VfsPlugin(IVSPlg):
         return resp.json()
 
     def _upload_applicant_documents(self, apt_config, user_inputs) -> Dict:
-        """上传图片:先下载外部图片,再通过浏览器上传到 VFS"""
-        import requests as standard_requests # 使用标准库下载外部资源
-        
+        """上传图片:根据前缀判断是下载外部图片还是读取本地文件,并上传到 VFS"""
+        import requests as standard_requests
         url = f"https://{self.vfs_api_domain}/appointment/UploadApplicantDocument"
-        passport_url = user_inputs.get("passport_image_url")
-        if not passport_url:
+        passport_path_or_url = user_inputs.get("passport_image_url")
+        if not passport_path_or_url:
             raise NotFoundError(message="Missing passport_image_url")
 
-        try:
-            img_resp = standard_requests.get(passport_url, timeout=30)
+        if passport_path_or_url.startswith("http://") or passport_path_or_url.startswith("https://"):
+            img_resp = standard_requests.get(passport_path_or_url, timeout=30)
             if img_resp.status_code != 200:
                 raise BizLogicError(message=f"Failed to download passport image: {img_resp.status_code}")
-            b64_str = base64.b64encode(img_resp.content).decode('utf-8')
-        except Exception as e:
-            raise BizLogicError(message=f"Image download error: {e}")
-  
+            img_data = img_resp.content
+        else:
+            if not os.path.exists(passport_path_or_url):
+                raise BizLogicError(message=f"Local passport image file not found: {passport_path_or_url}")
+            with open(passport_path_or_url, "rb") as f:
+                img_data = f.read()
+        b64_str = base64.b64encode(img_data).decode('utf-8')
+            
         headers = self._get_common_headers(with_auth=True)
         
         data = {

+ 1 - 0
requirements.txt

@@ -3,6 +3,7 @@ bs4
 redis
 cryptography
 curl-cffi>=0.7.0
+openai
 ddddocr
 easyocr
 fastapi

+ 38 - 3
toolkit/captcha_breaker.py

@@ -2,6 +2,8 @@ import base64
 import os
 from openai import OpenAI
 
+QWEN_API_KEY = "sk-893e895724c6403d81374e515ffaf427"
+
 def encode_image_to_base64(image_path):
     with open(image_path, "rb") as image_file:
         return base64.b64encode(image_file.read()).decode('utf-8')
@@ -40,10 +42,43 @@ def recognize_captcha_with_qwen(image_path, api_key):
     except Exception as e:
         print(f"Qwen 识别错误: {e}")
         return None
+    
+def recognize_vfs_captcha_with_qwen(base64_image):
+    # 利用 OpenAI 的包,调用阿里云的兼容 API 接口
+    client = OpenAI(
+        api_key=QWEN_API_KEY,
+        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
+    )
+        
+    prompt = "图片中有多组验证码,其中OTP箭头指向的验证码为真,其余为假。只输出真实验证码的内容,不要任何多余的汉字或标点符号。"
+
+    try:
+        response = client.chat.completions.create(
+            model="qwen-vl-max", # 也可以用更便宜的 qwen-vl-plus
+            messages=[
+                {
+                    "role": "user",
+                    "content":[
+                        {"type": "text", "text": prompt},
+                        {
+                            "type": "image_url",
+                            "image_url": {
+                                "url": base64_image
+                            }
+                        }
+                    ]
+                }
+            ],
+            temperature=0.0
+        )
+        return response.choices[0].message.content.strip()
+    except Exception as e:
+        print(f"Qwen 识别错误: {e}")
+        return None
 
 if __name__ == "__main__":
     # 填入阿里云百炼 (DashScope) 的 API-KEY
-    API_KEY = "sk-893e895724c6403d81374e515ffaf427"
-    IMAGE_PATH = "captcha.png"
+
+    IMAGE_PATH = "/home/jerry/workspace/coordinator/data/275c31f009e612b65eb92cb52bb1d98.png"
     
-    print(f"Qwen-VL 识别结果: {recognize_captcha_with_qwen(IMAGE_PATH, API_KEY)}")
+    print(f"Qwen-VL 识别结果: {recognize_vfs_captcha_with_qwen(IMAGE_PATH, QWEN_API_KEY)}")

+ 4 - 2
toolkit/vs_cloud_api.py

@@ -333,7 +333,8 @@ class VSCloudApi:
         subject_keywords: str,
         body_keywords: str,
         sent_date: str,
-        expiry: int
+        expiry: int,
+        only_text: bool = True,
     ) -> Optional[str]:
         """
         获取邮件内容
@@ -345,7 +346,8 @@ class VSCloudApi:
             "subjectKeywords": subject_keywords,
             "bodyKeywords": body_keywords,
             "sentDate": sent_date,
-            "expiry": str(expiry)
+            "expiry": str(expiry),
+            "onlyText": only_text,
         }
         
         url = f"{self.base_url}/api/email-authorizations/fetch"

+ 3 - 3
tools/proxy_uploader.py

@@ -2,9 +2,9 @@ import requests
 from datetime import datetime, timezone
 
 # --- 配置部分 ---
-API_URL = 'https://visafly.top/api/proxy/create'
+API_URL = 'https://api.text.skin/api/proxy/create'
 BEARER_TOKEN = 'tok_e946329a60ff45ba807f3f41b0e8b7fc'    # 替换为你的真实 Token
-FILE_PATH = '../config/decodo.txt'   # 替换为你实际的文本文件名 (例如 proxies.txt)
+FILE_PATH = 'proxylist.txt'   # 替换为你实际的文本文件名 (例如 proxies.txt)
 
 headers = {
     'accept': 'application/json',
@@ -54,7 +54,7 @@ def main():
     for index, proxy in enumerate(proxies, start=1):
         # 组装 API Payload
         payload = {
-            "pool_name": "decodo",  # 自定义你的代理池名称
+            "pool_name": "proxy-cheap",  # 自定义你的代理池名称
             "proto": "http",          # 文本中没有协议字段,默认为 http。如果是 socks5 请自行修改
             "ip": proxy["ip"],
             "port": proxy["port"],