[
  {
    "path": ".clang-format",
    "content": "# Use the Google style in this project.\nLanguage: Cpp\nBasedOnStyle: Google\nStandard: c++11\n# Some folks prefer to write \"int& foo\" while others prefer \"int &foo\".  The\n# Google Style Guide only asks for consistency within a project, we chose\n# \"int& foo\" for this project:\nDerivePointerAlignment: false\nPointerAlignment: Left\n\nUseTab: Never\n\nAlignAfterOpenBracket: DontAlign\nAllowAllParametersOfDeclarationOnNextLine: true\nBinPackParameters: false\n# The Google Style Guide only asks for consistency w.r.t. \"east const\" vs.\n# \"const west\" alignment of cv-qualifiers. In this project we use \"const west\".\n#QualifierAlignment: Right\n\n# Adjust the include ordering\nIncludeCategories:\n  - Regex:           '^<gtest/.*>'\n    Priority:        4\n  - Regex:           '^<Q[A-Z].*>'    # QT Core (QApplication, QWidget и т.д.)\n    Priority:        3\n  - Regex:           '^<Qt[A-Z].*>'   # QT Modules (QtCore, QtGui и т.д.)\n    Priority:        3\n  - Regex:          '^<protocol.pb.h>'\n    Priority:        2\n  - Regex:          '^<tuntap++.*>'\n    Priority:        2\n  - Regex:           '^<ntp_client.hpp>'\n    Priority:        2\n  - Regex:          '^<zlib.*>'\n    Priority:        2\n  - Regex:           '^<argparse/.*>'\n    Priority:        2\n  - Regex:           '^<camouflage/.*>'\n    Priority:        2\n  - Regex:           '^<boost/.*>'\n    Priority:        2\n  - Regex:           '^<pcpp/.*>'\n    Priority:        2\n  - Regex:           '^<jwt-cpp/.*>'\n    Priority:        2\n  - Regex:           '^<nlohmann/.*>'\n    Priority:        2\n  - Regex:           '^<httplib/.*>'\n    Priority:        2\n  - Regex:           '^<spdlog/.*>'\n    Priority:        2\n  - Regex:           '^<pcapplusplus/.*>'\n    Priority:        2\n  - Regex:           '^<prometheus/.*>'\n    Priority:        2\n  - Regex:           '^<openssl/.*>'\n    Priority:        2\n  - Regex:           '^<fmt/.*>'\n    Priority:        2\n  - Regex:           '^<brotli/.*>'\n    Priority:        2\n  - Regex:           '^<re2/.*>'\n    Priority:        2\n  - Regex:           '^\"(common/.*)\"'\n    Priority:        5\n  - Regex:           '^<.*>'\n    Priority:        1\n  - Regex:           '^\".*\"'\n    Priority:        6\n\n# Format raw string literals with a `pb` or `proto` tag as proto.\nRawStringFormats:\n  - Language: TextProto\n    Delimiters:\n      - 'pb'\n      - 'proto'\n    BasedOnStyle: Google\n\nCommentPragmas: '(@copydoc|@copybrief|@see|@overload|@snippet)'"
  },
  {
    "path": ".clang-tidy",
    "content": "---\n# Configure clang-tidy for this project.\n\n# Here is an explanation for why some of the checks are disabled:\n#\n#  -google-readability-namespace-comments: the *_CLIENT_NS is a macro, and\n#      clang-tidy fails to match it against the initial value.\n#\n#  -modernize-use-trailing-return-type: clang-tidy recommends using\n#      `auto Foo() -> std::string { return ...; }`, we think the code is less\n#      readable in this form.\n#\n#  --modernize-concat-nested-namespaces: clang-tidy recommends\n#      `namespace google::cloud {}` over `namespace google { namespace cloud { } }`\n#      We need to support C++14, which does not supported nested namespaces.\n#\n#  --modernize-use-nodiscard: clang-tidy recommends adding a nodiscard annotation\n#      to functions where the return value should not be ignored.\n#      We need to support C++14, which does not supported the annotation.\n#\n#  -modernize-return-braced-init-list: We think removing typenames and using\n#      only braced-init can hurt readability.\n#\n#  -modernize-avoid-c-arrays: We only use C arrays when they seem to be the\n#      right tool for the job, such as `char foo[] = \"hello\"`. In these cases,\n#      avoiding C arrays often makes the code less readable, and std::array is\n#      not a drop-in replacement because it doesn't deduce the size.\n#\n#  -modernize-type-traits: clang-tidy recommands using c++17 style variable\n#      templates. We will enable this check after we moved to c++17.\n#\n#  -modernize-unary-static-assert: clang-tidy asks removing empty string in\n#      static_assert(), the check is only applicable for c++17 and later code.\n#      We will enable this check after we moved to c++17.\n#\n#  -performance-move-const-arg: This warning requires the developer to\n#      know/care more about the implementation details of types/functions than\n#      should be necessary. For example, `A a; F(std::move(a));` will trigger a\n#      warning IFF `A` is a trivial type (and therefore the move is\n#      meaningless). It would also warn if `F` accepts by `const&`, which is\n#      another detail that the caller need not care about.\n#\n#  -performance-avoid-endl: we would like to turn this on, but there are too\n#      many legitimate uses in our samples.\n#\n#  -performance-enum-size: Smaller enums may or not may be faster, it depends on\n#      the architechture. If data size was a consideration, we might decide to\n#      enable the warnings.\n#\n#  -readability-redundant-declaration: A friend declaration inside a class\n#      counts as a declaration, so if we also declare that friend outside the\n#      class in order to document it as part of the public API, that will\n#      trigger a redundant declaration warning from this check.\n#\n#  -readability-avoid-return-with-void-value: We believe this is idiomatic\n#    and saves typing, and the intent is obvious.\n#\n#  -readability-function-cognitive-complexity: too many false positives with\n#      clang-tidy-12. We need to disable this check in macros, and that setting\n#      only appears in clang-tidy-13.\n#\n#  -bugprone-narrowing-conversions: too many false positives around\n#      `std::size_t`  vs. `*::difference_type`.\n#\n#  -bugprone-easily-swappable-parameters: too many false positives.\n#\n#  -bugprone-implicit-widening-of-multiplication-result: too many false positives.\n#     Almost any expression of the form `2 * variable` or `long x = a_int * b_int;`\n#     generates an error.\n#\n#  -bugprone-unchecked-optional-access: too many false positives in tests.\n#     Despite what the documentation says, this warning appears after\n#     `ASSERT_TRUE(variable)` or `ASSERT_TRUE(variable.has_value())`.\n#\n#   TODO(#14162): Enable clang-tidy checks. We initially omitted these checks\n#   because they require large cleanup efforts or were blocking the clang-tidy\n#   X update.\nChecks: >\n  -*,\n  abseil-*,\n  bugprone-*,\n  google-*,\n  misc-*,\n  modernize-*,\n  performance-*,\n  portability-*,\n  readability-*,\n  -google-readability-braces-around-statements,\n  -google-readability-namespace-comments,\n  -google-runtime-references,\n  -misc-non-private-member-variables-in-classes,\n  -misc-const-correctness,\n  -misc-include-cleaner,\n  -modernize-return-braced-init-list,\n  -modernize-use-trailing-return-type,\n  -modernize-use-nodiscard,\n  -modernize-avoid-c-arrays,\n  -modernize-type-traits,\n  -modernize-unary-static-assert,\n  -performance-move-const-arg,\n  -performance-avoid-endl,\n  -performance-enum-size,\n  -readability-braces-around-statements,\n  -readability-identifier-length,\n  -readability-magic-numbers,\n  -readability-named-parameter,\n  -readability-redundant-declaration,\n  -readability-avoid-return-with-void-value,\n  -readability-function-cognitive-complexity,\n  -bugprone-narrowing-conversions,\n  -bugprone-easily-swappable-parameters,\n  -bugprone-inc-dec-in-conditions,\n  -bugprone-implicit-widening-of-multiplication-result,\n  -bugprone-unchecked-optional-access,\n  -bugprone-unused-local-non-trivial-variable,\n  -bugprone-unused-return-value,\n  -portability-template-virtual-member-function\n\n# Turn all the warnings from the checks above into errors.\nWarningsAsErrors: \"*\"\nHeaderFilterRegex: \"(google/cloud/|generator/).*\\\\.h$\"\n\nCheckOptions:\n  - { key: readability-identifier-naming.NamespaceCase,          value: lower_case }\n  - { key: readability-identifier-naming.ClassCase,              value: CamelCase  }\n  - { key: readability-identifier-naming.StructCase,             value: CamelCase  }\n  - { key: readability-identifier-naming.TemplateParameterCase,  value: CamelCase  }\n  - { key: readability-identifier-naming.FunctionCase,           value: aNy_CasE  }\n  - { key: readability-identifier-naming.VariableCase,           value: lower_case }\n  - { key: readability-identifier-naming.ClassMemberCase,        value: lower_case }\n  - { key: readability-identifier-naming.ClassMemberSuffix,      value: _          }\n  - { key: readability-identifier-naming.PrivateMemberSuffix,    value: _          }\n  - { key: readability-identifier-naming.ProtectedMemberSuffix,  value: _          }\n  - { key: readability-identifier-naming.EnumConstantCase,         value: CamelCase }\n  - { key: readability-identifier-naming.EnumConstantPrefix,       value: k         }\n  - { key: readability-identifier-naming.ConstexprVariableCase,    value: CamelCase }\n  - { key: readability-identifier-naming.ConstexprVariablePrefix,  value: k         }\n  - { key: readability-identifier-naming.GlobalConstantCase,       value: CamelCase }\n  - { key: readability-identifier-naming.GlobalConstantPrefix,     value: k         }\n  - { key: readability-identifier-naming.MemberConstantCase,       value: CamelCase }\n  - { key: readability-identifier-naming.MemberConstantPrefix,     value: k         }\n  - { key: readability-identifier-naming.StaticConstantCase,       value: CamelCase }\n  - { key: readability-identifier-naming.StaticConstantPrefix,     value: k         }\n  - { key: readability-implicit-bool-conversion.AllowIntegerConditions,  value: 1   }\n  - { key: readability-implicit-bool-conversion.AllowPointerConditions,  value: 1   }\n  - { key: readability-function-cognitive-complexity.IgnoreMacros,  value: 1   }\n"
  },
  {
    "path": ".cmake-format",
    "content": "_help_parse: Options affecting listfile parsing\r\nparse:\r\n  _help_additional_commands:\r\n    - Specify structure for custom cmake functions\r\n  additional_commands:\r\n    foo:\r\n      flags:\r\n        - BAR\r\n        - BAZ\r\n      kwargs:\r\n        HEADERS: '*'\r\n        SOURCES: '*'\r\n        DEPENDS: '*'\r\n  _help_override_spec:\r\n    - Override configurations per-command where available\r\n  override_spec: {}\r\n  _help_vartags:\r\n    - Specify variable tags.\r\n  vartags: []\r\n  _help_proptags:\r\n    - Specify property tags.\r\n  proptags: []\r\n_help_format: Options affecting formatting.\r\nformat:\r\n  _help_disable:\r\n    - Disable formatting entirely, making cmake-format a no-op\r\n  disable: false\r\n  _help_line_width:\r\n    - How wide to allow formatted cmake files\r\n  line_width: 150\r\n  _help_tab_size:\r\n    - How many spaces to tab for indent\r\n  tab_size: 2\r\n  _help_max_subgroups_hwrap:\r\n    - If an argument group contains more than this many sub-groups\r\n    - (parg or kwarg groups) then force it to a vertical layout.\r\n  max_subgroups_hwrap: 2\r\n  _help_max_pargs_hwrap:\r\n    - If a positional argument group contains more than this many\r\n    - arguments, then force it to a vertical layout.\r\n  max_pargs_hwrap: 6\r\n  _help_max_rows_cmdline:\r\n    - If a cmdline positional group consumes more than this many\r\n    - lines without nesting, then invalidate the layout (and nest)\r\n  max_rows_cmdline: 2\r\n  _help_separate_ctrl_name_with_space:\r\n    - If true, separate flow control names from their parentheses\r\n    - with a space\r\n  separate_ctrl_name_with_space: false\r\n  _help_separate_fn_name_with_space:\r\n    - If true, separate function names from parentheses with a\r\n    - space\r\n  separate_fn_name_with_space: false\r\n  _help_dangle_parens:\r\n    - If a statement is wrapped to more than one line, than dangle\r\n    - the closing parenthesis on its own line.\r\n  dangle_parens: false\r\n  _help_dangle_align:\r\n    - If the trailing parenthesis must be 'dangled' on its on\r\n    - 'line, then align it to this reference: `prefix`: the start'\r\n    - 'of the statement,  `prefix-indent`: the start of the'\r\n    - 'statement, plus one indentation  level, `child`: align to'\r\n    - the column of the arguments\r\n  dangle_align: prefix\r\n  _help_min_prefix_chars:\r\n    - If the statement spelling length (including space and\r\n    - parenthesis) is smaller than this amount, then force reject\r\n    - nested layouts.\r\n  min_prefix_chars: 4\r\n  _help_max_prefix_chars:\r\n    - If the statement spelling length (including space and\r\n    - parenthesis) is larger than the tab width by more than this\r\n    - amount, then force reject un-nested layouts.\r\n  max_prefix_chars: 10\r\n  _help_max_lines_hwrap:\r\n    - If a candidate layout is wrapped horizontally but it exceeds\r\n    - this many lines, then reject the layout.\r\n  max_lines_hwrap: 2\r\n  _help_line_ending:\r\n    - What style line endings to use in the output.\r\n  line_ending: unix\r\n  _help_command_case:\r\n    - Format command names consistently as 'lower' or 'upper' case\r\n  command_case: canonical\r\n  _help_keyword_case:\r\n    - Format keywords consistently as 'lower' or 'upper' case\r\n  keyword_case: unchanged\r\n  _help_always_wrap:\r\n    - A list of command names which should always be wrapped\r\n  always_wrap: []\r\n  _help_enable_sort:\r\n    - If true, the argument lists which are known to be sortable\r\n    - will be sorted lexicographicall\r\n  enable_sort: true\r\n  _help_autosort:\r\n    - If true, the parsers may infer whether or not an argument\r\n    - list is sortable (without annotation).\r\n  autosort: false\r\n  _help_require_valid_layout:\r\n    - By default, if cmake-format cannot successfully fit\r\n    - everything into the desired linewidth it will apply the\r\n    - last, most agressive attempt that it made. If this flag is\r\n    - True, however, cmake-format will print error, exit with non-\r\n    - zero status code, and write-out nothing\r\n  require_valid_layout: false\r\n  _help_layout_passes:\r\n    - A dictionary mapping layout nodes to a list of wrap\r\n    - decisions. See the documentation for more information.\r\n  layout_passes: {}\r\n_help_markup: Options affecting comment reflow and formatting.\r\nmarkup:\r\n  _help_bullet_char:\r\n    - What character to use for bulleted lists\r\n  bullet_char: '*'\r\n  _help_enum_char:\r\n    - What character to use as punctuation after numerals in an\r\n    - enumerated list\r\n  enum_char: .\r\n  _help_first_comment_is_literal:\r\n    - If comment markup is enabled, don't reflow the first comment\r\n    - block in each listfile. Use this to preserve formatting of\r\n    - your copyright/license statements.\r\n  first_comment_is_literal: false\r\n  _help_literal_comment_pattern:\r\n    - If comment markup is enabled, don't reflow any comment block\r\n    - which matches this (regex) pattern. Default is `None`\r\n    - (disabled).\r\n  literal_comment_pattern: null\r\n  _help_fence_pattern:\r\n    - Regular expression to match preformat fences in comments\r\n    - default= ``r'^\\s*([`~]{3}[`~]*)(.*)$'``\r\n  fence_pattern: ^\\s*([`~]{3}[`~]*)(.*)$\r\n  _help_ruler_pattern:\r\n    - Regular expression to match rulers in comments default=\r\n    - '``r''^\\s*[^\\w\\s]{3}.*[^\\w\\s]{3}$''``'\r\n  ruler_pattern: ^\\s*[^\\w\\s]{3}.*[^\\w\\s]{3}$\r\n  _help_explicit_trailing_pattern:\r\n    - If a comment line matches starts with this pattern then it\r\n    - is explicitly a trailing comment for the preceeding\r\n    - argument. Default is '#<'\r\n  explicit_trailing_pattern: '#<'\r\n  _help_hashruler_min_length:\r\n    - If a comment line starts with at least this many consecutive\r\n    - hash characters, then don't lstrip() them off. This allows\r\n    - for lazy hash rulers where the first hash char is not\r\n    - separated by space\r\n  hashruler_min_length: 10\r\n  _help_canonicalize_hashrulers:\r\n    - If true, then insert a space between the first hash char and\r\n    - remaining hash chars in a hash ruler, and normalize its\r\n    - length to fill the column\r\n  canonicalize_hashrulers: true\r\n  _help_enable_markup:\r\n    - enable comment markup parsing and reflow\r\n  enable_markup: false\r\n_help_lint: Options affecting the linter\r\nlint:\r\n  _help_disabled_codes:\r\n    - a list of lint codes to disable\r\n  disabled_codes: []\r\n  _help_function_pattern:\r\n    - regular expression pattern describing valid function names\r\n  function_pattern: '[0-9a-z_]+'\r\n  _help_macro_pattern:\r\n    - regular expression pattern describing valid macro names\r\n  macro_pattern: '[0-9A-Z_]+'\r\n  _help_global_var_pattern:\r\n    - regular expression pattern describing valid names for\r\n    - variables with global (cache) scope\r\n  global_var_pattern: '[A-Z][0-9A-Z_]+'\r\n  _help_internal_var_pattern:\r\n    - regular expression pattern describing valid names for\r\n    - variables with global scope (but internal semantic)\r\n  internal_var_pattern: _[A-Z][0-9A-Z_]+\r\n  _help_local_var_pattern:\r\n    - regular expression pattern describing valid names for\r\n    - variables with local scope\r\n  local_var_pattern: '[a-z][a-z0-9_]+'\r\n  _help_private_var_pattern:\r\n    - regular expression pattern describing valid names for\r\n    - privatedirectory variables\r\n  private_var_pattern: _[0-9a-z_]+\r\n  _help_public_var_pattern:\r\n    - regular expression pattern describing valid names for public\r\n    - directory variables\r\n  public_var_pattern: '[A-Z][0-9A-Z_]+'\r\n  _help_argument_var_pattern:\r\n    - regular expression pattern describing valid names for\r\n    - function/macro arguments and loop variables.\r\n  argument_var_pattern: '[a-z][a-z0-9_]+'\r\n  _help_keyword_pattern:\r\n    - regular expression pattern describing valid names for\r\n    - keywords used in functions or macros\r\n  keyword_pattern: '[A-Z][0-9A-Z_]+'\r\n  _help_max_conditionals_custom_parser:\r\n    - In the heuristic for C0201, how many conditionals to match\r\n    - within a loop in before considering the loop a parser.\r\n  max_conditionals_custom_parser: 2\r\n  _help_min_statement_spacing:\r\n    - Require at least this many newlines between statements\r\n  min_statement_spacing: 1\r\n  _help_max_statement_spacing:\r\n    - Require no more than this many newlines between statements\r\n  max_statement_spacing: 2\r\n  max_returns: 6\r\n  max_branches: 12\r\n  max_arguments: 5\r\n  max_localvars: 15\r\n  max_statements: 50\r\n_help_encode: Options affecting file encoding\r\nencode:\r\n  _help_emit_byteorder_mark:\r\n    - If true, emit the unicode byte-order mark (BOM) at the start\r\n    - of the file\r\n  emit_byteorder_mark: false\r\n  _help_input_encoding:\r\n    - Specify the encoding of the input file. Defaults to utf-8\r\n  input_encoding: utf-8\r\n  _help_output_encoding:\r\n    - Specify the encoding of the output file. Defaults to utf-8.\r\n    - Note that cmake only claims to support utf-8 so be careful\r\n    - when using anything else\r\n  output_encoding: utf-8\r\n_help_misc: Miscellaneous configurations options.\r\nmisc:\r\n  _help_per_command:\r\n    - A dictionary containing any per-command configuration\r\n    - overrides. Currently only `command_case` is supported.\r\n  per_command: {}"
  },
  {
    "path": ".conan/recipes/boringssl/conanfile.py",
    "content": "from conan import ConanFile\nfrom conan.tools.files import get\nfrom conan.tools.cmake import CMake, CMakeToolchain, cmake_layout\n\n\nclass BoringSSLConan(ConanFile):\n    name = \"openssl\"\n    version = \"boringssl\"\n\n    settings = \"os\", \"arch\", \"compiler\", \"build_type\"\n    options = {\"shared\": [True, False], \"fPIC\": [True, False]}\n    default_options = {\"shared\": False, \"fPIC\": True}\n\n    def config_options(self):\n        if self.settings.os == \"Windows\":\n            del self.options.fPIC\n\n    def layout(self):\n        cmake_layout(self)\n\n    def source(self):\n        url = \"https://github.com/batchar2/boringssl/archive/refs/heads/working-russia-tls-handshake.tar.gz\"\n        get(self, url, strip_root=True)\n\n    def generate(self):\n        tc = CMakeToolchain(self)\n        tc.variables[\"BUILD_TESTING\"] = False\n        tc.variables[\"ENABLE_EXPRESSION_TESTS\"] = False\n\n        # Правильная настройка для iOS\n        if self.settings.os == \"iOS\":\n            tc.variables[\"CMAKE_SYSTEM_NAME\"] = \"iOS\"\n            tc.variables[\"CMAKE_OSX_DEPLOYMENT_TARGET\"] = str(self.settings.os.version)\n            tc.variables[\"CMAKE_OSX_ARCHITECTURES\"] = self.settings.arch\n            tc.variables[\"CMAKE_MACOSX_BUNDLE\"] = False\n            if \"simulator\" in str(self.settings.os.sdk).lower():\n                tc.variables[\"CMAKE_OSX_SYSROOT\"] = \"iphonesimulator\"\n            else:\n                tc.variables[\"CMAKE_OSX_SYSROOT\"] = \"iphoneos\"\n            tc.variables[\"CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED\"] = \"NO\"\n            tc.variables[\"CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED\"] = \"NO\"\n            tc.variables[\"CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE\"] = \"YES\"\n            tc.variables[\"CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH\"] = \"NO\"\n\n        tc.generate()\n\n    def build(self):\n        cmake = CMake(self)\n        cmake.configure()\n        cmake.build()\n\n    def package(self):\n        cmake = CMake(self)\n        cmake.install()\n\n    def package_info(self):\n        self.cpp_info.components[\"ssl\"].libs = [\"ssl\"]\n        self.cpp_info.components[\"crypto\"].libs = [\"crypto\"]\n\n        # include dir\n        self.cpp_info.includedirs = [\"include\"]\n        self.cpp_info.components[\"ssl\"].includedirs = [\"include\"]\n        self.cpp_info.components[\"crypto\"].includedirs = [\"include\"]\n\n        # for CMake find_package(OpenSSL)\n        self.cpp_info.set_property(\"cmake_file_name\", \"OpenSSL\")\n        self.cpp_info.components[\"ssl\"].set_property(\"cmake_target_name\", \"OpenSSL::SSL\")\n        self.cpp_info.components[\"crypto\"].set_property(\"cmake_target_name\", \"OpenSSL::Crypto\")\n\n        if self.settings.os == \"iOS\":\n            self.cpp_info.frameworks = [\"Security\", \"Foundation\", \"CoreFoundation\"]\n            self.cpp_info.system_libs = [\"c++\"]\n"
  },
  {
    "path": ".dockerignore",
    "content": ".cache\n.vscode\n.vsconan\n.git/\nREADME.md\nLICENSE\nCMakeUserPresets.json\nCI/\ntmp/\nkeys/\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Go to '...'\n2. Click on '....'\n3. Scroll down to '....'\n4. See error\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Screenshots**\nIf applicable, add screenshots to help explain your problem.\n\n**Desktop (please complete the following information):**\n - OS: [e.g. iOS]\n - Browser [e.g. chrome, safari]\n - Version [e.g. 22]\n\n**Smartphone (please complete the following information):**\n - Device: [e.g. iPhone6]\n - OS: [e.g. iOS8.1]\n - Browser [e.g. stock browser, safari]\n - Version [e.g. 22]\n\n**Additional context**\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/custom.md",
    "content": "---\nname: Custom issue template\nabout: Describe this issue template's purpose here.\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your feature request related to a problem? Please describe.**\nA clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n\n**Describe the solution you'd like**\nA clear and concise description of what you want to happen.\n\n**Describe alternatives you've considered**\nA clear and concise description of any alternative solutions or features you've considered.\n\n**Additional context**\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".github/workflows/main.yml",
    "content": "name: Build and Test\n\non:\n  push:\n    branches:\n      - '**'\n    tags:\n      - '*'\n  release:\n    types: [ published ]\nenv:\n  DOCKER_REGISTRY: fptnvpn\n  IMAGE_NAME: fptn-vpn-server\njobs:\n  build_ubuntu_x86_64:\n    runs-on: Ubuntu_x86_64\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v3\n        with:\n          submodules: true\n      - name: Set env\n        if: github.event_name == 'release'\n        run: echo \"RELEASE_VERSION=${GITHUB_REF#refs/*/}\" >> $GITHUB_ENV\n      - name: Print Release Version\n        if: github.event_name == 'release'\n        run: |\n          echo \"Release Version: $RELEASE_VERSION\"\n      - name: Update FPTN_VERSION in conanfile.py\n        if: github.event_name == 'release'\n        run: |\n          sed -i \"s/^FPTN_VERSION = \\\".*\\\"/FPTN_VERSION = \\\"$RELEASE_VERSION\\\"/\" conanfile.py\n      - name: Install dependencies\n        run: |\n          conan install . --output-folder=build --build=missing -o with_gui_client=True --settings build_type=Release -s compiler.cppstd=17\n      - name: Run cpplint\n        run: |\n          python3 cpplint.py --recursive --filter=-build/c++17,-whitespace/newline,-readability/braces --counting=total ./src/ ./tests/\n      - name: Run cppcheck\n        run: |\n          cppcheck --error-exitcode=1 --enable=all --check-level=exhaustive --language=c++ --suppress=unusedFunction --inline-suppr --suppress=missingIncludeSystem --suppress=unknownMacro --suppress=unmatchedSuppression -I ./src/fptn-client/ -I ./src/fptn-server/ -I ./src/fptn-passwd/ -I ./src/fptn-client-protocol-lib -I ./src/  ./src/ ./tests/\n      - name: Run cmake-format\n        run: |\n          cmake-format -i CMakeLists.txt src/fptn-client/CMakeLists.txt src/fptn-passwd/CMakeLists.txt src/fptn-server/CMakeLists.txt src/fptn-protocol-lib/CMakeLists.txt depends/cmake/FetchBase64.cmake depends/cmake/FetchLibTunTap.cmake depends/cmake/FetchWintun.cmake\n      - name: Build\n        run: |\n          cd build\n          cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release\n          cmake --build .\n      - name: Test\n        run: |\n          cd build\n          ctest -C Release\n      - name: Build Debian package\n        run: |\n          cd build\n          cmake --build . --target build-deb\n          cmake --build . --target build-deb-gui\n      - name: Upload deb RELEASE\n        if: github.event_name == 'release'\n        uses: AButler/upload-release-assets@v3.0\n        with:\n          files: \"fptn-*.deb\"\n          repo-token: ${{ secrets.CI_TOKEN }}\n      - name: Upload Build Artifacts\n        uses: actions/upload-artifact@v4\n        with:\n          name: Ubuntu86_64Artifacts\n          path: |\n            *.deb\n          if-no-files-found: warn\n      - name: Build and Push Docker Image (amd64)\n        if: github.event_name == 'release'\n        run: |\n          echo \"${{ secrets.DOCKER_PASSWORD }}\" | docker login -u \"${{ secrets.DOCKER_USERNAME }}\" --password-stdin\n          docker buildx create --name amd64-builder --platform linux/amd64 --use || true\n          docker buildx build \\\n            --platform linux/amd64 \\\n            -f ./deploy/docker/Dockerfile \\\n            -t \"$DOCKER_REGISTRY/$IMAGE_NAME:$RELEASE_VERSION-amd64\" \\\n            --build-arg FPTN_SERVER_PATH=build/src/fptn-server/fptn-server \\\n            --build-arg FPTN_PASSWD_PATH=build/src/fptn-passwd/fptn-passwd \\\n            --push \\\n            --provenance=false \\\n            --sbom=false .\n\n  build_ubuntu_arm64:\n    runs-on: Ubuntu_ARM64_Desktop\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v3\n        with:\n          submodules: true\n      - name: Set env\n        if: github.event_name == 'release'\n        run: echo \"RELEASE_VERSION=${GITHUB_REF#refs/*/}\" >> $GITHUB_ENV\n      - name: Print Release Version\n        if: github.event_name == 'release'\n        run: |\n          echo \"Release Version: $RELEASE_VERSION\"\n      - name: Update FPTN_VERSION in conanfile.py\n        if: github.event_name == 'release'\n        run: |\n          sed -i \"s/^FPTN_VERSION = \\\".*\\\"/FPTN_VERSION = \\\"$RELEASE_VERSION\\\"/\" conanfile.py\n      - name: Install dependencies\n        run: |\n          conan install . --output-folder=build --build=missing -o with_gui_client=True --settings build_type=Release -s compiler.cppstd=17\n      - name: Run cpplint\n        run: |\n          python3 cpplint.py --recursive --filter=-build/c++17,-whitespace/newline,-readability/braces --counting=total ./src/ ./tests/\n      - name: Run cppcheck\n        run: |\n          cppcheck --error-exitcode=1 --enable=all --check-level=exhaustive --language=c++ --suppress=unusedFunction --inline-suppr --suppress=missingIncludeSystem --suppress=unmatchedSuppression -I ./src/fptn-client/ -I ./src/fptn-server/ -I ./src/fptn-passwd/ -I ./src/fptn-client-protocol-lib -I ./src/ ./src/ ./tests/\n      - name: Run cmake-format\n        run: |\n          cmake-format -i CMakeLists.txt src/fptn-client/CMakeLists.txt src/fptn-passwd/CMakeLists.txt src/fptn-server/CMakeLists.txt src/fptn-protocol-lib/CMakeLists.txt depends/cmake/FetchBase64.cmake depends/cmake/FetchLibTunTap.cmake depends/cmake/FetchWintun.cmake\n      - name: Build\n        run: |\n          cd build\n          cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release\n          cmake --build .\n      - name: Test\n        run: |\n          cd build\n          ctest -C Release\n      - name: Build Debian package\n        run: |\n          cd build\n          cmake --build . --target build-deb\n          cmake --build . --target build-deb-gui\n      - name: Upload deb\n        if: github.event_name == 'release'\n        uses: AButler/upload-release-assets@v3.0\n        with:\n          files: \"fptn-*.deb\"\n          repo-token: ${{ secrets.CI_TOKEN }}\n      - name: Upload Build Artifacts\n        uses: actions/upload-artifact@v4\n        with:\n          name: UbuntuArmArtifacts\n          path: |\n            *.deb\n          if-no-files-found: warn\n      - name: Build and Push Docker Image (arm64)\n        if: github.event_name == 'release'\n        run: |\n          echo \"${{ secrets.DOCKER_PASSWORD }}\" | docker login -u \"${{ secrets.DOCKER_USERNAME }}\" --password-stdin\n          docker buildx create --name arm64-builder --platform linux/arm64 --use || true\n          docker buildx build \\\n            --platform linux/arm64 \\\n            -f ./deploy/docker/Dockerfile \\\n            -t \"$DOCKER_REGISTRY/$IMAGE_NAME:$RELEASE_VERSION-arm64\" \\\n            --build-arg FPTN_SERVER_PATH=build/src/fptn-server/fptn-server \\\n            --build-arg FPTN_PASSWD_PATH=build/src/fptn-passwd/fptn-passwd \\\n            --push \\\n            --provenance=false \\\n            --sbom=false .\n\n  build_macos_arm64:\n    runs-on: MacOS_ARM64\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v3\n        with:\n          submodules: true\n      - name: Set env\n        if: github.event_name == 'release'\n        run: echo \"RELEASE_VERSION=${GITHUB_REF#refs/*/}\" >> $GITHUB_ENV\n      - name: Print Release Version\n        if: github.event_name == 'release'\n        run: |\n          echo \"Release Version: $RELEASE_VERSION\"\n      - name: Update FPTN_VERSION in conanfile.py\n        if: github.event_name == 'release'\n        run: |\n          sed -i '' \"s/^FPTN_VERSION = \\\".*\\\"/FPTN_VERSION = \\\"$RELEASE_VERSION\\\"/\" conanfile.py\n      - name: Install dependencies\n        run: |\n          conan install . --output-folder=build --build=missing -o with_gui_client=True --settings build_type=Release -s compiler.cppstd=17\n      - name: Run cpplint\n        run: |\n          python3 cpplint.py --recursive --filter=-build/c++17,-whitespace/newline,-readability/braces --counting=total ./src/ ./tests/\n      - name: Run cppcheck\n        run: |\n          cppcheck --error-exitcode=1 --enable=all --check-level=exhaustive --language=c++ --suppress=unusedFunction --inline-suppr --suppress=missingIncludeSystem --suppress=unknownMacro --suppress=unmatchedSuppression -I ./src/fptn-client/ -I ./src/fptn-server/ -I ./src/fptn-passwd/ -I ./src/fptn-client-protocol-lib -I ./src/  ./src/ ./tests/\n      - name: Run cmake-format\n        run: |\n          cmake-format -i CMakeLists.txt src/fptn-client/CMakeLists.txt src/fptn-passwd/CMakeLists.txt src/fptn-server/CMakeLists.txt src/fptn-protocol-lib/CMakeLists.txt depends/cmake/FetchBase64.cmake depends/cmake/FetchLibTunTap.cmake depends/cmake/FetchWintun.cmake\n      - name: Build\n        run: |\n          cd build\n          cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release\n          cmake --build .\n      - name: Test\n        run: |\n          cd build\n          ctest -C Release\n      - name: Build MacOS pkg\n        run: |\n          cd build\n          cmake --build . --target build-pkg\n      - name: Upload macOS pkg\n        if: github.event_name == 'release'\n        uses: AButler/upload-release-assets@v3.0\n        with:\n          files: \"*.pkg\"\n          repo-token: ${{ secrets.CI_TOKEN }}\n      - name: Upload Build Artifacts\n        uses: actions/upload-artifact@v4\n        with:\n          name: MacOsAppleSiliconArtifacts\n          path: |\n            *.pkg\n          if-no-files-found: warn\n\n  build_windows_AMD64:\n    runs-on: Windows11_AMD64\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v3\n        with:\n          submodules: true\n      - name: Set env\n        shell: powershell\n        if: github.event_name == 'release'\n        run: |\n          $releaseVersion = \"${{ github.ref_name }}\"\n          echo \"RELEASE_VERSION=$releaseVersion\" >> $env:GITHUB_ENV\n      - name: Print Release Version\n        shell: powershell\n        if: github.event_name == 'release'\n        run: |\n          Write-Output \"Release Version: $env:RELEASE_VERSION\"\n      - name: Update FPTN_VERSION in conanfile.py\n        shell: powershell\n        if: github.event_name == 'release'\n        run: |\n          python.exe deploy\\windows\\conan-replace-version.py conanfile.py \"$env:RELEASE_VERSION\"\n      - name: Install dependencies\n        shell: powershell\n        run: |\n          conan install . --output-folder=build --build=missing -o with_gui_client=True --settings build_type=Release -s compiler.cppstd=17\n      - name: Run cpplint\n        run: |\n          python cpplint.py --recursive --filter=-build/c++17,-whitespace/newline,-readability/braces --counting=total ./src/ ./tests/\n      - name: Run cppcheck\n        shell: powershell\n        run: |\n          cppcheck --error-exitcode=1 --enable=all --check-level=exhaustive --language=c++ --suppress=unusedFunction --inline-suppr --suppress=missingIncludeSystem --suppress=unknownMacro --suppress=unmatchedSuppression -I ./src/fptn-client/ -I ./src/fptn-server/ -I ./src/fptn-passwd/ -I ./src/fptn-client-protocol-lib -I ./src/  ./src/ ./tests/\n      - name: Run cmake-format\n        shell: powershell\n        run: |\n          cmake-format -i CMakeLists.txt src/fptn-client/CMakeLists.txt src/fptn-passwd/CMakeLists.txt src/fptn-server/CMakeLists.txt src/fptn-protocol-lib/CMakeLists.txt depends/cmake/FetchBase64.cmake depends/cmake/FetchLibTunTap.cmake depends/cmake/FetchWintun.cmake\n      - name: Build\n        shell: powershell\n        run: |\n          cd build\n          cmake .. -G \"Visual Studio 17 2022\" -DCMAKE_TOOLCHAIN_FILE=\"conan_toolchain.cmake\" -DCMAKE_BUILD_TYPE=Release\n          cmake --build . --config Release\n      - name: Test\n        shell: powershell\n        run: |\n          cd build\n          ctest -C Release\n      - name: Build Windows installer\n        shell: powershell\n        run: |\n          cd build\n          cmake --build . --config Release --target build-installer\n      - name: Zip the .exe\n        shell: powershell\n        run: |\n          $exePath = Get-ChildItem -Path \".\" -Filter \"FptnClientInstaller-*-windows-x64_x86.exe\" | Select-Object -First 1\n          Compress-Archive -Path $exePath.FullName -DestinationPath \"FptnClientInstaller-$env:RELEASE_VERSION-windows-x64_x86.zip\"\n      - name: Upload Windows installer\n        if: github.event_name == 'release'\n        uses: AButler/upload-release-assets@v3.0\n        with:\n          files: \"*.zip\"\n          repo-token: ${{ secrets.CI_TOKEN }}\n      - name: Upload Build Artifacts\n        uses: actions/upload-artifact@v4\n        with:\n          name: WindowsArtifacts\n          path: |\n            *.zip\n          if-no-files-found: warn\n\n  create_multiarch_manifest:\n    needs: [build_ubuntu_x86_64, build_ubuntu_arm64]\n    runs-on: ubuntu-latest\n    steps:\n      - name: Get release version\n        if: github.event_name == 'release'\n        run: |\n          RELEASE_VERSION=\"${GITHUB_REF#refs/*/}\"\n          echo \"RELEASE_VERSION=$RELEASE_VERSION\" >> $GITHUB_ENV\n          echo \"Version: $RELEASE_VERSION\"\n\n      - name: Login to Docker Hub\n        if: github.event_name == 'release'\n        run: |\n          echo \"${{ secrets.DOCKER_PASSWORD }}\" | docker login -u \"${{ secrets.DOCKER_USERNAME }}\" --password-stdin\n\n      - name: Create multi-arch manifests\n        if: github.event_name == 'release'\n        run: |\n          docker pull --quiet $DOCKER_REGISTRY/$IMAGE_NAME:$RELEASE_VERSION-amd64\n          docker pull --quiet $DOCKER_REGISTRY/$IMAGE_NAME:$RELEASE_VERSION-arm64\n          \n          docker manifest rm $DOCKER_REGISTRY/$IMAGE_NAME:$RELEASE_VERSION 2>/dev/null || true\n          docker manifest rm $DOCKER_REGISTRY/$IMAGE_NAME:latest 2>/dev/null || true\n          \n          docker buildx imagetools create \\\n            -t $DOCKER_REGISTRY/$IMAGE_NAME:$RELEASE_VERSION \\\n            $DOCKER_REGISTRY/$IMAGE_NAME:$RELEASE_VERSION-amd64 \\\n            $DOCKER_REGISTRY/$IMAGE_NAME:$RELEASE_VERSION-arm64\n          \n          docker buildx imagetools create \\\n            -t \"$DOCKER_REGISTRY/$IMAGE_NAME\":latest \\\n            $DOCKER_REGISTRY/$IMAGE_NAME:$RELEASE_VERSION-amd64 \\\n            $DOCKER_REGISTRY/$IMAGE_NAME:$RELEASE_VERSION-arm64\n"
  },
  {
    "path": ".gitignore",
    "content": ".env\n.cache/\n.vsconan/\nTesting/\nconan_provider.cmake\n.conan_provider.cmake\nlogs/\n*.dmg\n*.deb\n*.pkg\n.vs/\n.vscode/\ntmp/\nkeys/\nbuild*/\ncmake-build-*/\n.idea/\nlibhv.*\nmacos-build/\nlinux-build/\nlinux-build22/\nlinux-build24/\nCMakeUserPresets.json\n.env\n\n# Prerequisites\n*.d\n\n# Compiled Object files\n*.slo\n*.lo\n*.o\n*.obj\n\n# Precompiled Headers\n*.gch\n*.pch\n\n# Compiled Dynamic libraries\n*.so\n*.dylib\n*.dll\n\n# Fortran module files\n*.mod\n*.smod\n\n# Compiled Static libraries\n*.lai\n*.la\n*.a\n*.lib\n\n# Executables\n*.exe\n*.out\n*.app\nbuild/\n\n# General\n.DS_Store\n.AppleDouble\n.LSOverride\n\n# Icon must end with two \\r\nIcon\n\n# Thumbnails\n._*\n\n# Files that might appear in the root of a volume\n.DocumentRevisions-V100\n.fseventsd\n.Spotlight-V100\n.TemporaryItems\n.Trashes\n.VolumeIcon.icns\n.com.apple.timemachine.donotpresent\n\n# Directories potentially created on remote AFP share\n.AppleDB\n.AppleDesktop\nNetwork Trash Folder\nTemporary Items\n.apdisk\n"
  },
  {
    "path": "CLAUDE.md",
    "content": "# CLAUDE.md\n\nBehavioral guidelines to reduce common LLM coding mistakes. Merge with project-specific instructions as needed.\n\n**Tradeoff:** These guidelines bias toward caution over speed. For trivial tasks, use judgment.\n\n## 1. Think Before Coding\n\n**Don't assume. Don't hide confusion. Surface tradeoffs.**\n\nBefore implementing:\n- State your assumptions explicitly. If uncertain, ask.\n- If multiple interpretations exist, present them - don't pick silently.\n- If a simpler approach exists, say so. Push back when warranted.\n- If something is unclear, stop. Name what's confusing. Ask.\n\n## 2. Simplicity First\n\n**Minimum code that solves the problem. Nothing speculative.**\n\n- No features beyond what was asked.\n- No abstractions for single-use code.\n- No \"flexibility\" or \"configurability\" that wasn't requested.\n- No error handling for impossible scenarios.\n- If you write 200 lines and it could be 50, rewrite it.\n\nAsk yourself: \"Would a senior engineer say this is overcomplicated?\" If yes, simplify.\n\n## 3. Surgical Changes\n\n**Touch only what you must. Clean up only your own mess.**\n\nWhen editing existing code:\n- Don't \"improve\" adjacent code, comments, or formatting.\n- Don't refactor things that aren't broken.\n- Match existing style, even if you'd do it differently.\n- If you notice unrelated dead code, mention it - don't delete it.\n\nWhen your changes create orphans:\n- Remove imports/variables/functions that YOUR changes made unused.\n- Don't remove pre-existing dead code unless asked.\n\nThe test: Every changed line should trace directly to the user's request.\n\n## 4. Goal-Driven Execution\n\n**Define success criteria. Loop until verified.**\n\nTransform tasks into verifiable goals:\n- \"Add validation\" → \"Write tests for invalid inputs, then make them pass\"\n- \"Fix the bug\" → \"Write a test that reproduces it, then make it pass\"\n- \"Refactor X\" → \"Ensure tests pass before and after\"\n\nFor multi-step tasks, state a brief plan:\n```\n1. [Step] → verify: [check]\n2. [Step] → verify: [check]\n3. [Step] → verify: [check]\n```\n\nStrong success criteria let you loop independently. Weak criteria (\"make it work\") require constant clarification.\n\n---\n\n**These guidelines are working if:** fewer unnecessary changes in diffs, fewer rewrites due to overcomplication, and clarifying questions come before implementation rather than after mistakes."
  },
  {
    "path": "CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.16)\nproject(fptn VERSION \"${FPTN_VERSION}\" LANGUAGES CXX)\n\n# project settings\nset(CMAKE_INCLUDE_CURRENT_DIR ON)\nset(CMAKE_CXX_STANDARD 20)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\n\nif (APPLE)\n  set(CMAKE_CXX_STANDARD 20)\nelse ()\n  add_definitions(-DBOOST_ASIO_HAS_CO_AWAIT)\n  add_definitions(-DBOOST_ASIO_HAS_CO_SPAWN)\n  add_definitions(-DBOOST_ASIO_HAS_COROUTINES)\n  set(CMAKE_INCLUDE_CURRENT_DIR ON)\n  set(CMAKE_CXX_STANDARD 20)\n  set(CMAKE_CXX_STANDARD_REQUIRED ON)\n  if (CMAKE_CXX_COMPILER_ID STREQUAL \"Clang\")\n    set(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} -Wno-unused-command-line-argument\")\n  endif ()\nendif ()\n\nif(MSVC)\n  add_compile_options(\"/bigobj\")\n  add_compile_options(\"/std:c++20\")\n  add_compile_options(\"/Zc:inline-\")\n  add_compile_options(\"/permissive-\")\n  add_compile_options(\"/Zc:__cplusplus\")\n  add_compile_options(\"/d2SSAOptimizer-\")\n  add_compile_definitions(_WIN32_WINNT=0x0A00)  # Windows 10\nendif()\n\n# Global project definitions\n\nif (FPTN_BUILD_ONLY_FPTN_LIB)\n  # build fptnlib without pcappp\n  set(FPTN_IP_ADDRESS_WITHOUT_PCAP ON)\n  add_compile_definitions(FPTN_IP_ADDRESS_WITHOUT_PCAP)\nelse()\n  set(FPTN_WITH_LIBIDN2 ON)\n  add_compile_definitions(FPTN_WITH_LIBIDN2)\nendif()\n\nadd_compile_definitions(FPTN_VERSION=\\\"${FPTN_VERSION}\\\")\nadd_compile_definitions(FPTN_MTU_SIZE=1500)\nadd_compile_definitions(FPTN_DEFAULT_SNI=\\\"rutube.ru\\\")\nadd_compile_definitions(FPTN_IP_PACKET_MAX_SIZE=1500)\nadd_compile_definitions(FPTN_ENABLE_PACKET_PADDING=1)\nadd_compile_definitions(FPTN_PROTOBUF_PROTOCOL_VERSION=0x01)\n# client\nadd_compile_definitions(FPTN_CLIENT_DEFAULT_ADDRESS_IP6=\\\"fd00::1\\\")\nadd_compile_definitions(FPTN_CLIENT_DEFAULT_ADDRESS_IP4=\\\"10.0.0.1\\\")\nadd_compile_definitions(FPTN_CLIENT_DEFAULT_EXCLUDE_NETWORKS=\\\"10.0.0.0/8,192.168.0.0/16\\\")\nadd_compile_definitions(FPTN_CLIENT_DEFAULT_SPLIT_TUNNEL_DOMAINS=\\\"domain:ru,domain:su,domain:рф,domain:vk.com,domain:yandex.com,domain:userapi.com,domain:yandex.net,domain:clstorage.net\\\")\nadd_compile_definitions(FPTN_CLIENT_DEFAULT_BLACKLIST_DOMAINS=\\\"domain:solovev-live.ru,domain:ria.ru,domain:tass.ru,domain:1tv.ru,domain:ntv.ru,domain:rt.com,domain:lenta.ru\\\")\n# server\nadd_compile_definitions(FPTN_SERVER_DEFAULT_ADDRESS_IP6=\\\"fc00:1::1\\\")\nadd_compile_definitions(FPTN_SERVER_DEFAULT_NET_ADDRESS_IP6=\\\"fc00:1::\\\")\nadd_compile_definitions(FPTN_SERVER_DEFAULT_ADDRESS_IP4=\\\"172.20.0.1\\\")\nadd_compile_definitions(FPTN_SERVER_DEFAULT_NET_ADDRESS_IP4=\\\"172.20.0.0\\\")\n# github\nadd_compile_definitions(FPTN_GITHUB_USERNAME=\\\"fptn-project\\\")\nadd_compile_definitions(FPTN_GITHUB_REPOSITORY=\\\"fptn\\\")\nadd_compile_definitions(FPTN_GITHUB_PAGE_LINK=\\\"https://storage.googleapis.com/fptn.org/index.html\\\")\n# Boost\nadd_compile_definitions(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS)\nadd_compile_definitions(BOOST_IOSTREAMS_USE_BZIP2)\nadd_compile_definitions(BOOST_IOSTREAMS_USE_ZLIB)\n# Fix boringssl build for windows\nadd_definitions(-DNOMINMAX)\nadd_definitions(-DWIN32_LEAN_AND_MEAN)\n# Minimize Windows headers and avoid NOMINMAX conflict (needed for BoringSSL)\nadd_definitions(-DNOMINMAX)\nadd_definitions(-DWIN32_LEAN_AND_MEAN)\n\nset(FPTN_SERVER_PATH \"${CMAKE_CURRENT_SOURCE_DIR}/src/fptn-server\")\n\n# --- depends ---\ninclude(depends/cmake/FetchBase64.cmake)\ninclude(depends/cmake/NtpClient.cmake)\ninclude(depends/cmake/CamouflageTLS.cmake)\n\nif (NOT FPTN_BUILD_ONLY_FPTN_LIB)\n    if (APPLE OR UNIX)\n        include(depends/cmake/FetchLibTunTap.cmake)\n    elseif (WIN32)\n        include(depends/cmake/FetchWintun.cmake)\n    else ()\n        message(FATAL_ERROR \"Unsupported platform\")\n    endif ()\nendif ()\n\n# --- project ---\nset(CMAKE_COMPILE_WARNING_AS_ERROR ON) # check all warnings!\nif (MSVC)\n    set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)\n    add_compile_options(/W4 /WX)\nelse ()\n    add_compile_options(-Wall -Werror -pedantic)\nendif ()\n\n# --- clang-tidy setup ---\nset(CMAKE_EXPORT_COMPILE_COMMANDS ON)\n# search clang-tidy\nfind_program(\n        CLANG_TIDY_EXE\n        NAMES clang-tidy-22\n        clang-tidy-21\n        clang-tidy-20\n        clang-tidy-19\n        clang-tidy-18\n        clang-tidy-17\n        clang-tidy-16\n        clang-tidy-15\n        clang-tidy)\nif (CLANG_TIDY_EXE)\n    execute_process(\n            COMMAND ${CLANG_TIDY_EXE} --version\n            OUTPUT_VARIABLE CLANG_TIDY_VERSION_STRING\n            OUTPUT_STRIP_TRAILING_WHITESPACE)\n    message(STATUS \"[CLANG-TIDY] clang-tidy version: ${CLANG_TIDY_VERSION_STRING}\")\n    if (CLANG_TIDY_VERSION_STRING MATCHES \"version ([0-9]+)\")\n        set(CLANG_TIDY_VERSION ${CMAKE_MATCH_1})\n        if (CLANG_TIDY_VERSION GREATER_EQUAL 20)\n            message(STATUS \"[CLANG-TIDY]  clang-tidy ${CLANG_TIDY_VERSION} accepted, enabling\")\n            set(CMAKE_CXX_CLANG_TIDY \"${CLANG_TIDY_EXE};-extra-arg=-std=c++20\")\n        else ()\n            message(WARNING \"[CLANG-TIDY]  clang-tidy version ${CLANG_TIDY_VERSION} is too old (<15), disabling\")\n        endif ()\n    else ()\n        message(WARNING \"[CLANG-TIDY]  Could not parse clang-tidy version, disabling\")\n    endif ()\nelse ()\n    message(WARNING \"[CLANG-TIDY]  clang-tidy not found, skipping clang-tidy checks.\")\nendif ()\n\n# --- include ---\ninclude_directories(src/)\n\n# --- build ---\nadd_subdirectory(src/fptn-protocol-lib)\nif (NOT FPTN_BUILD_ONLY_FPTN_LIB)\n    if (APPLE OR UNIX)\n        add_subdirectory(src/fptn-server)\n        add_subdirectory(src/fptn-passwd)\n    endif ()\n    add_subdirectory(src/fptn-client)\n    # --- install ---\n    install(TARGETS fptn-client-cli DESTINATION bin)\n    if (APPLE OR UNIX)\n        install(TARGETS fptn-server DESTINATION bin)\n        install(TARGETS fptn-passwd DESTINATION bin)\n    endif ()\n    # --- packaging ---\n    if (CMAKE_SYSTEM_NAME STREQUAL \"Linux\") # deb\n        add_custom_target(\n                build-deb\n                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}\n                COMMAND\n                bash -c\n                \"${CMAKE_CURRENT_SOURCE_DIR}/deploy/linux/deb/create-client-cli-deb-package.sh ${CMAKE_BINARY_DIR}/src/fptn-client/fptn-client-cli ${FPTN_VERSION}; ${CMAKE_CURRENT_SOURCE_DIR}/deploy/linux/deb/create-server-deb-package.sh ${CMAKE_BINARY_DIR}/src/fptn-server/fptn-server ${CMAKE_BINARY_DIR}/src/fptn-passwd/fptn-passwd ${FPTN_VERSION}\"\n                COMMENT \"Building .deb package\"\n                VERBATIM)\n        if (\"${FPTN_BUILD_WITH_GUI_CLIENT}\")\n            add_custom_target(\n                    build-deb-gui\n                    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}\n                    COMMAND\n                    bash -c\n                    \"${CMAKE_CURRENT_SOURCE_DIR}/deploy/linux/deb/create-client-gui-deb-package.sh ${CMAKE_BINARY_DIR}/src/fptn-client/fptn-client-gui ${CMAKE_CURRENT_SOURCE_DIR}/deploy/linux/deb/assets/FptnClient512x512.png ${FPTN_VERSION} ${CMAKE_CURRENT_SOURCE_DIR}/deploy/sni\"\n                    COMMENT \"Building .deb package\"\n                    VERBATIM)\n        endif ()\n    elseif (CMAKE_SYSTEM_NAME STREQUAL \"Darwin\") # MacOS\n        if (\"${FPTN_BUILD_WITH_GUI_CLIENT}\")\n            add_custom_target(\n                    build-pkg\n                    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}\n                    COMMAND\n                    bash -c\n                    \"python3 \\\"${CMAKE_CURRENT_SOURCE_DIR}/deploy/macos/create-pkg.py\\\" --fptn-client-cli=\\\"${CMAKE_BINARY_DIR}/src/fptn-client/fptn-client-cli\\\" --fptn-client-gui=\\\"${CMAKE_BINARY_DIR}/src/fptn-client/fptn-client-gui\\\" --version=\\\"${FPTN_VERSION}\\\"\"\n                    COMMENT \"Building .dmg package\"\n                    VERBATIM)\n        endif ()\n    elseif (WIN32)\n        if (\"${FPTN_BUILD_WITH_GUI_CLIENT}\")\n            add_custom_target(\n                    build-installer\n                    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}\n                    COMMAND ${CMAKE_COMMAND} -E echo \"Building installer for Windows...\"\n                    COMMAND\n                    python ${CMAKE_CURRENT_SOURCE_DIR}/deploy/windows/create-installer.py --wintun-dll=${CMAKE_BINARY_DIR}/wintun/wintun.dll\n                    --fptn-client=${CMAKE_BINARY_DIR}/src/fptn-client/Release/fptn-client-gui.exe\n                    --fptn-client-cli=${CMAKE_BINARY_DIR}/src/fptn-client/Release/fptn-client-cli.exe --output-folder=${CMAKE_CURRENT_SOURCE_DIR}\n                    --version=${FPTN_VERSION}\n                    COMMENT \"Building .exe installer\"\n                    VERBATIM)\n        endif ()\n    endif ()\n    # --- tests ---\n    enable_testing()\n    add_subdirectory(tests)\nendif ()\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2024 Stas Skokov\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\r\n\r\n<H1>FPTN</H1>\r\n<H6>Custom VPN technology</H6>\r\n\r\n[\\[English\\]](README.md)\r\n•\r\n[\\[Русский\\]](README_RU.md)\r\n\r\n\r\n[![Ubuntu](https://img.shields.io/badge/Ubuntu-E95420?style=for-the-badge&logo=ubuntu&logoColor=white)](https://github.com/batchar2/fptn/releases)\r\n[![Mac OS](https://img.shields.io/badge/mac%20os-000000?style=for-the-badge&logo=macos&logoColor=F0F0F0)](https://github.com/batchar2/fptn/releases)\r\n[![Windows](https://img.shields.io/badge/Windows-0078D6?style=for-the-badge&logo=windows&logoColor=white)](https://github.com/batchar2/fptn/releases)\r\n[![Android](https://img.shields.io/badge/Android-3DDC84?style=for-the-badge&logo=android&logoColor=white)](https://github.com/batchar2/fptn/releases)\r\n[![Build and Test](https://img.shields.io/github/actions/workflow/status/batchar2/fptn/main.yml?style=for-the-badge&logo=github-actions&logoColor=white&label=Build&labelColor=2088FF)](https://github.com/batchar2/fptn/actions/workflows/main.yml)\r\n[![GitHub All Releases](https://img.shields.io/github/downloads/batchar2/fptn/total.svg?style=for-the-badge&logo=github&logoColor=white&label=Downloads&labelColor=181717)](https://github.com/batchar2/fptn/releases)\r\n</div>\r\n\r\n---\r\n\r\n### Core Features of FPTN\r\n\r\nFPTN is a VPN technology engineered from the ground up to provide secure, robust, and censorship-resistant connections capable of bypassing network filtering and deep packet inspection (DPI).\r\n\r\nProject website: [https://storage.googleapis.com/fptn.org/index.html](https://storage.googleapis.com/fptn.org/index.html)\r\n\r\nKey Technical Features:\r\n\r\n1. **L3 Tunnel (Network Layer)**\r\n  - **IP Packet Tunneling:** Encapsulates and transmits raw IP packets (IPv4/IPv6) over a secure tunnel to the VPN server.\r\n  - **Split Tunneling:** Provides granular control over routing policies. Users can define rules (based on domains or IP networks) to specify which traffic is routed through the VPN tunnel; all other traffic uses the direct internet connection.\r\n  - **Server-side NAT:** Implements Network Address Translation (NAT) on the server. Future roadmap includes support for user grouping into virtual LANs (VLANs) for peer-to-peer communication within the VPN.\r\n\r\n2. **Traffic Obfuscation and Blocking Evasion**\r\n  - **Resistance to active Deep Packet Inspection (DPI):** The server can identify FPTN clients during the TLS handshake by analyzing the session_id (which the FPTN client can set using a special time-based method). If the client is not recognized as an FPTN client, the server acts as a transparent proxy and returns legitimate content for the requested domain.\r\n  - The VPN connection is masqueraded as regular HTTPS traffic (a mode for short-lived HTTPS connections is also under development).\r\n  - Three implemented methods for bypassing blocks:\r\n    - **SNI Spoofing:** A fake domain name is set in the TLS ClientHello packet that initiates the connection. Traffic analysis systems observe a legitimate TLS connection, while the traffic is actually routed to the VPN server.\r\n    - **Obfuscation:** The traffic is disguised as an already established TLS session, hiding the initial TLS handshake and preventing detection by DPI systems.\r\n    - **Reality Mode with SNI Spoofing:** The client initiates a connection to the VPN server using a spoofed Server Name Indication (SNI), receives a genuine TLS handshake response from the actual (spoofed) website, and then continues data exchange with the VPN server within the same connection.\r\n  - The desktop client includes an integrated `SNI scanner utility`.\r\n\r\n3. Transport Protocol\r\n  - Uses a proprietary transport protocol based on Protocol Buffers (Protobuf) for data exchange between the client and server.\r\n  - **Protocol-level padding:** Data packets are padded with random data to randomize traffic patterns and complicate analysis.\r\n  - The server provides a **REST API** for client authentication and retrieving specific configuration settings.\r\n\r\n4. **Advanced Functionality**\r\n  - Built-in filtering of unwanted traffic (e.g., the BitTorrent protocol).\r\n  - Per-user bandwidth and traffic control: The server employs a traffic shaper based on the **Leaky Bucket** algorithm, allowing for granular bandwidth policy configuration.\r\n  - Support for a multi-server architecture with a single master server that stores all user data and configuration.\r\n  - System monitoring via **Prometheus** and visualization dashboards in **Grafana**.\r\n  - Ability for users to connect and manage their service via a **Telegram bot**.\r\n\r\n5. **Cross-Platform Clients**\r\n  - A cross-platform core library, **libfptn**, has been developed for use across various operating systems. It implements the FPTN network protocol, connection management, and data transmission mechanisms for the VPN tunnel.\r\n  - **Desktop Clients**: Windows, macOS, Linux — a minimalist client focused on ease of use.\r\n  - **Mobile Clients**: Android, iOS (under development).\r\n\r\n6. **Simple Token-Based Configuration**\r\n  - A **Token** is a specially generated configuration file containing all necessary settings for the system.\r\n  - Enables connection to the VPN without manual configuration: the user simply imports the token into the client application to begin using the service.\r\n\r\n---\r\n\r\n### Demonstration\r\n\r\nDownload the FPTN client from the [website](http://batchar2.github.io/fptn/) or [GitHub](https://github.com/batchar2/fptn/releases). After downloading, install and launch the client.\r\n\r\nThe client is a compact application whose icon resides in the system tray.\r\n\r\nSimply click the icon to open the context menu.\r\n\r\n<img style=\"max-height: 100px\" class=\"img-center\" src=\"docs/images/macos/en/client.png\" alt=\"Application\"/>\r\n\r\nNavigate to the \"Settings\" menu, where you need to add an access token.\r\nObtain a token by contacting our <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram bot</a>,\r\n\r\n<img style=\"max-height: 200px\" class=\"img-center\" src=\"docs/images/telegram_token_en.png\" alt=\"Settings\"/>\r\n\r\nCopy the token, click the \"Add Token\" button, paste it into the form, and save.\r\n\r\n<img style=\"max-height: 250px\" class=\"img-center\" src=\"docs/images/macos/en/settings-2.png\" alt=\"Settings\"/>\r\n\r\nAfter this, available servers will appear in the list.\r\n\r\n<img style=\"max-height: 250px\" class=\"img-center\" src=\"docs/images/macos/en/settings-3.png\" alt=\"Settings\"/>\r\n\r\nEase of use:\r\n\r\n<img style=\"max-height: 250px\" class=\"img-center\" src=\"docs/images/macos/en/running-client.png\" alt=\"Settings\"/>\r\n\r\nYou can also easily turn your Raspberry Pi or Orange Pi into a WiFi access point and install the FPTN client on it.\r\nIn this case, all devices connected to this WiFi network will be able to access the internet, bypassing any restrictions.\r\n[Read more here](https://github.com/batchar2/fptn/blob/master/deploy/linux/wifi/README.md)\r\n\r\n<img style=\"max-height: 350px\" class=\"img-center\" src=\"docs/images/orangepi.jpg\" alt=\"Settings\"/>\r\n\r\n---\r\n\r\n### Installation, Building, and Configuration\r\n\r\n\r\n<details>\r\n  <summary><strong>Installing and Configuring the FPTN Server</strong></summary>\r\n\r\nSetting up and running your own FPTN server is done via Docker.\r\nThis ensures easy deployment, convenient updates, and environment isolation.\r\nInstructions are available on [DockerHub](https://hub.docker.com/r/fptnvpn/fptn-vpn-server).\r\n\r\nYou can also deploy your own management and monitoring tools:\r\n- **Telegram bot** – issuing tokens to users [sysadmin-tools/telegram-bot/README.md](sysadmin-tools/telegram-bot/README.md).\r\n- **Grafana + Prometheus** – monitoring server and user status [sysadmin-tools/grafana/README.md](sysadmin-tools/grafana/README.md)\r\n\r\n</details>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<details>\r\n  <summary>Building the Project from Source</summary>\r\n\r\n1. Install required dependencies\r\n- For [Windows](deploy/windows/README.md)\r\n- For [Ubuntu](deploy/linux/deb/README.md)\r\n- For [macOS](deploy/macos/README.md)\r\n\r\n2. Install Conan (version 2.24.0):\r\n\r\n```bash\r\npip install conan==2.24.0\r\n```\r\n\r\n3. Detect and configure the Conan profile:\r\n\r\n```bash\r\nconan profile detect --force\r\n```\r\n\r\n4. Install dependencies, build, and install:\r\n\r\n*(For debugging and development purposes, use Debug instead of Release.)*\r\n\r\n```bash\r\nconan install . --output-folder=build --build=missing  -s compiler.cppstd=17 -o with_gui_client=True --settings build_type=Debug\r\n\r\ncd build\r\n\r\n# Linux & macOS only\r\ncmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Debug\r\n# Windows only\r\ncmake .. -G \"Visual Studio 17 2022\" -DCMAKE_TOOLCHAIN_FILE=\"conan_toolchain.cmake\" -DCMAKE_BUILD_TYPE=Debug\r\n\r\ncmake --build . --config Debug\r\nctest\r\n```\r\n\r\n5. Building the Installer\r\n\r\n*(For debugging and development purposes, use Debug instead of Release.)*\r\n\r\n- Windows\r\n\r\n  ```bash\r\n  cmake --build . --config Release --target build-installer\r\n  ```\r\n\r\n- Ubuntu\r\n\r\n  ```bash\r\n  cmake --build . --config Release --target build-deb-gui\r\n  ```\r\n  \r\n- macOS\r\n\r\n  ```bash\r\n  cmake --build . --target build-pkg\r\n  ```\r\n\r\n</details>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<details>\r\n\r\n<summary>Using CLion IDE for Development</summary>\r\n\r\nRun the following command in the project's root folder:\r\n\r\n```bash\r\nconan install . --output-folder=cmake-build-debug --build=missing -s compiler.cppstd=17 -o with_gui_client=True --settings build_type=Debug\r\n```\r\n\r\nOpen the project in CLion. After opening, the Open Project Wizard window will appear automatically. In it, you need to add the following CMake parameter:\r\n\r\n```bash\r\n-DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake\r\n```\r\n\r\n</details>\r\n\r\n---\r\n\r\n### About the Project\r\n\r\nFPTN is developed by a team of volunteers and independent developers.\r\n\r\nIf you wish to support the project, you can donate via [Boosty](https://boosty.to/fptn). Project sponsors have speed limits removed on our servers and (optionally) have their usernames published in FPTN clients.\r\n\r\nOur Telegram chat for users and developers: [FPTN Project](https://t.me/fptn_project)\r\n\r\nJoin the community and the development team!\r\n\r\n---\r\n\r\n## Community Tools\r\n\r\nThe following tools are built and maintained by the community to extend or simplify working with FPTN.\r\n\r\n### fptn-manager\r\n\r\nA small external management tool built around FPTN, focused on simplifying deployment and common day-to-day administrative tasks.\r\n\r\nIt is especially useful for users who prefer not to work directly with Docker commands or internal configuration details.\r\n\r\nIt provides:\r\n- A Docker-based installer\r\n- An interactive CLI for user, password, and token management\r\n- Easier initial setup and repeated operations\r\n\r\nProject repository:  \r\nhttps://github.com/FarazFe/fptn-manager\r\n"
  },
  {
    "path": "README_RU.md",
    "content": "<div align=\"center\">\r\n\r\n<H1>FPTN</H1>\r\n<H6>Custom VPN technology</H6>\r\n\r\n[\\[English\\]](README.md)\r\n•\r\n[\\[Русский\\]](README_RU.md)\r\n\r\n\r\n[![Ubuntu](https://img.shields.io/badge/Ubuntu-E95420?style=for-the-badge&logo=ubuntu&logoColor=white)](https://github.com/batchar2/fptn/releases)\r\n[![Mac OS](https://img.shields.io/badge/mac%20os-000000?style=for-the-badge&logo=macos&logoColor=F0F0F0)](https://github.com/batchar2/fptn/releases)\r\n[![Windows](https://img.shields.io/badge/Windows-0078D6?style=for-the-badge&logo=windows&logoColor=white)](https://github.com/batchar2/fptn/releases)\r\n[![Android](https://img.shields.io/badge/Android-3DDC84?style=for-the-badge&logo=android&logoColor=white)](https://github.com/batchar2/fptn/releases)\r\n[![Build and Test](https://img.shields.io/github/actions/workflow/status/batchar2/fptn/main.yml?style=for-the-badge&logo=github-actions&logoColor=white&label=Build&labelColor=2088FF)](https://github.com/batchar2/fptn/actions/workflows/main.yml)\r\n[![GitHub All Releases](https://img.shields.io/github/downloads/batchar2/fptn/total.svg?style=for-the-badge&logo=github&logoColor=white&label=Downloads&labelColor=181717)](https://github.com/batchar2/fptn/releases)\r\n</div>\r\n\r\n---\r\n\r\n### Основные возможности FPTN\r\n\r\n\r\nFPTN — это VPN-технология, созданная с нуля для безопасного и устойчивого к блокировкам соединения, позволяющего обходить цензуру и сетевую фильтрацию.\r\n\r\nСайт проекта: [https://storage.googleapis.com/fptn.org/index.html](https://storage.googleapis.com/fptn.org/index.html)\r\n\r\nОсновные возможности включают:\r\n\r\n1. **L3-туннель (IP-уровень)**\r\n  - Передача IP-пакетов (IPv4 и IPv6) через VPN-туннель до сервера.\r\n  - Поддержка **split-tunneling** — возможность направлять через VPN только определённый трафик, а остальной трафик идёт напрямую. Позволяет гибко настраивать политику маршрутизации на основе указания правил для доменов и сетей.\r\n  - На серверной стороне реализован **NAT**. В дальнейшем планируется поддержка объединения пользователей в группы с созданием виртуальных локальных сетей для совместного взаимодействия.\r\n\r\n2. **Маскировка трафика и обход блокировок**\r\n  - **Устойчивость к активному DPI**: сервер способен идентифицировать клиентов по TLS-handshake, анализируя session_id (значение которого умеет устанавливать FPTN-клиент по специальному методу от времени). Если определяется, что клиент не является FPTN-клиентом, сервер возвращает легитимный контент запрашиваемого домена, выступая в роли прозрачного прокси.\r\n  - VPN-соединение маскируется под обычный HTTPS-трафик (еще в разработке — режим короткоживущих HTTPS-соединений).\r\n  - Реализованы три метода обхода блокировок:\r\n    1. **Подмена SNI**: в инициирующем соединение TLS-пакете устанавливается поддельный домен. Системы анализа трафика видят легитимное соединение, а на самом деле трафик направляется на VPN-сервер.\r\n    2. **Обфускация**: трафик выглядит как уже установленная TLS-сессия, скрывая TLS-handshake и предотвращая детектирование DPI.\r\n    3. **Reality Mode + SNI**: клиент инициирует соединение с VPN-сервером с подменой SNI, получает реальный TLS-handshake от настоящего сайта, после чего в том же соединении продолжается обмен данными с VPN-сервером.\r\n  - В десктопной версии клиента реализован `сканнер SNI`.\r\n\r\n3. **Транспортный протокол**\r\n  - Используется собственный транспортный протокол на основе **Protobuf** для передачи данных между клиентом и сервером.\r\n  - **Padding на уровне протокола**: пакеты данных дополняются случайными данными для рандомизации трафика и затруднения анализа.\r\n  - Сервер предоставляет **REST API** для авторизации клиентов и получения специальных настроек.\r\n\r\n4. **Специальные возможности**\r\n  - Встроенная фильтрация нежелательного трафика (например, протокол BitTorrent).\r\n  - Контроль скорости и трафика каждого пользователя: сервер включает шейпер на основе алгоритма **Leaky Bucket**, что позволяет гибко настраивать политику скорости.\r\n  - Поддержка многосерверной архитектуры с одним мастер-сервером, где хранится вся информация о пользователях.\r\n  - Мониторинг работы системы через **Prometheus** и визуализация в **Grafana**.\r\n  - Возможность подключения пользователей через **Telegram-бота**.\r\n\r\n5. **Кроссплатформенные клиенты**\r\n  - Разработана кроссплатформенная библиотека **`libfptn`**, которая может использоваться на различных операционных системах. Внутри реализованы сетевой протокол FPTN, управление соединением и механизмы передачи данных через VPN-туннель.\r\n  - **Десктоп:** Windows, macOS, Linux — минималистичный клиент с акцентом на простоту использования.\r\n  - **Мобильные устройства:** Android, iOS (в разработке).\r\n\r\n6. **Простая настройка через токен**\r\n  - **Токен** — это специально сгенерированный конфигурационный файл, который содержит все необходимые настройки системы.\r\n  - Позволяет подключаться к VPN без ручной конфигурации и лишних действий: достаточно добавить токен в клиент, чтобы начать работу.\r\n\r\n---\r\n\r\n### Демонстрация работы\r\n\r\n*🍏🍎Пользователям MacOS рекомендуется ознакомиться с [руководством по установке для macOS](docs/macos/README.md), так как в macOS присутствуют дополнительные меры безопасности, которые могут потребовать особых действий.*\r\n\r\nСкачайте клиент FPTN с [веб-сайта](http://batchar2.github.io/fptn/) или [GitHub](https://github.com/batchar2/fptn/releases). После скачивания установите и запустите клиент.\r\n\r\nКлиент представляет собой компактное приложение, значок которого находится в системном трее.\r\n\r\nПросто нажмите на значок, чтобы открыть контекстное меню.\r\n\r\n<img style=\"max-height: 100px\" class=\"img-center\" src=\"docs/images/macos/ru/client.png\" alt=\"Приложение\"/>\r\n\r\nПерейдите в меню \"Настройки\", где необходимо добавить токен доступа.\r\nПолучите токен, обратившись к нашему <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram-боту</a>,\r\n\r\n<img style=\"max-height: 200px\" class=\"img-center\" src=\"docs/images/telegram_token_ru.png\" alt=\"Настройки\"/>\r\n\r\nСкопируйте токен, нажмите кнопку \"Добавить токен\", вставьте его в форму и сохраните.\r\n\r\n<img style=\"max-height: 250px\" class=\"img-center\" src=\"docs/images/macos/ru/settings-2.png\" alt=\"Настройки\"/>\r\n\r\nПосле этого в списке появятся доступные серверы.\r\n\r\n<img style=\"max-height: 250px\" class=\"img-center\" src=\"docs/images/macos/ru/settings-3.png\" alt=\"Настройки\"/>\r\n\r\nПростота использования:\r\n\r\n<img style=\"max-height: 250px\" class=\"img-center\" src=\"docs/images/macos/ru/running-client.png\" alt=\"Настройки\"/>\r\n\r\nВы также можете легко превратить свой Raspberry Pi или Orange Pi в точку доступа WiFi и установить на него клиент FPTN.\r\nВ этом случае все устройства, подключенные к этой WiFi-сети, смогут выходить в интернет, обходя любые ограничения.\r\n[Подробнее читайте здесь](https://github.com/batchar2/fptn/blob/master/deploy/linux/wifi/README.md)\r\n\r\n<img style=\"max-height: 350px\" class=\"img-center\" src=\"docs/images/orangepi.jpg\" alt=\"Настройки\"/>\r\n\r\n\r\n---\r\n\r\n### Установка, сборка и настройка\r\n\r\n\r\n<details>\r\n  <summary><strong>Установка и настройка FPTN сервера</strong></summary>\r\n\r\nНастройка и запуск собственного сервера FPTN выполняются через Docker.  \r\nЭто обеспечивает простое развертывание, удобное обновление и изоляцию окружения.\r\nИнструкция доступна в [DockerHub](https://hub.docker.com/r/fptnvpn/fptn-vpn-server).\r\n\r\nТак же вы можете развернуть собственные инструменты для управления и мониторинга:\r\n- **Telegram-бот** — выдача токенов пользователмм [sysadmin-tools/telegram-bot/README.md](sysadmin-tools/telegram-bot/README.md).\r\n- **Grafana + Prometheus** — мониторинг состояния серверов и пользователей   [sysadmin-tools/grafana/README.md](sysadmin-tools/grafana/README.md)\r\n\r\n</details>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<details>\r\n  <summary>Сборка проекта из исходников</summary>\r\n\r\n1. Установите требуемые зависимости\r\n- Для [Windows](deploy/windows/README.md)\r\n- Для [Ubuntu](deploy/linux/deb/README.md)\r\n- Для [macOS](deploy/macos/README.md)\r\n\r\n2. Установите Conan (версия 2.24.0):\r\n\r\n```bash\r\npip install conan==2.24.0\r\n```\r\n\r\n3. Определите и настройте профиль Conan:\r\n\r\n```bash\r\nconan profile detect --force\r\n```\r\n\r\n4. Установите зависимости, выполните сборку и установку:\r\n\r\n```bash\r\nconan install . --output-folder=build --build=missing  -s compiler.cppstd=17 -o with_gui_client=True --settings build_type=Release\r\n\r\ncd build\r\n\r\n# Только Linux & macOS\r\ncmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Debug\r\n# Только для Windows\r\ncmake .. -G \"Visual Studio 17 2022\" -DCMAKE_TOOLCHAIN_FILE=\"conan_toolchain.cmake\" -DCMAKE_BUILD_TYPE=Debug\r\n\r\ncmake --build . --config Release\r\nctest\r\n````\r\n\r\n5. Сборка установщика\r\n  - Windows\r\n    \r\n    ```bash\r\n    cmake --build . --config Release --target build-installer\r\n    ```\r\n    \r\n  - Ubuntu\r\n    \r\n    ```bash\r\n    cmake --build . --config Release --target build-deb-gui\r\n    ```\r\n    \r\n  - macOS\r\n  \r\n    ```bash\r\n    cmake --build . --target build-pkg\r\n    ```\r\n\r\n</details>\r\n\r\n<details>\r\n  <summary>Использование CLion IDE для разработки</summary>\r\n\r\nВыполните следующую команду в корневой папке проекта:\r\n\r\n```bash\r\nconan install . --output-folder=cmake-build-debug --build=missing -s compiler.cppstd=17 -o with_gui_client=True --settings build_type=Debug\r\n```\r\n\r\nОткройте проект в CLion. После открытия автоматически появится окно **Open Project Wizard**. В нём необходимо добавить следующий параметр CMake:\r\n\r\n\r\n```bash\r\n-DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake\r\n```\r\n\r\n</details>\r\n\r\n---\r\n\r\n### О проекте\r\n\r\nFPTN развивается командой волонтёров и независимых разработчиков.\r\n\r\nЕсли вы хотите поддержать проект, вы можете оформить донат на [Boosty](https://boosty.to/fptn). Спонсорам проекта снимаем ограничения скорости на наших серверах и (по желанию) публикуем их ники в FPTN-клиентах.\r\n\r\nНаш Telegram-чат для пользователей и разработчиков [FPTN Project](https://t.me/fptn_project)\r\n\r\nПрисоединяйтесь к сообществу и команде разработчиков!\r\n\r\n---\r\n\r\n## Инструменты сообщества\r\n\r\nСледующие инструменты разработаны и поддерживаются сообществом для расширения возможностей или упрощения работы с FPTN.\r\n\r\n### fptn-manager\r\n\r\nНебольшой внешний инструмент управления, построенный вокруг FPTN и ориентированный на упрощение развёртывания и повседневных административных задач.\r\n\r\nОсобенно полезен для пользователей, которые не хотят работать напрямую с Docker-командами или внутренними настройками конфигурации.\r\n\r\nВозможности:\r\n- Установщик на базе Docker\r\n- Интерактивный CLI для управления пользователями, паролями и токенами\r\n- Упрощённая первичная настройка и повторяющиеся операции\r\n\r\nРепозиторий проекта: https://github.com/FarazFe/fptn-manager\r\n"
  },
  {
    "path": "conanfile.py",
    "content": "import os\nimport subprocess\n\nfrom conan import ConanFile\nfrom conan.tools.cmake import CMakeToolchain, CMake\nfrom conan.tools.files import copy\n\n# CI will replace this automatically\nFPTN_VERSION = \"0.0.0\"\n\n\nclass FPTN(ConanFile):\n    name = \"fptn\"\n    version = FPTN_VERSION\n    requires = (\n        \"argparse/3.2\",\n        \"boost/1.90.0\",\n        \"brotli/1.2.0\",\n        \"cpp-httplib/0.30.0\",\n        \"fmt/12.1.0\",\n        \"jwt-cpp/0.7.1\",\n        \"nlohmann_json/3.12.0\",\n        \"protobuf/5.29.3\",\n        \"re2/20251105\",\n        \"spdlog/1.17.0\",\n        \"zlib/1.3.1\",\n    )\n    settings = (\n        \"os\",\n        \"arch\",\n        \"compiler\",\n        \"build_type\",\n    )\n    generators = (\"CMakeDeps\",)\n    options = {\n        \"setup\": [True, False],\n        \"with_gui_client\": [True, False],\n        \"build_only_fptn_lib\": [True, False],\n    }\n    default_options = {\n        # --- program ---\n        \"setup\": False,\n        \"with_gui_client\": False,\n        \"build_only_fptn_lib\": False,\n        # -- depends --\n        \"*:fPIC\": True,\n        \"*:shared\": False,\n        # --- protobuf options ---\n        \"protobuf/*:lite\": True,\n        \"protobuf/*:upb\": False,\n        \"protobuf/*:with_rtti\": False,\n        \"protobuf/*:with_zlib\": False,\n        \"protobuf/*:upb\": False,\n        \"protobuf/*:debug_suffix\": False,\n        # --- boost options ---\n        \"boost/*:without_atomic\": False,\n        \"boost/*:without_system\": False,\n        \"boost/*:without_process\": False,\n        \"boost/*:without_exception\": False,\n        \"boost/*:without_container\": False,\n        \"boost/*:without_filesystem\": False,\n        \"boost/*:without_coroutine\": False,\n        \"boost/*:without_context\": False,\n        \"boost/*:without_timer\": False,\n        \"boost/*:without_json\": False,\n        \"boost/*:without_random\": False,\n        \"boost/*:without_iostreams\": False,\n        \"boost/*:without_chrono\": False,\n        \"boost/*:without_regex\": False,\n        \"boost/*:without_zlib\": False,\n        \"boost/*:without_nowide\": False,\n        \"boost/*:without_locale\": False,\n        \"boost/*:without_thread\": False,\n        \"boost/*:without_python\": True,\n        \"boost/*:without_contract\": True,\n        \"boost/*:without_fiber\": True,\n        \"boost/*:without_graph\": True,\n        \"boost/*:without_graph_parallel\": True,\n        \"boost/*:without_log\": True,\n        \"boost/*:without_math\": True,\n        \"boost/*:without_mpi\": True,\n        \"boost/*:without_program_options\": True,\n        \"boost/*:without_serialization\": True,\n        \"boost/*:without_stacktrace\": True,\n        \"boost/*:without_test\": True,\n        \"boost/*:without_url\": True,\n        \"boost/*:without_type_erasure\": True,\n        \"boost/*:without_wave\": True,\n        # --- Qt ---\n        \"qt/*:shared\": True,\n        \"qt/*:openssl\": False,\n        \"qt/*:qttools\": True,\n        \"qt/*:with_harfbuzz\": False,\n        \"qt/*:with_mysql\": False,\n        \"qt/*:with_pq\": False,\n        \"qt/*:with_odbc\": False,\n        \"qt/*:with_zstd\": False,\n        \"qt/*:with_brotli\": False,\n        \"qt/*:with_dbus\": False,\n        \"qt/*:with_openal\": False,\n        \"qt/*:with_gstreamer\": False,\n        \"qt/*:with_pulseaudio\": False,\n        # --- prometheuscpp dependency ---\n        \"prometheus-cpp/*:with_compression\": False,\n        \"prometheus-cpp/*:with_push\": False,\n        \"civetweb/*:with_ssl\": False,\n        \"civetweb/*:disable_werror\": True,\n        # --- freetype ---\n        \"freetype/*:with_brotli\": False,\n    }\n    exports_sources = (\n        \"CMakeLists.txt\",\n        \"src/*\",\n        \"depends/*\",\n        \"tests/*\",\n    )\n\n    def requirements(self):\n        self._register_local_recipe(\"boringssl\", \"openssl\", \"boringssl\", True, False)\n        if self.options.with_gui_client:\n            self.requires(\"qt/6.7.3\")\n        if self.settings.os != \"Windows\":\n            self.requires(\"meson/1.10.0\", override=True, force=True)\n        if not self.options.build_only_fptn_lib:\n            self.requires(\"libidn2/2.3.8\")\n            self.requires(\"prometheus-cpp/1.3.0\")\n            # pcap++ does not support iOS and Android.\n            # Since libfptn is built as a detached part of the whole project, we don't use pcap++ in that case.\n            self.requires(\"pcapplusplus/25.05\")\n\n    def build_requirements(self):\n        self.build_requires(\"cmake/3.22.0\", override=True)\n        self.tool_requires(\"protobuf/5.29.3\")\n\n        self.test_requires(\"gtest/1.17.0\")\n\n        if self.settings.os != \"Windows\":\n            self.build_requires(\"meson/1.10.0\", override=True)\n\n    def generate(self):\n        tc = CMakeToolchain(self)\n        tc.variables[\"FPTN_VERSION\"] = FPTN_VERSION\n        if self.options.with_gui_client:\n            tc.variables[\"FPTN_BUILD_WITH_GUI_CLIENT\"] = \"True\"\n        if self.options.build_only_fptn_lib:\n            tc.variables[\"FPTN_BUILD_ONLY_FPTN_LIB\"] = \"True\"\n\n        # setup protobuf compiler\n        protobuf_build = self.dependencies.build[\"protobuf\"]\n        protoc_path = os.path.join(protobuf_build.package_folder, \"bin\", \"protoc\")\n        tc.cache_variables[\"Protobuf_PROTOC_EXECUTABLE\"] = protoc_path\n        tc.generate()\n\n    def build(self):\n        cmake = CMake(self)\n        cmake.configure()\n        cmake.build()\n\n    def package(self):\n        if self.options.build_only_fptn_lib:\n            copy(\n                self,\n                \"*.h\",\n                src=os.path.join(self.source_folder, \"src\", \"fptn-protocol-lib\"),\n                dst=os.path.join(self.package_folder, \"include\", \"fptn\"),\n            )\n            copy(\n                self,\n                \"*.h\",\n                src=os.path.join(self.source_folder, \"src\", \"common\"),\n                dst=os.path.join(self.package_folder, \"include\", \"fptn\", \"common\"),\n            )\n            copy(\n                self,\n                \"*.h\",\n                src=os.path.join(self.build_folder, \"src\", \"fptn-protocol-lib\", \"protobuf\"),\n                dst=os.path.join(self.package_folder, \"include\", \"fptn\", \"protobuf\"),\n            )\n            # copy lib\n            copy(\n                self,\n                \"*.a\",\n                src=os.path.join(self.build_folder, \"src\", \"fptn-protocol-lib\"),\n                dst=os.path.join(self.package_folder, \"lib\"),\n            )\n            copy(\n                self,\n                \"*.lib\",\n                src=os.path.join(self.build_folder, \"src\", \"fptn-protocol-lib\"),\n                dst=os.path.join(self.package_folder, \"lib\"),\n            )\n            ntp_client_build_include = os.path.join(self.build_folder, \"_deps\", \"ntp_client-src\", \"include\")\n            # copy NTP depends\n            if os.path.exists(ntp_client_build_include):\n                copy(\n                    self,\n                    \"*.h\",\n                    src=ntp_client_build_include,\n                    dst=os.path.join(self.package_folder, \"include\", \"ntp_client\"),\n                )\n            ntp_client_lib_src = os.path.join(self.build_folder, \"_deps\", \"ntp_client-build\")\n            if os.path.exists(ntp_client_lib_src):\n                copy(\n                    self,\n                    \"*.a\",\n                    src=ntp_client_lib_src,\n                    dst=os.path.join(self.package_folder, \"lib\"),\n                )\n                copy(\n                    self,\n                    \"*.lib\",\n                    src=ntp_client_lib_src,\n                    dst=os.path.join(self.package_folder, \"lib\"),\n                )\n            # copy camouflage-tls depends\n            camouflage_tls_build_include = os.path.join(self.build_folder, \"_deps\", \"camouflagetls-src\", \"include\")\n            if os.path.exists(camouflage_tls_build_include):\n                copy(\n                    self,\n                    \"*.h\",\n                    src=camouflage_tls_build_include,\n                    dst=os.path.join(self.package_folder, \"include\", \"camouflage\"),\n                )\n            camouflage_tls_lib_src = os.path.join(self.build_folder, \"_deps\", \"camouflagetls-build\")\n            if os.path.exists(camouflage_tls_lib_src):\n                copy(\n                    self,\n                    \"*.a\",\n                    src=camouflage_tls_lib_src,\n                    dst=os.path.join(self.package_folder, \"lib\"),\n                )\n                copy(\n                    self,\n                    \"*.lib\",\n                    src=camouflage_tls_lib_src,\n                    dst=os.path.join(self.package_folder, \"lib\"),\n                )\n\n    def package_info(self):\n        if self.options.build_only_fptn_lib:\n            self.cpp_info.libs = [\n                \"fptn-protocol-lib_static\",\n                \"ntp_client\",\n            ]\n            self.cpp_info.includedirs = [\"include\"]\n            self.cpp_info.libdirs = [\"lib\"]\n\n            self.cpp_info.set_property(\"cmake_file_name\", \"fptn\")\n            self.cpp_info.set_property(\"cmake_target_name\", \"fptn::fptn\")\n            self.cpp_info.set_property(\"cmake_find_mode\", \"both\")\n\n            # Add depends\n            self.cpp_info.requires = [\n                \"argparse::argparse\",\n                \"cpp-httplib::cpp-httplib\",\n                \"boost::boost\",\n                \"fmt::fmt\",\n                \"jwt-cpp::jwt-cpp\",\n                \"nlohmann_json::nlohmann_json\",\n                \"protobuf::protobuf\",\n                \"spdlog::spdlog\",\n                \"zlib::zlib\",\n                \"re2::re2\",\n                \"brotli::brotli\",\n            ]\n            if self.settings.os == \"iOS\":\n                self.cpp_info.frameworks = [\"Security\", \"CFNetwork\", \"SystemConfiguration\"]\n                self.cpp_info.system_libs = [\"resolv\"]\n\n    def config_options(self):\n        if self.settings.os == \"Windows\":\n            self.options.rm_safe(\"fPIC\")\n        if self.settings.os in [\"iOS\", \"Android\"] or self.options.build_only_fptn_lib:\n            self.options[\"boost\"].without_process = True\n\n    def export(self):\n        copy(self, f\"*\", src=self.recipe_folder, dst=self.export_folder)\n\n    def _register_local_recipe(self, recipe, name, version, override=False, force=False):\n        script_dir = os.path.dirname(os.path.abspath(__file__))\n        recipe_rel_path = os.path.join(script_dir, \".conan\", \"recipes\", recipe)\n        subprocess.run(\n            [\n                \"conan\",\n                \"export\",\n                recipe_rel_path,\n                f\"--name={name}\",\n                f\"--version={version}\",\n                \"--user=local\",\n                \"--channel=local\",\n            ],\n            check=True,\n        )\n        self.requires(f\"{name}/{version}@local/local\", override=override, force=force)\n"
  },
  {
    "path": "cpplint.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (c) 2009 Google Inc. All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#    * Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n#    * Redistributions in binary form must reproduce the above\n# copyright notice, this list of conditions and the following disclaimer\n# in the documentation and/or other materials provided with the\n# distribution.\n#    * Neither the name of Google Inc. nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\"\"\"Does google-lint on c++ files.\n\nThe goal of this script is to identify places in the code that *may*\nbe in non-compliance with google style.  It does not attempt to fix\nup these problems -- the point is to educate.  It does also not\nattempt to find all problems, or to ensure that everything it does\nfind is legitimately a problem.\n\nIn particular, we can get very confused by /* and // inside strings!\nWe do a small hack, which is to ignore //'s with \"'s after them on the\nsame line, but it is far from perfect (in either direction).\n\"\"\"\n\nfrom __future__ import annotations  # PEP 604 not in 3.9\n\nimport codecs\nimport collections\nimport copy\nimport getopt\nimport glob\nimport itertools\nimport math  # for log\nimport os\nimport re\nimport string\nimport sys\nimport sysconfig\nimport unicodedata\nimport xml.etree.ElementTree\n\n# if empty, use defaults\n_valid_extensions: set[str] = set()\n\n__VERSION__ = \"2.0.2\"\n\n_USAGE = \"\"\"\nSyntax: cpplint.py [--verbose=#] [--output=emacs|eclipse|vs7|junit|sed|gsed]\n                   [--filter=-x,+y,...]\n                   [--counting=total|toplevel|detailed] [--root=subdir]\n                   [--repository=path]\n                   [--linelength=digits] [--headers=x,y,...]\n                   [--recursive]\n                   [--exclude=path]\n                   [--extensions=hpp,cpp,...]\n                   [--includeorder=default|standardcfirst]\n                   [--config=filename]\n                   [--quiet]\n                   [--version]\n        <file> [file] ...\n\n  Style checker for C/C++ source files.\n  This is a fork of the Google style checker with minor extensions.\n\n  The style guidelines this tries to follow are those in\n    https://google.github.io/styleguide/cppguide.html\n\n  Every problem is given a confidence score from 1-5, with 5 meaning we are\n  certain of the problem, and 1 meaning it could be a legitimate construct.\n  This will miss some errors, and is not a substitute for a code review.\n\n  To suppress false-positive errors of certain categories, add a\n  'NOLINT(category[, category...])' comment to the line.  NOLINT or NOLINT(*)\n  suppresses errors of all categories on that line. To suppress categories\n  on the next line use NOLINTNEXTLINE instead of NOLINT. To suppress errors in\n  a block of code 'NOLINTBEGIN(category[, category...])' comment to a line at\n  the start of the block and to end the block add a comment with 'NOLINTEND'.\n  NOLINT blocks are inclusive so any statements on the same line as a BEGIN\n  or END will have the error suppression applied.\n\n  The files passed in will be linted; at least one file must be provided.\n  Default linted extensions are %s.\n  Other file types will be ignored.\n  Change the extensions with the --extensions flag.\n\n  Flags:\n\n    output=emacs|eclipse|vs7|junit|sed|gsed\n      By default, the output is formatted to ease emacs parsing.  Visual Studio\n      compatible output (vs7) may also be used.  Further support exists for\n      eclipse (eclipse), and JUnit (junit). XML parsers such as those used\n      in Jenkins and Bamboo may also be used.\n      The sed format outputs sed commands that should fix some of the errors.\n      Note that this requires gnu sed. If that is installed as gsed on your\n      routing (common e.g. on macOS with homebrew) you can use the gsed output\n      format. Sed commands are written to stdout, not stderr, so you should be\n      able to pipe output straight to a shell to run the fixes.\n\n    verbose=#\n      Specify a number 0-5 to restrict errors to certain verbosity levels.\n      Errors with lower verbosity levels have lower confidence and are more\n      likely to be false positives.\n\n    quiet\n      Don't print anything if no errors are found.\n\n    filter=-x,+y,...\n      Specify a comma-separated list of category-filters to apply: only\n      error messages whose category names pass the filters will be printed.\n      (Category names are printed with the message and look like\n      \"[whitespace/indent]\".)  Filters are evaluated left to right.\n      \"-FOO\" means \"do not print categories that start with FOO\".\n      \"+FOO\" means \"do print categories that start with FOO\".\n\n      Examples: --filter=-whitespace,+whitespace/braces\n                --filter=-whitespace,-runtime/printf,+runtime/printf_format\n                --filter=-,+build/include_what_you_use\n\n      To see a list of all the categories used in cpplint, pass no arg:\n         --filter=\n\n      Filters can directly be limited to files and also line numbers. The\n      syntax is category:file:line , where line is optional. The filter limitation\n      works for both + and - and can be combined with ordinary filters:\n\n      Examples: --filter=-whitespace:foo.h,+whitespace/braces:foo.h\n                --filter=-whitespace,-runtime/printf:foo.h:14,+runtime/printf_format:foo.h\n                --filter=-,+build/include_what_you_use:foo.h:321\n\n    counting=total|toplevel|detailed\n      The total number of errors found is always printed. If\n      'toplevel' is provided, then the count of errors in each of\n      the top-level categories like 'build' and 'whitespace' will\n      also be printed. If 'detailed' is provided, then a count\n      is provided for each category like 'legal/copyright'.\n\n    repository=path\n      The top level directory of the repository, used to derive the header\n      guard CPP variable. By default, this is determined by searching for a\n      path that contains .git, .hg, or .svn. When this flag is specified, the\n      given path is used instead. This option allows the header guard CPP\n      variable to remain consistent even if members of a team have different\n      repository root directories (such as when checking out a subdirectory\n      with SVN). In addition, users of non-mainstream version control systems\n      can use this flag to ensure readable header guard CPP variables.\n\n      Examples:\n        Assuming that Alice checks out ProjectName and Bob checks out\n        ProjectName/trunk and trunk contains src/chrome/ui/browser.h, then\n        with no --repository flag, the header guard CPP variable will be:\n\n        Alice => TRUNK_SRC_CHROME_BROWSER_UI_BROWSER_H_\n        Bob   => SRC_CHROME_BROWSER_UI_BROWSER_H_\n\n        If Alice uses the --repository=trunk flag and Bob omits the flag or\n        uses --repository=. then the header guard CPP variable will be:\n\n        Alice => SRC_CHROME_BROWSER_UI_BROWSER_H_\n        Bob   => SRC_CHROME_BROWSER_UI_BROWSER_H_\n\n    root=subdir\n      The root directory used for deriving header guard CPP variable.\n      This directory is relative to the top level directory of the repository\n      which by default is determined by searching for a directory that contains\n      .git, .hg, or .svn but can also be controlled with the --repository flag.\n      If the specified directory does not exist, this flag is ignored.\n\n      Examples:\n        Assuming that src is the top level directory of the repository (and\n        cwd=top/src), the header guard CPP variables for\n        src/chrome/browser/ui/browser.h are:\n\n        No flag => CHROME_BROWSER_UI_BROWSER_H_\n        --root=chrome => BROWSER_UI_BROWSER_H_\n        --root=chrome/browser => UI_BROWSER_H_\n        --root=.. => SRC_CHROME_BROWSER_UI_BROWSER_H_\n\n    linelength=digits\n      This is the allowed line length for the project. The default value is\n      80 characters.\n\n      Examples:\n        --linelength=120\n\n    recursive\n      Search for files to lint recursively. Each directory given in the list\n      of files to be linted is replaced by all files that descend from that\n      directory. Files with extensions not in the valid extensions list are\n      excluded.\n\n    exclude=path\n      Exclude the given path from the list of files to be linted. Relative\n      paths are evaluated relative to the current directory and shell globbing\n      is performed. This flag can be provided multiple times to exclude\n      multiple files.\n\n      Examples:\n        --exclude=one.cc\n        --exclude=src/*.cc\n        --exclude=src/*.cc --exclude=test/*.cc\n\n    extensions=extension,extension,...\n      The allowed file extensions that cpplint will check\n\n      Examples:\n        --extensions=%s\n\n    includeorder=default|standardcfirst\n      For the build/include_order rule, the default is to blindly assume angle\n      bracket includes with file extension are c-routing-headers (default),\n      even knowing this will have false classifications.\n      The default is established at google.\n      standardcfirst means to instead use an allow-list of known c headers and\n      treat all others as separate group of \"other routing headers\". The C headers\n      included are those of the C-standard lib and closely related ones.\n\n    config=filename\n      Search for config files with the specified name instead of CPPLINT.cfg\n\n    headers=x,y,...\n      The header extensions that cpplint will treat as .h in checks. Values are\n      automatically added to --extensions list.\n     (by default, only files with extensions %s will be assumed to be headers)\n\n      Examples:\n        --headers=%s\n        --headers=hpp,hxx\n        --headers=hpp\n\n    cpplint.py supports per-directory configurations specified in CPPLINT.cfg\n    files. CPPLINT.cfg file can contain a number of key=value pairs.\n    Currently the following options are supported:\n\n      set noparent\n      filter=+filter1,-filter2,...\n      exclude_files=regex\n      linelength=80\n      root=subdir\n      headers=x,y,...\n\n    \"set noparent\" option prevents cpplint from traversing directory tree\n    upwards looking for more .cfg files in parent directories. This option\n    is usually placed in the top-level project directory.\n\n    The \"filter\" option is similar in function to --filter flag. It specifies\n    message filters in addition to the |_DEFAULT_FILTERS| and those specified\n    through --filter command-line flag.\n\n    \"exclude_files\" allows to specify a regular expression to be matched against\n    a file name. If the expression matches, the file is skipped and not run\n    through the linter.\n\n    \"linelength\" allows to specify the allowed line length for the project.\n\n    The \"root\" option is similar in function to the --root flag (see example\n    above). Paths are relative to the directory of the CPPLINT.cfg.\n\n    The \"headers\" option is similar in function to the --headers flag\n    (see example above).\n\n    CPPLINT.cfg has an effect on files in the same directory and all\n    sub-directories, unless overridden by a nested configuration file.\n\n      Example file:\n        filter=-build/include_order,+build/include_alpha\n        exclude_files=.*\\\\.cc\n\n    The above example disables build/include_order warning and enables\n    build/include_alpha as well as excludes all .cc from being\n    processed by linter, in the current directory (where the .cfg\n    file is located) and all sub-directories.\n\"\"\"\n\n# We categorize each error message we print.  Here are the categories.\n# We want an explicit list so we can list them all in cpplint --filter=.\n# If you add a new error message with a new category, add it to the list\n# here!  cpplint_unittest.py should tell you if you forget to do this.\n_ERROR_CATEGORIES = [\n    \"build/c++11\",\n    \"build/c++17\",\n    \"build/deprecated\",\n    \"build/endif_comment\",\n    \"build/explicit_make_pair\",\n    \"build/forward_decl\",\n    \"build/header_guard\",\n    \"build/include\",\n    \"build/include_subdir\",\n    \"build/include_alpha\",\n    \"build/include_order\",\n    \"build/include_what_you_use\",\n    \"build/namespaces_headers\",\n    \"build/namespaces_literals\",\n    \"build/namespaces\",\n    \"build/printf_format\",\n    \"build/storage_class\",\n    \"legal/copyright\",\n    \"readability/alt_tokens\",\n    \"readability/braces\",\n    \"readability/casting\",\n    \"readability/check\",\n    \"readability/constructors\",\n    \"readability/fn_size\",\n    \"readability/inheritance\",\n    \"readability/multiline_comment\",\n    \"readability/multiline_string\",\n    \"readability/namespace\",\n    \"readability/nolint\",\n    \"readability/nul\",\n    \"readability/todo\",\n    \"readability/utf8\",\n    \"runtime/arrays\",\n    \"runtime/casting\",\n    \"runtime/explicit\",\n    \"runtime/int\",\n    \"runtime/init\",\n    \"runtime/invalid_increment\",\n    \"runtime/member_string_references\",\n    \"runtime/memset\",\n    \"runtime/operator\",\n    \"runtime/printf\",\n    \"runtime/printf_format\",\n    \"runtime/references\",\n    \"runtime/string\",\n    \"runtime/threadsafe_fn\",\n    \"runtime/vlog\",\n    \"whitespace/blank_line\",\n    \"whitespace/braces\",\n    \"whitespace/comma\",\n    \"whitespace/comments\",\n    \"whitespace/empty_conditional_body\",\n    \"whitespace/empty_if_body\",\n    \"whitespace/empty_loop_body\",\n    \"whitespace/end_of_line\",\n    \"whitespace/ending_newline\",\n    \"whitespace/forcolon\",\n    \"whitespace/indent\",\n    \"whitespace/indent_namespace\",\n    \"whitespace/line_length\",\n    \"whitespace/newline\",\n    \"whitespace/operators\",\n    \"whitespace/parens\",\n    \"whitespace/semicolon\",\n    \"whitespace/tab\",\n    \"whitespace/todo\",\n]\n\n# keywords to use with --outputs which generate stdout for machine processing\n_MACHINE_OUTPUTS = [\"junit\", \"sed\", \"gsed\"]\n\n# These error categories are no longer enforced by cpplint, but for backwards-\n# compatibility they may still appear in NOLINT comments.\n_LEGACY_ERROR_CATEGORIES = [\n    \"build/class\",\n    \"readability/streams\",\n    \"readability/function\",\n]\n\n# These prefixes for categories should be ignored since they relate to other\n# tools which also use the NOLINT syntax, e.g. clang-tidy.\n_OTHER_NOLINT_CATEGORY_PREFIXES = [\n    \"clang-analyzer-\",\n    \"abseil-\",\n    \"altera-\",\n    \"android-\",\n    \"boost-\",\n    \"bugprone-\",\n    \"cert-\",\n    \"concurrency-\",\n    \"cppcoreguidelines-\",\n    \"darwin-\",\n    \"fuchsia-\",\n    \"google-\",\n    \"hicpp-\",\n    \"linuxkernel-\",\n    \"llvm-\",\n    \"llvmlibc-\",\n    \"misc-\",\n    \"modernize-\",\n    \"mpi-\",\n    \"objc-\",\n    \"openmp-\",\n    \"performance-\",\n    \"portability-\",\n    \"readability-\",\n    \"zircon-\",\n]\n\n# The default state of the category filter. This is overridden by the --filter=\n# flag. By default all errors are on, so only add here categories that should be\n# off by default (i.e., categories that must be enabled by the --filter= flags).\n# All entries here should start with a '-' or '+', as in the --filter= flag.\n_DEFAULT_FILTERS = [\n    \"-build/include_alpha\",\n    \"-readability/fn_size\",\n    \"-runtime/references\",\n]\n\n# The default list of categories suppressed for C (not C++) files.\n_DEFAULT_C_SUPPRESSED_CATEGORIES = [\n    \"readability/casting\",\n]\n\n# The default list of categories suppressed for Linux Kernel files.\n_DEFAULT_KERNEL_SUPPRESSED_CATEGORIES = [\n    \"whitespace/tab\",\n]\n\n# We used to check for high-bit characters, but after much discussion we\n# decided those were OK, as long as they were in UTF-8 and didn't represent\n# hard-coded international strings, which belong in a separate i18n file.\n\n# C++ headers\n_CPP_HEADERS = frozenset(\n    [\n        # Legacy\n        \"algobase.h\",\n        \"algo.h\",\n        \"alloc.h\",\n        \"builtinbuf.h\",\n        \"bvector.h\",\n        # 'complex.h', collides with System C header \"complex.h\" since C11\n        \"defalloc.h\",\n        \"deque.h\",\n        \"editbuf.h\",\n        \"fstream.h\",\n        \"function.h\",\n        \"hash_map\",\n        \"hash_map.h\",\n        \"hash_set\",\n        \"hash_set.h\",\n        \"hashtable.h\",\n        \"heap.h\",\n        \"indstream.h\",\n        \"iomanip.h\",\n        \"iostream.h\",\n        \"istream.h\",\n        \"iterator.h\",\n        \"list.h\",\n        \"map.h\",\n        \"multimap.h\",\n        \"multiset.h\",\n        \"ostream.h\",\n        \"pair.h\",\n        \"parsestream.h\",\n        \"pfstream.h\",\n        \"procbuf.h\",\n        \"pthread_alloc\",\n        \"pthread_alloc.h\",\n        \"rope\",\n        \"rope.h\",\n        \"ropeimpl.h\",\n        \"set.h\",\n        \"slist\",\n        \"slist.h\",\n        \"stack.h\",\n        \"stdiostream.h\",\n        \"stl_alloc.h\",\n        \"stl_relops.h\",\n        \"streambuf.h\",\n        \"stream.h\",\n        \"strfile.h\",\n        \"strstream.h\",\n        \"tempbuf.h\",\n        \"tree.h\",\n        \"type_traits.h\",\n        \"vector.h\",\n        # C++ library headers\n        \"algorithm\",\n        \"array\",\n        \"atomic\",\n        \"bitset\",\n        \"chrono\",\n        \"codecvt\",\n        \"complex\",\n        \"condition_variable\",\n        \"deque\",\n        \"exception\",\n        \"forward_list\",\n        \"fstream\",\n        \"functional\",\n        \"future\",\n        \"initializer_list\",\n        \"iomanip\",\n        \"ios\",\n        \"iosfwd\",\n        \"iostream\",\n        \"istream\",\n        \"iterator\",\n        \"limits\",\n        \"list\",\n        \"locale\",\n        \"map\",\n        \"memory\",\n        \"mutex\",\n        \"new\",\n        \"numeric\",\n        \"ostream\",\n        \"queue\",\n        \"random\",\n        \"ratio\",\n        \"regex\",\n        \"scoped_allocator\",\n        \"set\",\n        \"sstream\",\n        \"stack\",\n        \"stdexcept\",\n        \"streambuf\",\n        \"string\",\n        \"strstream\",\n        \"system_error\",\n        \"thread\",\n        \"tuple\",\n        \"typeindex\",\n        \"typeinfo\",\n        \"type_traits\",\n        \"unordered_map\",\n        \"unordered_set\",\n        \"utility\",\n        \"valarray\",\n        \"vector\",\n        # C++14 headers\n        \"shared_mutex\",\n        # C++17 headers\n        \"any\",\n        \"charconv\",\n        \"codecvt\",\n        \"execution\",\n        \"filesystem\",\n        \"memory_resource\",\n        \"optional\",\n        \"string_view\",\n        \"variant\",\n        # C++20 headers\n        \"barrier\",\n        \"bit\",\n        \"compare\",\n        \"concepts\",\n        \"coroutine\",\n        \"format\",\n        \"latch\",\n        \"numbers\",\n        \"ranges\",\n        \"semaphore\",\n        \"source_location\",\n        \"span\",\n        \"stop_token\",\n        \"syncstream\",\n        \"version\",\n        # C++23 headers\n        \"expected\",\n        \"flat_map\",\n        \"flat_set\",\n        \"generator\",\n        \"mdspan\",\n        \"print\",\n        \"spanstream\",\n        \"stacktrace\",\n        \"stdfloat\",\n        # C++ headers for C library facilities\n        \"cassert\",\n        \"ccomplex\",\n        \"cctype\",\n        \"cerrno\",\n        \"cfenv\",\n        \"cfloat\",\n        \"cinttypes\",\n        \"ciso646\",\n        \"climits\",\n        \"clocale\",\n        \"cmath\",\n        \"csetjmp\",\n        \"csignal\",\n        \"cstdalign\",\n        \"cstdarg\",\n        \"cstdbool\",\n        \"cstddef\",\n        \"cstdint\",\n        \"cstdio\",\n        \"cstdlib\",\n        \"cstring\",\n        \"ctgmath\",\n        \"ctime\",\n        \"cuchar\",\n        \"cwchar\",\n        \"cwctype\",\n    ]\n)\n\n# C headers\n_C_HEADERS = frozenset(\n    [\n        # System C headers\n        \"assert.h\",\n        \"complex.h\",\n        \"ctype.h\",\n        \"errno.h\",\n        \"fenv.h\",\n        \"float.h\",\n        \"inttypes.h\",\n        \"iso646.h\",\n        \"limits.h\",\n        \"locale.h\",\n        \"math.h\",\n        \"setjmp.h\",\n        \"signal.h\",\n        \"stdalign.h\",\n        \"stdarg.h\",\n        \"stdatomic.h\",\n        \"stdbool.h\",\n        \"stddef.h\",\n        \"stdint.h\",\n        \"stdio.h\",\n        \"stdlib.h\",\n        \"stdnoreturn.h\",\n        \"string.h\",\n        \"tgmath.h\",\n        \"threads.h\",\n        \"time.h\",\n        \"uchar.h\",\n        \"wchar.h\",\n        \"wctype.h\",\n        # C23 headers\n        \"stdbit.h\",\n        \"stdckdint.h\",\n        # additional POSIX C headers\n        \"aio.h\",\n        \"arpa/inet.h\",\n        \"cpio.h\",\n        \"dirent.h\",\n        \"dlfcn.h\",\n        \"fcntl.h\",\n        \"fmtmsg.h\",\n        \"fnmatch.h\",\n        \"ftw.h\",\n        \"glob.h\",\n        \"grp.h\",\n        \"iconv.h\",\n        \"langinfo.h\",\n        \"libgen.h\",\n        \"monetary.h\",\n        \"mqueue.h\",\n        \"ndbm.h\",\n        \"net/if.h\",\n        \"netdb.h\",\n        \"netinet/in.h\",\n        \"netinet/tcp.h\",\n        \"nl_types.h\",\n        \"poll.h\",\n        \"pthread.h\",\n        \"pwd.h\",\n        \"regex.h\",\n        \"sched.h\",\n        \"search.h\",\n        \"semaphore.h\",\n        \"setjmp.h\",\n        \"signal.h\",\n        \"spawn.h\",\n        \"strings.h\",\n        \"stropts.h\",\n        \"syslog.h\",\n        \"tar.h\",\n        \"termios.h\",\n        \"trace.h\",\n        \"ulimit.h\",\n        \"unistd.h\",\n        \"utime.h\",\n        \"utmpx.h\",\n        \"wordexp.h\",\n        # additional GNUlib headers\n        \"a.out.h\",\n        \"aliases.h\",\n        \"alloca.h\",\n        \"ar.h\",\n        \"argp.h\",\n        \"argz.h\",\n        \"byteswap.h\",\n        \"crypt.h\",\n        \"endian.h\",\n        \"envz.h\",\n        \"err.h\",\n        \"error.h\",\n        \"execinfo.h\",\n        \"fpu_control.h\",\n        \"fstab.h\",\n        \"fts.h\",\n        \"getopt.h\",\n        \"gshadow.h\",\n        \"ieee754.h\",\n        \"ifaddrs.h\",\n        \"libintl.h\",\n        \"mcheck.h\",\n        \"mntent.h\",\n        \"obstack.h\",\n        \"paths.h\",\n        \"printf.h\",\n        \"pty.h\",\n        \"resolv.h\",\n        \"shadow.h\",\n        \"sysexits.h\",\n        \"ttyent.h\",\n        # Additional linux glibc headers\n        \"dlfcn.h\",\n        \"elf.h\",\n        \"features.h\",\n        \"gconv.h\",\n        \"gnu-versions.h\",\n        \"lastlog.h\",\n        \"libio.h\",\n        \"link.h\",\n        \"malloc.h\",\n        \"memory.h\",\n        \"netash/ash.h\",\n        \"netatalk/at.h\",\n        \"netax25/ax25.h\",\n        \"neteconet/ec.h\",\n        \"netipx/ipx.h\",\n        \"netiucv/iucv.h\",\n        \"netpacket/packet.h\",\n        \"netrom/netrom.h\",\n        \"netrose/rose.h\",\n        \"nfs/nfs.h\",\n        \"nl_types.h\",\n        \"nss.h\",\n        \"re_comp.h\",\n        \"regexp.h\",\n        \"sched.h\",\n        \"sgtty.h\",\n        \"stab.h\",\n        \"stdc-predef.h\",\n        \"stdio_ext.h\",\n        \"syscall.h\",\n        \"termio.h\",\n        \"thread_db.h\",\n        \"ucontext.h\",\n        \"ustat.h\",\n        \"utmp.h\",\n        \"values.h\",\n        \"wait.h\",\n        \"xlocale.h\",\n        # Hardware specific headers\n        \"arm_neon.h\",\n        \"emmintrin.h\",\n        \"xmmintin.h\",\n    ]\n)\n\n# Folders of C libraries so commonly used in C++,\n# that they have parity with standard C libraries.\nC_STANDARD_HEADER_FOLDERS = frozenset(\n    [\n        # standard C library\n        \"sys\",\n        # glibc for linux\n        \"arpa\",\n        \"asm-generic\",\n        \"bits\",\n        \"gnu\",\n        \"net\",\n        \"netinet\",\n        \"protocols\",\n        \"rpc\",\n        \"rpcsvc\",\n        \"scsi\",\n        # linux kernel header\n        \"drm\",\n        \"linux\",\n        \"misc\",\n        \"mtd\",\n        \"rdma\",\n        \"sound\",\n        \"video\",\n        \"xen\",\n    ]\n)\n\n# Type names\n_TYPES = re.compile(\n    r\"^(?:\"\n    # [dcl.type.simple]\n    r\"(char(16_t|32_t)?)|wchar_t|\"\n    r\"bool|short|int|long|signed|unsigned|float|double|\"\n    # [support.types]\n    r\"(ptrdiff_t|size_t|max_align_t|nullptr_t)|\"\n    # [cstdint.syn]\n    r\"(u?int(_fast|_least)?(8|16|32|64)_t)|\"\n    r\"(u?int(max|ptr)_t)|\"\n    r\")$\"\n)\n\n\n# These headers are excluded from [build/include] and [build/include_order]\n# checks:\n# - Anything not following google file name conventions (containing an\n#   uppercase character, such as Python.h or nsStringAPI.h, for example).\n# - Lua headers.\n_THIRD_PARTY_HEADERS_PATTERN = re.compile(r\"^(?:[^/]*[A-Z][^/]*\\.h|lua\\.h|lauxlib\\.h|lualib\\.h)$\")\n\n# Pattern for matching FileInfo.BaseName() against test file name\n_test_suffixes = [\"_test\", \"_regtest\", \"_unittest\"]\n_TEST_FILE_SUFFIX = \"(\" + \"|\".join(_test_suffixes) + r\")$\"\n\n# Pattern that matches only complete whitespace, possibly across multiple lines.\n_EMPTY_CONDITIONAL_BODY_PATTERN = re.compile(r\"^\\s*$\", re.DOTALL)\n\n# Assertion macros.  These are defined in base/logging.h and\n# testing/base/public/gunit.h.\n_CHECK_MACROS = [\n    \"DCHECK\",\n    \"CHECK\",\n    \"EXPECT_TRUE\",\n    \"ASSERT_TRUE\",\n    \"EXPECT_FALSE\",\n    \"ASSERT_FALSE\",\n]\n\n# Replacement macros for CHECK/DCHECK/EXPECT_TRUE/EXPECT_FALSE\n_CHECK_REPLACEMENT: dict[str, dict[str, str]] = {macro_var: {} for macro_var in _CHECK_MACROS}\n\nfor op, replacement in [\n    (\"==\", \"EQ\"),\n    (\"!=\", \"NE\"),\n    (\">=\", \"GE\"),\n    (\">\", \"GT\"),\n    (\"<=\", \"LE\"),\n    (\"<\", \"LT\"),\n]:\n    _CHECK_REPLACEMENT[\"DCHECK\"][op] = f\"DCHECK_{replacement}\"\n    _CHECK_REPLACEMENT[\"CHECK\"][op] = f\"CHECK_{replacement}\"\n    _CHECK_REPLACEMENT[\"EXPECT_TRUE\"][op] = f\"EXPECT_{replacement}\"\n    _CHECK_REPLACEMENT[\"ASSERT_TRUE\"][op] = f\"ASSERT_{replacement}\"\n\nfor op, inv_replacement in [\n    (\"==\", \"NE\"),\n    (\"!=\", \"EQ\"),\n    (\">=\", \"LT\"),\n    (\">\", \"LE\"),\n    (\"<=\", \"GT\"),\n    (\"<\", \"GE\"),\n]:\n    _CHECK_REPLACEMENT[\"EXPECT_FALSE\"][op] = f\"EXPECT_{inv_replacement}\"\n    _CHECK_REPLACEMENT[\"ASSERT_FALSE\"][op] = f\"ASSERT_{inv_replacement}\"\n\n# Alternative tokens and their replacements.  For full list, see section 2.5\n# Alternative tokens [lex.digraph] in the C++ standard.\n#\n# Digraphs (such as '%:') are not included here since it's a mess to\n# match those on a word boundary.\n_ALT_TOKEN_REPLACEMENT = {\n    \"and\": \"&&\",\n    \"bitor\": \"|\",\n    \"or\": \"||\",\n    \"xor\": \"^\",\n    \"compl\": \"~\",\n    \"bitand\": \"&\",\n    \"and_eq\": \"&=\",\n    \"or_eq\": \"|=\",\n    \"xor_eq\": \"^=\",\n    \"not\": \"!\",\n    \"not_eq\": \"!=\",\n}\n\n# Compile regular expression that matches all the above keywords.  The \"[ =()]\"\n# bit is meant to avoid matching these keywords outside of boolean expressions.\n#\n# False positives include C-style multi-line comments and multi-line strings\n# but those have always been troublesome for cpplint.\n_ALT_TOKEN_REPLACEMENT_PATTERN = re.compile(\n    r\"([ =()])(\" + (\"|\".join(_ALT_TOKEN_REPLACEMENT.keys())) + r\")([ (]|$)\"\n)\n\n\n# These constants define types of headers for use with\n# _IncludeState.CheckNextIncludeOrder().\n_C_SYS_HEADER = 1\n_CPP_SYS_HEADER = 2\n_OTHER_SYS_HEADER = 3\n_LIKELY_MY_HEADER = 4\n_POSSIBLE_MY_HEADER = 5\n_OTHER_HEADER = 6\n\n# These constants define the current inline assembly state\n_NO_ASM = 0  # Outside of inline assembly block\n_INSIDE_ASM = 1  # Inside inline assembly block\n_END_ASM = 2  # Last line of inline assembly block\n_BLOCK_ASM = 3  # The whole block is an inline assembly block\n\n# Match start of assembly blocks\n_MATCH_ASM = re.compile(\n    r\"^\\s*(?:asm|_asm|__asm|__asm__)\"\n    r\"(?:\\s+(volatile|__volatile__))?\"\n    r\"\\s*[{(]\"\n)\n\n# Match strings that indicate we're working on a C (not C++) file.\n_SEARCH_C_FILE = re.compile(\n    r\"\\b(?:LINT_C_FILE|\"\n    r\"vim?:\\s*.*(\\s*|:)filetype=c(\\s*|:|$))\"\n)\n\n# Match string that indicates we're working on a Linux Kernel file.\n_SEARCH_KERNEL_FILE = re.compile(r\"\\b(?:LINT_KERNEL_FILE)\")\n\n# Commands for sed to fix the problem\n_SED_FIXUPS = {\n    \"Remove spaces around =\": r\"s/ = /=/\",\n    \"Remove spaces around !=\": r\"s/ != /!=/\",\n    \"Remove space before ( in if (\": r\"s/if (/if(/\",\n    \"Remove space before ( in for (\": r\"s/for (/for(/\",\n    \"Remove space before ( in while (\": r\"s/while (/while(/\",\n    \"Remove space before ( in switch (\": r\"s/switch (/switch(/\",\n    \"Should have a space between // and comment\": r\"s/\\/\\//\\/\\/ /\",\n    \"Missing space before {\": r\"s/\\([^ ]\\){/\\1 {/\",\n    \"Tab found, replace by spaces\": r\"s/\\t/  /g\",\n    \"Line ends in whitespace.  Consider deleting these extra spaces.\": r\"s/\\s*$//\",\n    \"You don't need a ; after a }\": r\"s/};/}/\",\n    \"Missing space after ,\": r\"s/,\\([^ ]\\)/, \\1/g\",\n}\n\n# The root directory used for deriving header guard CPP variable.\n# This is set by --root flag.\n_root = None\n_root_debug = False\n\n# The top level repository directory. If set, _root is calculated relative to\n# this directory instead of the directory containing version control artifacts.\n# This is set by the --repository flag.\n_repository = None\n\n# Files to exclude from linting. This is set by the --exclude flag.\n_excludes = None\n\n# Whether to suppress all PrintInfo messages, UNRELATED to --quiet flag\n_quiet = False\n\n# The allowed line length of files.\n# This is set by --linelength flag.\n_line_length = 80\n\n# This allows to use different include order rule than default\n_include_order = \"default\"\n\n# This allows different config files to be used\n_config_filename = \"CPPLINT.cfg\"\n\n# Treat all headers starting with 'h' equally: .h, .hpp, .hxx etc.\n# This is set by --headers flag.\n_hpp_headers: set[str] = set()\n\n\nclass ErrorSuppressions:\n    \"\"\"Class to track all error suppressions for cpplint\"\"\"\n\n    class LineRange:\n        \"\"\"Class to represent a range of line numbers for which an error is suppressed\"\"\"\n\n        def __init__(self, begin, end):\n            self.begin = begin\n            self.end = end\n\n        def __str__(self):\n            return f\"[{self.begin}-{self.end}]\"\n\n        def __contains__(self, obj):\n            return self.begin <= obj <= self.end\n\n        def ContainsRange(self, other):\n            return self.begin <= other.begin and self.end >= other.end\n\n    def __init__(self):\n        self._suppressions = collections.defaultdict(list)\n        self._open_block_suppression = None\n\n    def _AddSuppression(self, category, line_range):\n        suppressed = self._suppressions[category]\n        if not (suppressed and suppressed[-1].ContainsRange(line_range)):\n            suppressed.append(line_range)\n\n    def GetOpenBlockStart(self):\n        \"\"\":return: The start of the current open block or `-1` if there is not an open block\"\"\"\n        return self._open_block_suppression.begin if self._open_block_suppression else -1\n\n    def AddGlobalSuppression(self, category):\n        \"\"\"Add a suppression for `category` which is suppressed for the whole file\"\"\"\n        self._AddSuppression(category, self.LineRange(0, math.inf))\n\n    def AddLineSuppression(self, category, linenum):\n        \"\"\"Add a suppression for `category` which is suppressed only on `linenum`\"\"\"\n        self._AddSuppression(category, self.LineRange(linenum, linenum))\n\n    def StartBlockSuppression(self, category, linenum):\n        \"\"\"Start a suppression block for `category` on `linenum`. inclusive\"\"\"\n        if self._open_block_suppression is None:\n            self._open_block_suppression = self.LineRange(linenum, math.inf)\n        self._AddSuppression(category, self._open_block_suppression)\n\n    def EndBlockSuppression(self, linenum):\n        \"\"\"End the current block suppression on `linenum`. inclusive\"\"\"\n        if self._open_block_suppression:\n            self._open_block_suppression.end = linenum\n            self._open_block_suppression = None\n\n    def IsSuppressed(self, category, linenum):\n        \"\"\":return: `True` if `category` is suppressed for `linenum`\"\"\"\n        suppressed = self._suppressions[category] + self._suppressions[None]\n        return any(linenum in lr for lr in suppressed)\n\n    def HasOpenBlock(self):\n        \"\"\":return: `True` if a block suppression was started but not ended\"\"\"\n        return self._open_block_suppression is not None\n\n    def Clear(self):\n        \"\"\"Clear all current error suppressions\"\"\"\n        self._suppressions.clear()\n        self._open_block_suppression = None\n\n\n# {str, set(int)}: a map from error categories to sets of linenumbers\n# on which those errors are expected and should be suppressed.\n_error_suppressions = ErrorSuppressions()\n\n\ndef ProcessHppHeadersOption(val):\n    global _hpp_headers\n    try:\n        _hpp_headers = {ext.strip() for ext in val.split(\",\")}\n    except ValueError:\n        PrintUsage(\"Header extensions must be comma separated list.\")\n\n\ndef ProcessIncludeOrderOption(val):\n    if val is None or val == \"default\":\n        pass\n    elif val == \"standardcfirst\":\n        global _include_order\n        _include_order = val\n    else:\n        PrintUsage(\"Invalid includeorder value %s. Expected default|standardcfirst\")\n\n\ndef IsHeaderExtension(file_extension):\n    return file_extension in GetHeaderExtensions()\n\n\ndef GetHeaderExtensions():\n    if _hpp_headers:\n        return _hpp_headers\n    if _valid_extensions:\n        return {h for h in _valid_extensions if \"h\" in h}\n    return {\"h\", \"hh\", \"hpp\", \"hxx\", \"h++\", \"cuh\"}\n\n\n# The allowed extensions for file names\n# This is set by --extensions flag\ndef GetAllExtensions():\n    return GetHeaderExtensions().union(_valid_extensions or {\"c\", \"cc\", \"cpp\", \"cxx\", \"c++\", \"cu\"})\n\n\ndef ProcessExtensionsOption(val):\n    global _valid_extensions\n    try:\n        extensions = [ext.strip() for ext in val.split(\",\")]\n        _valid_extensions = set(extensions)\n    except ValueError:\n        PrintUsage(\n            \"Extensions should be a comma-separated list of values;\"\n            \"for example: extensions=hpp,cpp\\n\"\n            f'This could not be parsed: \"{val}\"'\n        )\n\n\ndef GetNonHeaderExtensions():\n    return GetAllExtensions().difference(GetHeaderExtensions())\n\n\ndef ParseNolintSuppressions(filename, raw_line, linenum, error):\n    \"\"\"Updates the global list of line error-suppressions.\n\n    Parses any NOLINT comments on the current line, updating the global\n    error_suppressions store.  Reports an error if the NOLINT comment\n    was malformed.\n\n    Args:\n      filename: str, the name of the input file.\n      raw_line: str, the line of input text, with comments.\n      linenum: int, the number of the current line.\n      error: function, an error handler.\n    \"\"\"\n    if matched := re.search(r\"\\bNOLINT(NEXTLINE|BEGIN|END)?\\b(\\([^)]+\\))?\", raw_line):\n        no_lint_type = matched.group(1)\n        if no_lint_type == \"NEXTLINE\":\n\n            def ProcessCategory(category):\n                _error_suppressions.AddLineSuppression(category, linenum + 1)\n        elif no_lint_type == \"BEGIN\":\n            if _error_suppressions.HasOpenBlock():\n                error(\n                    filename,\n                    linenum,\n                    \"readability/nolint\",\n                    5,\n                    (\n                        \"NONLINT block already defined on line \"\n                        f\"{_error_suppressions.GetOpenBlockStart()}\"\n                    ),\n                )\n\n            def ProcessCategory(category):\n                _error_suppressions.StartBlockSuppression(category, linenum)\n        elif no_lint_type == \"END\":\n            if not _error_suppressions.HasOpenBlock():\n                error(filename, linenum, \"readability/nolint\", 5, \"Not in a NOLINT block\")\n\n            def ProcessCategory(category):\n                if category is not None:\n                    error(\n                        filename,\n                        linenum,\n                        \"readability/nolint\",\n                        5,\n                        f\"NOLINT categories not supported in block END: {category}\",\n                    )\n                _error_suppressions.EndBlockSuppression(linenum)\n        else:\n\n            def ProcessCategory(category):\n                _error_suppressions.AddLineSuppression(category, linenum)\n\n        categories = matched.group(2)\n        if categories in (None, \"(*)\"):  # => \"suppress all\"\n            ProcessCategory(None)\n        elif categories.startswith(\"(\") and categories.endswith(\")\"):\n            for category in {c.strip() for c in categories[1:-1].split(\",\")}:\n                if category in _ERROR_CATEGORIES:\n                    ProcessCategory(category)\n                elif any(c for c in _OTHER_NOLINT_CATEGORY_PREFIXES if category.startswith(c)):\n                    # Ignore any categories from other tools.\n                    pass\n                elif category not in _LEGACY_ERROR_CATEGORIES:\n                    error(\n                        filename,\n                        linenum,\n                        \"readability/nolint\",\n                        5,\n                        f\"Unknown NOLINT error category: {category}\",\n                    )\n\n\ndef ProcessGlobalSuppressions(filename: str, lines: list[str]) -> None:\n    \"\"\"Updates the list of global error suppressions.\n\n    Parses any lint directives in the file that have global effect.\n\n    Args:\n      lines: An array of strings, each representing a line of the file, with the\n             last element being empty if the file is terminated with a newline.\n      filename: str, the name of the input file.\n    \"\"\"\n    for line in lines:\n        if _SEARCH_C_FILE.search(line) or filename.lower().endswith((\".c\", \".cu\")):\n            for category in _DEFAULT_C_SUPPRESSED_CATEGORIES:\n                _error_suppressions.AddGlobalSuppression(category)\n        if _SEARCH_KERNEL_FILE.search(line):\n            for category in _DEFAULT_KERNEL_SUPPRESSED_CATEGORIES:\n                _error_suppressions.AddGlobalSuppression(category)\n\n\ndef ResetNolintSuppressions():\n    \"\"\"Resets the set of NOLINT suppressions to empty.\"\"\"\n    _error_suppressions.Clear()\n\n\ndef IsErrorSuppressedByNolint(category, linenum):\n    \"\"\"Returns true if the specified error category is suppressed on this line.\n\n    Consults the global error_suppressions map populated by\n    ParseNolintSuppressions/ProcessGlobalSuppressions/ResetNolintSuppressions.\n\n    Args:\n      category: str, the category of the error.\n      linenum: int, the current line number.\n    Returns:\n      bool, True iff the error should be suppressed due to a NOLINT comment,\n      block suppression or global suppression.\n    \"\"\"\n    return _error_suppressions.IsSuppressed(category, linenum)\n\n\ndef _IsSourceExtension(s):\n    \"\"\"File extension (excluding dot) matches a source file extension.\"\"\"\n    return s in GetNonHeaderExtensions()\n\n\nclass _IncludeState:\n    \"\"\"Tracks line numbers for includes, and the order in which includes appear.\n\n    include_list contains list of lists of (header, line number) pairs.\n    It's a lists of lists rather than just one flat list to make it\n    easier to update across preprocessor boundaries.\n\n    Call CheckNextIncludeOrder() once for each header in the file, passing\n    in the type constants defined above. Calls in an illegal order will\n    raise an _IncludeError with an appropriate error message.\n\n    \"\"\"\n\n    # self._section will move monotonically through this set. If it ever\n    # needs to move backwards, CheckNextIncludeOrder will raise an error.\n    _INITIAL_SECTION = 0\n    _MY_H_SECTION = 1\n    _C_SECTION = 2\n    _CPP_SECTION = 3\n    _OTHER_SYS_SECTION = 4\n    _OTHER_H_SECTION = 5\n\n    _TYPE_NAMES = {\n        _C_SYS_HEADER: \"C routing header\",\n        _CPP_SYS_HEADER: \"C++ routing header\",\n        _OTHER_SYS_HEADER: \"other routing header\",\n        _LIKELY_MY_HEADER: \"header this file implements\",\n        _POSSIBLE_MY_HEADER: \"header this file may implement\",\n        _OTHER_HEADER: \"other header\",\n    }\n    _SECTION_NAMES = {\n        _INITIAL_SECTION: \"... nothing. (This can't be an error.)\",\n        _MY_H_SECTION: \"a header this file implements\",\n        _C_SECTION: \"C routing header\",\n        _CPP_SECTION: \"C++ routing header\",\n        _OTHER_SYS_SECTION: \"other routing header\",\n        _OTHER_H_SECTION: \"other header\",\n    }\n\n    def __init__(self):\n        self.include_list = [[]]\n        self._section = None\n        self._last_header = None\n        self.ResetSection(\"\")\n\n    def FindHeader(self, header):\n        \"\"\"Check if a header has already been included.\n\n        Args:\n          header: header to check.\n        Returns:\n          Line number of previous occurrence, or -1 if the header has not\n          been seen before.\n        \"\"\"\n        for section_list in self.include_list:\n            for f in section_list:\n                if f[0] == header:\n                    return f[1]\n        return -1\n\n    def ResetSection(self, directive):\n        \"\"\"Reset section checking for preprocessor directive.\n\n        Args:\n          directive: preprocessor directive (e.g. \"if\", \"else\").\n        \"\"\"\n        # The name of the current section.\n        self._section = self._INITIAL_SECTION\n        # The path of last found header.\n        self._last_header = \"\"\n\n        # Update list of includes.  Note that we never pop from the\n        # include list.\n        if directive in (\"if\", \"ifdef\", \"ifndef\"):\n            self.include_list.append([])\n        elif directive in (\"else\", \"elif\"):\n            self.include_list[-1] = []\n\n    def SetLastHeader(self, header_path):\n        self._last_header = header_path\n\n    def CanonicalizeAlphabeticalOrder(self, header_path):\n        \"\"\"Returns a path canonicalized for alphabetical comparison.\n\n        - replaces \"-\" with \"_\" so they both cmp the same.\n        - removes '-inl' since we don't require them to be after the main header.\n        - lowercase everything, just in case.\n\n        Args:\n          header_path: Path to be canonicalized.\n\n        Returns:\n          Canonicalized path.\n        \"\"\"\n        return header_path.replace(\"-inl.h\", \".h\").replace(\"-\", \"_\").lower()\n\n    def IsInAlphabeticalOrder(self, clean_lines, linenum, header_path):\n        \"\"\"Check if a header is in alphabetical order with the previous header.\n\n        Args:\n          clean_lines: A CleansedLines instance containing the file.\n          linenum: The number of the line to check.\n          header_path: Canonicalized header to be checked.\n\n        Returns:\n          Returns true if the header is in alphabetical order.\n        \"\"\"\n        # If previous section is different from current section, _last_header will\n        # be reset to empty string, so it's always less than current header.\n        #\n        # If previous line was a blank line, assume that the headers are\n        # intentionally sorted the way they are.\n        return not (\n            self._last_header > header_path\n            and re.match(r\"^\\s*#\\s*include\\b\", clean_lines.elided[linenum - 1])\n        )\n\n    def CheckNextIncludeOrder(self, header_type):\n        \"\"\"Returns a non-empty error message if the next header is out of order.\n\n        This function also updates the internal state to be ready to check\n        the next include.\n\n        Args:\n          header_type: One of the _XXX_HEADER constants defined above.\n\n        Returns:\n          The empty string if the header is in the right order, or an\n          error message describing what's wrong.\n\n        \"\"\"\n        error_message = (\n            f\"Found {self._TYPE_NAMES[header_type]} after {self._SECTION_NAMES[self._section]}\"\n        )\n\n        last_section = self._section\n\n        if header_type == _C_SYS_HEADER:\n            if self._section <= self._C_SECTION:\n                self._section = self._C_SECTION\n            else:\n                self._last_header = \"\"\n                return error_message\n        elif header_type == _CPP_SYS_HEADER:\n            if self._section <= self._CPP_SECTION:\n                self._section = self._CPP_SECTION\n            else:\n                self._last_header = \"\"\n                return error_message\n        elif header_type == _OTHER_SYS_HEADER:\n            if self._section <= self._OTHER_SYS_SECTION:\n                self._section = self._OTHER_SYS_SECTION\n            else:\n                self._last_header = \"\"\n                return error_message\n        elif header_type == _LIKELY_MY_HEADER:\n            if self._section <= self._MY_H_SECTION:\n                self._section = self._MY_H_SECTION\n            else:\n                self._section = self._OTHER_H_SECTION\n        elif header_type == _POSSIBLE_MY_HEADER:\n            if self._section <= self._MY_H_SECTION:\n                self._section = self._MY_H_SECTION\n            else:\n                # This will always be the fallback because we're not sure\n                # enough that the header is associated with this file.\n                self._section = self._OTHER_H_SECTION\n        else:\n            assert header_type == _OTHER_HEADER\n            self._section = self._OTHER_H_SECTION\n\n        if last_section != self._section:\n            self._last_header = \"\"\n\n        return \"\"\n\n\nclass _CppLintState:\n    \"\"\"Maintains module-wide state..\"\"\"\n\n    def __init__(self):\n        self.verbose_level = 1  # global setting.\n        self.error_count = 0  # global count of reported errors\n        # filters to apply when emitting error messages\n        self.filters = _DEFAULT_FILTERS[:]\n        # backup of filter list. Used to restore the state after each file.\n        self._filters_backup = self.filters[:]\n        self.counting = \"total\"  # In what way are we counting errors?\n        self.errors_by_category = {}  # string to int dict storing error counts\n        self.quiet = False  # Suppress non-error messages?\n\n        # output format:\n        # \"emacs\" - format that emacs can parse (default)\n        # \"eclipse\" - format that eclipse can parse\n        # \"vs7\" - format that Microsoft Visual Studio 7 can parse\n        # \"junit\" - format that Jenkins, Bamboo, etc can parse\n        # \"sed\" - returns a gnu sed command to fix the problem\n        # \"gsed\" - like sed, but names the command gsed, e.g. for macOS homebrew users\n        self.output_format = \"emacs\"\n\n        # For JUnit output, save errors and failures until the end so that they\n        # can be written into the XML\n        self._junit_errors = []\n        self._junit_failures = []\n\n    def SetOutputFormat(self, output_format):\n        \"\"\"Sets the output format for errors.\"\"\"\n        self.output_format = output_format\n\n    def SetQuiet(self, quiet):\n        \"\"\"Sets the module's quiet settings, and returns the previous setting.\"\"\"\n        last_quiet = self.quiet\n        self.quiet = quiet\n        return last_quiet\n\n    def SetVerboseLevel(self, level):\n        \"\"\"Sets the module's verbosity, and returns the previous setting.\"\"\"\n        last_verbose_level = self.verbose_level\n        self.verbose_level = level\n        return last_verbose_level\n\n    def SetCountingStyle(self, counting_style):\n        \"\"\"Sets the module's counting options.\"\"\"\n        self.counting = counting_style\n\n    def SetFilters(self, filters):\n        \"\"\"Sets the error-message filters.\n\n        These filters are applied when deciding whether to emit a given\n        error message.\n\n        Args:\n          filters: A string of comma-separated filters (eg \"+whitespace/indent\").\n                   Each filter should start with + or -; else we die.\n\n        Raises:\n          ValueError: The comma-separated filters did not all start with '+' or '-'.\n                      E.g. \"-,+whitespace,-whitespace/indent,whitespace/badfilter\"\n        \"\"\"\n        # Default filters always have less priority than the flag ones.\n        self.filters = _DEFAULT_FILTERS[:]\n        self.AddFilters(filters)\n\n    def AddFilters(self, filters):\n        \"\"\"Adds more filters to the existing list of error-message filters.\"\"\"\n        for filt in filters.split(\",\"):\n            clean_filt = filt.strip()\n            if clean_filt:\n                self.filters.append(clean_filt)\n        for filt in self.filters:\n            if not filt.startswith((\"+\", \"-\")):\n                msg = f\"Every filter in --filters must start with + or - ({filt} does not)\"\n                raise ValueError(msg)\n\n    def BackupFilters(self):\n        \"\"\"Saves the current filter list to backup storage.\"\"\"\n        self._filters_backup = self.filters[:]\n\n    def RestoreFilters(self):\n        \"\"\"Restores filters previously backed up.\"\"\"\n        self.filters = self._filters_backup[:]\n\n    def ResetErrorCounts(self):\n        \"\"\"Sets the module's error statistic back to zero.\"\"\"\n        self.error_count = 0\n        self.errors_by_category = {}\n\n    def IncrementErrorCount(self, category):\n        \"\"\"Bumps the module's error statistic.\"\"\"\n        self.error_count += 1\n        if self.counting in (\"toplevel\", \"detailed\"):\n            if self.counting != \"detailed\":\n                category = category.split(\"/\")[0]\n            if category not in self.errors_by_category:\n                self.errors_by_category[category] = 0\n            self.errors_by_category[category] += 1\n\n    def PrintErrorCounts(self):\n        \"\"\"Print a summary of errors by category, and the total.\"\"\"\n        for category, count in sorted(dict.items(self.errors_by_category)):\n            self.PrintInfo(f\"Category '{category}' errors found: {count}\\n\")\n        if self.error_count > 0:\n            self.PrintInfo(f\"Total errors found: {self.error_count}\\n\")\n\n    def PrintInfo(self, message):\n        # _quiet does not represent --quiet flag.\n        # Hide infos from stdout to keep stdout pure for machine consumption\n        if not _quiet and self.output_format not in _MACHINE_OUTPUTS:\n            sys.stdout.write(message)\n\n    def PrintError(self, message):\n        if self.output_format == \"junit\":\n            self._junit_errors.append(message)\n        else:\n            sys.stderr.write(message)\n\n    def AddJUnitFailure(self, filename, linenum, message, category, confidence):\n        self._junit_failures.append((filename, linenum, message, category, confidence))\n\n    def FormatJUnitXML(self):\n        num_errors = len(self._junit_errors)\n        num_failures = len(self._junit_failures)\n\n        testsuite = xml.etree.ElementTree.Element(\"testsuite\")\n        testsuite.attrib[\"errors\"] = str(num_errors)\n        testsuite.attrib[\"failures\"] = str(num_failures)\n        testsuite.attrib[\"name\"] = \"cpplint\"\n\n        if num_errors == 0 and num_failures == 0:\n            testsuite.attrib[\"tests\"] = str(1)\n            xml.etree.ElementTree.SubElement(testsuite, \"testcase\", name=\"passed\")\n\n        else:\n            testsuite.attrib[\"tests\"] = str(num_errors + num_failures)\n            if num_errors > 0:\n                testcase = xml.etree.ElementTree.SubElement(testsuite, \"testcase\")\n                testcase.attrib[\"name\"] = \"errors\"\n                error = xml.etree.ElementTree.SubElement(testcase, \"error\")\n                error.text = \"\\n\".join(self._junit_errors)\n            if num_failures > 0:\n                # Group failures by file\n                failed_file_order = []\n                failures_by_file = {}\n                for failure in self._junit_failures:\n                    failed_file = failure[0]\n                    if failed_file not in failed_file_order:\n                        failed_file_order.append(failed_file)\n                        failures_by_file[failed_file] = []\n                    failures_by_file[failed_file].append(failure)\n                # Create a testcase for each file\n                for failed_file in failed_file_order:\n                    failures = failures_by_file[failed_file]\n                    testcase = xml.etree.ElementTree.SubElement(testsuite, \"testcase\")\n                    testcase.attrib[\"name\"] = failed_file\n                    failure = xml.etree.ElementTree.SubElement(testcase, \"failure\")\n                    template = \"{0}: {1} [{2}] [{3}]\"\n                    texts = [template.format(f[1], f[2], f[3], f[4]) for f in failures]\n                    failure.text = \"\\n\".join(texts)\n\n        xml_decl = '<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\\n'\n        return xml_decl + xml.etree.ElementTree.tostring(testsuite, \"utf-8\").decode(\"utf-8\")\n\n\n_cpplint_state = _CppLintState()\n\n\ndef _OutputFormat():\n    \"\"\"Gets the module's output format.\"\"\"\n    return _cpplint_state.output_format\n\n\ndef _SetOutputFormat(output_format):\n    \"\"\"Sets the module's output format.\"\"\"\n    _cpplint_state.SetOutputFormat(output_format)\n\n\ndef _Quiet():\n    \"\"\"Return's the module's quiet setting.\"\"\"\n    return _cpplint_state.quiet\n\n\ndef _SetQuiet(quiet):\n    \"\"\"Set the module's quiet status, and return previous setting.\"\"\"\n    return _cpplint_state.SetQuiet(quiet)\n\n\ndef _VerboseLevel():\n    \"\"\"Returns the module's verbosity setting.\"\"\"\n    return _cpplint_state.verbose_level\n\n\ndef _SetVerboseLevel(level):\n    \"\"\"Sets the module's verbosity, and returns the previous setting.\"\"\"\n    return _cpplint_state.SetVerboseLevel(level)\n\n\ndef _SetCountingStyle(level):\n    \"\"\"Sets the module's counting options.\"\"\"\n    _cpplint_state.SetCountingStyle(level)\n\n\ndef _Filters():\n    \"\"\"Returns the module's list of output filters, as a list.\"\"\"\n    return _cpplint_state.filters\n\n\ndef _SetFilters(filters):\n    \"\"\"Sets the module's error-message filters.\n\n    These filters are applied when deciding whether to emit a given\n    error message.\n\n    Args:\n      filters: A string of comma-separated filters (eg \"whitespace/indent\").\n               Each filter should start with + or -; else we die.\n    \"\"\"\n    _cpplint_state.SetFilters(filters)\n\n\ndef _AddFilters(filters):\n    \"\"\"Adds more filter overrides.\n\n    Unlike _SetFilters, this function does not reset the current list of filters\n    available.\n\n    Args:\n      filters: A string of comma-separated filters (eg \"whitespace/indent\").\n               Each filter should start with + or -; else we die.\n    \"\"\"\n    _cpplint_state.AddFilters(filters)\n\n\ndef _BackupFilters():\n    \"\"\"Saves the current filter list to backup storage.\"\"\"\n    _cpplint_state.BackupFilters()\n\n\ndef _RestoreFilters():\n    \"\"\"Restores filters previously backed up.\"\"\"\n    _cpplint_state.RestoreFilters()\n\n\nclass _FunctionState:\n    \"\"\"Tracks current function name and the number of lines in its body.\"\"\"\n\n    _NORMAL_TRIGGER = 250  # for --v=0, 500 for --v=1, etc.\n    _TEST_TRIGGER = 400  # about 50% more than _NORMAL_TRIGGER.\n\n    def __init__(self):\n        self.in_a_function = False\n        self.lines_in_function = 0\n        self.current_function = \"\"\n\n    def Begin(self, function_name):\n        \"\"\"Start analyzing function body.\n\n        Args:\n          function_name: The name of the function being tracked.\n        \"\"\"\n        self.in_a_function = True\n        self.lines_in_function = 0\n        self.current_function = function_name\n\n    def Count(self):\n        \"\"\"Count line in current function body.\"\"\"\n        if self.in_a_function:\n            self.lines_in_function += 1\n\n    def Check(self, error, filename, linenum):\n        \"\"\"Report if too many lines in function body.\n\n        Args:\n          error: The function to call with any errors found.\n          filename: The name of the current file.\n          linenum: The number of the line to check.\n        \"\"\"\n        if not self.in_a_function:\n            return\n\n        if re.match(r\"T(EST|est)\", self.current_function):\n            base_trigger = self._TEST_TRIGGER\n        else:\n            base_trigger = self._NORMAL_TRIGGER\n        trigger = base_trigger * 2 ** _VerboseLevel()\n\n        if self.lines_in_function > trigger:\n            error_level = int(math.log2(self.lines_in_function / base_trigger))\n            # 50 => 0, 100 => 1, 200 => 2, 400 => 3, 800 => 4, 1600 => 5, ...\n            error_level = min(error_level, 5)\n            error(\n                filename,\n                linenum,\n                \"readability/fn_size\",\n                error_level,\n                \"Small and focused functions are preferred:\"\n                f\" {self.current_function} has {self.lines_in_function} non-comment lines\"\n                f\" (error triggered by exceeding {trigger} lines).\",\n            )\n\n    def End(self):\n        \"\"\"Stop analyzing function body.\"\"\"\n        self.in_a_function = False\n\n\nclass _IncludeError(Exception):\n    \"\"\"Indicates a problem with the include order in a file.\"\"\"\n\n    pass\n\n\nclass FileInfo:\n    \"\"\"Provides utility functions for filenames.\n\n    FileInfo provides easy access to the components of a file's path\n    relative to the project root.\n    \"\"\"\n\n    def __init__(self, filename):\n        self._filename = filename\n\n    def FullName(self):\n        \"\"\"Make Windows paths like Unix.\"\"\"\n        return os.path.abspath(self._filename).replace(\"\\\\\", \"/\")\n\n    def RepositoryName(self):\n        r\"\"\"FullName after removing the local path to the repository.\n\n        If we have a real absolute path name here we can try to do something smart:\n        detecting the root of the checkout and truncating /path/to/checkout from\n        the name so that we get header guards that don't include things like\n        \"C:\\\\Documents and Settings\\\\...\" or \"/home/username/...\" in them and thus\n        people on different computers who have checked the source out to different\n        locations won't see bogus errors.\n        \"\"\"\n        fullname = self.FullName()\n\n        if os.path.exists(fullname):\n            project_dir = os.path.dirname(fullname)\n\n            # If the user specified a repository path, it exists, and the file is\n            # contained in it, use the specified repository path\n            if _repository:\n                repo = FileInfo(_repository).FullName()\n                root_dir = project_dir\n                while os.path.exists(root_dir):\n                    # allow case insensitive compare on Windows\n                    if os.path.normcase(root_dir) == os.path.normcase(repo):\n                        return os.path.relpath(fullname, root_dir).replace(\"\\\\\", \"/\")\n                    one_up_dir = os.path.dirname(root_dir)\n                    if one_up_dir == root_dir:\n                        break\n                    root_dir = one_up_dir\n\n            if os.path.exists(os.path.join(project_dir, \".svn\")):\n                # If there's a .svn file in the current directory, we recursively look\n                # up the directory tree for the top of the SVN checkout\n                root_dir = project_dir\n                one_up_dir = os.path.dirname(root_dir)\n                while os.path.exists(os.path.join(one_up_dir, \".svn\")):\n                    root_dir = os.path.dirname(root_dir)\n                    one_up_dir = os.path.dirname(one_up_dir)\n\n                prefix = os.path.commonprefix([root_dir, project_dir])\n                return fullname[len(prefix) + 1 :]\n\n            # Not SVN <= 1.6? Try to find a git, hg, or svn top level directory by\n            # searching up from the current path.\n            root_dir = current_dir = os.path.dirname(fullname)\n            while current_dir != os.path.dirname(current_dir):\n                if (\n                    os.path.exists(os.path.join(current_dir, \".git\"))\n                    or os.path.exists(os.path.join(current_dir, \".hg\"))\n                    or os.path.exists(os.path.join(current_dir, \".svn\"))\n                ):\n                    root_dir = current_dir\n                    break\n                current_dir = os.path.dirname(current_dir)\n\n            if (\n                os.path.exists(os.path.join(root_dir, \".git\"))\n                or os.path.exists(os.path.join(root_dir, \".hg\"))\n                or os.path.exists(os.path.join(root_dir, \".svn\"))\n            ):\n                prefix = os.path.commonprefix([root_dir, project_dir])\n                return fullname[len(prefix) + 1 :]\n\n        # Don't know what to do; header guard warnings may be wrong...\n        return fullname\n\n    def Split(self):\n        \"\"\"Splits the file into the directory, basename, and extension.\n\n        For 'chrome/browser/browser.cc', Split() would\n        return ('chrome/browser', 'browser', '.cc')\n\n        Returns:\n          A tuple of (directory, basename, extension).\n        \"\"\"\n\n        googlename = self.RepositoryName()\n        project, rest = os.path.split(googlename)\n        return (project,) + os.path.splitext(rest)\n\n    def BaseName(self):\n        \"\"\"File base name - text after the final slash, before the final period.\"\"\"\n        return self.Split()[1]\n\n    def Extension(self):\n        \"\"\"File extension - text following the final period, includes that period.\"\"\"\n        return self.Split()[2]\n\n    def NoExtension(self):\n        \"\"\"File has no source file extension.\"\"\"\n        return \"/\".join(self.Split()[0:2])\n\n    def IsSource(self):\n        \"\"\"File has a source file extension.\"\"\"\n        return _IsSourceExtension(self.Extension()[1:])\n\n\ndef _ShouldPrintError(category, confidence, filename, linenum):\n    \"\"\"If confidence >= verbose, category passes filter and is not suppressed.\"\"\"\n\n    # There are three ways we might decide not to print an error message:\n    # a \"NOLINT(category)\" comment appears in the source,\n    # the verbosity level isn't high enough, or the filters filter it out.\n    if IsErrorSuppressedByNolint(category, linenum):\n        return False\n\n    if confidence < _cpplint_state.verbose_level:\n        return False\n\n    is_filtered = False\n    for one_filter in _Filters():\n        filter_cat, filter_file, filter_line = _ParseFilterSelector(one_filter[1:])\n        category_match = category.startswith(filter_cat)\n        file_match = filter_file in (\"\", filename)\n        line_match = filter_line in (linenum, -1)\n\n        if one_filter.startswith(\"-\"):\n            if category_match and file_match and line_match:\n                is_filtered = True\n        elif one_filter.startswith(\"+\"):\n            if category_match and file_match and line_match:\n                is_filtered = False\n        else:\n            # should have been checked for in SetFilter.\n            msg = f\"Invalid filter: {one_filter}\"\n            raise ValueError(msg)\n    return not is_filtered\n\n\ndef Error(filename, linenum, category, confidence, message):\n    \"\"\"Logs the fact we've found a lint error.\n\n    We log where the error was found, and also our confidence in the error,\n    that is, how certain we are this is a legitimate style regression, and\n    not a misidentification or a use that's sometimes justified.\n\n    False positives can be suppressed by the use of \"NOLINT(category)\"\n    comments, NOLINTNEXTLINE or in blocks started by NOLINTBEGIN.  These\n    are parsed into _error_suppressions.\n\n    Args:\n      filename: The name of the file containing the error.\n      linenum: The number of the line containing the error.\n      category: A string used to describe the \"category\" this bug\n        falls under: \"whitespace\", say, or \"runtime\".  Categories\n        may have a hierarchy separated by slashes: \"whitespace/indent\".\n      confidence: A number from 1-5 representing a confidence score for\n        the error, with 5 meaning that we are certain of the problem,\n        and 1 meaning that it could be a legitimate construct.\n      message: The error message.\n    \"\"\"\n    if _ShouldPrintError(category, confidence, filename, linenum):\n        _cpplint_state.IncrementErrorCount(category)\n        if _cpplint_state.output_format == \"vs7\":\n            _cpplint_state.PrintError(\n                f\"{filename}({linenum}): error cpplint: [{category}] {message} [{confidence}]\\n\"\n            )\n        elif _cpplint_state.output_format == \"eclipse\":\n            sys.stderr.write(\n                f\"{filename}:{linenum}: warning: {message}  [{category}] [{confidence}]\\n\"\n            )\n        elif _cpplint_state.output_format == \"junit\":\n            _cpplint_state.AddJUnitFailure(filename, linenum, message, category, confidence)\n        elif _cpplint_state.output_format in [\"sed\", \"gsed\"]:\n            if message in _SED_FIXUPS:\n                sys.stdout.write(\n                    f\"{_cpplint_state.output_format} -i\"\n                    f\" '{linenum}{_SED_FIXUPS[message]}' {filename}\"\n                    f\" # {message}  [{category}] [{confidence}]\\n\"\n                )\n            else:\n                sys.stderr.write(\n                    f'# {filename}:{linenum}:  \"{message}\"  [{category}] [{confidence}]\\n'\n                )\n        else:\n            final_message = f\"{filename}:{linenum}:  {message}  [{category}] [{confidence}]\\n\"\n            sys.stderr.write(final_message)\n\n\n# Matches standard C++ escape sequences per 2.13.2.3 of the C++ standard.\n_RE_PATTERN_CLEANSE_LINE_ESCAPES = re.compile(r'\\\\([abfnrtv?\"\\\\\\']|\\d+|x[0-9a-fA-F]+)')\n# Match a single C style comment on the same line.\n_RE_PATTERN_C_COMMENTS = r\"/\\*(?:[^*]|\\*(?!/))*\\*/\"\n# Matches multi-line C style comments.\n# This RE is a little bit more complicated than one might expect, because we\n# have to take care of space removals tools so we can handle comments inside\n# statements better.\n# The current rule is: We only clear spaces from both sides when we're at the\n# end of the line. Otherwise, we try to remove spaces from the right side,\n# if this doesn't work we try on left side but only if there's a non-character\n# on the right.\n_RE_PATTERN_CLEANSE_LINE_C_COMMENTS = re.compile(\n    r\"(\\s*\"\n    + _RE_PATTERN_C_COMMENTS\n    + r\"\\s*$|\"\n    + _RE_PATTERN_C_COMMENTS\n    + r\"\\s+|\"\n    + r\"\\s+\"\n    + _RE_PATTERN_C_COMMENTS\n    + r\"(?=\\W)|\"\n    + _RE_PATTERN_C_COMMENTS\n    + r\")\"\n)\n\n\ndef IsCppString(line):\n    \"\"\"Does line terminate so, that the next symbol is in string constant.\n\n    This function does not consider single-line nor multi-line comments.\n\n    Args:\n      line: is a partial line of code starting from the 0..n.\n\n    Returns:\n      True, if next character appended to 'line' is inside a\n      string constant.\n    \"\"\"\n\n    line = line.replace(r\"\\\\\", \"XX\")  # after this, \\\\\" does not match to \\\"\n    return ((line.count('\"') - line.count(r\"\\\"\") - line.count(\"'\\\"'\")) & 1) == 1\n\n\ndef CleanseRawStrings(raw_lines):\n    \"\"\"Removes C++11 raw strings from lines.\n\n      Before:\n        static const char kData[] = R\"(\n            multi-line string\n            )\";\n\n      After:\n        static const char kData[] = \"\"\n            (replaced by blank line)\n            \"\";\n\n    Args:\n      raw_lines: list of raw lines.\n\n    Returns:\n      list of lines with C++11 raw strings replaced by empty strings.\n    \"\"\"\n\n    delimiter = None\n    lines_without_raw_strings = []\n    for line in raw_lines:\n        if delimiter:\n            # Inside a raw string, look for the end\n            end = line.find(delimiter)\n            if end >= 0:\n                # Found the end of the string, match leading space for this\n                # line and resume copying the original lines, and also insert\n                # a \"\" on the last line.\n                leading_space = re.match(r\"^(\\s*)\\S\", line)\n                line = leading_space.group(1) + '\"\"' + line[end + len(delimiter) :]\n                delimiter = None\n            else:\n                # Haven't found the end yet, append a blank line.\n                line = '\"\"'\n\n        # Look for beginning of a raw string, and replace them with\n        # empty strings.  This is done in a loop to handle multiple raw\n        # strings on the same line.\n        while delimiter is None:\n            # Look for beginning of a raw string.\n            # See 2.14.15 [lex.string] for syntax.\n            #\n            # Once we have matched a raw string, we check the prefix of the\n            # line to make sure that the line is not part of a single line\n            # comment.  It's done this way because we remove raw strings\n            # before removing comments as opposed to removing comments\n            # before removing raw strings.  This is because there are some\n            # cpplint checks that requires the comments to be preserved, but\n            # we don't want to check comments that are inside raw strings.\n            matched = re.match(r'^(.*?)\\b(?:R|u8R|uR|UR|LR)\"([^\\s\\\\()]*)\\((.*)$', line)\n            if matched and not re.match(\n                r'^([^\\'\"]|\\'(\\\\.|[^\\'])*\\'|\"(\\\\.|[^\"])*\")*//', matched.group(1)\n            ):\n                delimiter = \")\" + matched.group(2) + '\"'\n\n                end = matched.group(3).find(delimiter)\n                if end >= 0:\n                    # Raw string ended on same line\n                    line = matched.group(1) + '\"\"' + matched.group(3)[end + len(delimiter) :]\n                    delimiter = None\n                else:\n                    # Start of a multi-line raw string\n                    line = matched.group(1) + '\"\"'\n            else:\n                break\n\n        lines_without_raw_strings.append(line)\n\n    # TODO(google): if delimiter is not None here, we might want to\n    # emit a warning for unterminated string.\n    return lines_without_raw_strings\n\n\ndef FindNextMultiLineCommentStart(lines, lineix):\n    \"\"\"Find the beginning marker for a multiline comment.\"\"\"\n    while lineix < len(lines):\n        if lines[lineix].strip().startswith(\"/*\"):\n            # Only return this marker if the comment goes beyond this line\n            if lines[lineix].strip().find(\"*/\", 2) < 0:\n                return lineix\n        lineix += 1\n    return len(lines)\n\n\ndef FindNextMultiLineCommentEnd(lines, lineix):\n    \"\"\"We are inside a comment, find the end marker.\"\"\"\n    while lineix < len(lines):\n        if lines[lineix].strip().endswith(\"*/\"):\n            return lineix\n        lineix += 1\n    return len(lines)\n\n\ndef RemoveMultiLineCommentsFromRange(lines, begin, end):\n    \"\"\"Clears a range of lines for multi-line comments.\"\"\"\n    # Having // <empty> comments makes the lines non-empty, so we will not get\n    # unnecessary blank line warnings later in the code.\n    for i in range(begin, end):\n        lines[i] = \"/**/\"\n\n\ndef RemoveMultiLineComments(filename, lines, error):\n    \"\"\"Removes multiline (c-style) comments from lines.\"\"\"\n    lineix = 0\n    while lineix < len(lines):\n        lineix_begin = FindNextMultiLineCommentStart(lines, lineix)\n        if lineix_begin >= len(lines):\n            return\n        lineix_end = FindNextMultiLineCommentEnd(lines, lineix_begin)\n        if lineix_end >= len(lines):\n            error(\n                filename,\n                lineix_begin + 1,\n                \"readability/multiline_comment\",\n                5,\n                \"Could not find end of multi-line comment\",\n            )\n            return\n        RemoveMultiLineCommentsFromRange(lines, lineix_begin, lineix_end + 1)\n        lineix = lineix_end + 1\n\n\ndef CleanseComments(line):\n    \"\"\"Removes //-comments and single-line C-style /* */ comments.\n\n    Args:\n      line: A line of C++ source.\n\n    Returns:\n      The line with single-line comments removed.\n    \"\"\"\n    commentpos = line.find(\"//\")\n    if commentpos != -1 and not IsCppString(line[:commentpos]):\n        line = line[:commentpos].rstrip()\n    # get rid of /* ... */\n    return _RE_PATTERN_CLEANSE_LINE_C_COMMENTS.sub(\"\", line)\n\n\ndef ReplaceAlternateTokens(line):\n    \"\"\"Replace any alternate token by its original counterpart.\n\n    In order to comply with the google rule stating that unary operators should\n    never be followed by a space, an exception is made for the 'not' and 'compl'\n    alternate tokens. For these, any trailing space is removed during the\n    conversion.\n\n    Args:\n      line: The line being processed.\n\n    Returns:\n      The line with alternate tokens replaced.\n    \"\"\"\n    for match in _ALT_TOKEN_REPLACEMENT_PATTERN.finditer(line):\n        token = _ALT_TOKEN_REPLACEMENT[match.group(2)]\n        tail = \"\" if match.group(2) in [\"not\", \"compl\"] and match.group(3) == \" \" else r\"\\3\"\n        line = re.sub(match.re, rf\"\\1{token}{tail}\", line, count=1)\n    return line\n\n\nclass CleansedLines:\n    \"\"\"Holds 4 copies of all lines with different preprocessing applied to them.\n\n    1) elided member contains lines without strings and comments.\n    2) lines member contains lines without comments.\n    3) raw_lines member contains all the lines without processing.\n    4) lines_without_raw_strings member is same as raw_lines, but with C++11 raw\n       strings removed.\n    All these members are of <type 'list'>, and of the same length.\n    \"\"\"\n\n    def __init__(self, lines):\n        if \"-readability/alt_tokens\" in _cpplint_state.filters:\n            for i, line in enumerate(lines):\n                lines[i] = ReplaceAlternateTokens(line)\n        self.elided = []\n        self.lines = []\n        self.raw_lines = lines\n        self.num_lines = len(lines)\n        self.lines_without_raw_strings = CleanseRawStrings(lines)\n        for line in self.lines_without_raw_strings:\n            self.lines.append(CleanseComments(line))\n            elided = self._CollapseStrings(line)\n            self.elided.append(CleanseComments(elided))\n\n    def NumLines(self):\n        \"\"\"Returns the number of lines represented.\"\"\"\n        return self.num_lines\n\n    @staticmethod\n    def _CollapseStrings(elided):\n        \"\"\"Collapses strings and chars on a line to simple \"\" or '' blocks.\n\n        We nix strings first so we're not fooled by text like '\"http://\"'\n\n        Args:\n          elided: The line being processed.\n\n        Returns:\n          The line with collapsed strings.\n        \"\"\"\n        if _RE_PATTERN_INCLUDE.match(elided):\n            return elided\n\n        # Remove escaped characters first to make quote/single quote collapsing\n        # basic.  Things that look like escaped characters shouldn't occur\n        # outside of strings and chars.\n        elided = _RE_PATTERN_CLEANSE_LINE_ESCAPES.sub(\"\", elided)\n\n        # Replace quoted strings and digit separators.  Both single quotes\n        # and double quotes are processed in the same loop, otherwise\n        # nested quotes wouldn't work.\n        collapsed = \"\"\n        while True:\n            # Find the first quote character\n            match = re.match(r'^([^\\'\"]*)([\\'\"])(.*)$', elided)\n            if not match:\n                collapsed += elided\n                break\n            head, quote, tail = match.groups()\n\n            if quote == '\"':\n                # Collapse double quoted strings\n                second_quote = tail.find('\"')\n                if second_quote >= 0:\n                    collapsed += head + '\"\"'\n                    elided = tail[second_quote + 1 :]\n                else:\n                    # Unmatched double quote, don't bother processing the rest\n                    # of the line since this is probably a multiline string.\n                    collapsed += elided\n                    break\n            else:\n                # Found single quote, check nearby text to eliminate digit separators.\n                #\n                # There is no special handling for floating point here, because\n                # the integer/fractional/exponent parts would all be parsed\n                # correctly as long as there are digits on both sides of the\n                # separator.  So we are fine as long as we don't see something\n                # like \"0.'3\" (gcc 4.9.0 will not allow this literal).\n                if re.search(r\"\\b(?:0[bBxX]?|[1-9])[0-9a-fA-F]*$\", head):\n                    match_literal = re.match(r\"^((?:\\'?[0-9a-zA-Z_])*)(.*)$\", \"'\" + tail)\n                    collapsed += head + match_literal.group(1).replace(\"'\", \"\")\n                    elided = match_literal.group(2)\n                else:\n                    second_quote = tail.find(\"'\")\n                    if second_quote >= 0:\n                        collapsed += head + \"''\"\n                        elided = tail[second_quote + 1 :]\n                    else:\n                        # Unmatched single quote\n                        collapsed += elided\n                        break\n\n        return collapsed\n\n\ndef FindEndOfExpressionInLine(line, startpos, stack):\n    \"\"\"Find the position just after the end of current parenthesized expression.\n\n    Args:\n      line: a CleansedLines line.\n      startpos: start searching at this position.\n      stack: nesting stack at startpos.\n\n    Returns:\n      On finding matching end: (index just after matching end, None)\n      On finding an unclosed expression: (-1, None)\n      Otherwise: (-1, new stack at end of this line)\n    \"\"\"\n    for i in range(startpos, len(line)):\n        char = line[i]\n        if char in \"([{\":\n            # Found start of parenthesized expression, push to expression stack\n            stack.append(char)\n        elif char == \"<\":\n            # Found potential start of template argument list\n            if i > 0 and line[i - 1] == \"<\":\n                # Left shift operator\n                if stack and stack[-1] == \"<\":\n                    stack.pop()\n                    if not stack:\n                        return (-1, None)\n            elif i > 0 and re.search(r\"\\boperator\\s*$\", line[0:i]):\n                # operator<, don't add to stack\n                continue\n            else:\n                # Tentative start of template argument list\n                stack.append(\"<\")\n        elif char in \")]}\":\n            # Found end of parenthesized expression.\n            #\n            # If we are currently expecting a matching '>', the pending '<'\n            # must have been an operator.  Remove them from expression stack.\n            while stack and stack[-1] == \"<\":\n                stack.pop()\n            if not stack:\n                return (-1, None)\n            if (\n                (stack[-1] == \"(\" and char == \")\")\n                or (stack[-1] == \"[\" and char == \"]\")\n                or (stack[-1] == \"{\" and char == \"}\")\n            ):\n                stack.pop()\n                if not stack:\n                    return (i + 1, None)\n            else:\n                # Mismatched parentheses\n                return (-1, None)\n        elif char == \">\":\n            # Found potential end of template argument list.\n\n            # Ignore \"->\" and operator functions\n            if i > 0 and (line[i - 1] == \"-\" or re.search(r\"\\boperator\\s*$\", line[0 : i - 1])):\n                continue\n\n            # Pop the stack if there is a matching '<'.  Otherwise, ignore\n            # this '>' since it must be an operator.\n            if stack and stack[-1] == \"<\":\n                stack.pop()\n                if not stack:\n                    return (i + 1, None)\n        elif char == \";\":\n            # Found something that look like end of statements.  If we are currently\n            # expecting a '>', the matching '<' must have been an operator, since\n            # template argument list should not contain statements.\n            while stack and stack[-1] == \"<\":\n                stack.pop()\n            if not stack:\n                return (-1, None)\n\n    # Did not find end of expression or unbalanced parentheses on this line\n    return (-1, stack)\n\n\ndef CloseExpression(clean_lines, linenum, pos):\n    \"\"\"If input points to ( or { or [ or <, finds the position that closes it.\n\n    If lines[linenum][pos] points to a '(' or '{' or '[' or '<', finds the\n    linenum/pos that correspond to the closing of the expression.\n\n    TODO(google): cpplint spends a fair bit of time matching parentheses.\n    Ideally we would want to index all opening and closing parentheses once\n    and have CloseExpression be just a simple lookup, but due to preprocessor\n    tricks, this is not so easy.\n\n    Args:\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      pos: A position on the line.\n\n    Returns:\n      A tuple (line, linenum, pos) pointer *past* the closing brace, or\n      (line, len(lines), -1) if we never find a close.  Note we ignore\n      strings and comments when matching; and the line we return is the\n      'cleansed' line at linenum.\n    \"\"\"\n\n    line = clean_lines.elided[linenum]\n    if (line[pos] not in \"({[<\") or re.match(r\"<[<=]\", line[pos:]):\n        return (line, clean_lines.NumLines(), -1)\n\n    # Check first line\n    (end_pos, stack) = FindEndOfExpressionInLine(line, pos, [])\n    if end_pos > -1:\n        return (line, linenum, end_pos)\n\n    # Continue scanning forward\n    while stack and linenum < clean_lines.NumLines() - 1:\n        linenum += 1\n        line = clean_lines.elided[linenum]\n        (end_pos, stack) = FindEndOfExpressionInLine(line, 0, stack)\n        if end_pos > -1:\n            return (line, linenum, end_pos)\n\n    # Did not find end of expression before end of file, give up\n    return (line, clean_lines.NumLines(), -1)\n\n\ndef FindStartOfExpressionInLine(line, endpos, stack):\n    \"\"\"Find position at the matching start of current expression.\n\n    This is almost the reverse of FindEndOfExpressionInLine, but note\n    that the input position and returned position differs by 1.\n\n    Args:\n      line: a CleansedLines line.\n      endpos: start searching at this position.\n      stack: nesting stack at endpos.\n\n    Returns:\n      On finding matching start: (index at matching start, None)\n      On finding an unclosed expression: (-1, None)\n      Otherwise: (-1, new stack at beginning of this line)\n    \"\"\"\n    i = endpos\n    while i >= 0:\n        char = line[i]\n        if char in \")]}\":\n            # Found end of expression, push to expression stack\n            stack.append(char)\n        elif char == \">\":\n            # Found potential end of template argument list.\n            #\n            # Ignore it if it's a \"->\" or \">=\" or \"operator>\"\n            if i > 0 and (\n                line[i - 1] == \"-\"\n                or re.match(r\"\\s>=\\s\", line[i - 1 :])\n                or re.search(r\"\\boperator\\s*$\", line[0:i])\n            ):\n                i -= 1\n            else:\n                stack.append(\">\")\n        elif char == \"<\":\n            # Found potential start of template argument list\n            if i > 0 and line[i - 1] == \"<\":\n                # Left shift operator\n                i -= 1\n            else:\n                # If there is a matching '>', we can pop the expression stack.\n                # Otherwise, ignore this '<' since it must be an operator.\n                if stack and stack[-1] == \">\":\n                    stack.pop()\n                    if not stack:\n                        return (i, None)\n        elif char in \"([{\":\n            # Found start of expression.\n            #\n            # If there are any unmatched '>' on the stack, they must be\n            # operators.  Remove those.\n            while stack and stack[-1] == \">\":\n                stack.pop()\n            if not stack:\n                return (-1, None)\n            if (\n                (char == \"(\" and stack[-1] == \")\")\n                or (char == \"[\" and stack[-1] == \"]\")\n                or (char == \"{\" and stack[-1] == \"}\")\n            ):\n                stack.pop()\n                if not stack:\n                    return (i, None)\n            else:\n                # Mismatched parentheses\n                return (-1, None)\n        elif char == \";\":\n            # Found something that look like end of statements.  If we are currently\n            # expecting a '<', the matching '>' must have been an operator, since\n            # template argument list should not contain statements.\n            while stack and stack[-1] == \">\":\n                stack.pop()\n            if not stack:\n                return (-1, None)\n\n        i -= 1\n\n    return (-1, stack)\n\n\ndef ReverseCloseExpression(clean_lines, linenum, pos):\n    \"\"\"If input points to ) or } or ] or >, finds the position that opens it.\n\n    If lines[linenum][pos] points to a ')' or '}' or ']' or '>', finds the\n    linenum/pos that correspond to the opening of the expression.\n\n    Args:\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      pos: A position on the line.\n\n    Returns:\n      A tuple (line, linenum, pos) pointer *at* the opening brace, or\n      (line, 0, -1) if we never find the matching opening brace.  Note\n      we ignore strings and comments when matching; and the line we\n      return is the 'cleansed' line at linenum.\n    \"\"\"\n    line = clean_lines.elided[linenum]\n    if line[pos] not in \")}]>\":\n        return (line, 0, -1)\n\n    # Check last line\n    (start_pos, stack) = FindStartOfExpressionInLine(line, pos, [])\n    if start_pos > -1:\n        return (line, linenum, start_pos)\n\n    # Continue scanning backward\n    while stack and linenum > 0:\n        linenum -= 1\n        line = clean_lines.elided[linenum]\n        (start_pos, stack) = FindStartOfExpressionInLine(line, len(line) - 1, stack)\n        if start_pos > -1:\n            return (line, linenum, start_pos)\n\n    # Did not find start of expression before beginning of file, give up\n    return (line, 0, -1)\n\n\ndef CheckForCopyright(filename, lines, error):\n    \"\"\"Logs an error if no Copyright message appears at the top of the file.\"\"\"\n\n    # We'll say it should occur by line 10. Don't forget there's a\n    # placeholder line at the front.\n    for line in range(1, min(len(lines), 11)):\n        if re.search(r\"Copyright\", lines[line], re.IGNORECASE):\n            break\n    else:  # means no copyright line was found\n        error(\n            filename,\n            0,\n            \"legal/copyright\",\n            5,\n            \"No copyright message found.  \"\n            'You should have a line: \"Copyright [year] <Copyright Owner>\"',\n        )\n\n\ndef GetIndentLevel(line):\n    \"\"\"Return the number of leading spaces in line.\n\n    Args:\n      line: A string to check.\n\n    Returns:\n      An integer count of leading spaces, possibly zero.\n    \"\"\"\n    if indent := re.match(r\"^( *)\\S\", line):\n        return len(indent.group(1))\n    return 0\n\n\ndef PathSplitToList(path):\n    \"\"\"Returns the path split into a list by the separator.\n\n    Args:\n      path: An absolute or relative path (e.g. '/a/b/c/' or '../a')\n\n    Returns:\n      A list of path components (e.g. ['a', 'b', 'c]).\n    \"\"\"\n    lst = []\n    while True:\n        (head, tail) = os.path.split(path)\n        if head == path:  # absolute paths end\n            lst.append(head)\n            break\n        if tail == path:  # relative paths end\n            lst.append(tail)\n            break\n\n        path = head\n        lst.append(tail)\n\n    lst.reverse()\n    return lst\n\n\ndef GetHeaderGuardCPPVariable(filename):\n    \"\"\"Returns the CPP variable that should be used as a header guard.\n\n    Args:\n      filename: The name of a C++ header file.\n\n    Returns:\n      The CPP variable that should be used as a header guard in the\n      named file.\n\n    \"\"\"\n\n    # Restores original filename in case that cpplint is invoked from Emacs's\n    # flymake.\n    filename = re.sub(r\"_flymake\\.h$\", \".h\", filename)\n    filename = re.sub(r\"/\\.flymake/([^/]*)$\", r\"/\\1\", filename)\n    # Replace 'c++' with 'cpp'.\n    filename = filename.replace(\"C++\", \"cpp\").replace(\"c++\", \"cpp\")\n\n    fileinfo = FileInfo(filename)\n    file_path_from_root = fileinfo.RepositoryName()\n\n    def FixupPathFromRoot():\n        if _root_debug:\n            sys.stderr.write(\n                f\"\\n_root fixup, _root = '{_root}',\"\n                f\" repository name = '{fileinfo.RepositoryName()}'\\n\"\n            )\n\n        # Process the file path with the --root flag if it was set.\n        if not _root:\n            if _root_debug:\n                sys.stderr.write(\"_root unspecified\\n\")\n            return file_path_from_root\n\n        def StripListPrefix(lst, prefix):\n            # f(['x', 'y'], ['w, z']) -> None  (not a valid prefix)\n            if lst[: len(prefix)] != prefix:\n                return None\n            # f(['a, 'b', 'c', 'd'], ['a', 'b']) -> ['c', 'd']\n            return lst[(len(prefix)) :]\n\n        # root behavior:\n        #   --root=subdir , lstrips subdir from the header guard\n        maybe_path = StripListPrefix(PathSplitToList(file_path_from_root), PathSplitToList(_root))\n\n        if _root_debug:\n            sys.stderr.write(\n                (\"_root lstrip (maybe_path=%s, file_path_from_root=%s,\" + \" _root=%s)\\n\")\n                % (maybe_path, file_path_from_root, _root)\n            )\n\n        if maybe_path:\n            return os.path.join(*maybe_path)\n\n        #   --root=.. , will prepend the outer directory to the header guard\n        full_path = fileinfo.FullName()\n        # adapt slashes for windows\n        root_abspath = os.path.abspath(_root).replace(\"\\\\\", \"/\")\n\n        maybe_path = StripListPrefix(PathSplitToList(full_path), PathSplitToList(root_abspath))\n\n        if _root_debug:\n            sys.stderr.write(\n                (\"_root prepend (maybe_path=%s, full_path=%s, \" + \"root_abspath=%s)\\n\")\n                % (maybe_path, full_path, root_abspath)\n            )\n\n        if maybe_path:\n            return os.path.join(*maybe_path)\n\n        if _root_debug:\n            sys.stderr.write(f\"_root ignore, returning {file_path_from_root}\\n\")\n\n        #   --root=FAKE_DIR is ignored\n        return file_path_from_root\n\n    file_path_from_root = FixupPathFromRoot()\n    return re.sub(r\"[^a-zA-Z0-9]\", \"_\", file_path_from_root).upper() + \"_\"\n\n\ndef CheckForHeaderGuard(filename, clean_lines, error, cppvar):\n    \"\"\"Checks that the file contains a header guard.\n\n    Logs an error if no #ifndef header guard is present.  For other\n    headers, checks that the full pathname is used.\n\n    Args:\n      filename: The name of the C++ header file.\n      clean_lines: A CleansedLines instance containing the file.\n      error: The function to call with any errors found.\n    \"\"\"\n\n    # Don't check for header guards if there are error suppression\n    # comments somewhere in this file.\n    #\n    # Because this is silencing a warning for a nonexistent line, we\n    # only support the very specific NOLINT(build/header_guard) syntax,\n    # and not the general NOLINT or NOLINT(*) syntax.\n    raw_lines = clean_lines.lines_without_raw_strings\n    for i in raw_lines:\n        if re.search(r\"//\\s*NOLINT\\(build/header_guard\\)\", i):\n            return\n\n    # Allow pragma once instead of header guards\n    for i in raw_lines:\n        if re.search(r\"^\\s*#pragma\\s+once\", i):\n            return\n\n    ifndef = \"\"\n    ifndef_linenum = 0\n    define = \"\"\n    endif = \"\"\n    endif_linenum = 0\n    for linenum, line in enumerate(raw_lines):\n        linesplit = line.split()\n        if len(linesplit) >= 2:\n            # find the first occurrence of #ifndef and #define, save arg\n            if not ifndef and linesplit[0] == \"#ifndef\":\n                # set ifndef to the header guard presented on the #ifndef line.\n                ifndef = linesplit[1]\n                ifndef_linenum = linenum\n            if not define and linesplit[0] == \"#define\":\n                define = linesplit[1]\n        # find the last occurrence of #endif, save entire line\n        if line.startswith(\"#endif\"):\n            endif = line\n            endif_linenum = linenum\n\n    if not ifndef or not define or ifndef != define:\n        error(\n            filename,\n            0,\n            \"build/header_guard\",\n            5,\n            f\"No #ifndef header guard found, suggested CPP variable is: {cppvar}\",\n        )\n        return\n\n    # The guard should be PATH_FILE_H_, but we also allow PATH_FILE_H__\n    # for backward compatibility.\n    if ifndef != cppvar:\n        error_level = 0\n        if ifndef != cppvar + \"_\":\n            error_level = 5\n\n        ParseNolintSuppressions(filename, raw_lines[ifndef_linenum], ifndef_linenum, error)\n        error(\n            filename,\n            ifndef_linenum,\n            \"build/header_guard\",\n            error_level,\n            f\"#ifndef header guard has wrong style, please use: {cppvar}\",\n        )\n\n    # Check for \"//\" comments on endif line.\n    ParseNolintSuppressions(filename, raw_lines[endif_linenum], endif_linenum, error)\n    match = re.match(r\"#endif\\s*//\\s*\" + cppvar + r\"(_)?\\b\", endif)\n    if match:\n        if match.group(1) == \"_\":\n            # Issue low severity warning for deprecated double trailing underscore\n            error(\n                filename,\n                endif_linenum,\n                \"build/header_guard\",\n                0,\n                f'#endif line should be \"#endif  // {cppvar}\"',\n            )\n        return\n\n    # Didn't find the corresponding \"//\" comment.  If this file does not\n    # contain any \"//\" comments at all, it could be that the compiler\n    # only wants \"/**/\" comments, look for those instead.\n    no_single_line_comments = True\n    for i in range(1, len(raw_lines) - 1):\n        line = raw_lines[i]\n        if re.match(r'^(?:(?:\\'(?:\\.|[^\\'])*\\')|(?:\"(?:\\.|[^\"])*\")|[^\\'\"])*//', line):\n            no_single_line_comments = False\n            break\n\n    if no_single_line_comments:\n        match = re.match(r\"#endif\\s*/\\*\\s*\" + cppvar + r\"(_)?\\s*\\*/\", endif)\n        if match:\n            if match.group(1) == \"_\":\n                # Low severity warning for double trailing underscore\n                error(\n                    filename,\n                    endif_linenum,\n                    \"build/header_guard\",\n                    0,\n                    f'#endif line should be \"#endif  /* {cppvar} */\"',\n                )\n            return\n\n    # Didn't find anything\n    error(\n        filename,\n        endif_linenum,\n        \"build/header_guard\",\n        5,\n        f'#endif line should be \"#endif  // {cppvar}\"',\n    )\n\n\ndef CheckHeaderFileIncluded(filename, include_state, error):\n    \"\"\"Logs an error if a source file does not include its header.\"\"\"\n\n    # Do not check test files\n    fileinfo = FileInfo(filename)\n    if re.search(_TEST_FILE_SUFFIX, fileinfo.BaseName()):\n        return\n\n    first_include = message = None\n    basefilename = filename[0 : len(filename) - len(fileinfo.Extension())]\n    for ext in GetHeaderExtensions():\n        headerfile = basefilename + \".\" + ext\n        if not os.path.exists(headerfile):\n            continue\n        headername = FileInfo(headerfile).RepositoryName()\n        include_uses_unix_dir_aliases = False\n        for section_list in include_state.include_list:\n            for f in section_list:\n                include_text = f[0]\n                if \"./\" in include_text:\n                    include_uses_unix_dir_aliases = True\n                if headername in include_text or include_text in headername:\n                    return\n                if not first_include:\n                    first_include = f[1]\n\n        message = f\"{fileinfo.RepositoryName()} should include its header file {headername}\"\n        if include_uses_unix_dir_aliases:\n            message += \". Relative paths like . and .. are not allowed.\"\n\n    if message:\n        error(filename, first_include, \"build/include\", 5, message)\n\n\ndef CheckForBadCharacters(filename, lines, error):\n    \"\"\"Logs an error for each line containing bad characters.\n\n    Two kinds of bad characters:\n\n    1. Unicode replacement characters: These indicate that either the file\n    contained invalid UTF-8 (likely) or Unicode replacement characters (which\n    it shouldn't).  Note that it's possible for this to throw off line\n    numbering if the invalid UTF-8 occurred adjacent to a newline.\n\n    2. NUL bytes.  These are problematic for some tools.\n\n    Args:\n      filename: The name of the current file.\n      lines: An array of strings, each representing a line of the file.\n      error: The function to call with any errors found.\n    \"\"\"\n    for linenum, line in enumerate(lines):\n        if \"\\ufffd\" in line:\n            error(\n                filename,\n                linenum,\n                \"readability/utf8\",\n                5,\n                \"Line contains invalid UTF-8 (or Unicode replacement character).\",\n            )\n        if \"\\0\" in line:\n            error(filename, linenum, \"readability/nul\", 5, \"Line contains NUL byte.\")\n\n\ndef CheckForNewlineAtEOF(filename, lines, error):\n    \"\"\"Logs an error if there is no newline char at the end of the file.\n\n    Args:\n      filename: The name of the current file.\n      lines: An array of strings, each representing a line of the file.\n      error: The function to call with any errors found.\n    \"\"\"\n\n    # The array lines() was created by adding two newlines to the\n    # original file (go figure), then splitting on \\n.\n    # To verify that the file ends in \\n, we just have to make sure the\n    # last-but-two element of lines() exists and is empty.\n    if len(lines) < 3 or lines[-2]:\n        error(\n            filename,\n            len(lines) - 2,\n            \"whitespace/ending_newline\",\n            5,\n            \"Could not find a newline character at the end of the file.\",\n        )\n\n\ndef CheckForMultilineCommentsAndStrings(filename, clean_lines, linenum, error):\n    \"\"\"Logs an error if we see /* ... */ or \"...\" that extend past one line.\n\n    /* ... */ comments are legit inside macros, for one line.\n    Otherwise, we prefer // comments, so it's ok to warn about the\n    other.  Likewise, it's ok for strings to extend across multiple\n    lines, as long as a line continuation character (backslash)\n    terminates each line. Although not currently prohibited by the C++\n    style guide, it's ugly and unnecessary. We don't do well with either\n    in this lint program, so we warn about both.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n    line = clean_lines.elided[linenum]\n\n    # Remove all \\\\ (escaped backslashes) from the line. They are OK, and the\n    # second (escaped) slash may trigger later \\\" detection erroneously.\n    line = line.replace(\"\\\\\\\\\", \"\")\n\n    if line.count(\"/*\") > line.count(\"*/\"):\n        error(\n            filename,\n            linenum,\n            \"readability/multiline_comment\",\n            5,\n            \"Complex multi-line /*...*/-style comment found. \"\n            \"Lint may give bogus warnings.  \"\n            \"Consider replacing these with //-style comments, \"\n            \"with #if 0...#endif, \"\n            \"or with more clearly structured multi-line comments.\",\n        )\n\n    if (line.count('\"') - line.count('\\\\\"')) % 2:\n        error(\n            filename,\n            linenum,\n            \"readability/multiline_string\",\n            5,\n            'Multi-line string (\"...\") found.  This lint script doesn\\'t '\n            \"do well with such strings, and may give bogus warnings.  \"\n            \"Use C++11 raw strings or concatenation instead.\",\n        )\n\n\n# (non-threadsafe name, thread-safe alternative, validation pattern)\n#\n# The validation pattern is used to eliminate false positives such as:\n#  _rand();               // false positive due to substring match.\n#  ->rand();              // some member function rand().\n#  ACMRandom rand(seed);  // some variable named rand.\n#  ISAACRandom rand();    // another variable named rand.\n#\n# Basically we require the return value of these functions to be used\n# in some expression context on the same line by matching on some\n# operator before the function name.  This eliminates constructors and\n# member function calls.\n_UNSAFE_FUNC_PREFIX = r\"(?:[-+*/=%^&|(<]\\s*|>\\s+)\"\n_THREADING_LIST = (\n    (\"asctime(\", \"asctime_r(\", _UNSAFE_FUNC_PREFIX + r\"asctime\\([^)]+\\)\"),\n    (\"ctime(\", \"ctime_r(\", _UNSAFE_FUNC_PREFIX + r\"ctime\\([^)]+\\)\"),\n    (\"getgrgid(\", \"getgrgid_r(\", _UNSAFE_FUNC_PREFIX + r\"getgrgid\\([^)]+\\)\"),\n    (\"getgrnam(\", \"getgrnam_r(\", _UNSAFE_FUNC_PREFIX + r\"getgrnam\\([^)]+\\)\"),\n    (\"getlogin(\", \"getlogin_r(\", _UNSAFE_FUNC_PREFIX + r\"getlogin\\(\\)\"),\n    (\"getpwnam(\", \"getpwnam_r(\", _UNSAFE_FUNC_PREFIX + r\"getpwnam\\([^)]+\\)\"),\n    (\"getpwuid(\", \"getpwuid_r(\", _UNSAFE_FUNC_PREFIX + r\"getpwuid\\([^)]+\\)\"),\n    (\"gmtime(\", \"gmtime_r(\", _UNSAFE_FUNC_PREFIX + r\"gmtime\\([^)]+\\)\"),\n    (\"localtime(\", \"localtime_r(\", _UNSAFE_FUNC_PREFIX + r\"localtime\\([^)]+\\)\"),\n    (\"rand(\", \"rand_r(\", _UNSAFE_FUNC_PREFIX + r\"rand\\(\\)\"),\n    (\"strtok(\", \"strtok_r(\", _UNSAFE_FUNC_PREFIX + r\"strtok\\([^)]+\\)\"),\n    (\"ttyname(\", \"ttyname_r(\", _UNSAFE_FUNC_PREFIX + r\"ttyname\\([^)]+\\)\"),\n)\n\n\ndef CheckPosixThreading(filename, clean_lines, linenum, error):\n    \"\"\"Checks for calls to thread-unsafe functions.\n\n    Much code has been originally written without consideration of\n    multi-threading. Also, engineers are relying on their old experience;\n    they have learned posix before threading extensions were added. These\n    tests guide the engineers to use thread-safe functions (when using\n    posix directly).\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n    line = clean_lines.elided[linenum]\n    for single_thread_func, multithread_safe_func, pattern in _THREADING_LIST:\n        # Additional pattern matching check to confirm that this is the\n        # function we are looking for\n        if re.search(pattern, line):\n            error(\n                filename,\n                linenum,\n                \"runtime/threadsafe_fn\",\n                2,\n                \"Consider using \"\n                + multithread_safe_func\n                + \"...) instead of \"\n                + single_thread_func\n                + \"...) for improved thread safety.\",\n            )\n\n\ndef CheckVlogArguments(filename, clean_lines, linenum, error):\n    \"\"\"Checks that VLOG() is only used for defining a logging level.\n\n    For example, VLOG(2) is correct. VLOG(INFO), VLOG(WARNING), VLOG(ERROR), and\n    VLOG(FATAL) are not.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n    line = clean_lines.elided[linenum]\n    if re.search(r\"\\bVLOG\\((INFO|ERROR|WARNING|DFATAL|FATAL)\\)\", line):\n        error(\n            filename,\n            linenum,\n            \"runtime/vlog\",\n            5,\n            \"VLOG() should be used with numeric verbosity level.  \"\n            \"Use LOG() if you want symbolic severity levels.\",\n        )\n\n\n# Matches invalid increment: *count++, which moves pointer instead of\n# incrementing a value.\n_RE_PATTERN_INVALID_INCREMENT = re.compile(r\"^\\s*\\*\\w+(\\+\\+|--);\")\n\n\ndef CheckInvalidIncrement(filename, clean_lines, linenum, error):\n    \"\"\"Checks for invalid increment *count++.\n\n    For example following function:\n    void increment_counter(int* count) {\n      *count++;\n    }\n    is invalid, because it effectively does count++, moving pointer, and should\n    be replaced with ++*count, (*count)++ or *count += 1.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n    line = clean_lines.elided[linenum]\n    if _RE_PATTERN_INVALID_INCREMENT.match(line):\n        error(\n            filename,\n            linenum,\n            \"runtime/invalid_increment\",\n            5,\n            \"Changing pointer instead of value (or unused value of operator*).\",\n        )\n\n\ndef IsMacroDefinition(clean_lines, linenum):\n    if re.search(r\"^#define\", clean_lines[linenum]):\n        return True\n\n    return bool(linenum > 0 and re.search(r\"\\\\$\", clean_lines[linenum - 1]))\n\n\ndef IsForwardClassDeclaration(clean_lines, linenum):\n    return re.match(r\"^\\s*(\\btemplate\\b)*.*class\\s+\\w+;\\s*$\", clean_lines[linenum])\n\n\nclass _BlockInfo:\n    \"\"\"Stores information about a generic block of code.\"\"\"\n\n    def __init__(self, linenum, seen_open_brace):\n        self.starting_linenum = linenum\n        self.seen_open_brace = seen_open_brace\n        self.open_parentheses = 0\n        self.inline_asm = _NO_ASM\n        self.check_namespace_indentation = False\n\n    def CheckBegin(self, filename, clean_lines, linenum, error):\n        \"\"\"Run checks that applies to text up to the opening brace.\n\n        This is mostly for checking the text after the class identifier\n        and the \"{\", usually where the base class is specified.  For other\n        blocks, there isn't much to check, so we always pass.\n\n        Args:\n          filename: The name of the current file.\n          clean_lines: A CleansedLines instance containing the file.\n          linenum: The number of the line to check.\n          error: The function to call with any errors found.\n        \"\"\"\n        pass\n\n    def CheckEnd(self, filename, clean_lines, linenum, error):\n        \"\"\"Run checks that applies to text after the closing brace.\n\n        This is mostly used for checking end of namespace comments.\n\n        Args:\n          filename: The name of the current file.\n          clean_lines: A CleansedLines instance containing the file.\n          linenum: The number of the line to check.\n          error: The function to call with any errors found.\n        \"\"\"\n        pass\n\n    def IsBlockInfo(self):\n        \"\"\"Returns true if this block is a _BlockInfo.\n\n        This is convenient for verifying that an object is an instance of\n        a _BlockInfo, but not an instance of any of the derived classes.\n\n        Returns:\n          True for this class, False for derived classes.\n        \"\"\"\n        return self.__class__ == _BlockInfo\n\n\nclass _ExternCInfo(_BlockInfo):\n    \"\"\"Stores information about an 'extern \"C\"' block.\"\"\"\n\n    def __init__(self, linenum):\n        _BlockInfo.__init__(self, linenum, True)\n\n\nclass _ClassInfo(_BlockInfo):\n    \"\"\"Stores information about a class.\"\"\"\n\n    def __init__(self, name, class_or_struct, clean_lines, linenum):\n        _BlockInfo.__init__(self, linenum, False)\n        self.name = name\n        self.is_derived = False\n        self.check_namespace_indentation = True\n        if class_or_struct == \"struct\":\n            self.access = \"public\"\n            self.is_struct = True\n        else:\n            self.access = \"private\"\n            self.is_struct = False\n\n        # Remember initial indentation level for this class.  Using raw_lines here\n        # instead of elided to account for leading comments.\n        self.class_indent = GetIndentLevel(clean_lines.raw_lines[linenum])\n\n        # Try to find the end of the class.  This will be confused by things like:\n        #   class A {\n        #   } *x = { ...\n        #\n        # But it's still good enough for CheckSectionSpacing.\n        self.last_line = 0\n        depth = 0\n        for i in range(linenum, clean_lines.NumLines()):\n            line = clean_lines.elided[i]\n            depth += line.count(\"{\") - line.count(\"}\")\n            if not depth:\n                self.last_line = i\n                break\n\n    def CheckBegin(self, filename, clean_lines, linenum, error):\n        # Look for a bare ':'\n        if re.search(\"(^|[^:]):($|[^:])\", clean_lines.elided[linenum]):\n            self.is_derived = True\n\n    def CheckEnd(self, filename, clean_lines, linenum, error):\n        # If there is a DISALLOW macro, it should appear near the end of\n        # the class.\n        seen_last_thing_in_class = False\n        for i in range(linenum - 1, self.starting_linenum, -1):\n            match = re.search(\n                r\"\\b(DISALLOW_COPY_AND_ASSIGN|DISALLOW_IMPLICIT_CONSTRUCTORS)\\(\"\n                + self.name\n                + r\"\\)\",\n                clean_lines.elided[i],\n            )\n            if match:\n                if seen_last_thing_in_class:\n                    error(\n                        filename,\n                        i,\n                        \"readability/constructors\",\n                        3,\n                        match.group(1) + \" should be the last thing in the class\",\n                    )\n                break\n\n            if not re.match(r\"^\\s*$\", clean_lines.elided[i]):\n                seen_last_thing_in_class = True\n\n        # Check that closing brace is aligned with beginning of the class.\n        # Only do this if the closing brace is indented by only whitespaces.\n        # This means we will not check single-line class definitions.\n        indent = re.match(r\"^( *)\\}\", clean_lines.elided[linenum])\n        if indent and len(indent.group(1)) != self.class_indent:\n            if self.is_struct:\n                parent = \"struct \" + self.name\n            else:\n                parent = \"class \" + self.name\n            error(\n                filename,\n                linenum,\n                \"whitespace/indent\",\n                3,\n                f\"Closing brace should be aligned with beginning of {parent}\",\n            )\n\n\nclass _ConstructorInfo(_BlockInfo):\n    \"\"\"Stores information about a constructor.\n    For detecting member initializer lists.\"\"\"\n\n    def __init__(self, linenum: int):\n        _BlockInfo.__init__(self, linenum, seen_open_brace=False)\n\n\nclass _NamespaceInfo(_BlockInfo):\n    \"\"\"Stores information about a namespace.\"\"\"\n\n    def __init__(self, name, linenum):\n        _BlockInfo.__init__(self, linenum, False)\n        self.name = name or \"\"\n        self.check_namespace_indentation = True\n\n    def CheckEnd(self, filename, clean_lines, linenum, error):\n        \"\"\"Check end of namespace comments.\"\"\"\n        line = clean_lines.raw_lines[linenum]\n\n        # Check how many lines is enclosed in this namespace.  Don't issue\n        # warning for missing namespace comments if there aren't enough\n        # lines.  However, do apply checks if there is already an end of\n        # namespace comment and it's incorrect.\n        #\n        # TODO(google): We always want to check end of namespace comments\n        # if a namespace is large, but sometimes we also want to apply the\n        # check if a short namespace contained nontrivial things (something\n        # other than forward declarations).  There is currently no logic on\n        # deciding what these nontrivial things are, so this check is\n        # triggered by namespace size only, which works most of the time.\n        if linenum - self.starting_linenum < 10 and not re.match(\n            r\"^\\s*};*\\s*(//|/\\*).*\\bnamespace\\b\", line\n        ):\n            return\n\n        # Look for matching comment at end of namespace.\n        #\n        # Note that we accept C style \"/* */\" comments for terminating\n        # namespaces, so that code that terminate namespaces inside\n        # preprocessor macros can be cpplint clean.\n        #\n        # We also accept stuff like \"// end of namespace <name>.\" with the\n        # period at the end.\n        #\n        # Besides these, we don't accept anything else, otherwise we might\n        # get false negatives when existing comment is a substring of the\n        # expected namespace.\n        if self.name:\n            # Named namespace\n            if not re.match(\n                (r\"^\\s*};*\\s*(//|/\\*).*\\bnamespace\\s+\" + re.escape(self.name) + r\"[\\*/\\.\\\\\\s]*$\"),\n                line,\n            ):\n                error(\n                    filename,\n                    linenum,\n                    \"readability/namespace\",\n                    5,\n                    f'Namespace should be terminated with \"// namespace {self.name}\"',\n                )\n        else:\n            # Anonymous namespace\n            if not re.match(r\"^\\s*};*\\s*(//|/\\*).*\\bnamespace[\\*/\\.\\\\\\s]*$\", line):\n                # If \"// namespace anonymous\" or \"// anonymous namespace (more text)\",\n                # mention \"// anonymous namespace\" as an acceptable form\n                if re.match(r\"^\\s*}.*\\b(namespace anonymous|anonymous namespace)\\b\", line):\n                    error(\n                        filename,\n                        linenum,\n                        \"readability/namespace\",\n                        5,\n                        'Anonymous namespace should be terminated with \"// namespace\"'\n                        ' or \"// anonymous namespace\"',\n                    )\n                else:\n                    error(\n                        filename,\n                        linenum,\n                        \"readability/namespace\",\n                        5,\n                        'Anonymous namespace should be terminated with \"// namespace\"',\n                    )\n\n\nclass _WrappedInfo(_BlockInfo):\n    \"\"\"Stores information about parentheses, initializer lists, etc.\n    Not exactly a block but we do need the same signature.\n    Needed to avoid namespace indentation false positives,\n    though parentheses tracking would slow us down a lot\n    and is effectively already done by open_parentheses.\"\"\"\n\n    pass\n\n\nclass _MemInitListInfo(_WrappedInfo):\n    \"\"\"Stores information about member initializer lists.\"\"\"\n\n    pass\n\n\nclass _PreprocessorInfo:\n    \"\"\"Stores checkpoints of nesting stacks when #if/#else is seen.\"\"\"\n\n    def __init__(self, stack_before_if):\n        # The entire nesting stack before #if\n        self.stack_before_if = stack_before_if\n\n        # The entire nesting stack up to #else\n        self.stack_before_else = []\n\n        # Whether we have already seen #else or #elif\n        self.seen_else = False\n\n\nclass NestingState:\n    \"\"\"Holds states related to parsing braces.\"\"\"\n\n    def __init__(self):\n        # Stack for tracking all braces.  An object is pushed whenever we\n        # see a \"{\", and popped when we see a \"}\".  Only 3 types of\n        # objects are possible:\n        # - _ClassInfo: a class or struct.\n        # - _NamespaceInfo: a namespace.\n        # - _BlockInfo: some other type of block.\n        self.stack: list[_BlockInfo] = []\n\n        # Top of the previous stack before each Update().\n        #\n        # Because the nesting_stack is updated at the end of each line, we\n        # had to do some convoluted checks to find out what is the current\n        # scope at the beginning of the line.  This check is simplified by\n        # saving the previous top of nesting stack.\n        #\n        # We could save the full stack, but we only need the top.  Copying\n        # the full nesting stack would slow down cpplint by ~10%.\n        self.previous_stack_top: _BlockInfo | None = None\n\n        # The number of open parentheses in the previous stack top before the last update.\n        # Used to prevent false indentation detection when e.g. a function parameter is indented.\n        # We can't use previous_stack_top, a shallow copy whose open_parentheses value is updated.\n        self.previous_open_parentheses = 0\n\n        # The last stack item we popped.\n        self.popped_top: _BlockInfo | None = None\n\n        # Stack of _PreprocessorInfo objects.\n        self.pp_stack = []\n\n    def SeenOpenBrace(self):\n        \"\"\"Check if we have seen the opening brace for the innermost block.\n\n        Returns:\n          True if we have seen the opening brace, False if the innermost\n          block is still expecting an opening brace.\n        \"\"\"\n        return (not self.stack) or self.stack[-1].seen_open_brace\n\n    def InNamespaceBody(self):\n        \"\"\"Check if we are currently one level inside a namespace body.\n\n        Returns:\n          True if top of the stack is a namespace block, False otherwise.\n        \"\"\"\n        return self.stack and isinstance(self.stack[-1], _NamespaceInfo)\n\n    def InExternC(self):\n        \"\"\"Check if we are currently one level inside an 'extern \"C\"' block.\n\n        Returns:\n          True if top of the stack is an extern block, False otherwise.\n        \"\"\"\n        return self.stack and isinstance(self.stack[-1], _ExternCInfo)\n\n    def InClassDeclaration(self):\n        \"\"\"Check if we are currently one level inside a class or struct declaration.\n\n        Returns:\n          True if top of the stack is a class/struct, False otherwise.\n        \"\"\"\n        return self.stack and isinstance(self.stack[-1], _ClassInfo)\n\n    def InAsmBlock(self):\n        \"\"\"Check if we are currently one level inside an inline ASM block.\n\n        Returns:\n          True if the top of the stack is a block containing inline ASM.\n        \"\"\"\n        return self.stack and self.stack[-1].inline_asm != _NO_ASM\n\n    def InTemplateArgumentList(self, clean_lines, linenum, pos):\n        \"\"\"Check if current position is inside template argument list.\n\n        Args:\n          clean_lines: A CleansedLines instance containing the file.\n          linenum: The number of the line to check.\n          pos: position just after the suspected template argument.\n        Returns:\n          True if (linenum, pos) is inside template arguments.\n        \"\"\"\n        while linenum < clean_lines.NumLines():\n            # Find the earliest character that might indicate a template argument\n            line = clean_lines.elided[linenum]\n            match = re.match(r\"^[^{};=\\[\\]\\.<>]*(.)\", line[pos:])\n            if not match:\n                linenum += 1\n                pos = 0\n                continue\n            token = match.group(1)\n            pos += len(match.group(0))\n\n            # These things do not look like template argument list:\n            #   class Suspect {\n            #   class Suspect x; }\n            if token in (\"{\", \"}\", \";\"):\n                return False\n\n            # These things look like template argument list:\n            #   template <class Suspect>\n            #   template <class Suspect = default_value>\n            #   template <class Suspect[]>\n            #   template <class Suspect...>\n            if token in (\">\", \"=\", \"[\", \"]\", \".\"):\n                return True\n\n            # Check if token is an unmatched '<'.\n            # If not, move on to the next character.\n            if token != \"<\":\n                pos += 1\n                if pos >= len(line):\n                    linenum += 1\n                    pos = 0\n                continue\n\n            # We can't be sure if we just find a single '<', and need to\n            # find the matching '>'.\n            (_, end_line, end_pos) = CloseExpression(clean_lines, linenum, pos - 1)\n            if end_pos < 0:\n                # Not sure if template argument list or syntax error in file\n                return False\n            linenum = end_line\n            pos = end_pos\n        return False\n\n    def UpdatePreprocessor(self, line):\n        \"\"\"Update preprocessor stack.\n\n        We need to handle preprocessors due to classes like this:\n          #ifdef SWIG\n          struct ResultDetailsPageElementExtensionPoint {\n          #else\n          struct ResultDetailsPageElementExtensionPoint : public Extension {\n          #endif\n\n        We make the following assumptions (good enough for most files):\n        - Preprocessor condition evaluates to true from #if up to first\n          #else/#elif/#endif.\n\n        - Preprocessor condition evaluates to false from #else/#elif up\n          to #endif.  We still perform lint checks on these lines, but\n          these do not affect nesting stack.\n\n        Args:\n          line: current line to check.\n        \"\"\"\n        if re.match(r\"^\\s*#\\s*(if|ifdef|ifndef)\\b\", line):\n            # Beginning of #if block, save the nesting stack here.  The saved\n            # stack will allow us to restore the parsing state in the #else case.\n            self.pp_stack.append(_PreprocessorInfo(copy.deepcopy(self.stack)))\n        elif re.match(r\"^\\s*#\\s*(else|elif)\\b\", line):\n            # Beginning of #else block\n            if self.pp_stack:\n                if not self.pp_stack[-1].seen_else:\n                    # This is the first #else or #elif block.  Remember the\n                    # whole nesting stack up to this point.  This is what we\n                    # keep after the #endif.\n                    self.pp_stack[-1].seen_else = True\n                    self.pp_stack[-1].stack_before_else = copy.deepcopy(self.stack)\n\n                # Restore the stack to how it was before the #if\n                self.stack = copy.deepcopy(self.pp_stack[-1].stack_before_if)\n            else:\n                # TODO(google): unexpected #else, issue warning?\n                pass\n        elif re.match(r\"^\\s*#\\s*endif\\b\", line):\n            # End of #if or #else blocks.\n            if self.pp_stack:\n                # If we saw an #else, we will need to restore the nesting\n                # stack to its former state before the #else, otherwise we\n                # will just continue from where we left off.\n                if self.pp_stack[-1].seen_else:\n                    # Here we can just use a shallow copy since we are the last\n                    # reference to it.\n                    self.stack = self.pp_stack[-1].stack_before_else\n                # Drop the corresponding #if\n                self.pp_stack.pop()\n            else:\n                # TODO(google): unexpected #endif, issue warning?\n                pass\n\n    def _Pop(self):\n        \"\"\"Pop the innermost state (top of the stack) and remember the popped item.\"\"\"\n        self.popped_top = self.stack.pop()\n\n    def _CountOpenParentheses(self, line: str):\n        # Count parentheses.  This is to avoid adding struct arguments to\n        # the nesting stack.\n        if self.stack:\n            inner_block = self.stack[-1]\n            depth_change = line.count(\"(\") - line.count(\")\")\n            inner_block.open_parentheses += depth_change\n\n            # Also check if we are starting or ending an inline assembly block.\n            if inner_block.inline_asm in (_NO_ASM, _END_ASM):\n                if (\n                    depth_change != 0\n                    and inner_block.open_parentheses == 1\n                    and _MATCH_ASM.match(line)\n                ):\n                    # Enter assembly block\n                    inner_block.inline_asm = _INSIDE_ASM\n                else:\n                    # Not entering assembly block.  If previous line was _END_ASM,\n                    # we will now shift to _NO_ASM state.\n                    inner_block.inline_asm = _NO_ASM\n            elif inner_block.inline_asm == _INSIDE_ASM and inner_block.open_parentheses == 0:\n                # Exit assembly block\n                inner_block.inline_asm = _END_ASM\n\n    def _UpdateNamesapce(self, line: str, linenum: int) -> str | None:\n        \"\"\"\n        Match start of namespace, append to stack, and consume line\n        Args:\n            line: Line to check and consume\n            linenum: Line number of the line to check\n\n        Returns:\n        The consumed line if namespace matched; None otherwise\n        \"\"\"\n        # Match start of namespace.  The \"\\b\\s*\" below catches namespace\n        # declarations even if it weren't followed by a whitespace, this\n        # is so that we don't confuse our namespace checker.  The\n        # missing spaces will be flagged by CheckSpacing.\n        namespace_decl_match = re.match(r\"^\\s*namespace\\b\\s*([:\\w]+)?(.*)$\", line)\n        if not namespace_decl_match:\n            return None\n\n        new_namespace = _NamespaceInfo(namespace_decl_match.group(1), linenum)\n        self.stack.append(new_namespace)\n\n        line = namespace_decl_match.group(2)\n        if line.find(\"{\") != -1:\n            new_namespace.seen_open_brace = True\n            line = line[line.find(\"{\") + 1 :]\n        return line\n\n    def _UpdateConstructor(self, line: str, linenum: int, class_name: str | None = None):\n        \"\"\"\n        Check if the given line is a constructor.\n        Args:\n            line: Line to check.\n            class_name: If line checked is inside of a class block, a str of the class's name;\n                otherwise, None.\n        \"\"\"\n        if not class_name:\n            if not re.match(r\"\\s*(\\w*)\\s*::\\s*\\1\\s*\\(\", line):\n                return\n        elif not re.match(rf\"\\s*{re.escape(class_name)}\\s*\\(\", line):\n            return\n\n        self.stack.append(_ConstructorInfo(linenum))\n\n    # TODO(google): Update() is too long, but we will refactor later.\n    def Update(self, filename: str, clean_lines: CleansedLines, linenum: int, error):\n        \"\"\"Update nesting state with current line.\n\n        Args:\n          filename: The name of the current file.\n          clean_lines: A CleansedLines instance containing the file.\n          linenum: The number of the line to check.\n          error: The function to call with any errors found.\n        \"\"\"\n        line = clean_lines.elided[linenum]\n\n        # Remember top of the previous nesting stack.\n        #\n        # The stack is always pushed/popped and not modified in place, so\n        # we can just do a shallow copy instead of copy.deepcopy.  Using\n        # deepcopy would slow down cpplint by ~28%.\n        if self.stack:\n            self.previous_stack_top = self.stack[-1]\n            self.previous_open_parentheses = self.stack[-1].open_parentheses\n        else:\n            self.previous_stack_top = None\n\n        # Update pp_stack\n        self.UpdatePreprocessor(line)\n\n        self._CountOpenParentheses(line)\n\n        # Consume namespace declaration at the beginning of the line.  Do\n        # this in a loop so that we catch same line declarations like this:\n        #   namespace proto2 { namespace bridge { class MessageSet; } }\n        while (new_line := self._UpdateNamesapce(line, linenum)) is not None:  # could be empty str\n            line = new_line\n\n        # Look for a class declaration in whatever is left of the line\n        # after parsing namespaces.  The regexp accounts for decorated classes\n        # such as in:\n        #   class LOCKABLE API Object {\n        #   };\n        class_decl_match = re.match(\n            r\"^(\\s*(?:template\\s*<[\\w\\s<>,:=]*>\\s*)?\"\n            r\"(class|struct)\\s+(?:[a-zA-Z0-9_]+\\s+)*(\\w+(?:::\\w+)*))\"\n            r\"(.*)$\",\n            line,\n        )\n        if class_decl_match and (not self.stack or self.stack[-1].open_parentheses == 0):\n            # We do not want to accept classes that are actually template arguments:\n            #   template <class Ignore1,\n            #             class Ignore2 = Default<Args>,\n            #             template <Args> class Ignore3>\n            #   void Function() {};\n            #\n            # To avoid template argument cases, we scan forward and look for\n            # an unmatched '>'.  If we see one, assume we are inside a\n            # template argument list.\n            end_declaration = len(class_decl_match.group(1))\n            if not self.InTemplateArgumentList(clean_lines, linenum, end_declaration):\n                self.stack.append(\n                    _ClassInfo(\n                        class_decl_match.group(3), class_decl_match.group(2), clean_lines, linenum\n                    )\n                )\n                line = class_decl_match.group(4)\n\n        # If we have not yet seen the opening brace for the innermost block,\n        # run checks here.\n        if not self.SeenOpenBrace():\n            self.stack[-1].CheckBegin(filename, clean_lines, linenum, error)\n\n        # Update access control if we are directly inside a class/struct\n        if self.stack and isinstance(self.stack[-1], _ClassInfo):\n            if self.stack[-1].seen_open_brace:\n                classinfo: _ClassInfo = self.stack[-1]\n                # Update access control\n                if access_match := re.match(\n                    r\"^(.*)\\b(public|private|protected|signals)(\\s+(?:slots\\s*)?)?\"\n                    r\":([^:].*|$)\",\n                    line,\n                ):\n                    classinfo.access = access_match.group(2)\n\n                    # Check that access keywords are indented +1 space.  Skip this\n                    # check if the keywords are not preceded by whitespaces.\n                    indent = access_match.group(1)\n                    if len(indent) != classinfo.class_indent + 1 and re.match(r\"^\\s*$\", indent):\n                        if classinfo.is_struct:\n                            parent = \"struct \" + classinfo.name\n                        else:\n                            parent = \"class \" + classinfo.name\n                        slots = \"\"\n                        if access_match.group(3):\n                            slots = access_match.group(3)\n                        error(\n                            filename,\n                            linenum,\n                            \"whitespace/indent\",\n                            3,\n                            f\"{access_match.group(2)}{slots}:\"\n                            f\" should be indented +1 space inside {parent}\",\n                        )\n\n                    line = access_match.group(4)\n                else:\n                    self._UpdateConstructor(line, linenum, class_name=classinfo.name)\n        else:  # Not in class\n            self._UpdateConstructor(line, linenum)\n\n        # If brace not open and we just finished a parenthetical definition,\n        # check if we're in a member initializer list following a constructor.\n        if (\n            self.stack\n            and (\n                isinstance(self.stack[-1], _ConstructorInfo)\n                or isinstance(self.previous_stack_top, _ConstructorInfo)\n            )\n            and not self.stack[-1].seen_open_brace\n            and re.search(r\"[^:]:[^:]\", line)\n        ):\n            self.stack.append(_MemInitListInfo(linenum, seen_open_brace=False))\n\n        # Consume braces or semicolons from what's left of the line\n        while True:\n            # Match first brace, semicolon, or closed parenthesis.\n            matched = re.match(r\"^[^{;)}]*([{;)}])(.*)$\", line)\n            if not matched:\n                break\n\n            token = matched.group(1)\n            if token == \"{\":\n                # If namespace or class hasn't seen an opening brace yet, mark\n                # namespace/class head as complete.  Push a new block onto the\n                # stack otherwise.\n                if not self.SeenOpenBrace():\n                    # End of initializer list wrap if present\n                    if isinstance(self.stack[-1], _MemInitListInfo):\n                        self._Pop()\n                    self.stack[-1].seen_open_brace = True\n                elif re.match(r'^extern\\s*\"[^\"]*\"\\s*\\{', line):\n                    self.stack.append(_ExternCInfo(linenum))\n                else:\n                    self.stack.append(_BlockInfo(linenum, True))\n                    if _MATCH_ASM.match(line):\n                        self.stack[-1].inline_asm = _BLOCK_ASM\n            elif token == \";\":\n                # If we haven't seen an opening brace yet, but we already saw\n                # a semicolon, this is probably a forward declaration.  Pop\n                # the stack for these.\n                if not self.SeenOpenBrace():\n                    self._Pop()\n            elif token == \")\":\n                # Similarly, if we haven't seen an opening brace yet, but we\n                # already saw a closing parenthesis, then these are probably\n                # function arguments with extra \"class\" or \"struct\" keywords.\n                # Also pop these stack for these.\n                if (\n                    self.stack\n                    and not self.stack[-1].seen_open_brace\n                    and isinstance(self.stack[-1], _ClassInfo)\n                ):\n                    self._Pop()\n            else:  # token == '}'\n                # Perform end of block checks and pop the stack.\n                if self.stack:\n                    self.stack[-1].CheckEnd(filename, clean_lines, linenum, error)\n                    self._Pop()\n            line = matched.group(2)\n\n    def InnermostClass(self):\n        \"\"\"Get class info on the top of the stack.\n\n        Returns:\n          A _ClassInfo object if we are inside a class, or None otherwise.\n        \"\"\"\n        for i in range(len(self.stack), 0, -1):\n            classinfo = self.stack[i - 1]\n            if isinstance(classinfo, _ClassInfo):\n                return classinfo\n        return None\n\n\ndef CheckForNonStandardConstructs(filename, clean_lines, linenum, nesting_state, error):\n    r\"\"\"Logs an error if we see certain non-ANSI constructs ignored by gcc-2.\n\n    Complain about several constructs which gcc-2 accepts, but which are\n    not standard C++.  Warning about these in lint is one way to ease the\n    transition to new compilers.\n    - put storage class first (e.g. \"static const\" instead of \"const static\").\n    - \"%lld\" instead of %qd\" in printf-type functions.\n    - \"%1$d\" is non-standard in printf-type functions.\n    - \"\\%\" is an undefined character escape sequence.\n    - text after #endif is not allowed.\n    - invalid inner-style forward declaration.\n    - >? and <? operators, and their >?= and <?= cousins.\n\n    Additionally, check for constructor/destructor style violations and reference\n    members, as it is very convenient to do so while checking for\n    gcc-2 compliance.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      nesting_state: A NestingState instance which maintains information about\n                     the current stack of nested blocks being parsed.\n      error: A callable to which errors are reported, which takes 4 arguments:\n             filename, line number, error level, and message\n    \"\"\"\n\n    # Remove comments from the line, but leave in strings for now.\n    line = clean_lines.lines[linenum]\n\n    if re.search(r'printf\\s*\\(.*\".*%[-+ ]?\\d*q', line):\n        error(\n            filename,\n            linenum,\n            \"runtime/printf_format\",\n            3,\n            \"%q in format strings is deprecated.  Use %ll instead.\",\n        )\n\n    if re.search(r'printf\\s*\\(.*\".*%\\d+\\$', line):\n        error(\n            filename,\n            linenum,\n            \"runtime/printf_format\",\n            2,\n            \"%N$ formats are unconventional.  Try rewriting to avoid them.\",\n        )\n\n    # Remove escaped backslashes before looking for undefined escapes.\n    line = line.replace(\"\\\\\\\\\", \"\")\n\n    if re.search(r'(\"|\\').*\\\\(%|\\[|\\(|{)', line):\n        error(\n            filename,\n            linenum,\n            \"build/printf_format\",\n            3,\n            \"%, [, (, and { are undefined character escapes.  Unescape them.\",\n        )\n\n    # For the rest, work with both comments and strings removed.\n    line = clean_lines.elided[linenum]\n\n    if re.search(\n        r\"\\b(const|volatile|void|char|short|int|long\"\n        r\"|float|double|signed|unsigned\"\n        r\"|schar|u?int8_t|u?int16_t|u?int32_t|u?int64_t)\"\n        r\"\\s+(register|static|extern|typedef)\\b\",\n        line,\n    ):\n        error(\n            filename,\n            linenum,\n            \"build/storage_class\",\n            5,\n            \"Storage-class specifier (static, extern, typedef, etc) should be \"\n            \"at the beginning of the declaration.\",\n        )\n\n    if re.match(r\"\\s*#\\s*endif\\s*[^/\\s]+\", line):\n        error(\n            filename,\n            linenum,\n            \"build/endif_comment\",\n            5,\n            \"Uncommented text after #endif is non-standard.  Use a comment.\",\n        )\n\n    if re.match(r\"\\s*class\\s+(\\w+\\s*::\\s*)+\\w+\\s*;\", line):\n        error(\n            filename,\n            linenum,\n            \"build/forward_decl\",\n            5,\n            \"Inner-style forward declarations are invalid.  Remove this line.\",\n        )\n\n    if re.search(r\"(\\w+|[+-]?\\d+(\\.\\d*)?)\\s*(<|>)\\?=?\\s*(\\w+|[+-]?\\d+)(\\.\\d*)?\", line):\n        error(\n            filename,\n            linenum,\n            \"build/deprecated\",\n            3,\n            \">? and <? (max and min) operators are non-standard and deprecated.\",\n        )\n\n    if re.search(r\"^\\s*const\\s*string\\s*&\\s*\\w+\\s*;\", line):\n        # TODO(google): Could it be expanded safely to arbitrary references,\n        # without triggering too many false positives? The first\n        # attempt triggered 5 warnings for mostly benign code in the regtest, hence\n        # the restriction.\n        # Here's the original regexp, for the reference:\n        # type_name = r'\\w+((\\s*::\\s*\\w+)|(\\s*<\\s*\\w+?\\s*>))?'\n        # r'\\s*const\\s*' + type_name + '\\s*&\\s*\\w+\\s*;'\n        error(\n            filename,\n            linenum,\n            \"runtime/member_string_references\",\n            2,\n            \"const string& members are dangerous. It is much better to use \"\n            \"alternatives, such as pointers or simple constants.\",\n        )\n\n    # Everything else in this function operates on class declarations.\n    # Return early if the top of the nesting stack is not a class, or if\n    # the class head is not completed yet.\n    classinfo = nesting_state.InnermostClass()\n    if not classinfo or not classinfo.seen_open_brace:\n        return\n\n    # The class may have been declared with namespace or classname qualifiers.\n    # The constructor and destructor will not have those qualifiers.\n    base_classname = classinfo.name.split(\"::\")[-1]\n\n    # Look for single-argument constructors that aren't marked explicit.\n    # Technically a valid construct, but against style.\n    explicit_constructor_match = re.match(\n        r\"\\s+(?:(?:inline|constexpr)\\s+)*(explicit\\s+)?\"\n        rf\"(?:(?:inline|constexpr)\\s+)*{re.escape(base_classname)}\\s*\"\n        r\"\\(((?:[^()]|\\([^()]*\\))*)\\)\",\n        line,\n    )\n\n    if explicit_constructor_match:\n        is_marked_explicit = explicit_constructor_match.group(1)\n\n        if not explicit_constructor_match.group(2):\n            constructor_args = []\n        else:\n            constructor_args = explicit_constructor_match.group(2).split(\",\")\n\n        # collapse arguments so that commas in template parameter lists and function\n        # argument parameter lists don't split arguments in two\n        i = 0\n        while i < len(constructor_args):\n            constructor_arg = constructor_args[i]\n            while constructor_arg.count(\"<\") > constructor_arg.count(\">\") or constructor_arg.count(\n                \"(\"\n            ) > constructor_arg.count(\")\"):\n                constructor_arg += \",\" + constructor_args[i + 1]\n                del constructor_args[i + 1]\n            constructor_args[i] = constructor_arg\n            i += 1\n\n        variadic_args = [arg for arg in constructor_args if \"&&...\" in arg]\n        defaulted_args = [arg for arg in constructor_args if \"=\" in arg]\n        noarg_constructor = (\n            not constructor_args  # empty arg list\n            or\n            # 'void' arg specifier\n            (len(constructor_args) == 1 and constructor_args[0].strip() == \"void\")\n        )\n        onearg_constructor = (\n            (\n                len(constructor_args) == 1  # exactly one arg\n                and not noarg_constructor\n            )\n            or\n            # all but at most one arg defaulted\n            (\n                len(constructor_args) >= 1\n                and not noarg_constructor\n                and len(defaulted_args) >= len(constructor_args) - 1\n            )\n            or\n            # variadic arguments with zero or one argument\n            (len(constructor_args) <= 2 and len(variadic_args) >= 1)\n        )\n        initializer_list_constructor = bool(\n            onearg_constructor\n            and re.search(r\"\\bstd\\s*::\\s*initializer_list\\b\", constructor_args[0])\n        )\n        copy_constructor = bool(\n            onearg_constructor\n            and re.match(\n                r\"((const\\s+(volatile\\s+)?)?|(volatile\\s+(const\\s+)?))?\"\n                rf\"{re.escape(base_classname)}(\\s*<[^>]*>)?(\\s+const)?\\s*(?:<\\w+>\\s*)?&\",\n                constructor_args[0].strip(),\n            )\n        )\n\n        if (\n            not is_marked_explicit\n            and onearg_constructor\n            and not initializer_list_constructor\n            and not copy_constructor\n        ):\n            if defaulted_args or variadic_args:\n                error(\n                    filename,\n                    linenum,\n                    \"runtime/explicit\",\n                    4,\n                    \"Constructors callable with one argument should be marked explicit.\",\n                )\n            else:\n                error(\n                    filename,\n                    linenum,\n                    \"runtime/explicit\",\n                    4,\n                    \"Single-parameter constructors should be marked explicit.\",\n                )\n\n\ndef CheckSpacingForFunctionCall(filename, clean_lines, linenum, error):\n    \"\"\"Checks for the correctness of various spacing around function calls.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n    line = clean_lines.elided[linenum]\n\n    # Since function calls often occur inside if/for/while/switch\n    # expressions - which have their own, more liberal conventions - we\n    # first see if we should be looking inside such an expression for a\n    # function call, to which we can apply more strict standards.\n    fncall = line  # if there's no control flow construct, look at whole line\n    for pattern in (\n        r\"\\bif\\s*\\((.*)\\)\\s*{\",\n        r\"\\bfor\\s*\\((.*)\\)\\s*{\",\n        r\"\\bwhile\\s*\\((.*)\\)\\s*[{;]\",\n        r\"\\bswitch\\s*\\((.*)\\)\\s*{\",\n    ):\n        match = re.search(pattern, line)\n        if match:\n            fncall = match.group(1)  # look inside the parens for function calls\n            break\n\n    # Except in if/for/while/switch, there should never be space\n    # immediately inside parens (eg \"f( 3, 4 )\").  We make an exception\n    # for nested parens ( (a+b) + c ).  Likewise, there should never be\n    # a space before a ( when it's a function argument.  I assume it's a\n    # function argument when the char before the whitespace is legal in\n    # a function name (alnum + _) and we're not starting a macro. Also ignore\n    # pointers and references to arrays and functions coz they're too tricky:\n    # we use a very simple way to recognize these:\n    # \" (something)(maybe-something)\" or\n    # \" (something)(maybe-something,\" or\n    # \" (something)[something]\"\n    # Note that we assume the contents of [] to be short enough that\n    # they'll never need to wrap.\n    if (  # Ignore control structures.\n        not re.search(r\"\\b(if|elif|for|while|switch|return|new|delete|catch|sizeof)\\b\", fncall)\n        and\n        # Ignore pointers/references to functions.\n        not re.search(r\" \\([^)]+\\)\\([^)]*(\\)|,$)\", fncall)\n        and\n        # Ignore pointers/references to arrays.\n        not re.search(r\" \\([^)]+\\)\\[[^\\]]+\\]\", fncall)\n    ):\n        if re.search(r\"\\w\\s*\\(\\s(?!\\s*\\\\$)\", fncall):  # a ( used for a fn call\n            error(filename, linenum, \"whitespace/parens\", 4, \"Extra space after ( in function call\")\n        elif re.search(r\"\\(\\s+(?!(\\s*\\\\)|\\()\", fncall):\n            error(filename, linenum, \"whitespace/parens\", 2, \"Extra space after (\")\n        if (\n            re.search(r\"\\w\\s+\\(\", fncall)\n            and not re.search(r\"_{0,2}asm_{0,2}\\s+_{0,2}volatile_{0,2}\\s+\\(\", fncall)\n            and not re.search(r\"#\\s*define|typedef|using\\s+\\w+\\s*=\", fncall)\n            and not re.search(r\"\\w\\s+\\((\\w+::)*\\*\\w+\\)\\(\", fncall)\n            and not re.search(r\"\\bcase\\s+\\(\", fncall)\n        ):\n            # TODO(google): Space after an operator function seem to be a common\n            # error, silence those for now by restricting them to highest verbosity.\n            if re.search(r\"\\boperator_*\\b\", line):\n                error(\n                    filename,\n                    linenum,\n                    \"whitespace/parens\",\n                    0,\n                    \"Extra space before ( in function call\",\n                )\n            else:\n                error(\n                    filename,\n                    linenum,\n                    \"whitespace/parens\",\n                    4,\n                    \"Extra space before ( in function call\",\n                )\n        # If the ) is followed only by a newline or a { + newline, assume it's\n        # part of a control statement (if/while/etc), and don't complain\n        if re.search(r\"[^)]\\s+\\)\\s*[^{\\s]\", fncall):\n            # If the closing parenthesis is preceded by only whitespaces,\n            # try to give a more descriptive error message.\n            if re.search(r\"^\\s+\\)\", fncall):\n                error(\n                    filename,\n                    linenum,\n                    \"whitespace/parens\",\n                    2,\n                    \"Closing ) should be moved to the previous line\",\n                )\n            else:\n                error(filename, linenum, \"whitespace/parens\", 2, \"Extra space before )\")\n\n\ndef IsBlankLine(line):\n    \"\"\"Returns true if the given line is blank.\n\n    We consider a line to be blank if the line is empty or consists of\n    only white spaces.\n\n    Args:\n      line: A line of a string.\n\n    Returns:\n      True, if the given line is blank.\n    \"\"\"\n    return not line or line.isspace()\n\n\ndef CheckForNamespaceIndentation(filename, nesting_state, clean_lines, line, error):\n    is_namespace_indent_item = len(nesting_state.stack) >= 1 and (\n        isinstance(nesting_state.stack[-1], _NamespaceInfo)\n        or (isinstance(nesting_state.previous_stack_top, _NamespaceInfo))\n    )\n\n    if ShouldCheckNamespaceIndentation(\n        nesting_state, is_namespace_indent_item, clean_lines.elided, line\n    ):\n        CheckItemIndentationInNamespace(filename, clean_lines.elided, line, error)\n\n\ndef CheckForFunctionLengths(filename, clean_lines, linenum, function_state, error):\n    \"\"\"Reports for long function bodies.\n\n    For an overview why this is done, see:\n    https://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Write_Short_Functions\n\n    Uses a simplistic algorithm assuming other style guidelines\n    (especially spacing) are followed.\n    Only checks unindented functions, so class members are unchecked.\n    Trivial bodies are unchecked, so constructors with huge initializer lists\n    may be missed.\n    Blank/comment lines are not counted so as to avoid encouraging the removal\n    of vertical space and comments just to get through a lint check.\n    NOLINT *on the last line of a function* disables this check.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      function_state: Current function name and lines in body so far.\n      error: The function to call with any errors found.\n    \"\"\"\n    lines = clean_lines.lines\n    line = lines[linenum]\n    joined_line = \"\"\n\n    starting_func = False\n    regexp = r\"(\\w(\\w|::|\\*|\\&|\\s)*)\\(\"  # decls * & space::name( ...\n    if match_result := re.match(regexp, line):\n        # If the name is all caps and underscores, figure it's a macro and\n        # ignore it, unless it's TEST or TEST_F.\n        function_name = match_result.group(1).split()[-1]\n        if function_name in {\"TEST\", \"TEST_F\"} or not re.match(r\"[A-Z_]+$\", function_name):\n            starting_func = True\n\n    if starting_func:\n        body_found = False\n        for start_linenum in range(linenum, clean_lines.NumLines()):\n            start_line = lines[start_linenum]\n            joined_line += \" \" + start_line.lstrip()\n            if re.search(r\"(;|})\", start_line):  # Declarations and trivial functions\n                body_found = True\n                break  # ... ignore\n            if re.search(r\"{\", start_line):\n                body_found = True\n                function = re.search(r\"((\\w|:)*)\\(\", line).group(1)\n                if re.match(r\"TEST\", function):  # Handle TEST... macros\n                    parameter_regexp = re.search(r\"(\\(.*\\))\", joined_line)\n                    if parameter_regexp:  # Ignore bad syntax\n                        function += parameter_regexp.group(1)\n                else:\n                    function += \"()\"\n                function_state.Begin(function)\n                break\n        if not body_found:\n            # No body for the function (or evidence of a non-function) was found.\n            error(\n                filename,\n                linenum,\n                \"readability/fn_size\",\n                5,\n                \"Lint failed to find start of function body.\",\n            )\n    elif re.match(r\"^\\}\\s*$\", line):  # function end\n        function_state.Check(error, filename, linenum)\n        function_state.End()\n    elif not re.match(r\"^\\s*$\", line):\n        function_state.Count()  # Count non-blank/non-comment lines.\n\n\n_RE_PATTERN_TODO = re.compile(r\"^//(\\s*)TODO(\\(.+?\\))?:?(\\s|$)?\")\n\n\ndef CheckComment(line, filename, linenum, next_line_start, error):\n    \"\"\"Checks for common mistakes in comments.\n\n    Args:\n      line: The line in question.\n      filename: The name of the current file.\n      linenum: The number of the line to check.\n      next_line_start: The first non-whitespace column of the next line.\n      error: The function to call with any errors found.\n    \"\"\"\n    commentpos = line.find(\"//\")\n    if commentpos != -1:\n        # Check if the // may be in quotes.  If so, ignore it\n        if re.sub(r\"\\\\.\", \"\", line[0:commentpos]).count('\"') % 2 == 0:\n            # Allow one space for new scopes, two spaces otherwise:\n            if not (re.match(r\"^.*{ *//\", line) and next_line_start == commentpos) and (\n                (commentpos >= 1 and line[commentpos - 1] not in string.whitespace)\n                or (commentpos >= 2 and line[commentpos - 2] not in string.whitespace)\n            ):\n                error(\n                    filename,\n                    linenum,\n                    \"whitespace/comments\",\n                    2,\n                    \"At least two spaces is best between code and comments\",\n                )\n\n            # Checks for common mistakes in TODO comments.\n            comment = line[commentpos:]\n            match = _RE_PATTERN_TODO.match(comment)\n            if match:\n                # One whitespace is correct; zero whitespace is handled elsewhere.\n                leading_whitespace = match.group(1)\n                if len(leading_whitespace) > 1:\n                    error(filename, linenum, \"whitespace/todo\", 2, \"Too many spaces before TODO\")\n\n                username = match.group(2)\n                if not username:\n                    error(\n                        filename,\n                        linenum,\n                        \"readability/todo\",\n                        2,\n                        \"Missing username in TODO; it should look like \"\n                        '\"// TODO(my_username): Stuff.\"',\n                    )\n\n                middle_whitespace = match.group(3)\n                # Comparisons made explicit for correctness\n                #  -- pylint: disable=g-explicit-bool-comparison\n                if middle_whitespace not in {\" \", \"\"}:\n                    error(\n                        filename,\n                        linenum,\n                        \"whitespace/todo\",\n                        2,\n                        \"TODO(my_username) should be followed by a space\",\n                    )\n\n            # If the comment contains an alphanumeric character, there\n            # should be a space somewhere between it and the // unless\n            # it's a /// or //! Doxygen comment.\n            if re.match(r\"//[^ ]*\\w\", comment) and not re.match(r\"(///|//\\!)(\\s+|$)\", comment):\n                error(\n                    filename,\n                    linenum,\n                    \"whitespace/comments\",\n                    4,\n                    \"Should have a space between // and comment\",\n                )\n\n\ndef CheckSpacing(filename, clean_lines, linenum, nesting_state, error):\n    \"\"\"Checks for the correctness of various spacing issues in the code.\n\n    Things we check for: spaces around operators, spaces after\n    if/for/while/switch, no spaces around parens in function calls, two\n    spaces between code and comment, don't start a block with a blank\n    line, don't end a function with a blank line, don't add a blank line\n    after public/protected/private, don't have too many blank lines in a row.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      nesting_state: A NestingState instance which maintains information about\n                     the current stack of nested blocks being parsed.\n      error: The function to call with any errors found.\n    \"\"\"\n\n    # Don't use \"elided\" lines here, otherwise we can't check commented lines.\n    # Don't want to use \"raw\" either, because we don't want to check inside C++11\n    # raw strings,\n    raw = clean_lines.lines_without_raw_strings\n    line = raw[linenum]\n\n    # Before nixing comments, check if the line is blank for no good\n    # reason.  This includes the first line after a block is opened, and\n    # blank lines at the end of a function (ie, right before a line like '}'\n    #\n    # Skip all the blank line checks if we are immediately inside a\n    # namespace body.  In other words, don't issue blank line warnings\n    # for this block:\n    #   namespace {\n    #\n    #   }\n    #\n    # A warning about missing end of namespace comments will be issued instead.\n    #\n    # Also skip blank line checks for 'extern \"C\"' blocks, which are formatted\n    # like namespaces.\n    if IsBlankLine(line) and not nesting_state.InNamespaceBody() and not nesting_state.InExternC():\n        elided = clean_lines.elided\n        prev_line = elided[linenum - 1]\n        prevbrace = prev_line.rfind(\"{\")\n        # TODO(google): Don't complain if line before blank line, and line after,\n        #                both start with alnums and are indented the same amount.\n        #                This ignores whitespace at the start of a namespace block\n        #                because those are not usually indented.\n        if prevbrace != -1 and prev_line[prevbrace:].find(\"}\") == -1:\n            # OK, we have a blank line at the start of a code block.  Before we\n            # complain, we check if it is an exception to the rule: The previous\n            # non-empty line has the parameters of a function header that are indented\n            # 4 spaces (because they did not fit in a 80 column line when placed on\n            # the same line as the function name).  We also check for the case where\n            # the previous line is indented 6 spaces, which may happen when the\n            # initializers of a constructor do not fit into a 80 column line.\n            exception = False\n            if re.match(r\" {6}\\w\", prev_line):  # Initializer list?\n                # We are looking for the opening column of initializer list, which\n                # should be indented 4 spaces to cause 6 space indentation afterwards.\n                search_position = linenum - 2\n                while search_position >= 0 and re.match(r\" {6}\\w\", elided[search_position]):\n                    search_position -= 1\n                exception = search_position >= 0 and elided[search_position][:5] == \"    :\"\n            else:\n                # Search for the function arguments or an initializer list.  We use a\n                # simple heuristic here: If the line is indented 4 spaces; and we have a\n                # closing paren, without the opening paren, followed by an opening brace\n                # or colon (for initializer lists) we assume that it is the last line of\n                # a function header.  If we have a colon indented 4 spaces, it is an\n                # initializer list.\n                exception = re.match(\n                    r\" {4}\\w[^\\(]*\\)\\s*(const\\s*)?(\\{\\s*$|:)\", prev_line\n                ) or re.match(r\" {4}:\", prev_line)\n\n            if not exception:\n                error(\n                    filename,\n                    linenum,\n                    \"whitespace/blank_line\",\n                    2,\n                    \"Redundant blank line at the start of a code block should be deleted.\",\n                )\n        # Ignore blank lines at the end of a block in a long if-else\n        # chain, like this:\n        #   if (condition1) {\n        #     // Something followed by a blank line\n        #\n        #   } else if (condition2) {\n        #     // Something else\n        #   }\n        if linenum + 1 < clean_lines.NumLines():\n            next_line = raw[linenum + 1]\n            if next_line and re.match(r\"\\s*}\", next_line) and next_line.find(\"} else \") == -1:\n                error(\n                    filename,\n                    linenum,\n                    \"whitespace/blank_line\",\n                    3,\n                    \"Redundant blank line at the end of a code block should be deleted.\",\n                )\n\n        matched = re.match(r\"\\s*(public|protected|private):\", prev_line)\n        if matched:\n            error(\n                filename,\n                linenum,\n                \"whitespace/blank_line\",\n                3,\n                f'Do not leave a blank line after \"{matched.group(1)}:\"',\n            )\n\n    # Next, check comments\n    next_line_start = 0\n    if linenum + 1 < clean_lines.NumLines():\n        next_line = raw[linenum + 1]\n        next_line_start = len(next_line) - len(next_line.lstrip())\n    CheckComment(line, filename, linenum, next_line_start, error)\n\n    # get rid of comments and strings\n    line = clean_lines.elided[linenum]\n\n    # You shouldn't have spaces before your brackets, except for C++11 attributes\n    # or maybe after 'delete []', 'return []() {};', or 'auto [abc, ...] = ...;'.\n    if re.search(r\"\\w\\s+\\[(?!\\[)\", line) and not re.search(r\"(?:auto&?|delete|return)\\s+\\[\", line):\n        error(filename, linenum, \"whitespace/braces\", 5, \"Extra space before [\")\n\n    # In range-based for, we wanted spaces before and after the colon, but\n    # not around \"::\" tokens that might appear.\n    if re.search(r\"for *\\(.*[^:]:[^: ]\", line) or re.search(r\"for *\\(.*[^: ]:[^:]\", line):\n        error(\n            filename,\n            linenum,\n            \"whitespace/forcolon\",\n            2,\n            \"Missing space around colon in range-based for loop\",\n        )\n\n\ndef CheckOperatorSpacing(filename, clean_lines, linenum, error):\n    \"\"\"Checks for horizontal spacing around operators.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n    line = clean_lines.elided[linenum]\n\n    # Don't try to do spacing checks for operator methods.  Do this by\n    # replacing the troublesome characters with something else,\n    # preserving column position for all other characters.\n    #\n    # The replacement is done repeatedly to avoid false positives from\n    # operators that call operators.\n    while True:\n        match = re.match(r\"^(.*\\boperator\\b)(\\S+)(\\s*\\(.*)$\", line)\n        if match:\n            line = match.group(1) + (\"_\" * len(match.group(2))) + match.group(3)\n        else:\n            break\n\n    # We allow no-spaces around = within an if: \"if ( (a=Foo()) == 0 )\".\n    # Otherwise not.  Note we only check for non-spaces on *both* sides;\n    # sometimes people put non-spaces on one side when aligning ='s among\n    # many lines (not that this is behavior that I approve of...)\n    if (\n        (re.search(r\"[\\w.]=\", line) or re.search(r\"=[\\w.]\", line))\n        and not re.search(r\"\\b(if|while|for) \", line)\n        # Operators taken from [lex.operators] in C++11 standard.\n        and not re.search(r\"(>=|<=|==|!=|&=|\\^=|\\|=|\\+=|\\*=|\\/=|\\%=)\", line)\n        and not re.search(r\"operator=\", line)\n    ):\n        error(filename, linenum, \"whitespace/operators\", 4, \"Missing spaces around =\")\n\n    # It's ok not to have spaces around binary operators like + - * /, but if\n    # there's too little whitespace, we get concerned.  It's hard to tell,\n    # though, so we punt on this one for now.  TODO(google).\n\n    # You should always have whitespace around binary operators.\n    #\n    # Check <= and >= first to avoid false positives with < and >, then\n    # check non-include lines for spacing around < and >.\n    #\n    # If the operator is followed by a comma, assume it's be used in a\n    # macro context and don't do any checks.  This avoids false\n    # positives.\n    #\n    # Note that && is not included here.  This is because there are too\n    # many false positives due to RValue references.\n    match = re.search(r\"[^<>=!\\s](==|!=|<=|>=|\\|\\|)[^<>=!\\s,;\\)]\", line)\n    if match:\n        # TODO(google): support alternate operators\n        error(\n            filename, linenum, \"whitespace/operators\", 3, f\"Missing spaces around {match.group(1)}\"\n        )\n    elif not re.match(r\"#.*include\", line):\n        # Look for < that is not surrounded by spaces.  This is only\n        # triggered if both sides are missing spaces, even though\n        # technically should should flag if at least one side is missing a\n        # space.  This is done to avoid some false positives with shifts.\n        match = re.match(r\"^(.*[^\\s<])<[^\\s=<,]\", line)\n        if match:\n            (_, _, end_pos) = CloseExpression(clean_lines, linenum, len(match.group(1)))\n            if end_pos <= -1:\n                error(filename, linenum, \"whitespace/operators\", 3, \"Missing spaces around <\")\n\n        # Look for > that is not surrounded by spaces.  Similar to the\n        # above, we only trigger if both sides are missing spaces to avoid\n        # false positives with shifts.\n        match = re.match(r\"^(.*[^-\\s>])>[^\\s=>,]\", line)\n        if match:\n            (_, _, start_pos) = ReverseCloseExpression(clean_lines, linenum, len(match.group(1)))\n            if start_pos <= -1:\n                error(filename, linenum, \"whitespace/operators\", 3, \"Missing spaces around >\")\n\n    # We allow no-spaces around << when used like this: 10<<20, but\n    # not otherwise (particularly, not when used as streams)\n    #\n    # We also allow operators following an opening parenthesis, since\n    # those tend to be macros that deal with operators.\n    match = re.search(r\"(operator|[^\\s(<])(?:L|UL|LL|ULL|l|ul|ll|ull)?<<([^\\s,=<])\", line)\n    if (\n        match\n        and not (match.group(1).isdigit() and match.group(2).isdigit())\n        and not (match.group(1) == \"operator\" and match.group(2) == \";\")\n    ):\n        error(filename, linenum, \"whitespace/operators\", 3, \"Missing spaces around <<\")\n\n    # We allow no-spaces around >> for almost anything.  This is because\n    # C++11 allows \">>\" to close nested templates, which accounts for\n    # most cases when \">>\" is not followed by a space.\n    #\n    # We still warn on \">>\" followed by alpha character, because that is\n    # likely due to \">>\" being used for right shifts, e.g.:\n    #   value >> alpha\n    #\n    # When \">>\" is used to close templates, the alphanumeric letter that\n    # follows would be part of an identifier, and there should still be\n    # a space separating the template type and the identifier.\n    #   type<type<type>> alpha\n    match = re.search(r\">>[a-zA-Z_]\", line)\n    if match:\n        error(filename, linenum, \"whitespace/operators\", 3, \"Missing spaces around >>\")\n\n    # There shouldn't be space around unary operators\n    match = re.search(r\"(!\\s|~\\s|[\\s]--[\\s;]|[\\s]\\+\\+[\\s;])\", line)\n    if match:\n        error(\n            filename,\n            linenum,\n            \"whitespace/operators\",\n            4,\n            f\"Extra space for operator {match.group(1)}\",\n        )\n\n\ndef CheckParenthesisSpacing(filename, clean_lines, linenum, error):\n    \"\"\"Checks for horizontal spacing around parentheses.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n    line = clean_lines.elided[linenum]\n\n    # No spaces after an if, while, switch, or for\n    match = re.search(r\" (if\\(|for\\(|while\\(|switch\\()\", line)\n    if match:\n        error(\n            filename, linenum, \"whitespace/parens\", 5, f\"Missing space before ( in {match.group(1)}\"\n        )\n\n    # For if/for/while/switch, the left and right parens should be\n    # consistent about how many spaces are inside the parens, and\n    # there should either be zero or one spaces inside the parens.\n    # We don't want: \"if ( foo)\" or \"if ( foo   )\".\n    # Exception: \"for ( ; foo; bar)\" and \"for (foo; bar; )\" are allowed.\n    match = re.search(\n        r\"\\b(if|for|while|switch)\\s*\"\n        r\"\\(([ ]*)(.).*[^ ]+([ ]*)\\)\\s*{\\s*$\",\n        line,\n    )\n    if match:\n        if len(match.group(2)) != len(match.group(4)) and not (\n            match.group(3) == \";\"\n            and len(match.group(2)) == 1 + len(match.group(4))\n            or not match.group(2)\n            and re.search(r\"\\bfor\\s*\\(.*; \\)\", line)\n        ):\n            error(\n                filename,\n                linenum,\n                \"whitespace/parens\",\n                5,\n                f\"Mismatching spaces inside () in {match.group(1)}\",\n            )\n        if len(match.group(2)) not in [0, 1]:\n            error(\n                filename,\n                linenum,\n                \"whitespace/parens\",\n                5,\n                f\"Should have zero or one spaces inside ( and ) in {match.group(1)}\",\n            )\n\n\ndef CheckCommaSpacing(filename, clean_lines, linenum, error):\n    \"\"\"Checks for horizontal spacing near commas and semicolons.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n    raw = clean_lines.lines_without_raw_strings\n    line = clean_lines.elided[linenum]\n\n    # You should always have a space after a comma (either as fn arg or operator)\n    #\n    # This does not apply when the non-space character following the\n    # comma is another comma, since the only time when that happens is\n    # for empty macro arguments.\n    #\n    # We run this check in two passes: first pass on elided lines to\n    # verify that lines contain missing whitespaces, second pass on raw\n    # lines to confirm that those missing whitespaces are not due to\n    # elided comments.\n    match = re.search(\n        r\",[^,\\s]\", re.sub(r\"\\b__VA_OPT__\\s*\\(,\\)\", \"\", re.sub(r\"\\boperator\\s*,\\s*\\(\", \"F(\", line))\n    )\n    if match and re.search(r\",[^,\\s]\", raw[linenum]):\n        error(filename, linenum, \"whitespace/comma\", 3, \"Missing space after ,\")\n\n    # You should always have a space after a semicolon\n    # except for few corner cases\n    # TODO(google): clarify if 'if (1) { return 1;}' is requires one more\n    # space after ;\n    if re.search(r\";[^\\s};\\\\)/]\", line):\n        error(filename, linenum, \"whitespace/semicolon\", 3, \"Missing space after ;\")\n\n\ndef _IsType(clean_lines, nesting_state, expr):\n    \"\"\"Check if expression looks like a type name, returns true if so.\n\n    Args:\n      clean_lines: A CleansedLines instance containing the file.\n      nesting_state: A NestingState instance which maintains information about\n                     the current stack of nested blocks being parsed.\n      expr: The expression to check.\n    Returns:\n      True, if token looks like a type.\n    \"\"\"\n    # Keep only the last token in the expression\n    if last_word := re.match(r\"^.*(\\b\\S+)$\", expr):\n        token = last_word.group(1)\n    else:\n        token = expr\n\n    # Match native types and stdint types\n    if _TYPES.match(token):\n        return True\n\n    # Try a bit harder to match templated types.  Walk up the nesting\n    # stack until we find something that resembles a typename\n    # declaration for what we are looking for.\n    typename_pattern = r\"\\b(?:typename|class|struct)\\s+\" + re.escape(token) + r\"\\b\"\n    block_index = len(nesting_state.stack) - 1\n    while block_index >= 0:\n        if isinstance(nesting_state.stack[block_index], _NamespaceInfo):\n            return False\n\n        # Found where the opening brace is.  We want to scan from this\n        # line up to the beginning of the function, minus a few lines.\n        #   template <typename Type1,  // stop scanning here\n        #             ...>\n        #   class C\n        #     : public ... {  // start scanning here\n        last_line = nesting_state.stack[block_index].starting_linenum\n\n        next_block_start = 0\n        if block_index > 0:\n            next_block_start = nesting_state.stack[block_index - 1].starting_linenum\n        first_line = last_line\n        while first_line >= next_block_start:\n            if clean_lines.elided[first_line].find(\"template\") >= 0:\n                break\n            first_line -= 1\n        if first_line < next_block_start:\n            # Didn't find any \"template\" keyword before reaching the next block,\n            # there are probably no template things to check for this block\n            block_index -= 1\n            continue\n\n        # Look for typename in the specified range\n        for i in range(first_line, last_line + 1, 1):\n            if re.search(typename_pattern, clean_lines.elided[i]):\n                return True\n        block_index -= 1\n\n    return False\n\n\ndef CheckBracesSpacing(filename, clean_lines, linenum, nesting_state, error):\n    \"\"\"Checks for horizontal spacing near commas.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      nesting_state: A NestingState instance which maintains information about\n                     the current stack of nested blocks being parsed.\n      error: The function to call with any errors found.\n    \"\"\"\n    line = clean_lines.elided[linenum]\n\n    # Except after an opening paren, or after another opening brace (in case of\n    # an initializer list, for instance), you should have spaces before your\n    # braces when they are delimiting blocks, classes, namespaces etc.\n    # And since you should never have braces at the beginning of a line,\n    # this is an easy test.  Except that braces used for initialization don't\n    # follow the same rule; we often don't want spaces before those.\n\n    if match := re.match(r\"^(.*[^ ({>]){\", line):\n        # Try a bit harder to check for brace initialization.  This\n        # happens in one of the following forms:\n        #   Constructor() : initializer_list_{} { ... }\n        #   Constructor{}.MemberFunction()\n        #   Type variable{};\n        #   FunctionCall(type{}, ...);\n        #   LastArgument(..., type{});\n        #   LOG(INFO) << type{} << \" ...\";\n        #   map_of_type[{...}] = ...;\n        #   ternary = expr ? new type{} : nullptr;\n        #   OuterTemplate<InnerTemplateConstructor<Type>{}>\n        #\n        # We check for the character following the closing brace, and\n        # silence the warning if it's one of those listed above, i.e.\n        # \"{.;,)<>]:\".\n        #\n        # To account for nested initializer list, we allow any number of\n        # closing braces up to \"{;,)<\".  We can't simply silence the\n        # warning on first sight of closing brace, because that would\n        # cause false negatives for things that are not initializer lists.\n        #   Silence this:         But not this:\n        #     Outer{                if (...) {\n        #       Inner{...}            if (...){  // Missing space before {\n        #     };                    }\n        #\n        # There is a false negative with this approach if people inserted\n        # spurious semicolons, e.g. \"if (cond){};\", but we will catch the\n        # spurious semicolon with a separate check.\n        leading_text = match.group(1)\n        (endline, endlinenum, endpos) = CloseExpression(clean_lines, linenum, len(match.group(1)))\n        trailing_text = \"\"\n        if endpos > -1:\n            trailing_text = endline[endpos:]\n        for offset in range(endlinenum + 1, min(endlinenum + 3, clean_lines.NumLines() - 1)):\n            trailing_text += clean_lines.elided[offset]\n        # We also suppress warnings for `uint64_t{expression}` etc., as the style\n        # guide recommends brace initialization for integral types to avoid\n        # overflow/truncation.\n        if not re.match(r\"^[\\s}]*[{.;,)<>\\]:]\", trailing_text) and not _IsType(\n            clean_lines, nesting_state, leading_text\n        ):\n            error(filename, linenum, \"whitespace/braces\", 5, \"Missing space before {\")\n\n    # Make sure '} else {' has spaces.\n    if re.search(r\"}else\", line):\n        error(filename, linenum, \"whitespace/braces\", 5, \"Missing space before else\")\n\n    # You shouldn't have a space before a semicolon at the end of the line.\n    # There's a special case for \"for\" since the style guide allows space before\n    # the semicolon there.\n    if re.search(r\":\\s*;\\s*$\", line):\n        error(\n            filename,\n            linenum,\n            \"whitespace/semicolon\",\n            5,\n            \"Semicolon defining empty statement. Use {} instead.\",\n        )\n    elif re.search(r\"^\\s*;\\s*$\", line):\n        error(\n            filename,\n            linenum,\n            \"whitespace/semicolon\",\n            5,\n            \"Line contains only semicolon. If this should be an empty statement, use {} instead.\",\n        )\n    elif re.search(r\"\\s+;\\s*$\", line) and not re.search(r\"\\bfor\\b\", line):\n        error(\n            filename,\n            linenum,\n            \"whitespace/semicolon\",\n            5,\n            \"Extra space before last semicolon. If this should be an empty \"\n            \"statement, use {} instead.\",\n        )\n\n\ndef IsDecltype(clean_lines, linenum, column):\n    \"\"\"Check if the token ending on (linenum, column) is decltype().\n\n    Args:\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: the number of the line to check.\n      column: end column of the token to check.\n    Returns:\n      True if this token is decltype() expression, False otherwise.\n    \"\"\"\n    (text, _, start_col) = ReverseCloseExpression(clean_lines, linenum, column)\n    if start_col < 0:\n        return False\n    return bool(re.search(r\"\\bdecltype\\s*$\", text[0:start_col]))\n\n\ndef CheckSectionSpacing(filename, clean_lines, class_info, linenum, error):\n    \"\"\"Checks for additional blank line issues related to sections.\n\n    Currently the only thing checked here is blank line before protected/private.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      class_info: A _ClassInfo objects.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n    # Skip checks if the class is small, where small means 25 lines or less.\n    # 25 lines seems like a good cutoff since that's the usual height of\n    # terminals, and any class that can't fit in one screen can't really\n    # be considered \"small\".\n    #\n    # Also skip checks if we are on the first line.  This accounts for\n    # classes that look like\n    #   class Foo { public: ... };\n    #\n    # If we didn't find the end of the class, last_line would be zero,\n    # and the check will be skipped by the first condition.\n    if (\n        class_info.last_line - class_info.starting_linenum <= 24\n        or linenum <= class_info.starting_linenum\n    ):\n        return\n\n    matched = re.match(r\"\\s*(public|protected|private):\", clean_lines.lines[linenum])\n    if matched:\n        # Issue warning if the line before public/protected/private was\n        # not a blank line, but don't do this if the previous line contains\n        # \"class\" or \"struct\".  This can happen two ways:\n        #  - We are at the beginning of the class.\n        #  - We are forward-declaring an inner class that is semantically\n        #    private, but needed to be public for implementation reasons.\n        # Also ignores cases where the previous line ends with a backslash as can be\n        # common when defining classes in C macros.\n        prev_line = clean_lines.lines[linenum - 1]\n        if (\n            not IsBlankLine(prev_line)\n            and not re.search(r\"\\b(class|struct)\\b\", prev_line)\n            and not re.search(r\"\\\\$\", prev_line)\n        ):\n            # Try a bit harder to find the beginning of the class.  This is to\n            # account for multi-line base-specifier lists, e.g.:\n            #   class Derived\n            #       : public Base {\n            end_class_head = class_info.starting_linenum\n            for i in range(class_info.starting_linenum, linenum):\n                if re.search(r\"\\{\\s*$\", clean_lines.lines[i]):\n                    end_class_head = i\n                    break\n            if end_class_head < linenum - 1:\n                error(\n                    filename,\n                    linenum,\n                    \"whitespace/blank_line\",\n                    3,\n                    f'\"{matched.group(1)}:\" should be preceded by a blank line',\n                )\n\n\ndef GetPreviousNonBlankLine(clean_lines, linenum):\n    \"\"\"Return the most recent non-blank line and its line number.\n\n    Args:\n      clean_lines: A CleansedLines instance containing the file contents.\n      linenum: The number of the line to check.\n\n    Returns:\n      A tuple with two elements.  The first element is the contents of the last\n      non-blank line before the current line, or the empty string if this is the\n      first non-blank line.  The second is the line number of that line, or -1\n      if this is the first non-blank line.\n    \"\"\"\n\n    prevlinenum = linenum - 1\n    while prevlinenum >= 0:\n        prevline = clean_lines.elided[prevlinenum]\n        if not IsBlankLine(prevline):  # if not a blank line...\n            return (prevline, prevlinenum)\n        prevlinenum -= 1\n    return (\"\", -1)\n\n\ndef CheckBraces(filename, clean_lines, linenum, error):\n    \"\"\"Looks for misplaced braces (e.g. at the end of line).\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n\n    line = clean_lines.elided[linenum]  # get rid of comments and strings\n\n    if re.match(r\"\\s*{\\s*$\", line):\n        # We allow an open brace to start a line in the case where someone is using\n        # braces in a block to explicitly create a new scope, which is commonly used\n        # to control the lifetime of stack-allocated variables.  Braces are also\n        # used for brace initializers inside function calls.  We don't detect this\n        # perfectly: we just don't complain if the last non-whitespace character on\n        # the previous non-blank line is ',', ';', ':', '(', '{', or '}', or if the\n        # previous line starts a preprocessor block. We also allow a brace on the\n        # following line if it is part of an array initialization and would not fit\n        # within the 80 character limit of the preceding line.\n        prevline = GetPreviousNonBlankLine(clean_lines, linenum)[0]\n        if (\n            not re.search(r\"[,;:}{(]\\s*$\", prevline)\n            and not re.match(r\"\\s*#\", prevline)\n            and not (GetLineWidth(prevline) > _line_length - 2 and \"[]\" in prevline)\n        ):\n            error(\n                filename,\n                linenum,\n                \"whitespace/braces\",\n                4,\n                \"{ should almost always be at the end of the previous line\",\n            )\n\n    # An else clause should be on the same line as the preceding closing brace.\n    if last_wrong := re.match(r\"\\s*else\\b\\s*(?:if\\b|\\{|$)\", line):\n        prevline = GetPreviousNonBlankLine(clean_lines, linenum)[0]\n        if re.match(r\"\\s*}\\s*$\", prevline):\n            error(\n                filename,\n                linenum,\n                \"whitespace/newline\",\n                4,\n                \"An else should appear on the same line as the preceding }\",\n            )\n        else:\n            last_wrong = False\n\n    # If braces come on one side of an else, they should be on both.\n    # However, we have to worry about \"else if\" that spans multiple lines!\n    if re.search(r\"else if\\s*\\(\", line):  # could be multi-line if\n        brace_on_left = bool(re.search(r\"}\\s*else if\\s*\\(\", line))\n        # find the ( after the if\n        pos = line.find(\"else if\")\n        pos = line.find(\"(\", pos)\n        if pos > 0:\n            (endline, _, endpos) = CloseExpression(clean_lines, linenum, pos)\n            brace_on_right = endline[endpos:].find(\"{\") != -1\n            if brace_on_left != brace_on_right:  # must be brace after if\n                error(\n                    filename,\n                    linenum,\n                    \"readability/braces\",\n                    5,\n                    \"If an else has a brace on one side, it should have it on both\",\n                )\n    # Prevent detection if statement has { and we detected an improper newline after }\n    elif re.search(r\"}\\s*else[^{]*$\", line) or (\n        re.match(r\"[^}]*else\\s*{\", line) and not last_wrong\n    ):\n        error(\n            filename,\n            linenum,\n            \"readability/braces\",\n            5,\n            \"If an else has a brace on one side, it should have it on both\",\n        )\n\n    # No control clauses with braces should have its contents on the same line\n    # Exclude } which will be covered by empty-block detect\n    # Exclude ; which may be used by while in a do-while\n    if (\n        keyword := re.search(\n            r\"\\b(else if|if|while|for|switch)\"  # These have parens\n            r\"\\s*\\(.*\\)\\s*(?:\\[\\[(?:un)?likely\\]\\]\\s*)?{\\s*[^\\s\\\\};]\",\n            line,\n        )\n    ) or (\n        keyword := re.search(\n            r\"\\b(else|do|try)\"  # These don't have parens\n            r\"\\s*(?:\\[\\[(?:un)?likely\\]\\]\\s*)?{\\s*[^\\s\\\\}]\",\n            line,\n        )\n    ):\n        error(\n            filename,\n            linenum,\n            \"whitespace/newline\",\n            5,\n            f\"Controlled statements inside brackets of {keyword.group(1)} clause\"\n            \" should be on a separate line\",\n        )\n\n    # TODO(aaronliu0130): Err on if...else and do...while statements without braces;\n    # style guide has changed since the below comment was written\n\n    # Check single-line if/else bodies. The style guide says 'curly braces are not\n    # required for single-line statements'. We additionally allow multi-line,\n    # single statements, but we reject anything with more than one semicolon in\n    # it. This means that the first semicolon after the if should be at the end of\n    # its line, and the line after that should have an indent level equal to or\n    # lower than the if. We also check for ambiguous if/else nesting without\n    # braces.\n    if_else_match = re.search(r\"\\b(if\\s*(|constexpr)\\s*\\(|else\\b)\", line)\n    if if_else_match and not re.match(r\"\\s*#\", line):\n        if_indent = GetIndentLevel(line)\n        endline, endlinenum, endpos = line, linenum, if_else_match.end()\n        if_match = re.search(r\"\\bif\\s*(|constexpr)\\s*\\(\", line)\n        if if_match:\n            # This could be a multiline if condition, so find the end first.\n            pos = if_match.end() - 1\n            (endline, endlinenum, endpos) = CloseExpression(clean_lines, linenum, pos)\n        # Check for an opening brace, either directly after the if or on the next\n        # line. If found, this isn't a single-statement conditional.\n        if not re.match(r\"\\s*(?:\\[\\[(?:un)?likely\\]\\]\\s*)?{\", endline[endpos:]) and not (\n            re.match(r\"\\s*$\", endline[endpos:])\n            and endlinenum < (len(clean_lines.elided) - 1)\n            and re.match(r\"\\s*{\", clean_lines.elided[endlinenum + 1])\n        ):\n            while (\n                endlinenum < len(clean_lines.elided)\n                and \";\" not in clean_lines.elided[endlinenum][endpos:]\n            ):\n                endlinenum += 1\n                endpos = 0\n            if endlinenum < len(clean_lines.elided):\n                endline = clean_lines.elided[endlinenum]\n                # We allow a mix of whitespace and closing braces (e.g. for one-liner\n                # methods) and a single \\ after the semicolon (for macros)\n                endpos = endline.find(\";\")\n                if not re.match(r\";[\\s}]*(\\\\?)$\", endline[endpos:]):\n                    # Semicolon isn't the last character, there's something trailing.\n                    # Output a warning if the semicolon is not contained inside\n                    # a lambda expression.\n                    if not re.match(r\"^[^{};]*\\[[^\\[\\]]*\\][^{}]*\\{[^{}]*\\}\\s*\\)*[;,]\\s*$\", endline):\n                        error(\n                            filename,\n                            linenum,\n                            \"readability/braces\",\n                            4,\n                            \"If/else bodies with multiple statements require braces\",\n                        )\n                elif endlinenum < len(clean_lines.elided) - 1:\n                    # Make sure the next line is dedented\n                    next_line = clean_lines.elided[endlinenum + 1]\n                    next_indent = GetIndentLevel(next_line)\n                    # With ambiguous nested if statements, this will error out on the\n                    # if that *doesn't* match the else, regardless of whether it's the\n                    # inner one or outer one.\n                    if if_match and re.match(r\"\\s*else\\b\", next_line) and next_indent != if_indent:\n                        error(\n                            filename,\n                            linenum,\n                            \"readability/braces\",\n                            4,\n                            \"Else clause should be indented at the same level as if. \"\n                            \"Ambiguous nested if/else chains require braces.\",\n                        )\n                    elif next_indent > if_indent:\n                        error(\n                            filename,\n                            linenum,\n                            \"readability/braces\",\n                            4,\n                            \"If/else bodies with multiple statements require braces\",\n                        )\n\n\ndef CheckTrailingSemicolon(filename, clean_lines, linenum, error):\n    \"\"\"Looks for redundant trailing semicolon.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n\n    line = clean_lines.elided[linenum]\n\n    # Block bodies should not be followed by a semicolon.  Due to C++11\n    # brace initialization, there are more places where semicolons are\n    # required than not, so we explicitly list the allowed rules rather\n    # than listing the disallowed ones.  These are the places where \"};\"\n    # should be replaced by just \"}\":\n    # 1. Some flavor of block following closing parenthesis:\n    #    for (;;) {};\n    #    while (...) {};\n    #    switch (...) {};\n    #    Function(...) {};\n    #    if (...) {};\n    #    if (...) else if (...) {};\n    #\n    # 2. else block:\n    #    if (...) else {};\n    #\n    # 3. const member function:\n    #    Function(...) const {};\n    #\n    # 4. Block following some statement:\n    #    x = 42;\n    #    {};\n    #\n    # 5. Block at the beginning of a function:\n    #    Function(...) {\n    #      {};\n    #    }\n    #\n    #    Note that naively checking for the preceding \"{\" will also match\n    #    braces inside multi-dimensional arrays, but this is fine since\n    #    that expression will not contain semicolons.\n    #\n    # 6. Block following another block:\n    #    while (true) {}\n    #    {};\n    #\n    # 7. End of namespaces:\n    #    namespace {};\n    #\n    #    These semicolons seems far more common than other kinds of\n    #    redundant semicolons, possibly due to people converting classes\n    #    to namespaces.  For now we do not warn for this case.\n    #\n    # Try matching case 1 first.\n    match = re.match(r\"^(.*\\)\\s*)\\{\", line)\n    if match:\n        # Matched closing parenthesis (case 1).  Check the token before the\n        # matching opening parenthesis, and don't warn if it looks like a\n        # macro.  This avoids these false positives:\n        #  - macro that defines a base class\n        #  - multi-line macro that defines a base class\n        #  - macro that defines the whole class-head\n        #\n        # But we still issue warnings for macros that we know are safe to\n        # warn, specifically:\n        #  - TEST, TEST_F, TEST_P, MATCHER, MATCHER_P\n        #  - TYPED_TEST\n        #  - INTERFACE_DEF\n        #  - EXCLUSIVE_LOCKS_REQUIRED, SHARED_LOCKS_REQUIRED, LOCKS_EXCLUDED:\n        #\n        # We implement a list of safe macros instead of a list of\n        # unsafe macros, even though the latter appears less frequently in\n        # google code and would have been easier to implement.  This is because\n        # the downside for getting the allowed checks wrong means some extra\n        # semicolons, while the downside for getting disallowed checks wrong\n        # would result in compile errors.\n        #\n        # In addition to macros, we also don't want to warn on\n        #  - Compound literals\n        #  - Lambdas\n        #  - alignas specifier with anonymous structs\n        #  - decltype\n        #  - concepts (requires expression)\n        closing_brace_pos = match.group(1).rfind(\")\")\n        opening_parenthesis = ReverseCloseExpression(clean_lines, linenum, closing_brace_pos)\n        if opening_parenthesis[2] > -1:\n            line_prefix = opening_parenthesis[0][0 : opening_parenthesis[2]]\n            macro = re.search(r\"\\b([A-Z_][A-Z0-9_]*)\\s*$\", line_prefix)\n            func = re.match(r\"^(.*\\])\\s*$\", line_prefix)\n            if (\n                (\n                    macro\n                    and macro.group(1)\n                    not in (\n                        \"TEST\",\n                        \"TEST_F\",\n                        \"MATCHER\",\n                        \"MATCHER_P\",\n                        \"TYPED_TEST\",\n                        \"EXCLUSIVE_LOCKS_REQUIRED\",\n                        \"SHARED_LOCKS_REQUIRED\",\n                        \"LOCKS_EXCLUDED\",\n                        \"INTERFACE_DEF\",\n                    )\n                )\n                or (func and not re.search(r\"\\boperator\\s*\\[\\s*\\]\", func.group(1)))\n                or re.search(r\"\\b(?:struct|union)\\s+alignas\\s*$\", line_prefix)\n                or re.search(r\"\\bdecltype$\", line_prefix)\n                or re.search(r\"\\brequires.*$\", line_prefix)\n                or re.search(r\"\\s+=\\s*$\", line_prefix)\n            ):\n                match = None\n        if (\n            match\n            and opening_parenthesis[1] > 1\n            and re.search(r\"\\]\\s*$\", clean_lines.elided[opening_parenthesis[1] - 1])\n        ):\n            # Multi-line lambda-expression\n            match = None\n\n    else:\n        # Try matching cases 2-3.\n        match = re.match(r\"^(.*(?:else|\\)\\s*const)\\s*)\\{\", line)\n        if not match:\n            # Try matching cases 4-6.  These are always matched on separate lines.\n            #\n            # Note that we can't simply concatenate the previous line to the\n            # current line and do a single match, otherwise we may output\n            # duplicate warnings for the blank line case:\n            #   if (cond) {\n            #     // blank line\n            #   }\n            prevline = GetPreviousNonBlankLine(clean_lines, linenum)[0]\n            if prevline and re.search(r\"[;{}]\\s*$\", prevline):\n                match = re.match(r\"^(\\s*)\\{\", line)\n\n    # Check matching closing brace\n    if match:\n        (endline, endlinenum, endpos) = CloseExpression(clean_lines, linenum, len(match.group(1)))\n        if endpos > -1 and re.match(r\"^\\s*;\", endline[endpos:]):\n            # Current {} pair is eligible for semicolon check, and we have found\n            # the redundant semicolon, output warning here.\n            #\n            # Note: because we are scanning forward for opening braces, and\n            # outputting warnings for the matching closing brace, if there are\n            # nested blocks with trailing semicolons, we will get the error\n            # messages in reversed order.\n\n            # We need to check the line forward for NOLINT\n            raw_lines = clean_lines.raw_lines\n            ParseNolintSuppressions(filename, raw_lines[endlinenum - 1], endlinenum - 1, error)\n            ParseNolintSuppressions(filename, raw_lines[endlinenum], endlinenum, error)\n\n            error(filename, endlinenum, \"readability/braces\", 4, \"You don't need a ; after a }\")\n\n\ndef CheckEmptyBlockBody(filename, clean_lines, linenum, error):\n    \"\"\"Look for empty loop/conditional body with only a single semicolon.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n\n    # Search for loop keywords at the beginning of the line.  Because only\n    # whitespaces are allowed before the keywords, this will also ignore most\n    # do-while-loops, since those lines should start with closing brace.\n    #\n    # We also check \"if\" blocks here, since an empty conditional block\n    # is likely an error.\n    line = clean_lines.elided[linenum]\n    if matched := re.match(r\"\\s*(for|while|if)\\s*\\(\", line):\n        # Find the end of the conditional expression.\n        (end_line, end_linenum, end_pos) = CloseExpression(clean_lines, linenum, line.find(\"(\"))\n\n        # Output warning if what follows the condition expression is a semicolon.\n        # No warning for all other cases, including whitespace or newline, since we\n        # have a separate check for semicolons preceded by whitespace.\n        if end_pos >= 0 and re.match(r\";\", end_line[end_pos:]):\n            if matched.group(1) == \"if\":\n                error(\n                    filename,\n                    end_linenum,\n                    \"whitespace/empty_conditional_body\",\n                    5,\n                    \"Empty conditional bodies should use {}\",\n                )\n            else:\n                error(\n                    filename,\n                    end_linenum,\n                    \"whitespace/empty_loop_body\",\n                    5,\n                    \"Empty loop bodies should use {} or continue\",\n                )\n\n        # Check for if statements that have completely empty bodies (no comments)\n        # and no else clauses.\n        if end_pos >= 0 and matched.group(1) == \"if\":\n            # Find the position of the opening { for the if statement.\n            # Return without logging an error if it has no brackets.\n            opening_linenum = end_linenum\n            opening_line_fragment = end_line[end_pos:]\n            # Loop until EOF or find anything that's not whitespace or opening {.\n            while not re.search(r\"^\\s*\\{\", opening_line_fragment):\n                if re.search(r\"^(?!\\s*$)\", opening_line_fragment):\n                    # Conditional has no brackets.\n                    return\n                opening_linenum += 1\n                if opening_linenum == len(clean_lines.elided):\n                    # Couldn't find conditional's opening { or any code before EOF.\n                    return\n                opening_line_fragment = clean_lines.elided[opening_linenum]\n            # Set opening_line (opening_line_fragment may not be entire opening line).\n            opening_line = clean_lines.elided[opening_linenum]\n\n            # Find the position of the closing }.\n            opening_pos = opening_line_fragment.find(\"{\")\n            if opening_linenum == end_linenum:\n                # We need to make opening_pos relative to the start of the entire line.\n                opening_pos += end_pos\n            (closing_line, closing_linenum, closing_pos) = CloseExpression(\n                clean_lines, opening_linenum, opening_pos\n            )\n            if closing_pos < 0:\n                return\n\n            # Now construct the body of the conditional. This consists of the portion\n            # of the opening line after the {, all lines until the closing line,\n            # and the portion of the closing line before the }.\n            if clean_lines.raw_lines[opening_linenum] != CleanseComments(\n                clean_lines.raw_lines[opening_linenum]\n            ):\n                # Opening line ends with a comment, so conditional isn't empty.\n                return\n            if closing_linenum > opening_linenum:\n                # Opening line after the {. Ignore comments here since we checked above.\n                bodylist = list(opening_line[opening_pos + 1 :])\n                # All lines until closing line, excluding closing line, with comments.\n                bodylist.extend(clean_lines.raw_lines[opening_linenum + 1 : closing_linenum])\n                # Closing line before the }. Won't (and can't) have comments.\n                bodylist.append(clean_lines.elided[closing_linenum][: closing_pos - 1])\n                body = \"\\n\".join(bodylist)\n            else:\n                # If statement has brackets and fits on a single line.\n                body = opening_line[opening_pos + 1 : closing_pos - 1]\n\n            # Check if the body is empty\n            if not _EMPTY_CONDITIONAL_BODY_PATTERN.search(body):\n                return\n            # The body is empty. Now make sure there's not an else clause.\n            current_linenum = closing_linenum\n            current_line_fragment = closing_line[closing_pos:]\n            # Loop until EOF or find anything that's not whitespace or else clause.\n            while re.search(r\"^\\s*$|^(?=\\s*else)\", current_line_fragment):\n                if re.search(r\"^(?=\\s*else)\", current_line_fragment):\n                    # Found an else clause, so don't log an error.\n                    return\n                current_linenum += 1\n                if current_linenum == len(clean_lines.elided):\n                    break\n                current_line_fragment = clean_lines.elided[current_linenum]\n\n            # The body is empty and there's no else clause until EOF or other code.\n            error(\n                filename,\n                end_linenum,\n                \"whitespace/empty_if_body\",\n                4,\n                (\"If statement had no body and no else clause\"),\n            )\n\n\ndef FindCheckMacro(line):\n    \"\"\"Find a replaceable CHECK-like macro.\n\n    Args:\n      line: line to search on.\n    Returns:\n      (macro name, start position), or (None, -1) if no replaceable\n      macro is found.\n    \"\"\"\n    for macro in _CHECK_MACROS:\n        i = line.find(macro)\n        if i >= 0:\n            # Find opening parenthesis.  Do a regular expression match here\n            # to make sure that we are matching the expected CHECK macro, as\n            # opposed to some other macro that happens to contain the CHECK\n            # substring.\n            matched = re.match(r\"^(.*\\b\" + macro + r\"\\s*)\\(\", line)\n            if not matched:\n                continue\n            return (macro, len(matched.group(1)))\n    return (None, -1)\n\n\ndef CheckCheck(filename, clean_lines, linenum, error):\n    \"\"\"Checks the use of CHECK and EXPECT macros.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n\n    # Decide the set of replacement macros that should be suggested\n    lines = clean_lines.elided\n    (check_macro, start_pos) = FindCheckMacro(lines[linenum])\n    if not check_macro:\n        return\n\n    # Find end of the boolean expression by matching parentheses\n    (last_line, end_line, end_pos) = CloseExpression(clean_lines, linenum, start_pos)\n    if end_pos < 0:\n        return\n\n    # If the check macro is followed by something other than a\n    # semicolon, assume users will log their own custom error messages\n    # and don't suggest any replacements.\n    if not re.match(r\"\\s*;\", last_line[end_pos:]):\n        return\n\n    if linenum == end_line:\n        expression = lines[linenum][start_pos + 1 : end_pos - 1]\n    else:\n        expression = lines[linenum][start_pos + 1 :]\n        for i in range(linenum + 1, end_line):\n            expression += lines[i]\n        expression += last_line[0 : end_pos - 1]\n\n    # Parse expression so that we can take parentheses into account.\n    # This avoids false positives for inputs like \"CHECK((a < 4) == b)\",\n    # which is not replaceable by CHECK_LE.\n    lhs = \"\"\n    rhs = \"\"\n    operator = None\n    while expression:\n        matched = re.match(\n            r\"^\\s*(<<|<<=|>>|>>=|->\\*|->|&&|\\|\\||\"\n            r\"==|!=|>=|>|<=|<|\\()(.*)$\",\n            expression,\n        )\n        if matched:\n            token = matched.group(1)\n            if token == \"(\":\n                # Parenthesized operand\n                expression = matched.group(2)\n                (end, _) = FindEndOfExpressionInLine(expression, 0, [\"(\"])\n                if end < 0:\n                    return  # Unmatched parenthesis\n                lhs += \"(\" + expression[0:end]\n                expression = expression[end:]\n            elif token in (\"&&\", \"||\"):\n                # Logical and/or operators.  This means the expression\n                # contains more than one term, for example:\n                #   CHECK(42 < a && a < b);\n                #\n                # These are not replaceable with CHECK_LE, so bail out early.\n                return\n            elif token in (\"<<\", \"<<=\", \">>\", \">>=\", \"->*\", \"->\"):\n                # Non-relational operator\n                lhs += token\n                expression = matched.group(2)\n            else:\n                # Relational operator\n                operator = token\n                rhs = matched.group(2)\n                break\n        else:\n            # Unparenthesized operand.  Instead of appending to lhs one character\n            # at a time, we do another regular expression match to consume several\n            # characters at once if possible.  Trivial benchmark shows that this\n            # is more efficient when the operands are longer than a single\n            # character, which is generally the case.\n            matched = re.match(r\"^([^-=!<>()&|]+)(.*)$\", expression)\n            if not matched:\n                matched = re.match(r\"^(\\s*\\S)(.*)$\", expression)\n                if not matched:\n                    break\n            lhs += matched.group(1)\n            expression = matched.group(2)\n\n    # Only apply checks if we got all parts of the boolean expression\n    if not (lhs and operator and rhs):\n        return\n\n    # Check that rhs do not contain logical operators.  We already know\n    # that lhs is fine since the loop above parses out && and ||.\n    if rhs.find(\"&&\") > -1 or rhs.find(\"||\") > -1:\n        return\n\n    # At least one of the operands must be a constant literal.  This is\n    # to avoid suggesting replacements for unprintable things like\n    # CHECK(variable != iterator)\n    #\n    # The following pattern matches decimal, hex integers, strings, and\n    # characters (in that order).\n    lhs = lhs.strip()\n    rhs = rhs.strip()\n    match_constant = r'^([-+]?(\\d+|0[xX][0-9a-fA-F]+)[lLuU]{0,3}|\".*\"|\\'.*\\')$'\n    if re.match(match_constant, lhs) or re.match(match_constant, rhs):\n        # Note: since we know both lhs and rhs, we can provide a more\n        # descriptive error message like:\n        #   Consider using CHECK_EQ(x, 42) instead of CHECK(x == 42)\n        # Instead of:\n        #   Consider using CHECK_EQ instead of CHECK(a == b)\n        #\n        # We are still keeping the less descriptive message because if lhs\n        # or rhs gets long, the error message might become unreadable.\n        error(\n            filename,\n            linenum,\n            \"readability/check\",\n            2,\n            f\"Consider using {_CHECK_REPLACEMENT[check_macro][operator]}\"\n            f\" instead of {check_macro}(a {operator} b)\",\n        )\n\n\ndef CheckAltTokens(filename, clean_lines, linenum, error):\n    \"\"\"Check alternative keywords being used in boolean expressions.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n    line = clean_lines.elided[linenum]\n\n    # Avoid preprocessor lines\n    if re.match(r\"^\\s*#\", line):\n        return\n\n    # Last ditch effort to avoid multi-line comments.  This will not help\n    # if the comment started before the current line or ended after the\n    # current line, but it catches most of the false positives.  At least,\n    # it provides a way to workaround this warning for people who use\n    # multi-line comments in preprocessor macros.\n    #\n    # TODO(google): remove this once cpplint has better support for\n    # multi-line comments.\n    if line.find(\"/*\") >= 0 or line.find(\"*/\") >= 0:\n        return\n\n    for match in _ALT_TOKEN_REPLACEMENT_PATTERN.finditer(line):\n        error(\n            filename,\n            linenum,\n            \"readability/alt_tokens\",\n            2,\n            f\"Use operator {_ALT_TOKEN_REPLACEMENT[match.group(2)]} instead of {match.group(2)}\",\n        )\n\n\ndef GetLineWidth(line):\n    \"\"\"Determines the width of the line in column positions.\n\n    Args:\n      line: A string, which may be a Unicode string.\n\n    Returns:\n      The width of the line in column positions, accounting for Unicode\n      combining characters and wide characters.\n    \"\"\"\n    if isinstance(line, str):\n        width = 0\n        for uc in unicodedata.normalize(\"NFC\", line):\n            if unicodedata.east_asian_width(uc) in (\"W\", \"F\"):\n                width += 2\n            elif not unicodedata.combining(uc):\n                # Issue 337\n                # https://mail.python.org/pipermail/python-list/2012-August/628809.html\n                if (sys.version_info.major, sys.version_info.minor) <= (3, 2):\n                    # https://github.com/python/cpython/blob/2.7/Include/unicodeobject.h#L81\n                    is_wide_build = sysconfig.get_config_var(\"Py_UNICODE_SIZE\") >= 4\n                    # https://github.com/python/cpython/blob/2.7/Objects/unicodeobject.c#L564\n                    is_low_surrogate = 0xDC00 <= ord(uc) <= 0xDFFF\n                    if not is_wide_build and is_low_surrogate:\n                        width -= 1\n\n                width += 1\n        return width\n    return len(line)\n\n\ndef CheckStyle(filename, clean_lines, linenum, file_extension, nesting_state, error, cppvar=None):\n    \"\"\"Checks rules from the 'C++ style rules' section of cppguide.html.\n\n    Most of these rules are hard to test (naming, comment style), but we\n    do what we can.  In particular we check for 2-space indents, line lengths,\n    tab usage, spaces inside code, etc.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      file_extension: The extension (without the dot) of the filename.\n      nesting_state: A NestingState instance which maintains information about\n                     the current stack of nested blocks being parsed.\n      error: The function to call with any errors found.\n      cppvar: The header guard variable returned by GetHeaderGuardCPPVar.\n    \"\"\"\n\n    # Don't use \"elided\" lines here, otherwise we can't check commented lines.\n    # Don't want to use \"raw\" either, because we don't want to check inside C++11\n    # raw strings,\n    raw_lines = clean_lines.lines_without_raw_strings\n    line = raw_lines[linenum]\n    prev = raw_lines[linenum - 1] if linenum > 0 else \"\"\n\n    if line.find(\"\\t\") != -1:\n        error(filename, linenum, \"whitespace/tab\", 1, \"Tab found; better to use spaces\")\n\n    # One or three blank spaces at the beginning of the line is weird; it's\n    # hard to reconcile that with 2-space indents.\n    # NOTE: here are the conditions rob pike used for his tests.  Mine aren't\n    # as sophisticated, but it may be worth becoming so:  RLENGTH==initial_spaces\n    # if(RLENGTH > 20) complain = 0;\n    # if(match($0, \" +(error|private|public|protected):\")) complain = 0;\n    # if(match(prev, \"&& *$\")) complain = 0;\n    # if(match(prev, \"\\\\|\\\\| *$\")) complain = 0;\n    # if(match(prev, \"[\\\",=><] *$\")) complain = 0;\n    # if(match($0, \" <<\")) complain = 0;\n    # if(match(prev, \" +for \\\\(\")) complain = 0;\n    # if(prevodd && match(prevprev, \" +for \\\\(\")) complain = 0;\n    scope_or_label_pattern = r\"\\s*(?:public|private|protected|signals)(?:\\s+(?:slots\\s*)?)?:\\s*\\\\?$\"\n    classinfo = nesting_state.InnermostClass()\n    initial_spaces = 0\n    cleansed_line = clean_lines.elided[linenum]\n    while initial_spaces < len(line) and line[initial_spaces] == \" \":\n        initial_spaces += 1\n    # There are certain situations we allow one space, notably for\n    # section labels, and also lines containing multi-line raw strings.\n    # We also don't check for lines that look like continuation lines\n    # (of lines ending in double quotes, commas, equals, or angle brackets)\n    # because the rules for how to indent those are non-trivial.\n    if (\n        not re.search(r'[\",=><] *$', prev)\n        and (initial_spaces in {1, 3})\n        and not re.match(scope_or_label_pattern, cleansed_line)\n        and not (clean_lines.raw_lines[linenum] != line and re.match(r'^\\s*\"\"', line))\n    ):\n        error(\n            filename,\n            linenum,\n            \"whitespace/indent\",\n            3,\n            \"Weird number of spaces at line-start.  Are you using a 2-space indent?\",\n        )\n\n    if line and line[-1].isspace():\n        error(\n            filename,\n            linenum,\n            \"whitespace/end_of_line\",\n            4,\n            \"Line ends in whitespace.  Consider deleting these extra spaces.\",\n        )\n\n    # Check if the line is a header guard.\n    is_header_guard = IsHeaderExtension(file_extension) and line.startswith(\n        (f\"#ifndef {cppvar}\", f\"#define {cppvar}\", f\"#endif  // {cppvar}\")\n    )\n    # #include lines and header guards can be long, since there's no clean way to\n    # split them.\n    #\n    # URLs can be long too.  It's possible to split these, but it makes them\n    # harder to cut&paste.\n    #\n    # The \"$Id:...$\" comment may also get very long without it being the\n    # developers fault.\n    #\n    # Doxygen documentation copying can get pretty long when using an overloaded\n    # function declaration\n    if (\n        not line.startswith(\"#include\")\n        and not is_header_guard\n        and not re.match(r\"^\\s*//.*http(s?)://\\S*$\", line)\n        and not re.match(r\"^\\s*//\\s*[^\\s]*$\", line)\n        and not re.match(r\"^// \\$Id:.*#[0-9]+ \\$$\", line)\n        and not re.match(r\"^\\s*/// [@\\\\](copydoc|copydetails|copybrief) .*$\", line)\n    ):\n        line_width = GetLineWidth(line)\n        if line_width > _line_length:\n            error(\n                filename,\n                linenum,\n                \"whitespace/line_length\",\n                2,\n                f\"Lines should be <= {_line_length} characters long\",\n            )\n\n    if (\n        cleansed_line.count(\";\") > 1\n        and\n        # allow simple single line lambdas\n        not re.match(r\"^[^{};]*\\[[^\\[\\]]*\\][^{}]*\\{[^{}\\n\\r]*\\}\", line)\n        and\n        # for loops are allowed two ;'s (and may run over two lines).\n        cleansed_line.find(\"for\") == -1\n        and (\n            GetPreviousNonBlankLine(clean_lines, linenum)[0].find(\"for\") == -1\n            or GetPreviousNonBlankLine(clean_lines, linenum)[0].find(\";\") != -1\n        )\n        and\n        # It's ok to have many commands in a switch case that fits in 1 line\n        not (\n            (cleansed_line.find(\"case \") != -1 or cleansed_line.find(\"default:\") != -1)\n            and cleansed_line.find(\"break;\") != -1\n        )\n    ):\n        error(filename, linenum, \"whitespace/newline\", 0, \"More than one command on the same line\")\n\n    # Some more style checks\n    CheckBraces(filename, clean_lines, linenum, error)\n    CheckTrailingSemicolon(filename, clean_lines, linenum, error)\n    CheckEmptyBlockBody(filename, clean_lines, linenum, error)\n    CheckSpacing(filename, clean_lines, linenum, nesting_state, error)\n    CheckOperatorSpacing(filename, clean_lines, linenum, error)\n    CheckParenthesisSpacing(filename, clean_lines, linenum, error)\n    CheckCommaSpacing(filename, clean_lines, linenum, error)\n    CheckBracesSpacing(filename, clean_lines, linenum, nesting_state, error)\n    CheckSpacingForFunctionCall(filename, clean_lines, linenum, error)\n    CheckCheck(filename, clean_lines, linenum, error)\n    CheckAltTokens(filename, clean_lines, linenum, error)\n    classinfo = nesting_state.InnermostClass()\n    if classinfo:\n        CheckSectionSpacing(filename, clean_lines, classinfo, linenum, error)\n\n\n_RE_PATTERN_INCLUDE = re.compile(r'^\\s*#\\s*include\\s*([<\"])([^>\"]*)[>\"].*$')\n# Matches the first component of a filename delimited by -s and _s. That is:\n#  _RE_FIRST_COMPONENT.match('foo').group(0) == 'foo'\n#  _RE_FIRST_COMPONENT.match('foo.cc').group(0) == 'foo'\n#  _RE_FIRST_COMPONENT.match('foo-bar_baz.cc').group(0) == 'foo'\n#  _RE_FIRST_COMPONENT.match('foo_bar-baz.cc').group(0) == 'foo'\n_RE_FIRST_COMPONENT = re.compile(r\"^[^-_.]+\")\n\n\ndef _DropCommonSuffixes(filename):\n    \"\"\"Drops common suffixes like _test.cc or -inl.h from filename.\n\n    For example:\n      >>> _DropCommonSuffixes('foo/foo-inl.h')\n      'foo/foo'\n      >>> _DropCommonSuffixes('foo/bar/foo.cc')\n      'foo/bar/foo'\n      >>> _DropCommonSuffixes('foo/foo_internal.h')\n      'foo/foo'\n      >>> _DropCommonSuffixes('foo/foo_unusualinternal.h')\n      'foo/foo_unusualinternal'\n\n    Args:\n      filename: The input filename.\n\n    Returns:\n      The filename with the common suffix removed.\n    \"\"\"\n    for suffix in itertools.chain(\n        (\n            f\"{test_suffix.lstrip('_')}.{ext}\"\n            for test_suffix, ext in itertools.product(_test_suffixes, GetNonHeaderExtensions())\n        ),\n        (\n            f\"{suffix}.{ext}\"\n            for suffix, ext in itertools.product([\"inl\", \"imp\", \"internal\"], GetHeaderExtensions())\n        ),\n    ):\n        if (\n            filename.endswith(suffix)\n            and len(filename) > len(suffix)\n            and filename[-len(suffix) - 1] in (\"-\", \"_\")\n        ):\n            return filename[: -len(suffix) - 1]\n    return os.path.splitext(filename)[0]\n\n\ndef _ClassifyInclude(fileinfo, include, used_angle_brackets, include_order=\"default\"):\n    \"\"\"Figures out what kind of header 'include' is.\n\n    Args:\n      fileinfo: The current file cpplint is running over. A FileInfo instance.\n      include: The path to a #included file.\n      used_angle_brackets: True if the #include used <> rather than \"\".\n      include_order: \"default\" or other value allowed in program arguments\n\n    Returns:\n      One of the _XXX_HEADER constants.\n\n    For example:\n      >>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'stdio.h', True)\n      _C_SYS_HEADER\n      >>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'string', True)\n      _CPP_SYS_HEADER\n      >>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'foo/foo.h', True, \"standardcfirst\")\n      _OTHER_SYS_HEADER\n      >>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'foo/foo.h', False)\n      _LIKELY_MY_HEADER\n      >>> _ClassifyInclude(FileInfo('foo/foo_unknown_extension.cc'),\n      ...                  'bar/foo_other_ext.h', False)\n      _POSSIBLE_MY_HEADER\n      >>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'foo/bar.h', False)\n      _OTHER_HEADER\n    \"\"\"\n    # This is a list of all standard c++ header files, except\n    # those already checked for above.\n    is_cpp_header = include in _CPP_HEADERS\n\n    # Mark include as C header if in list or in a known folder for standard-ish C headers.\n    is_std_c_header = (include_order == \"default\") or (\n        include in _C_HEADERS\n        # additional linux glibc header folders\n        or re.search(rf\"(?:{'|'.join(C_STANDARD_HEADER_FOLDERS)})\\/.*\\.h\", include)\n    )\n\n    # Headers with C++ extensions shouldn't be considered C system headers\n    include_ext = os.path.splitext(include)[1]\n    is_system = used_angle_brackets and include_ext not in [\".hh\", \".hpp\", \".hxx\", \".h++\"]\n\n    if is_system:\n        if is_cpp_header:\n            return _CPP_SYS_HEADER\n        if is_std_c_header:\n            return _C_SYS_HEADER\n        return _OTHER_SYS_HEADER\n\n    # If the target file and the include we're checking share a\n    # basename when we drop common extensions, and the include\n    # lives in . , then it's likely to be owned by the target file.\n    target_dir, target_base = os.path.split(_DropCommonSuffixes(fileinfo.RepositoryName()))\n    include_dir, include_base = os.path.split(_DropCommonSuffixes(include))\n    target_dir_pub = os.path.normpath(target_dir + \"/../public\")\n    target_dir_pub = target_dir_pub.replace(\"\\\\\", \"/\")\n    if target_base == include_base and (include_dir in (target_dir, target_dir_pub)):\n        return _LIKELY_MY_HEADER\n\n    # If the target and include share some initial basename\n    # component, it's possible the target is implementing the\n    # include, so it's allowed to be first, but we'll never\n    # complain if it's not there.\n    target_first_component = _RE_FIRST_COMPONENT.match(target_base)\n    include_first_component = _RE_FIRST_COMPONENT.match(include_base)\n    if (\n        target_first_component\n        and include_first_component\n        and target_first_component.group(0) == include_first_component.group(0)\n    ):\n        return _POSSIBLE_MY_HEADER\n\n    return _OTHER_HEADER\n\n\ndef CheckIncludeLine(filename, clean_lines, linenum, include_state, error):\n    \"\"\"Check rules that are applicable to #include lines.\n\n    Strings on #include lines are NOT removed from elided line, to make\n    certain tasks easier. However, to prevent false positives, checks\n    applicable to #include lines in CheckLanguage must be put here.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      include_state: An _IncludeState instance in which the headers are inserted.\n      error: The function to call with any errors found.\n    \"\"\"\n    fileinfo = FileInfo(filename)\n    line = clean_lines.lines[linenum]\n\n    # \"include\" should use the new style \"foo/bar.h\" instead of just \"bar.h\"\n    # Only do this check if the included header follows google naming\n    # conventions.  If not, assume that it's a 3rd party API that\n    # requires special include conventions.\n    #\n    # We also make an exception for Lua headers, which follow google\n    # naming convention but not the include convention.\n    match = re.match(r'#include\\s*\"([^/]+\\.(.*))\"', line)\n    if (\n        match\n        and IsHeaderExtension(match.group(2))\n        and not _THIRD_PARTY_HEADERS_PATTERN.match(match.group(1))\n    ):\n        error(\n            filename,\n            linenum,\n            \"build/include_subdir\",\n            4,\n            \"Include the directory when naming header files\",\n        )\n\n    # we shouldn't include a file more than once. actually, there are a\n    # handful of instances where doing so is okay, but in general it's\n    # not.\n    match = _RE_PATTERN_INCLUDE.search(line)\n    if match:\n        include = match.group(2)\n        used_angle_brackets = match.group(1) == \"<\"\n        duplicate_line = include_state.FindHeader(include)\n        if duplicate_line >= 0:\n            error(\n                filename,\n                linenum,\n                \"build/include\",\n                4,\n                f'\"{include}\" already included at {filename}:{duplicate_line}',\n            )\n            return\n\n        for extension in GetNonHeaderExtensions():\n            if include.endswith(\".\" + extension) and os.path.dirname(\n                fileinfo.RepositoryName()\n            ) != os.path.dirname(include):\n                error(\n                    filename,\n                    linenum,\n                    \"build/include\",\n                    4,\n                    \"Do not include .\" + extension + \" files from other packages\",\n                )\n                return\n\n        # We DO want to include a 3rd party looking header if it matches the\n        # filename. Otherwise we get an erroneous error \"...should include its\n        # header\" error later.\n        third_src_header = False\n        for ext in GetHeaderExtensions():\n            basefilename = filename[0 : len(filename) - len(fileinfo.Extension())]\n            headerfile = basefilename + \".\" + ext\n            headername = FileInfo(headerfile).RepositoryName()\n            if headername in include or include in headername:\n                third_src_header = True\n                break\n\n        if third_src_header or not _THIRD_PARTY_HEADERS_PATTERN.match(include):\n            include_state.include_list[-1].append((include, linenum))\n\n            # We want to ensure that headers appear in the right order:\n            # 1) for foo.cc, foo.h  (preferred location)\n            # 2) c system files\n            # 3) cpp system files\n            # 4) for foo.cc, foo.h  (deprecated location)\n            # 5) other google headers\n            #\n            # We classify each include statement as one of those 5 types\n            # using a number of techniques. The include_state object keeps\n            # track of the highest type seen, and complains if we see a\n            # lower type after that.\n            error_message = include_state.CheckNextIncludeOrder(\n                _ClassifyInclude(fileinfo, include, used_angle_brackets, _include_order)\n            )\n            if error_message:\n                error(\n                    filename,\n                    linenum,\n                    \"build/include_order\",\n                    4,\n                    f\"{error_message}. Should be: {fileinfo.BaseName()}.h, c routing,\"\n                    \" c++ routing, other.\",\n                )\n            canonical_include = include_state.CanonicalizeAlphabeticalOrder(include)\n            if not include_state.IsInAlphabeticalOrder(clean_lines, linenum, canonical_include):\n                error(\n                    filename,\n                    linenum,\n                    \"build/include_alpha\",\n                    4,\n                    f'Include \"{include}\" not in alphabetical order',\n                )\n            include_state.SetLastHeader(canonical_include)\n\n\ndef _GetTextInside(text, start_pattern):\n    r\"\"\"Retrieves all the text between matching open and close parentheses.\n\n    Given a string of lines and a regular expression string, retrieve all the text\n    following the expression and between opening punctuation symbols like\n    (, [, or {, and the matching close-punctuation symbol. This properly nested\n    occurrences of the punctuation, so for the text like\n      printf(a(), b(c()));\n    a call to _GetTextInside(text, r'printf\\(') will return 'a(), b(c())'.\n    start_pattern must match string having an open punctuation symbol at the end.\n\n    Args:\n      text: The lines to extract text. Its comments and strings must be elided.\n             It can be single line and can span multiple lines.\n      start_pattern: The regexp string indicating where to start extracting\n                     the text.\n    Returns:\n      The extracted text.\n      None if either the opening string or ending punctuation could not be found.\n    \"\"\"\n    # TODO(google): Audit cpplint.py to see what places could be profitably\n    # rewritten to use _GetTextInside (and use inferior regexp matching today).\n\n    # Give opening punctuation to get the matching close-punctuation.\n    matching_punctuation = {\"(\": \")\", \"{\": \"}\", \"[\": \"]\"}\n    closing_punctuation = set(dict.values(matching_punctuation))\n\n    # Find the position to start extracting text.\n    match = re.search(start_pattern, text, re.MULTILINE)\n    if not match:  # start_pattern not found in text.\n        return None\n    start_position = match.end(0)\n\n    assert start_position > 0, \"start_pattern must ends with an opening punctuation.\"\n    assert text[start_position - 1] in matching_punctuation, (\n        \"start_pattern must ends with an opening punctuation.\"\n    )\n    # Stack of closing punctuation we expect to have in text after position.\n    punctuation_stack = [matching_punctuation[text[start_position - 1]]]\n    position = start_position\n    while punctuation_stack and position < len(text):\n        if text[position] == punctuation_stack[-1]:\n            punctuation_stack.pop()\n        elif text[position] in closing_punctuation:\n            # A closing punctuation without matching opening punctuation.\n            return None\n        elif text[position] in matching_punctuation:\n            punctuation_stack.append(matching_punctuation[text[position]])\n        position += 1\n    if punctuation_stack:\n        # Opening punctuation left without matching close-punctuation.\n        return None\n    # punctuation match.\n    return text[start_position : position - 1]\n\n\n# Patterns for matching call-by-reference parameters.\n#\n# Supports nested templates up to 2 levels deep using this messy pattern:\n#   < (?: < (?: < [^<>]*\n#               >\n#           |   [^<>] )*\n#         >\n#     |   [^<>] )*\n#   >\n_RE_PATTERN_IDENT = r\"[_a-zA-Z]\\w*\"  # =~ [[:alpha:]][[:alnum:]]*\n_RE_PATTERN_TYPE = (\n    r\"(?:const\\s+)?(?:typename\\s+|class\\s+|struct\\s+|union\\s+|enum\\s+)?\"\n    r\"(?:\\w|\"\n    r\"\\s*<(?:<(?:<[^<>]*>|[^<>])*>|[^<>])*>|\"\n    r\"::)+\"\n)\n# A call-by-reference parameter ends with '& identifier'.\n_RE_PATTERN_REF_PARAM = re.compile(\n    r\"(\" + _RE_PATTERN_TYPE + r\"(?:\\s*(?:\\bconst\\b|[*]))*\\s*\"\n    r\"&\\s*\" + _RE_PATTERN_IDENT + r\")\\s*(?:=[^,()]+)?[,)]\"\n)\n# A call-by-const-reference parameter either ends with 'const& identifier'\n# or looks like 'const type& identifier' when 'type' is atomic.\n_RE_PATTERN_CONST_REF_PARAM = (\n    r\"(?:.*\\s*\\bconst\\s*&\\s*\"\n    + _RE_PATTERN_IDENT\n    + r\"|const\\s+\"\n    + _RE_PATTERN_TYPE\n    + r\"\\s*&\\s*\"\n    + _RE_PATTERN_IDENT\n    + r\")\"\n)\n# Stream types.\n_RE_PATTERN_REF_STREAM_PARAM = r\"(?:.*stream\\s*&\\s*\" + _RE_PATTERN_IDENT + r\")\"\n\n\ndef CheckLanguage(\n    filename, clean_lines, linenum, file_extension, include_state, nesting_state, error\n):\n    \"\"\"Checks rules from the 'C++ language rules' section of cppguide.html.\n\n    Some of these rules are hard to test (function overloading, using\n    uint32_t inappropriately), but we do the best we can.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      file_extension: The extension (without the dot) of the filename.\n      include_state: An _IncludeState instance in which the headers are inserted.\n      nesting_state: A NestingState instance which maintains information about\n                     the current stack of nested blocks being parsed.\n      error: The function to call with any errors found.\n    \"\"\"\n    # If the line is empty or consists of entirely a comment, no need to\n    # check it.\n    line = clean_lines.elided[linenum]\n    if not line:\n        return\n\n    match = _RE_PATTERN_INCLUDE.search(line)\n    if match:\n        CheckIncludeLine(filename, clean_lines, linenum, include_state, error)\n        return\n\n    # Reset include state across preprocessor directives.  This is meant\n    # to silence warnings for conditional includes.\n    match = re.match(r\"^\\s*#\\s*(if|ifdef|ifndef|elif|else|endif)\\b\", line)\n    if match:\n        include_state.ResetSection(match.group(1))\n\n    # Perform other checks now that we are sure that this is not an include line\n    CheckCasts(filename, clean_lines, linenum, error)\n    CheckGlobalStatic(filename, clean_lines, linenum, error)\n    CheckPrintf(filename, clean_lines, linenum, error)\n\n    if IsHeaderExtension(file_extension):\n        # TODO(google): check that 1-arg constructors are explicit.\n        #                How to tell it's a constructor?\n        #                (handled in CheckForNonStandardConstructs for now)\n        # TODO(google): check that classes declare or disable copy/assign\n        #                (level 1 error)\n        pass\n\n    # Check if people are using the verboten C basic types.  The only exception\n    # we regularly allow is \"unsigned short port\" for port.\n    if re.search(r\"\\bshort port\\b\", line):\n        if not re.search(r\"\\bunsigned short port\\b\", line):\n            error(\n                filename, linenum, \"runtime/int\", 4, 'Use \"unsigned short\" for ports, not \"short\"'\n            )\n    else:\n        match = re.search(r\"\\b(short|long(?! +double)|long long)\\b\", line)\n        if match:\n            error(\n                filename,\n                linenum,\n                \"runtime/int\",\n                4,\n                f\"Use int16_t/int64_t/etc, rather than the C type {match.group(1)}\",\n            )\n\n    # Check if some verboten operator overloading is going on\n    # TODO(google): catch out-of-line unary operator&:\n    #   class X {};\n    #   int operator&(const X& x) { return 42; }  // unary operator&\n    # The trick is it's hard to tell apart from binary operator&:\n    #   class Y { int operator&(const Y& x) { return 23; } }; // binary operator&\n    if re.search(r\"\\boperator\\s*&\\s*\\(\\s*\\)\", line):\n        error(\n            filename,\n            linenum,\n            \"runtime/operator\",\n            4,\n            \"Unary operator& is dangerous.  Do not use it.\",\n        )\n\n    # Check for suspicious usage of \"if\" like\n    # } if (a == b) {\n    if re.search(r\"\\}\\s*if\\s*\\(\", line):\n        error(\n            filename,\n            linenum,\n            \"readability/braces\",\n            4,\n            'Did you mean \"else if\"? If not, start a new line for \"if\".',\n        )\n\n    # Check for potential format string bugs like printf(foo).\n    # We constrain the pattern not to pick things like DocidForPrintf(foo).\n    # Not perfect but it can catch printf(foo.c_str()) and printf(foo->c_str())\n    # TODO(google): Catch the following case. Need to change the calling\n    # convention of the whole function to process multiple line to handle it.\n    #   printf(\n    #       boy_this_is_a_really_long_variable_that_cannot_fit_on_the_prev_line);\n    if printf_args := _GetTextInside(line, r\"(?i)\\b(string)?printf\\s*\\(\"):\n        match = re.match(r\"([\\w.\\->()]+)$\", printf_args)\n        if match and match.group(1) != \"__VA_ARGS__\":\n            function_name = re.search(r\"\\b((?:string)?printf)\\s*\\(\", line, re.IGNORECASE).group(1)\n            error(\n                filename,\n                linenum,\n                \"runtime/printf\",\n                4,\n                f'Potential format string bug. Do {function_name}(\"%s\", {match.group(1)}) instead.',\n            )\n\n    # Check for potential memset bugs like memset(buf, sizeof(buf), 0).\n    match = re.search(r\"memset\\s*\\(([^,]*),\\s*([^,]*),\\s*0\\s*\\)\", line)\n    if match and not re.match(r\"^''|-?[0-9]+|0x[0-9A-Fa-f]$\", match.group(2)):\n        error(\n            filename,\n            linenum,\n            \"runtime/memset\",\n            4,\n            f'Did you mean \"memset({match.group(1)}, 0, {match.group(2)})\"?',\n        )\n\n    if re.search(r\"\\busing namespace\\b\", line):\n        if re.search(r\"\\bliterals\\b\", line):\n            error(\n                filename,\n                linenum,\n                \"build/namespaces_literals\",\n                5,\n                \"Do not use namespace using-directives.  Use using-declarations instead.\",\n            )\n        else:\n            error(\n                filename,\n                linenum,\n                \"build/namespaces\",\n                5,\n                \"Do not use namespace using-directives.  Use using-declarations instead.\",\n            )\n\n    # Detect variable-length arrays.\n    match = re.match(r\"\\s*(.+::)?(\\w+) [a-z]\\w*\\[(.+)];\", line)\n    if (\n        match\n        and match.group(2) != \"return\"\n        and match.group(2) != \"delete\"\n        and match.group(3).find(\"]\") == -1\n    ):\n        # Split the size using space and arithmetic operators as delimiters.\n        # If any of the resulting tokens are not compile time constants then\n        # report the error.\n        tokens = re.split(r\"\\s|\\+|\\-|\\*|\\/|<<|>>]\", match.group(3))\n        is_const = True\n        skip_next = False\n        for tok in tokens:\n            if skip_next:\n                skip_next = False\n                continue\n\n            if re.search(r\"sizeof\\(.+\\)\", tok):\n                continue\n            if re.search(r\"arraysize\\(\\w+\\)\", tok):\n                continue\n\n            tok = tok.lstrip(\"(\")\n            tok = tok.rstrip(\")\")\n            if not tok:\n                continue\n            if re.match(r\"\\d+\", tok):\n                continue\n            if re.match(r\"0[xX][0-9a-fA-F]+\", tok):\n                continue\n            if re.match(r\"k[A-Z0-9]\\w*\", tok):\n                continue\n            if re.match(r\"(.+::)?k[A-Z0-9]\\w*\", tok):\n                continue\n            if re.match(r\"(.+::)?[A-Z][A-Z0-9_]*\", tok):\n                continue\n            # A catch all for tricky sizeof cases, including 'sizeof expression',\n            # 'sizeof(*type)', 'sizeof(const type)', 'sizeof(struct StructName)'\n            # requires skipping the next token because we split on ' ' and '*'.\n            if tok.startswith(\"sizeof\"):\n                skip_next = True\n                continue\n            is_const = False\n            break\n        if not is_const:\n            error(\n                filename,\n                linenum,\n                \"runtime/arrays\",\n                1,\n                \"Do not use variable-length arrays.  Use an appropriately named \"\n                \"('k' followed by CamelCase) compile-time constant for the size.\",\n            )\n\n    # Check for use of unnamed namespaces in header files.  Registration\n    # macros are typically OK, so we allow use of \"namespace {\" on lines\n    # that end with backslashes.\n    if (\n        IsHeaderExtension(file_extension)\n        and re.search(r\"\\bnamespace\\s*{\", line)\n        and line[-1] != \"\\\\\"\n    ):\n        error(\n            filename,\n            linenum,\n            \"build/namespaces_headers\",\n            4,\n            \"Do not use unnamed namespaces in header files.  See \"\n            \"https://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Namespaces\"\n            \" for more information.\",\n        )\n\n\ndef CheckGlobalStatic(filename, clean_lines, linenum, error):\n    \"\"\"Check for unsafe global or static objects.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n    line = clean_lines.elided[linenum]\n\n    # Match two lines at a time to support multiline declarations\n    if linenum + 1 < clean_lines.NumLines() and not re.search(r\"[;({]\", line):\n        line += clean_lines.elided[linenum + 1].strip()\n\n    # Check for people declaring static/global STL strings at the top level.\n    # This is dangerous because the C++ language does not guarantee that\n    # globals with constructors are initialized before the first access, and\n    # also because globals can be destroyed when some threads are still running.\n    # TODO(google): Generalize this to also find static unique_ptr instances.\n    # TODO(google): File bugs for clang-tidy to find these.\n    match = re.match(\n        r\"((?:|static +)(?:|const +))(?::*std::)?string( +const)? +\"\n        r\"([a-zA-Z0-9_:]+)\\b(.*)\",\n        line,\n    )\n\n    # Remove false positives:\n    # - String pointers (as opposed to values).\n    #    string *pointer\n    #    const string *pointer\n    #    string const *pointer\n    #    string *const pointer\n    #\n    # - Functions and template specializations.\n    #    string Function<Type>(...\n    #    string Class<Type>::Method(...\n    #\n    # - Operators.  These are matched separately because operator names\n    #   cross non-word boundaries, and trying to match both operators\n    #   and functions at the same time would decrease accuracy of\n    #   matching identifiers.\n    #    string Class::operator*()\n    if (\n        match\n        and not re.search(r\"\\bstring\\b(\\s+const)?\\s*[\\*\\&]\\s*(const\\s+)?\\w\", line)\n        and not re.search(r\"\\boperator\\W\", line)\n        and not re.match(r'\\s*(<.*>)?(::[a-zA-Z0-9_]+)*\\s*\\(([^\"]|$)', match.group(4))\n    ):\n        if re.search(r\"\\bconst\\b\", line):\n            error(\n                filename,\n                linenum,\n                \"runtime/string\",\n                4,\n                \"For a static/global string constant, use a C style string instead:\"\n                f' \"{match.group(1)}char{match.group(2) or \"\"} {match.group(3)}[]\".',\n            )\n        else:\n            error(\n                filename,\n                linenum,\n                \"runtime/string\",\n                4,\n                \"Static/global string variables are not permitted.\",\n            )\n\n    if re.search(r\"\\b([A-Za-z0-9_]*_)\\(\\1\\)\", line) or re.search(\n        r\"\\b([A-Za-z0-9_]*_)\\(CHECK_NOTNULL\\(\\1\\)\\)\", line\n    ):\n        error(\n            filename,\n            linenum,\n            \"runtime/init\",\n            4,\n            \"You seem to be initializing a member variable with itself.\",\n        )\n\n\ndef CheckPrintf(filename, clean_lines, linenum, error):\n    \"\"\"Check for printf related issues.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n    line = clean_lines.elided[linenum]\n\n    # When snprintf is used, the second argument shouldn't be a literal.\n    match = re.search(r\"snprintf\\s*\\(([^,]*),\\s*([0-9]*)\\s*,\", line)\n    if match and match.group(2) != \"0\":\n        # If 2nd arg is zero, snprintf is used to calculate size.\n        error(\n            filename,\n            linenum,\n            \"runtime/printf\",\n            3,\n            \"If you can, use\"\n            f\" sizeof({match.group(1)}) instead of {match.group(2)}\"\n            \" as the 2nd arg to snprintf.\",\n        )\n\n    # Check if some verboten C functions are being used.\n    if re.search(r\"\\bsprintf\\s*\\(\", line):\n        error(filename, linenum, \"runtime/printf\", 5, \"Never use sprintf. Use snprintf instead.\")\n    match = re.search(r\"\\b(strcpy|strcat)\\s*\\(\", line)\n    if match:\n        error(\n            filename,\n            linenum,\n            \"runtime/printf\",\n            4,\n            f\"Almost always, snprintf is better than {match.group(1)}\",\n        )\n\n\ndef IsDerivedFunction(clean_lines, linenum):\n    \"\"\"Check if current line contains an inherited function.\n\n    Args:\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n    Returns:\n      True if current line contains a function with \"override\"\n      virt-specifier.\n    \"\"\"\n    # Scan back a few lines for start of current function\n    for i in range(linenum, max(-1, linenum - 10), -1):\n        match = re.match(r\"^([^()]*\\w+)\\(\", clean_lines.elided[i])\n        if match:\n            # Look for \"override\" after the matching closing parenthesis\n            line, _, closing_paren = CloseExpression(clean_lines, i, len(match.group(1)))\n            return closing_paren >= 0 and re.search(r\"\\boverride\\b\", line[closing_paren:])\n    return False\n\n\ndef IsOutOfLineMethodDefinition(clean_lines, linenum):\n    \"\"\"Check if current line contains an out-of-line method definition.\n\n    Args:\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n    Returns:\n      True if current line contains an out-of-line method definition.\n    \"\"\"\n    # Scan back a few lines for start of current function\n    for i in range(linenum, max(-1, linenum - 10), -1):\n        if re.match(r\"^([^()]*\\w+)\\(\", clean_lines.elided[i]):\n            return re.match(r\"^[^()]*\\w+::\\w+\\(\", clean_lines.elided[i]) is not None\n    return False\n\n\ndef IsInitializerList(clean_lines, linenum):\n    \"\"\"Check if current line is inside constructor initializer list.\n\n    Args:\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n    Returns:\n      True if current line appears to be inside constructor initializer\n      list, False otherwise.\n    \"\"\"\n    for i in range(linenum, 1, -1):\n        line = clean_lines.elided[i]\n        if i == linenum:\n            remove_function_body = re.match(r\"^(.*)\\{\\s*$\", line)\n            if remove_function_body:\n                line = remove_function_body.group(1)\n\n        if re.search(r\"\\s:\\s*\\w+[({]\", line):\n            # A lone colon tend to indicate the start of a constructor\n            # initializer list.  It could also be a ternary operator, which\n            # also tend to appear in constructor initializer lists as\n            # opposed to parameter lists.\n            return True\n        if re.search(r\"\\}\\s*,\\s*$\", line):\n            # A closing brace followed by a comma is probably the end of a\n            # brace-initialized member in constructor initializer list.\n            return True\n        if re.search(r\"[{};]\\s*$\", line):\n            # Found one of the following:\n            # - A closing brace or semicolon, probably the end of the previous\n            #   function.\n            # - An opening brace, probably the start of current class or namespace.\n            #\n            # Current line is probably not inside an initializer list since\n            # we saw one of those things without seeing the starting colon.\n            return False\n\n    # Got to the beginning of the file without seeing the start of\n    # constructor initializer list.\n    return False\n\n\ndef CheckForNonConstReference(filename, clean_lines, linenum, nesting_state, error):\n    \"\"\"Check for non-const references.\n\n    Separate from CheckLanguage since it scans backwards from current\n    line, instead of scanning forward.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      nesting_state: A NestingState instance which maintains information about\n                     the current stack of nested blocks being parsed.\n      error: The function to call with any errors found.\n    \"\"\"\n    # Do nothing if there is no '&' on current line.\n    line = clean_lines.elided[linenum]\n    if \"&\" not in line:\n        return\n\n    # If a function is inherited, current function doesn't have much of\n    # a choice, so any non-const references should not be blamed on\n    # derived function.\n    if IsDerivedFunction(clean_lines, linenum):\n        return\n\n    # Don't warn on out-of-line method definitions, as we would warn on the\n    # in-line declaration, if it isn't marked with 'override'.\n    if IsOutOfLineMethodDefinition(clean_lines, linenum):\n        return\n\n    # Long type names may be broken across multiple lines, usually in one\n    # of these forms:\n    #   LongType\n    #       ::LongTypeContinued &identifier\n    #   LongType::\n    #       LongTypeContinued &identifier\n    #   LongType<\n    #       ...>::LongTypeContinued &identifier\n    #\n    # If we detected a type split across two lines, join the previous\n    # line to current line so that we can match const references\n    # accordingly.\n    #\n    # Note that this only scans back one line, since scanning back\n    # arbitrary number of lines would be expensive.  If you have a type\n    # that spans more than 2 lines, please use a typedef.\n    if linenum > 1:\n        previous = None\n        if re.match(r\"\\s*::(?:[\\w<>]|::)+\\s*&\\s*\\S\", line):\n            # previous_line\\n + ::current_line\n            previous = re.search(\n                r\"\\b((?:const\\s*)?(?:[\\w<>]|::)+[\\w<>])\\s*$\", clean_lines.elided[linenum - 1]\n            )\n        elif re.match(r\"\\s*[a-zA-Z_]([\\w<>]|::)+\\s*&\\s*\\S\", line):\n            # previous_line::\\n + current_line\n            previous = re.search(\n                r\"\\b((?:const\\s*)?(?:[\\w<>]|::)+::)\\s*$\", clean_lines.elided[linenum - 1]\n            )\n        if previous:\n            line = previous.group(1) + line.lstrip()\n        else:\n            # Check for templated parameter that is split across multiple lines\n            endpos = line.rfind(\">\")\n            if endpos > -1:\n                (_, startline, startpos) = ReverseCloseExpression(clean_lines, linenum, endpos)\n                if startpos > -1 and startline < linenum:\n                    # Found the matching < on an earlier line, collect all\n                    # pieces up to current line.\n                    line = \"\"\n                    for i in range(startline, linenum + 1):\n                        line += clean_lines.elided[i].strip()\n\n    # Check for non-const references in function parameters.  A single '&' may\n    # found in the following places:\n    #   inside expression: binary & for bitwise AND\n    #   inside expression: unary & for taking the address of something\n    #   inside declarators: reference parameter\n    # We will exclude the first two cases by checking that we are not inside a\n    # function body, including one that was just introduced by a trailing '{'.\n    # TODO(google): Doesn't account for 'catch(Exception& e)' [rare].\n    if nesting_state.previous_stack_top and not (\n        isinstance(nesting_state.previous_stack_top, (_ClassInfo, _NamespaceInfo))\n    ):\n        # Not at toplevel, not within a class, and not within a namespace\n        return\n\n    # Avoid initializer lists.  We only need to scan back from the\n    # current line for something that starts with ':'.\n    #\n    # We don't need to check the current line, since the '&' would\n    # appear inside the second set of parentheses on the current line as\n    # opposed to the first set.\n    if linenum > 0:\n        for i in range(linenum - 1, max(0, linenum - 10), -1):\n            previous_line = clean_lines.elided[i]\n            if not re.search(r\"[),]\\s*$\", previous_line):\n                break\n            if re.match(r\"^\\s*:\\s+\\S\", previous_line):\n                return\n\n    # Avoid preprocessors\n    if re.search(r\"\\\\\\s*$\", line):\n        return\n\n    # Avoid constructor initializer lists\n    if IsInitializerList(clean_lines, linenum):\n        return\n\n    # We allow non-const references in a few standard places, like functions\n    # called \"swap()\" or iostream operators like \"<<\" or \">>\".  Do not check\n    # those function parameters.\n    #\n    # We also accept & in static_assert, which looks like a function but\n    # it's actually a declaration expression.\n    allowed_functions = (\n        r\"(?:[sS]wap(?:<\\w:+>)?|\"\n        r\"operator\\s*[<>][<>]|\"\n        r\"static_assert|COMPILE_ASSERT\"\n        r\")\\s*\\(\"\n    )\n    if re.search(allowed_functions, line):\n        return\n    if not re.search(r\"\\S+\\([^)]*$\", line):\n        # Don't see an allowed function on this line.  Actually we\n        # didn't see any function name on this line, so this is likely a\n        # multi-line parameter list.  Try a bit harder to catch this case.\n        for i in range(2):\n            if linenum > i and re.search(allowed_functions, clean_lines.elided[linenum - i - 1]):\n                return\n\n    decls = re.sub(r\"{[^}]*}\", \" \", line)  # exclude function body\n    for parameter in re.findall(_RE_PATTERN_REF_PARAM, decls):\n        if not re.match(_RE_PATTERN_CONST_REF_PARAM, parameter) and not re.match(\n            _RE_PATTERN_REF_STREAM_PARAM, parameter\n        ):\n            error(\n                filename,\n                linenum,\n                \"runtime/references\",\n                2,\n                \"Is this a non-const reference? \"\n                \"If so, make const or use a pointer: \" + re.sub(\" *<\", \"<\", parameter),\n            )\n\n\ndef CheckCasts(filename, clean_lines, linenum, error):\n    \"\"\"Various cast related checks.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n    line = clean_lines.elided[linenum]\n\n    # Check to see if they're using an conversion function cast.\n    # I just try to capture the most common basic types, though there are more.\n    # Parameterless conversion functions, such as bool(), are allowed as they are\n    # probably a member operator declaration or default constructor.\n    match = re.search(\n        r\"(\\bnew\\s+(?:const\\s+)?|\\S<\\s*(?:const\\s+)?)?\\b\"\n        r\"(int|float|double|bool|char|int16_t|uint16_t|int32_t|uint32_t|int64_t|uint64_t)\"\n        r\"(\\([^)].*)\",\n        line,\n    )\n    expecting_function = ExpectingFunctionArgs(clean_lines, linenum)\n    if match and not expecting_function:\n        matched_type = match.group(2)\n\n        # matched_new_or_template is used to silence two false positives:\n        # - New operators\n        # - Template arguments with function types\n        #\n        # For template arguments, we match on types immediately following\n        # an opening bracket without any spaces.  This is a fast way to\n        # silence the common case where the function type is the first\n        # template argument.  False negative with less-than comparison is\n        # avoided because those operators are usually followed by a space.\n        #\n        #   function<double(double)>   // bracket + no space = false positive\n        #   value < double(42)         // bracket + space = true positive\n        matched_new_or_template = match.group(1)\n\n        # Avoid arrays by looking for brackets that come after the closing\n        # parenthesis.\n        if re.match(r\"\\([^()]+\\)\\s*\\[\", match.group(3)):\n            return\n\n        # Other things to ignore:\n        # - Function pointers\n        # - Casts to pointer types\n        # - Placement new\n        # - Alias declarations\n        matched_funcptr = match.group(3)\n        if (\n            matched_new_or_template is None\n            and not (\n                matched_funcptr\n                and (\n                    re.match(r\"\\((?:[^() ]+::\\s*\\*\\s*)?[^() ]+\\)\\s*\\(\", matched_funcptr)\n                    or matched_funcptr.startswith(\"(*)\")\n                )\n            )\n            and not re.match(r\"\\s*using\\s+\\S+\\s*=\\s*\" + matched_type, line)\n            and not re.search(r\"new\\(\\S+\\)\\s*\" + matched_type, line)\n        ):\n            error(\n                filename,\n                linenum,\n                \"readability/casting\",\n                4,\n                f\"Using deprecated casting style.  Use static_cast<{matched_type}>(...) instead\",\n            )\n\n    if not expecting_function:\n        CheckCStyleCast(\n            filename,\n            clean_lines,\n            linenum,\n            \"static_cast\",\n            r\"\\((int|float|double|bool|char|u?int(16|32|64)_t|size_t)\\)\",\n            error,\n        )\n\n    # This doesn't catch all cases. Consider (const char * const)\"hello\".\n    #\n    # (char *) \"foo\" should always be a const_cast (reinterpret_cast won't\n    # compile).\n    if CheckCStyleCast(\n        filename, clean_lines, linenum, \"const_cast\", r'\\((char\\s?\\*+\\s?)\\)\\s*\"', error\n    ):\n        pass\n    else:\n        # Check pointer casts for other than string constants\n        CheckCStyleCast(\n            filename, clean_lines, linenum, \"reinterpret_cast\", r\"\\((\\w+\\s?\\*+\\s?)\\)\", error\n        )\n\n    # In addition, we look for people taking the address of a cast.  This\n    # is dangerous -- casts can assign to temporaries, so the pointer doesn't\n    # point where you think.\n    #\n    # Some non-identifier character is required before the '&' for the\n    # expression to be recognized as a cast.  These are casts:\n    #   expression = &static_cast<int*>(temporary());\n    #   function(&(int*)(temporary()));\n    #\n    # This is not a cast:\n    #   reference_type&(int* function_param);\n    match = re.search(\n        r\"(?:[^\\w]&\\(([^)*][^)]*)\\)[\\w(])|\"\n        r\"(?:[^\\w]&(static|dynamic|down|reinterpret)_cast\\b)\",\n        line,\n    )\n    if match:\n        # Try a better error message when the & is bound to something\n        # dereferenced by the casted pointer, as opposed to the casted\n        # pointer itself.\n        parenthesis_error = False\n        match = re.match(r\"^(.*&(?:static|dynamic|down|reinterpret)_cast\\b)<\", line)\n        if match:\n            _, y1, x1 = CloseExpression(clean_lines, linenum, len(match.group(1)))\n            if x1 >= 0 and clean_lines.elided[y1][x1] == \"(\":\n                _, y2, x2 = CloseExpression(clean_lines, y1, x1)\n                if x2 >= 0:\n                    extended_line = clean_lines.elided[y2][x2:]\n                    if y2 < clean_lines.NumLines() - 1:\n                        extended_line += clean_lines.elided[y2 + 1]\n                    if re.match(r\"\\s*(?:->|\\[)\", extended_line):\n                        parenthesis_error = True\n\n        if parenthesis_error:\n            error(\n                filename,\n                linenum,\n                \"readability/casting\",\n                4,\n                (\n                    \"Are you taking an address of something dereferenced \"\n                    \"from a cast?  Wrapping the dereferenced expression in \"\n                    \"parentheses will make the binding more obvious\"\n                ),\n            )\n        else:\n            error(\n                filename,\n                linenum,\n                \"runtime/casting\",\n                4,\n                (\n                    \"Are you taking an address of a cast?  \"\n                    \"This is dangerous: could be a temp var.  \"\n                    \"Take the address before doing the cast, rather than after\"\n                ),\n            )\n\n\ndef CheckCStyleCast(filename, clean_lines, linenum, cast_type, pattern, error):\n    \"\"\"Checks for a C-style cast by looking for the pattern.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      cast_type: The string for the C++ cast to recommend.  This is either\n        reinterpret_cast, static_cast, or const_cast, depending.\n      pattern: The regular expression used to find C-style casts.\n      error: The function to call with any errors found.\n\n    Returns:\n      True if an error was emitted.\n      False otherwise.\n    \"\"\"\n    line = clean_lines.elided[linenum]\n    match = re.search(pattern, line)\n    if not match:\n        return False\n\n    # Exclude lines with keywords that tend to look like casts\n    context = line[0 : match.start(1) - 1]\n    if re.match(r\".*\\b(?:sizeof|alignof|alignas|[_A-Z][_A-Z0-9]*)\\s*$\", context):\n        return False\n\n    # Try expanding current context to see if we one level of\n    # parentheses inside a macro.\n    if linenum > 0:\n        for i in range(linenum - 1, max(0, linenum - 5), -1):\n            context = clean_lines.elided[i] + context\n    if re.match(r\".*\\b[_A-Z][_A-Z0-9]*\\s*\\((?:\\([^()]*\\)|[^()])*$\", context):\n        return False\n\n    # operator++(int) and operator--(int)\n    if context.endswith((\" operator++\", \" operator--\", \"::operator++\", \"::operator--\")):\n        return False\n\n    # A single unnamed argument for a function tends to look like old style cast.\n    # If we see those, don't issue warnings for deprecated casts.\n    remainder = line[match.end(0) :]\n    if re.match(r\"^\\s*(?:;|const\\b|throw\\b|final\\b|override\\b|[=>{),]|->)\", remainder):\n        return False\n\n    # At this point, all that should be left is actual casts.\n    error(\n        filename,\n        linenum,\n        \"readability/casting\",\n        4,\n        f\"Using C-style cast.  Use {cast_type}<{match.group(1)}>(...) instead\",\n    )\n\n    return True\n\n\ndef ExpectingFunctionArgs(clean_lines, linenum):\n    \"\"\"Checks whether where function type arguments are expected.\n\n    Args:\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n\n    Returns:\n      True if the line at 'linenum' is inside something that expects arguments\n      of function types.\n    \"\"\"\n    line = clean_lines.elided[linenum]\n    return re.match(r\"^\\s*MOCK_(CONST_)?METHOD\\d+(_T)?\\(\", line) or (\n        linenum >= 2\n        and (\n            re.match(\n                r\"^\\s*MOCK_(?:CONST_)?METHOD\\d+(?:_T)?\\((?:\\S+,)?\\s*$\",\n                clean_lines.elided[linenum - 1],\n            )\n            or re.match(\n                r\"^\\s*MOCK_(?:CONST_)?METHOD\\d+(?:_T)?\\(\\s*$\", clean_lines.elided[linenum - 2]\n            )\n            or re.search(r\"\\bstd::m?function\\s*\\<\\s*$\", clean_lines.elided[linenum - 1])\n        )\n    )\n\n\n_HEADERS_CONTAINING_TEMPLATES: tuple[tuple[str, tuple[str, ...]], ...] = (\n    (\"<deque>\", (\"deque\",)),\n    (\n        \"<functional>\",\n        (\n            \"unary_function\",\n            \"binary_function\",\n            \"plus\",\n            \"minus\",\n            \"multiplies\",\n            \"divides\",\n            \"modulus\",\n            \"negate\",\n            \"equal_to\",\n            \"not_equal_to\",\n            \"greater\",\n            \"less\",\n            \"greater_equal\",\n            \"less_equal\",\n            \"logical_and\",\n            \"logical_or\",\n            \"logical_not\",\n            \"unary_negate\",\n            \"not1\",\n            \"binary_negate\",\n            \"not2\",\n            \"bind1st\",\n            \"bind2nd\",\n            \"pointer_to_unary_function\",\n            \"pointer_to_binary_function\",\n            \"ptr_fun\",\n            \"mem_fun_t\",\n            \"mem_fun\",\n            \"mem_fun1_t\",\n            \"mem_fun1_ref_t\",\n            \"mem_fun_ref_t\",\n            \"const_mem_fun_t\",\n            \"const_mem_fun1_t\",\n            \"const_mem_fun_ref_t\",\n            \"const_mem_fun1_ref_t\",\n            \"mem_fun_ref\",\n        ),\n    ),\n    (\"<limits>\", (\"numeric_limits\",)),\n    (\"<list>\", (\"list\",)),\n    (\"<map>\", (\"multimap\",)),\n    (\n        \"<memory>\",\n        (\"allocator\", \"make_shared\", \"make_unique\", \"shared_ptr\", \"unique_ptr\", \"weak_ptr\"),\n    ),\n    (\n        \"<queue>\",\n        (\n            \"queue\",\n            \"priority_queue\",\n        ),\n    ),\n    (\n        \"<set>\",\n        (\n            \"set\",\n            \"multiset\",\n        ),\n    ),\n    (\"<stack>\", (\"stack\",)),\n    (\n        \"<string>\",\n        (\n            \"char_traits\",\n            \"basic_string\",\n        ),\n    ),\n    (\"<tuple>\", (\"tuple\",)),\n    (\"<unordered_map>\", (\"unordered_map\", \"unordered_multimap\")),\n    (\"<unordered_set>\", (\"unordered_set\", \"unordered_multiset\")),\n    (\"<utility>\", (\"pair\",)),\n    (\"<vector>\", (\"vector\",)),\n    # gcc extensions.\n    # Note: std::hash is their hash, ::hash is our hash\n    (\n        \"<hash_map>\",\n        (\n            \"hash_map\",\n            \"hash_multimap\",\n        ),\n    ),\n    (\n        \"<hash_set>\",\n        (\n            \"hash_set\",\n            \"hash_multiset\",\n        ),\n    ),\n    (\"<slist>\", (\"slist\",)),\n)\n\n_HEADERS_MAYBE_TEMPLATES: tuple[tuple[str, tuple[str, ...]], ...] = (\n    (\n        \"<algorithm>\",\n        (\n            \"copy\",\n            \"max\",\n            \"min\",\n            \"min_element\",\n            \"sort\",\n            \"transform\",\n        ),\n    ),\n    (\"<utility>\", (\"forward\", \"make_pair\", \"move\", \"swap\")),\n)\n\n# Non templated types or global objects\n_HEADERS_TYPES_OR_OBJS: tuple[tuple[str, tuple[str, ...]], ...] = (\n    # String and others are special -- it is a non-templatized type in STL.\n    (\"<string>\", (\"string\",)),\n    (\"<iostream>\", (\"cin\", \"cout\", \"cerr\", \"clog\", \"wcin\", \"wcout\", \"wcerr\", \"wclog\")),\n    (\"<cstdio>\", (\"FILE\", \"fpos_t\")),\n)\n\n# Non templated functions\n_HEADERS_FUNCTIONS: tuple[tuple[str, tuple[str, ...]], ...] = (\n    (\n        \"<cstdio>\",\n        (\n            \"fopen\",\n            \"freopen\",\n            \"fclose\",\n            \"fflush\",\n            \"setbuf\",\n            \"setvbuf\",\n            \"fread\",\n            \"fwrite\",\n            \"fgetc\",\n            \"getc\",\n            \"fgets\",\n            \"fputc\",\n            \"putc\",\n            \"fputs\",\n            \"getchar\",\n            \"gets\",\n            \"putchar\",\n            \"puts\",\n            \"ungetc\",\n            \"scanf\",\n            \"fscanf\",\n            \"sscanf\",\n            \"vscanf\",\n            \"vfscanf\",\n            \"vsscanf\",\n            \"printf\",\n            \"fprintf\",\n            \"sprintf\",\n            \"snprintf\",\n            \"vprintf\",\n            \"vfprintf\",\n            \"vsprintf\",\n            \"vsnprintf\",\n            \"ftell\",\n            \"fgetpos\",\n            \"fseek\",\n            \"fsetpos\",\n            \"clearerr\",\n            \"feof\",\n            \"ferror\",\n            \"perror\",\n            \"tmpfile\",\n            \"tmpnam\",\n        ),\n    ),\n)\n\n_re_pattern_headers_maybe_templates: list[tuple[re.Pattern, str, str]] = []\nfor _header, _templates in _HEADERS_MAYBE_TEMPLATES:\n    # Match max<type>(..., ...), max(..., ...), but not foo->max, foo.max or\n    # 'type::max()'.\n    _re_pattern_headers_maybe_templates.extend(\n        (re.compile(r\"((\\bstd::)|[^>.:])\\b\" + _template + r\"(<.*?>)?\\([^\\)]\"), _template, _header)\n        for _template in _templates\n    )\n\n# Map is often overloaded. Only check, if it is fully qualified.\n# Match 'std::map<type>(...)', but not 'map<type>(...)''\n_re_pattern_headers_maybe_templates.append(\n    (re.compile(r\"(std\\b::\\bmap\\s*\\<)|(^(std\\b::\\b)map\\b\\(\\s*\\<)\"), \"map<>\", \"<map>\")\n)\n\n# Other scripts may reach in and modify this pattern.\n_re_pattern_templates: list[tuple[re.Pattern, str, str]] = []\nfor _header, _templates in _HEADERS_CONTAINING_TEMPLATES:\n    _re_pattern_templates.extend(\n        (\n            re.compile(r\"((^|(^|\\s|((^|\\W)::))std::)|[^>.:]\\b)\" + _template + r\"\\s*\\<\"),\n            _template + \"<>\",\n            _header,\n        )\n        for _template in _templates\n    )\n\n_re_pattern_types_or_objs: list[tuple[re.Pattern, object | type, str]] = []\nfor _header, _types_or_objs in _HEADERS_TYPES_OR_OBJS:\n    _re_pattern_types_or_objs.extend(\n        (re.compile(r\"\\b\" + _type_or_obj + r\"\\b\"), _type_or_obj, _header)\n        for _type_or_obj in _types_or_objs\n    )\n\n_re_pattern_functions: list[tuple[re.Pattern, str, str]] = []\nfor _header, _functions in _HEADERS_FUNCTIONS:\n    # Match printf(..., ...), but not foo->printf, foo.printf or\n    # 'type::printf()'.\n    _re_pattern_functions.extend(\n        (re.compile(r\"([^>.]|^)\\b\" + _function + r\"\\([^\\)]\"), _function, _header)\n        for _function in _functions\n    )\n\n\ndef FilesBelongToSameModule(filename_cc, filename_h):\n    \"\"\"Check if these two filenames belong to the same module.\n\n    The concept of a 'module' here is a as follows:\n    foo.h, foo-inl.h, foo.cc, foo_test.cc and foo_unittest.cc belong to the\n    same 'module' if they are in the same directory.\n    some/path/public/xyzzy and some/path/internal/xyzzy are also considered\n    to belong to the same module here.\n\n    If the filename_cc contains a longer path than the filename_h, for example,\n    '/absolute/path/to/base/sysinfo.cc', and this file would include\n    'base/sysinfo.h', this function also produces the prefix needed to open the\n    header. This is used by the caller of this function to more robustly open the\n    header file. We don't have access to the real include paths in this context,\n    so we need this guesswork here.\n\n    Known bugs: tools/base/bar.cc and base/bar.h belong to the same module\n    according to this implementation. Because of this, this function gives\n    some false positives. This should be sufficiently rare in practice.\n\n    Args:\n      filename_cc: is the path for the source (e.g. .cc) file\n      filename_h: is the path for the header path\n\n    Returns:\n      Tuple with a bool and a string:\n      bool: True if filename_cc and filename_h belong to the same module.\n      string: the additional prefix needed to open the header file.\n    \"\"\"\n    fileinfo_cc = FileInfo(filename_cc)\n    if fileinfo_cc.Extension().lstrip(\".\") not in GetNonHeaderExtensions():\n        return (False, \"\")\n\n    fileinfo_h = FileInfo(filename_h)\n    if not IsHeaderExtension(fileinfo_h.Extension().lstrip(\".\")):\n        return (False, \"\")\n\n    filename_cc = filename_cc[: -(len(fileinfo_cc.Extension()))]\n    if matched_test_suffix := re.search(_TEST_FILE_SUFFIX, fileinfo_cc.BaseName()):\n        filename_cc = filename_cc[: -len(matched_test_suffix.group(1))]\n\n    filename_cc = filename_cc.replace(\"/public/\", \"/\")\n    filename_cc = filename_cc.replace(\"/internal/\", \"/\")\n\n    filename_h = filename_h[: -(len(fileinfo_h.Extension()))]\n    filename_h = filename_h.removesuffix(\"-inl\")\n    filename_h = filename_h.replace(\"/public/\", \"/\")\n    filename_h = filename_h.replace(\"/internal/\", \"/\")\n\n    files_belong_to_same_module = filename_cc.endswith(filename_h)\n    common_path = \"\"\n    if files_belong_to_same_module:\n        common_path = filename_cc[: -len(filename_h)]\n    return files_belong_to_same_module, common_path\n\n\ndef CheckForIncludeWhatYouUse(filename, clean_lines, include_state, error, io=codecs):\n    \"\"\"Reports for missing stl includes.\n\n    This function will output warnings to make sure you are including the headers\n    necessary for the stl containers and functions that you use. We only give one\n    reason to include a header. For example, if you use both equal_to<> and\n    less<> in a .h file, only one (the latter in the file) of these will be\n    reported as a reason to include the <functional>.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      include_state: An _IncludeState instance.\n      error: The function to call with any errors found.\n      io: The IO factory to use to read the header file. Provided for unittest\n          injection.\n    \"\"\"\n    required = {}  # A map of header name to linenumber and the template entity.\n    # Example of required: { '<functional>': (1219, 'less<>') }\n\n    for linenum in range(clean_lines.NumLines()):\n        line = clean_lines.elided[linenum]\n        if not line or line[0] == \"#\":\n            continue\n\n        _re_patterns = []\n        _re_patterns.extend(_re_pattern_types_or_objs)\n        _re_patterns.extend(_re_pattern_functions)\n        for pattern, item, header in _re_patterns:\n            matched = pattern.search(line)\n            if matched:\n                # Don't warn about strings in non-STL namespaces:\n                # (We check only the first match per line; good enough.)\n                prefix = line[: matched.start()]\n                if prefix.endswith(\"std::\") or not prefix.endswith(\"::\"):\n                    required[header] = (linenum, item)\n\n        for pattern, template, header in _re_pattern_headers_maybe_templates:\n            if pattern.search(line):\n                required[header] = (linenum, template)\n\n        # The following function is just a speed up, no semantics are changed.\n        if \"<\" not in line:  # Reduces the cpu time usage by skipping lines.\n            continue\n\n        for pattern, template, header in _re_pattern_templates:\n            matched = pattern.search(line)\n            if matched:\n                # Don't warn about IWYU in non-STL namespaces:\n                # (We check only the first match per line; good enough.)\n                prefix = line[: matched.start()]\n                if prefix.endswith(\"std::\") or not prefix.endswith(\"::\"):\n                    required[header] = (linenum, template)\n\n    # Let's flatten the include_state include_list and copy it into a dictionary.\n    include_dict = dict([item for sublist in include_state.include_list for item in sublist])\n\n    # All the lines have been processed, report the errors found.\n    for header in sorted(required, key=required.__getitem__):\n        template = required[header][1]\n        header_stripped = header.strip('<>\"')\n        if header_stripped not in include_dict and not (\n            header_stripped[0] == \"c\" and (header_stripped[1:] + \".h\") in include_dict\n        ):\n            error(\n                filename,\n                required[header][0],\n                \"build/include_what_you_use\",\n                4,\n                \"Add #include \" + header + \" for \" + template,\n            )\n\n\n_RE_PATTERN_EXPLICIT_MAKEPAIR = re.compile(r\"\\bmake_pair\\s*<\")\n\n\ndef CheckMakePairUsesDeduction(filename, clean_lines, linenum, error):\n    \"\"\"Check that make_pair's template arguments are deduced.\n\n    G++ 4.6 in C++11 mode fails badly if make_pair's template arguments are\n    specified explicitly, and such use isn't intended in any case.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n    line = clean_lines.elided[linenum]\n    match = _RE_PATTERN_EXPLICIT_MAKEPAIR.search(line)\n    if match:\n        error(\n            filename,\n            linenum,\n            \"build/explicit_make_pair\",\n            4,  # 4 = high confidence\n            \"For C++11-compatibility, omit template arguments from make_pair\"\n            \" OR use pair directly OR if appropriate, construct a pair directly\",\n        )\n\n\ndef CheckRedundantVirtual(filename, clean_lines, linenum, error):\n    \"\"\"Check if line contains a redundant \"virtual\" function-specifier.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n    # Look for \"virtual\" on current line.\n    line = clean_lines.elided[linenum]\n    virtual = re.match(r\"^(.*)(\\bvirtual\\b)(.*)$\", line)\n    if not virtual:\n        return\n\n    # Ignore \"virtual\" keywords that are near access-specifiers.  These\n    # are only used in class base-specifier and do not apply to member\n    # functions.\n    if re.search(r\"\\b(public|protected|private)\\s+$\", virtual.group(1)) or re.match(\n        r\"^\\s+(public|protected|private)\\b\", virtual.group(3)\n    ):\n        return\n\n    # Ignore the \"virtual\" keyword from virtual base classes.  Usually\n    # there is a column on the same line in these cases (virtual base\n    # classes are rare in google3 because multiple inheritance is rare).\n    if re.match(r\"^.*[^:]:[^:].*$\", line):\n        return\n\n    # Look for the next opening parenthesis.  This is the start of the\n    # parameter list (possibly on the next line shortly after virtual).\n    # TODO(google): doesn't work if there are virtual functions with\n    # decltype() or other things that use parentheses, but csearch suggests\n    # that this is rare.\n    end_col = -1\n    end_line = -1\n    start_col = len(virtual.group(2))\n    for start_line in range(linenum, min(linenum + 3, clean_lines.NumLines())):\n        line = clean_lines.elided[start_line][start_col:]\n        parameter_list = re.match(r\"^([^(]*)\\(\", line)\n        if parameter_list:\n            # Match parentheses to find the end of the parameter list\n            (_, end_line, end_col) = CloseExpression(\n                clean_lines, start_line, start_col + len(parameter_list.group(1))\n            )\n            break\n        start_col = 0\n\n    if end_col < 0:\n        return  # Couldn't find end of parameter list, give up\n\n    # Look for \"override\" or \"final\" after the parameter list\n    # (possibly on the next few lines).\n    for i in range(end_line, min(end_line + 3, clean_lines.NumLines())):\n        line = clean_lines.elided[i][end_col:]\n        match = re.search(r\"\\b(override|final)\\b\", line)\n        if match:\n            error(\n                filename,\n                linenum,\n                \"readability/inheritance\",\n                4,\n                (\n                    '\"virtual\" is redundant since function is '\n                    f'already declared as \"{match.group(1)}\"'\n                ),\n            )\n\n        # Set end_col to check whole lines after we are done with the\n        # first line.\n        end_col = 0\n        if re.search(r\"[^\\w]\\s*$\", line):\n            break\n\n\ndef CheckRedundantOverrideOrFinal(filename, clean_lines, linenum, error):\n    \"\"\"Check if line contains a redundant \"override\" or \"final\" virt-specifier.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n    # Look for closing parenthesis nearby.  We need one to confirm where\n    # the declarator ends and where the virt-specifier starts to avoid\n    # false positives.\n    line = clean_lines.elided[linenum]\n    if (declarator_end := line.rfind(\")\")) >= 0:\n        fragment = line[declarator_end:]\n    else:\n        if linenum > 1 and clean_lines.elided[linenum - 1].rfind(\")\") >= 0:\n            fragment = line\n        else:\n            return\n\n    # Check that at most one of \"override\" or \"final\" is present, not both\n    if re.search(r\"\\boverride\\b\", fragment) and re.search(r\"\\bfinal\\b\", fragment):\n        error(\n            filename,\n            linenum,\n            \"readability/inheritance\",\n            4,\n            ('\"override\" is redundant since function is already declared as \"final\"'),\n        )\n\n\n# Returns true if we are at a new block, and it is directly\n# inside of a namespace.\ndef IsBlockInNameSpace(nesting_state: NestingState, is_forward_declaration: bool):  # noqa: FBT001\n    \"\"\"Checks that the new block is directly in a namespace.\n\n    Args:\n      nesting_state: The NestingState object that contains info about our state.\n      is_forward_declaration: If the class is a forward declared class.\n    Returns:\n      Whether or not the new block is directly in a namespace.\n    \"\"\"\n    if is_forward_declaration:\n        return len(nesting_state.stack) >= 1 and (\n            isinstance(nesting_state.stack[-1], _NamespaceInfo)\n        )\n\n    if len(nesting_state.stack) >= 1:\n        if isinstance(nesting_state.stack[-1], _NamespaceInfo):\n            return True\n        if (\n            len(nesting_state.stack) > 1\n            and isinstance(nesting_state.previous_stack_top, _NamespaceInfo)\n            and (\n                isinstance(nesting_state.stack[-2], _NamespaceInfo)\n                or len(nesting_state.stack) > 2  # Accommodate for WrappedInfo\n                and issubclass(type(nesting_state.stack[-1]), _WrappedInfo)\n                and not nesting_state.stack[-2].seen_open_brace\n                and isinstance(nesting_state.stack[-3], _NamespaceInfo)\n            )\n        ):\n            return True\n    return False\n\n\ndef ShouldCheckNamespaceIndentation(\n    nesting_state: NestingState, is_namespace_indent_item, raw_lines_no_comments, linenum\n):\n    \"\"\"This method determines if we should apply our namespace indentation check.\n\n    Args:\n      nesting_state: The current nesting state.\n      is_namespace_indent_item: If we just put a new class on the stack, True.\n        If the top of the stack is not a class, or we did not recently\n        add the class, False.\n      raw_lines_no_comments: The lines without the comments.\n      linenum: The current line number we are processing.\n\n    Returns:\n      True if we should apply our namespace indentation check. Currently, it\n      only works for classes and namespaces inside of a namespace.\n    \"\"\"\n\n    # Required by all checks involving nesting_state\n    if not nesting_state.stack:\n        return False\n\n    is_forward_declaration = IsForwardClassDeclaration(raw_lines_no_comments, linenum)\n\n    if not (is_namespace_indent_item or is_forward_declaration):\n        return False\n\n    # If we are in a macro, we do not want to check the namespace indentation.\n    if IsMacroDefinition(raw_lines_no_comments, linenum):\n        return False\n\n    # Skip if we are inside an open parenthesis block (e.g. function parameters).\n    if nesting_state.previous_stack_top and nesting_state.previous_open_parentheses > 0:\n        return False\n\n    # Skip if we are extra-indenting a member initializer list.\n    if (\n        isinstance(nesting_state.previous_stack_top, _ConstructorInfo)  # F/N (A::A() : _a(0) {/{})\n        and (\n            isinstance(nesting_state.stack[-1], _MemInitListInfo)\n            or isinstance(nesting_state.popped_top, _MemInitListInfo)\n        )\n    ) or (  # popping constructor after MemInitList on the same line (: _a(a) {})\n        isinstance(nesting_state.previous_stack_top, _ConstructorInfo)\n        and isinstance(nesting_state.popped_top, _ConstructorInfo)\n        and re.search(r\"[^:]:[^:]\", raw_lines_no_comments[linenum])\n    ):\n        return False\n\n    return IsBlockInNameSpace(nesting_state, is_forward_declaration)\n\n\n# Call this method if the line is directly inside of a namespace.\n# If the line above is blank (excluding comments) or the start of\n# an inner namespace, it cannot be indented.\ndef CheckItemIndentationInNamespace(filename, raw_lines_no_comments, linenum, error):\n    line = raw_lines_no_comments[linenum]\n    if re.match(r\"^\\s+\", line):\n        error(\n            filename, linenum, \"whitespace/indent_namespace\", 4, \"Do not indent within a namespace.\"\n        )\n\n\ndef ProcessLine(\n    filename,\n    file_extension,\n    clean_lines,\n    line,\n    include_state,\n    function_state,\n    nesting_state,\n    error,\n    extra_check_functions=None,\n    cppvar=None,\n):\n    \"\"\"Processes a single line in the file.\n\n    Args:\n      filename: Filename of the file that is being processed.\n      file_extension: The extension (dot not included) of the file.\n      clean_lines: An array of strings, each representing a line of the file,\n                   with comments stripped.\n      line: Number of line being processed.\n      include_state: An _IncludeState instance in which the headers are inserted.\n      function_state: A _FunctionState instance which counts function lines, etc.\n      nesting_state: A NestingState instance which maintains information about\n                     the current stack of nested blocks being parsed.\n      error: A callable to which errors are reported, which takes 4 arguments:\n             filename, line number, error level, and message\n      extra_check_functions: An array of additional check functions that will be\n                             run on each source line. Each function takes 4\n                             arguments: filename, clean_lines, line, error\n      cppvar: The header guard variable returned by GetHeaderGuardCPPVar.\n    \"\"\"\n    raw_lines = clean_lines.raw_lines\n    ParseNolintSuppressions(filename, raw_lines[line], line, error)\n    nesting_state.Update(filename, clean_lines, line, error)\n    CheckForNamespaceIndentation(filename, nesting_state, clean_lines, line, error)\n    if nesting_state.InAsmBlock():\n        return\n    CheckForFunctionLengths(filename, clean_lines, line, function_state, error)\n    CheckForMultilineCommentsAndStrings(filename, clean_lines, line, error)\n    CheckStyle(filename, clean_lines, line, file_extension, nesting_state, error, cppvar)\n    CheckLanguage(filename, clean_lines, line, file_extension, include_state, nesting_state, error)\n    CheckForNonConstReference(filename, clean_lines, line, nesting_state, error)\n    CheckForNonStandardConstructs(filename, clean_lines, line, nesting_state, error)\n    CheckVlogArguments(filename, clean_lines, line, error)\n    CheckPosixThreading(filename, clean_lines, line, error)\n    CheckInvalidIncrement(filename, clean_lines, line, error)\n    CheckMakePairUsesDeduction(filename, clean_lines, line, error)\n    CheckRedundantVirtual(filename, clean_lines, line, error)\n    CheckRedundantOverrideOrFinal(filename, clean_lines, line, error)\n    if extra_check_functions:\n        for check_fn in extra_check_functions:\n            check_fn(filename, clean_lines, line, error)\n\n\ndef FlagCxxHeaders(filename, clean_lines, linenum, error):\n    \"\"\"Flag C++ headers that the styleguide restricts.\n\n    Args:\n      filename: The name of the current file.\n      clean_lines: A CleansedLines instance containing the file.\n      linenum: The number of the line to check.\n      error: The function to call with any errors found.\n    \"\"\"\n    line = clean_lines.elided[linenum]\n\n    include = re.match(r'\\s*#\\s*include\\s+[<\"]([^<\"]+)[\">]', line)\n\n    # Flag unapproved C++11 headers.\n    if include and include.group(1) in (\n        \"cfenv\",\n        \"fenv.h\",\n        \"ratio\",\n    ):\n        error(\n            filename,\n            linenum,\n            \"build/c++11\",\n            5,\n            f\"<{include.group(1)}> is an unapproved C++11 header.\",\n        )\n\n    # filesystem is the only unapproved C++17 header\n    if include and include.group(1) == \"filesystem\":\n        error(filename, linenum, \"build/c++17\", 5, \"<filesystem> is an unapproved C++17 header.\")\n\n\ndef ProcessFileData(filename, file_extension, lines, error, extra_check_functions=None):\n    \"\"\"Performs lint checks and reports any errors to the given error function.\n\n    Args:\n      filename: Filename of the file that is being processed.\n      file_extension: The extension (dot not included) of the file.\n      lines: An array of strings, each representing a line of the file, with the\n             last element being empty if the file is terminated with a newline.\n      error: A callable to which errors are reported, which takes 4 arguments:\n             filename, line number, error level, and message\n      extra_check_functions: An array of additional check functions that will be\n                             run on each source line. Each function takes 4\n                             arguments: filename, clean_lines, line, error\n    \"\"\"\n    lines = (\n        [\"// marker so line numbers and indices both start at 1\"]\n        + lines\n        + [\"// marker so line numbers end in a known way\"]\n    )\n\n    include_state = _IncludeState()\n    function_state = _FunctionState()\n    nesting_state = NestingState()\n\n    ResetNolintSuppressions()\n\n    CheckForCopyright(filename, lines, error)\n    ProcessGlobalSuppressions(filename, lines)\n    RemoveMultiLineComments(filename, lines, error)\n    clean_lines = CleansedLines(lines)\n\n    cppvar = None\n    if IsHeaderExtension(file_extension):\n        cppvar = GetHeaderGuardCPPVariable(filename)\n        CheckForHeaderGuard(filename, clean_lines, error, cppvar)\n\n    for line in range(clean_lines.NumLines()):\n        ProcessLine(\n            filename,\n            file_extension,\n            clean_lines,\n            line,\n            include_state,\n            function_state,\n            nesting_state,\n            error,\n            extra_check_functions,\n            cppvar,\n        )\n        FlagCxxHeaders(filename, clean_lines, line, error)\n    if _error_suppressions.HasOpenBlock():\n        error(\n            filename,\n            _error_suppressions.GetOpenBlockStart(),\n            \"readability/nolint\",\n            5,\n            \"NONLINT block never ended\",\n        )\n\n    CheckForIncludeWhatYouUse(filename, clean_lines, include_state, error)\n\n    # Check that the .cc file has included its header if it exists.\n    if _IsSourceExtension(file_extension):\n        CheckHeaderFileIncluded(filename, include_state, error)\n\n    # We check here rather than inside ProcessLine so that we see raw\n    # lines rather than \"cleaned\" lines.\n    CheckForBadCharacters(filename, lines, error)\n\n    CheckForNewlineAtEOF(filename, lines, error)\n\n\ndef ProcessConfigOverrides(filename):\n    \"\"\"Loads the configuration files and processes the config overrides.\n\n    Args:\n      filename: The name of the file being processed by the linter.\n\n    Returns:\n      False if the current |filename| should not be processed further.\n    \"\"\"\n\n    abs_filename = os.path.abspath(filename)\n    cfg_filters = []\n    keep_looking = True\n    while keep_looking:\n        abs_path, base_name = os.path.split(abs_filename)\n        if not base_name:\n            break  # Reached the root directory.\n\n        cfg_file = os.path.join(abs_path, _config_filename)\n        abs_filename = abs_path\n        if not os.path.isfile(cfg_file):\n            continue\n\n        try:\n            with codecs.open(cfg_file, \"r\", \"utf8\", \"replace\") as file_handle:\n                for line in file_handle:\n                    line, _, _ = line.partition(\"#\")  # Remove comments.\n                    if not line.strip():\n                        continue\n\n                    name, _, val = line.partition(\"=\")\n                    name = name.strip()\n                    val = val.strip()\n                    if name == \"set noparent\":\n                        keep_looking = False\n                    elif name == \"filter\":\n                        cfg_filters.append(val)\n                    elif name == \"exclude_files\":\n                        # When matching exclude_files pattern, use the base_name of\n                        # the current file name or the directory name we are processing.\n                        # For example, if we are checking for lint errors in /foo/bar/baz.cc\n                        # and we found the .cfg file at /foo/CPPLINT.cfg, then the config\n                        # file's \"exclude_files\" filter is meant to be checked against \"bar\"\n                        # and not \"baz\" nor \"bar/baz.cc\".\n                        if base_name:\n                            pattern = re.compile(val)\n                            if pattern.match(base_name):\n                                if _cpplint_state.quiet:\n                                    # Suppress \"Ignoring file\" warning when using --quiet.\n                                    return False\n                                _cpplint_state.PrintInfo(\n                                    f'Ignoring \"{filename}\": file excluded by \"{cfg_file}\". '\n                                    'File path component \"%s\" matches '\n                                    'pattern \"%s\"\\n' % (base_name, val)\n                                )\n                                return False\n                    elif name == \"linelength\":\n                        global _line_length\n                        try:\n                            _line_length = int(val)\n                        except ValueError:\n                            _cpplint_state.PrintError(\"Line length must be numeric.\")\n                    elif name == \"extensions\":\n                        ProcessExtensionsOption(val)\n                    elif name == \"root\":\n                        global _root\n                        # root directories are specified relative to CPPLINT.cfg dir.\n                        _root = os.path.join(os.path.dirname(cfg_file), val)\n                    elif name == \"headers\":\n                        ProcessHppHeadersOption(val)\n                    elif name == \"includeorder\":\n                        ProcessIncludeOrderOption(val)\n                    else:\n                        _cpplint_state.PrintError(\n                            f\"Invalid configuration option ({name}) in file {cfg_file}\\n\"\n                        )\n\n        except OSError:\n            _cpplint_state.PrintError(\n                f\"Skipping config file '{cfg_file}': Can't open for reading\\n\"\n            )\n            keep_looking = False\n\n    # Apply all the accumulated filters in reverse order (top-level directory\n    # config options having the least priority).\n    for cfg_filter in reversed(cfg_filters):\n        _AddFilters(cfg_filter)\n\n    return True\n\n\ndef ProcessFile(filename, vlevel, extra_check_functions=None):\n    \"\"\"Does google-lint on a single file.\n\n    Args:\n      filename: The name of the file to parse.\n\n      vlevel: The level of errors to report.  Every error of confidence\n      >= verbose_level will be reported.  0 is a good default.\n\n      extra_check_functions: An array of additional check functions that will be\n                             run on each source line. Each function takes 4\n                             arguments: filename, clean_lines, line, error\n    \"\"\"\n\n    _SetVerboseLevel(vlevel)\n    _BackupFilters()\n    old_errors = _cpplint_state.error_count\n\n    if not ProcessConfigOverrides(filename):\n        _RestoreFilters()\n        return\n\n    lf_lines = []\n    crlf_lines = []\n    try:\n        # Support the UNIX convention of using \"-\" for stdin.  Note that\n        # we are not opening the file with universal newline support\n        # (which codecs doesn't support anyway), so the resulting lines do\n        # contain trailing '\\r' characters if we are reading a file that\n        # has CRLF endings.\n        # If after the split a trailing '\\r' is present, it is removed\n        # below.\n        if filename == \"-\":\n            lines = sys.stdin.read().split(\"\\n\")\n        else:\n            with codecs.open(filename, \"r\", \"utf8\", \"replace\") as target_file:\n                lines = target_file.read().split(\"\\n\")\n\n        # Remove trailing '\\r'.\n        # The -1 accounts for the extra trailing blank line we get from split()\n        for linenum in range(len(lines) - 1):\n            if lines[linenum].endswith(\"\\r\"):\n                lines[linenum] = lines[linenum].rstrip(\"\\r\")\n                crlf_lines.append(linenum + 1)\n            else:\n                lf_lines.append(linenum + 1)\n\n    except OSError:\n        # TODO(aaronliu0130): Maybe make this have an exit code of 2 after all is done\n        _cpplint_state.PrintError(f\"Skipping input '{filename}': Can't open for reading\\n\")\n        _RestoreFilters()\n        return\n\n    # Note, if no dot is found, this will give the entire filename as the ext.\n    file_extension = filename[filename.rfind(\".\") + 1 :]\n\n    # When reading from stdin, the extension is unknown, so no cpplint tests\n    # should rely on the extension.\n    if filename != \"-\" and file_extension not in GetAllExtensions():\n        _cpplint_state.PrintError(\n            f\"Ignoring {filename}; not a valid file name ({(', '.join(GetAllExtensions()))})\\n\"\n        )\n    else:\n        ProcessFileData(filename, file_extension, lines, Error, extra_check_functions)\n\n        # If end-of-line sequences are a mix of LF and CR-LF, issue\n        # warnings on the lines with CR.\n        #\n        # Don't issue any warnings if all lines are uniformly LF or CR-LF,\n        # since critique can handle these just fine, and the style guide\n        # doesn't dictate a particular end of line sequence.\n        #\n        # We can't depend on os.linesep to determine what the desired\n        # end-of-line sequence should be, since that will return the\n        # server-side end-of-line sequence.\n        if lf_lines and crlf_lines:\n            # Warn on every line with CR.  An alternative approach might be to\n            # check whether the file is mostly CRLF or just LF, and warn on the\n            # minority, we bias toward LF here since most tools prefer LF.\n            for linenum in crlf_lines:\n                Error(\n                    filename,\n                    linenum,\n                    \"whitespace/newline\",\n                    1,\n                    \"Unexpected \\\\r (^M) found; better to use only \\\\n\",\n                )\n\n    # Suppress printing anything if --quiet was passed unless the error\n    # count has increased after processing this file.\n    if not _cpplint_state.quiet or old_errors != _cpplint_state.error_count:\n        _cpplint_state.PrintInfo(f\"Done processing {filename}\\n\")\n    _RestoreFilters()\n\n\ndef PrintUsage(message):\n    \"\"\"Prints a brief usage string and exits, optionally with an error message.\n\n    Args:\n      message: The optional error message.\n    \"\"\"\n    sys.stderr.write(\n        _USAGE\n        % (\n            sorted(GetAllExtensions()),\n            \",\".join(sorted(GetAllExtensions())),\n            sorted(GetHeaderExtensions()),\n            \",\".join(sorted(GetHeaderExtensions())),\n        )\n    )\n\n    if message:\n        sys.exit(\"\\nFATAL ERROR: \" + message)\n    else:\n        sys.exit(0)\n\n\ndef PrintVersion():\n    sys.stdout.write(\"Cpplint fork (https://github.com/cpplint/cpplint)\\n\")\n    sys.stdout.write(\"cpplint \" + __VERSION__ + \"\\n\")\n    sys.stdout.write(\"Python \" + sys.version + \"\\n\")\n    sys.exit(0)\n\n\ndef PrintCategories():\n    \"\"\"Prints a list of all the error-categories used by error messages.\n\n    These are the categories used to filter messages via --filter.\n    \"\"\"\n    sys.stderr.write(\"\".join(f\"  {cat}\\n\" for cat in _ERROR_CATEGORIES))\n    sys.exit(0)\n\n\ndef ParseArguments(args):\n    \"\"\"Parses the command line arguments.\n\n    This may set the output format and verbosity level as side-effects.\n\n    Args:\n      args: The command line arguments:\n\n    Returns:\n      The list of filenames to lint.\n    \"\"\"\n    try:\n        (opts, filenames) = getopt.getopt(\n            args,\n            \"\",\n            [\n                \"help\",\n                \"output=\",\n                \"verbose=\",\n                \"v=\",\n                \"version\",\n                \"counting=\",\n                \"filter=\",\n                \"root=\",\n                \"repository=\",\n                \"linelength=\",\n                \"extensions=\",\n                \"exclude=\",\n                \"recursive\",\n                \"headers=\",\n                \"includeorder=\",\n                \"config=\",\n                \"quiet\",\n            ],\n        )\n    except getopt.GetoptError:\n        PrintUsage(\"Invalid arguments.\")\n\n    verbosity = _VerboseLevel()\n    output_format = _OutputFormat()\n    filters = \"\"\n    quiet = _Quiet()\n    counting_style = \"\"\n    recursive = False\n\n    for opt, val in opts:\n        if opt == \"--help\":\n            PrintUsage(None)\n        if opt == \"--version\":\n            PrintVersion()\n        elif opt == \"--output\":\n            if val not in (\"emacs\", \"vs7\", \"eclipse\", \"junit\", \"sed\", \"gsed\"):\n                PrintUsage(\n                    \"The only allowed output formats are emacs, vs7, eclipse sed, gsed and junit.\"\n                )\n            output_format = val\n        elif opt == \"--quiet\":\n            quiet = True\n        elif opt in {\"--verbose\", \"--v\"}:\n            verbosity = int(val)\n        elif opt == \"--filter\":\n            filters = val\n            if not filters:\n                PrintCategories()\n        elif opt == \"--counting\":\n            if val not in (\"total\", \"toplevel\", \"detailed\"):\n                PrintUsage(\"Valid counting options are total, toplevel, and detailed\")\n            counting_style = val\n        elif opt == \"--root\":\n            global _root\n            _root = val\n        elif opt == \"--repository\":\n            global _repository\n            _repository = val\n        elif opt == \"--linelength\":\n            global _line_length\n            try:\n                _line_length = int(val)\n            except ValueError:\n                PrintUsage(\"Line length must be digits.\")\n        elif opt == \"--exclude\":\n            global _excludes\n            if not _excludes:\n                _excludes = set()\n            _excludes.update(glob.glob(val))\n        elif opt == \"--extensions\":\n            ProcessExtensionsOption(val)\n        elif opt == \"--headers\":\n            ProcessHppHeadersOption(val)\n        elif opt == \"--recursive\":\n            recursive = True\n        elif opt == \"--includeorder\":\n            ProcessIncludeOrderOption(val)\n        elif opt == \"--config\":\n            global _config_filename\n            _config_filename = val\n            if os.path.basename(_config_filename) != _config_filename:\n                PrintUsage(\"Config file name must not include directory components.\")\n\n    if not filenames:\n        PrintUsage(\"No files were specified.\")\n\n    if recursive:\n        filenames = _ExpandDirectories(filenames)\n\n    if _excludes:\n        filenames = _FilterExcludedFiles(filenames)\n\n    _SetOutputFormat(output_format)\n    _SetQuiet(quiet)\n    _SetVerboseLevel(verbosity)\n    _SetFilters(filters)\n    _SetCountingStyle(counting_style)\n\n    filenames.sort()\n    return filenames\n\n\ndef _ParseFilterSelector(parameter):\n    \"\"\"Parses the given command line parameter for file- and line-specific\n    exclusions.\n    readability/casting:file.cpp\n    readability/casting:file.cpp:43\n\n    Args:\n      parameter: The parameter value of --filter\n\n    Returns:\n      [category, filename, line].\n      Category is always given.\n      Filename is either a filename or empty if all files are meant.\n      Line is either a line in filename or -1 if all lines are meant.\n    \"\"\"\n    colon_pos = parameter.find(\":\")\n    if colon_pos == -1:\n        return parameter, \"\", -1\n    category = parameter[:colon_pos]\n    second_colon_pos = parameter.find(\":\", colon_pos + 1)\n    if second_colon_pos == -1:\n        return category, parameter[colon_pos + 1 :], -1\n    return (\n        category,\n        parameter[colon_pos + 1 : second_colon_pos],\n        int(parameter[second_colon_pos + 1 :]),\n    )\n\n\ndef _ExpandDirectories(filenames):\n    \"\"\"Searches a list of filenames and replaces directories in the list with\n    all files descending from those directories. Files with extensions not in\n    the valid extensions list are excluded.\n\n    Args:\n      filenames: A list of files or directories\n\n    Returns:\n      A list of all files that are members of filenames or descended from a\n      directory in filenames\n    \"\"\"\n    expanded = set()\n    for filename in filenames:\n        if not os.path.isdir(filename):\n            expanded.add(filename)\n            continue\n\n        for root, _, files in os.walk(filename):\n            for loopfile in files:\n                fullname = os.path.join(root, loopfile)\n                fullname = fullname.removeprefix(\".\" + os.path.sep)\n                expanded.add(fullname)\n\n    return [\n        filename for filename in expanded if os.path.splitext(filename)[1][1:] in GetAllExtensions()\n    ]\n\n\ndef _FilterExcludedFiles(fnames):\n    \"\"\"Filters out files listed in the --exclude command line switch. File paths\n    in the switch are evaluated relative to the current working directory\n    \"\"\"\n    exclude_paths = [os.path.abspath(f) for f in _excludes]\n    # because globbing does not work recursively, exclude all subpath of all excluded entries\n    return [\n        f\n        for f in fnames\n        if not any(e for e in exclude_paths if _IsParentOrSame(e, os.path.abspath(f)))\n    ]\n\n\ndef _IsParentOrSame(parent, child):\n    \"\"\"Return true if child is subdirectory of parent.\n    Assumes both paths are absolute and don't contain symlinks.\n    \"\"\"\n    parent = os.path.normpath(parent)\n    child = os.path.normpath(child)\n    if parent == child:\n        return True\n\n    prefix = os.path.commonprefix([parent, child])\n    if prefix != parent:\n        return False\n    # Note: os.path.commonprefix operates on character basis, so\n    # take extra care of situations like '/foo/ba' and '/foo/bar/baz'\n    child_suffix = child[len(prefix) :]\n    child_suffix = child_suffix.lstrip(os.sep)\n    return child == os.path.join(prefix, child_suffix)\n\n\ndef main():\n    filenames = ParseArguments(sys.argv[1:])\n    backup_err = sys.stderr\n    try:\n        # Change stderr to write with replacement characters so we don't die\n        # if we try to print something containing non-ASCII characters.\n        sys.stderr = codecs.StreamReader(sys.stderr, \"replace\")\n\n        _cpplint_state.ResetErrorCounts()\n        for filename in filenames:\n            ProcessFile(filename, _cpplint_state.verbose_level)\n        # If --quiet is passed, suppress printing error count unless there are errors.\n        if not _cpplint_state.quiet or _cpplint_state.error_count > 0:\n            _cpplint_state.PrintErrorCounts()\n\n        if _cpplint_state.output_format == \"junit\":\n            sys.stderr.write(_cpplint_state.FormatJUnitXML())\n\n    finally:\n        sys.stderr = backup_err\n\n    sys.exit(_cpplint_state.error_count > 0)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "depends/cmake/CamouflageTLS.cmake",
    "content": "include(FetchContent)\n\nFetchContent_Declare(CamouflageTLS URL https://github.com/fptn-project/camouflage-tls/archive/refs/heads/main.zip)\nFetchContent_MakeAvailable(CamouflageTLS)\n\nset(CamouflageTLS_INCLUDE_DIR \"${camouflagetls_SOURCE_DIR}/include\")\nset(CamouflageTLS_INCLUDE_DIRS ${CamouflageTLS_INCLUDE_DIR} CACHE PATH \"Camouflage Include Directories\")\n\nif(NOT TARGET CamouflageTLS)\n  add_library(CamouflageTLS INTERFACE)\n  target_include_directories(CamouflageTLS INTERFACE \"${CamouflageTLS_INCLUDE_DIR}\")\nendif()\n\ntarget_include_directories(CamouflageTLS INTERFACE \"${camouflagetls_SOURCE_DIR}/include\")\n"
  },
  {
    "path": "depends/cmake/FetchBase64.cmake",
    "content": "include(FetchContent)\n\nFetchContent_Declare(Base64 URL https://github.com/tobiaslocker/base64/archive/refs/heads/master.zip)\n\nFetchContent_GetProperties(Base64)\nif(NOT Base64_POPULATED)\n  FetchContent_Populate(Base64)\nendif()\n\nset(Base64_SOURCE_DIR \"${CMAKE_CURRENT_BINARY_DIR}/_deps/base64-src\")\nset(Base64_INCLUDE_DIR \"${Base64_SOURCE_DIR}/include\")\nset(Base64_INCLUDE_DIRS\n    ${Base64_INCLUDE_DIR}\n    CACHE PATH \"Base64 Include Directories\")\n\nadd_library(Base64 INTERFACE)\ntarget_include_directories(Base64 INTERFACE \"${Base64_INCLUDE_DIR}\")\n\ninclude_directories(${Base64_INCLUDE_DIR})\n"
  },
  {
    "path": "depends/cmake/FetchLibTunTap.cmake",
    "content": "cmake_minimum_required(VERSION 3.16)\n\noption(BUILD_TESTING \"Build tests\" OFF)\n\ninclude(FetchContent)\nFetchContent_Declare(Libtuntap URL https://github.com/LaKabane/libtuntap/archive/ec1213733eb2e66e033ff8864d9fd476f9e35ffe.zip)\n#FetchContent_Declare(Libtuntap URL https://github.com/LaKabane/libtuntap/archive/refs/heads/master.zip)\n\nFetchContent_GetProperties(Libtuntap)\nif(NOT Libtuntap_POPULATED)\n  FetchContent_Populate(Libtuntap)\nendif()\n\nset(Libtuntap_SOURCE_DIR \"${CMAKE_BINARY_DIR}/_deps/libtuntap-src\")\nset(Libtuntap_BINARY_DIR \"${CMAKE_BINARY_DIR}/_deps/libtuntap-build\")\nset(Libtuntap_INCLUDE_DIR \"${Libtuntap_BINARY_DIR}/include\")\n\nset(BUILD_TESTING OFF)\nset(LIBTUNTAP_BUILD_TESTS\n    OFF\n    CACHE BOOL \"Disable libtuntap tests\")\nadd_subdirectory(\"${Libtuntap_SOURCE_DIR}\" \"${Libtuntap_BINARY_DIR}\" EXCLUDE_FROM_ALL)\ninclude_directories(\"${Libtuntap_SOURCE_DIR}/libtuntap/\")\ninclude_directories(\"${Libtuntap_SOURCE_DIR}/libtuntap/bindings/cpp\")\n\nlink_directories(\"${Libtuntap_BINARY_DIR}/lib/\")\n"
  },
  {
    "path": "depends/cmake/FetchWintun.cmake",
    "content": "include(FetchContent)\n\nFetchContent_Declare(Wintun URL https://www.wintun.net/builds/wintun-0.14.1.zip)\n\nFetchContent_GetProperties(Wintun)\nif(NOT wintun_POPULATED)\n  FetchContent_Populate(Wintun)\nendif()\n\nset(Wintun_INCLUDE_DIR \"${wintun_SOURCE_DIR}/include\")\n\nif(CMAKE_SYSTEM_PROCESSOR MATCHES \"x86_64\" OR CMAKE_SYSTEM_PROCESSOR MATCHES \"AMD64\")\n  set(Wintun_REDISTRIBUTABLE \"${wintun_SOURCE_DIR}/bin/amd64/wintun.dll\")\n  set(Wintun_REDISTRIBUTABLE_DIR \"${wintun_SOURCE_DIR}/bin/amd64\")\nelseif(CMAKE_SYSTEM_PROCESSOR MATCHES \"arm64\" OR CMAKE_SYSTEM_PROCESSOR MATCHES \"aarch64\")\n  set(Wintun_REDISTRIBUTABLE \"${wintun_SOURCE_DIR}/bin/arm64/wintun.dll\")\n  set(Wintun_REDISTRIBUTABLE_DIR \"${wintun_SOURCE_DIR}/bin/arm64\")\nelse()\n  message(FATAL_ERROR \"Unknown architecture: ${CMAKE_SYSTEM_PROCESSOR}\")\nendif()\n\nset(TARGET_DIRECTORY \"${CMAKE_BINARY_DIR}/wintun\")\nfile(MAKE_DIRECTORY ${TARGET_DIRECTORY})\nfile(COPY ${Wintun_REDISTRIBUTABLE} DESTINATION ${TARGET_DIRECTORY})\n\nadd_library(Wintun INTERFACE)\ntarget_include_directories(Wintun INTERFACE \"${Wintun_INCLUDE_DIR}\")\n"
  },
  {
    "path": "depends/cmake/NtpClient.cmake",
    "content": "include(FetchContent)\n\nFetchContent_Declare(ntp_client URL https://github.com/batchar2/NTP-client/archive/refs/heads/master.zip)\n\nFetchContent_GetProperties(ntp_client)\nif(NOT ntp_client_POPULATED)\n  FetchContent_Populate(ntp_client)\n\n  set(ntp_client_SOURCE_DIR \"${ntp_client_SOURCE_DIR}\")\n  set(ntp_client_BINARY_DIR \"${ntp_client_BINARY_DIR}\")\n  set(ntp_client_INCLUDE_DIR \"${ntp_client_SOURCE_DIR}/include\")\n\n  add_subdirectory(\"${ntp_client_SOURCE_DIR}\" \"${ntp_client_BINARY_DIR}\" EXCLUDE_FROM_ALL)\n  include_directories(\"${ntp_client_INCLUDE_DIR}\")\nendif()\n"
  },
  {
    "path": "deploy/docker/Dockerfile",
    "content": "FROM ubuntu:24.04\n\nARG FPTN_SERVER_PATH\nARG FPTN_PASSWD_PATH\n\nEXPOSE 443/tcp\n\nENV DEBIAN_FRONTEND=noninteractive\nENV TZ=Etc/UTC\n\nRUN apt-get update && \\\n    apt-get upgrade -y && \\\n    apt-get install -y unbound iproute2 iptables supervisor wget dnsmasq iputils-ping && \\\n    apt-get clean && \\\n    rm -rf /var/lib/apt/lists/*\n\nRUN mkdir -p /etc/supervisor/conf.d\n\n# Copy binaries\nCOPY \"${FPTN_SERVER_PATH}\" /usr/local/bin/fptn-server\nCOPY \"${FPTN_PASSWD_PATH}\" /usr/local/bin/fptn-passwd\nRUN chmod +x /usr/local/bin/fptn-server && \\\n    chmod +x /usr/local/bin/fptn-passwd\n\n# Copy configuration files\nCOPY deploy/docker/config/supervisord.conf /etc/supervisor/supervisord.conf\nCOPY deploy/docker/config/supervisor/*.conf /etc/supervisor/conf.d/\n\n# Copy scripts\nCOPY deploy/docker/scripts/start-fptn.sh /usr/local/bin/start-fptn.sh\nCOPY deploy/docker/scripts/start-dns-server.sh /usr/local/bin/start-dns-server.sh\nCOPY deploy/docker/scripts/token-generator.py /usr/local/bin/token-generator\nRUN chmod +x /usr/local/bin/start-fptn.sh && \\\n    chmod +x /usr/local/bin/token-generator && \\\n    chmod +x /usr/local/bin/start-dns-server.sh\n\nCMD [\"/usr/bin/supervisord\", \"--nodaemon\", \"-c\", \"/etc/supervisor/supervisord.conf\"]\n"
  },
  {
    "path": "deploy/docker/config/supervisor/dns-server.conf",
    "content": "[program:dns-server]\ncommand=/usr/local/bin/start-dns-server.sh\nautostart=true\nautorestart=true\nstartretries=3\nstartsecs=2\nstdout_logfile=/dev/stdout\nstdout_logfile_maxbytes=0\nstderr_logfile=/dev/stderr\nstderr_logfile_maxbytes=0\nredirect_stderr=true\nuser=root\n"
  },
  {
    "path": "deploy/docker/config/supervisor/fptn-server.conf",
    "content": "[program:fptn-server]\ncommand=/usr/local/bin/start-fptn.sh\nautostart=true\nautorestart=true\nstartretries=3\nstartsecs=5\nstdout_logfile=/dev/stdout\nstdout_logfile_maxbytes=0\nstderr_logfile=/dev/stderr\nstderr_logfile_maxbytes=0\nredirect_stderr=true\nuser=root\n"
  },
  {
    "path": "deploy/docker/config/supervisord.conf",
    "content": "[supervisord]\nuser=root\nnodaemon=true\nlogfile=/dev/stdout\nlogfile_maxbytes=0\npidfile=/var/run/supervisord.pid\n\n[rpcinterface:supervisor]\nsupervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface\n\n[unix_http_server]\nfile=/var/run/supervisor.sock\nchmod=0700\nuser=root\n\n[supervisorctl]\nserverurl=unix:///var/run/supervisor.sock\n\n[include]\nfiles = /etc/supervisor/conf.d/*.conf\n"
  },
  {
    "path": "deploy/docker/scripts/start-dns-server.sh",
    "content": "#!/bin/bash\n\n\nstart_unbound() {\n    echo \"Starting unbound...\"\n\n    DO_IP6=\"no\"\n    [ \"${DNS_IPV6_ENABLE:-false}\" = \"true\" ] && DO_IP6=\"yes\"\n\n    CONFIG_FILE=\"/etc/unbound/unbound.conf\"\n    ROOT_HINTS=\"/etc/unbound/root.hints\"\n    echo \"Using DNS settings:\"\n    echo \"  IPv4: yes\"\n    echo \"  IPv6: $DO_IP6\"\n\n    if [ \"${DNS_IPV6_ENABLE:-false}\" = \"true\" ]; then\n        cat > \"$CONFIG_FILE\" << 'EOF'\nserver:\n    interface: 0.0.0.0\n    interface: ::0\n    port: 53\n    do-ip4: yes\n    do-ip6: yes\n    do-udp: yes\n    do-tcp: yes\n\n    access-control: 0.0.0.0/0 allow\n    access-control: ::0/0 allow\n\n    root-hints: \"/etc/unbound/root.hints\"\n\n    cache-max-ttl: 86400\n    cache-min-ttl: 3600\n\n    hide-identity: yes\n    hide-version: yes\nEOF\n    else\n        cat > \"$CONFIG_FILE\" << 'EOF'\nserver:\n    interface: 0.0.0.0\n    port: 53\n    do-ip4: yes\n    do-ip6: no\n    do-udp: yes\n    do-tcp: yes\n\n    access-control: 0.0.0.0/0 allow\n\n    root-hints: \"/etc/unbound/root.hints\"\n\n    cache-max-ttl: 86400\n    cache-min-ttl: 3600\n\n    hide-identity: yes\n    hide-version: yes\n    prefer-ip4: yes\n    prefer-ip6: no\n\n    private-address: ::/0\n    do-not-query-localhost: no\n    unwanted-reply-threshold: 0\nEOF\n    fi\n\n    wget -q -O \"$ROOT_HINTS\" https://www.internic.net/domain/named.root\n    exec unbound -d -c \"$CONFIG_FILE\"\n}\n\nstart_dnsmasq() {\n    echo \"Starting dnsmasq...\"\n\n    CONFIG_FILE=\"/etc/dnsmasq.conf\"\n    DNS_IPV6_ENABLE=\"${DNS_IPV6_ENABLE:-false}\"\n\n    rm -f \"$CONFIG_FILE\"\n\n    if [ \"$DNS_IPV6_ENABLE\" = \"true\" ]; then\n        if [ -n \"$DNS_IPV4_PRIMARY\" ]; then\n            echo \"server=$DNS_IPV4_PRIMARY\" >> \"$CONFIG_FILE\"\n        fi\n        if [ -n \"$DNS_IPV4_SECONDARY\" ]; then\n            echo \"server=$DNS_IPV4_SECONDARY\" >> \"$CONFIG_FILE\"\n        fi\n        if [ -n \"$DNS_IPV6_PRIMARY\" ]; then\n            echo \"server=$DNS_IPV6_PRIMARY\" >> \"$CONFIG_FILE\"\n        fi\n        if [ -n \"$DNS_IPV6_SECONDARY\" ]; then\n            echo \"server=$DNS_IPV6_SECONDARY\" >> \"$CONFIG_FILE\"\n        fi\n        if [ ! -s \"$CONFIG_FILE\" ]; then\n            echo \"server=8.8.8.8\" >> \"$CONFIG_FILE\"\n            echo \"server=8.8.4.4\" >> \"$CONFIG_FILE\"\n            echo \"server=2001:4860:4860::8888\" >> \"$CONFIG_FILE\"\n            echo \"server=2001:4860:4860::8844\" >> \"$CONFIG_FILE\"\n        fi\n    else\n        if [ -n \"$DNS_IPV4_PRIMARY\" ]; then\n            echo \"server=$DNS_IPV4_PRIMARY\" >> \"$CONFIG_FILE\"\n        fi\n        if [ -n \"$DNS_IPV4_SECONDARY\" ]; then\n            echo \"server=$DNS_IPV4_SECONDARY\" >> \"$CONFIG_FILE\"\n        fi\n        if [ ! -s \"$CONFIG_FILE\" ]; then\n            echo \"server=8.8.8.8\" >> \"$CONFIG_FILE\"\n            echo \"server=8.8.4.4\" >> \"$CONFIG_FILE\"\n        fi\n        echo \"filter-AAAA\" >> \"$CONFIG_FILE\"\n    fi\n\n    cat >> \"$CONFIG_FILE\" << EOF\ndns-forward-max=512\ncache-size=16384\nlocal-ttl=14400\nneg-ttl=120\nno-resolv\nno-poll\nEOF\n\n    echo \"Using DNS servers:\"\n    echo \"  IPv4: ENABLED\"\n    echo \"    Primary:   ${DNS_IPV4_PRIMARY:-8.8.8.8 (default)}\"\n    echo \"    Secondary: ${DNS_IPV4_SECONDARY:-8.8.4.4 (default)}\"\n\n    if [ \"$DNS_IPV6_ENABLE\" = \"true\" ]; then\n        echo \"  IPv6: ENABLED\"\n        echo \"    Primary:   ${DNS_IPV6_PRIMARY:-2001:4860:4860::8888 (default)}\"\n        echo \"    Secondary: ${DNS_IPV6_SECONDARY:-2001:4860:4860::8844 (default)}\"\n    else\n        echo \"  IPv6: DISABLED\"\n    fi\n\n    exec /usr/sbin/dnsmasq --no-daemon\n}\n\n\ncase \"$USING_DNS_SERVER\" in\n    \"unbound\")\n        start_unbound\n        ;;\n    \"dnsmasq\")\n        start_dnsmasq\n        ;;\n    *)\n        echo \"Unknown USING_DNS_SERVER: $USING_DNS_SERVER, using dnsmasq\"\n        start_dnsmasq\n        ;;\nesac\nexit 0\n"
  },
  {
    "path": "deploy/docker/scripts/start-fptn.sh",
    "content": "#!/bin/bash\n\nexport OUT_NETWORK_INTERFACE=$(ip -o -4 route show to default | awk '{print $5}')\necho \"[FPTN] Using network interface: $OUT_NETWORK_INTERFACE\"\n\nexec /usr/local/bin/fptn-server \\\n    --server-key=/etc/fptn/server.key \\\n    --server-crt=/etc/fptn/server.crt \\\n    --out-network-interface=\"${OUT_NETWORK_INTERFACE}\" \\\n    --server-port=443 \\\n    --enable-detect-probing=\"${ENABLE_DETECT_PROBING}\" \\\n    --default-proxy-domain=\"${DEFAULT_PROXY_DOMAIN}\" \\\n    --allowed-sni-list=\"${ALLOWED_SNI_LIST}\" \\\n    --tun-interface-name=fptn0 \\\n    --disable-bittorrent=\"$DISABLE_BITTORRENT\" \\\n    --prometheus-access-key=\"$PROMETHEUS_SECRET_ACCESS_KEY\" \\\n    --use-remote-server-auth=\"$USE_REMOTE_SERVER_AUTH\" \\\n    --remote-server-auth-host=\"$REMOTE_SERVER_AUTH_HOST\" \\\n    --remote-server-auth-port=\"$REMOTE_SERVER_AUTH_PORT\" \\\n    --max-active-sessions-per-user=\"$MAX_ACTIVE_SESSIONS_PER_USER\" \\\n    --server-external-ips=\"${SERVER_EXTERNAL_IPS}\"\n"
  },
  {
    "path": "deploy/docker/scripts/token-generator.py",
    "content": "#!/usr/bin/env python3\n\nimport argparse\nimport base64\nimport json\nimport subprocess\nimport os\nimport sys\n\n\ndef get_md5_fingerprint(cert_path=\"/etc/fptn/server.crt\"):\n    if not os.path.exists(cert_path):\n        print(f\"Certificate file not found: {cert_path}\", file=sys.stderr)\n        sys.exit(1)\n    try:\n        cmd = [\"openssl\", \"x509\", \"-noout\", \"-fingerprint\", \"-md5\", \"-in\", cert_path]\n        output = subprocess.check_output(cmd).decode(\"utf-8\").strip()\n        # Output format: MD5 Fingerprint=AB:CD:EF:...\n        fingerprint = output.split(\"=\")[1].replace(\":\", \"\").lower()\n        return fingerprint\n    except subprocess.CalledProcessError as e:\n        print(f\"Error computing MD5 fingerprint: {e}\", file=sys.stderr)\n        sys.exit(1)\n\n\ndef generate_token(username, password, server_ip, service_name, md5_fingerprint, port=443):\n    token_data = {\n        \"version\": 1,\n        \"service_name\": service_name,\n        \"username\": username,\n        \"password\": password,\n        \"servers\": [{\"name\": service_name, \"host\": server_ip, \"md5_fingerprint\": md5_fingerprint, \"port\": port}],\n        \"censored_zone_servers\": [],\n    }\n    json_str = json.dumps(token_data, separators=(\",\", \":\"))\n    b64_bytes = base64.b64encode(json_str.encode(\"utf-8\"))\n    b64_str = b64_bytes.decode(\"utf-8\").rstrip(\"=\")\n    return f\"fptn:{b64_str}\"\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=\"FPTN VPN Token Generator\")\n    parser.add_argument(\"--user\", required=True, help=\"VPN username\")\n    parser.add_argument(\"--password\", required=True, help=\"VPN password\")\n    parser.add_argument(\"--server-ip\", required=True, help=\"VPN server public IP\")\n    parser.add_argument(\"--service-name\", default=\"MyFptnServer\", help=\"VPN service name\")\n    parser.add_argument(\"--cert-path\", default=\"/etc/fptn/server.crt\", help=\"Path to server certificate\")\n    parser.add_argument(\"--port\", type=int, default=443, help=\"Port number (default: 443)\")\n\n    args = parser.parse_args()\n\n    # Validate port\n    if not (1 <= args.port <= 65535):\n        print(f\"Error: Port {args.port} is out of range (1-65535).\", file=sys.stderr)\n        sys.exit(1)\n\n    md5_fingerprint = get_md5_fingerprint(args.cert_path)\n\n    token = generate_token(\n        username=args.user,\n        password=args.password,\n        server_ip=args.server_ip,\n        service_name=args.service_name,\n        md5_fingerprint=md5_fingerprint,\n        port=args.port,\n    )\n    print(token)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "deploy/linux/deb/README.md",
    "content": "### Setup GitHub Runner\n\nBefore setting up the GitHub runner, you need to install the following packages on your system:\n\n```bash\npip install clang-tidy\npip install clang-format\npip install cmake-format\nsudo wget -qO- https://apt.llvm.org/llvm.sh | sudo bash -s -- 20\nsudo apt install cppcheck \n\nsudo apt-get update\nsudo apt-get install -y libx11-dev libx11-xcb-dev libfontenc-dev libice-dev libsm-dev libxau-dev libxaw7-dev \\\nlibxcomposite-dev libxcursor-dev libxdamage-dev libxfixes-dev libxi-dev libxinerama-dev libxkbfile-dev \\\nlibxmuu-dev libxrandr-dev libxrender-dev libxres-dev libxss-dev libxtst-dev libxv-dev libxxf86vm-dev \\\nlibxcb-glx0-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-xkb-dev libxcb-icccm4-dev libxcb-image0-dev \\\nlibxcb-keysyms1-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-xinerama0-dev \\\nlibxcb-dri3-dev uuid-dev libxcb-cursor-dev libxcb-dri2-0-dev libxcb-dri3-dev libxcb-present-dev libxcb-composite0-dev \\\nlibxcb-ewmh-dev libxcb-res0-dev libxcb-util-dev pkg-config libgl-dev libgl1-mesa-dev\n```\n"
  },
  {
    "path": "deploy/linux/deb/create-client-cli-deb-package.sh",
    "content": "#!/usr/bin/env bash\n\n# Function to print usage\nprint_usage() {\n    echo \"Usage: $0 <fptn-client-cli-path> <version>\"\n    exit 1\n}\n\n# Check if the correct number of arguments are provided\nif [ \"$#\" -ne 2 ]; then\n    print_usage\nfi\n\nCLIENT_CLI=\"$1\"\nVERSION=\"$2\"\nMAINTAINER=\"FPTN Project\"\n\nOS_NAME=$(lsb_release -i | awk -F':\\t' '{print $2}' | tr '[:upper:]' '[:lower:]')\nOS_VERSION=$(lsb_release -r | awk -F':\\t' '{print $2}')\n\nCLIENT_TMP_DIR=$(mktemp -d -t fptn-client-cli-XXXXXX)\n\nmkdir -p \"$CLIENT_TMP_DIR/DEBIAN\"\nmkdir -p \"$CLIENT_TMP_DIR/usr/bin\"\nmkdir -p \"$CLIENT_TMP_DIR/etc/fptn-client\"\nmkdir -p \"$CLIENT_TMP_DIR/lib/systemd/system\"\n\n# Copy client binary\ncp \"$CLIENT_CLI\" \"$CLIENT_TMP_DIR/usr/bin/\"\nchmod 755 \"$CLIENT_TMP_DIR/usr/bin/$(basename \"$CLIENT_CLI\")\"\n\n\n# Create client configuration file\ncat <<EOL > \"$CLIENT_TMP_DIR/etc/fptn-client/client.conf\"\n# FPTN Client Configuration\n# =========================\n\n\n# Required: Authentication token for server access\nACCESS_TOKEN=\n\n\n# Required: Domain name used for SNI (Server Name Indication)\n# This should be a popular, non-blocked domain in your region\n# Example: rutube.ru, youtube.com, cloudflare.com\nSNI=rutube.ru\n\n\n# Optional: Connect to specific server instead of auto-selecting fastest\n# Name matching is case-insensitive\nPREFERRED_SERVER=\n\n\n# Optional: Bind to specific network interface\n# Leave empty to use default interface. Examples: eth0, wlan0, tun0\nNETWORK_INTERFACE=\n\n\n# Optional: Specify the gateway IPv4 (e.g., router IPv4)\nGATEWAY_IP=\n\n# Optional: Specify the gateway IPv6 (e.g., router IPv6)\nGATEWAY_IPv6=\n\n# Censorship Bypass Settings\n# Optional: Method to bypass censorship mechanisms\n# Available options:\n#   - obfuscation            - Masks traffic as regular HTTPS using TLS obfuscation\n#   - sni-reality-chrome147  - SNI reality with Chrome 147 browser fingerprint\n#   - sni-reality-chrome146  - SNI reality with Chrome 146 browser fingerprint\n#   - sni-reality-chrome145  - SNI reality with Chrome 145 browser fingerprint\n#   - sni-reality-firefox149 - SNI reality with Firefox 149 browser fingerprint\n#   - sni-reality-yandex26   - SNI reality with Yandex Browser 26 fingerprint\n#   - sni-reality-yandex25   - SNI reality with Yandex Browser 25 fingerprint\n#   - sni-reality-yandex24   - SNI reality with Yandex Browser 24 fingerprint\n#   - sni-reality-safari26   - SNI reality with Safari 26 browser fingerprint\nBYPASS_METHOD=sni-reality-yandex25\n\n\n# Blacklist domains - always blocked regardless of other settings\n# Completely block access to the main domain AND all its subdomains\n# Format: domain:<domain_name>[,domain:<domain_name>...]\n# Example: domain:ria.ru blocks ria.ru and all *.ria.ru sites\nBLACKLIST_DOMAINS=domain:solovev-live.ru,domain:ria.ru,domain:tass.ru,domain:1tv.ru,domain:ntv.ru,domain:rt.com\n\n\n# Networks that always bypass VPN (highest priority)\n# Traffic to these networks never uses VPN, regardless of other settings\n# Format: CIDR notation, comma-separated\n# Default: Private networks (10.0.0.0/8,172.16.0.0/12,192.168.0.0/16) bypass VPN\nEXCLUDE_TUNNEL_NETWORKS=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16\n\n\n# Networks that always use VPN (highest priority)\n# Traffic to these networks always uses VPN, regardless of other settings\n# Format: CIDR notation, comma-separated\n# Empty by default - no networks forced through VPN\nINCLUDE_TUNNEL_NETWORKS=\n\n\n# Split Tunneling Settings\n# Enable split tunneling feature\n# When enabled, traffic routing is controlled by TUNNEL_MODE and domain/network lists\n# true:  Enable split tunneling - configure routing with TUNNEL_MODE below\n# false: Disable split tunneling - all traffic goes through VPN tunnel\nENABLE_SPLIT_TUNNEL=true\n\n\n# Split tunneling mode - defines traffic routing strategy\n# exclude: Route specified domains/networks directly, all other traffic through VPN\n#          Use case: Local/trusted sites bypass VPN for better performance\n# include: Route only specified domains/networks through VPN, all other traffic directly\n#          Use case: Protect only sensitive/blocked sites with VPN\nSPLIT_TUNNEL_MODE=exclude\n\n\n# Domains for split tunneling - traffic classification based on TUNNEL_MODE\n# Format: domain:<domain_name>[,domain:<domain_name>...]\n# With TUNNEL_MODE=exclude: These domains bypass VPN tunnel\n# With TUNNEL_MODE=include: Only these domains use VPN tunnel\n# Examples for Russia: Local sites (.ru, .su) bypass VPN, foreign sites use VPN\nSPLIT_TUNNEL_DOMAINS=domain:ru,domain:su,domain:рф,domain:vk.com,domain:yandex.com,domain:userapi.com,domain:yandex.net,domain:clstorage.net\n\nEOL\n\n\n# Create systemd service file for client\ncat <<EOL > \"$CLIENT_TMP_DIR/lib/systemd/system/fptn-client.service\"\n[Unit]\nDescription=FPTN Client Service\nAfter=network.target\n\n[Service]\nEnvironmentFile=/etc/fptn-client/client.conf\nExecStart=/usr/bin/$(basename \"$CLIENT_CLI\") \\\n    --access-token \"\\${ACCESS_TOKEN}\" \\\n    --out-network-interface \"\\${NETWORK_INTERFACE}\" \\\n    --gateway-ip \"\\${GATEWAY_IP}\" \\\n    --gateway-ipv6 \"\\${GATEWAY_IPv6}\" \\\n    --sni \"\\${SNI}\" \\\n    --bypass-method \"\\${BYPASS_METHOD}\" \\\n    --blacklist-domains \"\\${BLACKLIST_DOMAINS}\" \\\n    --enable-split-tunnel=\\${ENABLE_SPLIT_TUNNEL} \\\n    --split-tunnel-domains \"\\${SPLIT_TUNNEL_DOMAINS}\" \\\n    --exclude-tunnel-networks \"\\${EXCLUDE_TUNNEL_NETWORKS}\" \\\n    --include-tunnel-networks \"\\${INCLUDE_TUNNEL_NETWORKS}\" \\\n    --preferred-server \"\\${PREFERRED_SERVER}\"\n\nRestart=always\nRestartSec=5\nUser=root\n\n[Install]\nWantedBy=multi-user.target\nEOL\n\n# Create control file for client package\nINSTALLED_SIZE=$(du -s \"$CLIENT_TMP_DIR/usr\" | cut -f1)\ncat <<EOL > \"$CLIENT_TMP_DIR/DEBIAN/control\"\nPackage: fptn-client-cli\nVersion: ${VERSION}\nArchitecture: $(dpkg --print-architecture)\nMaintainer: ${MAINTAINER}\nInstalled-Size: ${INSTALLED_SIZE}\nDepends: iptables, iproute2, net-tools\nSection: admin\nReplaces: fptn-client-cli\nConflicts: fptn-client-cli\nProvides: fptn-client-cli\nPriority: optional\nDescription: fptn client\nEOL\n\n\n# Create prerm file\ncat <<EOL > \"$CLIENT_TMP_DIR/DEBIAN/prerm\"\n#!/bin/bash\n\nsystemctl daemon-reload || echo \"Failed to reload\"\nsystemctl stop fptn-client 2>/dev/null || echo \"Failed to stop\"\nEOL\nchmod 755 \"$CLIENT_TMP_DIR/DEBIAN/prerm\"\n\n\n# Create postrm file\ncat <<EOL > \"$CLIENT_TMP_DIR/DEBIAN/postrm\"\n#!/bin/bash\n\nif [ \"\\$1\" != \"upgrade\" ]; then\n    systemctl disable fptn-client.service 2>/dev/null || true\n    rm -f /lib/systemd/system/fptn-client.service 2>/dev/null || echo \"Failed to remove\"\nfi\nEOL\nchmod 755 \"$CLIENT_TMP_DIR/DEBIAN/postrm\"\n\n\n\n# Build the Debian package\ndpkg-deb --root-owner-group --build \"$CLIENT_TMP_DIR\" \"fptn-client-cli-${VERSION}-${OS_NAME}${OS_VERSION}-$(dpkg --print-architecture).deb\"\n\n# Clean up temporary directories\nrm -rf \"$CLIENT_TMP_DIR\"\n\necho \"Client Debian package created successfully.\"\n"
  },
  {
    "path": "deploy/linux/deb/create-client-gui-deb-package.sh",
    "content": "#!/usr/bin/env bash\n\nprint_usage() {\n    echo \"Usage: $0 <fptn-client-path> <icon-path> <version> <sni-source-dir>\"\n    exit 1\n}\nif [ \"$#\" -ne 4 ]; then\n    print_usage\nfi\n\nCLIENT_GUI=\"$1\"\nCLIENT_ICON=\"$2\"\nVERSION=\"$3\"\nSNI_SOURCE_DIR=\"$4\"\n\nMAINTAINER=\"FPTN Project\"\nOS_NAME=$(lsb_release -i | awk -F':\\t' '{print $2}' | tr '[:upper:]' '[:lower:]')\nOS_VERSION=$(lsb_release -r | awk -F':\\t' '{print $2}')\nCLIENT_TMP_DIR=$(mktemp -d -t fptn-client-XXXXXX)\n\n# create structure\nmkdir -p \"$CLIENT_TMP_DIR/DEBIAN\"\nmkdir -p \"$CLIENT_TMP_DIR/usr/bin\"\nmkdir -p \"$CLIENT_TMP_DIR/opt/fptn/qt6\"  # Qt directory\nmkdir -p \"$CLIENT_TMP_DIR/opt/fptn/SNI\"  # SNI directory\nmkdir -p \"$CLIENT_TMP_DIR/usr/share/applications\"  # Directory for .desktop file\nmkdir -p \"$CLIENT_TMP_DIR/usr/share/icons/hicolor/512x512/apps\"  # Directory for icon\n\n# copy program\ncp -v \"$CLIENT_GUI\" \"$CLIENT_TMP_DIR/opt/fptn/fptn-client-gui\"\nchmod 755 \"$CLIENT_TMP_DIR/opt/fptn/fptn-client-gui\"\n\n# copy SNI files\nif [ -d \"$SNI_SOURCE_DIR\" ]; then\n    echo \"Copying SNI files from $SNI_SOURCE_DIR to $CLIENT_TMP_DIR/opt/fptn/SNI\"\n    cp -r \"$SNI_SOURCE_DIR\"/* \"$CLIENT_TMP_DIR/opt/fptn/SNI/\"\nelse\n    echo \"Warning: SNI source directory not found: $SNI_SOURCE_DIR\"\nfi\n\n# copy qt\nQT_LIBS_DIR=$CLIENT_TMP_DIR/opt/fptn/qt6/\nQT_PLUGINS_DIR=\"$QT_LIBS_DIR/plugins\"\nmkdir -p \"$QT_LIBS_DIR\"\nmkdir -p \"$QT_PLUGINS_DIR\"\n\nfind ~/.conan2 -path \"*/Release/qtbase/lib/libQt6*.so*\" -print0 | xargs -0 cp -av -t \"$QT_LIBS_DIR\"\nfind ~/.conan2 -type d -path \"*/Release/qtbase/plugins\" | grep -E \"/qt[0-9a-f]+\" | while read -r dir; do\n    cp -rv \"$dir\"/* \"$QT_PLUGINS_DIR\"\ndone\n\n# Create wrapper script\ncat <<EOL > \"$CLIENT_TMP_DIR/usr/bin/fptn-client\"\n#!/usr/bin/env bash\n\nexport FPTN_QT_DIR=\"/opt/fptn/qt6\"\nexport QT_PLUGIN_PATH=\"\\$FPTN_QT_DIR/plugins\"\nexport QT_QPA_PLATFORM_PLUGIN_PATH=\"\\$FPTN_QT_DIR/plugins/platforms\"\nexport LD_LIBRARY_PATH=\"\\$FPTN_QT_DIR:\\$QT_QPA_PLATFORM_PLUGIN_PATH\"\n\ncleanup_dns() {\n    echo \"Cleaning up DNS settings...\"\n    resolvectl revert tun0\n}\n\nnotify_error() {\n    local message=\"\\$1\"\n    notify-send -u critical \"Error in Script\" \"\\$message\" || echo \"D'oh\"\n}\n\ndeclare -a VARS\nVARS+=(\n    \"QT_PLUGIN_PATH=\\$QT_PLUGIN_PATH\"\n    \"QT_QPA_PLATFORM_PLUGIN_PATH=\\$QT_QPA_PLATFORM_PLUGIN_PATH\"\n    \"LD_LIBRARY_PATH=\\$LD_LIBRARY_PATH\"\n)\nfor VAR in \\$(env | sed 's/=/\\t/g' | awk '{ print \\$1 }' | tr '\\n' ' '); do\n    if [[ ! \" \\${VARS[@]} \" =~ \" \\$VAR=\" ]]; then\n        VARS+=(\"\\$VAR=\\${!VAR}\")\n    fi\ndone\n\nPROCESS_NAME=\"fptn-client-gui\"\nPID=\\$(pgrep \"\\$PROCESS_NAME\")\nif [ -n \"\\$PID\" ]; then\n    cleanup_dns || echo \"Failed to clean dns\"\n\n    echo \"Process \\$PROCESS_NAME found with PID \\$PID. Attempting to kill it.\"\n    kill \"\\$PID\" || echo \"Failed to stop\"\n    sleep 5\n\n    PID=\\$(pgrep \"\\$PROCESS_NAME\")\n    if [ -n \"\\$PID\" ]; then\n        echo \"Process \\$PROCESS_NAME still running. Force killing it.\"\n        pkill -9 \"\\$PROCESS_NAME\" || echo \"Failed to kill\"\n    else\n        echo \"Process \\$PROCESS_NAME successfully terminated.\"\n    fi\nelse\n    echo \"Process \\$PROCESS_NAME not found.\"\nfi\n\nTUN_INTERFACE=\\$(ip link show | grep -o 'tun0')\nif [ -n \"\\$TUN_INTERFACE\" ]; then\n    notify_error \"TUN interface \\$TUN_INTERFACE found. Disabling another VPN.\"\nelse\n    echo \"No TUN interface found.\"\nfi\n\nchattr -i /etc/resolv.conf\ntrap cleanup_dns EXIT\nexec pkexec env -u PKEXEC_UID \"SUDO_USER=\\$USER\" \"SUDO_UID=\\$(id -u)\" \"SUDO_GID=\\$(id -g)\" \"\\${VARS[@]}\" \"/bin/sh\" -c \"exec /opt/fptn/fptn-client-gui \\\"\\$@\\\"\" \"\\$@\"\n\nEOL\nchmod 755 \"$CLIENT_TMP_DIR/usr/bin/fptn-client\"\n\n# Create .desktop file\ncp \"$CLIENT_ICON\" \"$CLIENT_TMP_DIR/usr/share/icons/hicolor/512x512/apps/fptn-client.png\"\ncat <<EOL > \"$CLIENT_TMP_DIR/usr/share/applications/fptn-client.desktop\"\n[Desktop Entry]\nName=FPTN Client\nComment=FPTN VPN Client\nExec=/usr/bin/fptn-client\nIcon=/usr/share/icons/hicolor/512x512/apps/fptn-client.png\nTerminal=false\nType=Application\nCategories=Network;Utility;\nEOL\n\n# Create control file for client package\nINSTALLED_SIZE=$(du -s \"$CLIENT_TMP_DIR/usr\" | cut -f1)\ncat <<EOL > \"$CLIENT_TMP_DIR/DEBIAN/control\"\nPackage: fptn-client\nVersion: ${VERSION}\nArchitecture: $(dpkg --print-architecture)\nMaintainer: ${MAINTAINER}\nInstalled-Size: ${INSTALLED_SIZE}\nDepends: iptables, iproute2, net-tools, libgl-dev, libgl1-mesa-dev, libx11-dev, libx11-xcb-dev, libfontenc-dev, libxcb-cursor0\nProvides: fptn-client\nReplaces: fptn-client\nConflicts: fptn-client\nSection: admin\nPriority: optional\nDescription: fptn client\nEOL\n\n# Create postinst file\ncat <<EOL > \"$CLIENT_TMP_DIR/DEBIAN/postinst\"\n#!/bin/bash\n\nupdate-desktop-database || true\nEOL\nchmod 755 \"$CLIENT_TMP_DIR/DEBIAN/postinst\"\n\n# Create prerm file\ncat <<EOL > \"$CLIENT_TMP_DIR/DEBIAN/prerm\"\n#!/bin/bash\n\nPROCESS_NAME=\"fptn-client-gui\"\nPID=\\$(pgrep \"\\$PROCESS_NAME\")\nif [ -n \"\\$PID\" ]; then\n    echo \"Process \\$PROCESS_NAME found with PID \\$PID. Attempting to kill it.\"\n    kill \"\\$PID\" || echo \"Failed to stop process \\$PROCESS_NAME\"\n    sleep 5\n\n    PID=\\$(pgrep \"\\$PROCESS_NAME\")\n    if [ -n \"\\$PID\" ]; then\n        echo \"Process \\$PROCESS_NAME still running. Force killing it.\"\n        pkill -9 \"\\$PROCESS_NAME\" || echo \"Failed to force kill process \\$PROCESS_NAME\"\n    else\n        echo \"Process \\$PROCESS_NAME successfully terminated.\"\n    fi\nelse\n    echo \"Process \\$PROCESS_NAME not found.\"\nfi\nEOL\nchmod 755 \"$CLIENT_TMP_DIR/DEBIAN/prerm\"\n\n# Create postrm file\ncat <<EOL > \"$CLIENT_TMP_DIR/DEBIAN/postrm\"\n#!/bin/bash\n\nif [ \"\\$1\" != \"upgrade\" ]; then\n    rm -rf \"/opt/fptn\" || true\n    rm -f \"/usr/bin/fptn-client\" || true\n    rm -f \"/usr/share/icons/hicolor/512x512/apps/fptn-client.png\" || true\n    rm -f \"/usr/share/applications/fptn-client.desktop\" || true\nfi\nupdate-desktop-database || true\nEOL\nchmod 755 \"$CLIENT_TMP_DIR/DEBIAN/postrm\"\n\n# Build the Debian package\ndpkg-deb --root-owner-group --build \"$CLIENT_TMP_DIR\" \"fptn-client-${VERSION}-${OS_NAME}${OS_VERSION}-$(dpkg --print-architecture).deb\"\n\n# Clean up temporary directories\nrm -rf \"$CLIENT_TMP_DIR\"\n\necho \"Client Debian package created successfully.\"\n"
  },
  {
    "path": "deploy/linux/deb/create-server-deb-package.sh",
    "content": "#!/usr/bin/env bash\n\n# Function to print usage\nprint_usage() {\n    echo \"Usage: $0 <fptn-server-path> <fptn-passwd-path> <version>\"\n    exit 1\n}\n\nif [ \"$#\" -ne 3 ]; then\n    print_usage\nfi\n\nSERVER_BIN=\"$1\"\nPASSWD_BIN=\"$2\"\nVERSION=\"$3\"\n\nMAINTAINER=\"FPTN Project\"\n\nOS_NAME=$(lsb_release -i | awk -F':\\t' '{print $2}' | tr '[:upper:]' '[:lower:]')\nOS_VERSION=$(lsb_release -r | awk -F':\\t' '{print $2}')\n\nSERVER_TMP_DIR=$(mktemp -d -t fptn-server-XXXXXX)\n\nmkdir -p \"$SERVER_TMP_DIR/DEBIAN\"\nmkdir -p \"$SERVER_TMP_DIR/usr/bin\"\nmkdir -p \"$SERVER_TMP_DIR/etc/fptn\"\nmkdir -p \"$SERVER_TMP_DIR/lib/systemd/system\"\n\n# Copy server files\ncp \"$SERVER_BIN\" \"$SERVER_TMP_DIR/usr/bin/\"\nchmod 755 \"$SERVER_TMP_DIR/usr/bin/$(basename \"$SERVER_BIN\")\"\ncp \"$PASSWD_BIN\" \"$SERVER_TMP_DIR/usr/bin/\"\nchmod 755 \"$SERVER_TMP_DIR/usr/bin/$(basename \"$PASSWD_BIN\")\"\n\n# Create server configuration file\ncat <<EOL > \"$SERVER_TMP_DIR/etc/fptn/server.conf\"\n# Configuration for fptn server\n\nOUT_NETWORK_INTERFACE=\n\n# KEYS\nSERVER_KEY=\nSERVER_CRT=\n\nPORT=443\nTUN_INTERFACE_NAME=fptn0\n\n# Enable detection of probing attempts (experimental; accepted values: true or false)\nENABLE_DETECT_PROBING=false\n\n# Default domain where non-VPN client traffic will be redirected\n# When someone scans your server (not using VPN), their connection will be forwarded to this domain instead\nDEFAULT_PROXY_DOMAIN=cdnvideo.com\n\n# Comma-separated list of allowed website domains for non-VPN clients\n# This acts like a \"whitelist\" of websites that scanning bots are allowed to reach\n# Behavior logic:\n#   - List is empty (default): allows ALL domains, proxy all non-VPN traffic to the SNI in the TLS-handshake\n#   - List is NOT empty: use as whitelist:\n#       - Client SNI in list -> proxy to client's SNI\n#       - Client SNI not in list -> proxy to --default-proxy-domain\n# Domain matching includes all subdomains:\n#   - If \"example.com\" is in the list, it will match:\n#       - example.com (exact match)\n#       - www.example.com\n#       - api.example.com\n#       - any.other.sub.example.com\n# Examples:\n#   ALLOWED_SNI_LIST=example.com,test.org\n#   This allows: example.com, test.org and ALL their subdomains\nALLOWED_SNI_LIST=\n\n# Block BitTorrent traffic to prevent abuse (accepted values: true or false)\nDISABLE_BITTORRENT=true\n\n# Set the USE_REMOTE_SERVER_AUTH variable to true if you need to\n# redirect requests to a master FPTN server for authorization.\n# This is used for cluster operations.\nUSE_REMOTE_SERVER_AUTH=false\n# Specify the remote FPTN server's host address for authorization.\n# This should be the IP address or domain name of the server.\nREMOTE_SERVER_AUTH_HOST=\n# Specify the port of the remote FPTN server for authorization.\n# The default is port 443 for secure HTTPS connections.\nREMOTE_SERVER_AUTH_PORT=443\n\n# Set a secret key to allow Prometheus to access the server's statistics.\n# This key must be alphanumeric (letters and numbers only) and must not include spaces or special characters.\nPROMETHEUS_SECRET_ACCESS_KEY=\n\n# Maximum number of active sessions allowed per VPN user\nMAX_ACTIVE_SESSIONS_PER_USER=3\n\n# Public IPv4 addresses of this VPN server (comma-separated).\n# Used to prevent proxy loops when clients connect.\n# Example: 1.2.3.4,5.6.7.8\nSERVER_EXTERNAL_IPS=\n\nEOL\n\n# Create systemd service file for server\ncat <<EOL > \"$SERVER_TMP_DIR/lib/systemd/system/fptn-server.service\"\n[Unit]\nDescription=FPTN Server Service\nAfter=network.target\n\n[Service]\nEnvironmentFile=/etc/fptn/server.conf\nExecStart=/usr/bin/$(basename \"$SERVER_BIN\") \\\n  --server-key=\\${SERVER_KEY} \\\n  --server-crt=\\${SERVER_CRT} \\\n  --out-network-interface=\\${OUT_NETWORK_INTERFACE} \\\n  --server-port=\\${PORT} \\\n  --enable-detect-probing=\\${ENABLE_DETECT_PROBING} \\\n  --default-proxy-domain=\\${DEFAULT_PROXY_DOMAIN} \\\n  --allowed-sni-list=\\${ALLOWED_SNI_LIST} \\\n  --tun-interface-name=\\${TUN_INTERFACE_NAME} \\\n  --disable-bittorrent=\\${DISABLE_BITTORRENT} \\\n  --prometheus-access-key=\\${PROMETHEUS_SECRET_ACCESS_KEY} \\\n  --use-remote-server-auth=\\${USE_REMOTE_SERVER_AUTH} \\\n  --remote-server-auth-host=\\${REMOTE_SERVER_AUTH_HOST} \\\n  --remote-server-auth-port=\\${REMOTE_SERVER_AUTH_PORT} \\\n  --max-active-sessions-per-user=\\${MAX_ACTIVE_SESSIONS_PER_USER} \\\n  --server-external-ips=\\${SERVER_EXTERNAL_IPS}\nRestart=always\nWorkingDirectory=/etc/fptn\nRestartSec=5\nUser=root\n\n[Install]\nWantedBy=multi-user.target\nEOL\n\n# Create control file for server package\nINSTALLED_SIZE=$(du -s \"$SERVER_TMP_DIR/usr\" | cut -f1)\ncat <<EOL > \"$SERVER_TMP_DIR/DEBIAN/control\"\nPackage: fptn-server\nVersion: ${VERSION}\nArchitecture: $(dpkg --print-architecture)\nMaintainer: ${MAINTAINER}\nInstalled-Size: ${INSTALLED_SIZE}\nDepends: iptables, iproute2, net-tools\nSection: admin\nReplaces: fptn-server\nConflicts: fptn-server\nProvides: fptn-server\nPriority: optional\nDescription: fptn server\nEOL\n\n\n# Create preinst file\ncat <<EOL > \"$SERVER_TMP_DIR/DEBIAN/preinst\"\n#!/bin/bash\n\nif [ -f /etc/fptn/server.conf ]; then\n    cp /etc/fptn/server.conf \"/etc/fptn/server.conf.backup.\\$(date +'%Y-%m-%d__%H-%M-%S')\"\nfi\nEOL\nchmod 755 \"$SERVER_TMP_DIR/DEBIAN/preinst\"\n\n\n# Create postinst file\ncat <<EOL > \"$SERVER_TMP_DIR/DEBIAN/postinst\"\n#!/bin/bash\n\nchown root:root /etc/fptn/server.conf 2>/dev/null  || true\nEOL\nchmod 755 \"$SERVER_TMP_DIR/DEBIAN/postinst\"\n\n\ncat <<EOL > \"$SERVER_TMP_DIR/DEBIAN/prerm\"\n#!/bin/bash\n\nsystemctl daemon-reload 2>/dev/null || echo \"Failed to reload\"\nsystemctl stop fptn-server 2>/dev/null || echo \"Failed to stop\"\nEOL\nchmod 755 \"$SERVER_TMP_DIR/DEBIAN/prerm\"\n\n\ncat <<EOL > \"$SERVER_TMP_DIR/DEBIAN/postrm\"\n#!/bin/bash\n\nif [ \"\\$1\" != \"upgrade\" ]; then\n    systemctl disable fptn-server.service 2>/dev/null || echo \"Failed to disable\"\n    rm -f /lib/systemd/system/fptn-server.service 2>/dev/null || echo \"Failed to remove\"\nfi\nEOL\nchmod 755 \"$SERVER_TMP_DIR/DEBIAN/postrm\"\n\n# Build the Debian package\ndpkg-deb --build \"$SERVER_TMP_DIR\" \"fptn-server-${VERSION}-${OS_NAME}${OS_VERSION}-$(dpkg --print-architecture).deb\"\n\n# Clean up temporary directory\nrm -rf \"$SERVER_TMP_DIR\"\n\n\nchmod 644 \"fptn-server-${VERSION}-${OS_NAME}${OS_VERSION}-$(dpkg --print-architecture).deb\"\n\necho \"Server Debian package created successfully.\""
  },
  {
    "path": "deploy/linux/wifi/README.md",
    "content": "### Setting Up a WiFi-VPN Access Point on Raspberry Pi\n\nThis guide outlines the process of setting up a WiFi access point on a Raspberry Pi or another computer with all traffic routed through a VPN. Follow the instructions to turn your Raspberry Pi into a full-fledged access point.\n\n#### Step 1: Download VPN Client Version for ARM\n\nSet up the VPN client according to [this section](https://github.com/batchar2/fptn?tab=readme-ov-file#fptn-client-installation-and-configuration).\n\n#### Step 2: Install Required Packages\n\nYou will need the following packages to set up the access point:\n\n```bash\nsudo apt install hostapd dnsmasq\n```\n\n#### Step 3: System Configuration\n\nDisable and stop the hostapd and dnsmasq services to avoid conflicts:\n\n```bash\nsudo systemctl stop hostapd\nsudo systemctl disable hostapd\nsudo systemctl stop dnsmasq\nsudo systemctl disable dnsmasq\n```\n\n\n#### Step 4: Additional settings for systemd\n\nIf you are using Ubuntu 24.04/22.04, follow these additional steps:\n\nOpen the file `/etc/systemd/resolved.conf`\n\n\nFind the DNSStubListener parameter, uncomment it, and change the value to no:\n\n```bash\nDNSStubListener=no\n``` \n\nRestart the systemd-resolved service:\n\n```bash\nsudo systemctl restart systemd-resolved\n```\n\nReboot your system:\n\n```bash\nsudo reboot\n```\n\n\n\n\n\n#### Step 5: Configure Hostapd\n\nHostapd is a utility that creates a WiFi access point. Copy the hostapd configuration file:\n\n\n```bash\nsudo cp hostapd/fptn-hostapd.conf /etc/\n```\nCopy the hostapd service file:\n\n```bash\nsudo cp hostapd/fptn-hostapd.service /etc/systemd/system/\n```\n\nOpen the file /etc/fptn-hostapd.conf and replace the values with your own:\n\n```bash\n# Replace with your WiFi interface\ninterface=wlan0\n\n# Replace with your WiFi network name\nssid=VPN-FPTN\n\n# Replace with your WiFi password\nwpa_passphrase=1passwordpassword\n```\n\n#### Step 6: Configure Dnsmasq\n\nDnsmasq is a tool that automatically assigns IP addresses to all clients connected to the WiFi. Copy the dnsmasq configuration file:\n\n```bash\nsudo cp dnsmasq/fptn-dnsmasq.conf /etc/\n```\n\nCopy the dnsmasq service file:\n\n\n```bash\nsudo cp dnsmasq/fptn-dnsmasq.service /etc/systemd/system/\n```\n\n### Step 7: Traffic Routing Setup\n\nTo route packets from the WiFi interface through the VPN, perform the following steps:\nCopy the network setup service file:\n\n\n```bash\nsudo cp fptn-setup-network/fptn-setup-network.service /etc/systemd/system/\n```\n\nCopy the network setup script:\n\n```bash\nsudo cp fptn-setup-network/fptn-setup-network.sh /usr/sbin/\n```\n\nОткройте файл `/usr/sbin/fptn-setup-network.sh` и замените данные на ваши:\n\n```bash\n# Replace with your WiFi interface\nWIFI_INTERFACE=wlan0\n\n# Replace with your Ethernet interface\nETH_INTERFACE=eth0\n```\n\n### Step 8: Restart and Enable Services\n\nReload the systemd daemon:\n\n```bash\nsudo systemctl daemon-reload\n```\n\nEnable and restart the hostapd service:\n\n```bash\nsudo systemctl enable fptn-hostapd.service\nsudo systemctl restart fptn-hostapd.service\n```\n\nEnable and restart the dnsmasq service:\n\n```bash\nsudo systemctl enable fptn-dnsmasq.service\nsudo systemctl restart fptn-dnsmasq.service\n```\n\nEnable and start the network setup service:\n\n```bash\nsudo systemctl enable fptn-setup-network.service\nsudo systemctl start fptn-setup-network.service\n```\n\nEnable and start FPNT\n\n```bash\nsudo systemctl enable fptn-client.service\nsudo systemctl start fptn-client.service\n```\n\nAfter completing these steps, your Raspberry Pi will be configured as a WiFi access point with VPN functionality.\n"
  },
  {
    "path": "deploy/linux/wifi/README.ru.md",
    "content": "\n### Настройка WiFi-VPN точки доступа на Raspberry Pi\n\nВ этом руководстве описан процесс настройки точки доступа WiFi на Raspberry Pi или другом компьютере с функцией пропусканием всего трафика через VPN. Следуйте инструкциям, чтобы ваш Raspberry Pi стал полноценной точкой доступа.\n\n#### Шаг 1: Скачайте клиентскую версию VPN клиента для ARM\n\nВыполните настройку VPN клиента в соответсвии с этим [пунктом](https://github.com/batchar2/fptn?tab=readme-ov-file#fptn-client-installation-and-configuration)\n\n#### Шаг 2: Установите необходимые пакеты\n\nДля настройки точки доступа вам потребуются следующие пакеты:\n\n```bash\nsudo apt install hostapd dnsmasq\n```\n\n#### Шаг 3: Настройки системы\n\nОтключите и остановите службы hostapd и dnsmasq, чтобы избежать конфликтов:\n\n```bash\nsudo systemctl stop hostapd\nsudo systemctl disable hostapd\nsudo systemctl stop dnsmasq\nsudo systemctl disable dnsmasq\n```\n\n#### Шаг 4: Дополнительные настройки для systemd\n\nЕсли вы используете Ubuntu 24.04/22.04, выполните следующие дополнительные шаги:\n\nОткройте файл `/etc/systemd/resolved.conf`\n\n\nНайдите параметр DNSStubListener, раскомментируйте его и измените значение на no:\n\n```bash\nDNSStubListener=no\n``` \n\nПерезапустите службу systemd-resolved:\n\n```bash\nsudo systemctl restart systemd-resolved\n```\n\nПерезагрузите систему:\n\n```bash\nsudo reboot\n```\n\n\n#### Шаг 5: Настройка Hostapd\n\nHostapd утилита которая создаст wifi-точку доступа. Скопируйте файл конфигурации hostapd:\n\n```bash\nsudo cp hostapd/fptn-hostapd.conf /etc/\n```\nСкопируйте файл службы hostapd:\n\n```bash\nsudo cp hostapd/fptn-hostapd.service /etc/systemd/system/\n```\n\nОткройте файл /etc/fptn-hostapd.conf и замените значения на ваши:\n\n```bash\n#  Замените на ваш интерфейс WiFi\ninterface=wlan0\n\n#  Замените на имя вашей WiFi сети\nssid=VPN-FPTN\n\n#  Замените на ваш пароль\nwpa_passphrase=1passwordpassword\n```\n\n#### Шаг 6: Настройка dnsmasq\n\nDnsmasq инструмент, который всем клиентам подключенным к WiFi будет автоматически выдавать IP адреса.\n\nСкопируйте файл конфигурации dnsmasq:\n\n```bash\nsudo cp hostapd/fptn-dnsmasq.conf /etc/\n```\n\nСкопируйте файл службы dnsmasq:\n\n```bash\nsudo cp hostapd/fptn-dnsmasq.service /etc/systemd/system/\n```\n\n### Шаг 7: Настройка маршрутизации трафика\n\nДля того, чтобы пакеты с wifi-интерфейса попадали в VPN нужно сделать маршрутизацию трафика\n\nСкопируйте файл службы для настройки сети:\n\n```bash\nsudo cp fptn-setup-network/fptn-setup-network.service /etc/systemd/system/\n```\n\nСкопируйте скрипт настройки сети:\n```bash\nsudo cp fptn-setup-network/fptn-setup-network.sh /usr/sbin/\n```\n\nОткройте файл `/usr/sbin/fptn-setup-network.sh` и замените данные на ваши:\n\n```bash\n#  Замените на ваш WiFi интерфейс\nWIFI_INTERFACE=wlan0\n\n#  Замените на ваш Ethernet интерфейс\nETH_INTERFACE=eth0\n```\n\n### Шаг 8: Перезапустите и включите службы\n\nПерезагрузите демон systemd:\n\n```bash\nsudo systemctl daemon-reload\n```\n\nВключите и перезапустите службу hostapd:\n```bash\nsudo systemctl enable fptn-hostapd.service\nsudo systemctl restart fptn-hostapd.service\n```\n\nВключите и перезапустите службу dnsmasq:\n\n```bash\nsudo systemctl enable fptn-dnsmasq.service\nsudo systemctl restart fptn-dnsmasq.service\n```\n\nВключите и запустите службу настройки сети:\n\n```bash\nsudo systemctl enable fptn-setup-network.service\nsudo systemctl start fptn-setup-network.service\n```\n\nВключите и запустите FPTN\n```bash\nsudo systemctl enable fptn-client.service\nsudo systemctl start fptn-client.service\n```\n\nПосле выполнения этих шагов ваш Raspberry Pi будет настроен как точка доступа WiFi с функцией VPN."
  },
  {
    "path": "deploy/linux/wifi/dnsmasq/fptn-dnsmasq.conf",
    "content": "# /etc/fptn-dnsmasq.conf\n\n# REPALCE IT\ninterface=wlan0\n\nlog-facility=/var/log/dnsmasq.log\n\ndhcp-range=192.168.180.100,192.168.180.250,12h\ndhcp-option=3,192.168.180.1\nlisten-address=192.168.180.1,127.0.0.1\n#dhcp-option=option:router,10.10.0.1\n# dns\ndhcp-option=6,8.8.8.8\n#no-resolv\nlog-queries\n"
  },
  {
    "path": "deploy/linux/wifi/dnsmasq/fptn-dnsmasq.service",
    "content": "[Unit]\nDescription=FPTN dnsmasq Service\nAfter=network.target fptn-client.service fptn-hostapd.service\n\n[Service]\nExecStart=bash -c \"sleep 20 && dnsmasq --conf-file=/etc/fptn-dnsmasq.conf -d\" \nRestart=always\nUser=root\nRestartSec=5\n \n[Install]\nWantedBy=multi-user.target"
  },
  {
    "path": "deploy/linux/wifi/fptn-setup-network/fptn-setup-network.service",
    "content": "[Unit]\nDescription=FPTN dnsmasq Service\nAfter=network.target fptn-client.service fptn-hostapd.service fptn-dnsmasq.service\n\n[Service]\nExecStart=bash -c \"sleep 2 && bash /usr/sbin/fptn-setup-network.sh\" \nRestart=always\nUser=root\nRestartSec=5\n \n[Install]\nWantedBy=multi-user.target\n"
  },
  {
    "path": "deploy/linux/wifi/fptn-setup-network/fptn-setup-network.sh",
    "content": "## /usr/sbin/fptn-setup-network.sh\n\n#replace to your\nWIFI_INTERFACE=wlan0\n\n#replace to your\nETH_INTERFACE=eth0\n\necho \"Telling kernel to turn on ipv4 ip_forwarding\"\necho 1 > /proc/sys/net/ipv4/ip_forward\necho \"Done. Setting up iptables rules to allow FORWARDING\"\n\niptables -A FORWARD -i $WIFI_INTERFACE -o tun0 -j ACCEPT\niptables -A FORWARD -i tun0 -o $WIFI_INTERFACE -j ACCEPT\n\niptables -A FORWARD -i tun0 -o $ETH_INTERFACE -j ACCEPT\niptables -A FORWARD -i $ETH_INTERFACE -o tun0 -j ACCEPT\n\niptables -t nat -A POSTROUTING -o $ETH_INTERFACE -j MASQUERADE\niptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE\n\nip addr add 192.168.180.1/24 dev $WIFI_INTERFACE\n\n## fix route wifi -> tun\n#IP_TUN0=$(ip -o -4 addr list tun0 | awk '{print $4}' | cut -d/ -f1)\n#ip route add default via $IP_TUN0 dev tun0 table 100\n#ip rule add from 192.168.1.180 lookup 100\n\nsleep 60\necho \"Done setting up iptables rules. Forwarding enabled\"\n"
  },
  {
    "path": "deploy/linux/wifi/hostapd/fptn-hostapd.conf",
    "content": "# Replace with your WiFi interface\ninterface=wlan0\n# Replace with your WiFi network name\nssid=VPN-FPTN\n# Replace with your WiFi password\nwpa_passphrase=1passwordpassword\n\n\nignore_broadcast_ssid=0\n\ncountry_code=BR\nchannel=11\n\nwpa=1\nwpa_pairwise=TKIP CCMP\nrsn_pairwise=CCMP\n\nlogger_syslog=-1\nlogger_syslog_level=2\nlogger_stdout=-1\nlogger_stdout_level=2\n\nctrl_interface=/var/run/hostapd\n\nctrl_interface_group=0\n\nhw_mode=b\n\nbeacon_int=100\ndtim_period=2\nmax_num_sta=255\nrts_threshold=2347\nfragm_threshold=2346\nmacaddr_acl=0\nauth_algs=1\n\nlogger_stdout=-1\nlogger_stdout_level=2\n\nwmm_enabled=1\n#\n# WMM-PS Unscheduled Automatic Power Save Delivery [U-APSD]\n# Enable this flag if U-APSD supported outside hostapd (eg., Firmware/driver)\n#uapsd_advertisement_enabled=1\n#\n# Low priority / AC_BK = background\nwmm_ac_bk_cwmin=4\nwmm_ac_bk_cwmax=10\nwmm_ac_bk_aifs=7\nwmm_ac_bk_txop_limit=0\nwmm_ac_bk_acm=0\n# Note: for IEEE 802.11b mode: cWmin=5 cWmax=10\n#\n# Normal priority / AC_BE = best effort\nwmm_ac_be_aifs=3\nwmm_ac_be_cwmin=4\nwmm_ac_be_cwmax=10\nwmm_ac_be_txop_limit=0\nwmm_ac_be_acm=0\n# Note: for IEEE 802.11b mode: cWmin=5 cWmax=7\n#\n# High priority / AC_VI = video\nwmm_ac_vi_aifs=2\nwmm_ac_vi_cwmin=3\nwmm_ac_vi_cwmax=4\nwmm_ac_vi_txop_limit=94\nwmm_ac_vi_acm=0\n# Note: for IEEE 802.11b mode: cWmin=4 cWmax=5 txop_limit=188\n#\n# Highest priority / AC_VO = voice\nwmm_ac_vo_aifs=2\nwmm_ac_vo_cwmin=2\nwmm_ac_vo_cwmax=3\nwmm_ac_vo_txop_limit=47\nwmm_ac_vo_acm=0\n\neapol_key_index_workaround=0\neap_server=0\nown_ip_addr=127.0.0.1\n"
  },
  {
    "path": "deploy/linux/wifi/hostapd/fptn-hostapd.service",
    "content": "[Unit]\nDescription=FPTN hostapd Service\nAfter=network.target fptn-client.service\n\n[Service]\nExecStart=bash -c \"sleep 20 && hostapd /etc/fptn-hostapd.conf\" \nRestart=always\nUser=root\nRestartSec=5\n \n[Install]\nWantedBy=multi-user.target"
  },
  {
    "path": "deploy/macos/README.md",
    "content": "# README.md\n\nRequires Python 3.6+ and macOS host with pkgbuild and productbuild available\n\npip3 install macos-pkg-builder\n\npip install clang-tidy\npip install clang-format\npip install cmake-format\nbrew install cppcheck"
  },
  {
    "path": "deploy/macos/create-pkg.py",
    "content": "#!/usr/bin/env python3\n\nimport os\nimport sys\nimport shutil\nimport pathlib\nimport argparse\nimport platform\nimport plistlib\nimport tempfile\nimport subprocess\n\nfrom macos_pkg_builder import Packages\n\n\nAPP_NAME = \"FptnClient\"\nSCRIPT_FOLDER = pathlib.Path(__file__).parent\nREPOSITORY_FOLDER = pathlib.Path(__file__).parent.parent.parent\nICON = SCRIPT_FOLDER / \"assets\" / \"FptnClient.icns\"\n\n\ndef run_command(command, cwd=None):\n    result = subprocess.run(\n        command,\n        shell=True,\n        cwd=cwd,\n        text=True,\n        capture_output=True,\n    )\n    if result.returncode != 0:\n        raise RuntimeError(f\"Command '{command}' failed with error: {result.stderr.strip()}\")\n    return result.stdout.strip()\n\n\n\ndef create_app(\n    app_path: pathlib.Path,\n    fptn_client_cli: pathlib.Path,\n    fptn_client_gui: pathlib.Path,\n    version: str,\n) -> bool:\n    print(app_path)\n    try:\n        app_contents_path = app_path / \"Contents\"\n        macos_path = app_contents_path / \"MacOS\"\n        resources_path = app_contents_path / \"Resources\"\n        frameworks_path = app_contents_path / \"Frameworks\"\n        frameworks_qt_plugins_path = app_contents_path / \"Frameworks\" / \"plugins\"\n        os.makedirs(macos_path, exist_ok=True)\n        os.makedirs(resources_path, exist_ok=True)\n        os.makedirs(frameworks_path, exist_ok=True)\n        os.makedirs(frameworks_qt_plugins_path, exist_ok=True)\n\n        # Сopy SNI files from deploy/sni to Resources/SNI\n        sni_source = REPOSITORY_FOLDER / \"deploy\" / \"sni\"\n        sni_dest = resources_path / \"SNI\"\n        if sni_source.exists():\n            print(f\"Copying SNI files from {sni_source} to {sni_dest}\")\n            shutil.copytree(sni_source, sni_dest, dirs_exist_ok=True)\n        else:\n            print(f\"Warning: SNI source folder not found: {sni_source}\")\n\n        # copy cli program\n        binary_dest = macos_path / \"fptn-client-cli\"\n        shutil.copy(fptn_client_cli, binary_dest)\n        os.chmod(binary_dest, 0o755)\n        # copy wrapper of program\n        fptn_client_cli_wrapper_sh = SCRIPT_FOLDER / \"scripts\" / \"fptn-client-cli-wrapper.sh\"\n        fptn_client_cli_wrapper_sh_dest = macos_path / \"fptn-client-cli-wrapper.sh\"\n        shutil.copy(fptn_client_cli_wrapper_sh, fptn_client_cli_wrapper_sh_dest)\n        os.chmod(binary_dest, 0o755)\n\n        # --- copy gui program ---\n        binary_dest = macos_path / \"fptn-client-gui\"\n        shutil.copy(fptn_client_gui, binary_dest)\n        # Fix rpath\n        run_command(f'install_name_tool -add_rpath @executable_path/../Frameworks {macos_path / \"fptn-client-gui\"}')\n\n        os.chmod(binary_dest, 0o755)\n        fptn_client_gui_wrapper_sh = SCRIPT_FOLDER / \"scripts\" / \"fptn-client-gui-wrapper.sh\"\n        fptn_client_gui_wrapper_sh_dest = macos_path / \"fptn-client-gui-wrapper.sh\"\n        shutil.copy(fptn_client_gui_wrapper_sh, fptn_client_gui_wrapper_sh_dest)\n        os.chmod(binary_dest, 0o4755)  # 0o755)\n\n        qt_libs = run_command(r'find ~/.conan2 -type f \\( -name \"*.dylib\" \\) | grep Release')\n\n        qt_lib_paths = qt_libs.splitlines()\n        for lib in qt_lib_paths:\n            lib_path = pathlib.Path(lib)\n            lib_name = lib_path.name\n            if r\"qtbase/lib/\" in lib:\n                if r\".6.7.3.dylib\" in lib_name:\n                    lib_name = lib_name.replace(\".6.7.3.dylib\", \".6.dylib\")\n                print(f\"Copy {lib} -> {frameworks_path / lib_name}\")\n                shutil.copy(lib, frameworks_path / lib_name)\n            elif \"qtbase/plugins/\" in str(lib_path):\n                separeted = lib.split(r\"qtbase/plugins/\")\n                plugin_folder = frameworks_qt_plugins_path / separeted[1].replace(lib_name, \"\")\n                os.makedirs(plugin_folder, exist_ok=True)\n\n                print(f\"Copy {lib_path} -> {plugin_folder / lib_name}\")\n                shutil.copy(lib, plugin_folder / lib_name)\n\n        # copy icon\n        icon_dest = resources_path / ICON.name\n        shutil.copy(ICON, icon_dest)\n        # Create Info.plist\n        plist = {\n            \"CFBundleName\": APP_NAME,\n            \"CFBundleExecutable\": \"fptn-client-gui-wrapper.sh\",\n            \"CFBundleIdentifier\": \"com.fptn.vpn\",\n            \"CFBundlePackageType\": \"APPL\",\n            \"CFBundleVersion\": version,\n            \"CFBundleIconFile\": ICON.name,\n            \"LSUIElement\": True,\n            \"LSApplicationCategoryType\": \"public.app-category.utilities\",\n            \"LSRequiresNativeExecution\": True,\n            \"NSHighResolutionCapable\": True,\n            \"LD_LIBRARY_PATH\": \"@executable_path/../Frameworks\",\n            \"RunAtLoad\": True,\n            \"KeepAlive\": True,\n            \"UserName\": \"root\",\n            \"NSAllowsArbitraryLoads\": True,\n            \"NSClipboardUsageDescription\": \"Requires clipboard access to copy and paste data.\",\n        }\n\n        with open(app_contents_path / \"Info.plist\", \"wb\") as plist_file:\n            plistlib.dump(plist, plist_file)\n\n    except Exception as e:\n        print(f\"Error creating .app: {e}\")\n        raise e\n    return True\n\n\ndef create_pkg(app_path: pathlib.Path, version: str) -> bool:\n    try:\n        post_install = SCRIPT_FOLDER / \"scripts\" / \"post_install.sh\"\n        machine = \"apple-silicon\" if platform.machine() == \"arm64\" else \"intel\"\n        pkg_obj = Packages(\n            pkg_output=f\"fptn-client-{version}-{machine}.pkg\",\n            pkg_bundle_id=\"com.fptn-vpn.installer\",\n            pkg_as_distribution=True,\n            pkg_title=\"FPTN-VPN\",\n            pkg_postinstall_script=str(post_install.resolve()),\n            pkg_file_structure={\n                str(app_path.resolve()): f\"/Applications/{APP_NAME}.app\",\n            },\n        )\n        if pkg_obj.build():\n            return True\n        else:\n            print(\"Error building package.\")\n    except Exception as e:\n        print(f\"Error creating package: {e}\")\n        raise e\n    return False\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(description=\"PKG build configuration.\")\n    parser.add_argument(\"--fptn-client-cli\", required=True, help=\"Path to the cli application binary.\")\n    parser.add_argument(\"--fptn-client-gui\", required=True, help=\"Path to the gui application binary.\")\n    parser.add_argument(\"--version\", required=True, help=\"Version\")\n    args = parser.parse_args()\n\n    fptn_client_cli = pathlib.Path(args.fptn_client_cli)\n    fptn_client_gui = pathlib.Path(args.fptn_client_gui)\n    if not fptn_client_cli.is_file() or not fptn_client_gui.is_file():\n        print(f\"Binary file does not exist: {fptn_client_cli} or {fptn_client_gui}\")\n        sys.exit(1)\n    with tempfile.TemporaryDirectory() as temp_dir:\n        app_path = pathlib.Path(temp_dir) / f\"{APP_NAME}-{args.version}.app\"\n        if create_app(app_path, fptn_client_cli, fptn_client_gui, args.version):\n            if create_pkg(app_path, args.version):\n                print(f\"Package created successfully\")\n            else:\n                print(\"Failed to create package.\")\n                sys.exit(1)\n        else:\n            print(\"Failed to create .app\")\n            sys.exit(1)\n"
  },
  {
    "path": "deploy/macos/scripts/fptn-client-cli-wrapper.sh",
    "content": "#!/bin/bash\n\n# Check for root privileges\nif [ \"$(id -u)\" -ne 0 ]; then\n    echo \"This operation requires root privileges.\"\n    exit 1\nfi\n\n\n# Function to clean DNS settings\ncleanup_dns() {\n    echo \"Cleaning up DNS settings...\"\n    networksetup -listallnetworkservices | grep -v '^An asterisk' | xargs -I {} networksetup -setdnsservers \"{}\" empty\n}\n\ncd /tmp/\n\nnetworksetup -listallnetworkservices | grep -v '^An asterisk' | xargs -I {} networksetup -setdnsservers \"{}\" empty\n\ntrap cleanup_dns EXIT\n/Applications/FptnClient.app/Contents/MacOS/fptn-client-cli \"$@\"\n"
  },
  {
    "path": "deploy/macos/scripts/fptn-client-gui-wrapper.sh",
    "content": "#!/bin/bash\n\n# Dialog display functions\nshow_error() {\n    osascript -e \"display dialog \\\"$1\\\" buttons {\\\"OK\\\"} default button \\\"OK\\\" with icon stop\"\n    exit 1\n}\n\nis_client_running() {\n    pgrep -f \"fptn-client-gui\" > /dev/null\n}\n\nshow_dialog() {\n    local message=\"$1\"\n    local buttons=\"$2\"\n    local default_button=\"$3\"\n    local icon=\"$4\"\n\n    osascript -e \"display dialog \\\"$message\\\" buttons {$buttons} default button \\\"$default_button\\\" with icon $icon\"\n}\n\ncopy_sni_files() {\n    local SNI_SRC=\"/Applications/FptnClient.app/Contents/Resources/SNI\"\n    local USER_HOME=\"$HOME\"\n    local SNI_USER_DIR=\"$USER_HOME/Library/Preferences/SNI\"\n\n    # Check if SNI directory exists and has all files\n    local need_copy=false\n\n    if [ ! -d \"$SNI_USER_DIR\" ]; then\n        echo \"SNI directory doesn't exist, need to copy files\"\n        need_copy=true\n    else\n        # Check if any SNI files are missing in user directory\n        for file in \"$SNI_SRC\"/*; do\n            if [ -f \"$file\" ]; then\n                filename=$(basename \"$file\")\n                user_file=\"$SNI_USER_DIR/$filename\"\n                if [ ! -f \"$user_file\" ]; then\n                    echo \"File $filename missing in user directory, need to copy\"\n                    need_copy=true\n                    break\n                fi\n            fi\n        done\n    fi\n\n    # Copy files if needed\n    if [ \"$need_copy\" = true ] && [ -d \"$SNI_SRC\" ]; then\n        echo \"Copying SNI files to user directory...\"\n        mkdir -p \"$SNI_USER_DIR\"\n        cp -R \"$SNI_SRC/\"* \"$SNI_USER_DIR/\"\n        echo \"SNI files copied successfully to $SNI_USER_DIR\"\n    elif [ ! -d \"$SNI_SRC\" ]; then\n        echo \"Warning: SNI source folder not found: $SNI_SRC\"\n    else\n        echo \"SNI files are already up to date\"\n    fi\n}\n\n# Reset DNS settings\nclean_dns() {\n    networksetup -listallnetworkservices | grep -v '^An asterisk' | \\\n    xargs -I {} networksetup -setdnsservers \"{}\" empty\n}\n\ncopy_sni_files\n\n# Set environment and launch application\nexport QT_PLUGIN_PATH=/Applications/FptnClient.app/Contents/Frameworks/plugins\nexport QT_QPA_PLATFORM_PLUGIN_PATH=$QT_PLUGIN_PATH/platforms\nexport LD_LIBRARY_PATH=/Applications/FptnClient.app/Contents/Frameworks\n\nclean_dns\n\n# run in background\n/Applications/FptnClient.app/Contents/MacOS/fptn-client-gui \"$@\" &\n\n# wait for end of client\nwhile is_client_running; do\n    sleep 1\ndone\n\nclean_dns\n"
  },
  {
    "path": "deploy/macos/scripts/post_install.sh",
    "content": "#!/bin/bash\n\nset -e\n\n# Function to show error messages\nshow_error() {\n    local message=\"$1\"\n    osascript <<EOF\ndisplay dialog \"$message\" buttons {\"OK\"} default button \"OK\" with icon stop\nEOF\n    exit 1\n}\n\n# Function to show informational messages\nshow_info() {\n    local message=\"$1\"\n    osascript <<EOF\ndisplay dialog \"$message\" buttons {\"OK\"} default button \"OK\" with icon note\nEOF\n}\n\nSYMLINK_DIR=\"/usr/local/bin\"\nSYMLINK_PATH=\"$SYMLINK_DIR/fptn-client-cli\"\nAPP_EXECUTABLE=\"/Applications/FptnClient.app/Contents/MacOS/fptn-client-cli-wrapper.sh\"\n\n# Create directory if it doesn't exist\nif [ ! -d \"$SYMLINK_DIR\" ]; then\n    if mkdir -p \"$SYMLINK_DIR\"; then\n        echo \"Created directory: $SYMLINK_DIR\"\n    else\n        show_error \"Failed to create required directory: $SYMLINK_DIR\"\n    fi\nfi\n\n# Handle existing symlink\nif [ -L \"$SYMLINK_PATH\" ]; then\n    echo \"Found existing symlink at $SYMLINK_PATH - replacing it...\"\n    if ! rm -f \"$SYMLINK_PATH\"; then\n        show_error \"Failed to remove existing symlink at $SYMLINK_PATH\"\n    fi\nfi\n\n# Create new symlink\nif ln -s \"$APP_EXECUTABLE\" \"$SYMLINK_PATH\"; then\n    echo \"Created symlink: $SYMLINK_PATH → $APP_EXECUTABLE\"\nelse\n    show_error \"Failed to create symlink at $SYMLINK_PATH\\n\\nPlease check if you have sufficient permissions.\"\nfi\n"
  },
  {
    "path": "deploy/macos/scripts/uninstall.sh",
    "content": "#!/bin/bash\n\nSYMLINK_PATH=\"/usr/local/bin/fptn-client-cli\"\nif [ -L \"$SYMLINK_PATH\" ]; then\n    echo \"Deleting symbolic link...\"\n    sudo rm -f \"$SYMLINK_PATH\"\nelse\n    echo \"Symbolic link not found: $SYMLINK_PATH\"\nfi\n\necho \"tun.kext and related files have been removed.\"\n"
  },
  {
    "path": "deploy/sni/global.sni",
    "content": "speedtest.net\r\ncloudflare.com\r\ngoogle.com\r\nmicrosoft.com\r\napple.com\r\namazon.com\r\nnetflix.com\r\nyoutube.com\r\nfacebook.com\r\ninstagram.com\r\ntwitter.com\r\nbing.com\r\nyahoo.com\r\nwikipedia.org\r\nreddit.com\r\ngithub.com\r\ngitlab.com\r\nstackoverflow.com\r\ndropbox.com\r\nadobe.com\r\nnvidia.com\r\nintel.com\r\namd.com\r\ncisco.com\r\noracle.com\r\nibm.com\r\nsalesforce.com\r\nspotify.com\r\ntwitch.tv\r\ndiscord.com\r\ntelegram.org\r\nzoom.us\r\nakamaihd.net\r\ncloudflare.net\r\nfastly.net\r\njsdelivr.net\r\ngoogle-analytics.com\r\ngoogletagmanager.com\r\ngoogleadservices.com\r\ngstatic.com\r\ngstatic.com\r\ngoogleapis.com\r\nrecaptcha.net\r\nmicrosoftonline.com\r\noffice.com\r\nwindowsupdate.com\r\napple.com.edgekey.net\r\nicloud.com\r\nmzstatic.com\r\npaypal.com\r\nstripe.com\r\nshopify.com\r\ncoinbase.com\r\nbinance.com\r\nkraken.com\r\nokx.com\r\nderibit.com\r\nbybit.com\r\nhuobi.com\r\ngemini.com\r\nkucoin.com\r\nbitfinex.cm\r\nyahoo.co.jp\r\nbaidu.com\r\nqq.com\r\ntaobao.com\r\ntmall.com\r\njd.com\r\nweibo.com\r\nyouku.com\r\nsohu.com\r\n163.com\r\nalipay.com\r\nalibaba.com\r\nxiaomi.com\r\nhuawei.com\r\nsamsung.com\r\nlg.com\r\nsony.com\r\npanasonic.com\r\nlenovo.com\r\ndell.com\r\nhp.com\r\nasus.com\r\nacer.com\r\nbluetooth.com\r\nw3.org\r\nmozilla.org\r\nopera.com\r\nvivaldi.com\r\nbrave.com\r\nduckduckgo.com\r\ndeepl.com\r\nopenai.com\r\nanthropic.com\r\nmeta.com\r\nroblox.com\r\nminecraft.net\r\nepicgames.com\r\nunrealengine.com\r\nunity.com\r\nplaystation.com\r\nxbox.com\r\nnintendo.com\r\nsteampowered.com\r\nstore.steampowered.com\r\nepicgames.com\r\nubisoft.com\r\nea.com\r\nblizzard.com\r\nactivision.com\r\nriotgames.com\r\ntiktok.com\r\npinterest.com\r\nsnapchat.com\r\nwhatsapp.com\r\nwechat.com\r\nvk.com\r\nok.ru\r\nlinkedin.com\r\nmedium.com\r\nblogger.com\r\nwordpress.com\r\nwordpress.org\r\ntumblr.com\r\nquora.com\r\nvimeo.com\r\ndailymotion.com\r\nsoundcloud.com\r\nshazam.com\r\ndeezer.com\r\napple-music.com\r\nhulu.com\r\ndisneyplus.com\r\nprimevideo.com\r\nhbo.com\r\nhbomax.com\r\nparamountplus.com\r\npeacocktv.com\r\nbbc.com\r\ncnn.com\r\nfoxnews.com\r\ntheguardian.com\r\nnytimes.com\r\nlatimes.com\r\nbloomberg.com\r\nreuters.com\r\napnews.com\r\nft.com\r\nforbes.com\r\nwashingtonpost.com\r\neconomist.com\r\nbooking.com\r\nairbnb.com\r\ntripadvisor.com\r\nagoda.com\r\nexpedia.com\r\nuber.com\r\nlyft.com\r\nskyscanner.net\r\nhilton.com\r\nmarriott.com\r\nebay.com\r\nbestbuy.com\r\nwalmart.com\r\ntarget.com\r\ncostco.com\r\netsy.com\r\nalibaba.com\r\naliexpress.com\r\nshein.com\r\nasos.com\r\nzara.com\r\nhm.com\r\nnike.com\r\nadidas.com\r\ndecathlon.com\r\nmastercard.com\r\nvisa.com\r\namericanexpress.com\r\nhsbc.com\r\nciti.com\r\nwellsfargo.com\r\nchase.com\r\nbankofamerica.com\r\nbarclays.co.uk\r\nsantander.com\r\nfidelity.com\r\nvanguard.com\r\nblackrock.com\r\nrobinhood.com\r\netoro.com\r\nrevolut.com\r\nn26.com\r\ncloudflarestream.com\r\ncloudflarestatus.com\r\ncloudflare-dns.com\r\ncloudflareinsights.com\r\nfastlylabs.com\r\nedgekey.net\r\nedgecompute.app\r\nlimelight.com\r\nverizon.com\r\natt.com\r\nt-mobile.com\r\ndigitalocean.com\r\nlinode.com\r\nvultr.com\r\nheroku.com\r\nherokuapp.com\r\naws.amazon.com\r\ns3.amazonaws.com\r\nec2.amazonaws.com\r\ncloudfront.net\r\nazure.com\r\nazureedge.net\r\ngooglecloud.com\r\ngvt1.com\r\ngoogleapis.cn\r\noraclecloud.com\r\nibmcloud.com\r\ntencentcloud.com\r\ncdn77.com\r\nstackpath.com\r\nkeycdn.com\r\nbunny.net\r\nbunnycdn.com\r\nakamai.com\r\nakamaiedge.net\r\nakamaized.net\r\nakamai.net\r\nhotjar.com\r\nmixpanel.com\r\nsegment.com\r\nnewrelic.com\r\ndatadoghq.com\r\nsentry.io\r\nbugsnag.com\r\ncloudflarewarp.com\r\nwireguard.com\r\nopenvpn.net\r\nipify.org\r\ngeoip.com\r\nmaxmind.com\r\njetbrains.com\r\natlassian.com\r\nslack.com\r\nnotion.so\r\ntrello.com\r\nconfluence.com\r\njira.com\r\nfigma.com\r\ncanva.com\r\nmiro.com\r\nzoominfo.com\r\ngrammarly.com\r\nmailchimp.com\r\nsendgrid.com\r\ntwilio.com\r\ncloudflareclient.com\r\ncloudflaregateway.com\r\ncloudflareapi.com\r\ncloudflareworkers.com\r\ncloudflarezero.com\r\ncloudflareaccess.com\r\ncloudflarepages.com\r\ncloudflareimages.com\r\n"
  },
  {
    "path": "deploy/sni/russia.sni",
    "content": "ie.ozone.ru\r\nch.fjdjdjfjd.icu\r\ncdn1.takovpn.ru\r\neh.vk.com\r\ncdn1.ozone.ru\r\nturbo-pvz-notification.ozon.ru\r\nturbo-pvz.ozon.ru\r\nsentry.ozon.ru\r\ncdns.ozon.ru\r\ns3.dfs.ivi.ru\r\nyastatic.net\r\nthumbs.dfs.ivi.ru\r\nsolea-parent.dfs.ivi.ru\r\nautofill.yandex.ru\r\ngoogletagmanager.com\r\nds-parent.dfs.ivi.ru\r\ncontent.adriver.ru\r\nad.adriver.ru\r\ncdn.targetads.io\r\nstatad.ru\r\nprivacy-cs.mail.ru\r\neye.targetads.io\r\nrocket.ivi.ru\r\nflocktory.com\r\napi.flocktory.com\r\napi2.ivi.ru\r\noffers-comparison.yandex.ru\r\nregion.dfs.ivi.ru\r\ndfs-krd-3.dfs.ivi.ru\r\nmradx.net\r\ntns-counter.ru\r\nmycdn.me\r\n0.0.chechnya.gov.ru\r\n0.avito.ru\r\n0.tele2.ru\r\n0.vk.com\r\n0.yandex.ru\r\n00-staging-avicdn.msk.avito.ru\r\n00.chechnya.gov.ru\r\n000.avito.ru\r\n000.vk.com\r\n0001winmdm03.mts.ru\r\n007.avito.ru\r\n007.megafon.ru\r\n01.04.yandex.ru\r\n01.avito.ru\r\n01.gosuslugi.ru\r\n01.mchs.gov.ru\r\n01.mchs.ru\r\n01.rdr.um.maps.yandex.ru\r\n01.vk.com\r\n0100007f0cd5c4611905054e02a565fb-sp.ops.beeline.ru\r\n0100007f20706d62c200ed4a02c47e5e-sp.ops.beeline.ru\r\n0100007f32d31c6097017db5023b2f0a-sp.ops.beeline.ru\r\n0100007f382c6c60bc0260bd02b16127-sp.ops.beeline.ru\r\n0100007f3a5dd162ae00f14d0262a60a-sp.ops.beeline.ru\r\n0100007f86f3b860c80162940298aa78-sp.ops.beeline.ru\r\n0100007fb82df35f1b03bd8802a2e73e-sp.ops.beeline.ru\r\n01l3r.vk.com\r\n01tqrecg-rlp.ops.beeline.ru\r\n02.avito.ru\r\n02.gosuslugi.ru\r\n02.mchs.gov.ru\r\n02.mchs.ru\r\n02.rdr.um.maps.yandex.ru\r\n02.vk.com\r\n03-12-1-mlp-3d9375eef3ec10.ml.kz.cloud.vk.com\r\n03-12-2-mlp-3d938c45c012be.ml.kz.cloud.vk.com\r\n03.avito.ru\r\n03.gosuslugi.ru\r\n03.mchs.gov.ru\r\n03.mchs.ru\r\n03.rdr.um.maps.yandex.ru\r\n03.vk.com\r\n03c5d5f448560b978743-hbd.ops.beeline.ru\r\n03e1051e-f083-4fb8-9e29-f5ccb42c80c5-umedia.ops.beeline.ru\r\n04-12-1-mlp-3d943b50912532.ml.kz.cloud.vk.com\r\n04-12-2-mlp-3d9442cececfe4.ml.kz.cloud.vk.com\r\n04-12-3-mlp-3d944f13cb2b6e.ml.kz.cloud.vk.com\r\n04-12-5-mlp-3d9455cfead3ba.ml.kz.cloud.vk.com\r\n04.gosuslugi.ru\r\n04.mchs.gov.ru\r\n04.mchs.ru\r\n04.rdr.um.maps.yandex.ru\r\n0411tableaubi01.pv.mts.ru\r\n0411tableaubi02.pv.mts.ru\r\n0411tableaubi03.pv.mts.ru\r\n0411tableaubi04.pv.mts.ru\r\n05.gosuslugi.ru\r\n05.mchs.gov.ru\r\n05.mchs.ru\r\n05l6y.faith.www.sports.ru\r\n06.mchs.gov.ru\r\n06.mchs.ru\r\n06.yandex.ru\r\n06e9a.vk.com\r\n06eaf8695b42c892d1090d436b4d11-4573e9f98cab4cb2a0bb9b8d070c9b58.ops.beeline.ru\r\n07.gosuslugi.ru\r\n07.mchs.gov.ru\r\n07.mchs.ru\r\n07.yandex.ru\r\n0700fixsrv01.ural.mts.ru\r\n073bf35edd64c46f189381a1d9ae4719a8f03674-vdn.ops.beeline.ru\r\n07504c177b9b21e789d7fe360cf78563d94eb9d9-vdn.ops.beeline.ru\r\n08.mchs.gov.ru\r\n08.mchs.ru\r\n080.avito.ru\r\n08c2e87caa19.yandex.ru\r\n09-mail.chechnya.gov.ru\r\n09.gosuslugi.ru\r\n09.mchs.gov.ru\r\n09.mchs.ru\r\n090.yandex.ru\r\n095.yandex.ru\r\n0bde9f38959f.yandex.ru\r\n0c30e8b2c24d481fa2c3d6fefbe9a765-clt.ops.beeline.ru\r\n0dc86feb317487458143-hbd.ops.beeline.ru\r\n0ele.avito.ru\r\n0f6ce0a08e4ab692a21a1e77001203-961d528e447343ffb994db4c3eca204b.ops.beeline.ru\r\n0mx.yandex.ru\r\n0tcm.avito.ru\r\n1.avito.ru\r\n1.nat.tambov.gov.ru\r\n1.psbank.ru\r\n1.redir-arb-dev.mongo.db.rbc.ru\r\n1.redir-dev.mongo.db.rbc.ru\r\n1.vk.com\r\n1.yandex.ru\r\n10-mail.chechnya.gov.ru\r\n10.avito.ru\r\n10.gazeta.ru\r\n10.gosuslugi.ru\r\n10.mchs.gov.ru\r\n10.mchs.ru\r\n10.vk.com\r\n100.avito.ru\r\n100.iz.ru\r\n100.vk.com\r\n1000.avito.ru\r\n1000.kp.ru\r\n1000.vk.com\r\n10085.vk.com\r\n100ege.yandex.ru\r\n100letbd.afisha.ru\r\n100yearsofjazz.mir.afisha.ru\r\n101.avito.ru\r\n101.vk.com\r\n103.avito.ru\r\n103.vk.com\r\n105.avito.ru\r\n105.vk.com\r\n106.avito.ru\r\n106.vk.com\r\n106253.avito.ru\r\n109.avito.ru\r\n109.vk.com\r\n10letie.edu.gov.ru\r\n11.avito.ru\r\n11.gosuslugi.ru\r\n11.mchs.gov.ru\r\n11.mchs.ru\r\n11.vk.com\r\n11.yandex.ru\r\n110.avito.ru\r\n110.vk.com\r\n11091521400593.avito.ru\r\n11091521400593.vk.com\r\n111.avito.ru\r\n111.vk.com\r\n111.yandex.ru\r\n1111.avito.ru\r\n1111.rosatom.ru\r\n11192521403954.avito.ru\r\n11192521404255.avito.ru\r\n11192521404255.vk.com\r\n112.avito.ru\r\n112.mchs.ru\r\n112.megafon.ru\r\n112.ren.tv\r\n112.vk.com\r\n11285521401250.avito.ru\r\n11285521401250.vk.com\r\n11290521402560.avito.ru\r\n114.avito.ru\r\n114.vk.com\r\n117.avito.ru\r\n117.vk.com\r\n118.avito.ru\r\n119.avito.ru\r\n11anon11.yandex.ru\r\n11ee26a31456.yandex.ru\r\n11metrika.yandex.ru\r\n12-www.chechnya.gov.ru\r\n12.avito.ru\r\n12.gosuslugi.ru\r\n12.mchs.gov.ru\r\n12.mchs.ru\r\n120.avito.ru\r\n120.vk.com\r\n121.avito.ru\r\n123.avito.ru\r\n123.qa.mdrive.magnit.ru\r\n123321321331ddddd.yandex.ru\r\n1234.avito.ru\r\n12345.avito.ru\r\n12345.vk.com\r\n123456.avito.ru\r\n125.avito.ru\r\n125.vk.com\r\n126.avito.ru\r\n126.vk.com\r\n127.gosuslugi.ru\r\n128.avito.ru\r\n128.vk.com\r\n129.avito.ru\r\n129.vk.com\r\n12june.tass.ru\r\n13.alfabank.ru\r\n13.avito.ru\r\n13.chechnya.gov.ru\r\n13.gosuslugi.ru\r\n13.mchs.gov.ru\r\n13.mchs.ru\r\n13.mironline.ru\r\n130.avito.ru\r\n130.vk.com\r\n131.avito.ru\r\n131.vk.com\r\n132.avito.ru\r\n134.avito.ru\r\n137.avito.ru\r\n14.avito.ru\r\n14.gosuslugi.ru\r\n14.mchs.gov.ru\r\n14.mchs.ru\r\n14.vk.com\r\n143faeb8-d051-51ee-9b70-921ec4344566-bw.ops.beeline.ru\r\n15.afisha.ru\r\n15.avito.ru\r\n15.gazeta.ru\r\n15.gosuslugi.ru\r\n15.mchs.gov.ru\r\n15.mchs.ru\r\n15.vk.com\r\n15.yandex.ru\r\n154.yandex.ru\r\n15cinema.content.tinkoff.ru\r\n15years.fas.gov.ru\r\n16.avito.ru\r\n16.gosuslugi.ru\r\n16.mchs.gov.ru\r\n16.mchs.ru\r\n16.vk.com\r\n1611.yandex.ru\r\n162.avito.ru\r\n162.vk.com\r\n163.avito.ru\r\n16321a19bfea4454ae1572654c3fccb9-clt.ops.beeline.ru\r\n16485.vk.com\r\n16550.vk.com\r\n166.gosuslugi.ru\r\n169.avito.ru\r\n169.vk.com\r\n16ffecb998ee445e80f5e6ca5ea59e24.ops.beeline.ru\r\n17.avito.ru\r\n17.gosuslugi.ru\r\n17.mchs.gov.ru\r\n17.mchs.ru\r\n170.avito.ru\r\n17050514120699935.yandex.ru\r\n17070417040334914.yandex.ru\r\n171.33.52.7fr.euronews.com\r\n17110817130396459.yandex.ru\r\n1729520959-6509625847190084895-5314178288318106242.cu.dzen.ru\r\n1731653582-2004384206217235697-7822711456336062969.cu.dzen.ru\r\n1731887085-8062668068020542703-3768501789328139078.cu.dzen.ru\r\n1741885280--5487775588798530863--8305376882489297396.cu.dzen.ru\r\n1743092239--1297786709992205192-5817711848819286773.cu.dzen.ru\r\n1743092245--1297786709992205192-5817711848819286773.cu.dzen.ru\r\n1743092247--1297786709992205192-5817711848819286773.cu.dzen.ru\r\n1744593755-10946823906074194000-1076.cu.dzen.ru\r\n1746755232-8426488083606737000-1227.cu.dzen.ru\r\n1747032449-13696461129463530335-1429.cu.dzen.ru\r\n175.stage.championat.com\r\n1752419889-8217586741095001857-7755536330367637134.cu.dzen.ru\r\n1752446883-10532316052684633346-1429.cu.dzen.ru\r\n1752446883-16873296899363863000-2648.cu.dzen.ru\r\n1752446883-18369921559317932000-1227.cu.dzen.ru\r\n1752446886-12846817904730620000-12694.cu.dzen.ru\r\n1752446886-1339685818258596000-1027.cu.dzen.ru\r\n1752446886-14798837240010107000-8352.cu.dzen.ru\r\n1752446886-16876230396387362275-2648.cu.dzen.ru\r\n1752446895-18367118904178190106-1227.cu.dzen.ru\r\n1752446896-18367118904178190000-1227.cu.dzen.ru\r\n1752446897-13952619293505122000-1116.cu.dzen.ru\r\n1752446897-13952619293505122161-1116.cu.dzen.ru\r\n1752446897-5624254315524038000-1323.cu.dzen.ru\r\n1752446899-10707928665936020000-1047.cu.dzen.ru\r\n1752446899-18361355264224243442-1227.cu.dzen.ru\r\n1752446899-18361355264224244000-1227.cu.dzen.ru\r\n1752446906-15016111251554465976-1116.cu.dzen.ru\r\n1752446912-5959013294009613005-1551.cu.dzen.ru\r\n1752446914-2737655473136673300-1053.cu.dzen.ru\r\n1752446925-10525662242589747488-1013.cu.dzen.ru\r\n1752446925-1599471432069134000-12694.cu.dzen.ru\r\n1752446926-958026873007507145-1040.cu.dzen.ru\r\n1752446926-958026873007507200-1040.cu.dzen.ru\r\n1753058303-13476484946040097000-2348.cu.dzen.ru\r\n1753773700-15674831890131480000-1946.cu.dzen.ru\r\n1753785048-16662201198739200000-1551.cu.dzen.ru\r\n1753785048-7862884809831422000-1047.cu.dzen.ru\r\n1753785084-10316531873415600000-1689.cu.dzen.ru\r\n1753785084-16666133052320924999-1551.cu.dzen.ru\r\n1753785084-4829398122231521000-1002.cu.dzen.ru\r\n1753785084-9737069753888334000-1027.cu.dzen.ru\r\n1753836218-10964515724552593192-1040.cu.dzen.ru\r\n1753836218-1397496312661066000-1027.cu.dzen.ru\r\n1753858822-1879148817576589692-1014.cu.dzen.ru\r\n1753858876-5213760268921147661-1040.cu.dzen.ru\r\n1754529935-1049930167927725080-11930.cu.dzen.ru\r\n1754529935-12570750975560999000-1047.cu.dzen.ru\r\n1756883260-17964862557373215000-1014.cu.dzen.ru\r\n1757941207--8149020616458302067-7240611242693574342.cu.dzen.ru\r\n1758846846--2662971318772572377--3420686721999521244.cu.dzen.ru\r\n1758847183--6536653989953392805-8681594857539094854.cu.dzen.ru\r\n1758847481--6536653989953392805-8681594857539094854.cu.dzen.ru\r\n1759234581-3248121069201696244-1439844993751786155.cu.dzen.ru\r\n178.gosuslugi.ru\r\n178.sberbank.ru\r\n18.arts.mos.ru\r\n18.avito.ru\r\n18.gosuslugi.ru\r\n18.mchs.gov.ru\r\n18.mchs.ru\r\n18.vk.com\r\n18101908185920573.yandex.ru\r\n1841.yandex.ru\r\n18530.vk.com\r\n18e0ww.kino-teatr.ru\r\n19.avito.ru\r\n19.gosuslugi.ru\r\n19.mchs.gov.ru\r\n19.mchs.ru\r\n19.vk.com\r\n1917.tass.ru\r\n192.avito.ru\r\n192.vk.com\r\n193-127.avito.ru\r\n1939.rusarchives.ru\r\n19395.vk.com\r\n194-58-40-20.css.rzd.ru\r\n194-58-40-63.css.rzd.ru\r\n194-58-47-187.css.rzd.ru\r\n194-58-59-253.css.rzd.ru\r\n1976.yandex.ru\r\n1980.yandex.ru\r\n1991.lenta.ru\r\n1996.yandex.ru\r\n1a79ww.kino-teatr.ru\r\n1b4c15ba1dfe.yandex.ru\r\n1c-directbank-new.mkb.ru\r\n1c-directbank-test.mkb.ru\r\n1c-directbank.mkb.ru\r\n1c-pursz.rk.gov.ru\r\n1c-relay.wildberries.ru\r\n1c.avito.ru\r\n1c.t2.ru\r\n1c.tele2.ru\r\n1c.vk.com\r\n1cd5c3c7d5a445d59c7f73b38cf6da12.ops.beeline.ru\r\n1cerp.t2.ru\r\n1cloud.mail.ru\r\n1cretail.bee.vimpelcom.ru\r\n1csbt.sberbank.ru\r\n1eb4755a.services.gismeteo.ru\r\n1edcbb01-l.sberbank.ru\r\n1fgfg.vk.com\r\n1l-api.mail.ru\r\n1l-go.mail.ru\r\n1l-hit.mail.ru\r\n1l-s2s.mail.ru\r\n1l-view.mail.ru\r\n1l.mail.ru\r\n1link.mail.ru\r\n1mx.yandex.ru\r\n1q99v.vk.com\r\n1school26.gosuslugi.ru\r\n1september.iz.ru\r\n1testintegration.learning.ozon.ru\r\n1trmst2hn.avito.ru\r\n2-mail.chechnya.gov.ru\r\n2.avito.ru\r\n2.chechnya.gov.ru\r\n2.kino-teatr.ru\r\n2.redir-dev.mongo.db.rbc.ru\r\n2.vk.com\r\n2.zdorovie-shkolnika.spb.aif.ru\r\n20.avito.ru\r\n20.fskn.gov.ru\r\n20.gosuslugi.ru\r\n20.kremlin.ru\r\n20.vk.com\r\n2000www.kino-teatr.ru\r\n2002.yandex.ru\r\n2003.yandex.ru\r\n2006.avito.ru\r\n2006.vk.com\r\n2008.avito.ru\r\n2008.vk.com\r\n2009.avito.ru\r\n2010.avito.ru\r\n2010.vk.com\r\n2010.yandex.ru\r\n2011.avito.ru\r\n2011.vk.com\r\n2012.avito.ru\r\n2013.avito.ru\r\n2013.vk.com\r\n2013.yandex.ru\r\n2014.yandex.ru\r\n2016.kinopoisk.ru\r\n2016.yandex.ru\r\n2017.chizhik.ru\r\n2017.yandex.ru\r\n2018-api.tinkoff.ru\r\n2018.beta2.ria.ru\r\n2019.culture.ru\r\n2019.m24.ru\r\n2019.mvideo.ru\r\n2019.tele2.ru\r\n2019.tinkoff.ru\r\n2020.2gis.ru\r\n2020.life.ru\r\n2020.project.tinkoff.ru\r\n2021.project.tinkoff.ru\r\n2021.tele2.ru\r\n2022.award.2gis.ru\r\n2022.life.ru\r\n2022.project.tinkoff.ru\r\n2023-awards.2gis.ru\r\n2023.iz.ru\r\n2024.iz.ru\r\n203.avito.ru\r\n203.vk.com\r\n2030.sport.mos.ru\r\n204.avito.ru\r\n205.avito.ru\r\n205.vk.com\r\n209.avito.ru\r\n209.vk.com\r\n20let.rosbalt.ru\r\n20let.stihi.ru\r\n21.avito.ru\r\n21.gosuslugi.ru\r\n21.mchs.gov.ru\r\n21.mchs.ru\r\n21.vk.com\r\n210.gosuslugi.ru\r\n210demo1.gosuslugi.ru\r\n211.avito.ru\r\n211.vk.com\r\n212.avito.ru\r\n212.vk.com\r\n22.avito.ru\r\n22.gosuslugi.ru\r\n22.mchs.gov.ru\r\n22.mchs.ru\r\n220-mail.yandex.ru\r\n222.avito.ru\r\n228.avito.ru\r\n22june.iz.ru\r\n23.avito.ru\r\n23.gosuslugi.ru\r\n23.mchs.gov.ru\r\n23.mchs.ru\r\n23.mvideo.ru\r\n23.vk.com\r\n230.avito.ru\r\n230.vk.com\r\n233.avito.ru\r\n233.vk.com\r\n234.avito.ru\r\n234.vk.com\r\n235.avito.ru\r\n237.avito.ru\r\n238b44ac-9fb4-5105-abaf-3648f4cdfb0e-bw.ops.beeline.ru\r\n23gr.mvideo.ru\r\n24.avito.ru\r\n24.gosuslugi.ru\r\n24.mchs.gov.ru\r\n24.mchs.ru\r\n24.sovcombank.ru\r\n24.vk.com\r\n24.yandex.ru\r\n248games.rambler.ru\r\n249.48.158.146.avito.ru\r\n25.1tv.ru\r\n25.avito.ru\r\n25.fskn.gov.ru\r\n25.gosuslugi.ru\r\n25.mchs.gov.ru\r\n25.mchs.ru\r\n25.vk.com\r\n250.48.158.146.avito.ru\r\n25252fwww.avito.ru\r\n252fmail.yandex.ru\r\n252fpassport.yandex.ru\r\n252ftracker.yandex.ru\r\n252fwww.avito.ru\r\n253.48.158.146.avito.ru\r\n253aconnect.vk.com\r\n253am.avito.ru\r\n253awww.avito.ru\r\n254.48.158.146.avito.ru\r\n26.avito.ru\r\n26.gosuslugi.ru\r\n26.mchs.gov.ru\r\n26.mchs.ru\r\n2613e1fb-af35-515e-b705-7dbbe8d2a653-bw.ops.beeline.ru\r\n27.avito.ru\r\n27.gosuslugi.ru\r\n27.mchs.gov.ru\r\n27.mchs.ru\r\n27603183.drom.ru\r\n28.avito.ru\r\n28.gosuslugi.ru\r\n28.mchs.gov.ru\r\n28.mchs.ru\r\n28d6cb28d025.yandex.ru\r\n29.avito.ru\r\n29.gosuslugi.ru\r\n29.mchs.gov.ru\r\n29.mchs.ru\r\n296-74-46.vk.com\r\n2am0baju-rlp.ops.beeline.ru\r\n2bay.yandex.ru\r\n2cat.twbbs.orgwww.2cat.twbbs.orgwww.babyblog.ru\r\n2cat.twbbs.orgwww.babyblog.ru\r\n2dc948036d94420e94947299d9578661.ops.beeline.ru\r\n2e2556561905.yandex.ru\r\n2f.open.ru\r\n2fa.open.ru\r\n2factor.open.ru\r\n2fconnect.vk.com\r\n2fmail.yandex.ru\r\n2fmaps.yandex.ru\r\n2fmarket.yandex.ru\r\n2fmc.yandex.ru\r\n2fmetrika.yandex.ru\r\n2fpassport.yandex.ru\r\n2fpayments-staging.k.avito.ru\r\n2fpp.userapi.com\r\n2fquasar.yandex.ru\r\n2fsun1-14.userapi.com\r\n2fsun7-18.userapi.com\r\n2fsun7-19.userapi.com\r\n2fsun7-21.userapi.com\r\n2fsun7-22.userapi.com\r\n2fsun7-23.userapi.com\r\n2fsun7-24.userapi.com\r\n2ftelemost.yandex.ru\r\n2fwww.avito.ru\r\n2fwww.kino-teatr.ru\r\n2fwww.yandex.ru\r\n2gis.sports.ru\r\n2k9.yandex.ru\r\n2lex.yandex.ru\r\n2life.magnit.ru\r\n2memdav.mts.ru\r\n2memory.mts.ru\r\n2memory2.mts.ru\r\n2ub88.vk.com\r\n2wd68p.mkb.ru\r\n2whut0sbkby3ihpm.rostelecom.oren.aif.ru\r\n2www.kino-teatr.ru\r\n2z4cmtnp-rlp.ops.beeline.ru\r\n3.avito.ru\r\n3.vk.com\r\n30.avito.ru\r\n30.fskn.gov.ru\r\n30.garant.ru\r\n30.gosuslugi.ru\r\n30.mchs.gov.ru\r\n30.mchs.ru\r\n30.megafon.ru\r\n30.vk.com\r\n30years-amr.fas.gov.ru\r\n31.avito.ru\r\n31.fskn.gov.ru\r\n31.gosuslugi.ru\r\n31.mchs.gov.ru\r\n31.mchs.ru\r\n31.nat.tambov.gov.ru\r\n31.vk.com\r\n32.avito.ru\r\n32.gosuslugi.ru\r\n32.mchs.gov.ru\r\n32.mchs.ru\r\n32.nat.tambov.gov.ru\r\n32aaad6c-846a-5214-8471-4a4ae74b3a74-bw.ops.beeline.ru\r\n33.avito.ru\r\n33.gosuslugi.ru\r\n33.mchs.gov.ru\r\n33.mchs.ru\r\n33.nat.tambov.gov.ru\r\n33.vk.com\r\n3310.alfabank.ru\r\n338317ff-73a1-540d-affa-9969f004a7c3-bw.ops.beeline.ru\r\n34.avito.ru\r\n34.gosuslugi.ru\r\n34.mchs.gov.ru\r\n34.mchs.ru\r\n34.vk.com\r\n34.yandex.ru\r\n340fzreport.nalog.ru\r\n3434.yandex.ru\r\n35.avito.ru\r\n35.gosuslugi.ru\r\n35.mchs.gov.ru\r\n35.mchs.ru\r\n36.avito.ru\r\n36.gosuslugi.ru\r\n36.mchs.gov.ru\r\n36.mchs.ru\r\n36.vk.com\r\n360.avito.ru\r\n360.mts.ru\r\n360.vk.com\r\n360.yandex.ru\r\n36178320.services.gismeteo.ru\r\n365-demo1.gosuslugi.ru\r\n365.avito.ru\r\n365.vk.com\r\n365.yandex.ru\r\n366.youdo.com\r\n3660038c0585.yandex.ru\r\n36879.vk.com\r\n37.avito.ru\r\n37.gosuslugi.ru\r\n37.mchs.gov.ru\r\n37.mchs.ru\r\n37.vk.com\r\n375291494022.yandex.ru\r\n38.avito.ru\r\n38.gosuslugi.ru\r\n38.mchs.gov.ru\r\n38.mchs.ru\r\n38.vk.com\r\n39.avito.ru\r\n39.gosuslugi.ru\r\n39.mchs.gov.ru\r\n39.mchs.ru\r\n39.vk.com\r\n3aconnect.vk.com\r\n3am.avito.ru\r\n3awww.avito.ru\r\n3bd122c5.gismeteo.ru\r\n3c.avito.ru\r\n3c.vk.com\r\n3d.avito.ru\r\n3dcarto.yandex.ru\r\n3dexperience.vedomosti.ru\r\n3dplus.yandex.ru\r\n3ds-1.vtb.ru\r\n3ds-2.vtb.ru\r\n3ds-test.open.ru\r\n3ds-v2-auth-test.ecom-bank.ozon.ru\r\n3ds-v2-auth.ecom-bank.ozon.ru\r\n3ds-v2-challenge-test.bank.ozon.ru\r\n3ds-v2-challenge-test.ecom-bank.ozon.ru\r\n3ds-v2-challenge.bank.ozon.ru\r\n3ds-v2-challenge.ecom-bank.ozon.ru\r\n3ds.open.ru\r\n3ds.openbank.ru\r\n3ds.vtb.ru\r\n3ds2.open.ru\r\n3dsec.sberbank.ru\r\n3dsp.vtb.ru\r\n3dsp2.vtb.ru\r\n3dsp2mc.vtb.ru\r\n3dsp2v.vtb.ru\r\n3dsserver.alfabank.ru\r\n3g.avito.ru\r\n3g.beeline.ru\r\n3gof4.vk.com\r\n3igames.mail.ru\r\n3k.mail.ru\r\n3m.lenta.ru\r\n3s-web.garant.ru\r\n3w.avito.ru\r\n3w.vk.com\r\n4-mail.chechnya.gov.ru\r\n4.avito.ru\r\n4.vk.com\r\n4.yandex.ru\r\n40.avito.ru\r\n40.gosuslugi.ru\r\n40.mchs.gov.ru\r\n40.mchs.ru\r\n40.vk.com\r\n400eb6714745c19aa79f47ae36305a-961d528e447343ffb994db4c3eca204b.ops.beeline.ru\r\n404.avito.ru\r\n40917.vk.com\r\n41.avito.ru\r\n41.gosuslugi.ru\r\n41.mchs.gov.ru\r\n41.mchs.ru\r\n4101516795cf.yandex.ru\r\n417947.yandex.ru\r\n42.avito.ru\r\n42.gosuslugi.ru\r\n42.mchs.gov.ru\r\n42.mchs.ru\r\n42.vk.com\r\n42.yandex.ru\r\n43.avito.ru\r\n43.gosuslugi.ru\r\n43.mchs.gov.ru\r\n43.mchs.ru\r\n435.vk.com\r\n44.avito.ru\r\n44.gosuslugi.ru\r\n44.mchs.gov.ru\r\n44.mchs.ru\r\n44.vk.com\r\n45-68.tass.ru\r\n45.avito.ru\r\n45.gosuslugi.ru\r\n45.limited.mchs.gov.ru\r\n45.mchs.gov.ru\r\n45.mchs.ru\r\n45.userapi.com\r\n45.vk.com\r\n45608172-1aff-4f7b-be2a-8e0984015288.kino-teatr.ru\r\n45e30b7f.services.gismeteo.ru\r\n46.avito.ru\r\n46.gosuslugi.ru\r\n46.mchs.gov.ru\r\n46.mchs.ru\r\n46.vk.com\r\n468x60.mb.vesti.ru\r\n47.avito.ru\r\n47.gosuslugi.ru\r\n47.mchs.gov.ru\r\n47.mchs.ru\r\n47.nat.tambov.gov.ru\r\n47d17a1975c148cf9c7361e0eb72ab19-clt.ops.beeline.ru\r\n48.avito.ru\r\n48.gosuslugi.ru\r\n48.mchs.gov.ru\r\n48.mchs.ru\r\n48.nat.tambov.gov.ru\r\n48.vk.com\r\n49.avito.ru\r\n49.gosuslugi.ru\r\n49.mchs.gov.ru\r\n49.mchs.ru\r\n49.nat.tambov.gov.ru\r\n499395aa9b03.yandex.ru\r\n4g.mts.ru\r\n4gkino.tele2.ru\r\n4gspeed.beeline.ru\r\n4kids.mts.ru\r\n4puj6v5.avito.ru\r\n4th.lvl.sports.ru\r\n4uxf1.vk.com\r\n4zo6zthxzgksm0bs3gbm8o.chechnya.gov.ru\r\n5-www.chechnya.gov.ru\r\n5.auth.mongo.db.rbc.ru\r\n5.avito.ru\r\n5.vk.com\r\n50.avito.ru\r\n50.gosuslugi.ru\r\n50.mchs.gov.ru\r\n50.mchs.ru\r\n50.vk.com\r\n5030399.yandex.ru\r\n51.avito.ru\r\n51.gosuslugi.ru\r\n51.mchs.gov.ru\r\n51.mchs.ru\r\n51.vk.com\r\n52.5c.85ae.static.theplanet.comwww.babyblog.ru\r\n52.avito.ru\r\n52.gosuslugi.ru\r\n52.mchs.gov.ru\r\n52.mchs.ru\r\n52.vk.com\r\n5232.yandex.ru\r\n5278.avito.ru\r\n5278.vk.com\r\n52x50.vk.com\r\n53.avito.ru\r\n53.gosuslugi.ru\r\n53.mchs.gov.ru\r\n53.mchs.ru\r\n531111.ms.dzen.ru\r\n531121.ms.dzen.ru\r\n531211.ms.dzen.ru\r\n531311.ms.dzen.ru\r\n532121.ms.dzen.ru\r\n53947.vk.com\r\n54-fz.tinkoff.ru\r\n54.avito.ru\r\n54.gosuslugi.ru\r\n54.mchs.gov.ru\r\n54.mchs.ru\r\n541111.ms.dzen.ru\r\n541121.ms.dzen.ru\r\n541211.ms.dzen.ru\r\n541311.ms.dzen.ru\r\n541411.ms.dzen.ru\r\n542121.ms.dzen.ru\r\n54304aa4837d.yandex.ru\r\n55.avito.ru\r\n55.gosuslugi.ru\r\n55.mchs.gov.ru\r\n55.mchs.ru\r\n55.nat.tambov.gov.ru\r\n551111.ms.dzen.ru\r\n551121.ms.dzen.ru\r\n551211.ms.dzen.ru\r\n551311.ms.dzen.ru\r\n552121.ms.dzen.ru\r\n5544f.mail.ru\r\n554838a8.services.gismeteo.ru\r\n56.avito.ru\r\n56.gosuslugi.ru\r\n56.mchs.gov.ru\r\n56.mchs.ru\r\n56.nat.tambov.gov.ru\r\n57.avito.ru\r\n57.gosuslugi.ru\r\n57.mchs.gov.ru\r\n57.mchs.ru\r\n57.nat.tambov.gov.ru\r\n57.vk.com\r\n58.avito.ru\r\n58.fskn.gov.ru\r\n58.gosuslugi.ru\r\n58.mchs.gov.ru\r\n58.mchs.ru\r\n58.vk.com\r\n58dcd225-726e-5478-92f9-4dacf0942430-bw.ops.beeline.ru\r\n59.avito.ru\r\n59.gosuslugi.ru\r\n59.mchs.gov.ru\r\n59.mchs.ru\r\n59.vk.com\r\n5988859.yandex.ru\r\n59zimaleto.yandex.ru\r\n5aca45f7a5374976b12e55916d682f45-clt.ops.beeline.ru\r\n5b997e6c-05bb-4ea7-9cb3-17cc4d3cad50.kino-teatr.ru\r\n5bukv.tinkoff.ru\r\n5cc6779a-98ec-4c6d-5259-61908e9cc67f-bzl.ops.beeline.ru\r\n5g.startup.mts.ru\r\n5inlu.vk.com\r\n5ka.youdo.com\r\n5kahh.youdo.com\r\n5m1l3.yandex.ru\r\n5mvmsq7.chechnya.gov.ru\r\n5prkd.vk.com\r\n5www.chechnya.gov.ru\r\n6.avito.ru\r\n6.mail.ru\r\n6.vk.com\r\n60.avito.ru\r\n60.gosuslugi.ru\r\n60.mchs.gov.ru\r\n60.mchs.ru\r\n60moments.lenta.ru\r\n61.avito.ru\r\n61.gosuslugi.ru\r\n61.limited.mchs.gov.ru\r\n61.mchs.gov.ru\r\n61.mchs.ru\r\n61.reports.rostelecom.ru\r\n61.vk.com\r\n61.yandex.ru\r\n62.avito.ru\r\n62.gosuslugi.ru\r\n62.mchs.gov.ru\r\n62.mchs.ru\r\n62.minzdrav.gov.ru\r\n62.vk.com\r\n63.avito.ru\r\n63.gosuslugi.ru\r\n63.mchs.gov.ru\r\n63.mchs.ru\r\n63.nat.tambov.gov.ru\r\n63.vk.com\r\n64.avito.ru\r\n64.gosuslugi.ru\r\n64.mchs.gov.ru\r\n64.mchs.ru\r\n64.nat.tambov.gov.ru\r\n643.yandex.ru\r\n65.avito.ru\r\n65.gosuslugi.ru\r\n65.mchs.gov.ru\r\n65.mchs.ru\r\n65.nat.tambov.gov.ru\r\n66.avito.ru\r\n66.gosuslugi.ru\r\n66.mchs.gov.ru\r\n66.mchs.ru\r\n666.avito.ru\r\n666.vk.com\r\n666av.avito.ru\r\n67.avito.ru\r\n67.gosuslugi.ru\r\n67.mchs.gov.ru\r\n67.mchs.ru\r\n67.vk.com\r\n68.avito.ru\r\n68.gosuslugi.ru\r\n68.mchs.gov.ru\r\n68.mchs.ru\r\n6878345018971557077-otm.ops.beeline.ru\r\n69.avito.ru\r\n69.gosuslugi.ru\r\n69.mchs.gov.ru\r\n69.mchs.ru\r\n69y7l.vk.com\r\n6af438e5225215967348-hbd.ops.beeline.ru\r\n6b8e0576-99f3-4591-b33e-2e727fe84213.kino-teatr.ru\r\n6eb0a1b659b247618bbb55e254dec8a3.ops.beeline.ru\r\n6ff423bd-d64f-4dbd-7072-0fb934bf8eb5-bzl.ops.beeline.ru\r\n6ndfl.tinkoff.ru\r\n6ok.avito.ru\r\n7.avito.ru\r\n7.vk.com\r\n70.avito.ru\r\n70.gosuslugi.ru\r\n70.mchs.gov.ru\r\n70.mchs.ru\r\n70.vk.com\r\n70140.vk.com\r\n70x50.mb.vesti.ru\r\n71.avito.ru\r\n71.gosuslugi.ru\r\n71.mchs.gov.ru\r\n71.mchs.ru\r\n71abb4ff-4691-4157-895c-309db65b4fe0.kino-teatr.ru\r\n72.avito.ru\r\n72.gosuslugi.ru\r\n72.mchs.gov.ru\r\n72.mchs.ru\r\n72.vk.com\r\n72357.vk.com\r\n73.avito.ru\r\n73.gosuslugi.ru\r\n73.mchs.gov.ru\r\n73.mchs.ru\r\n73.vk.com\r\n73.yandex.ru\r\n73079.vk.com\r\n7347678820044655900-otm.ops.beeline.ru\r\n73893dc8dc17.yandex.ru\r\n74.avito.ru\r\n74.gosuslugi.ru\r\n74.mchs.gov.ru\r\n74.mchs.ru\r\n74.vk.com\r\n74.yandex.ru\r\n7404147224729668191-otm.ops.beeline.ru\r\n74cb81ef355d.yandex.ru\r\n75.125.114.138www.babyblog.ru\r\n75.avito.ru\r\n75.gosuslugi.ru\r\n75.mchs.gov.ru\r\n75.mchs.ru\r\n7509723035542908291-otm.ops.beeline.ru\r\n7518171279115633542-otm.ops.beeline.ru\r\n7518171979293482394-otm.ops.beeline.ru\r\n7526691180088163426-otm.ops.beeline.ru\r\n7532370471226548942-otm.ops.beeline.ru\r\n7532649098626831723-otm.ops.beeline.ru\r\n7534956788840237615-otm.ops.beeline.ru\r\n7544787243096432534-otm.ops.beeline.ru\r\n75830b0559444101a79605ba1156e5dc.ops.beeline.ru\r\n75as467.chechnya.gov.ru\r\n75iq8.vk.com\r\n76.avito.ru\r\n76.gosuslugi.ru\r\n76.mchs.gov.ru\r\n76.mchs.ru\r\n76.vk.com\r\n76edc5843250.yandex.ru\r\n77.avito.ru\r\n77.gosuslugi.ru\r\n77.mchs.ru\r\n77074558833.yandex.ru\r\n77202.vk.com\r\n77228.vk.com\r\n777.avito.ru\r\n777.vk.com\r\n777.yandex.ru\r\n77754063613.yandex.ru\r\n77771393118.yandex.ru\r\n77p2p.avito.ru\r\n78.gosuslugi.ru\r\n78.mchs.gov.ru\r\n78.mchs.ru\r\n78538.vk.com\r\n78823.vk.com\r\n7882f43e3502.yandex.ru\r\n79.avito.ru\r\n79.gosuslugi.ru\r\n79.mchs.gov.ru\r\n79.mchs.ru\r\n79.vk.com\r\n79002410122.yandex.ru\r\n79024836312.yandex.ru\r\n79038189990.yandex.ru\r\n79052539971.yandex.ru\r\n79055677549.yandex.ru\r\n79104765865.yandex.ru\r\n79115236060.yandex.ru\r\n79137517333.yandex.ru\r\n79137517433.yandex.ru\r\n79139445913.yandex.ru\r\n79154152683.yandex.ru\r\n79160103777.yandex.ru\r\n79166755840.yandex.ru\r\n79169056021.yandex.ru\r\n79178302812.yandex.ru\r\n79185515452.yandex.ru\r\n79185549892.yandex.ru\r\n79192403727.yandex.ru\r\n79193776340.yandex.ru\r\n79202507382.yandex.ru\r\n79203115111.yandex.ru\r\n79219818141.yandex.ru\r\n79227328998.yandex.ru\r\n79232482249.yandex.ru\r\n79252045491.yandex.ru\r\n79258083242.yandex.ru\r\n79263403377.yandex.ru\r\n79266663519.yandex.ru\r\n79297788155.yandex.ru\r\n793ccb0eb3a74fa7a5b0e5211e8ca917.ops.beeline.ru\r\n79501111043.yandex.ru\r\n79504999983.yandex.ru\r\n79506580596.yandex.ru\r\n79523944444.yandex.ru\r\n79529018182.yandex.ru\r\n79529093334.yandex.ru\r\n79536443103.yandex.ru\r\n79633492045.yandex.ru\r\n79649104902.yandex.ru\r\n79661169169.yandex.ru\r\n79878788705.yandex.ru\r\n7a0030b837a7.yandex.ru\r\n7b4aa4dae57049cea16adcd657fb6830-clt.ops.beeline.ru\r\n7c19c861b161.yandex.ru\r\n7e7ee64d-0035-54ea-9218-bd4dcd27e4a1-bw.ops.beeline.ru\r\n7ec153242ae3427fa9c087506f01ba9f-clt.ops.beeline.ru\r\n7f0v3w19qnx4-yo58g.chechnya.gov.ru\r\n8.avito.ru\r\n8.mvideo.ru\r\n8.vk.com\r\n80-78-247-96.css.rzd.ru\r\n80.avito.ru\r\n80.nat.tambov.gov.ru\r\n800.beeline.ru\r\n800c7cde5f40.yandex.ru\r\n80693.vk.com\r\n80ae7351424cd885389a12786ccd4c-d38738fc800240e08bcac27ebe1b2624.ops.beeline.ru\r\n81.avito.ru\r\n81.mchs.gov.ru\r\n81.yandex.ru\r\n81938.vk.com\r\n82.mchs.gov.ru\r\n82.mchs.ru\r\n82iug.vk.com\r\n83.gosuslugi.ru\r\n83.mchs.gov.ru\r\n83.mchs.ru\r\n8377783d-14ea-544b-9bff-d27dc44128c7-bw.ops.beeline.ru\r\n84.38.181.58.yandex.ru\r\n84325.vk.com\r\n8591.avito.ru\r\n8591.vk.com\r\n85ac2ca325684a09a9ac3110d551d3b5-clt.ops.beeline.ru\r\n85cc.avito.ru\r\n85cc.vk.com\r\n85st.avito.ru\r\n85st.vk.com\r\n86.avito.ru\r\n86.gosuslugi.ru\r\n86.mchs.gov.ru\r\n86.mchs.ru\r\n86.reports.rostelecom.ru\r\n86458.vk.com\r\n87.avito.ru\r\n87.gosuslugi.ru\r\n87.mchs.gov.ru\r\n87.mchs.ru\r\n87.vk.com\r\n87.yandex.ru\r\n87771481049.yandex.ru\r\n88.avito.ru\r\n88.vk.com\r\n88230.vk.com\r\n89.avito.ru\r\n89.gosuslugi.ru\r\n89.mchs.gov.ru\r\n89.mchs.ru\r\n89.yandex.ru\r\n89036192606.yandex.ru\r\n89043147239.yandex.ru\r\n8agz0.vk.com\r\n8gr.mvideo.ru\r\n8k56g.vk.com\r\n8l2w.avito.ru\r\n8lnp9.vk.com\r\n8marta.life.ru\r\n8v8lt.vk.com\r\n8vzd8m83.kino-teatr.ru\r\n8www.chechnya.gov.ru\r\n9-54.userapi.com\r\n9.avito.ru\r\n9.vk.com\r\n90.avito.ru\r\n90.vk.com\r\n90661.vk.com\r\n90ee7d66e24310b9e6263743af0682-e206da15742f4768855dd27168a1e363.ops.beeline.ru\r\n90f0a655a06a4ce29aa7292223d37a15-clt.ops.beeline.ru\r\n91.avito.ru\r\n91.vk.com\r\n911.avito.ru\r\n911.vk.com\r\n91a0cc22f54bd7afe4fdc729060535-16ffecb998ee445e80f5e6ca5ea59e24.ops.beeline.ru\r\n92.avito.ru\r\n92.gov.ru\r\n92.mchs.gov.ru\r\n92.mchs.ru\r\n92.vk.com\r\n93.avito.ru\r\n93.vk.com\r\n931221.log.rutube.ru\r\n931222.log.rutube.ru\r\n93147.vk.com\r\n932211.log.rutube.ru\r\n94-103-95-84.mobile.tele2.ru\r\n94.avito.ru\r\n94.gosuslugi.ru\r\n94.mchs.ru\r\n941221.log.rutube.ru\r\n942211.log.rutube.ru\r\n94d818c2-5124-5155-a385-3971fc49b3d0-bw.ops.beeline.ru\r\n94x180x249x229.mail.ru\r\n95-31-229-28.internet.b2c.beeline.ru\r\n95.avito.ru\r\n95.mchs.gov.ru\r\n95.mchs.ru\r\n95.vk.com\r\n9511d3fa-537b-43e2-909b-0dc43feb7f67.kino-teatr.ru\r\n951221.log.rutube.ru\r\n951222.log.rutube.ru\r\n952211.log.rutube.ru\r\n952212.log.rutube.ru\r\n95295.vk.com\r\n96.avito.ru\r\n96.vk.com\r\n961d528e447343ffb994db4c3eca204b.ops.beeline.ru\r\n965n.minzdrav.gov.ru\r\n97.avito.ru\r\n97.vk.com\r\n98c8af7b-4d70-525f-ae63-812df1ba402a-bw.ops.beeline.ru\r\n99.avito.ru\r\n99.project.tinkoff.ru\r\n99.vk.com\r\n99527.vk.com\r\n996sc.mchs.gov.ru\r\n996sc.mchs.ru\r\n996sc.organizations.mchs.gov.ru\r\n9a14b2d3.services.gismeteo.ru\r\n9afaf835-f1bd-44b9-ae56-240c32c0281d.kino-teatr.ru\r\n9b1d3c45315768d5414f-hbd.ops.beeline.ru\r\n9f2500f341f64c16a2ea07380b31e2a2-clt.ops.beeline.ru\r\n9fkqcyjzhhza6w3l.life.kuzbass.aif.ru\r\n9gp4gb7o31www.chechnya.gov.ru\r\n9jloc.vk.com\r\n9may.happy.x5.ru\r\n9may.life.ru\r\n9may.rzd.ru\r\n9x5xt.vk.com\r\n9zk46.vk.com\r\n_xmpp-client.yandex.ru\r\n_xmpp-server.yandex.ru\r\na-9-v5xlgej3vqfd4du3cnw-adr.ops.beeline.ru\r\na-api.livejournal.com\r\na-heart4home.kino-teatr.ru\r\na-new.rosbank.ru\r\na-static.sber.ru\r\na.1u0pawemmppywbfx.www.gkh.hab.aif.ru\r\na.2whut0sbkby3ihpm.www.rostelecom.oren.aif.ru\r\na.2z9z5sehgjk0mkcg.zimmerman.perm.aif.ru\r\na.6udjwu8tg4ykhmpx.godecologii.omsk.aif.ru\r\na.afaesbezmaxzpbro.dostoevskiy-spb.aif.ru\r\na.afaesbezmaxzpbro.www.dostoevskiy-spb.aif.ru\r\na.autodiscover.life.kuzbass.aif.ru\r\na.avito.ru\r\na.beeline.ru\r\na.biznes-kubani.aif.ru\r\na.championat.com\r\na.crczacmfqmwrm0wx.gordost.altai.aif.ru\r\na.denisova.88.yandex.ru\r\na.dns-shop.ru\r\na.egorova.dv.rbc.ru\r\na.g71ye3upfogqk1ww.www.gordost.altai.aif.ru\r\na.gitlab.biznes-kubani.aif.ru\r\na.gitlab.gordost.altai.aif.ru\r\na.gitlab.kurorty-kubani.aif.ru\r\na.gubaha.perm.aif.ru\r\na.ivi.ru\r\na.iz.ru\r\na.kino-teatr.ru\r\na.kyusev.po1.mail.ru\r\na.kzn5txwwsyp1dhao.www.grant.oren.aif.ru\r\na.litvinov.77.yandex.ru\r\na.luka.76.yandex.ru\r\na.mail.ru\r\na.mkb.ru\r\na.mts.ru\r\na.mx.avito.ru\r\na.ns.avito.ru\r\na.ns.e.avito.ru\r\na.ns.email.avito.ru\r\na.ogngwg6gowqaa7ck.www.gpno1.oren.aif.ru\r\na.oleynik.po1.mail.ru\r\na.polyakovay.67.yandex.ru\r\na.rgis.rk.gov.ru\r\na.rgistest.rk.gov.ru\r\na.rosbank.ru\r\na.rostelecom.oren.aif.ru\r\na.superset.net.ixbt.com\r\na.tinkoff.ru\r\na.vakulenko.1984.yandex.ru\r\na.vmeste-s-farmet.kuban.aif.ru\r\na.wakhqeekinoob6ru.www.grant.oren.aif.ru\r\na.zbzoukuzbmxjjcq9.godecologii.omsk.aif.ru\r\na0.avito.ru\r\na01.avito.ru\r\na01.vk.com\r\na1.618033.yandex.ru\r\na1.avito.ru\r\na1234567.avito.ru\r\na1pdaread.litres.ru\r\na1read.litres.ru\r\na2.avito.ru\r\na2.psbank.ru\r\na2.vk.com\r\na270b94a1142bc874b140cc4a14122-1cd5c3c7d5a445d59c7f73b38cf6da12.ops.beeline.ru\r\na2fa.rosatom.ru\r\na2nta.khv.gov.ru\r\na2p-sms-https.beeline.ru\r\na2p-sms.beeline.ru\r\na2p-voice.megafon.ru\r\na2p.t2.ru\r\na2p.tele2.ru\r\na3.1415.yandex.ru\r\na3.avito.ru\r\na3fxep62te_3zv_p0m8l2oa-adr.ops.beeline.ru\r\na4.avito.ru\r\na4.content.tinkoff.ru\r\na4.tinkoff.ru\r\na437c50141998485484e-hbd.ops.beeline.ru\r\na4gds3vfh.max.com\r\na4wmanu-yyenfimalrbgnhw-adr.ops.beeline.ru\r\na5.avito.ru\r\na510fd06254012ab6f0d293c14fd5b-f38172564ba14286bb82bf16185a1a28.ops.beeline.ru\r\na6.avito.ru\r\na6.vk.com\r\na7.avito.ru\r\na7.vk.com\r\na754zmmjajvdswffpko55nq-adr.ops.beeline.ru\r\na8.avito.ru\r\na8.vk.com\r\na9.avito.ru\r\na9.vk.com\r\na956e985.services.gismeteo.ru\r\na9620ad2-dbd1-54a5-bc9e-a982de368855-bw.ops.beeline.ru\r\naa-lego-test-01.meduza.io\r\naa.avito.ru\r\naa.mail.ru\r\naa.mts.ru\r\naa.vk.com\r\naa2.avito.ru\r\naaa.avito.ru\r\naaa.passreset.rosbank.ru\r\naaa.vk.com\r\naaaa.avito.ru\r\naaaaa.avito.ru\r\naaaaa.vk.com\r\naaaaaa.avito.ru\r\naaaaaa.vk.com\r\naadfstst.mts.ru\r\naads.fas.gov.ru\r\naalene194.kino-teatr.ru\r\naardvark.yandex.ru\r\naaron.avito.ru\r\naaron.vk.com\r\nab-configurator.k.avito.ru\r\nab.60.yandex.ru\r\nab.avito.ru\r\nab.cloud.mts.ru\r\nab.vk.com\r\nabacus.avito.ru\r\nabakan.7lir.yandex.ru\r\nabakan.dev.kp.ru\r\nabakan.dns-shop.ru\r\nabakan.drom.ru\r\nabakan.kp.ru\r\nabakan.lemanapro.ru\r\nabakan.sig.sbc.sip.beeline.ru\r\nabakhareva.ing.k8s.dev.ivi.ru\r\nabatenov.ing.k8s.dev.ivi.ru\r\nabba.avito.ru\r\nabba.vk.com\r\nabc.avito.ru\r\nabc.mts.ru\r\nabc.vk.com\r\nabc1.avito.ru\r\nabc1.vk.com\r\nabc123.avito.ru\r\nabc123.vk.com\r\nabcd.76.yandex.ru\r\nabcd.avito.ru\r\nabcd.vk.com\r\nabcde.avito.ru\r\nabcde.vk.com\r\nabcdef.avito.ru\r\nabcdefg.avito.ru\r\nabcdefg.vk.com\r\nabdo.avito.ru\r\nabdo.vk.com\r\nabdullah.avito.ru\r\nabdullah.vk.com\r\nabe.avito.ru\r\nabe.vk.com\r\nabe3e529-6566-5352-9942-b65cc68bb0ba-bw.ops.beeline.ru\r\nabel.avito.ru\r\nabel.vk.com\r\nabesekerskij.ing.k8s.dev.ivi.ru\r\nabf.avito.ru\r\nabf.vk.com\r\nabh.rs.gov.ru\r\nabhi.avito.ru\r\nabhi.vk.com\r\nabiturient.avito.ru\r\nablink.alerts.max.com\r\nablink.info.max.com\r\nablink.marketing.max.com\r\nablink.message.max.com\r\nablink.recommendations.max.com\r\nablink.service.max.com\r\nablink.stream.max.com\r\nablink.updates.max.com\r\nabm.alfabank.ru\r\nabn.beeline.ru\r\nabo.avito.ru\r\nabo.market.yandex.ru\r\nabo.vk.com\r\nabood.avito.ru\r\nabout.avito.ru\r\nabout.vk.com\r\nabovetheclouds.vk.com\r\nabox.pochta.ru\r\nabr.credit-registry.nalog.ru\r\nabraham.avito.ru\r\nabroshkin.shared.dev.lab.x5.ru\r\nabroskin.shared.dev.lab.x5.ru\r\nabs.avito.ru\r\nabs.vk.com\r\nabsolutbank.credit-registry.nalog.ru\r\nabsolute.avito.ru\r\nabsolute.vk.com\r\nabuse-report.avito.ru\r\nabuse-report.vk.com\r\nabuse.avito.ru\r\nabuse.mail.ru\r\nabuse.vk.com\r\nabusef1.i.mail.ru\r\nabusef2.i.mail.ru\r\nabusef3.i.mail.ru\r\nabusef4.i.mail.ru\r\nabusereport.livejournal.com\r\nabutar1.i.mail.ru\r\nabyss.avito.ru\r\nabyss.vk.com\r\nac.avito.ru\r\nac.gov.ru\r\nac.mos.ru\r\nac.pics.livejournal.com\r\nac.ru.avito.ru\r\nac.tiu.ru\r\nac.vk.com\r\nac2.avito.ru\r\nac2.vk.com\r\naca.avito.ru\r\naca.vk.com\r\nacacia.avito.ru\r\nacacia.vk.com\r\nacad.avito.ru\r\nacad.vk.com\r\nacadem19.vedomosti.ru\r\nacademegcard.tinkoff.ru\r\nacademia.avito.ru\r\nacademic.avito.ru\r\nacademic.vk.com\r\nacademico.avito.ru\r\nacademico.vk.com\r\nacademy.avito.ru\r\nacademy.euronews.com\r\nacademy.garant.ru\r\nacademy.hh.ru\r\nacademy.tass.ru\r\nacademy.tutu.ru\r\nacademy.vk.com\r\nacademy.vtb.ru\r\nacademy.who.int\r\nacademy.yandex.ru\r\nacademyifa.hh.ru\r\nacademyopen.rbc.ru\r\nacanoeu2covideoisus.userapi.com\r\nacapi.avito.ru\r\nacapi.vk.com\r\nacc-rds.azuremsk.cloudapp.ec.mts.ru\r\nacc.avito.ru\r\nacc.lady.mail.ru\r\nacc.vk.com\r\nacca.avito.ru\r\naccelerator.avito.ru\r\naccelerator.rzd.ru\r\naccent.avito.ru\r\naccent.vk.com\r\naccents-dev.tass.ru\r\naccept.dw.euro.who.int\r\naccept.gateway.euro.who.int\r\naccess.avito.ru\r\naccess.emm.sberbank.ru\r\naccess.emro.who.int\r\naccess.mts.ru\r\naccess.russianpost.ru\r\naccess.skype.ec.mts.ru\r\naccess.vk.com\r\naccess.vtb.ru\r\naccess.who.int\r\naccess.worldbank.org\r\naccess1.avito.ru\r\naccess1.vk.com\r\naccess2.avito.ru\r\naccess2.vk.com\r\naccessdev.worldbank.org\r\naccessqa.worldbank.org\r\naccesstre.worldbank.org\r\naccesstredr.worldbank.org\r\naccio.tiu.ru\r\naccommodation.avito.ru\r\naccount-www.chechnya.gov.ru\r\naccount.2gis.ru\r\naccount.avito.ru\r\naccount.b2b.mts.ru\r\naccount.factoring.rosbank.ru\r\naccount.garant.ru\r\naccount.habr.com\r\naccount.kino-teatr.ru\r\naccount.mail.ru\r\naccount.primeworld.mail.ru\r\naccount.qa.primeworld.mail.ru\r\naccount.vk.com\r\naccounting-forum.kino-teatr.ru\r\naccounting-reporting.tinkoff.ru\r\naccounting.avito.ru\r\naccounting.tinkoff.ru\r\naccounting.vk.com\r\naccounts.avito.ru\r\naccounts.dns-shop.ru\r\naccounts.lk.cdn.megafon.ru\r\naccr.vtb.ru\r\nacdc.avito.ru\r\nacdn.tinkoff.ru\r\nace.avito.ru\r\nace.vk.com\r\nacer.avito.ru\r\nacer.vk.com\r\nacesso.avito.ru\r\nacesso.vk.com\r\nach-raion.gosuslugi.ru\r\nach.gov.ru\r\nachieve.avito.ru\r\nachilles.avito.ru\r\nachinsk.drom.ru\r\nachinsk.gosuslugi.ru\r\nachkasov.89.yandex.ru\r\nacid.avito.ru\r\nacid.vk.com\r\nack.publishing-transfer-dev.euronews.com\r\nack.publishing-transfer-stg.euronews.com\r\nack.publishing-transfer.euronews.com\r\nacl.avito.ru\r\nacl.vk.com\r\naclub.alfabank.ru\r\nacm.avito.ru\r\nacm.vk.com\r\nacme.avito.ru\r\nacme.vk.com\r\nacorn.avito.ru\r\nacorn.vk.com\r\nacp.avito.ru\r\nacp.vk.com\r\nacq.lb.tinkoff.ru\r\nacquiring.vtb.ru\r\nacquiringservice.open.ru\r\nacre.vtb.ru\r\nacrux.avito.ru\r\nacrux.vk.com\r\nacs-test.alfabank.ru\r\nacs-test.open.ru\r\nacs.alfabank.ru\r\nacs.avito.ru\r\nacs.mkb.ru\r\nacs.open.ru\r\nacs.rshb.ru\r\nacs.vk.com\r\nacs.vtb.ru\r\nacs2.mkb.ru\r\nacs2.rshb.ru\r\nacs2.vtb.ru\r\nacstest.mkb.ru\r\nacstest2.mkb.ru\r\nacsw.vgtrk.com\r\nact.avito.ru\r\nact.babyblog.ru\r\nactd.kino-teatr.ru\r\naction.avito.ru\r\naction.garant.ru\r\naction.vk.com\r\nactions.partners.megafon.ru\r\nactivate.avito.ru\r\nactivate.vk.com\r\nactivation.avito.ru\r\nactivation.sber.ru\r\nactivation.vk.com\r\nactive.avito.ru\r\nactiveclient.open.ru\r\nactivemq.worldbank.org\r\nactivemqdev.worldbank.org\r\nactivemqqa.worldbank.org\r\nactivemqstage.worldbank.org\r\nactivemqstg.worldbank.org\r\nactivemqtest.worldbank.org\r\nactivemqtrn.worldbank.org\r\nactivesync.avito.ru\r\nactivesync.vk.com\r\nactivity.avito.ru\r\nactivity.vk.com\r\nactresss.kino-teatr.ru\r\nacwo62wi2hsp_juhwrqi6ow-adr.ops.beeline.ru\r\nad-origin.eu.dev.media.max.com\r\nad-origin.eu.int.media.max.com\r\nad-origin.eu.prd.media.max.com\r\nad-origin.eu.stg.media.max.com\r\nad.avito.ru\r\nad.babyblog.ru\r\nad.mail.ru\r\nad.vk.com\r\nad1.avito.ru\r\nad1.vk.com\r\nad2.avito.ru\r\nad2.vk.com\r\nad3.avito.ru\r\nad3.vk.com\r\nada.avito.ru\r\nada.vk.com\r\nadadmin.avito.ru\r\nadadmin.vk.com\r\nadagio.avito.ru\r\nadagio.vk.com\r\nadam.avito.ru\r\nadam.ozon.ru\r\nadam.vk.com\r\nadams.avito.ru\r\nadamsays.kino-teatr.ru\r\nadaptacia.moscow.fas.gov.ru\r\nadapter.rbc.ru\r\nadblock-docs.ssp.rambler.ru\r\nadblock.championat.com\r\nadblock.gazeta.ru\r\nadblock.lenta.ru\r\nadblock.services.livejournal.com\r\nadblock.ssp.rambler.ru\r\nadblogger.vk.com\r\nadc.avito.ru\r\nadc.vk.com\r\nadd.avito.ru\r\naddappter.mobile.yandex.ru\r\nadder.avito.ru\r\nadder.vk.com\r\naddicted.avito.ru\r\naddicted.vk.com\r\naddlighthouse.test.euronews.com\r\naddons.avito.ru\r\naddons.vk.com\r\naddrs.yandex.ru\r\naddrs6-00.yandex.ru\r\nadds.avito.ru\r\nadeasy.avito.ru\r\nadel.avito.ru\r\nadel.vk.com\r\nadelaide.avito.ru\r\nadelaide.vk.com\r\nadele.avito.ru\r\nadf.kino-teatr.ru\r\nadfs-701-brz.rutube.ru\r\nadfs-lab.tass.ru\r\nadfs.avito.ru\r\nadfs.lemanapro.ru\r\nadfs.magnit.ru\r\nadfs.mts.ru\r\nadfs.office.tutu.ru\r\nadfs.rosbank.ru\r\nadfs.tele2.ru\r\nadfs.users.rbc.ru\r\nadfs.vk.com\r\nadfs01.office.tutu.ru\r\nadfs02.office.tutu.ru\r\nadfs03.office.tutu.ru\r\nadfsdevlogon.worldbank.org\r\nadfsfarm.users.rbc.ru\r\nadfslogon.worldbank.org\r\nadfstat.yandex.ru\r\nadfstest.rosbank.ru\r\nadgenerator.max.ru\r\nadi.avito.ru\r\nadi.vk.com\r\nadicolor.afisha.ru\r\nadidas.avito.ru\r\nadigea.aif.ru\r\nadil.avito.ru\r\nadil.vk.com\r\nadimg.avito.ru\r\nadis.avito.ru\r\nadler.avito.ru\r\nadler.vk.com\r\nadm.1236m.yandex.ru\r\nadm.1ccentr.yandex.ru\r\nadm.avito.ru\r\nadm.garant.ru\r\nadm.mp.rzd.ru\r\nadm.openbank.ru\r\nadm.sberbank-ru.os-psi.sberbank.ru\r\nadm.tinkoff.ru\r\nadm.v6.bo.rbc.ru\r\nadm2.avito.ru\r\nadm2.vk.com\r\nadmdum.gosuslugi.ru\r\nadmin-api.kino-teatr.ru\r\nadmin-app.cp.megafon.ru\r\nadmin-b2b.lemanapro.ru\r\nadmin-bus.tutu.ru\r\nadmin-calling.tele2.ru\r\nadmin-cert.rosbank.ru\r\nadmin-dev.k8s.rg.ru\r\nadmin-dev.rosbank.ru\r\nadmin-dialog-messenger-ift.online.sberbank.ru\r\nadmin-dialog-messenger-psi.online.sberbank.ru\r\nadmin-dialog-messenger.online.sberbank.ru\r\nadmin-new.rosbank.ru\r\nadmin-panel.sports.ru\r\nadmin-photobank.iz.ru\r\nadmin-pilot.vtb.ru\r\nadmin-slb.market.yandex.ru\r\nadmin-stage.k8s.rg.ru\r\nadmin-target.t2.ru\r\nadmin-target.tele2.ru\r\nadmin-test.rosbank.ru\r\nadmin.9111.ru\r\nadmin.accred.kremlin.ru\r\nadmin.aif-city.spb.aif.ru\r\nadmin.aif.ru\r\nadmin.art.t2.ru\r\nadmin.atd.rambler.ru\r\nadmin.avito.ru\r\nadmin.b.litres.ru\r\nadmin.balance.yandex.ru\r\nadmin.bonus.vtb.ru\r\nadmin.bp.minpromtorg.gov.ru\r\nadmin.budget.minpromtorg.gov.ru\r\nadmin.busines-lady-spb.aif.ru\r\nadmin.cert.rosbank.ru\r\nadmin.championat.com\r\nadmin.city.mts.ru\r\nadmin.class.rambler.ru\r\nadmin.console.cloud.mts.ru\r\nadmin.corp.tutu.ru\r\nadmin.cs7777.vk.com\r\nadmin.delivery.yandex.ru\r\nadmin.dev.avito.ru\r\nadmin.dev.city.mts.ru\r\nadmin.develop.platform.dev.cloud.mts.ru\r\nadmin.dom.t2.ru\r\nadmin.dom.tele2.ru\r\nadmin.domofon.mts.ru\r\nadmin.dostoevskiy-spb.aif.ru\r\nadmin.dsp.rambler.ru\r\nadmin.economy.gov.ru\r\nadmin.espen.afro.who.int\r\nadmin.factoring.megafon.ru\r\nadmin.finance.rambler.ru\r\nadmin.games.rambler.ru\r\nadmin.gkh.hab.aif.ru\r\nadmin.horos.rambler.ru\r\nadmin.job.megafon.ru\r\nadmin.k8s.rg.ru\r\nadmin.kids.minpromtorg.gov.ru\r\nadmin.kino-teatr.ru\r\nadmin.kino.1tv.ru\r\nadmin.lk.psbank.ru\r\nadmin.longread.altai.aif.ru\r\nadmin.madeinrussia.gov.ru\r\nadmin.market.yandex.ru\r\nadmin.mk.ru\r\nadmin.msg.tass.ru\r\nadmin.myoffice.sberbank.ru\r\nadmin.myteam.tass.ru\r\nadmin.nalog.ru\r\nadmin.news.rambler.ru\r\nadmin.nps.megafon.ru\r\nadmin.oauth-rc.yandex.ru\r\nadmin.pers.market.yandex.ru\r\nadmin.promo1tb.tele2.ru\r\nadmin.reader.litres.ru\r\nadmin.rosbalt.ru\r\nadmin.rosbank.ru\r\nadmin.sberstore.sberbank.ru\r\nadmin.shop.kp.ru\r\nadmin.skype.ec.mts.ru\r\nadmin.sq2.yandex.ru\r\nadmin.ssp.rambler.ru\r\nadmin.stage.championat.com\r\nadmin.stage.city.mts.ru\r\nadmin.talkbot-factory.tinkoff.ru\r\nadmin.tau.vk.com\r\nadmin.teams.infra.rbc.ru\r\nadmin.test.avito.ru\r\nadmin.toloka.yandex.ru\r\nadmin.tvoigorod.tele2.ru\r\nadmin.vk.com\r\nadmin.vmeste.vtb.ru\r\nadmin.vrpark.tele2.ru\r\nadmin.zakon.ru\r\nadmin01.avito.ru\r\nadmin01.vk.com\r\nadmin1.avito.ru\r\nadmin1.vk.com\r\nadmin2.avito.ru\r\nadmin2.vk.com\r\nadmin3.avito.ru\r\nadmin3.vk.com\r\nadmin31415.tutu.ru\r\nadmin5.avito.ru\r\nadmin5.vk.com\r\nadmin6.avito.ru\r\nadmin6.vk.com\r\nadminarchivesjenkins.worldbank.org\r\nadminarchivesstaging.worldbank.org\r\nadminchat.net.ixbt.com\r\nadmini.avito.ru\r\nadmini.vk.com\r\nadministration.avito.ru\r\nadministration.vk.com\r\nadministrator.avito.ru\r\nadministrator.vk.com\r\nadminliski.gosuslugi.ru\r\nadminmail.avito.ru\r\nadminmail.urfo.gov.ru\r\nadminmail.vk.com\r\nadminpanel.kino-teatr.ru\r\nadminpc.avito.ru\r\nadminpc.vk.com\r\nadminportalbpm.worldbank.org\r\nadminportalbpmdev.worldbank.orgadminportalbpmdev.worldbank.org\r\nadminportalbpmstg.worldbank.org\r\nadminportalbpmtest.worldbank.org\r\nadminportalbpmtrn.worldbank.org\r\nadmins.avito.ru\r\nadmintest.avito.ru\r\nadmintest.vk.com\r\nadminvault.azuremsk.ec.mts.ru\r\nadminvault.msk-azure.ec.mts.ru\r\nadmission.avito.ru\r\nadmissions.avito.ru\r\nadmivl.gosuslugi.ru\r\nadmkala.gosuslugi.ru\r\nadmo.consultant.ru\r\nadmoil.gosuslugi.ru\r\nadmomsk.gosuslugi.ru\r\nadmpoddore.gosuslugi.ru\r\nadms.avito.ru\r\nadms.vk.com\r\nadnan.avito.ru\r\nadnan.vk.com\r\nadnet.avito.ru\r\nadobe.avito.ru\r\nadobe.vk.com\r\nadonis.avito.ru\r\nadp.avito.ru\r\nadp.vk.com\r\nadphone.beeline.ru\r\nadr.ops.beeline.ru\r\nadresa.yandex.ru\r\nadrian.avito.ru\r\nadrian.users.avito.ru\r\nadrian.vk.com\r\nadriana.avito.ru\r\nadriana.vk.com\r\nadrms.avito.ru\r\nadrms.vk.com\r\nadruzhkov.test.ivi.ru\r\nads-storage.avito.ru\r\nads.adfox.rurose.ixbt.com\r\nads.alfabank.ru\r\nads.avito.ru\r\nads.ok.ru\r\nads.sber.ru\r\nads.vk.com\r\nads.x5.ru\r\nads.youdo.com\r\nads1.avito.ru\r\nads2.avito.ru\r\nads2.vk.com\r\nadsense.avito.ru\r\nadsense.vk.com\r\nadserv.avito.ru\r\nadserver.avito.ru\r\nadserver2.avito.ru\r\nadserver2.vk.com\r\nadservice.interfax.ru\r\nadsl.avito.ru\r\nadsl.vk.com\r\nadsl2.avito.ru\r\nadsl2.vk.com\r\nadslnat-curridabat-128.avito.ru\r\nadslnat-curridabat-128.vk.com\r\nadsloko.kino-teatr.ru\r\nadsrv.avito.ru\r\nadsrv.hh.ru\r\nadsrv.vk.com\r\nadtech.rambler.ru\r\nadtest.avito.ru\r\nadtune.yandex.ru\r\nadult.avito.ru\r\nadv-promo.2gis.ru\r\nadv.2gis.ru\r\nadv.avito.ru\r\nadv.garant.ru\r\nadv.habr.com\r\nadv.magnit.ru\r\nadv.max.ru\r\nadv.megafon.ru\r\nadv.ok.ru\r\nadv.rbc.ru\r\nadv.rutube.ru\r\nadv.vk.com\r\nadv.yandex.ru\r\nadv2.avito.ru\r\nadvance.avito.ru\r\nadvance.vk.com\r\nadvanced.avito.ru\r\nadvancement.avito.ru\r\nadvancement.vk.com\r\nadventure-kuban.review-k8s.aif.ru\r\nadventure.sports.ru\r\nadvert.avito.ru\r\nadvert.rbc.ru\r\nadvert.vk.com\r\nadvertise.avito.ru\r\nadvertisement.avito.ru\r\nadvertisement.vk.com\r\nadvertiser.avito.ru\r\nadvertisers.avito.ru\r\nadvertising.avito.ru\r\nadvertising.vk.com\r\nadvertising.yandex.ru\r\nadvertisingp2.test.euronews.com\r\nadvice.avito.ru\r\nadvice.vk.com\r\nadvisa.open.ru\r\nadvisor.api.2gis.ru\r\nadvisor.avito.ru\r\nadvkfeed.mail.ru\r\nadvocate.avito.ru\r\nadvocate.vk.com\r\nadvokat.avito.ru\r\nadvokat.vk.com\r\nadvokat10867.9111.ru\r\nadvokat1127.9111.ru\r\nadvokat11877.9111.ru\r\nadvokat13371.9111.ru\r\nadvokat13991.9111.ru\r\nadvokat14419.9111.ru\r\nadvokat14551.9111.ru\r\nadvokat1555.9111.ru\r\nadvokat16152.9111.ru\r\nadvokat16264.9111.ru\r\nadvokat16326.9111.ru\r\nadvokat16509.9111.ru\r\nadvokat17645.9111.ru\r\nadvokat17812.9111.ru\r\nadvokat18072.9111.ru\r\nadvokat18139.9111.ru\r\nadvokat18312.9111.ru\r\nadvokat18553.9111.ru\r\nadvokat3806.9111.ru\r\nadvokat401.9111.ru\r\nadvokat4154.9111.ru\r\nadvokat4541.9111.ru\r\nadvokat5241.9111.ru\r\nadvokat5817.9111.ru\r\nadvokat5817.test.9111.ru\r\nadvokat594.9111.ru\r\nadvokat6092.9111.ru\r\nadvokat6259.9111.ru\r\nadvokat6438.9111.ru\r\nadvokat6455.9111.ru\r\nadvokat7362.9111.ru\r\nadvokat7807.9111.ru\r\nadvokat7820.9111.ru\r\nadvokat8931.9111.ru\r\nadvokat9031.9111.ru\r\nadvokat9246.9111.ru\r\nadvokaty.77.yandex.ru\r\nadvq.yandex.ru\r\nadvstand.ing.k8s.dev.ivi.ru\r\nadwords.avito.ru\r\nadwords.vk.com\r\nadx.avito.ru\r\nadx.vk.com\r\nadygea.fas.gov.ru\r\nadygea.shop.megafon.ru\r\nae.avito.ru\r\nae.transport.vtb.ru\r\nae.vk.com\r\nae01.msk.vtb.ru\r\nae02.msk.vtb.ru\r\naeb.kino-teatr.ru\r\naefanov.ing.k8s.dev.ivi.ru\r\naem-dynasties.spec.tass.ru\r\naem.feedback.rosatom.ru\r\naeon.avito.ru\r\naeon.vk.com\r\naero.avito.ru\r\naero.garant.ru\r\naero.vk.com\r\naeroflot.alfabank.ru\r\naesf.mts.ru\r\naespega.worldbank.org\r\naespegadev.worldbank.org\r\naespeganonprod.worldbank.org\r\naespegastg.worldbank.org\r\naespegatest.worldbank.org\r\naespegatrn.worldbank.org\r\naevaganov-avi-pro-frontend.t.avito.ru\r\naexch.open.ru\r\naf.avito.ru\r\naf.gosuslugi.ru\r\naf.mail.ru\r\naf.vk.com\r\naf102.mail.ru\r\naf112.mail.ru\r\naf12.mail.ru\r\naf122.mail.ru\r\naf133.mail.ru\r\naf142.mail.ru\r\naf152.mail.ru\r\naf162.mail.ru\r\naf172.mail.ru\r\naf182.mail.ru\r\naf192.mail.ru\r\naf202.mail.ru\r\naf22.mail.ru\r\naf32.mail.ru\r\naf42.mail.ru\r\naf52.mail.ru\r\naf62.mail.ru\r\naf72.mail.ru\r\naf82.mail.ru\r\naf92.mail.ru\r\nafaceri.avito.ru\r\nafas.consultant.ru\r\naff.avito.ru\r\naff.vk.com\r\naffilate.hh.ru\r\naffiliate.avito.ru\r\naffiliate.litres.ru\r\naffiliate.open.ru\r\naffiliate.vprok.ru\r\naffiliates.avito.ru\r\naffiliates.vk.com\r\nafghan.lenta.ru\r\nafghanistan.iz.ru\r\nafisha.avito.ru\r\nafisha.mail.ru\r\nafisha.prestable.yandex.ru\r\nafisha.vk.com\r\nafisha.yandex.ru\r\nafm.24.yandex.ru\r\nafm.avito.ru\r\nafp.avito.ru\r\nafrica.avito.ru\r\nafrica.vk.com\r\nafrican-vaccination-week.afro.who.int\r\nafricayouthemployment.worldbank.org\r\nafrika-v-slovah.tass.ru\r\nafro.who.int\r\nafrodita.avito.ru\r\nafrodita.mail.ru\r\nafrolib.afro.who.int\r\nafs.avito.ru\r\nafs.vk.com\r\nafshin.avito.ru\r\nafshin.vk.com\r\nafter.life.ru\r\naftest1.mail.ru\r\naftest12.mail.ru\r\nafx.alfabank.ru\r\nag.alania.gov.ru\r\nag.alfabank.ru\r\nag.avito.ru\r\nag.mobileid.beeline.ru\r\nag.mos.ru\r\nag.rgis.rk.gov.ru\r\nag.rgistest.rk.gov.ru\r\nag1.avito.ru\r\nag1.vk.com\r\naga.avito.ru\r\naga.vk.com\r\nagainstfake.life.ru\r\naganina.lideryrossii.tass.ru\r\nagape.avito.ru\r\nagape.vk.com\r\nagata.avito.ru\r\nagata.yandex.ru\r\nagclicfg.kino-teatr.ru\r\nage.avito.ru\r\nage.lenta.ru\r\nage.vk.com\r\nage.zdorovie-shkolnika.spb.aif.ru\r\nageguojiadubohefa.kino-teatr.ru\r\nagencias.avito.ru\r\nagencias.vk.com\r\nagency-back01e.yandex.ru\r\nagency-back01i.yandex.ru\r\nagency-dev-vagrant.ppc.yandex.ru\r\nagency-dev.ppc.yandex.ru\r\nagency-test-back.ppc.yandex.ru\r\nagency.4.yandex.ru\r\nagency.advertising.yandex.ru\r\nagency.avito.ru\r\nagency.vk.com\r\nagenda.avito.ru\r\nagenda.vk.com\r\nagent.alfabank.ru\r\nagent.avito.ru\r\nagent.beeline.ru\r\nagent.mail.ru\r\nagent.mdm.sber.ru\r\nagent.openbank.ru\r\nagent.vk.com\r\nagentdemo.beeline.ru\r\nagents.avito.ru\r\nagents.banki.ru\r\nagents.mts.ru\r\nagents.sovcombank.ru\r\nagents.vk.com\r\nagg.taximeter.yandex.ru\r\naggregator-mc.t2.ru\r\nagile.avito.ru\r\nagile.vk.com\r\nagileday.mts.ru\r\naging.kino-teatr.ru\r\nagip.sakha.gov.ru\r\nagk.avito.ru\r\nagk.vk.com\r\nagm2020.mts.ru\r\nagnes.avito.ru\r\nagnes.vk.com\r\nagnt.mts.ru\r\nagora.avito.ru\r\nagora.vk.com\r\nagqqmsg.worldbank.org\r\nagra.mail.ru\r\nagri.avito.ru\r\nagri.vk.com\r\nagriculture.avito.ru\r\nagriculture.vk.com\r\nagro.avito.ru\r\nagro.magnit.ru\r\nagro.vk.com\r\nagroaspekt.x5.ru\r\nagroportal2.garant.ru\r\nagrozniy.ing.k8s.dev.ivi.ru\r\nagua.avito.ru\r\nagua.vk.com\r\nagus.avito.ru\r\nagus.vk.com\r\nagvyqremote.kino-teatr.ru\r\nagw.ims.tele2.ru\r\nagwcdn.rosatom.ru\r\nah.avito.ru\r\nah.vk.com\r\naha.avito.ru\r\naha.vk.com\r\nahd-centre.minzdrav.gov.ru\r\nahezlrwv7sczewncgpqjwuw-adr.ops.beeline.ru\r\nahf.afro.who.int\r\nahmad.avito.ru\r\nahmad.vk.com\r\nahmed.avito.ru\r\nahmed.vk.com\r\naho-web.c.aho.afro.who.int\r\naho.afro.who.int\r\nahpsr.who.int\r\nahr.mvideo.ru\r\nahspr.who.int\r\nahty.drom.ru\r\nahwp.avito.ru\r\nahwp.vk.com\r\nai-journey.bizconf.rbc.ru\r\nai-pushkin.content.tinkoff.ru\r\nai-pusnkin.content.tinkoff.ru\r\nai-summarizer.staging.meduza.io\r\nai.academy.vtb.ru\r\nai.apteka.ru\r\nai.avito.ru\r\nai.kino-teatr.ru\r\nai.rutube.ru\r\nai.sber.ru\r\nai.tutu.ru\r\nai.vk.com\r\naic.avito.ru\r\naic.vk.com\r\naida.avito.ru\r\naida.vk.com\r\naida.yandex.ru\r\naif-s3.aif.ru\r\naiiskue.beeline.ru\r\naikido.avito.ru\r\naim.account.prod.erm.2gis.ru\r\naim.api.prod.erm.2gis.ru\r\naim.avito.ru\r\naim.prod.erm.2gis.ru\r\naims.avito.ru\r\naims.vk.com\r\naion.avito.ru\r\naion.vk.com\r\nair.afisha.ru\r\nair.avito.ru\r\nair.dev.iiot.gov.ru\r\nair.iiot.gov.ru\r\nair.vk.com\r\nairbyte-weban.megafon.ru\r\nairbyte.net.ixbt.com\r\nairconsole.open.ru\r\naire.avito.ru\r\naire.vk.com\r\nairflow-weban.megafon.ru\r\nairport.avito.ru\r\nairport.vk.com\r\nairrace.tele2.ru\r\nairsoft.avito.ru\r\nairsoft.vk.com\r\nais.avito.ru\r\nais.fadm.gov.ru\r\nais.vk.com\r\naisarhiv.sev.gov.ru\r\naisberg.4dmin.yandex.ru\r\naisd13.economy.gov.ru\r\naisgroup.2012.yandex.ru\r\naisprto.mos.ru\r\naispu.minprom.gov.ru\r\naist.obraz.tambov.gov.ru\r\naisubp.mos.ru\r\nait.avito.ru\r\naius-app.aius.mchs.ru\r\naius-file.aius.mchs.ru\r\naius.tiles.atlas.mchs.ru\r\naiv.0015671.yandex.ru\r\naj-https.mail.ru\r\naj.avito.ru\r\naj2movbx-rlp.ops.beeline.ru\r\najax.avito.ru\r\najf1.mail.ru\r\najf2.mail.ru\r\najf3.mail.ru\r\najf4.mail.ru\r\najf5.mail.ru\r\najf6.mail.ru\r\najs.avito.ru\r\najs.vk.com\r\najuda.avito.ru\r\najuda.vk.com\r\nak.avito.ru\r\nak.vk.com\r\nak47.avito.ru\r\nak47.vk.com\r\naka.avito.ru\r\nakamai-test-origin.avito.ru\r\nakamai-test-origin.vk.com\r\nakamai-test.avito.ru\r\nakamai-test.vk.com\r\nakamai.avito.ru\r\nakamai.vk.com\r\nakari.avito.ru\r\nakasaka.avito.ru\r\nakasaka.vk.com\r\nakash.avito.ru\r\nakash.vk.com\r\nakashi.avito.ru\r\nakashi.vk.com\r\nakatsuki.avito.ru\r\nakatsuki.vk.com\r\nakazachev.ing.k8s.dev.ivi.ru\r\nakbars.credit-registry.nalog.ru\r\nakbulut.365.yandex.ru\r\nakc.mkb.ru\r\nakcept.credit-registry.nalog.ru\r\nakdseystem.kino-teatr.ru\r\nakhazanov.ing.k8s.dev.ivi.ru\r\nakhlebnikov.ing.k8s.dev.ivi.ru\r\nakhudyakov.ing.k8s.dev.ivi.ru\r\nakira.avito.ru\r\nakira.vk.com\r\nakita.avito.ru\r\nakita.vk.com\r\nakm.eu.dev.media.max.com\r\nakm.eu.int.media.max.com\r\nakm.eu.media.max.com\r\nakm.eu.prd.media.max.com\r\nakm.eu.stg.media.max.com\r\nakm.latam.dev.media.max.com\r\nakm.latam.int.media.max.com\r\nakm.latam.media.max.com\r\nakm.latam.prd.media.max.com\r\nakm.latam.stg.media.max.com\r\nakm.live.eu.dev.media.max.com\r\nakm.live.eu.int.media.max.com\r\nakm.live.eu.media.max.com\r\nakm.live.eu.prd.media.max.com\r\nakm.live.eu.stg.media.max.com\r\nakm.live.latam.dev.media.max.com\r\nakm.live.latam.int.media.max.com\r\nakm.live.latam.media.max.com\r\nakm.live.latam.prd.media.max.com\r\nakm.live.latam.stg.media.max.com\r\nakm.live.media.max.com\r\nakm.live.na.dev.media.max.com\r\nakm.live.na.int.media.max.com\r\nakm.live.na.prd.media.max.com\r\nakm.live.na.stg.media.max.com\r\nakm.live.olympics.dev.media.max.com\r\nakm.live.olympics.int.media.max.com\r\nakm.live.olympics.media.max.com\r\nakm.live.olympics.prd.media.max.com\r\nakm.live.olympics.stg.media.max.com\r\nakm.live.us.dev.media.max.com\r\nakm.live.us.int.media.max.com\r\nakm.live.us.prd.media.max.com\r\nakm.live.us.stg.media.max.com\r\nakm.olympics.dev.media.max.com\r\nakm.olympics.int.media.max.com\r\nakm.olympics.media.max.com\r\nakm.olympics.prd.media.max.com\r\nakm.olympics.stg.media.max.com\r\nakorchagina.ing.k8s.dev.ivi.ru\r\nakpl22.gosuslugi.ru\r\nakruchkov.ing.k8s.dev.ivi.ru\r\naks.avito.ru\r\naks.vk.com\r\naktbuh.garant.ru\r\nal-3928-www.k.avito.ru\r\nal.avito.ru\r\nal.id.sber.ru\r\nal.vtb.ru\r\nalaa.avito.ru\r\nalabama.avito.ru\r\naladdin.avito.ru\r\naladdin.vk.com\r\naladin.avito.ru\r\nalan.avito.ru\r\nalan.vk.com\r\nalani.avito.ru\r\nalani.vk.com\r\nalania.dev.home.megafon.ru\r\nalania.mts.ru\r\nalania.shop.megafon.ru\r\nalapshin.ing.k8s.dev.ivi.ru\r\nalaska.avito.ru\r\nalaska.vk.com\r\nalba.avito.ru\r\nalba.vk.com\r\nalbank.credit-registry.nalog.ru\r\nalbany.avito.ru\r\nalbatros.avito.ru\r\nalbatros.vk.com\r\nalbatross.avito.ru\r\nalbert.avito.ru\r\nalbert.vk.com\r\nalberto.avito.ru\r\nalberto.vk.com\r\nalbion.avito.ru\r\nalborz.avito.ru\r\nalborz.vk.com\r\nalbum.avito.ru\r\nalbum.vk.com\r\nalc.avito.ru\r\nalc.vk.com\r\nalcatraz.avito.ru\r\nalcatraz.vk.com\r\nalchemy.avito.ru\r\nalchemy.vk.com\r\nalco.ozon.ru\r\nalcyone.avito.ru\r\nalcyone.vk.com\r\naldan.avito.ru\r\naldan.drom.ru\r\naldan.vk.com\r\naldebaran.avito.ru\r\naldebaran.vk.com\r\naldo.avito.ru\r\naldo.vk.com\r\naldrich-regular.kino-teatr.ru\r\nalef.avito.ru\r\nalef.mail.ru\r\nalef.vk.com\r\nalei1.mail.ru\r\nalei10.mail.ru\r\nalei11.mail.ru\r\nalei12.mail.ru\r\nalei13.mail.ru\r\nalei14.mail.ru\r\nalei15.mail.ru\r\nalei16.mail.ru\r\nalei17.mail.ru\r\nalei18.mail.ru\r\nalei19.mail.ru\r\nalei2.mail.ru\r\nalei20.mail.ru\r\nalei22.mail.ru\r\nalei23.mail.ru\r\nalei25.mail.ru\r\nalei26.mail.ru\r\nalei27.mail.ru\r\nalei29.mail.ru\r\nalei3.mail.ru\r\nalei31.mail.ru\r\nalei32.mail.ru\r\nalei33.mail.ru\r\nalei35.mail.ru\r\nalei36.mail.ru\r\nalei37.mail.ru\r\nalei38.mail.ru\r\nalei39.mail.ru\r\nalei41.mail.ru\r\nalei45.mail.ru\r\nalei46.mail.ru\r\nalei47.mail.ru\r\nalei48.mail.ru\r\nalei49.mail.ru\r\nalei5.mail.ru\r\nalei50.mail.ru\r\nalei51.mail.ru\r\nalei52.mail.ru\r\nalei53.mail.ru\r\nalei55.mail.ru\r\nalei56.mail.ru\r\nalei58.mail.ru\r\nalei59.mail.ru\r\nalei6.mail.ru\r\nalei60.mail.ru\r\nalei62.mail.ru\r\nalei63.mail.ru\r\nalei64.mail.ru\r\nalei7.mail.ru\r\nalei70.mail.ru\r\nalei71.mail.ru\r\nalei72.mail.ru\r\nalei73.mail.ru\r\nalei78.mail.ru\r\nalei79.mail.ru\r\nalei8.mail.ru\r\nalei80.mail.ru\r\nalei81.mail.ru\r\nalei82.mail.ru\r\nalei83.mail.ru\r\nalei84.mail.ru\r\nalei85.mail.ru\r\nalei86.mail.ru\r\nalei88.mail.ru\r\nalei9.mail.ru\r\nalei90.mail.ru\r\nalei91.mail.ru\r\nalei93.mail.ru\r\nalekhov.9111.ru\r\naleksan.social.tomsk.gov.ru\r\naleksandr.n.1.yandex.ru\r\naleksandravogajskoe-r64.gosweb.gosuslugi.ru\r\naleksandrova.dev.kp.ru\r\nalekseev.sakha.gov.ru\r\naleksin.beeline.ru\r\naleph.avito.ru\r\naleph.vk.com\r\nalert-sb.pg.tutu.ru\r\nalert.academy.mchs.ru\r\nalert.avito.ru\r\nalert.mchs.ru\r\nalert.minzdrav.gov.ru\r\nalertix.avito.ru\r\nalertmanager.city.mts.ru\r\nalertmanager.lk.otello.2gis.ru\r\nalertmanager.net.ixbt.com\r\nalertmanager.pnp.cs-aws.mvideo.ru\r\nalertmenager24718.mk.ru\r\nalerts.avito.ru\r\nalerts.mb-cert-mon.rosbank.ru\r\nalerts.mbr-mon.rosbank.ru\r\nalerts.vk.com\r\nalerts.worldbank.org\r\nalertsdev.worldbank.org\r\nalertsqa.worldbank.org\r\nalertsstg.worldbank.org\r\nalertstst.worldbank.org\r\nalertus.avito.ru\r\nalertus.vk.com\r\nalesha.popovich.2018.yandex.ru\r\nalex.avito.ru\r\nalex.malov.85.yandex.ru\r\nalex.users.avito.ru\r\nalex.vk.com\r\nalex29.64.yandex.ru\r\nalex7.801.yandex.ru\r\nalexa.avito.ru\r\nalexa.mail.ru\r\nalexa.vk.com\r\nalexander.avito.ru\r\nalexander.vk.com\r\nalexandra.avito.ru\r\nalexandra.vk.com\r\nalexandre.avito.ru\r\nalexandre.vk.com\r\nalexandria.avito.ru\r\nalexey.aristov.0206.yandex.ru\r\nalexistest.test.euronews.com\r\nalexkey777.777.yandex.ru\r\nalexp.2103.yandex.ru\r\naleysk22.gosuslugi.ru\r\nalf.avito.ru\r\nalf.rbc.ru\r\nalf.vk.com\r\nalfa-link-int.alfabank.ru\r\nalfa-link.alfabank.ru\r\nalfa-mobile.alfabank.ru\r\nalfa-skidki.alfabank.ru\r\nalfa-webex.alfabank.ru\r\nalfa.avito.ru\r\nalfa.beeline.ru\r\nalfabox.alfabank.ru\r\nalfacamp.alfabank.ru\r\nalfadisk.alfabank.ru\r\nalfadocs.alfabank.ru\r\nalfago.alfabank.ru\r\nalfagotest.alfabank.ru\r\nalfainvest.alfabank.ru\r\nalfaker.77.yandex.ru\r\nalfamir.alfabank.ru\r\nalfapartners.alfabank.ru\r\nalfapeople.alfabank.ru\r\nalfateam.alfabank.ru\r\nalfred.avito.ru\r\nalfred.vk.com\r\nalfresco.avito.ru\r\nalfresco.vk.com\r\nalgeria.avito.ru\r\nalgeria.vk.com\r\nalgerie.avito.ru\r\nalgerie.vk.com\r\nalgol.avito.ru\r\nalgol.vk.com\r\nalgorithm.contest.yandex.ru\r\nali.avito.ru\r\nali.unal.01.yandex.ru\r\nali.vk.com\r\nalibaba.avito.ru\r\nalibaba.vk.com\r\nalice.avito.ru\r\nalice.vk.com\r\nalice.yandex.ru\r\nalien.avito.ru\r\nalien.vk.com\r\nalim.avito.ru\r\nalim.vk.com\r\nalina.avito.ru\r\nalina.vk.com\r\nalis.avito.ru\r\nalis.vk.com\r\nalisa.avito.ru\r\nalive.avito.ru\r\nalive.iz.ru\r\nall-airlines.content.tinkoff.ru\r\nall-nodes.avito.ru\r\nall-nodes.vk.com\r\nall.avito.ru\r\nall.culture.ru\r\nall.edge.avito.ru\r\nall.litres.ru\r\nall.mts.ru\r\nall.pp.sovcombank.ru\r\nall.test.sovcombank.ru\r\nall.videocdn.avito.ru\r\nall.vk.com\r\nalla.avito.ru\r\nalla.vk.com\r\nallaccount.2gis.ru\r\nallegro.avito.ru\r\nallegro.vk.com\r\nallen.avito.ru\r\nallen.vk.com\r\nalles.avito.ru\r\nalles.vk.com\r\nalliance.avito.ru\r\nalliance.rusarchives.ru\r\nalliance.vk.com\r\nallianz.mkb.ru\r\nallinclusive.project.tinkoff.ru\r\nallinclusive.tinkoff.ru\r\nallmegafon.litres.ru\r\nallmon2.rambler.ru\r\nallods.mail.ru\r\nallstar.avito.ru\r\nallstar.championat.com\r\nallstar.vk.com\r\nallstars.avito.ru\r\nallure.tinkoff.ru\r\nalm.ec.mts.ru\r\nalma.avito.ru\r\nalma.vk.com\r\nalmaty.avito.ru\r\nalmaty.drom.ru\r\nalmazchelstroy.13.yandex.ru\r\nalmighty.avito.ru\r\nalmighty.vk.com\r\nalms.avito.ru\r\nalms.vk.com\r\naloha.avito.ru\r\nalone.avito.ru\r\nalone.vk.com\r\nalopuhova.ing.k8s.dev.ivi.ru\r\nalp.avito.ru\r\nalp.vk.com\r\nalpha-amqp.cloud.yandex.ru\r\nalpha-compute.cloud.yandex.ru\r\nalpha-data.cloud.yandex.ru\r\nalpha-identity.cloud.yandex.ru\r\nalpha-image.cloud.yandex.ru\r\nalpha-interface.cloud.yandex.ru\r\nalpha-network.cloud.yandex.ru\r\nalpha-novnc.cloud.yandex.ru\r\nalpha-object.cloud.yandex.ru\r\nalpha-volume.cloud.yandex.ru\r\nalpha.avito.ru\r\nalpha.bonus.mail.ru\r\nalpha.cloud.mail.ru\r\nalpha.mail.ru\r\nalpha.mts.ru\r\nalpha.zen-test.yandex.ru\r\nalpha0.mail.ru\r\nalpha1.avito.ru\r\nalpha1.vk.com\r\nalpha2.avito.ru\r\nalpha5.avito.ru\r\nalpha5.vk.com\r\nalpine.avito.ru\r\nalpine.vk.com\r\nalpp-docs.vtb.ru\r\nalpp-lkp.vtb.ru\r\nalrf.consultant.ru\r\nalroom.life.ru\r\nalrp.worldbank.org\r\nals.avito.ru\r\nals.vk.com\r\nalsadm.tomsk.gov.ru\r\nalt-host.avito.ru\r\nalt-host.vk.com\r\nalt.avito.ru\r\nalt.dev.kp.ru\r\nalt.kp.ru\r\nalta-gsw.avito.ru\r\nalta-gsw.vk.com\r\nalta.avito.ru\r\nalta.vk.com\r\naltai.aif.ru\r\naltai.mts.ru\r\naltair.avito.ru\r\naltair.vk.com\r\naltamina.leasing.rshb.ru\r\naltay.dev.home.megafon.ru\r\naltay.drom.ru\r\naltay.shop.megafon.ru\r\naltcraft.premier.one\r\nalter.avito.ru\r\nalterego.avito.ru\r\nalterego.vk.com\r\naltk.fas.gov.ru\r\naltkraft.tinkoff.ru\r\nalto.avito.ru\r\nalto.vk.com\r\naltrep.dev.home.megafon.ru\r\naltrep.shop.megafon.ru\r\naltruism.tass.ru\r\naltschool13.gosuslugi.ru\r\nalumni.avito.ru\r\nalumnos.avito.ru\r\nalva.yandex.ru\r\nalvarez.avito.ru\r\nalvarez.vk.com\r\nalvin.avito.ru\r\nalvis.avito.ru\r\nalx.atv.76.yandex.ru\r\nalxfast.vk.com\r\nalye-parusa.tass.ru\r\nalz-partners01h.maps.yandex.ru\r\nalz-stat-partners01h.maps.yandex.ru\r\nam.avito.ru\r\nam.mirtv.ru\r\nam1.avito.ru\r\nam1.vk.com\r\nama.avito.ru\r\nama.vk.com\r\namadeus.avito.ru\r\namadeus.vk.com\r\namail.alfabank.ru\r\namal.avito.ru\r\namal.vk.com\r\namanda.avito.ru\r\namanda.vk.com\r\namar.avito.ru\r\namaranth.avito.ru\r\namaranth.vk.com\r\namark.rosbank.ru\r\namateur.avito.ru\r\namazing.avito.ru\r\namazing.vk.com\r\namazon.avito.ru\r\namazone.avito.ru\r\namb.avito.ru\r\namb.vk.com\r\namber-srv04e.yandex.ru\r\namber.avito.ru\r\namc.avito.ru\r\namc.vk.com\r\namcalls.alfabank.ru\r\namd.avito.ru\r\namd.vk.com\r\namelia-stage.mvideo.ru\r\namelia.mvideo.ru\r\namerica.avito.ru\r\namerica.vk.com\r\namerican.avito.ru\r\namerican.vk.com\r\namethyst.avito.ru\r\namethyst.vk.com\r\nameucm.om.6ora.yandex.ru\r\namg.avito.ru\r\namg.vk.com\r\nami.avito.ru\r\namigo.avito.ru\r\namigo.mail.ru\r\namigo.vk.com\r\namigos.avito.ru\r\namigos.vk.com\r\namin.avito.ru\r\namin.vk.com\r\namir.avito.ru\r\namir.vk.com\r\namira.avito.ru\r\namira.vk.com\r\namirs.mir.tambov.gov.ru\r\namis.avito.ru\r\namis.vk.com\r\namity.avito.ru\r\namity.vk.com\r\namjad.avito.ru\r\namjad.vk.com\r\naml.avito.ru\r\naml.rosbank.ru\r\naml.vk.com\r\namlmapping.mkb.ru\r\namon.avito.ru\r\namoozesh.avito.ru\r\namoozesh.vk.com\r\namor.avito.ru\r\namor.vk.com\r\namos.avito.ru\r\namos.vk.com\r\namp-cache-guarantee-prom.meduza.io\r\namp-cache-guarantee-prom.staging.meduza.io\r\namp-d.meduza.io\r\namp-rewrite.meduza.io\r\namp-rewrite.staging.meduza.io\r\namp.9111.ru\r\namp.abakan.dev.kp.ru\r\namp.abakan.kp.ru\r\namp.aleksandrova.dev.kp.ru\r\namp.alt.dev.kp.ru\r\namp.alt.kp.ru\r\namp.amur.dev.kp.ru\r\namp.amur.kp.ru\r\namp.arh.dev.kp.ru\r\namp.arh.kp.ru\r\namp.astrakhan.dev.kp.ru\r\namp.astrakhan.kp.ru\r\namp.avito.ru\r\namp.balkans.dev.kp.ru\r\namp.balkans.kp.ru\r\namp.bel.dev.kp.ru\r\namp.bel.kp.ru\r\namp.belarus.kp.ru\r\namp.beta.kp.ru\r\namp.bryansk.dev.kp.ru\r\namp.bryansk.kp.ru\r\namp.canada.dev.kp.ru\r\namp.chel.dev.kp.ru\r\namp.chel.kp.ru\r\namp.chita.dev.kp.ru\r\namp.chita.kp.ru\r\namp.chukotka.kp.ru\r\namp.crimea.dev.kp.ru\r\namp.crimea.kp.ru\r\namp.cyprus.dev.kp.ru\r\namp.cyprus.kp.ru\r\namp.czech.dev.kp.ru\r\namp.dag.kp.ru\r\namp.dev.kp.ru\r\namp.donetsk.kp.ru\r\namp.dv.dev.kp.ru\r\namp.dv.kp.ru\r\namp.eao.kp.ru\r\namp.egypt.dev.kp.ru\r\namp.euro.dev.kp.ru\r\namp.gazeta.ru\r\namp.hab.dev.kp.ru\r\namp.hab.kp.ru\r\namp.herson.kp.ru\r\namp.il.kp.ru\r\namp.irk.dev.kp.ru\r\namp.irk.kp.ru\r\namp.ivanovo.dev.kp.ru\r\namp.izh.dev.kp.ru\r\namp.izh.kp.ru\r\namp.kaliningrad.dev.kp.ru\r\namp.kaliningrad.kp.ru\r\namp.kaluga.kp.ru\r\namp.kamchatka.kp.ru\r\namp.kazan.dev.kp.ru\r\namp.kazan.kp.ru\r\namp.kem.dev.kp.ru\r\namp.kem.kp.ru\r\namp.kirov.dev.kp.ru\r\namp.kirov.kp.ru\r\namp.komi.dev.kp.ru\r\namp.komi.kp.ru\r\namp.kostroma.kp.ru\r\namp.kp.ru\r\namp.krsk.dev.kp.ru\r\namp.krsk.kp.ru\r\namp.kuban.dev.kp.ru\r\namp.kuban.kp.ru\r\namp.kursk.dev.kp.ru\r\namp.kursk.kp.ru\r\namp.lepetsk.kp.ru\r\namp.lipetsk.dev.kp.ru\r\namp.lipetsk.kp.ru\r\namp.lugansk.kp.ru\r\namp.magadan.kp.ru\r\namp.meduza.io\r\namp.montenegro.dev.kp.ru\r\namp.mosobl.kp.ru\r\namp.msk.dev.kp.ru\r\namp.msk.kp.ru\r\namp.murmansk.dev.kp.ru\r\namp.murmansk.kp.ru\r\namp.news24.dev.kp.ru\r\namp.nnov.dev.kp.ru\r\namp.nnov.kp.ru\r\namp.nsk.dev.kp.ru\r\namp.nsk.kp.ru\r\namp.omsk.dev.kp.ru\r\namp.omsk.kp.ru\r\namp.orel.dev.kp.ru\r\namp.orel.kp.ru\r\namp.orenburg.kp.ru\r\namp.pda.vnov.kp.ru\r\namp.penza.dev.kp.ru\r\namp.penza.kp.ru\r\namp.perm.dev.kp.ru\r\namp.perm.kp.ru\r\namp.popov.dev.kp.ru\r\namp.production.meduza.io\r\namp.pskov.dev.kp.ru\r\namp.pskov.kp.ru\r\namp.rbc.ru\r\namp.rostov.dev.kp.ru\r\namp.rostov.kp.ru\r\namp.ryazan.dev.kp.ru\r\namp.ryazan.kp.ru\r\namp.sakhalin.kp.ru\r\namp.samara.dev.kp.ru\r\namp.samara.kp.ru\r\namp.saratov.dev.kp.ru\r\namp.saratov.kp.ru\r\namp.sevastopol.kp.ru\r\namp.smol.dev.kp.ru\r\namp.smol.kp.ru\r\namp.spb.dev.kp.ru\r\namp.spb.kp.ru\r\namp.staging.meduza.io\r\namp.stav.dev.kp.ru\r\namp.stav.kp.ru\r\namp.tambov.dev.kp.ru\r\namp.tambov.kp.ru\r\namp.tomsk.dev.kp.ru\r\namp.tomsk.kp.ru\r\namp.tula.dev.kp.ru\r\namp.tula.kp.ru\r\namp.tumen.dev.kp.ru\r\namp.tumen.kp.ru\r\namp.tver.dev.kp.ru\r\namp.tver.kp.ru\r\namp.ufa.dev.kp.ru\r\namp.ufa.kp.ru\r\namp.ugra.dev.kp.ru\r\namp.ugra.kp.ru\r\namp.ul.dev.kp.ru\r\namp.ul.kp.ru\r\namp.ulan.kp.ru\r\namp.ural.dev.kp.ru\r\namp.ural.kp.ru\r\namp.vladimir.dev.kp.ru\r\namp.vladimir.kp.ru\r\namp.vnov.dev.kp.ru\r\namp.volgograd.dev.kp.ru\r\namp.volgograd.kp.ru\r\namp.vologda.dev.kp.ru\r\namp.vologda.kp.ru\r\namp.vrn.dev.kp.ru\r\namp.vrn.kp.ru\r\namp.yakutia.dev.kp.ru\r\namp.yakutia.kp.ru\r\namp.yamal.dev.kp.ru\r\namp.yamal.kp.ru\r\namp.yar.dev.kp.ru\r\namp.yar.kp.ru\r\namp.zap.kp.ru\r\nampp-charge-partners.moscowapp.mos.ru\r\namptest.vtb.ru\r\namq-rbs.open.ru\r\nams-ix.vk.com\r\nams.avito.ru\r\nams.cloud.vk.com\r\nams.minzdrav.gov.ru\r\nams.vk.com\r\nams2.avito.ru\r\namsterdam.avito.ru\r\namt.avito.ru\r\namub5gt79shx3xzzeckcgjq-adr.ops.beeline.ru\r\namur.avito.ru\r\namur.dev.home.megafon.ru\r\namur.dev.kp.ru\r\namur.kp.ru\r\namur.mts.ru\r\namur.shop.megafon.ru\r\namur.vk.com\r\namweb.worldbank.org\r\namy.avito.ru\r\namy.vk.com\r\nan.avito.ru\r\nan.yandex.ru\r\nana.avito.ru\r\nanaboliki.iz.ru\r\nanaconda.avito.ru\r\nanadyr.lemanapro.ru\r\nanakin.avito.ru\r\nanal.avito.ru\r\nanalitics.mk.ru\r\nanalog.avito.ru\r\nanalysis.avito.ru\r\nanalysis.vk.com\r\nanalytic.nalog.gov.ru\r\nanalytics-service.zoon.ru\r\nanalytics.afro.who.int\r\nanalytics.apteka.ru\r\nanalytics.avito.ru\r\nanalytics.beeline.ru\r\nanalytics.dns-shop.ru\r\nanalytics.pochta.ru\r\nanalytics.t2.ru\r\nanalytics.vk.com\r\nanalytics.yandex.ru\r\nanalytics.zoon.ru\r\nanand.avito.ru\r\nanand.vk.com\r\nananke.avito.ru\r\nananke.vk.com\r\nanapa.hh.ru\r\nanarchy.avito.ru\r\nanas.avito.ru\r\nanas.vk.com\r\nanastasiagorshkova.tinkoff.ru\r\nanatoliy.egorov.1959.yandex.ru\r\nanc.avito.ru\r\nanc.vk.com\r\nancor.youdo.com\r\nancord.vk.com\r\nand-up1-asbs.online.sberbank.ru\r\nand-up2-asbs.online.sberbank.ru\r\nand-up3-asbs.online.sberbank.ru\r\nand-up4-asbs.online.sberbank.ru\r\nand-up5-asbs.online.sberbank.ru\r\nand-up6-asbs.online.sberbank.ru\r\nand-up7-asbs.online.sberbank.ru\r\nand-upgf-asbs.online.sberbank.ru\r\nand-upsi-asbs.online.sberbank.ru\r\nand-upsi2-asbs.online.sberbank.ru\r\nand.avito.ru\r\nand.vk.com\r\nanders.avito.ru\r\nanderson.avito.ru\r\nanderson.vk.com\r\nandi.avito.ru\r\nandorra.avito.ru\r\nandorra.vk.com\r\nandray-0.yandex.ru\r\nandre.avito.ru\r\nandre.vk.com\r\nandrea.avito.ru\r\nandrea.vk.com\r\nandreas.avito.ru\r\nandrei.avito.ru\r\nandrei.vk.com\r\nandres.avito.ru\r\nandres.vk.com\r\nandrew.6644351.yandex.ru\r\nandrew.avito.ru\r\nandrew.vk.com\r\nandrey.88828.yandex.ru\r\nandrey.avito.ru\r\nandrey.silkin.1812.yandex.ru\r\nandrey.vk.com\r\nandroid-autotest-2.ing.k8s.dev.ivi.ru\r\nandroid-autotest-smoke.ing.k8s.dev.ivi.ru\r\nandroid-autotest.ing.k8s.dev.ivi.ru\r\nandroid-developer-wanted.2gis.ru\r\nandroid-ebook-cat2.litres.ru\r\nandroid-ebook-lv.litres.ru\r\nandroid-free-crime.litres.ru\r\nandroid-free-fantasy.litres.ru\r\nandroid-free-love.litres.ru\r\nandroid-free-scifi.litres.ru\r\nandroid-free-self.litres.ru\r\nandroid-free.litres.ru\r\nandroid-lib.litres.ru\r\nandroid-mobile-api.e.mail.ru\r\nandroid-mobile.ing.k8s.dev.ivi.ru\r\nandroid-us.apps.yandex.ru\r\nandroid.avito.ru\r\nandroid.consultant.ru\r\nandroid.ift.mdm.sber.ru\r\nandroid.ing.k8s.dev.ivi.ru\r\nandroid.litres.ru\r\nandroid.vk.com\r\nandromeda.avito.ru\r\nandromeda.mail.ru\r\nandromeda.rbc.ru\r\nandromeda.vk.com\r\nandromede.avito.ru\r\nandrosenko.ivan.2011.yandex.ru\r\nandy.avito.ru\r\nang2.yandex.ru\r\nangarsk.club.dns-shop.ru\r\nangarsk.drom.ru\r\nange.avito.ru\r\nange.vk.com\r\nangel.avito.ru\r\nangel.vk.com\r\nangela.avito.ru\r\nangela.vk.com\r\nangelc.mail.ru\r\nangelina.avito.ru\r\nangelina.vk.com\r\nangels.avito.ru\r\nangels.vk.com\r\nanger.avito.ru\r\nanger.vk.com\r\nangie.avito.ru\r\nangie.vk.com\r\nangius.yandex.ru\r\nangola.avito.ru\r\nangola.mail.ru\r\nangstrem.youdo.com\r\nangus.avito.ru\r\nangus.vk.com\r\nanh-mobileth.avito.ru\r\nanh-mobileth.vk.com\r\nanh.avito.ru\r\nanh.vk.com\r\nanhth.avito.ru\r\nani.avito.ru\r\nanil.avito.ru\r\nanil.vk.com\r\nanilkumar.avito.ru\r\nanilkumar.vk.com\r\nanimal.avito.ru\r\nanimal.vk.com\r\nanimals.avito.ru\r\nanimals.vk.com\r\nanimation.avito.ru\r\nanimation.vk.com\r\nanime.avito.ru\r\nanimes.avito.ru\r\nanis.avito.ru\r\nanita.avito.ru\r\nanita.vk.com\r\nank.alfabank.ru\r\nanketa-hr.mts.ru\r\nanketa.alfabank.ru\r\nanketa.alphabank.ru\r\nanketa.avito.ru\r\nanketa.beeline.ru\r\nanketa.gosuslugi.ru\r\nanketa.lenta.ru\r\nanketa.minzdrav.gov.ru\r\nanketa.tinkoff.ru\r\nanketa.vk.com\r\nanketa.vtb.ru\r\nankety.primorye.mts.ru\r\nankieta.avito.ru\r\nankieta.vk.com\r\nankiety.avito.ru\r\nankiety.vk.com\r\nanmakarov.ing.k8s.dev.ivi.ru\r\nanmfo.alfabank.ru\r\nann.avito.ru\r\nann.vk.com\r\nanna.340448.yandex.ru\r\nanna.avito.ru\r\nannapolis.avito.ru\r\nannapolis.vk.com\r\nanne.avito.ru\r\nanne.vk.com\r\nannex.avito.ru\r\nannie.avito.ru\r\nannie.vk.com\r\nannonces.avito.ru\r\nannonces.vk.com\r\nannuaire.avito.ru\r\nannuaire.vk.com\r\nannual.vtb.ru\r\nannualreport.avito.ru\r\nannualreport.vk.com\r\nannunci.avito.ru\r\nannunci.vk.com\r\nannya.maps.yandex.ru\r\nanon.avito.ru\r\nanonymous.avito.ru\r\nanonymous.vk.com\r\nans.avito.ru\r\nans.vk.com\r\nanswer.avito.ru\r\nanswer.vk.com\r\nanswers.avito.ru\r\nant.avito.ru\r\nant.proza.ru\r\nant.stihi.ru\r\nant.vk.com\r\nantares.avito.ru\r\nantares.vk.com\r\nanthony.avito.ru\r\nanthony.vk.com\r\nanthony.zdorovie-shkolnika.spb.aif.ru\r\nanti.avito.ru\r\nanti.vk.com\r\nanticor.rosatom.ru\r\nantiddos.beeline.ru\r\nantiddostest.mts.sovcombank.ru\r\nantigo.avito.ru\r\nantigo.vk.com\r\nantigua.avito.ru\r\nantihype.srv.ptr.meduza.io\r\nantihype.staging.meduza.io\r\nantihypews.meduza.io\r\nantihypews.second.meduza.io\r\nantiques.avito.ru\r\nantirobot.yandex.ru\r\nantispam.avito.ru\r\nantispam.mail.ru\r\nantispam.vk.com\r\nantispam.yandex.ru\r\nantispam2.avito.ru\r\nantispam2.vk.com\r\nantivirus.avito.ru\r\nanto.avito.ru\r\nanton.avito.ru\r\nantonio.avito.ru\r\nantony.avito.ru\r\nanubis.avito.ru\r\nanuncios.avito.ru\r\nanunt1.duma.gov.ru\r\nanunturi.avito.ru\r\nany-1f.yandex.ru\r\nany-amer.dev.api.max.com\r\nany-amer.euc1.prd.api.max.com\r\nany-amer.euc1.stg.api.max.com\r\nany-amer.eun1.prd.api.max.com\r\nany-amer.euw1.prd.api.max.com\r\nany-amer.euw1.stg.api.max.com\r\nany-amer.int.api.max.com\r\nany-amer.prd.api.max.com\r\nany-amer.stg.api.max.com\r\nany-amer.use.dev.api.max.com\r\nany-amer.use.int.api.max.com\r\nany-amer.use.prd.api.max.com\r\nany-amer.use.stg.api.max.com\r\nany-amer.use1.dev.api.max.com\r\nany-amer.use1.int.api.max.com\r\nany-amer.use1.prd.api.max.com\r\nany-amer.use1.stg.api.max.com\r\nany-amer.use2.prd.api.max.com\r\nany-amer.use2.stg.api.max.com\r\nany-amer.usw2.int.api.max.com\r\nany-amer.usw2.prd.api.max.com\r\nany-amer.usw2.stg.api.max.com\r\nany-any.dev.api.max.com\r\nany-any.euc1.prd.api.max.com\r\nany-any.euc1.stg.api.max.com\r\nany-any.eun1.prd.api.max.com\r\nany-any.euw1.prd.api.max.com\r\nany-any.euw1.stg.api.max.com\r\nany-any.int.api.max.com\r\nany-any.prd.api.max.com\r\nany-any.stg.api.max.com\r\nany-any.use.dev.api.max.com\r\nany-any.use.int.api.max.com\r\nany-any.use.prd.api.max.com\r\nany-any.use.stg.api.max.com\r\nany-any.use1.dev.api.max.com\r\nany-any.use1.int.api.max.com\r\nany-any.use1.prd.api.max.com\r\nany-any.use1.stg.api.max.com\r\nany-any.use2.prd.api.max.com\r\nany-any.use2.stg.api.max.com\r\nany-any.usw2.int.api.max.com\r\nany-any.usw2.prd.api.max.com\r\nany-any.usw2.stg.api.max.com\r\nany-apac.dev.api.max.com\r\nany-apac.euc1.stg.api.max.com\r\nany-apac.euw1.stg.api.max.com\r\nany-apac.int.api.max.com\r\nany-apac.stg.api.max.com\r\nany-apac.use.dev.api.max.com\r\nany-apac.use.int.api.max.com\r\nany-apac.use.stg.api.max.com\r\nany-apac.use1.dev.api.max.com\r\nany-apac.use1.int.api.max.com\r\nany-apac.use1.stg.api.max.com\r\nany-apac.use2.stg.api.max.com\r\nany-apac.usw2.int.api.max.com\r\nany-apac.usw2.stg.api.max.com\r\nany-emea.dev.api.max.com\r\nany-emea.euc1.prd.api.max.com\r\nany-emea.euc1.stg.api.max.com\r\nany-emea.eun1.prd.api.max.com\r\nany-emea.euw1.prd.api.max.com\r\nany-emea.euw1.stg.api.max.com\r\nany-emea.int.api.max.com\r\nany-emea.prd.api.max.com\r\nany-emea.stg.api.max.com\r\nany-emea.use.dev.api.max.com\r\nany-emea.use.int.api.max.com\r\nany-emea.use.prd.api.max.com\r\nany-emea.use.stg.api.max.com\r\nany-emea.use1.dev.api.max.com\r\nany-emea.use1.int.api.max.com\r\nany-emea.use1.prd.api.max.com\r\nany-emea.use1.stg.api.max.com\r\nany-emea.use2.prd.api.max.com\r\nany-emea.use2.stg.api.max.com\r\nany-emea.usw2.int.api.max.com\r\nany-emea.usw2.prd.api.max.com\r\nany-emea.usw2.stg.api.max.com\r\nany-latam.dev.api.max.com\r\nany-latam.euc1.prd.api.max.com\r\nany-latam.euc1.stg.api.max.com\r\nany-latam.eun1.prd.api.max.com\r\nany-latam.euw1.prd.api.max.com\r\nany-latam.euw1.stg.api.max.com\r\nany-latam.int.api.max.com\r\nany-latam.prd.api.max.com\r\nany-latam.stg.api.max.com\r\nany-latam.use.dev.api.max.com\r\nany-latam.use.int.api.max.com\r\nany-latam.use.prd.api.max.com\r\nany-latam.use.stg.api.max.com\r\nany-latam.use1.dev.api.max.com\r\nany-latam.use1.int.api.max.com\r\nany-latam.use1.prd.api.max.com\r\nany-latam.use1.stg.api.max.com\r\nany-latam.use2.prd.api.max.com\r\nany-latam.use2.stg.api.max.com\r\nany-latam.usw2.int.api.max.com\r\nany-latam.usw2.prd.api.max.com\r\nany-latam.usw2.stg.api.max.com\r\nany.avito.ru\r\nany.yandex.ru\r\nanycast.office.tutu.ru\r\nanyserver.avito.ru\r\nanything.avito.ru\r\nanyway.alfabank.ru\r\nanywhere.avito.ru\r\nanzhero-sudzhensk.hh.ru\r\nao.avito.ru\r\naoa.avito.ru\r\naoas.consultant.ru\r\naoas.garant.ru\r\naoi.avito.ru\r\naol.avito.ru\r\naos-creative.avito.ru\r\naouez.disk.mts.ru\r\naovivo.avito.ru\r\nap-dev.bdl.rutube.ru\r\nap.avito.ru\r\nap.nsportal.ru\r\nap1.avito.ru\r\nap1.esbstage.worldbank.org\r\nap2.avito.ru\r\napache-mirror.rbc.ru\r\napache.avito.ru\r\napadp.openbank.ru\r\napapi.alfabank.ru\r\napartment.avito.ru\r\napc.avito.ru\r\napc1.avito.ru\r\napc2.avito.ru\r\napc4.avito.ru\r\nape.avito.ru\r\napeople.open.ru\r\napetrushishin.ing.k8s.dev.ivi.ru\r\napex.avito.ru\r\napex.balance.yandex.ru\r\napf.mail.ru\r\napf1.mail.ru\r\napf10.mail.ru\r\napf11.i.mail.ru\r\napf12.i.mail.ru\r\napf13.i.mail.ru\r\napf14.i.mail.ru\r\napf15.i.mail.ru\r\napf2.mail.ru\r\napf20.i.mail.ru\r\napf21.mail.ru\r\napf22.mail.ru\r\napf23.mail.ru\r\napf24.mail.ru\r\napf25.mail.ru\r\napf26.mail.ru\r\napf27.mail.ru\r\napf28.mail.ru\r\napf29.mail.ru\r\napf3.mail.ru\r\napf30.mail.ru\r\napf31.mail.ru\r\napf32.mail.ru\r\napf33.mail.ru\r\napf34.mail.ru\r\napf35.mail.ru\r\napf36.mail.ru\r\napf37.mail.ru\r\napf38.mail.ru\r\napf39.mail.ru\r\napf4.mail.ru\r\napf40.mail.ru\r\napf41.mail.ru\r\napf42.mail.ru\r\napf43.mail.ru\r\napf44.mail.ru\r\napf45.mail.ru\r\napf46.mail.ru\r\napf47.mail.ru\r\napf48.mail.ru\r\napf49.mail.ru\r\napf5.mail.ru\r\napf50.mail.ru\r\napf51.mail.ru\r\napf52.mail.ru\r\napf53.mail.ru\r\napf54.mail.ru\r\napf55.mail.ru\r\napf56.mail.ru\r\napf6.mail.ru\r\napf7.mail.ru\r\napf8.mail.ru\r\napf9.mail.ru\r\napftest1.mail.ru\r\napftest12.mail.ru\r\napfv1.mail.ru\r\naphrodite.avito.ru\r\napi-abook.yandex.ru\r\napi-an.tutu.ru\r\napi-ast-to-hd.avito.ru\r\napi-audience.yandex.ru\r\napi-bus.partners.tutu.ru\r\napi-bus.tutu.ru\r\napi-cert.rosbank.ru\r\napi-common.lb.tinkoff.ru\r\napi-corr.tass.ru\r\napi-cp.rosatom.ru\r\napi-demo.mdrive.magnit.ru\r\napi-dev.avito.ru\r\napi-dev.bdl.rutube.ru\r\napi-dev.k8s.rg.ru\r\napi-dev.kino-teatr.ru\r\napi-dev.rosbank.ru\r\napi-doc.domofon.mts.ru\r\napi-dst.rosbank.ru\r\napi-file.9111.ru\r\napi-fotki.yandex.ru\r\napi-gateway-infra.yc.mvideo.ru\r\napi-gateway-nft.yc.mvideo.ru\r\napi-gw.mvideo.ru\r\napi-invest-gw.lb.tinkoff.ru\r\napi-invest.lb.tinkoff.ru\r\napi-lenta.yandex.ru\r\napi-maps.yandex.ru\r\napi-marketolog.mts.ru\r\napi-metrica.yandex.ru\r\napi-metrika-test.yandex.ru\r\napi-metrika.yandex.ru\r\napi-mmobile.magnit.ru\r\napi-mobile2020.garant.ru\r\napi-new.rosbank.ru\r\napi-photobank.iz.ru\r\napi-production.k8s.rg.ru\r\napi-sandbox.direct.yandex.ru\r\napi-seller-mobile.ozon.ru\r\napi-seller.ozon.ru\r\napi-sendsay-webhooks-nc.tinkoff.ru\r\napi-stage.k8s.rg.ru\r\napi-test.avito.ru\r\napi-test.kino-teatr.ru\r\napi-test.lemanapro.ru\r\napi-test.mkb.ru\r\napi-test.moscowapp.mos.ru\r\napi-test.rosbank.ru\r\napi-test2-test.moscowapp.mos.ru\r\napi-test3.moscowapp.mos.ru\r\napi-testing.ott.kinopoisk.ru\r\napi-time.tbank.ru\r\napi-v1cdn.rosatom.ru\r\napi-warp.max.ru\r\napi-x.tutu.ru\r\napi-yaru.yandex.ru\r\napi.1tv.ru\r\napi.2gis.ru\r\napi.30.megafon.ru\r\napi.9111.ru\r\napi.acquisition-gwe.plus.kinopoisk.ru\r\napi.afisha.ru\r\napi.alfabank.ru\r\napi.appmetrica.yandex.ru\r\napi.apps.sberbank.ru\r\napi.appservice.azuremsk.ec.mts.ru\r\napi.apteka.ru\r\napi.atd.rambler.ru\r\napi.avito.ru\r\napi.b.litres.ru\r\napi.banki.ru\r\napi.barmen.blizko.ru\r\napi.barmen.pulscen.ru\r\napi.bdkm-support-test.magnit.ru\r\napi.bdkm-test.magnit.ru\r\napi.bdkm.magnit.ru\r\napi.beeline.ru\r\napi.beta.m.soft.yandex.ru\r\napi.blago.magnit.ru\r\napi.booking-preview.yandex.ru\r\napi.booking.yandex.ru\r\napi.botplatform.rcs.ims.tele2.ru\r\napi.browser.yandex.ru\r\napi.businessconf.sber.ru\r\napi.cdn.beeline.ru\r\napi.cert.rosbank.ru\r\napi.championat.com\r\napi.clearml.cgu.mchs.ru\r\napi.cloud.mail.ru\r\napi.cloud.mts.ru\r\napi.content.market.yandex.ru\r\napi.cs7777.vk.com\r\napi.demo.mdrive.magnit.ru\r\napi.desk.kp.ru\r\napi.dev.avito.ru\r\napi.dev.lxp.academy.who.int\r\napi.dev.videoplatform.rambler.ru\r\napi.developer.sber.ru\r\napi.developer.store.yandex.ru\r\napi.direct.yandex.ru\r\napi.dmpkit.lemanapro.ru\r\napi.dom.gosuslugi.ru\r\napi.dom.t2.ru\r\napi.dom.tele2.ru\r\napi.domofon.mts.ru\r\napi.drive.megafon.ru\r\napi.drive2.ru\r\napi.dsp.rambler.ru\r\napi.dst.rosbank.ru\r\napi.duma.gov.ru\r\napi.euronews.com\r\napi.ext.avito.ru\r\napi.f.stage.secret.rambler.ru\r\napi.faas-test.cloud.mts.ru\r\napi.factoring.rosbank.ru\r\napi.fas.gov.ru\r\napi.finance.ozon.ru\r\napi.forum2.mail.ru\r\napi.forum3.mail.ru\r\napi.games.rambler.ru\r\napi.garant.ru\r\napi.gibdd.mail.ru\r\napi.gismeteo.ru\r\napi.guides.afisha.ru\r\napi.hh.ru\r\napi.hw1-platform.tutu.ru\r\napi.hw2-prod-platform.tutu.ru\r\napi.hw3-prod-platform.tutu.ru\r\napi.iaas.beeline.ru\r\napi.id-stage.afisha.ru\r\napi.id.afisha.ru\r\napi.ift.mdm.sber.ru\r\napi.innovation.vtb.ru\r\napi.inspire.megafon.ru\r\napi.int.avito.ru\r\napi.internal.lemanapro.ru\r\napi.ipoteka.alfabank.ru\r\napi.irm.sberbank.ru\r\napi.ivi.ru\r\napi.jazz.sber.ru\r\napi.k8s.rg.ru\r\napi.kassa.yandex.ru\r\napi.kino-teatr.ru\r\napi.kino.1tv.ru\r\napi.kino.yandex.ru\r\napi.kinopoisk.ru\r\napi.kpak.dom.test.gosuslugi.ru\r\napi.lbs.heroism.yandex.ru\r\napi.lbs.mobile.maps.heroism.yandex.ru\r\napi.lbs.yandex.ru\r\napi.learn.mchs.ru\r\napi.learning.ozon.ru\r\napi.lemanapro.ru\r\napi.lenta.ru\r\napi.litres.ru\r\napi.lk.psbank.ru\r\napi.maps.yandex.ru\r\napi.master.yandex.ru\r\napi.max.ru\r\napi.mdrive.magnit.ru\r\napi.meduza.io\r\napi.megafon.ru\r\napi.memory.mts.ru\r\napi.metr.yandex.ru\r\napi.mir.afisha.ru\r\napi.mk.ru\r\napi.mos.ru\r\napi.moscowapp.mos.ru\r\napi.msg.tass.ru\r\napi.mvideo.ru\r\napi.mycareer.lemanapro.ru\r\napi.myteam.tass.ru\r\napi.new.market.pochta.ru\r\napi.news.rambler.ru\r\napi.nit.dom.test.gosuslugi.ru\r\napi.nps.megafon.ru\r\napi.ok.ru\r\napi.okd4-control-platform.tutu.ru\r\napi.okd4-vcenter-testing-platform.tutu.ru\r\napi.open.ru\r\napi.otp.sberbank.ru\r\napi.ott.kinopoisk.ru\r\napi.ozon.ru\r\napi.partner.market.yandex.ru\r\napi.partner.yandex.ru\r\napi.partners.megafon.ru\r\napi.passport-rc.yandex.ru\r\napi.passport-test.yandex.ru\r\napi.passport.yandex.ru\r\napi.pay.mail.ru\r\napi.pdd.yandex.ru\r\napi.perekrestok.ru\r\napi.platform.tutu.ru\r\napi.plus.kinopoisk.ru\r\napi.plus.tst.kinopoisk.ru\r\napi.prod.lxp.academy.who.int\r\napi.profi.ru\r\napi.profile.sber.ru\r\napi.promo1tb.tele2.ru\r\napi.psi02.dom.test.gosuslugi.ru\r\napi.qa.mdrive.magnit.ru\r\napi.rabota.yandex.ru\r\napi.rasp.yandex.ru\r\napi.realty.spec.kp.ru\r\napi.ren.tv\r\napi.rosbalt.ru\r\napi.rosbank.ru\r\napi.row.net.ixbt.com\r\napi.sber.ru\r\napi.sberbank.ru\r\napi.sberstore.sberbank.ru\r\napi.seller.alfabank.ru\r\napi.sit01.dom.test.gosuslugi.ru\r\napi.social-test.yandex.ru\r\napi.social.yandex.ru\r\napi.spending.ach.gov.ru\r\napi.spending.gov.ru\r\napi.sport.news.yandex.ru\r\napi.sport.yandex.ru\r\napi.stage.championat.com\r\napi.stage.videoplatform.rambler.ru\r\napi.staging.avito.ru\r\napi.staging.meduza.io\r\napi.svm.psbank.ru\r\napi.talkbot-factory.tinkoff.ru\r\napi.tass.ru\r\napi.tau.vk.com\r\napi.teams.infra.rbc.ru\r\napi.tech.yandex.ru\r\napi.tele2.ru\r\napi.test.avito.ru\r\napi.test.crm.2gis.ru\r\napi.test.ivi.ru\r\napi.test.meduza.io\r\napi.testing1-platform.tutu.ru\r\napi.tickets.prestable.yandex.ru\r\napi.tickets.yandex.ru\r\napi.time-ops.tbank.ru\r\napi.tinkoff.ru\r\napi.tko.kostroma.gov.ru\r\napi.torg.mail.ru\r\napi.transport-test.mironline.ru\r\napi.transport-tppintegration.mironline.ru\r\napi.transport-tppuat.mironline.ru\r\napi.transport.mironline.ru\r\napi.travel.spec.kp.ru\r\napi.tvoigorod.tele2.ru\r\napi.university.ozon.ru\r\napi.uspeh.megafon.ru\r\napi.video.duma.gov.ru\r\napi.video.mts.ru\r\napi.vimpelcom.ru\r\napi.vk.com\r\napi.vp-dev01.rambler.ru\r\napi.vp-stage01.rambler.ru\r\napi.vp.rambler.ru\r\napi.vrpark.tele2.ru\r\napi.vtb.ru\r\napi.weather-tst.yandex.ru\r\napi.weather.yandex.ru\r\napi.webinar.2gis.ru\r\napi.who.iz.ru\r\napi.who.lxp.academy.who.int\r\napi.www.webinar.2gis.ru\r\napi.yandex.ru\r\napi.youdo.com\r\napi.zabota.magnit.ru\r\napi.zakon.ru\r\napi.zakupki.mos.ru\r\napi.zb.2gis.ru\r\napi.zoon.ru\r\napi01e.maps.yandex.ru\r\napi01f.maps.yandex.ru\r\napi01h.maps.yandex.ru\r\napi02e.maps.yandex.ru\r\napi02f.maps.yandex.ru\r\napi02h.maps.yandex.ru\r\napi03e.maps.yandex.ru\r\napi04e.maps.yandex.ru\r\napi04f.maps.yandex.ru\r\napi04h.maps.yandex.ru\r\napi05e.maps.yandex.ru\r\napi05f.maps.yandex.ru\r\napi05h.maps.yandex.ru\r\napi1.avito.ru\r\napi1.open.ru\r\napi1.openbank.ru\r\napi2.avito.ru\r\napi2.kino-teatr.ru\r\napi2.kinopoisk.ru\r\napi2.openbank.ru\r\napi3.avito.ru\r\napib1.i.mail.ru\r\napib2.i.mail.ru\r\napicity.beeline.ru\r\napicouriers.open.ru\r\napidev.alfabank.ru\r\napidev.avito.ru\r\napie.worldbank.org\r\napiedev.worldbank.org\r\napieprd.worldbank.org\r\napieqa.worldbank.org\r\napiestg.worldbank.org\r\napietst.worldbank.org\r\napif11.i.mail.ru\r\napif12.i.mail.ru\r\napif13.i.mail.ru\r\napif14.i.mail.ru\r\napif15.i.mail.ru\r\napif20.i.mail.ru\r\napif21.i.mail.ru\r\napif22.i.mail.ru\r\napif23.i.mail.ru\r\napif24.i.mail.ru\r\napif25.i.mail.ru\r\napif30.i.mail.ru\r\napif31.i.mail.ru\r\napigw.rbc.ru\r\napigw.worldbank.org\r\napigwcc.rosbank.ru\r\napigwdev.worldbank.org\r\napigwdevei.worldbank.org\r\napigwdevexi.worldbank.org\r\napigwdevext.worldbank.org\r\napigwext.worldbank.org\r\napigwqa.worldbank.org\r\napigwqaext.worldbank.org\r\napigwtst.worldbank.org\r\napihack.vtb.ru\r\napiktv.rosatom.ru\r\napim.psbank.ru\r\napim.rosbank.ru\r\napimc.worldbank.org\r\napimcdev.worldbank.org\r\napimcexi.worldbank.org\r\napimcqa.worldbank.org\r\napimcqaexi.worldbank.org\r\napimcsndbx.worldbank.org\r\napimctst.worldbank.org\r\napimdev.psbank.ru\r\napimtst.psbank.ru\r\napimw.apps.sberbank.ru\r\napimw.otp.sberbank.ru\r\napinpd.nalog.ru\r\napip.sakha.gov.ru\r\napipoisk.beeline.ru\r\napiportal.worldbank.org\r\napiportalcr.minzdrav.gov.ru\r\napiportaldev.worldbank.org\r\napiportalext.worldbank.org\r\napiportalqa.worldbank.org\r\napiportalqaext.worldbank.org\r\napiportalsndbx.worldbank.org\r\napiportaltst.worldbank.org\r\napis.avito.ru\r\napis.who.int\r\napis.wildberries.ru\r\napiservicecouriers.open.ru\r\napiservicecurers.open.ru\r\napistandart.minzdrav.gov.ru\r\napitest.avito.ru\r\napitest.ok.ru\r\napitoken-test.mkb.ru\r\napivotingstd.minzdrav.gov.ru\r\napiws.alfabank.ru\r\napiwsg.alfabank.ru\r\napk.2gis.ru\r\napk.avito.ru\r\napk.open.ru\r\napk.roseltorg.ru\r\napk.vtb.ru\r\napl.avito.ru\r\naplicaciones.avito.ru\r\naplicativos.avito.ru\r\naplikasi.avito.ru\r\naplus.avito.ru\r\napmaxoptra03.open.ru\r\napns.ift.mdm.sber.ru\r\napo.who.int\r\napollo.avito.ru\r\napollo.gov.ru\r\napollo2.avito.ru\r\napollon.avito.ru\r\napollotyres.kino-teatr.ru\r\napolo.avito.ru\r\napp-api-demo.mdrive.magnit.ru\r\napp-aramismp-tst01.open.ru\r\napp-bord002.open.ru\r\napp-demo.demo.mdrive.magnit.ru\r\napp-demo.mdrive.magnit.ru\r\napp-dev.kino-teatr.ru\r\napp-dib001.open.ru\r\napp-dib002.open.ru\r\napp-gen-gms-br.open.ru\r\napp-gen-gms-rgsb.open.ru\r\napp-gen-gms.open.ru\r\napp-gen-wa-edna-npf.open.ru\r\napp-gen-wa-edna.open.ru\r\napp-gen-webrtcdmz1.open.ru\r\napp-gen-webrtcdmz10.open.ru\r\napp-gen-webrtcdmz11.open.ru\r\napp-gen-webrtcdmz12.open.ru\r\napp-gen-webrtcdmz13.open.ru\r\napp-gen-webrtcdmz14.open.ru\r\napp-gen-webrtcdmz15.open.ru\r\napp-gen-webrtcdmz16.open.ru\r\napp-gen-webrtcdmz2.open.ru\r\napp-gen-webrtcdmz3.open.ru\r\napp-gen-webrtcdmz4.open.ru\r\napp-gen-webrtcdmz5.open.ru\r\napp-gen-webrtcdmz6.open.ru\r\napp-gen-webrtcdmz7.open.ru\r\napp-gen-webrtcdmz8.open.ru\r\napp-gen-webrtcdmz9.open.ru\r\napp-gen-wfm.open.ru\r\napp-iva-main001.open.ru\r\napp-iva-main002.open.ru\r\napp-iva-media001.open.ru\r\napp-iva-media002.open.ru\r\napp-iva-media003.open.ru\r\napp-iva-test001.open.ru\r\napp-kafka.open.ru\r\napp-mic001.open.ru\r\napp-mobileld001.open.ru\r\napp-mobiron002.open.ru\r\napp-mobiron003.open.ru\r\napp-mobiron004.open.ru\r\napp-mobiron005.open.ru\r\napp-mobiron006.open.ru\r\napp-mobiron007.open.ru\r\napp-mobiron008.open.ru\r\napp-mobiron009.open.ru\r\napp-msbbp001.open.ru\r\napp-nalmon001.dmz.open.ru\r\napp-pbwebmon-r1.open.ru\r\napp-pbwebmon-r2.open.ru\r\napp-pbwebmon-r3.open.ru\r\napp-radius002.open.ru\r\napp-safephone001.open.ru\r\napp-si-ext001.dmz.open.ru\r\napp-spq02.open.ru\r\napp-suokiosk013.dmz.open.ru\r\napp-suongnx001.open.ru\r\napp-suosmk001.open.ru\r\napp-suosmk002.open.ru\r\napp-tibco-dmz.open.ru\r\napp-wtlan002.open.ru\r\napp-wtlan003.open.ru\r\napp-wtlan004.open.ru\r\napp-xen-mobile001.open.ru\r\napp.avito.ru\r\napp.clearml.cgu.mchs.ru\r\napp.cloud.yandex.ru\r\napp.csut.mchs.ru\r\napp.demo.mdrive.magnit.ru\r\napp.domclick.ru\r\napp.eldorado.ru\r\napp.factoring.megafon.ru\r\napp.kino-teatr.ru\r\napp.lang.beeline.ru\r\napp.ml.megafon.ru\r\napp.mvideo.ru\r\napp.ntv.ru\r\napp.open.ru\r\napp.parlament.gov.ru\r\napp.perekrestok.ru\r\napp.qa.mdrive.magnit.ru\r\napp.rbc.ru\r\napp.rs.premier.one\r\napp.rs2.premier.one\r\napp.rustories.sber.ru\r\napp.rzd.ru\r\napp.sber.ru\r\napp.sberbank.ru\r\napp.sovcombank.ru\r\napp.space.dns-shop.ru\r\napp.stage.championat.com\r\napp.talkbot-factory.tinkoff.ru\r\napp.uctrader.unicreditbank.ru\r\napp.vtb.ru\r\napp01.sbercontact.sberbank.ru\r\napp04.sbercontact.sberbank.ru\r\napp05.sbercontact.sberbank.ru\r\napp07.sbercontact.sberbank.ru\r\napp1.avito.ru\r\napp1.esbstage.worldbank.org\r\napp1c.open.ru\r\napp2.avito.ru\r\napp3.avito.ru\r\napp4.avito.ru\r\napp4t2.tele2.ru\r\napp5.avito.ru\r\napp6.avito.ru\r\napp7.avito.ru\r\napp8.avito.ru\r\napp9.avito.ru\r\nappapi.myoffice.sberbank.ru\r\napparat.gov.ru\r\nappcgi.avito.ru\r\nappdbo1.open.ru\r\nappdev.avito.ru\r\nappeals.avito.ru\r\nappel.avito.ru\r\nappgate.tele2.ru\r\nappguide.tele2.ru\r\nappius.lemanapro.ru\r\napple.avito.ru\r\napple.megafon.ru\r\napple.stage.transport.vtb.ru\r\napplepay.tele2.ru\r\nappli.avito.ru\r\napplicant.worldbank.org\r\napplicantdev.worldbank.org\r\napplicantqa.worldbank.org\r\napplicantstg.worldbank.org\r\napplicanttrn.worldbank.org\r\napplicanttst.worldbank.org\r\napplication.avito.ru\r\napplications.avito.ru\r\napplications.euro.who.int\r\napplink.championat.com\r\napply-apihack.vtb.ru\r\napply-architechhack.vtb.ru\r\napply-moretech.vtb.ru\r\napply.avito.ru\r\napply.startup.mts.ru\r\nappmetrica.yandex.ru\r\nappmetrika.yandex.ru\r\napproval.avito.ru\r\napps.afro.who.int\r\napps.avito.ru\r\napps.collaboration-uat.worldbank.org\r\napps.collaboration.worldbank.org\r\napps.desk.kp.ru\r\napps.dev.lxp.academy.who.int\r\napps.hw1-platform.tutu.ru\r\napps.hw1-preprod-platform.tutu.ru\r\napps.hw2-prod-platform.tutu.ru\r\napps.hw3-prod-platform.tutu.ru\r\napps.mts.ru\r\napps.open.ru\r\napps.platform.tutu.ru\r\napps.prod.lxp.academy.who.int\r\napps.sber.ru\r\napps.sberbank.ru\r\napps.searo.who.int\r\napps.tele2.ru\r\napps.testing-platform.tutu.ru\r\napps.testing1-platform.tutu.ru\r\napps.testing2-platform.tutu.ru\r\napps.testing3-platform.tutu.ru\r\napps.testing4-platform.tutu.ru\r\napps.who.int\r\napps.who.lxp.academy.who.int\r\napps.yandex.ru\r\napps.ztc-platform.tutu.ru\r\napps1.avito.ru\r\napps2.avito.ru\r\napps3.avito.ru\r\nappsclub.t2.ru\r\nappsclub.tele2.ru\r\nappscsec.worldbank.org\r\nappscsecqa.worldbank.org\r\nappservice.azuremsk.ec.mts.ru\r\nappssec.worldbank.org\r\nappssecdev.worldbank.org\r\nappssecqa.worldbank.org\r\nappssecqa2.worldbank.org\r\nappstore.avito.ru\r\napptest.avito.ru\r\nappweb.broker.vtb.ru\r\napr.avito.ru\r\napramed.afro.who.int\r\naprf.credit-registry.nalog.ru\r\napricot.avito.ru\r\napricot.tiu.ru\r\napril-dev01e.yandex.ru\r\napril-dev01i.ppc.yandex.ru\r\napril-test.yandex.ru\r\napril.avito.ru\r\naprisostg.avito.ru\r\naproxy.avito.ru\r\naps.avito.ru\r\napt.avito.ru\r\napteka-bsl.magnit.ru\r\napteka-highload.magnit.ru\r\napteka-lenvendo.magnit.ru\r\napteka-prod.magnit.ru\r\napteka-qsoft.magnit.ru\r\napteka-stage.magnit.ru\r\napteka-stage2.magnit.ru\r\napteka-test.magnit.ru\r\napteka-test1.magnit.ru\r\napteka-test10.magnit.ru\r\napteka-test11.magnit.ru\r\napteka-test2.magnit.ru\r\napteka-test3.magnit.ru\r\napteka-test4.magnit.ru\r\napteka-test5.magnit.ru\r\napteka-test6.magnit.ru\r\napteka-test7.magnit.ru\r\napteka-test8.magnit.ru\r\napteka-test9.magnit.ru\r\napteka.avito.ru\r\napteka.magnit.ru\r\napteka.megafon.ru\r\napteka.vprok.ru\r\napteki.open.ru\r\napthw.2gis.ru\r\napu.avito.ru\r\napunts2.avito.ru\r\napus.avito.ru\r\naq.avito.ru\r\naqffkx7lrb9nisjq5wcippw-adr.ops.beeline.ru\r\naqua.avito.ru\r\naqua.zdorovie-shkolnika.spb.aif.ru\r\naquamarine.avito.ru\r\naquarium.avito.ru\r\naquarium.lenta.ru\r\naquarius.avito.ru\r\naquila.avito.ru\r\nar.avito.ru\r\nar.culture.ru\r\nar.gov.ru\r\nar.tele2.ru\r\nar2012.rzd.ru\r\nar2013.rzd.ru\r\nar2014.rosatom.ru\r\nar2014.rzd.ru\r\nar2015.rosatom.ru\r\nar2015.rzd.ru\r\nar2016.rosatom.ru\r\nar2016.rzd.ru\r\nar2017.nornickel.com\r\nar2017.rzd.ru\r\nar2017.vtb.ru\r\nar2017.x5.ru\r\nar2018.invest.mvideo.ru\r\nar2018.nornickel.com\r\nar2018.rostelecom.ru\r\nar2018.rzd.ru\r\nar2018.vtb.ru\r\nar2018.x5.ru\r\nar2019.megafon.ru\r\nar2019.mkb.ru\r\nar2019.mts.ru\r\nar2019.nornickel.com\r\nar2019.rostelecom.ru\r\nar2019.rzd.ru\r\nar2019.vtb.ru\r\nar2020.mkb.ru\r\nar2020.nornickel.com\r\nar2020.rzd.ru\r\nar2020.vtb.ru\r\nar2021.nornickel.com\r\nar2021.pochta.ru\r\nar2021.rzd.ru\r\nar2022.nornickel.com\r\nar2023.nornickel.com\r\nar2024.nornickel.com\r\nara.avito.ru\r\nara.mail.ru\r\narab.avito.ru\r\narabic.avito.ru\r\narabic.euronews.com\r\naragorn.avito.ru\r\naragorn.yandex.ru\r\naramis-mp.open.ru\r\naramis.avito.ru\r\naras.avito.ru\r\narb.consultant.ru\r\narb123.consultant.ru\r\narba.mail.ru\r\narbat.mos.ru\r\narbat5.council.gov.ru\r\narbchain.consultant.ru\r\narbitr.garant.ru\r\narc-utils.kino-teatr.ru\r\narc.avito.ru\r\narc6h3ery.vk.com\r\narcade.avito.ru\r\narcadia-01f.yandex.ru\r\narcadia-01i.yandex.ru\r\narcadia-01m.yandex.ru\r\narcadia-02f.yandex.ru\r\narcadia-02i.yandex.ru\r\narcadia-02m.yandex.ru\r\narcadia-03s.yandex.ru\r\narcadia-04s.yandex.ru\r\narcadia-05s.yandex.ru\r\narcadia-fol.yandex.ru\r\narcadia-iva.yandex.ru\r\narcadia-myt.yandex.ru\r\narcadia-ro.yandex.ru\r\narcadia.avito.ru\r\narcadia.yandex.ru\r\narcgis.avito.ru\r\narch-3545-www.k.avito.ru\r\narch.avito.ru\r\narchangel.100592.yandex.ru\r\narchangel.avito.ru\r\narcher.avito.ru\r\narchitechhack.vtb.ru\r\narchitecture.avito.ru\r\narchiv.avito.ru\r\narchiv.council.gov.ru\r\narchivarius.garant.ru\r\narchive-kim-atom.roseltorg.ru\r\narchive.aif.ru\r\narchive.alania.gov.ru\r\narchive.avito.ru\r\narchive.dev.iiot.gov.ru\r\narchive.government.ru\r\narchive.gulag.tass.ru\r\narchive.kremlin.ru\r\narchive.media.worldbank.org\r\narchive.meduza.io\r\narchive.rshb.ru\r\narchives.avito.ru\r\narchives.gov.ru\r\narchivesholdings.worldbank.org\r\narchivio.avito.ru\r\narchivo.avito.ru\r\narchiwum.avito.ru\r\narcnews5-00.yandex.ru\r\narcnews6-00.yandex.ru\r\narcnews7-00.yandex.ru\r\narcsar.mchs.gov.ru\r\narcsar.mchs.ru\r\narcsar.organizations.mchs.gov.ru\r\narctest.avito.ru\r\narctic.avito.ru\r\narctic.gov.ru\r\narcticgames.tass.ru\r\narcturus.avito.ru\r\narcula.mail.ru\r\narda.avito.ru\r\narden.yandex.ru\r\narea.avito.ru\r\narea51.avito.ru\r\nareh.2018.yandex.ru\r\narena.avito.ru\r\narena.life.ru\r\narenaproblemsiteid.test.euronews.com\r\narenda.avito.ru\r\narenda.beeline.ru\r\nares.avito.ru\r\nares.roseltorg.ru\r\narg.avito.ru\r\nargentina.avito.ru\r\nargo.avito.ru\r\nargocd.staging.tech.mvideo.ru\r\nargocd.tech.mvideo.ru\r\nargon.avito.ru\r\nargos.avito.ru\r\nargument.magnit.ru\r\nargus.avito.ru\r\narh.beeline.ru\r\narh.dev.kp.ru\r\narh.kp.ru\r\narh.mk.ru\r\narh.tele2.ru\r\narhangel.109.yandex.ru\r\narhangelsk.avito.ru\r\narhangelsk.dev.home.megafon.ru\r\narhangelsk.drom.ru\r\narhangelsk.fas.gov.ru\r\narhangelsk.megafon.ru\r\narhangelsk.shop.megafon.ru\r\narhimed.mail.ru\r\narhiva.avito.ru\r\nari.avito.ru\r\naria.avito.ru\r\nariadne.avito.ru\r\nariana.avito.ru\r\nariane.avito.ru\r\narie.avito.ru\r\nariel.avito.ru\r\naries.avito.ru\r\narif.avito.ru\r\narin.api-maps.yandex.ru\r\narin.search-maps.yandex.ru\r\narion.avito.ru\r\narirang.avito.ru\r\naris.avito.ru\r\narizona.avito.ru\r\narjuna.avito.ru\r\nark.avito.ru\r\nark.beeline.ru\r\narkansas.avito.ru\r\narkh.dns-shop.ru\r\narkhangelsk.babyblog.ru\r\narkhangelsk.beeline.ru\r\narkhangelsk.dns-shop.ru\r\narkhangelsk.lemanapro.ru\r\narkhangelsk.mts.ru\r\narktika.lenta.ru\r\narktika.sakha.gov.ru\r\narm.avito.ru\r\narm.gosuslugi.ru\r\narmada.avito.ru\r\narmageddon.avito.ru\r\narmani.avito.ru\r\narmata-tank.tass.ru\r\narmavir.dns-shop.ru\r\narmhde.magnit.ru\r\narmppu.k8s.khv.gov.ru\r\narms.consultant.ru\r\narmstrong.avito.ru\r\narmy.avito.ru\r\narmy.life.ru\r\narnold.avito.ru\r\naroma.avito.ru\r\narp.avito.ru\r\narquivos.avito.ru\r\narrakis.avito.ru\r\narrow.avito.ru\r\nars-test.beeline.ru\r\nars.avito.ru\r\nars.beeline.ru\r\narsenal.avito.ru\r\narsenic.avito.ru\r\narsint01.magnit.ru\r\narsint02.magnit.ru\r\narsinthelix.magnit.ru\r\narslan.avito.ru\r\narsystem.magnit.ru\r\nart-bam.life.ru\r\nart.avito.ru\r\nart.rambler.ru\r\nart.t2.ru\r\nart.tele2.ru\r\narte.avito.ru\r\nartefact.avito.ru\r\nartefact.culture.ru\r\nartek.lenta.ru\r\nartek2024.vgtrk.com\r\nartem.avito.ru\r\nartem2023.dev.arh.mk.ru\r\nartem2023.dev.ast.mk.ru\r\nartem2023.dev.baikal.mk.ru\r\nartem2023.dev.belgorod.mk.ru\r\nartem2023.dev.blag.mk.ru\r\nartem2023.dev.brl.mk.ru\r\nartem2023.dev.cheb.mk.ru\r\nartem2023.dev.chel.mk.ru\r\nartem2023.dev.chr.mk.ru\r\nartem2023.dev.crimea.mk.ru\r\nartem2023.dev.eburg.mk.ru\r\nartem2023.dev.hab.mk.ru\r\nartem2023.dev.ivanovo.mk.ru\r\nartem2023.dev.izhevsk.mk.ru\r\nartem2023.dev.karel.mk.ru\r\nartem2023.dev.kavkaz.mk.ru\r\nartem2023.dev.kazan.mk.ru\r\nartem2023.dev.kbr.mk.ru\r\nartem2023.dev.kemerovo.mk.ru\r\nartem2023.dev.kostroma.mk.ru\r\nartem2023.dev.kras.mk.ru\r\nartem2023.dev.kuban.mk.ru\r\nartem2023.dev.kuzbass.mk.ru\r\nartem2023.dev.magadan.mk.ru\r\nartem2023.dev.mkala.mk.ru\r\nartem2023.dev.mrl.mk.ru\r\nartem2023.dev.murmansk.mk.ru\r\nartem2023.dev.nn.mk.ru\r\nartem2023.dev.novos.mk.ru\r\nartem2023.dev.omsk.mk.ru\r\nartem2023.dev.orel.mk.ru\r\nartem2023.dev.oren.mk.ru\r\nartem2023.dev.perm.mk.ru\r\nartem2023.dev.rostov.mk.ru\r\nartem2023.dev.rzn.mk.ru\r\nartem2023.dev.samara.mk.ru\r\nartem2023.dev.saratov.mk.ru\r\nartem2023.dev.serp.mk.ru\r\nartem2023.dev.sochi.mk.ru\r\nartem2023.dev.spb.mk.ru\r\nartem2023.dev.tambov.mk.ru\r\nartem2023.dev.tomsk.mk.ru\r\nartem2023.dev.tula.mk.ru\r\nartem2023.dev.tumen.mk.ru\r\nartem2023.dev.tv.mk.ru\r\nartem2023.dev.tver.mk.ru\r\nartem2023.dev.ufa.mk.ru\r\nartem2023.dev.ugra.mk.ru\r\nartem2023.dev.ul.mk.ru\r\nartem2023.dev.ulan.mk.ru\r\nartem2023.dev.vlad.mk.ru\r\nartem2023.dev.vladimir.mk.ru\r\nartem2023.dev.volg.mk.ru\r\nartem2023.dev.vologda.mk.ru\r\nartem2023.dev.vrn.mk.ru\r\nartem2023.dev.www.mk.ru\r\nartem2023.dev.yakutia.mk.ru\r\nartem2023.dev.yar.mk.ru\r\nartem2023.dev.yaroslavl.mk.ru\r\nartemida.mail.ru\r\nartemis.avito.ru\r\nartemovskoe-r25.gosweb.gosuslugi.ru\r\narthouse.avito.ru\r\narthouse.film.ru\r\narthur.avito.ru\r\narticle.avito.ru\r\narticles.avito.ru\r\nartifactory-test.web-staging.2gis.ru\r\nartifactory.at.ivi.ru\r\nartifactory.platform.md.magnit.ru\r\nartifactory.web-staging.2gis.ru\r\nartis.avito.ru\r\nartist.avito.ru\r\nartnight.culture.ru\r\nartrusal.life.ru\r\narts.avito.ru\r\nartur.avito.ru\r\nartur.beta.freecom-app-test.mts.ru\r\nartur.newsite.freecom-app-test.mts.ru\r\nartur.site.freecom-app-test.mts.ru\r\nartwork.avito.ru\r\naruba-master.avito.ru\r\narun.avito.ru\r\narwen.avito.ru\r\narzamas.mts.ru\r\nas-b2b.mts.ru\r\nas-dpe.mon.gov.ru\r\nas.avito.ru\r\nas.dns-shop.ru\r\nas.iso.avito.ru\r\nas.rosbank.ru\r\nas.who.int\r\nas1.avito.ru\r\nas1.esbstage.worldbank.org\r\nas2.avito.ru\r\nas3.avito.ru\r\nas4.avito.ru\r\nas400.avito.ru\r\nas400.vk.com\r\nasa.avito.ru\r\nasa.tambov.gov.ru\r\nasa1.mfc.smev.tambov.gov.ru\r\nasa1.s118.smev.tambov.gov.ru\r\nasa2.mfc.smev.tambov.gov.ru\r\nasa2.s118.smev.tambov.gov.ru\r\nasafin.ing.k8s.dev.ivi.ru\r\nasahi.avito.ru\r\nasap.avito.ru\r\nasb.avito.ru\r\nasbc-ext.tinkoff.ru\r\nasc-ug.mchs.gov.ru\r\nasc-ug.mchs.ru\r\nasc-ug.organizations.mchs.gov.ru\r\nasc.avito.ru\r\nasc.mkb.ru\r\nascella-hosting.rbc.ru\r\nascella.rbc.ru\r\naschekoturova.ing.k8s.dev.ivi.ru\r\naschubeta.kino-teatr.ru\r\nasd-market.avito.ru\r\nasd.avito.ru\r\nasdasd.avito.ru\r\nasdf.avito.ru\r\nasdfg.avito.ru\r\nasdfghjkl.avito.ru\r\nasdzxc.avito.ru\r\nasetus1.avito.ru\r\nasetus2.avito.ru\r\nasetus3.avito.ru\r\nasf.avito.ru\r\nasg.avito.ru\r\nasgard.avito.ru\r\nash.avito.ru\r\nash2.09.yandex.ru\r\nasha.avito.ru\r\nasher.avito.ru\r\nashi.avito.ru\r\nashish.2015.yandex.ru\r\nashish.avito.ru\r\nashley.avito.ru\r\nasi.avito.ru\r\nasi.iz.ru\r\nasia.avito.ru\r\nasia.gosuslugi.ru\r\nasiadm.tomsk.gov.ru\r\nasian.avito.ru\r\nask.avito.ru\r\nask.garant.ru\r\nask.ivi.ru\r\nask.profi.ru\r\nask.tutu.ru\r\nask11.kino-teatr.ru\r\naskue.beeline.ru\r\naslan.avito.ru\r\nasmirnov.ing.k8s.dev.ivi.ru\r\nasnezhnitskaya.ing.k8s.dev.ivi.ru\r\naso.avito.ru\r\nasoft.21.yandex.ru\r\nasoi.interfax.ru\r\nasoin.mchs.gov.ru\r\nasozd.duma.gov.ru\r\nasozd2.duma.gov.ru\r\nasozd2c.duma.gov.ru\r\nasozd2m.duma.gov.ru\r\nasp-winterville.cit.avito.ru\r\nasp.avito.ru\r\nasp.pro.14.yandex.ru\r\nasp1.avito.ru\r\nasp2.avito.ru\r\naspapp.worldbank.org\r\naspera.avito.ru\r\naspire.avito.ru\r\naspose.worldbank.org\r\nasposedev.worldbank.org\r\nasposeqa.worldbank.org\r\nasr.avito.ru\r\nasro.itc.fas.gov.ru\r\nass.avito.ru\r\nassassin.avito.ru\r\nasset.avito.ru\r\nassets-wss-ob.open.ru\r\nassets-wss-open.open.ru\r\nassets-wss-rgs-bank.open.ru\r\nassets-wss-rgs.open.ru\r\nassets.avito.ru\r\nassets.dom.lenta.ru\r\nassets.habr.com\r\nassets.kino-teatr.ru\r\nassets.lenta.ru\r\nassets.mvideo.ru\r\nassets.zakupki.magnit.ru\r\nassets1.avito.ru\r\nassets2.avito.ru\r\nassets3.avito.ru\r\nassets4.avito.ru\r\nassist-my01.bb.mail.ru\r\nassist.avito.ru\r\nassist.m24.ru\r\nassist.megafon.ru\r\nassistance.avito.ru\r\nassistant-api.yandex.ru\r\nassistant-push-api.yandex.ru\r\nassistant.consultant.ru\r\nassistant.sberbank.ru\r\nassistent-admin.tass.ru\r\nassistenza.avito.ru\r\nasskddnfaforum.kino-teatr.ru\r\nasso.avito.ru\r\nassoc.khv.gov.ru\r\nassociation.avito.ru\r\nast.9111.ru\r\nast.avito.ru\r\nast.beeline.ru\r\nasta.avito.ru\r\naster.avito.ru\r\naster.kp.ru\r\nasterisk.avito.ru\r\nasterisk1.avito.ru\r\nasterisk2.avito.ru\r\nasterix.avito.ru\r\nastra.avito.ru\r\nastra.interfax.ru\r\nastrahan.avito.ru\r\nastrahan.babyblog.ru\r\nastrahan.drom.ru\r\nastrahan.lemanapro.ru\r\nastrakhan.aif.ru\r\nastrakhan.dev.kp.ru\r\nastrakhan.hh.ru\r\nastrakhan.hlc.beeline.ru\r\nastrakhan.home.megafon.ru\r\nastrakhan.kp.ru\r\nastrakhan.mts.ru\r\nastrakhan.shop.megafon.ru\r\nastral.avito.ru\r\nastro.avito.ru\r\nastro.megafon.ru\r\nastrology.avito.ru\r\nastronomy.avito.ru\r\nasttel.lb.tinkoff.ru\r\nastun.avito.ru\r\nasus.avito.ru\r\nasus.rbc.ru\r\nasync-online.vtb.ru\r\nasync-online3.vtb.ru\r\nasync-online4.vtb.ru\r\nasync-private.vtb.ru\r\nasync.avito.ru\r\nasync21.council.gov.ru\r\nasync22.council.gov.ru\r\nasync24.council.gov.ru\r\nasync25.council.gov.ru\r\nasync26.council.gov.ru\r\nasync27.council.gov.ru\r\nasync28.council.gov.ru\r\nasync29.council.gov.ru\r\nasync30.council.gov.ru\r\nasync31.council.gov.ru\r\nasync32.council.gov.ru\r\nasync34.council.gov.ru\r\nasync35.council.gov.ru\r\nasync36.council.gov.ru\r\nasync66.council.gov.ru\r\nasync67.council.gov.ru\r\nasync69.council.gov.ru\r\nasync70.council.gov.ru\r\nasync75.council.gov.ru\r\nasync77.council.gov.ru\r\nasync78.council.gov.ru\r\nasync80.council.gov.ru\r\nasync82.council.gov.ru\r\nat.avito.ru\r\nat.ivi.ru\r\nat.zdorovie-shkolnika.spb.aif.ru\r\nat3mn92p4gfnxh8snfbwlvq-adr.ops.beeline.ru\r\nat7r_zhsiostf9owu7udedw-adr.ops.beeline.ru\r\nata.avito.ru\r\nataman.avito.ru\r\natamanskaya.drom.ru\r\natatarinov.ing.k8s.dev.ivi.ru\r\natb.avito.ru\r\natb.credit-registry.nalog.ru\r\natc.avito.ru\r\natd.gov.ru\r\natd.rambler.ru\r\nateam.avito.ru\r\natelier.afisha.ru\r\natelier.avito.ru\r\natendimento.avito.ru\r\natenea.avito.ru\r\natest.avito.ru\r\natgnft.mvideo.ru\r\natguat.mvideo.ru\r\natguat11.mvideo.ru\r\natguat13.mvideo.ru\r\natguat15.mvideo.ru\r\natguat4.mvideo.ru\r\nathena.avito.ru\r\nathens.avito.ru\r\nathens.infra.rbc.ru\r\nathletics.avito.ru\r\nathos.avito.ru\r\nati.avito.ru\r\natic.kino-teatr.ru\r\natika.64358.yandex.ru\r\natikunov.ing.k8s.dev.ivi.ru\r\natila.mail.ru\r\natitova.ing.k8s.dev.ivi.ru\r\natl.avito.ru\r\natlant-ch-dialer.vimpelcom.ru\r\natlant-ch-ktu.vimpelcom.ru\r\natlant-ch-support.vimpelcom.ru\r\natlant-lk-api.beeline.ru\r\natlant-lk-api.vimpelcom.ru\r\natlant-lk.beeline.ru\r\natlant-lk.vimpelcom.ru\r\natlant.39.yandex.ru\r\natlant.avito.ru\r\natlanta.avito.ru\r\natlantic.avito.ru\r\natlantis.avito.ru\r\natlas.alfabank.ru\r\natlas.avito.ru\r\natlas.dev.cgu.mchs.ru\r\natlas.mchs.gov.ru\r\natlas.mchs.ru\r\natlas.meduza.io\r\natlas.yandex.ru\r\natlaspb1.mail.ru\r\natlassian.alfabank.ru\r\natm.avito.ru\r\natm5.beeline.ru\r\natmail.avito.ru\r\natn.18.yandex.ru\r\natom.avito.ru\r\natom.mail.ru\r\natom.yandex.ru\r\natomenergomash.feedback.rosatom.ru\r\natomic.avito.ru\r\natomservice.rosatom.ru\r\natomskills.rosatom.ru\r\natomvideo.rosatom.ru\r\natr-nat.tomsk.gov.ru\r\natr.gov.ru\r\natr.tomsk.gov.ru\r\natrium.avito.ru\r\natropos.avito.ru\r\nats.avito.ru\r\nats.crmsnd4.worldbank.org\r\nats.megafon.ru\r\nats.tele2.ru\r\nats.tinkoff.ru\r\nats2cloud.tele2.ru\r\natt.avito.ru\r\nattach.avito.ru\r\nattach.rambler.ru\r\nattendance.avito.ru\r\natv.alfabank.ru\r\nau.avito.ru\r\nauc.avito.ru\r\nauc.drom.ru\r\nauction.avito.ru\r\nauction.megafon.ru\r\nauctions.avito.ru\r\naudi.avito.ru\r\naudience.yandex.ru\r\naudio.avito.ru\r\naudio.stat.srvc.meduza.io\r\naudio1.ria.ru\r\naudio2.ria.ru\r\naudioconf.beeline.ru\r\naudioconf.megafon.ru\r\naudioconf2.beeline.ru\r\naudiomegafon.litres.ru\r\naudioreklama.beeline.ru\r\naudit.avito.ru\r\naudit.evo-cert.rosbank.ru\r\naudit.evo-test.rosbank.ru\r\naudit.evo.rosbank.ru\r\naudit.gov.ru\r\naudition.avito.ru\r\naudrey.avito.ru\r\naugust.avito.ru\r\nauk.avito.ru\r\naukcje.avito.ru\r\naukro.avito.ru\r\naula.avito.ru\r\naulavirtual.avito.ru\r\naura-speedtest-server.mts.ru\r\naura.avito.ru\r\naura19.project.tinkoff.ru\r\naurelia.avito.ru\r\nauriga.avito.ru\r\naurora.avito.ru\r\naurora.vtb.ru\r\naurora15.mail.ru\r\naurus.drom.ru\r\nausn.nalog.gov.ru\r\naussie.avito.ru\r\naustin.avito.ru\r\naustralia.avito.ru\r\naustria.avito.ru\r\nauth-api-demo.mdrive.magnit.ru\r\nauth-cp.rosatom.ru\r\nauth-developer-pre.mkb.ru\r\nauth-exchange.tele2.ru\r\nauth-hack.avito.ru\r\nauth-mono.tele2.ru\r\nauth-partner.beeline.ru\r\nauth-partners.alfabank.ru\r\nauth-portal.sberbank.ru\r\nauth-rdb.tele2.ru\r\nauth-si20.sberbank.ru\r\nauth-test.beeline.ru\r\nauth.1tv.ru\r\nauth.92.gov.ru\r\nauth.92.sev.gov.ru\r\nauth.app-assistent.open.ru\r\nauth.apteka.ru\r\nauth.avito.ru\r\nauth.beeline.ru\r\nauth.confluence.mts.ru\r\nauth.council.gov.ru\r\nauth.crmsnd1.worldbank.org\r\nauth.crmsnd4.worldbank.org\r\nauth.dev.firenotification.mchs.ru\r\nauth.dev.videoplatform.rambler.ru\r\nauth.developer.sber.ru\r\nauth.developer.sberbank.ru\r\nauth.dmpkit.lemanapro.ru\r\nauth.euronews.com\r\nauth.evo-cert.rosbank.ru\r\nauth.evo-test.rosbank.ru\r\nauth.evo.rosbank.ru\r\nauth.firenotification.mchs.gov.ru\r\nauth.firenotification.mchs.ru\r\nauth.fl.firenotification.mchs.ru\r\nauth.iptv.beeline.ru\r\nauth.ixbt.com\r\nauth.jazz.sberbank.ru\r\nauth.jira.mts.ru\r\nauth.kino-teatr.ru\r\nauth.kinopoisk.ru\r\nauth.lemanapro.ru\r\nauth.lk.cdn.megafon.ru\r\nauth.lk.vtb.ru\r\nauth.mail.ru\r\nauth.max.com\r\nauth.megafon.ru\r\nauth.mm.mts.ru\r\nauth.mts.ru\r\nauth.myoffice.sberbank.ru\r\nauth.net.ixbt.com\r\nauth.ok.ru\r\nauth.open.ru\r\nauth.openbank.ru\r\nauth.parliament.gov.ru\r\nauth.pikabu.ru\r\nauth.rbc.ru\r\nauth.sm.fadn.gov.ru\r\nauth.sps.rosatom.ru\r\nauth.stage.videoplatform.rambler.ru\r\nauth.tele2.ru\r\nauth.tender.mos.ru\r\nauth.tutu.ru\r\nauth.ural.mts.ru\r\nauth.wbgcrm.worldbank.org\r\nauth.wbgcrm2.worldbank.org\r\nauth.wbgcrm2dev.worldbank.org\r\nauth.wbgcrm2qa.worldbank.org\r\nauth.wbgcrm2stg.worldbank.org\r\nauth.wbgcrm2trn.worldbank.org\r\nauth.wbgcrm2tst.worldbank.org\r\nauth.wbgcrmfqa.worldbank.org\r\nauth.www.sports.ru\r\nauth1.avito.ru\r\nauth2.avito.ru\r\nauth3.avito.ru\r\nauthdl.mail.ru\r\nauthentication-uat.beeline.ru\r\nauthentication.beeline.ru\r\nauthman.mts.ru\r\nauthor.avito.ru\r\nauthoringproxy.who.int\r\nauthors.avito.ru\r\nauthserverside-api.e.mail.ru\r\nauthstaging.euronews.com\r\nauthtest.worldbank.org\r\nauthtestdev.worldbank.org\r\nauthtestqa.worldbank.org\r\nauto-atitova.ing.k8s.dev.ivi.ru\r\nauto-click2.yandex.ru\r\nauto-park.megafon.ru\r\nauto.avito.ru\r\nauto.drom.ru\r\nauto.frontend-dev.k8s.rg.ru\r\nauto.frontend-stage.k8s.rg.ru\r\nauto.kp.ru\r\nauto.lenta.ru\r\nauto.mail.ru\r\nauto.mts.ru\r\nauto.vtb.ru\r\nauto.yandex.ru\r\nautocad.avito.ru\r\nautochel.drom.ru\r\nautoconcierge.t2.ru\r\nautoconfig.admin.avito.ru\r\nautoconfig.ads.avito.ru\r\nautoconfig.ads.zdorovie-shkolnika.spb.aif.ru\r\nautoconfig.api.avito.ru\r\nautoconfig.app.avito.ru\r\nautoconfig.archive.avito.ru\r\nautoconfig.avito.ru\r\nautoconfig.beta.avito.ru\r\nautoconfig.billing.avito.ru\r\nautoconfig.blog.avito.ru\r\nautoconfig.blogs.avito.ru\r\nautoconfig.cdn.avito.ru\r\nautoconfig.chat.avito.ru\r\nautoconfig.classifieds.avito.ru\r\nautoconfig.client.avito.ru\r\nautoconfig.clients.avito.ru\r\nautoconfig.cn.avito.ru\r\nautoconfig.crm.avito.ru\r\nautoconfig.de.avito.ru\r\nautoconfig.demo.avito.ru\r\nautoconfig.design.avito.ru\r\nautoconfig.dev.avito.ru\r\nautoconfig.dev2.avito.ru\r\nautoconfig.director.avito.ru\r\nautoconfig.directory.avito.ru\r\nautoconfig.download.avito.ru\r\nautoconfig.email.avito.ru\r\nautoconfig.en.avito.ru\r\nautoconfig.es.avito.ru\r\nautoconfig.facebook.avito.ru\r\nautoconfig.fb.avito.ru\r\nautoconfig.files.avito.ru\r\nautoconfig.forum.avito.ru\r\nautoconfig.forums.avito.ru\r\nautoconfig.gallery.avito.ru\r\nautoconfig.games.avito.ru\r\nautoconfig.health.avito.ru\r\nautoconfig.help.avito.ru\r\nautoconfig.helpdesk.avito.ru\r\nautoconfig.host.avito.ru\r\nautoconfig.i.avito.ru\r\nautoconfig.images.avito.ru\r\nautoconfig.img.avito.ru\r\nautoconfig.info.avito.ru\r\nautoconfig.iphone.avito.ru\r\nautoconfig.it.avito.ru\r\nautoconfig.jobs.avito.ru\r\nautoconfig.jocuri.avito.ru\r\nautoconfig.joomla.avito.ru\r\nautoconfig.link.avito.ru\r\nautoconfig.links.avito.ru\r\nautoconfig.lists.avito.ru\r\nautoconfig.live.avito.ru\r\nautoconfig.login.avito.ru\r\nautoconfig.loja.avito.ru\r\nautoconfig.main.avito.ru\r\nautoconfig.media.avito.ru\r\nautoconfig.member.avito.ru\r\nautoconfig.members.avito.ru\r\nautoconfig.movil.avito.ru\r\nautoconfig.music.avito.ru\r\nautoconfig.my.avito.ru\r\nautoconfig.myoffice.sberbank.ru\r\nautoconfig.news.avito.ru\r\nautoconfig.newsletter.avito.ru\r\nautoconfig.old.avito.ru\r\nautoconfig.online.avito.ru\r\nautoconfig.portal.avito.ru\r\nautoconfig.radio.avito.ru\r\nautoconfig.rbc.ru\r\nautoconfig.reseller.avito.ru\r\nautoconfig.sandbox.avito.ru\r\nautoconfig.search.avito.ru\r\nautoconfig.secure.avito.ru\r\nautoconfig.seo.avito.ru\r\nautoconfig.server.avito.ru\r\nautoconfig.shop.avito.ru\r\nautoconfig.sms.avito.ru\r\nautoconfig.soporte.avito.ru\r\nautoconfig.sports.avito.ru\r\nautoconfig.stage.avito.ru\r\nautoconfig.staging.avito.ru\r\nautoconfig.store.avito.ru\r\nautoconfig.test.avito.ru\r\nautoconfig.testing.avito.ru\r\nautoconfig.tickets.avito.ru\r\nautoconfig.travel.avito.ru\r\nautoconfig.tutu.ru\r\nautoconfig.tv.avito.ru\r\nautoconfig.us.avito.ru\r\nautoconfig.v2.avito.ru\r\nautoconfig.video.avito.ru\r\nautoconfig.videos.avito.ru\r\nautoconfig.web.avito.ru\r\nautoconfig.webdesign.avito.ru\r\nautoconfig.webmail.avito.ru\r\nautoconfig.wholesale.avito.ru\r\nautoconfig.wiki.avito.ru\r\nautoconfig.wordpress.avito.ru\r\nautoconfig.wp.avito.ru\r\nautoconfig.www2.avito.ru\r\nautoconfig.x.avito.ru\r\nautoconfig.yandex.ru\r\nautocontrol.beeline.ru\r\nautocredit-qa.tinkoff.ru\r\nautocredit.alfabank.ru\r\nautocredit.open.ru\r\nautocredits.alfabank.ru\r\nautocredits.open.ru\r\nautodiscover-redirect.avito.ru\r\nautodiscover.2gis.ru\r\nautodiscover.ac.gov.ru\r\nautodiscover.admin.avito.ru\r\nautodiscover.ads.avito.ru\r\nautodiscover.afisha.ru\r\nautodiscover.agents.sovcombank.ru\r\nautodiscover.alfabank.ru\r\nautodiscover.api.avito.ru\r\nautodiscover.app.avito.ru\r\nautodiscover.archive.avito.ru\r\nautodiscover.avito.ru\r\nautodiscover.beeline.ru\r\nautodiscover.beta.avito.ru\r\nautodiscover.billing.avito.ru\r\nautodiscover.bitools.sovcombank.ru\r\nautodiscover.blog.avito.ru\r\nautodiscover.blogs.avito.ru\r\nautodiscover.buh.sovcombank.ru\r\nautodiscover.catalog.1tv.ru\r\nautodiscover.cdn.avito.ru\r\nautodiscover.cdn.invest.sovcombank.ru\r\nautodiscover.cea.gov.ru\r\nautodiscover.championat.com\r\nautodiscover.chat.avito.ru\r\nautodiscover.classifieds.avito.ru\r\nautodiscover.client.avito.ru\r\nautodiscover.clients.avito.ru\r\nautodiscover.cloudmail.mts.ru\r\nautodiscover.cn.avito.ru\r\nautodiscover.confluence.sovcombank.ru\r\nautodiscover.corp.mail.ru\r\nautodiscover.corp.vk.com\r\nautodiscover.crm.avito.ru\r\nautodiscover.de.avito.ru\r\nautodiscover.demo.avito.ru\r\nautodiscover.design.avito.ru\r\nautodiscover.dev.avito.ru\r\nautodiscover.dev2.avito.ru\r\nautodiscover.director.avito.ru\r\nautodiscover.directory.avito.ru\r\nautodiscover.domino.worldbank.org\r\nautodiscover.download.avito.ru\r\nautodiscover.ec.ac.gov.ru\r\nautodiscover.ecdn.sovcombank.ru\r\nautodiscover.elf.sovcombank.ru\r\nautodiscover.email.avito.ru\r\nautodiscover.en.avito.ru\r\nautodiscover.es.avito.ru\r\nautodiscover.es.mail.ru\r\nautodiscover.euro.who.int\r\nautodiscover.exchange.rosbank.ru\r\nautodiscover.external.t2.ru\r\nautodiscover.extst.beeline.ru\r\nautodiscover.facebook.avito.ru\r\nautodiscover.factoring.rshb.ru\r\nautodiscover.fb.avito.ru\r\nautodiscover.files.avito.ru\r\nautodiscover.files.sovcombank.ru\r\nautodiscover.fingrad.sovcombank.ru\r\nautodiscover.forum.avito.ru\r\nautodiscover.forums.avito.ru\r\nautodiscover.g.ozon.ru\r\nautodiscover.gallery.avito.ru\r\nautodiscover.games.avito.ru\r\nautodiscover.gazeta.ru\r\nautodiscover.genesys.sovcombank.ru\r\nautodiscover.halvamedia.sovcombank.ru\r\nautodiscover.health.avito.ru\r\nautodiscover.help.avito.ru\r\nautodiscover.helpdesk.avito.ru\r\nautodiscover.host.avito.ru\r\nautodiscover.i.avito.ru\r\nautodiscover.images.avito.ru\r\nautodiscover.img.avito.ru\r\nautodiscover.info.avito.ru\r\nautodiscover.iphone.avito.ru\r\nautodiscover.it.avito.ru\r\nautodiscover.jobs.avito.ru\r\nautodiscover.jocuri.avito.ru\r\nautodiscover.joomla.avito.ru\r\nautodiscover.kino-teatr.ru\r\nautodiscover.kino.1tv.ru\r\nautodiscover.kommersant.ru\r\nautodiscover.lawis.sovcombank.ru\r\nautodiscover.lemanapro.ru\r\nautodiscover.link.avito.ru\r\nautodiscover.links.avito.ru\r\nautodiscover.lists.avito.ru\r\nautodiscover.live.avito.ru\r\nautodiscover.lk.rosnedra.gov.ru\r\nautodiscover.lockter.sovcombank.ru\r\nautodiscover.login.avito.ru\r\nautodiscover.loja.avito.ru\r\nautodiscover.magnit.ru\r\nautodiscover.main.avito.ru\r\nautodiscover.mchs.gov.ru\r\nautodiscover.media.avito.ru\r\nautodiscover.member.avito.ru\r\nautodiscover.members.avito.ru\r\nautodiscover.mkb.ru\r\nautodiscover.movil.avito.ru\r\nautodiscover.mts.ru\r\nautodiscover.music.avito.ru\r\nautodiscover.my.avito.ru\r\nautodiscover.news.avito.ru\r\nautodiscover.newsletter.avito.ru\r\nautodiscover.ntv.ru\r\nautodiscover.oauth-buh.sovcombank.ru\r\nautodiscover.oboroty.sovcombank.ru\r\nautodiscover.ok.ru\r\nautodiscover.old.avito.ru\r\nautodiscover.online.avito.ru\r\nautodiscover.online.sovcombank.ru\r\nautodiscover.open.gov.ru\r\nautodiscover.open.ru\r\nautodiscover.openbank.ru\r\nautodiscover.ord.ozon.ru\r\nautodiscover.ozon.ru\r\nautodiscover.partners.sovcombank.ru\r\nautodiscover.pay.gov.ru\r\nautodiscover.pay.sovcombank.ru\r\nautodiscover.peertube-ext.sovcombank.ru\r\nautodiscover.people.sovcombank.ru\r\nautodiscover.portal.avito.ru\r\nautodiscover.pr.vtb.ru\r\nautodiscover.premier.one\r\nautodiscover.profi.ru\r\nautodiscover.public-buh.sovcombank.ru\r\nautodiscover.qrsbp.sovcombank.ru\r\nautodiscover.radio.avito.ru\r\nautodiscover.rating.hh.ru\r\nautodiscover.reg.sovcombank.ru\r\nautodiscover.reseller.avito.ru\r\nautodiscover.restapi-buh.sovcombank.ru\r\nautodiscover.ria.ru\r\nautodiscover.rosatom.ru\r\nautodiscover.rosbank.ru\r\nautodiscover.roseltorg.ru\r\nautodiscover.rosenergo.gov.ru\r\nautodiscover.rosnedra.gov.ru\r\nautodiscover.rostelecom.ru\r\nautodiscover.rtk-holding.ru\r\nautodiscover.russianpost.ru\r\nautodiscover.rutube.ru\r\nautodiscover.sakha.gov.ru\r\nautodiscover.sakhalin.gov.ru\r\nautodiscover.sandbox.avito.ru\r\nautodiscover.sber.ru\r\nautodiscover.sberbank.ru\r\nautodiscover.search.avito.ru\r\nautodiscover.secure.avito.ru\r\nautodiscover.secure.sovcombank.ru\r\nautodiscover.seo.avito.ru\r\nautodiscover.server.avito.ru\r\nautodiscover.shop.avito.ru\r\nautodiscover.smart.1tv.ru\r\nautodiscover.sms.avito.ru\r\nautodiscover.soporte.avito.ru\r\nautodiscover.sovcombank.ru\r\nautodiscover.spb.kommersant.ru\r\nautodiscover.spb1.kommersant.ru\r\nautodiscover.spbprojects.kommersant.ru\r\nautodiscover.sports.avito.ru\r\nautodiscover.sso-buh.sovcombank.ru\r\nautodiscover.stage.avito.ru\r\nautodiscover.staging.avito.ru\r\nautodiscover.stats-buh.sovcombank.ru\r\nautodiscover.storage.sovcombank.ru\r\nautodiscover.storage.sport.sovcombank.ru\r\nautodiscover.store.avito.ru\r\nautodiscover.student.avito.ru\r\nautodiscover.t2.ru\r\nautodiscover.tass.ru\r\nautodiscover.team.vk.com\r\nautodiscover.teams.sovcombank.ru\r\nautodiscover.test-teams.sovcombank.ru\r\nautodiscover.test.sovcombank.ru\r\nautodiscover.testing.avito.ru\r\nautodiscover.tickets.avito.ru\r\nautodiscover.travel.avito.ru\r\nautodiscover.travel.rzd.ru\r\nautodiscover.tutu.ru\r\nautodiscover.tv.avito.ru\r\nautodiscover.tz.afro.who.int\r\nautodiscover.ugp-zbx-ext-app.sovcombank.ru\r\nautodiscover.unitaid.who.int\r\nautodiscover.us.avito.ru\r\nautodiscover.uyp-zbx-ui-ext.sovcombank.ru\r\nautodiscover.v2.avito.ru\r\nautodiscover.video.avito.ru\r\nautodiscover.videos.avito.ru\r\nautodiscover.vimpelcom.ru\r\nautodiscover.vlk.sovcombank.ru\r\nautodiscover.vpn-phd.sovcombank.ru\r\nautodiscover.vtb.ru\r\nautodiscover.web.avito.ru\r\nautodiscover.webdesign.avito.ru\r\nautodiscover.webmail.avito.ru\r\nautodiscover.who.int\r\nautodiscover.wholesale.avito.ru\r\nautodiscover.wiki.avito.ru\r\nautodiscover.wildberries.ru\r\nautodiscover.wordpress.avito.ru\r\nautodiscover.worldbank.org\r\nautodiscover.wp.avito.ru\r\nautodiscover.wto.economy.gov.ru\r\nautodiscover.www2.avito.ru\r\nautodiscover.x.avito.ru\r\nautodiscover.yandex.ru\r\nautodiscover.yougile-sec.sovcombank.ru\r\nautodiscover.youtrack.sovcombank.ru\r\nautodiscover.zabbix-in.sovcombank.ru\r\nautodiscover.zabbix-out.sovcombank.ru\r\nautodiscover.zakon.ru\r\nautodiscover.zw.afro.who.int\r\nautodrive.t2.ru\r\nautodrive.tele2.ru\r\nautofaq-kb-test.mts.ru\r\nautofaq-kb.mts.ru\r\nautofaq-test.mts.ru\r\nautofaq.mts.ru\r\nautofaq.mvideo.ru\r\nautofin-back.open.ru\r\nautofine.tele2.ru\r\nautokochka65.drom.ru\r\nautoload.avito.ru\r\nautomail.avito.ru\r\nautomation.avito.ru\r\nautomation.ing.k8s.dev.ivi.ru\r\nautomatization.tass.ru\r\nautomonitoring.beeline.ru\r\nautomotive.avito.ru\r\nautomotive.zdorovie-shkolnika.spb.aif.ru\r\nautopay.mts.ru\r\nautopay.tele2.ru\r\nautopci.ing.k8s.dev.ivi.ru\r\nautopilot.kommersant.ru\r\nautoplataforma.avito.ru\r\nautopoet.yandex.ru\r\nautopolza.t2.ru\r\nautoreply.avito.ru\r\nautoresponder.avito.ru\r\nautoru-extgit.yandex.ru\r\nautos.avito.ru\r\nautoservice.open.ru\r\nautotest.rc.ot.gov.ru\r\nautotest.rc.rg.gov.ru\r\nautoysimonov.ing.k8s.dev.ivi.ru\r\nautumn-with-avon.lady.mail.ru\r\nautumnwith-avon.lady.mail.ru\r\nav.avito.ru\r\nav.cts01.rosatom.ru\r\nav.cts02.rosatom.ru\r\nav.cts03.rosatom.ru\r\nav.cts05.rosatom.ru\r\nav.cts08.rosatom.ru\r\nav.cts09.rosatom.ru\r\nav.cts10.rosatom.ru\r\nav.dcts03.rosatom.ru\r\nav.ets01.rosatom.ru\r\nav.interfax.ru\r\nav.megafon.ru\r\nav.ntv.ru\r\nav.open.ru\r\nav.psbank.ru\r\nav.rosatom.ru\r\nav.russianpost.ru\r\nav.skype.ec.mts.ru\r\nav.tcts01.rosatom.ru\r\nav.tcts02.rosatom.ru\r\nav.tets01.rosatom.ru\r\nav1.avito.ru\r\nav1.messenger.magnit.ru\r\nav2.messenger.magnit.ru\r\nav3.messenger.magnit.ru\r\nav4.messenger.magnit.ru\r\nav8d.avito.ru\r\nava.avito.ru\r\navalanche.avito.ru\r\navalon.avito.ru\r\navasin.avito.ru\r\navatar.avito.ru\r\navatar.online.sberbank.ru\r\navatar1.rambler.ru\r\navatarconstr.online.sberbank.ru\r\navatars.avito.ru\r\navatars.rambler.ru\r\navaya-aads-01.open.ru\r\navaya-aads-02.open.ru\r\navaya-aads.open.ru\r\navaya-breeze.open.ru\r\navaya-equinox-01.open.ru\r\navaya-equinox-02.open.ru\r\navaya-equinox.open.ru\r\navaya-meetings.open.ru\r\navaya-presence-sm100.open.ru\r\navaya-presence.open.ru\r\navaya-sm-sec-01.open.ru\r\navaya-sm-sec-02.open.ru\r\navb.alfabank.ru\r\navc.alfabank.ru\r\navcome.avito.ru\r\navedge.avito.ru\r\navemart.kino-teatr.ru\r\navenger.avito.ru\r\navg.avito.ru\r\navi-smtp03-mx-se02.avito.ru\r\navia-api.tutu.ru\r\navia.avito.ru\r\navia.mail.ru\r\navia.tutu.ru\r\navia.yandex.ru\r\naviasales.alfabank.ru\r\naviation.avito.ru\r\naviator.avito.ru\r\navis.yandex.ru\r\navito-news.avito.ru\r\navito-test.avito.ru\r\navito.avito.avito.www.u6mod1v0hsu9l7ii.farmet.kuban.aif.ru\r\navito.ru.avito.ru\r\navito.sber.sberbank.www.u6mod1v0hsu9l7ii.farmet.kuban.aif.ru\r\navito.sberbank.www.u6mod1v0hsu9l7ii.farmet.kuban.aif.ru\r\naviva.avito.ru\r\navl.avito.ru\r\navm.avito.ru\r\navntg-02.cloud.mts.ru\r\navntg-03.cloud.mts.ru\r\navntg-04.cloud.mts.ru\r\navon.avito.ru\r\navpm-50414-www.k.avito.ru\r\navpm-53832-www.k.avito.ru\r\navpm-54059-www.k.avito.ru\r\navpm-54306-www.k.avito.ru\r\navril.avito.ru\r\navs.avito.ru\r\navt-15.foto.mail.ru\r\navt-16.foto.mail.ru\r\navt-24.foto.mail.ru\r\navt-28.foto.mail.ru\r\navt-29.foto.mail.ru\r\navt-5.foto.mail.ru\r\navt-8.foto.mail.ru\r\navto.avito.ru\r\navto.openbank.ru\r\navtobat.36.yandex.ru\r\navtodoctor.2015.yandex.ru\r\navvakum.rusarchives.ru\r\naw-admin.yandex.ru\r\naw-agency.yandex.ru\r\naw-campaigns.yandex.ru\r\naw-cg-dmz.mvideo.ru\r\naw-ens.corp.mvideo.ru\r\naw-ens.mvideo.ru\r\naw-ens01.corp.mvideo.ru\r\naw-ens02.corp.mvideo.ru\r\naw-fe-dmz.corp.mvideo.ru\r\naw-fe-dmz.mvideo.ru\r\naw-fe-dmz01.corp.mvideo.ru\r\naw-fe-dmz02.corp.mvideo.ru\r\naw-fe-dmz03.corp.mvideo.ru\r\naw-platforms.yandex.ru\r\naw-sg-exch.mvideo.ru\r\naw-stat.yandex.ru\r\naw-tu-dmz.mvideo.ru\r\naw-video.yandex.ru\r\naw.avito.ru\r\naw.mail.ru\r\nawa.avito.ru\r\nawacs-balancer.zen.crowdzeta.kaizen.yandex.ru\r\nawacs.api.direct.yandex.ru\r\nawacs.direct.yandex.ru\r\nawacs.intapi.direct.yandex.ru\r\nawaps-admin-test.yandex.ru\r\nawaps-admin-test2.yandex.ru\r\nawaps-ae01pre.yandex.ru\r\nawaps-ae01t.yandex.ru\r\nawaps-as01e.yandex.ru\r\nawaps-as01f.yandex.ru\r\nawaps-as01i.yandex.ru\r\nawaps-as01pre.yandex.ru\r\nawaps-as01t.yandex.ru\r\nawaps-as02f.yandex.ru\r\nawaps-as03f.yandex.ru\r\nawaps-as04f.yandex.ru\r\nawaps-as06f.yandex.ru\r\nawaps-as07f.yandex.ru\r\nawaps-as08f.yandex.ru\r\nawaps-as09f.yandex.ru\r\nawaps-as11f.yandex.ru\r\nawaps-as15e.yandex.ru\r\nawaps-az01e.yandex.ru\r\nawaps-az01f.yandex.ru\r\nawaps-banner-test.yandex.ru\r\nawaps-banner-test2.yandex.ru\r\nawaps-baz01e.yandex.ru\r\nawaps-cassandra-mon01myt.yandex.ru\r\nawaps-count01e.yandex.ru\r\nawaps-count01f.yandex.ru\r\nawaps-count01i.yandex.ru\r\nawaps-count02e.yandex.ru\r\nawaps-count02f.yandex.ru\r\nawaps-count02i.yandex.ru\r\nawaps-count03e.yandex.ru\r\nawaps-count03i.yandex.ru\r\nawaps-count04e.yandex.ru\r\nawaps-count04f.yandex.ru\r\nawaps-count04i.yandex.ru\r\nawaps-dev02e.yandex.ru\r\nawaps-int01d.yandex.ru\r\nawaps-int01e.yandex.ru\r\nawaps-keyd.yandex.ru\r\nawaps-lab02f.yandex.ru\r\nawaps-phantom.yandex.ru\r\nawaps-st01f.yandex.ru\r\nawaps-test01i.yandex.ru\r\nawaps-v6.yandex.ru\r\nawaps-vid01e.yandex.ru\r\nawaps-vid01f.yandex.ru\r\nawaps-video-test.yandex.ru\r\nawaps.yandex.ru\r\naward-2023.2gis.ru\r\naward.2gis.ru\r\naward.adm.gov.ru\r\naward.avito.ru\r\nawards-winners.2gis.ru\r\nawards.2gis.ru\r\nawards.avito.ru\r\nawas.x5.ru\r\naway.cs7777.vk.com\r\naway.tau.vk.com\r\naway.vk.com\r\nawc.avito.ru\r\nawcg.x5.ru\r\nawd.mail.ru\r\nawds-test.x5.ru\r\nawe.yandex.ru\r\nawens.x5.ru\r\nawesom.o.4000.yandex.ru\r\nawesome.5er3zh3nka.yandex.ru\r\nawesome.5er3zhenka.yandex.ru\r\nawesome.avito.ru\r\naws-smail.avito.ru\r\naws.avito.ru\r\naws.tp.mvideo.ru\r\nawsauth.worldbank.org\r\nawsauthdev.worldbank.org\r\nawsauthqa.worldbank.org\r\nawsauthstg.worldbank.org\r\nawsauthtst.worldbank.org\r\nawsdashboard.avito.ru\r\nawslarspoc.worldbank.org\r\nawstats.avito.ru\r\nawswebpoc.worldbank.org\r\nawsync.yandex.ru\r\nawtech.yandex.ru\r\nax.avito.ru\r\naxa.avito.ru\r\naxel.avito.ru\r\naxiom.avito.ru\r\naxis.avito.ru\r\naxrobot.online.sberbank.ru\r\naya.avito.ru\r\nayikol.2018.yandex.ru\r\naymen.avito.ru\r\nayoub.avito.ru\r\nayuda.avito.ru\r\nayws.content.tinkoff.ru\r\nayws.tinkoff.ru\r\naz.avito.ru\r\naz.mirtv.ru\r\naza.avito.ru\r\nazalea.avito.ru\r\nazbuka.consultant.ru\r\naze1behfnfmm6s05rloopza-adr.ops.beeline.ru\r\nazerty.avito.ru\r\naziz.avito.ru\r\nazmoon.avito.ru\r\nazrael.avito.ru\r\nazs-test.mkb.ru\r\nazt.mail.ru\r\naztec.avito.ru\r\nazure.avito.ru\r\nazuremsk.ec.mts.ru\r\nb-beta-stat.livejournal.com\r\nb.9111.ru\r\nb.avito.ru\r\nb.beeline.ru\r\nb.i0.avito.ru\r\nb.i1.avito.ru\r\nb.i10.avito.ru\r\nb.i11.avito.ru\r\nb.i12.avito.ru\r\nb.i13.avito.ru\r\nb.i14.avito.ru\r\nb.i15.avito.ru\r\nb.i16.avito.ru\r\nb.i17.avito.ru\r\nb.i18.avito.ru\r\nb.i2.avito.ru\r\nb.i20.avito.ru\r\nb.i20.vk.com\r\nb.i21.avito.ru\r\nb.i22.avito.ru\r\nb.i23.avito.ru\r\nb.i24.avito.ru\r\nb.i25.avito.ru\r\nb.i26.avito.ru\r\nb.i27.avito.ru\r\nb.i28.avito.ru\r\nb.i29.avito.ru\r\nb.i3.avito.ru\r\nb.i31.avito.ru\r\nb.i32.avito.ru\r\nb.i33.avito.ru\r\nb.i34.avito.ru\r\nb.i35.avito.ru\r\nb.i36.avito.ru\r\nb.i37.avito.ru\r\nb.i38.avito.ru\r\nb.i4.avito.ru\r\nb.i40.avito.ru\r\nb.i40.vk.com\r\nb.i41.avito.ru\r\nb.i42.avito.ru\r\nb.i43.avito.ru\r\nb.i44.avito.ru\r\nb.i45.avito.ru\r\nb.i46.avito.ru\r\nb.i47.avito.ru\r\nb.i48.avito.ru\r\nb.i49.avito.ru\r\nb.i5.avito.ru\r\nb.i51.avito.ru\r\nb.i52.avito.ru\r\nb.i53.avito.ru\r\nb.i54-agus.avito.ru\r\nb.i54.avito.ru\r\nb.i55.avito.ru\r\nb.i56.avito.ru\r\nb.i57.avito.ru\r\nb.i58.avito.ru\r\nb.i59.avito.ru\r\nb.i6.avito.ru\r\nb.i61.avito.ru\r\nb.i62.avito.ru\r\nb.i63.avito.ru\r\nb.i64.avito.ru\r\nb.i65.avito.ru\r\nb.i66.avito.ru\r\nb.i67.avito.ru\r\nb.i68.avito.ru\r\nb.i69.avito.ru\r\nb.i7.avito.ru\r\nb.i71.avito.ru\r\nb.i72.avito.ru\r\nb.i73.avito.ru\r\nb.i74.avito.ru\r\nb.i75.avito.ru\r\nb.i76.avito.ru\r\nb.i77.avito.ru\r\nb.i78.avito.ru\r\nb.i79.avito.ru\r\nb.i8.avito.ru\r\nb.i81.avito.ru\r\nb.i82.avito.ru\r\nb.i83.avito.ru\r\nb.i84.avito.ru\r\nb.i85.avito.ru\r\nb.i86.avito.ru\r\nb.i87.avito.ru\r\nb.i88.avito.ru\r\nb.i89.avito.ru\r\nb.i9.avito.ru\r\nb.i91.avito.ru\r\nb.i92.avito.ru\r\nb.i93.avito.ru\r\nb.i94.avito.ru\r\nb.i95.avito.ru\r\nb.i96.avito.ru\r\nb.i97.avito.ru\r\nb.i98.avito.ru\r\nb.kino-teatr.ru\r\nb.litres.ru\r\nb.mts.ru\r\nb.mx.avito.ru\r\nb.ns.avito.ru\r\nb.ns.e.avito.ru\r\nb.ns.email.avito.ru\r\nb.rgis.rk.gov.ru\r\nb.rgistest.rk.gov.ru\r\nb.superset.net.ixbt.com\r\nb.yandex.ru\r\nb06208fa-8984-4970-b6c4-a636fcc83dd5-upravel.ops.beeline.ru\r\nb1.avito.ru\r\nb1.culture.ru\r\nb1.m24.ru\r\nb1.night.m24.ru\r\nb1.tv.m24.ru\r\nb10.avito.ru\r\nb10.vk.com\r\nb11.avito.ru\r\nb117.avito.ru\r\nb12.avito.ru\r\nb123.avito.ru\r\nb13.avito.ru\r\nb14.avito.ru\r\nb148.avito.ru\r\nb15.avito.ru\r\nb16.avito.ru\r\nb161.avito.ru\r\nb17.avito.ru\r\nb18.avito.ru\r\nb19.avito.ru\r\nb1cc6320e049bba5cc7f084a29f0df-f33d35f3c4854e9fbeb8b00a848ea73a.ops.beeline.ru\r\nb2.avito.ru\r\nb2.m24.ru\r\nb2.mail.ru\r\nb2.rshb.ru\r\nb20.avito.ru\r\nb20.vk.com\r\nb21.avito.ru\r\nb22.avito.ru\r\nb23.avito.ru\r\nb24.mtp.mos.ru\r\nb24test.mtp.mos.ru\r\nb26.avito.ru\r\nb2b-api-gateway.uat.ecom.md.magnit.ru\r\nb2b-api.magnit.ru\r\nb2b-portal.magnit.ru\r\nb2b.avito.ru\r\nb2b.beeline.ru\r\nb2b.fix.mts.ru\r\nb2b.lemanapro.ru\r\nb2b.magnit.ru\r\nb2b.middle-api.magnit.ru\r\nb2b.mts.ru\r\nb2b.mvideo.ru\r\nb2b.test-middle-api.magnit.ru\r\nb2b.tutu.ru\r\nb2b.youdo.com\r\nb2bapi.max.ru\r\nb2bcoin.beeline.ru\r\nb2bcontrol.tele2.ru\r\nb2bcrm.tele2.ru\r\nb2bkiosk.beeline.ru\r\nb2blk.megafon.ru\r\nb2blog.beeline.ru\r\nb2bpa.yc.mvideo.ru\r\nb2bsg.beeline.ru\r\nb2bsupportbot.max.ru\r\nb2btest.avito.ru\r\nb2bvopros.beeline.ru\r\nb2c-elapp-infrastructure.yc.mvideo.ru\r\nb2c-elapp-prod1.yc.mvideo.ru\r\nb2c-elapp-test1.yc.mvideo.ru\r\nb2c-infrastructure1.yc.mvideo.ru\r\nb2c-prod.yc.mvideo.ru\r\nb2c-promo-test1.yc.mvideo.ru\r\nb2c.nft.ya.tp.mvideo.ru\r\nb2c.prod.ya.tp.mvideo.ru\r\nb2c.test.ivi.ru\r\nb2c.test.ya.tp.mvideo.ru\r\nb2c.yc.mvideo.ru\r\nb2cts.beeline.ru\r\nb2cvopros.beeline.ru\r\nb2pilot.rshb.ru\r\nb2r-irm-dev1.yc.mvideo.ru\r\nb2r-irm-prod1.yc.mvideo.ru\r\nb2r-mpp-prod1.yc.mvideo.ru\r\nb2r.irm.dev1.ya.tp.mvideo.ru\r\nb2sreport.beeline.ru\r\nb3.avito.ru\r\nb3.m24.ru\r\nb30.avito.ru\r\nb30.vk.com\r\nb31.avito.ru\r\nb32.avito.ru\r\nb33.avito.ru\r\nb4.avito.ru\r\nb4p-billing-nsg.yc.mvideo.ru\r\nb4p-billing.yc.mvideo.ru\r\nb5.avito.ru\r\nb6.avito.ru\r\nb7.avito.ru\r\nb8.avito.ru\r\nb872.avito.ru\r\nb9.avito.ru\r\nb99.avito.ru\r\nba-ae3.avito.ru\r\nba.avito.ru\r\nba.yandex.ru\r\nbaas-tbot.mkb.ru\r\nbaas-test-api.mkb.ru\r\nbaas-test-assets.mkb.ru\r\nbaas-test-auth.mkb.ru\r\nbaas-test-partner-api.mkb.ru\r\nbaas-test-tbot.mkb.ru\r\nbaas.alfabank.ru\r\nbaba.avito.ru\r\nbabbage.avito.ru\r\nbabe.avito.ru\r\nbabel.avito.ru\r\nbabes.avito.ru\r\nbaby.avito.ru\r\nbabyblog.ru.letter.babyblog.ru\r\nbabyface.avito.ru\r\nbabylon.avito.ru\r\nbac.avito.ru\r\nbacchus.avito.ru\r\nbach.avito.ru\r\nback-eosk.rosatom.ru\r\nback.avito.ru\r\nback.ren.tv\r\nback01.gazeta.ru\r\nback1.srv.mk.ru\r\nback2.avito.ru\r\nbackbone.avito.ru\r\nbackend-api.beeline.ru\r\nbackend-demo.mmobile.magnit.ru\r\nbackend-insight.premier.one\r\nbackend-srv-demo.mmobile.magnit.ru\r\nbackend.atlas.mchs.ru\r\nbackend.avito.ru\r\nbackend.beeline.ru\r\nbackend.dns-shop.ru\r\nbackend.estate-prod-3.salt.x5.ru\r\nbackend.jazz.sber.ru\r\nbackend.jazz.sberbank.ru\r\nbackend.kino-teatr.ru\r\nbackend.messenger.yandex.ru\r\nbackend.vh.yandex.ru\r\nbackend.vimpelcom.ru\r\nbackground.avito.ru\r\nbacklink.avito.ru\r\nbacklinks.avito.ru\r\nbackoffice.avito.ru\r\nbackoffice.dbo.sovcombank.ru\r\nbackoffice.dev.cloud.mts.ru\r\nbackoffice.kino-teatr.ru\r\nbackoffice.t2ru-pay.corp.t2.ru\r\nbackpack.avito.ru\r\nbackstage.avito.ru\r\nbackstage.swarm.cgu.mchs.ru\r\nbackup-bar-navig.yandex.ru\r\nbackup.avito.ru\r\nbackup.cloud.mts.ru\r\nbackup.kino-teatr.ru\r\nbackup.nsk.cloud.mts.ru\r\nbackup.spb.cloud.mts.ru\r\nbackup.vld.cloud.mts.ru\r\nbackup01.avito.ru\r\nbackup01.db.rbc.ru\r\nbackup01.infra.rbc.ru\r\nbackup01e.maps.yandex.ru\r\nbackup02.avito.ru\r\nbackup1.avito.ru\r\nbackup152.msk.cloud.mts.ru\r\nbackup2.avito.ru\r\nbackup3.avito.ru\r\nbackup4.avito.ru\r\nbackup5.avito.ru\r\nbackup6.avito.ru\r\nbackupmx.avito.ru\r\nbackups.avito.ru\r\nbackupserver.avito.ru\r\nbackyard.avito.ru\r\nbaco.avito.ru\r\nbacon.avito.ru\r\nbacon.rambler.ru\r\nbacula.avito.ru\r\nbad.avito.ru\r\nbad.yandex.ru\r\nbad2.yandex.ru\r\nbada.avito.ru\r\nbadboy.avito.ru\r\nbadger.avito.ru\r\nbae.avito.ru\r\nbagdad.mail.ru\r\nbaghdad.avito.ru\r\nbaikal.avito.ru\r\nbaikal.life.ru\r\nbaikal.tg.t2.ru\r\nbaikal.travel.t2.ru\r\nbaikonur.fmba.gov.ru\r\nbailey.avito.ru\r\nbailiff.dit.mos.ru\r\nbaito.avito.ru\r\nbak.avito.ru\r\nbakadm.tomsk.gov.ru\r\nbakal.hh.ru\r\nbakchar.social.tomsk.gov.ru\r\nbaker.avito.ru\r\nbaki.avito.ru\r\nbakst.lenta.ru\r\nbaku.avito.ru\r\nbaku.yandex.ru\r\nbalabanovo-r40.gosweb.gosuslugi.ru\r\nbalagur.yandex.ru\r\nbalahta.drom.ru\r\nbalance-iva-cluster.yandex.ru\r\nbalance-parkingapi.yandex.ru\r\nbalance-parkingsimple.yandex.ru\r\nbalance-simpleapi.yandex.ru\r\nbalance.avito.ru\r\nbalance.beeline.ru\r\nbalance.net.ixbt.com\r\nbalance.yandex.ru\r\nbalancer-test.rk.gov.ru\r\nbalancer-vod.1tv.ru\r\nbalancer.avito.ru\r\nbalancer.serp.yandex.ru\r\nbalancer0-00.yandex.ru\r\nbalancer2-00.yandex.ru\r\nbalancer5-00.yandex.ru\r\nbalancer7-00.yandex.ru\r\nbalashiha.drom.ru\r\nbalashiha.home.megafon.ru\r\nbalashiha.mts.ru\r\nbalashiha.test.home.megafon.ru\r\nbalashikha.hh.ru\r\nbalder.avito.ru\r\nbalgazin.drom.ru\r\nbali.avito.ru\r\nbalkans.dev.kp.ru\r\nbalkans.kp.ru\r\nbaloo.avito.ru\r\nbaltimore.avito.ru\r\nbam.avito.ru\r\nbambi.avito.ru\r\nbambino.avito.ru\r\nbamboo.avito.ru\r\nbamboo.rbc.ru\r\nbamboo01.infra.rbc.ru\r\nban.avito.ru\r\nbanan.magnit.ru\r\nbanana.avito.ru\r\nbancuri.avito.ru\r\nbandar.avito.ru\r\nbandung.avito.ru\r\nbandwidth.avito.ru\r\nbane.avito.ru\r\nbang.avito.ru\r\nbangbang.avito.ru\r\nbangbros.avito.ru\r\nbangkok.avito.ru\r\nbank-mob-test.psbank.ru\r\nbank-mob.psbank.ru\r\nbank-web-test.psbank.ru\r\nbank-web.psbank.ru\r\nbank.avito.ru\r\nbank.beeline.ru\r\nbank.megafon.ru\r\nbank.openbank.ru\r\nbank.ozon.ru\r\nbank.psbank.ru\r\nbank.wildberries.ru\r\nbank2015-qa.tinkoff.ru\r\nbankclient.bur.rshb.ru\r\nbankclient.hab.rshb.ru\r\nbankclient.kamchatka.rshb.ru\r\nbankclient.kirov.rshb.ru\r\nbankclient.mar.rshb.ru\r\nbankclient.orn.rshb.ru\r\nbankclient.primor.rshb.ru\r\nbankclient.spb.rshb.ru\r\nbankclient.tomsk.rshb.ru\r\nbankclient.tver.rshb.ru\r\nbankconf.rbc.ru\r\nbankhlynov.credit-registry.nalog.ru\r\nbanki.rbc.ru\r\nbankiru.fa.apim.psbank.ru\r\nbankofkazan.credit-registry.nalog.ru\r\nbankofyear.banki.ru\r\nbankrotstvo.9111.ru\r\nbankrupt-forum.interfax.ru\r\nbankruptcy.kommersant.ru\r\nbankruptcy2.kommersant.ru\r\nbanksoyuz.credit-registry.nalog.ru\r\nbanksy.mts.ru\r\nbanned.rkn.gov.ru\r\nbanner.avito.ru\r\nbanner.consultant.ru\r\nbanner2.avito.ru\r\nbanners.avito.ru\r\nbanners.beeline.ru\r\nbanners.zdorovie-shkolnika.spb.aif.ru\r\nbaobab.avito.ru\r\nbaobao.avito.ru\r\nbap.avito.ru\r\nbappeda.avito.ru\r\nbar-navig.yandex.ru\r\nbar.avito.ru\r\nbar.export.yandex.ru\r\nbar.gismeteo.ru\r\nbar.love.mail.ru\r\nbar.yandex.ru\r\nbara.avito.ru\r\nbarabinsk.drom.ru\r\nbaraholka.avito.ru\r\nbaran.avito.ru\r\nbarbados.avito.ru\r\nbarbara.avito.ru\r\nbarbara.babyblog.ru\r\nbarcelona.avito.ru\r\nbarcode.avito.ru\r\nbarisgungor.01.yandex.ru\r\nbarlow.avito.ru\r\nbarmen.blizko.ru\r\nbarmen.pulscen.ru\r\nbarnaul.avito.ru\r\nbarnaul.babyblog.ru\r\nbarnaul.beeline.ru\r\nbarnaul.dns-shop.ru\r\nbarnaul.drom.ru\r\nbarnaul.hh.ru\r\nbarnaul.lemanapro.ru\r\nbarnaul.mts.ru\r\nbarnaul.rtp.sbc.sip.beeline.ru\r\nbarnaul.sig.sbc.sip.beeline.ru\r\nbarnaul.tele2.ru\r\nbarney.avito.ru\r\nbaron.avito.ru\r\nbarra.avito.ru\r\nbarracuda.avito.ru\r\nbarracuda1.avito.ru\r\nbarracuda2.avito.ru\r\nbarrie.avito.ru\r\nbarry.avito.ru\r\nbars.avito.ru\r\nbars3.mail.ru\r\nbart.avito.ru\r\nbarton.avito.ru\r\nbaryshevo.drom.ru\r\nbas.avito.ru\r\nbas.feedback.rosatom.ru\r\nbase.avito.ru\r\nbase.consultant.ru\r\nbase.garant.ru\r\nbase.www.consultant.ru\r\nbase1.avito.ru\r\nbase2.avito.ru\r\nbaseball.avito.ru\r\nbaseball.zdorovie-shkolnika.spb.aif.ru\r\nbasel.avito.ru\r\nbash.18.yandex.ru\r\nbash.avito.ru\r\nbashkortostan.alfabank.ru\r\nbashkortostan.dev.home.megafon.ru\r\nbashkortostan.mts.ru\r\nbashkortostan.shop.megafon.ru\r\nbasic-nodejs-dev.avito.ru\r\nbasic-test-static.sports.ru\r\nbasic.avito.ru\r\nbasij.avito.ru\r\nbasil.avito.ru\r\nbasket.avito.ru\r\nbass.avito.ru\r\nbastinda.yandex.ru\r\nbastion.avito.ru\r\nbat.avito.ru\r\nbatch.avito.ru\r\nbatman.avito.ru\r\nbattle.avito.ru\r\nbauer.avito.ru\r\nbauhaus.avito.ru\r\nbay.avito.ru\r\nbayan-ext-front.yandex.ru\r\nbayan-prestable.yandex.ru\r\nbayan-testing.yandex.ru\r\nbayan.pepelac1ft.yandex.ru\r\nbayan.pepelac1t.yandex.ru\r\nbayan.yandex.ru\r\nbayan2.pepelac1ft.yandex.ru\r\nbayan2.pepelac1t.yandex.ru\r\nbayan2.yandex.ru\r\nbayern.avito.ru\r\nbayside.cit.avito.ru\r\nbayunovoklyuchevskij-r22.gosweb.gosuslugi.ru\r\nbaza.007.yandex.ru\r\nbaza.avito.ru\r\nbaza.drom.ru\r\nbazaar.avito.ru\r\nbazar.avito.ru\r\nbazar.babyblog.ru\r\nbazar.dns-shop.ru\r\nbb.avito.ru\r\nbb.mail.ru\r\nbb.task.ixbt.com\r\nbb1.avito.ru\r\nbba.avito.ru\r\nbbb.avito.ru\r\nbbb.dns-shop.ru\r\nbbb.srv.hub.litres.ru\r\nbbb.test.mchs.ru\r\nbbb.tinkoff.ru\r\nbbbsrv.css.rzd.ru\r\nbbc.avito.ru\r\nbbimd.cn.www.sports.ru\r\nbbm.avito.ru\r\nbbone-002.minprom.gov.ru\r\nbbone-003.minprom.gov.ru\r\nbbone-004.minprom.gov.ru\r\nbbone-005.minprom.gov.ru\r\nbbone-007.minprom.gov.ru\r\nbbone-008.minprom.gov.ru\r\nbbone-010.minprom.gov.ru\r\nbbone-241.minprom.gov.ru\r\nbbone-242.minprom.gov.ru\r\nbbone-243.minprom.gov.ru\r\nbbone-244.minprom.gov.ru\r\nbbone-245.minprom.gov.ru\r\nbbone-246.minprom.gov.ru\r\nbbone-247.minprom.gov.ru\r\nbbone-248.minprom.gov.ru\r\nbbone-249.minprom.gov.ru\r\nbbone-250.minprom.gov.ru\r\nbbone-253.minprom.gov.ru\r\nbbone-border.minprom.gov.ru\r\nbbone-brd.minprom.gov.ru\r\nbbone-gw.minprom.gov.ru\r\nbbone-gw1.minprom.gov.ru\r\nbbone-gw2.minprom.gov.ru\r\nbbone-net.minprom.gov.ru\r\nbbq.avito.ru\r\nbbr.credit-registry.nalog.ru\r\nbbs.avito.ru\r\nbbs1.avito.ru\r\nbbs2.avito.ru\r\nbbss.avito.ru\r\nbbt.avito.ru\r\nbbt.rbc.ru\r\nbbtest.avito.ru\r\nbbtest.zdorovie-shkolnika.spb.aif.ru\r\nbc-pc-ext-dev1.mkb.ru\r\nbc-pc-ext.mkb.ru\r\nbc.altay.rshb.ru\r\nbc.avito.ru\r\nbc.chechnya.rshb.ru\r\nbc.chukotka.rshb.ru\r\nbc.nsk.rshb.ru\r\nbc.rbc.ru\r\nbc.rshb.ru\r\nbc.ryazan.rshb.ru\r\nbc.shl.rshb.ru\r\nbc1.avito.ru\r\nbc11.avito.ru\r\nbca.avito.ru\r\nbcast-199.minprom.gov.ru\r\nbcback1e.yandex.ru\r\nbcc.avito.ru\r\nbcdrussia.worldbank.org\r\nbcdrussiadev.worldbank.org\r\nbcdrussiaqa.worldbank.org\r\nbcdrussiastg.worldbank.org\r\nbcgp.rosnedra.gov.ru\r\nbck.avito.ru\r\nbclient01-v.yandex.ru\r\nbclient01.yandex.ru\r\nbclient02-v.yandex.ru\r\nbclient02.yandex.ru\r\nbclient03.yandex.ru\r\nbclient04.yandex.ru\r\nbclient05.yandex.ru\r\nbclient06-v.yandex.ru\r\nbclient06.yandex.ru\r\nbclient07.yandex.ru\r\nbclient08.yandex.ru\r\nbclient09.yandex.ru\r\nbclient10.yandex.ru\r\nbcm.avito.ru\r\nbcon.rosbank.ru\r\nbcp.avito.ru\r\nbcrm.vimpelcom.ru\r\nbcs.avito.ru\r\nbcs.rbc.ru\r\nbcsearch01ft.yandex.ru\r\nbcst-oa.ohx.avito.ru\r\nbcst-xa.ohx.avito.ru\r\nbcst-xb.ohx.avito.ru\r\nbcvirtual1.yandex.ru\r\nbcvirtual2.yandex.ru\r\nbd.avito.ru\r\nbd.mail.ru\r\nbd.megafon.ru\r\nbd071780.virtua.com.br.hh.ru\r\nbd51ccaa25461a9bf8b8bf9a88e323-16ffecb998ee445e80f5e6ca5ea59e24.ops.beeline.ru\r\nbd676ccd-e9de-4419-a890-92930e538c50.kino-teatr.ru\r\nbdc.avito.ru\r\nbdl.rutube.ru\r\nbdo.corp.t2.ru\r\nbdog.avito.ru\r\nbds.avito.ru\r\nbdsm.avito.ru\r\nbdtour.megafon.ru\r\nbe.avito.ru\r\nbea.avito.ru\r\nbeach.avito.ru\r\nbeacon.avito.ru\r\nbeagle.avito.ru\r\nbeaker.avito.ru\r\nbeam-amer.dev.api.max.com\r\nbeam-amer.euc1.prd.api.max.com\r\nbeam-amer.euc1.stg.api.max.com\r\nbeam-amer.eun1.prd.api.max.com\r\nbeam-amer.euw1.prd.api.max.com\r\nbeam-amer.euw1.stg.api.max.com\r\nbeam-amer.int.api.max.com\r\nbeam-amer.prd.api.max.com\r\nbeam-amer.stg.api.max.com\r\nbeam-amer.use.dev.api.max.com\r\nbeam-amer.use.int.api.max.com\r\nbeam-amer.use.prd.api.max.com\r\nbeam-amer.use.stg.api.max.com\r\nbeam-amer.use1.dev.api.max.com\r\nbeam-amer.use1.int.api.max.com\r\nbeam-amer.use1.prd.api.max.com\r\nbeam-amer.use1.stg.api.max.com\r\nbeam-amer.use2.prd.api.max.com\r\nbeam-amer.use2.stg.api.max.com\r\nbeam-amer.usw2.int.api.max.com\r\nbeam-amer.usw2.prd.api.max.com\r\nbeam-amer.usw2.stg.api.max.com\r\nbeam-any.dev.api.max.com\r\nbeam-any.euc1.prd.api.max.com\r\nbeam-any.euc1.stg.api.max.com\r\nbeam-any.eun1.prd.api.max.com\r\nbeam-any.euw1.prd.api.max.com\r\nbeam-any.euw1.stg.api.max.com\r\nbeam-any.int.api.max.com\r\nbeam-any.prd.api.max.com\r\nbeam-any.stg.api.max.com\r\nbeam-any.use.dev.api.max.com\r\nbeam-any.use.int.api.max.com\r\nbeam-any.use.prd.api.max.com\r\nbeam-any.use.stg.api.max.com\r\nbeam-any.use1.dev.api.max.com\r\nbeam-any.use1.int.api.max.com\r\nbeam-any.use1.prd.api.max.com\r\nbeam-any.use1.stg.api.max.com\r\nbeam-any.use2.prd.api.max.com\r\nbeam-any.use2.stg.api.max.com\r\nbeam-any.usw2.int.api.max.com\r\nbeam-any.usw2.prd.api.max.com\r\nbeam-any.usw2.stg.api.max.com\r\nbeam-apac.dev.api.max.com\r\nbeam-apac.euc1.stg.api.max.com\r\nbeam-apac.euw1.stg.api.max.com\r\nbeam-apac.int.api.max.com\r\nbeam-apac.stg.api.max.com\r\nbeam-apac.use.dev.api.max.com\r\nbeam-apac.use.int.api.max.com\r\nbeam-apac.use.stg.api.max.com\r\nbeam-apac.use1.dev.api.max.com\r\nbeam-apac.use1.int.api.max.com\r\nbeam-apac.use1.stg.api.max.com\r\nbeam-apac.use2.stg.api.max.com\r\nbeam-apac.usw2.int.api.max.com\r\nbeam-apac.usw2.stg.api.max.com\r\nbeam-emea.dev.api.max.com\r\nbeam-emea.euc1.prd.api.max.com\r\nbeam-emea.euc1.stg.api.max.com\r\nbeam-emea.eun1.prd.api.max.com\r\nbeam-emea.euw1.prd.api.max.com\r\nbeam-emea.euw1.stg.api.max.com\r\nbeam-emea.int.api.max.com\r\nbeam-emea.prd.api.max.com\r\nbeam-emea.stg.api.max.com\r\nbeam-emea.use.dev.api.max.com\r\nbeam-emea.use.int.api.max.com\r\nbeam-emea.use.prd.api.max.com\r\nbeam-emea.use.stg.api.max.com\r\nbeam-emea.use1.dev.api.max.com\r\nbeam-emea.use1.int.api.max.com\r\nbeam-emea.use1.prd.api.max.com\r\nbeam-emea.use1.stg.api.max.com\r\nbeam-emea.use2.prd.api.max.com\r\nbeam-emea.use2.stg.api.max.com\r\nbeam-emea.usw2.int.api.max.com\r\nbeam-emea.usw2.prd.api.max.com\r\nbeam-emea.usw2.stg.api.max.com\r\nbeam-latam.dev.api.max.com\r\nbeam-latam.euc1.prd.api.max.com\r\nbeam-latam.euc1.stg.api.max.com\r\nbeam-latam.eun1.prd.api.max.com\r\nbeam-latam.euw1.prd.api.max.com\r\nbeam-latam.euw1.stg.api.max.com\r\nbeam-latam.int.api.max.com\r\nbeam-latam.prd.api.max.com\r\nbeam-latam.stg.api.max.com\r\nbeam-latam.use.dev.api.max.com\r\nbeam-latam.use.int.api.max.com\r\nbeam-latam.use.prd.api.max.com\r\nbeam-latam.use.stg.api.max.com\r\nbeam-latam.use1.dev.api.max.com\r\nbeam-latam.use1.int.api.max.com\r\nbeam-latam.use1.prd.api.max.com\r\nbeam-latam.use1.stg.api.max.com\r\nbeam-latam.use2.prd.api.max.com\r\nbeam-latam.use2.stg.api.max.com\r\nbeam-latam.usw2.int.api.max.com\r\nbeam-latam.usw2.prd.api.max.com\r\nbeam-latam.usw2.stg.api.max.com\r\nbeam.avito.ru\r\nbean.avito.ru\r\nbear.avito.ru\r\nbeast.avito.ru\r\nbeatles.avito.ru\r\nbeatrice.avito.ru\r\nbeautiful.avito.ru\r\nbeautifulcode.sber.ru\r\nbeauty-spb.aif.ru\r\nbeauty.avito.ru\r\nbeauty.lady.mail.ru\r\nbeauty.qa.max.com\r\nbeauty.sports.ru\r\nbebe.avito.ru\r\nbedn.minfo.rk.gov.ru\r\nbedroom.avito.ru\r\nbee.avito.ru\r\nbeeapp-rep.beeline.ru\r\nbeebucket.beeline.ru\r\nbeecloud.beeline.ru\r\nbeegate.beeline.ru\r\nbeehive.avito.ru\r\nbeekas-01.beeline.ru\r\nbeekas-02.beeline.ru\r\nbeekeeping.avito.ru\r\nbeeline-dfs.ivi.ru\r\nbeeline-walks.afisha.ru\r\nbeeline.avito.ru\r\nbeeline.lenta.ru\r\nbeelinerusall.litres.ru\r\nbeelineruslisten.litres.ru\r\nbeelineruspremium.litres.ru\r\nbeelinerusread.litres.ru\r\nbeelineuz-dfs.ivi.ru\r\nbeemonitor.beeline.ru\r\nbeepayxp-atm.beeline.ru\r\nbeepayxp.beeline.ru\r\nbeepayxppg.beeline.ru\r\nbeepayxppg0.beeline.ru\r\nbeepayxppg2.beeline.ru\r\nbeepayxppg3.beeline.ru\r\nbeeport.beeline.ru\r\nbeer.avito.ru\r\nbeer.zdorovie-shkolnika.spb.aif.ru\r\nbeethoven.avito.ru\r\nbeevd.tinkoff.ru\r\nbeevideo.beeline.ru\r\nbeezip.vimpelcom.ru\r\nbeg31.08.81.yandex.ru\r\nbegipetr.tass.ru\r\nbeheer.avito.ru\r\nbehzad.avito.ru\r\nbeijing.avito.ru\r\nbel-licei-inter.gosuslugi.ru\r\nbel.dev.kp.ru\r\nbel.home.megafon.ru\r\nbel.kp.ru\r\nbel.parliament.gov.ru\r\nbel.shop.megafon.ru\r\nbelarus.avito.ru\r\nbelarus.garant.ru\r\nbelarus.kp.ru\r\nbelgorod.aif.ru\r\nbelgorod.avito.ru\r\nbelgorod.babyblog.ru\r\nbelgorod.beeline.ru\r\nbelgorod.dns-shop.ru\r\nbelgorod.drom.ru\r\nbelgorod.fas.gov.ru\r\nbelgorod.hh.ru\r\nbelgorod.lemanapro.ru\r\nbelgorod.mts.ru\r\nbelgorod.tele2.ru\r\nbelgorod.tutu.ru\r\nbelgorod.views.t2.ru\r\nbelichkova.9111.ru\r\nbelikova.shared.dev.lab.x5.ru\r\nbeliz2.mail.ru\r\nbelize.avito.ru\r\nbelka.avito.ru\r\nbell.avito.ru\r\nbella.avito.ru\r\nbellatrix.avito.ru\r\nbelle.avito.ru\r\nbells.avito.ru\r\nbelmaysky.home.megafon.ru\r\nbeloyarsk.mts.ru\r\nbeloyarsky.home.megafon.ru\r\nbeltelecomall.litres.ru\r\nbem.avito.ru\r\nben.5ur.yandex.ru\r\nben.avito.ru\r\nben10.avito.ru\r\nben10.vk.com\r\nbenchmark.avito.ru\r\nbender-hosting.rbc.ru\r\nbender.avito.ru\r\nbender.mail.ru\r\nbenefits.avito.ru\r\nbenefits.sfera.x5.ru\r\nbenjamin.avito.ru\r\nbenny.avito.ru\r\nbentley.kommersant.ru\r\nbeny.avito.ru\r\nbenz.avito.ru\r\nberdsk.dns-shop.ru\r\nberdsk.drom.ru\r\nberezniki.dns-shop.ru\r\nberezovskoe-vorobevskij-r20.gosweb.gosuslugi.ru\r\nbergs-hosting.rbc.ru\r\nberkakit.sakha.gov.ru\r\nberlin.avito.ru\r\nberlinale.kinofestivali.tass.ru\r\nberry.avito.ru\r\nbert.avito.ru\r\nberyl.avito.ru\r\nbes.avito.ru\r\nbeslan.lenta.ru\r\nbeslan.life.ru\r\nbest-tax.psbank.ru\r\nbest.avito.ru\r\nbest.x5.ru\r\nbest.yandex.ru\r\nbestblogger.lady.mail.ru\r\nbestcar.avito.ru\r\nbestcodecs.avito.ru\r\nbestdeal.avito.ru\r\nbestdigitalcodecs.avito.ru\r\nbestfreecodecs.avito.ru\r\nbestgames.mail.ru\r\nbestlivecodecs.avito.ru\r\nbestmediacodecs.avito.ru\r\nbestmediafile.avito.ru\r\nbestmediafileinc.avito.ru\r\nbestmediafiles.avito.ru\r\nbestmediafilesinc.avito.ru\r\nbestnewcodecs.avito.ru\r\nbestphoto.2gis.ru\r\nbestseller.avito.ru\r\nbestthiscodecs.avito.ru\r\nbestway.avito.ru\r\nbet.avito.ru\r\nbet.stage.championat.com\r\nbeta-asoz.megafon.ru\r\nbeta-dev.test.gosuslugi.ru\r\nbeta-feedback.yandex.ru\r\nbeta-hf.db-test.vtb.ru\r\nbeta-ic.pics.livejournal.com\r\nbeta-maps.yandex.ru\r\nbeta-promo.yandex.ru\r\nbeta.1tv.ru\r\nbeta.2gis.ru\r\nbeta.admin.avito.ru\r\nbeta.ai.sber.ru\r\nbeta.aif-city.spb.aif.ru\r\nbeta.api-appmetrica.yandex.ru\r\nbeta.api-appmetrika.yandex.ru\r\nbeta.api-metrica.yandex.ru\r\nbeta.api-metrika.yandex.ru\r\nbeta.arabic.euronews.com\r\nbeta.avito.ru\r\nbeta.bayan.yandex.ru\r\nbeta.busines-lady-spb.aif.ru\r\nbeta.city.yandex.ru\r\nbeta.db-test.vtb.ru\r\nbeta.db.vtb.ru\r\nbeta.dialogs.yandex.ru\r\nbeta.disk.yandex.ru\r\nbeta.dostoevskiy-spb.aif.ru\r\nbeta.euronews.com\r\nbeta.fr.euronews.com\r\nbeta.freecom-app-test.mts.ru\r\nbeta.gismeteo.ru\r\nbeta.gkh.hab.aif.ru\r\nbeta.gorod.yandex.ru\r\nbeta.gosuslugi.ru\r\nbeta.gov.ru\r\nbeta.hu.euronews.com\r\nbeta.kino-teatr.ru\r\nbeta.kinopoisk.ru\r\nbeta.kp.ru\r\nbeta.longread.altai.aif.ru\r\nbeta.m.soft.yandex.ru\r\nbeta.mail.ru\r\nbeta.maps.yandex.ru\r\nbeta.market-backend.api.2gis.ru\r\nbeta.md.heroism.yandex.ru\r\nbeta.metrica.yandex.ru\r\nbeta.metrika.yandex.ru\r\nbeta.mobsearch.yandex.ru\r\nbeta.n.maps.yandex.ru\r\nbeta.pikabu.ru\r\nbeta.pt.euronews.com\r\nbeta.qsupport.mts.ru\r\nbeta.rshb.ru\r\nbeta.soft.yandex.ru\r\nbeta.walks.yandex.ru\r\nbeta.webinar.2gis.ru\r\nbeta.webmaster.yandex.ru\r\nbeta.www.webinar.2gis.ru\r\nbeta.yandex.ru\r\nbeta.zdorovie-shkolnika.spb.aif.ru\r\nbeta.zen-test.yandex.ru\r\nbeta1.avito.ru\r\nbeta2.avito.ru\r\nbeta2.ria.ru\r\nbeta3.avito.ru\r\nbeta4.avito.ru\r\nbetaa.avito.ru\r\nbetablog.avito.ru\r\nbetadin.vesti.ru\r\nbetaface.yandex.ru\r\nbetarc.test.gosuslugi.ru\r\nbetaswa.mail.ru\r\nbetav2.avito.ru\r\nbeth.avito.ru\r\nbetkeeper.championat.com\r\nbeton1.i.mail.ru\r\nbeton2.i.mail.ru\r\nbetterday.users.avito.ru\r\nbetterwork.worldbank.org\r\nbetterworkdev.worldbank.org\r\nbetterworkqa.worldbank.org\r\nbetterworkstg.worldbank.org\r\nbetterworktst.worldbank.org\r\nbetty.avito.ru\r\nbewerbung.avito.ru\r\nbeyond.avito.ru\r\nbezbumag.psbank.ru\r\nbezgranic.magnit.ru\r\nbezotgovorok.rbc.ru\r\nbezviz.tass.ru\r\nbf.avito.ru\r\nbf.mail.ru\r\nbf.sberbank.ru\r\nbf108.mail.ru\r\nbf109.mail.ru\r\nbf110.mail.ru\r\nbf111.mail.ru\r\nbf112.mail.ru\r\nbf113.mail.ru\r\nbf149.mail.ru\r\nbf15.mail.ru\r\nbf21.mail.ru\r\nbf34.mail.ru\r\nbf51.mail.ru\r\nbf52.mail.ru\r\nbfd-b.wildberries.ru\r\nbfd.mkb.ru\r\nbfd.sberbank.ru\r\nbfds.sberbank.ru\r\nbff.mvideo.ru\r\nbff.www.mvideo.ru\r\nbfm.avito.ru\r\nbfm.sberbank.ru\r\nbfqde2023llsplde12qd27qdl.kino-teatr.ru\r\nbfsender1.mail.ru\r\nbfsender2.mail.ru\r\nbfsender3.mail.ru\r\nbfsender4.mail.ru\r\nbfsender5.mail.ru\r\nbg.22.yandex.ru\r\nbg.alfabank.ru\r\nbg.avito.ru\r\nbg.rgis.rk.gov.ru\r\nbg.rgistest.rk.gov.ru\r\nbgp.avito.ru\r\nbgr01swd.avito.ru\r\nbgs.avito.ru\r\nbgu.minfin.rk.gov.ru\r\nbh.avito.ru\r\nbh.beeline.ru\r\nbhc.avito.ru\r\nbhm.avito.ru\r\nbhost.beeline.ru\r\nbhv.sberbank.ru\r\nbi-test.avito.ru\r\nbi.avito.ru\r\nbi.fadn.gov.ru\r\nbi.mail.ru\r\nbi.mts.ru\r\nbi.rutube.ru\r\nbi.sakhalin.gov.ru\r\nbi01.zakupki.gov.ru\r\nbi02.zakupki.gov.ru\r\nbi223.zakupki.gov.ru\r\nbi94.zakupki.gov.ru\r\nbia.avito.ru\r\nbianca.avito.ru\r\nbib.avito.ru\r\nbibigon.yandex.ru\r\nbible.avito.ru\r\nbiblio.avito.ru\r\nbiblio.litres.ru\r\nbibliofree.litres.ru\r\nbiblionight.culture.ru\r\nbiblioteca.avito.ru\r\nbiblioteka.avito.ru\r\nbiblioteka.duma.gov.ru\r\nbibliotheque.avito.ru\r\nbid.avito.ru\r\nbid.dsp.rambler.ru\r\nbid.max.ru\r\nbid01.dsp.rambler.ru\r\nbid02.dsp.rambler.ru\r\nbidders.rtb.beeline.ru\r\nbienveillance.test.euronews.com\r\nbig-dick.yandex.ru\r\nbig.avito.ru\r\nbig5.avito.ru\r\nbigb-fast-iva.yandex.ru\r\nbigbang.avito.ru\r\nbigben.avito.ru\r\nbigbrother.avito.ru\r\nbigbrother.yandex.ru\r\nbigcloud-test.mkb.ru\r\nbigcloud.mkb.ru\r\nbigdata.beeline.ru\r\nbigdata.demo.megafon.ru\r\nbigdog.avito.ru\r\nbiggi.24.yandex.ru\r\nbigmac.avito.ru\r\nbigtits.avito.ru\r\nbik.mail.ru\r\nbike.avito.ru\r\nbikini.avito.ru\r\nbilal.avito.ru\r\nbilbo.avito.ru\r\nbilder.avito.ru\r\nbilet.avito.ru\r\nbilet.beeline.ru\r\nbilet.mos.ru\r\nbilets.vk.com\r\nbilety.vk.com\r\nbiling.avito.ru\r\nbill-1608-www.k.avito.ru\r\nbill-1626-m.k.avito.ru\r\nbill-1626-www.k.avito.ru\r\nbill-1631-www.k.avito.ru\r\nbill-1638-www.k.avito.ru\r\nbill-1640-www.k.avito.ru\r\nbill-2054-www.k.avito.ru\r\nbill-220-www.k.avito.ru\r\nbill-3060-www.k.avito.ru\r\nbill.avito.ru\r\nbill2.avito.ru\r\nbilling.avito.ru\r\nbilling.rbc.ru\r\nbilling1.avito.ru\r\nbilling2.avito.ru\r\nbillpay.avito.ru\r\nbills.avito.ru\r\nbilly.avito.ru\r\nbim.avito.ru\r\nbin.avito.ru\r\nbinario-delivery.api.2gis.ru\r\nbinary.alfabank.ru\r\nbinary.avito.ru\r\nbinbank-online.open.ru\r\nbindcard.tele2.ru\r\nbinding-api-demo.demo.mdrive.magnit.ru\r\nbinding-api-demo.mdrive.magnit.ru\r\nbinding-api.mdrive.magnit.ru\r\nbindu.avito.ru\r\nbingo.avito.ru\r\nbinupdate.mail.ru\r\nbio.avito.ru\r\nbioinfo.avito.ru\r\nbiologie.avito.ru\r\nbiology.avito.ru\r\nbiotech.avito.ru\r\nbiotechclub.tass.ru\r\nbiotherm.kommersant.ru\r\nbip.avito.ru\r\nbipocdevreporting.worldbank.org\r\nbipocqareporting.worldbank.org\r\nbipocreporting.worldbank.org\r\nbipocstgreporting.worldbank.org\r\nbipoctrnreporting.worldbank.org\r\nbiprdreporting.worldbank.org\r\nbiqareporting.worldbank.org\r\nbird.avito.ru\r\nbirds.avito.ru\r\nbireporting.worldbank.org\r\nbirmingham.avito.ru\r\nbirobidzhan.lemanapro.ru\r\nbirthday.avito.ru\r\nbirthday.magnit.ru\r\nbis.avito.ru\r\nbisa.wifi.mts.ru\r\nbisearch2.yandex.ru\r\nbiservice.worldbank.org\r\nbiservicedev.worldbank.org\r\nbiserviceqa.worldbank.org\r\nbishkek.kp.ru\r\nbismarck.avito.ru\r\nbison.avito.ru\r\nbistgqareporting.worldbank.org\r\nbistgreporting.worldbank.org\r\nbistroff.lady.mail.ru\r\nbistronom.youdo.com\r\nbit.1c2015.yandex.ru\r\nbit.avito.ru\r\nbitableau.tele2.ru\r\nbitbucket.rbc.ru\r\nbitbucket01.infra.rbc.ru\r\nbitbucket2.worldbank.org\r\nbitbucket50.worldbank.org\r\nbitest2.avito.ru\r\nbitools.sovcombank.ru\r\nbitrix-app-test.open.ru\r\nbitrix.avito.ru\r\nbitrix.fmba.gov.ru\r\nbitrix.spbdept.rbc.ru\r\nbitrix2-trust-tst.open.ru\r\nbitrix2-trust.open.ru\r\nbitrix24-prod.interfax.ru\r\nbitrix24-test-2.interfax.ru\r\nbitrix24-test.interfax.ru\r\nbitrix24-trial.interfax.ru\r\nbitrnqareporting.worldbank.org\r\nbitrnreporting.worldbank.org\r\nbits.avito.ru\r\nbitstreporting.worldbank.org\r\nbitva.mail.ru\r\nbitvatv.rutube.ru\r\nbitvazatv-dev.rutube.ru\r\nbiuro.avito.ru\r\nbiwer.2015.yandex.ru\r\nbiyou.avito.ru\r\nbiysk.babyblog.ru\r\nbiysk.beeline.ru\r\nbiysk.rtp.sbc.sip.beeline.ru\r\nbiysk.sig.sbc.sip.beeline.ru\r\nbiz-tycoon.mail.ru\r\nbiz.1000watt.yandex.ru\r\nbiz.alania.gov.ru\r\nbiz.avito.ru\r\nbiz.megafon.ru\r\nbiz.teams.infra.rbc.ru\r\nbizaccount-metabase.web-staging.2gis.ru\r\nbizconf.rbc.ru\r\nbiznes.avito.ru\r\nbiztalk2.mkb.ru\r\nbj.avito.ru\r\nbjv.project.tinkoff.ru\r\nbk.avito.ru\r\nbk.rg.ru\r\nbk.youdo.com\r\nbk01.avito.ru\r\nbk1.avito.ru\r\nbk2.avito.ru\r\nbk3.avito.ru\r\nbkm.avito.ru\r\nbko-dbm01f.maps.yandex.ru\r\nbko-dbs01e.maps.yandex.ru\r\nbko-dbs01h.maps.yandex.ru\r\nbko-srv01f.maps.yandex.ru\r\nbko-teamwork01f.maps.yandex.ru\r\nbkp.avito.ru\r\nbks.avito.ru\r\nbl.avito.ru\r\nbl.kommersant.ru\r\nbl.mts.ru\r\nbl.rutube.ru\r\nbla.avito.ru\r\nblack-new.project.tinkoff.ru\r\nblack.avito.ru\r\nblack.indigoberry.yandex.ru\r\nblack.yellowberry.yandex.ru\r\nblackandwhite.avito.ru\r\nblackberry.avito.ru\r\nblackberry9800.beeline.ru\r\nblackbird.avito.ru\r\nblackboard.avito.ru\r\nblackbox.avito.ru\r\nblackcat.avito.ru\r\nblackfriday.mail.ru\r\nblackfriday.vprok.ru\r\nblackhole.avito.ru\r\nblackhole.beeline.ru\r\nblackjack.avito.ru\r\nblacklabel.avito.ru\r\nblacklist.avito.ru\r\nblackorchid.lenta.ru\r\nblackpearl.avito.ru\r\nblackstar.alfabank.ru\r\nblacksun.avito.ru\r\nblacky.avito.ru\r\nblade.avito.ru\r\nblade1.avito.ru\r\nblade10.avito.ru\r\nblade10.vk.com\r\nblade11.avito.ru\r\nblade13.avito.ru\r\nblade2.avito.ru\r\nblade3.avito.ru\r\nblade4.avito.ru\r\nblade5.avito.ru\r\nblade6.avito.ru\r\nblade7.avito.ru\r\nblade8.avito.ru\r\nblade9.avito.ru\r\nblago.avito.ru\r\nblago.magnit.ru\r\nblagoustroystvo.tass.ru\r\nblagoveshchensk.drom.ru\r\nblagoveshchensk.lemanapro.ru\r\nblah.avito.ru\r\nblake.avito.ru\r\nblanco.avito.ru\r\nblast.avito.ru\r\nblaster.avito.ru\r\nblaze.avito.ru\r\nblazer.avito.ru\r\nbleach.avito.ru\r\nblend.avito.ru\r\nblessing.avito.ru\r\nblik.avito.ru\r\nblinger-api.mts.ru\r\nblinger-app.mts.ru\r\nblinger-q.mts.ru\r\nblinger-static.mts.ru\r\nblink.avito.ru\r\nblink.lady.mail.ru\r\nbliss.avito.ru\r\nblitz.avito.ru\r\nblitz.mts.ru\r\nblizzard.avito.ru\r\nblob.avito.ru\r\nblob.azuremsk.ec.mts.ru\r\nblob.msk-azure.ec.mts.ru\r\nblock.avito.ru\r\nblock.rkn.gov.ru\r\nblock.yandex.ru\r\nblockchain.x5.ru\r\nblocked.avito.ru\r\nblocked.tinkoff.ru\r\nblog-admin.kino-teatr.ru\r\nblog-dev.avito.ru\r\nblog.avito.ru\r\nblog.eldorado.ru\r\nblog.gkh.hab.aif.ru\r\nblog.ivi.ru\r\nblog.kino-teatr.ru\r\nblog.kremlin.ru\r\nblog.ozon.ru\r\nblog.rutube.ru\r\nblog.yandex.ru\r\nblog.youdo.com\r\nblog1.avito.ru\r\nblog2.avito.ru\r\nblog3.avito.ru\r\nblogdev.avito.ru\r\nblogg.avito.ru\r\nblogger.avito.ru\r\nblogger.beeline.ru\r\nblogger.rutube.ru\r\nblogs-http.yandex.ru\r\nblogs.avito.ru\r\nblogs.ixbt.com\r\nblogs.mail.ru\r\nblogs.sps.rosatom.ru\r\nblogs.swa.mail.ru\r\nblogs.worldbank.org\r\nblogs.yandex.ru\r\nblogtest.avito.ru\r\nblogx.dev.avito.ru\r\nblondie.avito.ru\r\nblood.avito.ru\r\nbloom.avito.ru\r\nblossom.avito.ru\r\nblue.avito.ru\r\nblue.www.max.com\r\nbluebell.avito.ru\r\nblueberry.avito.ru\r\nbluebird.avito.ru\r\nbluedata.cloud.mts.ru\r\nbluemoon.avito.ru\r\nbluerabbit.yandex.ru\r\nbluerain.avito.ru\r\nblues.avito.ru\r\nbluesea.avito.ru\r\nbluesky.avito.ru\r\nblv.beeline.ru\r\nbm-web-test.mkb.ru\r\nbm.avito.ru\r\nbm.games.megafon.ru\r\nbm.yandex.ru\r\nbmadaptive01e.yandex.ru\r\nbmadaptive02e.yandex.ru\r\nbmail.avito.ru\r\nbmail.kino-teatr.ru\r\nbmapi-test01i.yandex.ru\r\nbmapi01i.yandex.ru\r\nbmapi02i.yandex.ru\r\nbmapp.alfabank.ru\r\nbmauditor01e.yandex.ru\r\nbmb.avito.ru\r\nbmbannerland01e.yandex.ru\r\nbmbannerland01i.yandex.ru\r\nbmbannerland02i.yandex.ru\r\nbmbannerland03e.yandex.ru\r\nbmbannerland03i.yandex.ru\r\nbmbannerland04e.yandex.ru\r\nbmbannerland04i.yandex.ru\r\nbmbannerland05i.yandex.ru\r\nbmbannerland06e.yandex.ru\r\nbmbannerland06i.yandex.ru\r\nbmbannerland07e.yandex.ru\r\nbmbannerland08e.yandex.ru\r\nbmbannerland08i.yandex.ru\r\nbmbannerland09e.yandex.ru\r\nbmbannerland09i.yandex.ru\r\nbmbannerland10e.yandex.ru\r\nbmbannerland11e.yandex.ru\r\nbmbannerland13e.yandex.ru\r\nbmbannerland14e.yandex.ru\r\nbmbannerland14i.yandex.ru\r\nbmbannerland15e.yandex.ru\r\nbmbannerland16e.yandex.ru\r\nbmbannerland17e.yandex.ru\r\nbmbannerland19e.yandex.ru\r\nbmbannerland20e.yandex.ru\r\nbmbannerland21e.yandex.ru\r\nbmbannerland22e.yandex.ru\r\nbmbannerland23e.yandex.ru\r\nbmbannerland24e.yandex.ru\r\nbmbannerland25e.yandex.ru\r\nbmbannerland26e.yandex.ru\r\nbmbannerland27e.yandex.ru\r\nbmbannerland28e.yandex.ru\r\nbmbannerland29e.yandex.ru\r\nbmbannerland30e.yandex.ru\r\nbmc.avito.ru\r\nbmgen-dev01e.yandex.ru\r\nbmprod01e.yandex.ru\r\nbms.avito.ru\r\nbmstat01e.yandex.ru\r\nbmw.avito.ru\r\nbmw.drom.ru\r\nbmw2series.afisha.ru\r\nbn.avito.ru\r\nbnc.avito.ru\r\nbnet.avito.ru\r\nbnetfgw.kino-teatr.ru\r\nbnpl-gateway-stage.wildberries.ru\r\nbnpl-gateway.wildberries.ru\r\nbns.avito.ru\r\nbns03.mail.ru\r\nbns1.mail.ru\r\nbns2.mail.ru\r\nbns3.mail.ru\r\nbns4.mail.ru\r\nbns5.mail.ru\r\nbns6.mail.ru\r\nbnsc.avito.ru\r\nbo-gate-1c.vtb.ru\r\nbo-gate-api.vtb.ru\r\nbo-test.vtb.ru\r\nbo-test11.vtb.ru\r\nbo.avito.ru\r\nbo.denisenko.shared.dev.lab.x5.ru\r\nbo.nalog.gov.ru\r\nbo.rosbank.ru\r\nbo.sport.mos.ru\r\nbo.vtb.ru\r\nboa.avito.ru\r\nboard.avito.ru\r\nboard.hh.ru\r\nboard.vk.com\r\nboard.zdorovie-shkolnika.spb.aif.ru\r\nboardapp.megafon.ru\r\nboardapp2.megafon.ru\r\nboardapps.worldbank.org\r\nboardappsqa.worldbank.org\r\nboardmaps-web.mkb.ru\r\nboardmaps-web2.mkb.ru\r\nboards.avito.ru\r\nboards.mchs.ru\r\nbob.avito.ru\r\nbobik.rbc.ru\r\nbobo.avito.ru\r\nbobrovk.dev.arh.mk.ru\r\nbobrovk.dev.ast.mk.ru\r\nbobrovk.dev.baikal.mk.ru\r\nbobrovk.dev.belgorod.mk.ru\r\nbobrovk.dev.blag.mk.ru\r\nbobrovk.dev.brl.mk.ru\r\nbobrovk.dev.cheb.mk.ru\r\nbobrovk.dev.chel.mk.ru\r\nbobrovk.dev.chr.mk.ru\r\nbobrovk.dev.crimea.mk.ru\r\nbobrovk.dev.eburg.mk.ru\r\nbobrovk.dev.hab.mk.ru\r\nbobrovk.dev.ivanovo.mk.ru\r\nbobrovk.dev.izhevsk.mk.ru\r\nbobrovk.dev.karel.mk.ru\r\nbobrovk.dev.kavkaz.mk.ru\r\nbobrovk.dev.kazan.mk.ru\r\nbobrovk.dev.kbr.mk.ru\r\nbobrovk.dev.kemerovo.mk.ru\r\nbobrovk.dev.kostroma.mk.ru\r\nbobrovk.dev.kras.mk.ru\r\nbobrovk.dev.kuban.mk.ru\r\nbobrovk.dev.kuzbass.mk.ru\r\nbobrovk.dev.magadan.mk.ru\r\nbobrovk.dev.mkala.mk.ru\r\nbobrovk.dev.mrl.mk.ru\r\nbobrovk.dev.murmansk.mk.ru\r\nbobrovk.dev.nn.mk.ru\r\nbobrovk.dev.novos.mk.ru\r\nbobrovk.dev.omsk.mk.ru\r\nbobrovk.dev.orel.mk.ru\r\nbobrovk.dev.oren.mk.ru\r\nbobrovk.dev.perm.mk.ru\r\nbobrovk.dev.rostov.mk.ru\r\nbobrovk.dev.rzn.mk.ru\r\nbobrovk.dev.samara.mk.ru\r\nbobrovk.dev.saratov.mk.ru\r\nbobrovk.dev.serp.mk.ru\r\nbobrovk.dev.sochi.mk.ru\r\nbobrovk.dev.spb.mk.ru\r\nbobrovk.dev.tambov.mk.ru\r\nbobrovk.dev.tomsk.mk.ru\r\nbobrovk.dev.tula.mk.ru\r\nbobrovk.dev.tumen.mk.ru\r\nbobrovk.dev.tv.mk.ru\r\nbobrovk.dev.tver.mk.ru\r\nbobrovk.dev.ufa.mk.ru\r\nbobrovk.dev.ugra.mk.ru\r\nbobrovk.dev.ul.mk.ru\r\nbobrovk.dev.ulan.mk.ru\r\nbobrovk.dev.vlad.mk.ru\r\nbobrovk.dev.vladimir.mk.ru\r\nbobrovk.dev.volg.mk.ru\r\nbobrovk.dev.vologda.mk.ru\r\nbobrovk.dev.vrn.mk.ru\r\nbobrovk.dev.www.mk.ru\r\nbobrovk.dev.yakutia.mk.ru\r\nbobrovk.dev.yar.mk.ru\r\nbobrovk.dev.yaroslavl.mk.ru\r\nboc.avito.ru\r\nbody.avito.ru\r\nbodybuilding.avito.ru\r\nbofge.mail.ru\r\nbogashevo.drom.ru\r\nbogdan.avito.ru\r\nbogota.avito.ru\r\nboguchany.drom.ru\r\nbogucharskij-r20.gosweb.gosuslugi.ru\r\nboky.avito.ru\r\nbol.project.tinkoff.ru\r\nbola.avito.ru\r\nbole.yandex.ru\r\nbolenath.dev.arh.mk.ru\r\nbolenath.dev.ast.mk.ru\r\nbolenath.dev.baikal.mk.ru\r\nbolenath.dev.belgorod.mk.ru\r\nbolenath.dev.blag.mk.ru\r\nbolenath.dev.brl.mk.ru\r\nbolenath.dev.cheb.mk.ru\r\nbolenath.dev.chel.mk.ru\r\nbolenath.dev.chr.mk.ru\r\nbolenath.dev.crimea.mk.ru\r\nbolenath.dev.eburg.mk.ru\r\nbolenath.dev.hab.mk.ru\r\nbolenath.dev.ivanovo.mk.ru\r\nbolenath.dev.izhevsk.mk.ru\r\nbolenath.dev.karel.mk.ru\r\nbolenath.dev.kavkaz.mk.ru\r\nbolenath.dev.kazan.mk.ru\r\nbolenath.dev.kbr.mk.ru\r\nbolenath.dev.kemerovo.mk.ru\r\nbolenath.dev.kostroma.mk.ru\r\nbolenath.dev.kras.mk.ru\r\nbolenath.dev.kuban.mk.ru\r\nbolenath.dev.kuzbass.mk.ru\r\nbolenath.dev.magadan.mk.ru\r\nbolenath.dev.mkala.mk.ru\r\nbolenath.dev.mrl.mk.ru\r\nbolenath.dev.murmansk.mk.ru\r\nbolenath.dev.nn.mk.ru\r\nbolenath.dev.novos.mk.ru\r\nbolenath.dev.omsk.mk.ru\r\nbolenath.dev.orel.mk.ru\r\nbolenath.dev.oren.mk.ru\r\nbolenath.dev.perm.mk.ru\r\nbolenath.dev.rostov.mk.ru\r\nbolenath.dev.rzn.mk.ru\r\nbolenath.dev.samara.mk.ru\r\nbolenath.dev.saratov.mk.ru\r\nbolenath.dev.serp.mk.ru\r\nbolenath.dev.sochi.mk.ru\r\nbolenath.dev.spb.mk.ru\r\nbolenath.dev.tambov.mk.ru\r\nbolenath.dev.tomsk.mk.ru\r\nbolenath.dev.tula.mk.ru\r\nbolenath.dev.tumen.mk.ru\r\nbolenath.dev.tv.mk.ru\r\nbolenath.dev.tver.mk.ru\r\nbolenath.dev.ufa.mk.ru\r\nbolenath.dev.ugra.mk.ru\r\nbolenath.dev.ul.mk.ru\r\nbolenath.dev.ulan.mk.ru\r\nbolenath.dev.vlad.mk.ru\r\nbolenath.dev.vladimir.mk.ru\r\nbolenath.dev.volg.mk.ru\r\nbolenath.dev.vologda.mk.ru\r\nbolenath.dev.vrn.mk.ru\r\nbolenath.dev.www.mk.ru\r\nbolenath.dev.yakutia.mk.ru\r\nbolenath.dev.yar.mk.ru\r\nbolenath.dev.yaroslavl.mk.ru\r\nboletim.avito.ru\r\nboletines.avito.ru\r\nboleto.avito.ru\r\nbollywood.avito.ru\r\nbologna.avito.ru\r\nbolshedeneg.tinkoff.ru\r\nbolshemurtinskij-r04.gosweb.gosuslugi.ru\r\nbolt.avito.ru\r\nbom.avito.ru\r\nbomb.avito.ru\r\nbomba.avito.ru\r\nbomber.avito.ru\r\nbomgar.avito.ru\r\nbon.avito.ru\r\nbond.avito.ru\r\nbonds.rbc.ru\r\nbones.avito.ru\r\nbongda.avito.ru\r\nbonjour.avito.ru\r\nbono.avito.ru\r\nbonus.alfabank.ru\r\nbonus.avito.ru\r\nbonus.magnit.ru\r\nbonus.tutu.ru\r\nbonus.vtb.ru\r\nbonuses.api.2gis.ru\r\nboo.avito.ru\r\nbook-download-rewrite.staging.meduza.io\r\nbook-download.staging.meduza.io\r\nbook.avito.ru\r\nbookie2.gazeta.ru\r\nbooking-preview.yandex.ru\r\nbooking-test.mkb.ru\r\nbooking-visit.rshb.ru\r\nbooking.avito.ru\r\nbooking.mkb.ru\r\nbooking.rambler.ru\r\nbooking.yandex.ru\r\nbookings.avito.ru\r\nbookman.avito.ru\r\nbookmark.avito.ru\r\nbooks.avito.ru\r\nbooks.beeline.ru\r\nbooks.litres.ru\r\nbooks.megafon.ru\r\nbooks.mts.ru\r\nbooks.proza.ru\r\nbooks.stihi.ru\r\nbooks.tele2.ru\r\nbooks.yandex.ru\r\nbookshop.avito.ru\r\nbookstack.cgu.mchs.ru\r\nbookstack.iac.mchs.ru\r\nbookstore.avito.ru\r\nboole.avito.ru\r\nboom.avito.ru\r\nboomer.avito.ru\r\nboomerang.mail.ru\r\nboomerang2.mail.ru\r\nboon.avito.ru\r\nboost.avito.ru\r\nbor.avito.ru\r\nbor.beeline.ru\r\nbor.mts.ru\r\nborabora.avito.ru\r\nboradmin.gosuslugi.ru\r\nbordeaux.avito.ru\r\nborder-even.nntp.priv.avito.ru\r\nborder-odd.nntp.priv.avito.ru\r\nborder.avito.ru\r\nborderlands.alfabank.ru\r\nborei.tass.ru\r\nborg.avito.ru\r\nboris.avito.ru\r\nboris.nesterov.1973.yandex.ru\r\nbornsoon.03.yandex.ru\r\nborodino.drom.ru\r\nboromir.yandex.ru\r\nboron.avito.ru\r\nbos.avito.ru\r\nbos.crmsnd1.worldbank.org\r\nbos.wbgcrm.worldbank.org\r\nbos.wbgcrmfqa.worldbank.org\r\nbosch.avito.ru\r\nboss.avito.ru\r\nboston.avito.ru\r\nboswebservices.worldbank.org\r\nbot-rc.passport.yandex.ru\r\nbot.avito.ru\r\nbot.beeline.ru\r\nbot.epp.genproc.gov.ru\r\nbot.gosuslugi.ru\r\nbot.gosweb.gosuslugi.ru\r\nbot.gslb.gosuslugi.ru\r\nbot.hh.ru\r\nbot.m24.ru\r\nbot.notify.tasks.mchs.ru\r\nbot.passport.yandex.ru\r\nbot.tasks.mchs.ru\r\nbot112.iz.ru\r\nbotman.megafon.ru\r\nbotplatform.rcs.ims.tele2.ru\r\nbotplatform.rcs.mts.ru\r\nbots.avito.ru\r\nbots.zen-test.yandex.ru\r\nbotsvana.mail.ru\r\nbotvk.consultant.ru\r\nboulogne.yandex.ru\r\nbounce.avito.ru\r\nbouncer.avito.ru\r\nbounces.avito.ru\r\nboutique.avito.ru\r\nbowling.avito.ru\r\nbox.apteka.ru\r\nbox.avito.ru\r\nbox.ivi.ru\r\nbox.project.tinkoff.ru\r\nbox.worldbank.org\r\nbox1.avito.ru\r\nbox11.avito.ru\r\nbox2.avito.ru\r\nboxer.avito.ru\r\nboxoffice.avito.ru\r\nboxplat-sb.pg.tutu.ru\r\nbp.avito.ru\r\nbp.minpromtorg.gov.ru\r\nbp.open.ru\r\nbpa.avito.ru\r\nbpcbt.tinkoff.ru\r\nbplan.sev.gov.ru\r\nbpm.avito.ru\r\nbpm.tele2.ru\r\nbpm.tr.mos.ru\r\nbps.avito.ru\r\nbpxpportal.beeline.ru\r\nbpxptestpg.beeline.ru\r\nbpxptestpgload.beeline.ru\r\nbqr.vtb.ru\r\nbqz9tguk-rlp.ops.beeline.ru\r\nbr-amer.dev.api.max.com\r\nbr-amer.euc1.prd.api.max.com\r\nbr-amer.euc1.stg.api.max.com\r\nbr-amer.eun1.prd.api.max.com\r\nbr-amer.euw1.prd.api.max.com\r\nbr-amer.euw1.stg.api.max.com\r\nbr-amer.int.api.max.com\r\nbr-amer.prd.api.max.com\r\nbr-amer.stg.api.max.com\r\nbr-amer.use.dev.api.max.com\r\nbr-amer.use.int.api.max.com\r\nbr-amer.use.prd.api.max.com\r\nbr-amer.use.stg.api.max.com\r\nbr-amer.use1.dev.api.max.com\r\nbr-amer.use1.int.api.max.com\r\nbr-amer.use1.prd.api.max.com\r\nbr-amer.use1.stg.api.max.com\r\nbr-amer.use2.prd.api.max.com\r\nbr-amer.use2.stg.api.max.com\r\nbr-amer.usw2.int.api.max.com\r\nbr-amer.usw2.prd.api.max.com\r\nbr-amer.usw2.stg.api.max.com\r\nbr-any.dev.api.max.com\r\nbr-any.euc1.prd.api.max.com\r\nbr-any.euc1.stg.api.max.com\r\nbr-any.eun1.prd.api.max.com\r\nbr-any.euw1.prd.api.max.com\r\nbr-any.euw1.stg.api.max.com\r\nbr-any.int.api.max.com\r\nbr-any.prd.api.max.com\r\nbr-any.stg.api.max.com\r\nbr-any.use.dev.api.max.com\r\nbr-any.use.int.api.max.com\r\nbr-any.use.prd.api.max.com\r\nbr-any.use.stg.api.max.com\r\nbr-any.use1.dev.api.max.com\r\nbr-any.use1.int.api.max.com\r\nbr-any.use1.prd.api.max.com\r\nbr-any.use1.stg.api.max.com\r\nbr-any.use2.prd.api.max.com\r\nbr-any.use2.stg.api.max.com\r\nbr-any.usw2.int.api.max.com\r\nbr-any.usw2.prd.api.max.com\r\nbr-any.usw2.stg.api.max.com\r\nbr-apac.dev.api.max.com\r\nbr-apac.euc1.stg.api.max.com\r\nbr-apac.euw1.stg.api.max.com\r\nbr-apac.int.api.max.com\r\nbr-apac.stg.api.max.com\r\nbr-apac.use.dev.api.max.com\r\nbr-apac.use.int.api.max.com\r\nbr-apac.use.stg.api.max.com\r\nbr-apac.use1.dev.api.max.com\r\nbr-apac.use1.int.api.max.com\r\nbr-apac.use1.stg.api.max.com\r\nbr-apac.use2.stg.api.max.com\r\nbr-apac.usw2.int.api.max.com\r\nbr-apac.usw2.stg.api.max.com\r\nbr-emea.dev.api.max.com\r\nbr-emea.euc1.prd.api.max.com\r\nbr-emea.euc1.stg.api.max.com\r\nbr-emea.eun1.prd.api.max.com\r\nbr-emea.euw1.prd.api.max.com\r\nbr-emea.euw1.stg.api.max.com\r\nbr-emea.int.api.max.com\r\nbr-emea.prd.api.max.com\r\nbr-emea.stg.api.max.com\r\nbr-emea.use.dev.api.max.com\r\nbr-emea.use.int.api.max.com\r\nbr-emea.use.prd.api.max.com\r\nbr-emea.use.stg.api.max.com\r\nbr-emea.use1.dev.api.max.com\r\nbr-emea.use1.int.api.max.com\r\nbr-emea.use1.prd.api.max.com\r\nbr-emea.use1.stg.api.max.com\r\nbr-emea.use2.prd.api.max.com\r\nbr-emea.use2.stg.api.max.com\r\nbr-emea.usw2.int.api.max.com\r\nbr-emea.usw2.prd.api.max.com\r\nbr-emea.usw2.stg.api.max.com\r\nbr-latam.apne1.prd.api.max.com\r\nbr-latam.aps1.prd.api.max.com\r\nbr-latam.apse1.prd.api.max.com\r\nbr-latam.dev.api.max.com\r\nbr-latam.euc1.prd.api.max.com\r\nbr-latam.euc1.stg.api.max.com\r\nbr-latam.eun1.prd.api.max.com\r\nbr-latam.euw1.prd.api.max.com\r\nbr-latam.euw1.stg.api.max.com\r\nbr-latam.int.api.max.com\r\nbr-latam.prd.api.max.com\r\nbr-latam.stg.api.max.com\r\nbr-latam.use.dev.api.max.com\r\nbr-latam.use.int.api.max.com\r\nbr-latam.use.prd.api.max.com\r\nbr-latam.use.stg.api.max.com\r\nbr-latam.use1.dev.api.max.com\r\nbr-latam.use1.int.api.max.com\r\nbr-latam.use1.prd.api.max.com\r\nbr-latam.use1.stg.api.max.com\r\nbr-latam.use2.prd.api.max.com\r\nbr-latam.use2.stg.api.max.com\r\nbr-latam.usw2.int.api.max.com\r\nbr-latam.usw2.prd.api.max.com\r\nbr-latam.usw2.stg.api.max.com\r\nbr.avito.ru\r\nbr.fas.gov.ru\r\nbr1.avito.ru\r\nbrad.avito.ru\r\nbrahms.avito.ru\r\nbrain.avito.ru\r\nbrains.avito.ru\r\nbrainstorm.avito.ru\r\nbrak.yandex.ru\r\nbranch.avito.ru\r\nbrand.avito.ru\r\nbrand.max.com\r\nbrand.vtb.ru\r\nbrandbook.sber.ru\r\nbrandon.avito.ru\r\nbrasil.avito.ru\r\nbrat2.film.ru\r\nbratsk.drom.ru\r\nbratstvo.lenta.ru\r\nbratva-mr.mail.ru\r\nbratva-ok.mail.ru\r\nbratva-vk.mail.ru\r\nbrave.avito.ru\r\nbravo.avito.ru\r\nbrazil.avito.ru\r\nbrazzers.avito.ru\r\nbread.avito.ru\r\nbreast1.i.mail.ru\r\nbreast2.i.mail.ru\r\nbreeze-sm100.fas.gov.ru\r\nbreeze.avito.ru\r\nbreezecore-sm100.consultant.ru\r\nbreezy.avito.ru\r\nbregma.mail.ru\r\nbrest.avito.ru\r\nbrett.avito.ru\r\nbrew.avito.ru\r\nbrian.avito.ru\r\nbrickoptimizer.kino-teatr.ru\r\nbridge.avito.ru\r\nbridge.time.tbank.ru\r\nbrief.avito.ru\r\nbrig.mail.ru\r\nbrigada.lenta.ru\r\nbright.avito.ru\r\nbrilliant.avito.ru\r\nbrilliant.kommersant.ru\r\nbrioni.yandex.ru\r\nbrisbane.avito.ru\r\nbritney.avito.ru\r\nbritneyspears.avito.ru\r\nbrl.mk.ru\r\nbrn.beeline.ru\r\nbrn.dev.home.megafon.ru\r\nbrn.shop.megafon.ru\r\nbroadcast.avito.ru\r\nbroadcasts.prod.srvc.meduza.io\r\nbroadway.avito.ru\r\nbroker.avito.ru\r\nbroker.rshb.ru\r\nbroker.vtb.ru\r\nbroker1.rshb.ru\r\nbroker2.rshb.ru\r\nbronnitsy.mts.ru\r\nbronx.avito.ru\r\nbronze.avito.ru\r\nbrother.avito.ru\r\nbrothers.avito.ru\r\nbrown.avito.ru\r\nbrowse.avito.ru\r\nbrowser.avito.ru\r\nbrowser.vk.com\r\nbrowser.yandex.ru\r\nbrowsers.yandex.ru\r\nbrozen.yandex.ru\r\nbrs.avito.ru\r\nbru.avito.ru\r\nbruce.avito.ru\r\nbruno.avito.ru\r\nbrusnika.mail.ru\r\nbrutus.avito.ru\r\nbryan.avito.ru\r\nbryansk.avito.ru\r\nbryansk.babyblog.ru\r\nbryansk.dev.kp.ru\r\nbryansk.dns-shop.ru\r\nbryansk.drom.ru\r\nbryansk.fas.gov.ru\r\nbryansk.hh.ru\r\nbryansk.kp.ru\r\nbryansk.lemanapro.ru\r\nbryansk.mts.ru\r\nbryansk.tele2.ru\r\nbryansk.tutu.ru\r\nbs-dsp-exp.yandex.ru\r\nbs-dsp-main.yandex.ru\r\nbs-ext.yandex.ru\r\nbs-meta.yandex.ru\r\nbs-metadsp.yandex.ru\r\nbs.2gis.ru\r\nbs.9111.ru\r\nbs.avito.ru\r\nbs.kommersant.ru\r\nbs.yandex.ru\r\nbsa.avito.ru\r\nbsadm-vs.yandex.ru\r\nbsadm.yandex.ru\r\nbsadm01e.yandex.ru\r\nbsarc04e.yandex.ru\r\nbsarc05e.yandex.ru\r\nbsarc08e.yandex.ru\r\nbsarc09e.yandex.ru\r\nbsbannerstat01e.yandex.ru\r\nbsbannerstat02e.yandex.ru\r\nbsc.avito.ru\r\nbscatalogia.yandex.ru\r\nbschool5.gosuslugi.ru\r\nbscoll-new07e.yandex.ru\r\nbscoll02e.yandex.ru\r\nbscoll03e.yandex.ru\r\nbscoll04e.yandex.ru\r\nbscoll05e.yandex.ru\r\nbscoll06e.yandex.ru\r\nbscoll09e.yandex.ru\r\nbscoll11e.yandex.ru\r\nbscoll12e.yandex.ru\r\nbscoll13e.yandex.ru\r\nbscoll14e.yandex.ru\r\nbscoll15e.yandex.ru\r\nbscoll16e.yandex.ru\r\nbscoll17e.yandex.ru\r\nbscoll18e.yandex.ru\r\nbscount01e.yandex.ru\r\nbscount01t.yandex.ru\r\nbscount03e.yandex.ru\r\nbscw.avito.ru\r\nbsd.avito.ru\r\nbsd1.avito.ru\r\nbsdb-new01e.yandex.ru\r\nbsdb-new02e.yandex.ru\r\nbsdb02e.yandex.ru\r\nbsexport.yandex.ru\r\nbsextlog01e.yandex.ru\r\nbsf.avito.ru\r\nbsf1.mail.ru\r\nbsfront9000e.yabs.yandex.ru\r\nbsgraphite-ch01e.yandex.ru\r\nbsgraphite-front01e.yandex.ru\r\nbsgraphite-tier01e.yandex.ru\r\nbsgraphite-tier03e.yabs.yandex.ru\r\nbsgraphite-tier04e.yabs.yandex.ru\r\nbsh.avito.ru\r\nbshive01e.yandex.ru\r\nbshive02e.yandex.ru\r\nbshive03e.yandex.ru\r\nbsint-vs.yandex.ru\r\nbsint02.yandex.ru\r\nbskafka01e.yandex.ru\r\nbskafka02e.yandex.ru\r\nbskafka03e.yandex.ru\r\nbsm.avito.ru\r\nbsmc01y.yandex.ru\r\nbsmc02y.yandex.ru\r\nbsmc03y.yandex.ru\r\nbsmc04y.yandex.ru\r\nbsmc05y.yandex.ru\r\nbsmc06y.yandex.ru\r\nbsmc07y.yandex.ru\r\nbsmc08y.yandex.ru\r\nbsmc10y.yandex.ru\r\nbsmc11y.yandex.ru\r\nbsmc12y.yandex.ru\r\nbsmc13y.yandex.ru\r\nbsmc14y.yandex.ru\r\nbsmc15y.yandex.ru\r\nbsmc16y.yandex.ru\r\nbsmc18y.yandex.ru\r\nbsmc19y.yandex.ru\r\nbsmc20y.yandex.ru\r\nbsminibuf01e.yandex.ru\r\nbsminibuf02e.yandex.ru\r\nbsminibuf03e.yandex.ru\r\nbsminibuf04e.yandex.ru\r\nbsminibuf05e.yandex.ru\r\nbsminibuf06e.yandex.ru\r\nbsminibuf07e.yandex.ru\r\nbsminibuf08e.yandex.ru\r\nbsminibuf09e.yandex.ru\r\nbsminibuf10e.yandex.ru\r\nbsmon01e.yabs.yandex.ru\r\nbsms-proxy.tele2.ru\r\nbsms.t2.ru\r\nbsms.tele2.ru\r\nbsoap01e.yandex.ru\r\nbspb.credit-registry.nalog.ru\r\nbss.avito.ru\r\nbssoap-vs.yandex.ru\r\nbst1.gismeteo.ru\r\nbst5.gismeteo.ru\r\nbst6.gismeteo.ru\r\nbst7.gismeteo.ru\r\nbst8.gismeteo.ru\r\nbstor01i.yandex.ru\r\nbt.avito.ru\r\nbt1.esm.apteka.ru\r\nbt2.esm.apteka.ru\r\nbtc.avito.ru\r\nbtcsecure.marketing.285608.yandex.ru\r\nbtn.worldbank.org\r\nbtp.avito.ru\r\nbts.avito.ru\r\nbu-online.beeline.ru\r\nbu.avito.ru\r\nbubba.avito.ru\r\nbubble.avito.ru\r\nbubbles.avito.ru\r\nbubu.avito.ru\r\nbuck.avito.ru\r\nbud-test.minfin.rk.gov.ru\r\nbud.minfin.rk.gov.ru\r\nbud.sev.gov.ru\r\nbudapest.avito.ru\r\nbuddha.avito.ru\r\nbuddoma.open.ru\r\nbuddy.avito.ru\r\nbudennovsk20.lenta.ru\r\nbudget.avito.ru\r\nbudget.council.gov.ru\r\nbudget.gov.ru\r\nbudget.minpromtorg.gov.ru\r\nbudget.open.gov.ru\r\nbudget.sakha.gov.ru\r\nbudget2018.tass.ru\r\nbuffalo.avito.ru\r\nbug.avito.ru\r\nbug.yandex.ru\r\nbugatti.avito.ru\r\nbugbounty.kino-teatr.ru\r\nbugs.avito.ru\r\nbugtrack.avito.ru\r\nbugtracker.avito.ru\r\nbugtracker.mchs.gov.ru\r\nbugtracker.mchs.ru\r\nbugzilla.avito.ru\r\nbuh.sovcombank.ru\r\nbuild.avito.ru\r\nbuild.kino-teatr.ru\r\nbuild.secure.avito.ru\r\nbuilder.admin.avito.ru\r\nbuilder.avito.ru\r\nbuilder.control.avito.ru\r\nbuilder.controlpanel.avito.ru\r\nbuilder.cp.avito.ru\r\nbuilder.cpanel.avito.ru\r\nbuilder.hosting.avito.ru\r\nbuilding.avito.ru\r\nbuka.rbc.ru\r\nbukhgalter.garant.ru\r\nbuki.yandex.ru\r\nbulgaria.avito.ru\r\nbulgaria.kp.ru\r\nbulk.avito.ru\r\nbulkemail.avito.ru\r\nbulkmail.avito.ru\r\nbulksms.avito.ru\r\nbull.avito.ru\r\nbull10.mail.ru\r\nbull15.mail.ru\r\nbull2.mail.ru\r\nbull9.mail.ru\r\nbulldog.avito.ru\r\nbullet.avito.ru\r\nbulletin.avito.ru\r\nbulletinboard.worldbank.org\r\nbulletinboarddev.worldbank.org\r\nbulletinboarddevapp.worldbank.org\r\nbulten.avito.ru\r\nbulvarchess.sport.mos.ru\r\nbum54.mail.ru\r\nbumblebee.avito.ru\r\nbundle.ozon.ru\r\nbunny.avito.ru\r\nburan.tass.ru\r\nburbank.avito.ru\r\nburger-king.project.tinkoff.ru\r\nburn-e.open.ru\r\nburn.avito.ru\r\nburns.avito.ru\r\nbursa.avito.ru\r\nburyat.shop.megafon.ru\r\nburyatia.dev.home.megafon.ru\r\nburyatia.mts.ru\r\nburyatia.tele2.ru\r\nbus.avito.ru\r\nbus.gov.ru\r\nbus.partners.tutu.ru\r\nbus.tutu.ru\r\nbuscador.avito.ru\r\nbushmin.council.gov.ru\r\nbusiness-kit.vtb.ru\r\nbusiness-maps.yandex.ru\r\nbusiness-partner.tinkoff.ru\r\nbusiness-qa.tinkoff.ru\r\nbusiness.2gis.ru\r\nbusiness.auth.alfabank.ru\r\nbusiness.auth.alphabank.ru\r\nbusiness.avito.ru\r\nbusiness.beeline.ru\r\nbusiness.drive.yandex.ru\r\nbusiness.max.ru\r\nbusiness.ok.ru\r\nbusiness.ozon.ru\r\nbusiness.profi.tass.ru\r\nbusiness.psbank.ru\r\nbusiness.rk.gov.ru\r\nbusiness.rshb.ru\r\nbusiness.rutube.ru\r\nbusiness.tanker.yandex.ru\r\nbusiness.taxi.yandex.ru\r\nbusiness.tinkoff.ru\r\nbusiness.tst.tanker.yandex.ru\r\nbusiness.vedomosti.ru\r\nbusiness.vk.com\r\nbusiness.vtb.ru\r\nbusiness3.psbank.ru\r\nbusinessclass.rbc.ru\r\nbusinessconf.sber.ru\r\nbusinesseducation.tinkoff.ru\r\nbusinessinfo.rosbank.ru\r\nbusinessonline.vtb.ru\r\nbusinessregister.sovcombank.ru\r\nbusinesstechnology.leasing.rshb.ru\r\nbusinesstechnology25.tass.ru\r\nbusticket.yandex.ru\r\nbustickets.yandex.ru\r\nbutler.avito.ru\r\nbutterfly.avito.ru\r\nbutters.avito.ru\r\nbuturl-36rn.gosuslugi.ru\r\nbutyrsky.mos.ru\r\nbuu.avito.ru\r\nbuy.avito.ru\r\nbuy.drom.ru\r\nbuyer-api.kino-teatr.ru\r\nbuz.dc.cloud.mts.ru\r\nbuza.mail.ru\r\nbuzova.magnit.ru\r\nbuzz.avito.ru\r\nbv.avito.ru\r\nbw.avito.ru\r\nbw.rutube.ru\r\nbwc.avito.ru\r\nbwp.worldbank.org\r\nbwq.worldbank.org\r\nbwqas30.worldbank.org\r\nbwqci30.worldbank.org\r\nbws.worldbank.org\r\nbwu.worldbank.org\r\nbwv.worldbank.org\r\nbx-1569-www.k.avito.ru\r\nbx-2345-www.k.avito.ru\r\nbx-3276-www.k.avito.ru\r\nbx-3766-www.k.avito.ru\r\nbx-3883-www.k.avito.ru\r\nbx-3965-www.k.avito.ru\r\nbx-4404-www.k.avito.ru\r\nbx-edo-test-01.interfax.ru\r\nbx-edo-test-02.interfax.ru\r\nby.avito.ru\r\nby.sports.ru\r\nbyakko.yandex.ru\r\nbydgoszcz.avito.ru\r\nbyod.tstore.magnit.ru\r\nbyodagent.magnit.ru\r\nbyron.avito.ru\r\nbysj.avito.ru\r\nbyte.avito.ru\r\nbytech.mail.ru\r\nbz.avito.ru\r\nbz.iac.mchs.ru\r\nbzdsit.magnit.ru\r\nbzn.domclick.ru\r\nc-asa5550-v03-01.rz.avito.ru\r\nc-asa5550-v03-02.rz.avito.ru\r\nc-asa5550-v03-03.rz.avito.ru\r\nc-asa5580-v03-01.rz.avito.ru\r\nc-asa5580-v03-02.rz.avito.ru\r\nc-champ.stage02.comments.rambler.ru\r\nc-champ.stage02.rambler.ru\r\nc-champ.stage03.comments.rambler.ru\r\nc-champ.stage03.rambler.ru\r\nc-champ.stage04.comments.rambler.ru\r\nc-champ.stage04.rambler.ru\r\nc-champ.stage05.comments.rambler.ru\r\nc-champ.stage05.rambler.ru\r\nc-champ.stage06.comments.rambler.ru\r\nc-champ.stage06.rambler.ru\r\nc-n7k-n04-01.rz.avito.ru\r\nc-n7k-v03-01.rz.avito.ru\r\nc.avito.ru\r\nc.dns-shop.ru\r\nc.gismeteo.ru\r\nc.mail.ru\r\nc.ns.avito.ru\r\nc.ns.e.avito.ru\r\nc.ns.email.avito.ru\r\nc.premier.one\r\nc.rgis.rk.gov.ru\r\nc.rgistest.rk.gov.ru\r\nc.rutube.ru\r\nc.stage02.comments.rambler.ru\r\nc.stage02.rambler.ru\r\nc.stage03.comments.rambler.ru\r\nc.stage03.rambler.ru\r\nc.stage04.comments.rambler.ru\r\nc.stage04.rambler.ru\r\nc.stage05.comments.rambler.ru\r\nc.stage05.rambler.ru\r\nc.stage06.comments.rambler.ru\r\nc.stage06.rambler.ru\r\nc.superset.net.ixbt.com\r\nc.tutu.ru\r\nc.vtb.ru\r\nc.yandex.ru\r\nc0.avito.ru\r\nc1.avito.ru\r\nc10.avito.ru\r\nc10.vk.com\r\nc11.avito.ru\r\nc12.avito.ru\r\nc12.kommersant.ru\r\nc12329.kino-teatr.ru\r\nc13.avito.ru\r\nc2.avito.ru\r\nc2.kommersant.ru\r\nc21.avito.ru\r\nc2333cb8396f9945784c-hbd.ops.beeline.ru\r\nc291c8d08a4b9f9c47630fc6a79d9b-d5010f8c982045cb97a7b248db0a07a7.ops.beeline.ru\r\nc2b-sbp.openbank.ru\r\nc2c.avito.ru\r\nc3.avito.ru\r\nc31b3236.services.gismeteo.ru\r\nc3po.avito.ru\r\nc4.avito.ru\r\nc4anvn3.avito.ru\r\nc4d2.worldbank.org\r\nc4d2api.worldbank.org\r\nc4d2apidev.worldbank.org\r\nc4d2apiqa.worldbank.org\r\nc4d2dev.worldbank.org\r\nc4d2profile.worldbank.org\r\nc4d2profiledev.worldbank.org\r\nc4d2profileqa.worldbank.org\r\nc4d2qa.worldbank.org\r\nc4d2spprofile.worldbank.org\r\nc4d2spprofiledev.worldbank.org\r\nc4d2spprofileqa.worldbank.org\r\nc4d2win.worldbank.org\r\nc4d2windev.worldbank.org\r\nc4d2winqa.worldbank.org\r\nc4tint.mkb.ru\r\nc5.avito.ru\r\nc53cc33c.services.gismeteo.ru\r\nc6.avito.ru\r\nc61rkiy1azlr56kofy8d6sqjf87aqzdsr.sppvp.genproc.gov.ru\r\nc64.avito.ru\r\nc7.avito.ru\r\nc7bf92b2-fce8-5235-ad8f-b2d3ce7a571e-bw.ops.beeline.ru\r\nc8.avito.ru\r\nc9.avito.ru\r\nca-ekb.openbank.ru\r\nca-spb.openbank.ru\r\nca.avito.ru\r\nca.garant.ru\r\nca.magnit.ru\r\nca.openbank.ru\r\nca.rambler.ru\r\nca.rosenergo.gov.ru\r\nca.rzd.ru\r\nca.sakha.gov.ru\r\nca1.beeline.ru\r\ncab-psp-isep001.sberbank.ru\r\ncab-psp-isep002.sberbank.ru\r\ncab-psp-isep003.sberbank.ru\r\ncab-psp-isep004.sberbank.ru\r\ncab-psp-isep007.sberbank.ru\r\ncab-psp-isep008.sberbank.ru\r\ncab-psp-isep009.sberbank.ru\r\ncab-psp-isep010.sberbank.ru\r\ncab-psp-isep013.sberbank.ru\r\ncab-psp-isep014.sberbank.ru\r\ncab-psp-isep015.sberbank.ru\r\ncab-psp-isep016.sberbank.ru\r\ncab-psp-snac001.sberbank.ru\r\ncab-psp-snac0010.sberbank.ru\r\ncab-psp-snac002.sberbank.ru\r\ncab-psp-snac003.sberbank.ru\r\ncab-psp-snac004.sberbank.ru\r\ncab-psp-snac005.sberbank.ru\r\ncab-psp-snac006.sberbank.ru\r\ncab-psp-snac007.sberbank.ru\r\ncab-psp-snac008.sberbank.ru\r\ncab-psp-snac009.sberbank.ru\r\ncab-psp-snac010.sberbank.ru\r\ncab-psp-snac011.sberbank.ru\r\ncab-psp-snac012.sberbank.ru\r\ncab-vsp-acp-0001.sberbank.ru\r\ncab-vsp-isea101.sberbank.ru\r\ncab-vsp-isea102.sberbank.ru\r\ncab-vsp-isem101.sberbank.ru\r\ncab-vsp-isep101.sberbank.ru\r\ncab-vsp-isep102.sberbank.ru\r\ncab-vsp-isep103.sberbank.ru\r\ncab.avito.ru\r\ncab.kino-teatr.ru\r\ncab.myoffice.sberbank.ru\r\ncabinet.avito.ru\r\ncabinet.beeline.ru\r\ncabinet.booking-preview.yandex.ru\r\ncabinet.booking.yandex.ru\r\ncabinet.mchs.gov.ru\r\ncabinet.mon.gov.ru\r\ncabinet.rshb.ru\r\ncabinet.tst.tanker.yandex.ru\r\ncabinet.zdorovie-shkolnika.spb.aif.ru\r\ncable.avito.ru\r\ncac.avito.ru\r\ncaca.avito.ru\r\ncache-info.heroism.yandex.ru\r\ncache-kazan01.photo.yandex.ru\r\ncache-kazan02.photo.yandex.ru\r\ncache-samara01.photo.yandex.ru\r\ncache-samara02.photo.yandex.ru\r\ncache-test01.mt.yandex.ru\r\ncache-testregion-yandex03.mt.yandex.ru\r\ncache-utils.second.meduza.io\r\ncache-vladik01.photo.yandex.ru\r\ncache-vladik02.photo.yandex.ru\r\ncache-yandex01.mt.yandex.ru\r\ncache-yandex02.mt.yandex.ru\r\ncache.alfabank.ru\r\ncache.avito.ru\r\ncache.dev.videoplatform.rambler.ru\r\ncache.stage.videoplatform.rambler.ru\r\ncache.utils.meduza.io\r\ncache1.avito.ru\r\ncache2.avito.ru\r\ncache3.avito.ru\r\ncacti.avito.ru\r\ncacti1.avito.ru\r\ncactus.avito.ru\r\ncad.avito.ru\r\ncadillac.avito.ru\r\ncadillac.drom.ru\r\ncae.avito.ru\r\ncaesar.avito.ru\r\ncafe.avito.ru\r\ncag.avito.ru\r\ncai.avito.ru\r\ncairo.avito.ru\r\ncake.avito.ru\r\ncakes.avito.ru\r\ncal.avito.ru\r\ncalb1.i.mail.ru\r\ncalc.avito.ru\r\ncalc.consultant.ru\r\ncalcium.avito.ru\r\ncalculator.consultant.ru\r\ncalculus.avito.ru\r\ncaldav.avito.ru\r\ncaldav.yandex.ru\r\ncaldera.avito.ru\r\ncalendar-back01f.dev.yandex.ru\r\ncalendar-meeting01f.dev.yandex.ru\r\ncalendar-v2.sps.rosatom.ru\r\ncalendar.avito.ru\r\ncalendar.mail.ru\r\ncalendar.sps.rosatom.ru\r\ncalendar.teams.infra.rbc.ru\r\ncalendar.yandex.ru\r\ncalendario.avito.ru\r\ncalgary.avito.ru\r\ncalifornia.avito.ru\r\ncalipso.avito.ru\r\ncalipso.yandex.ru\r\ncall.avito.ru\r\ncall.khv.gov.ru\r\ncall.msg.tass.ru\r\ncall.myteam.tass.ru\r\ncall.teams.infra.rbc.ru\r\ncall.x5.ru\r\ncallback.avito.ru\r\ncallbackrts.sovcombank.ru\r\ncallcenter.afisha.ru\r\ncallcenter.avito.ru\r\ncallcenter.open.ru\r\ncallcenter.stage.app01.afisha.ru\r\ncallerid.sberbank.ru\r\ncallerid.sovcombank.ru\r\ncalling.tele2.ru\r\ncalliope.avito.ru\r\ncallisto.avito.ru\r\ncallisto.yandex.ru\r\ncallme.avito.ru\r\ncallpilot.avito.ru\r\ncalls.avito.ru\r\ncalvin.avito.ru\r\ncalypso.avito.ru\r\ncam.avito.ru\r\ncam1.avito.ru\r\ncam2.avito.ru\r\ncam3.avito.ru\r\ncam4.avito.ru\r\ncamaras.avito.ru\r\ncambodia.avito.ru\r\ncambridge.avito.ru\r\ncamd.mos.ru\r\ncamel.avito.ru\r\ncamel.yandex.ru\r\ncamera.avito.ru\r\ncamera.mts.ru\r\ncamera1.avito.ru\r\ncamera2.avito.ru\r\ncamera3.avito.ru\r\ncameras.avito.ru\r\ncameron.avito.ru\r\ncamfrog.avito.ru\r\ncamilla.avito.ru\r\ncamomile.mail.ru\r\ncamp.avito.ru\r\ncampaign.avito.ru\r\ncampaigns.avito.ru\r\ncamper.avito.ru\r\ncamping.avito.ru\r\ncampus.avito.ru\r\ncampus2.avito.ru\r\ncampusvirtual.avito.ru\r\ncams.avito.ru\r\ncams.m24.ru\r\ncamunda.cgu.mchs.ru\r\ncamunda.pg.cgu.mchs.ru\r\ncamus.avito.ru\r\ncan.avito.ru\r\ncanada.avito.ru\r\ncanada.dev.kp.ru\r\ncanal.avito.ru\r\ncanalplus.play.max.com\r\ncanary-time.tbank.ru\r\ncanary.2gis.ru\r\ncanary.avito.ru\r\ncancel.avito.ru\r\ncancelculture.afisha.ru\r\ncancer.avito.ru\r\ncandidate-cp.rosatom.ru\r\ncandidate-form.avito.ru\r\ncandle.avito.ru\r\ncandy.avito.ru\r\ncandy.rbc.ru\r\ncanna.avito.ru\r\ncannes.avito.ru\r\ncanoe.avito.ru\r\ncanon.avito.ru\r\ncanon.rbc.ru\r\ncanopus.avito.ru\r\ncanopy.avito.ru\r\ncantina.yandex.ru\r\ncantor.avito.ru\r\ncanvas.avito.ru\r\ncanvas.ok.ru\r\ncanvas.tele2.ru\r\ncanvas.yandex.ru\r\ncaos.avito.ru\r\ncap.avito.ru\r\ncapa.avito.ru\r\ncapacitacion.avito.ru\r\ncapella.avito.ru\r\ncapital.avito.ru\r\ncapital.rbc.ru\r\ncapitalbank.credit-registry.nalog.ru\r\ncapitalgroup.lenta.ru\r\ncapricorn.avito.ru\r\ncapsula.vk.com\r\ncapsule.beeline.ru\r\ncaptain.avito.ru\r\ncaptcha-api.yandex.ru\r\ncaptcha.2gis.ru\r\ncaptcha.avito.ru\r\ncaptcha.b2c.test.ivi.ru\r\ncaptcha.rambler.ru\r\ncaptcha.rbc.ru\r\ncaptcha.yandex.ru\r\ncaptive.habr.com\r\ncaptive.megafon.ru\r\ncar-line.avito.ru\r\ncar.avito.ru\r\ncar.mts.ru\r\ncar21.net.avito.ru\r\ncar40.eng.avito.ru\r\ncar40.net.avito.ru\r\ncaracas.avito.ru\r\ncaramel.avito.ru\r\ncaravan.avito.ru\r\ncarbon.avito.ru\r\ncard-transfer.tele2.ru\r\ncard-vse.beeline.ru\r\ncard.avito.ru\r\ncard.beeline.ru\r\ncard.gosuslugi.ru\r\ncard.market.tele2.ru\r\ncard.mironline.ru\r\ncard.ozon.ru\r\ncard.tele2.ru\r\ncard2card.banki.ru\r\ncard2card.mkb.ru\r\ncard2card.tinkoff.ru\r\ncarddav.yandex.ru\r\ncarddesigner.rosbank.ru\r\ncardinal.avito.ru\r\ncardio-mobil.mts.ru\r\ncardio-uat.mts.ru\r\ncardio-xmpp.mts.ru\r\ncardiopro.mts.ru\r\ncardlock.mkb.ru\r\ncardreg.beeline.ru\r\ncards.3k.mail.ru\r\ncards.alfabank.ru\r\ncards.avito.ru\r\ncards.tele2.ru\r\ncards2.mail.ru\r\ncardstore.t2.ru\r\ncare.avito.ru\r\ncareer-consult.t2.ru\r\ncareer-guide.vedomosti.ru\r\ncareer.alfabank.ru\r\ncareer.avito.ru\r\ncareer.habr.com\r\ncareer.hh.ru\r\ncareer.vedomosti.ru\r\ncareer.x5.ru\r\ncareers.avito.ru\r\ncareers.who.int\r\ncargo.avito.ru\r\ncargo.megafon.ru\r\ncargo.rzd.ru\r\ncargolk.rzd.ru\r\ncarina.avito.ru\r\ncarl.avito.ru\r\ncarla.avito.ru\r\ncarlo.avito.ru\r\ncarlos.avito.ru\r\ncarme.avito.ru\r\ncarmen.avito.ru\r\ncarnival.avito.ru\r\ncaro.avito.ru\r\ncaroline.avito.ru\r\ncarpediem.avito.ru\r\ncarpenter.avito.ru\r\ncarplay.2gis.ru\r\ncarrie.avito.ru\r\ncarrier-ekmp.rzd.ru\r\ncarrier.avito.ru\r\ncarrot1.mail.ru\r\ncars.avito.ru\r\ncars.mail.ru\r\ncarsharing-prestable.yandex.ru\r\ncarsharing.yandex.ru\r\ncart.avito.ru\r\ncarter.avito.ru\r\ncartman.avito.ru\r\ncartoon.avito.ru\r\ncas.avito.ru\r\ncas.net.ixbt.com\r\ncas.rostelecom.ru\r\ncas.tutu.ru\r\ncas1.avito.ru\r\ncas2.avito.ru\r\ncas3.avito.ru\r\ncasa.avito.ru\r\ncasanova.avito.ru\r\ncasas.avito.ru\r\ncase.avito.ru\r\ncasey.yandex.ru\r\ncash-study.openbank.ru\r\ncash.avito.ru\r\ncash.rbc.ru\r\ncashback-fest.project.tinkoff.ru\r\ncashback.alfabank.ru\r\ncashback.mts.ru\r\ncashback.otzovik.com\r\ncashback10.mts.ru\r\ncashcredit.t2.ru\r\ncashdesk1c.yandex.ru\r\ncashdesk1d.yandex.ru\r\ncashdesk1e.yandex.ru\r\ncashdesk1f.yandex.ru\r\ncashdesk1g.yandex.ru\r\ncashdesk2c.yandex.ru\r\ncashdesk2d.yandex.ru\r\ncashdesk2e.yandex.ru\r\ncashdesk2f.yandex.ru\r\ncashdesk2g.yandex.ru\r\ncashing.avito.ru\r\ncasino-atlas-cdn.api.2gis.ru\r\ncasino.avito.ru\r\ncasper.avito.ru\r\ncassini.avito.ru\r\ncassiopeia.avito.ru\r\ncassiopeia.mail.ru\r\ncast.avito.ru\r\ncast.play.max.com\r\ncasting.avito.ru\r\ncastle.avito.ru\r\ncastor.avito.ru\r\ncat.avito.ru\r\ncat.tinkoff.ru\r\ncat3-test.srv.hub.litres.ru\r\ncat3.srv.hub.litres.ru\r\ncatalit.litres.ru\r\ncatalog.1tv.ru\r\ncatalog.api.2gis.ru\r\ncatalog.avito.ru\r\ncatalog.smartmarket.sber.ru\r\ncatalog.yandex.ru\r\ncatalog01.urozhai.rshb.ru\r\ncatalog03.urozhai.rshb.ru\r\ncatalog04.urozhai.rshb.ru\r\ncatalog06.urozhai.rshb.ru\r\ncatalogdb2005.yandex.ru\r\ncatalogdbm.yandex.ru\r\ncatalogia-context-test01e.yandex.ru\r\ncatalogia-context03i.yandex.ru\r\ncatalogia-context04i.yandex.ru\r\ncatalogia-media-dev02e.yandex.ru\r\ncatalogia-media-front01e.yandex.ru\r\ncatalogia-media-front01i.yandex.ru\r\ncatalogia-media01e.yandex.ru\r\ncatalogia-mod.yandex.ru\r\ncatalogia-mod02e.yandex.ru\r\ncatalogo.avito.ru\r\ncatalogs.avito.ru\r\ncatalogue.avito.ru\r\ncatalyst.avito.ru\r\ncatering.avito.ru\r\ncatfish.avito.ru\r\ncathy.avito.ru\r\ncatmirr.yandex.ru\r\ncats.avito.ru\r\ncb-d01.db.rbc.ru\r\ncb-d02.db.rbc.ru\r\ncb-d03.db.rbc.ru\r\ncb-d04.db.rbc.ru\r\ncb-d05.db.rbc.ru\r\ncb-hq01.db.rbc.ru\r\ncb-hq04.db.rbc.ru\r\ncb-k01.db.rbc.ru\r\ncb-k02.db.rbc.ru\r\ncb-k04.db.rbc.ru\r\ncb-k05.db.rbc.ru\r\ncb.avito.ru\r\ncb.open.ru\r\ncb2-d01.db.rbc.ru\r\ncb2-d02.db.rbc.ru\r\ncb2-k01.db.rbc.ru\r\ncb2-k02.db.rbc.ru\r\ncba.worldbank.org\r\ncbadev.worldbank.org\r\ncbaqa.worldbank.org\r\ncbc.avito.ru\r\ncbdc-dev.psbank.ru\r\ncbdc.psbank.ru\r\ncbf1.avito.ru\r\ncbf2.avito.ru\r\ncbf3.avito.ru\r\ncbf4.avito.ru\r\ncbf5.avito.ru\r\ncbf7.avito.ru\r\ncbf8.avito.ru\r\ncbg.tele2.ru\r\ncbot.m24.ru\r\ncbr.avito.ru\r\ncbr.ydf.yandex.ru\r\ncbrates.rbc.ru\r\ncbrf.credit-registry.nalog.ru\r\ncbro-t.sberbank.ru\r\ncbro-t.testonline.sberbank.ru\r\ncbro.online.sberbank.ru\r\ncbro.sberbank.ru\r\ncbs.avito.ru\r\ncbt.avito.ru\r\ncc-host01.sbercontact.sberbank.ru\r\ncc-host02.sbercontact.sberbank.ru\r\ncc-host03.sbercontact.sberbank.ru\r\ncc.alfabank.ru\r\ncc.avito.ru\r\ncc.bonus.mts.ru\r\ncc.lk.psbank.ru\r\ncc.mts.ru\r\ncc.vtb.ru\r\ncc.worldbank.org\r\ncc01.sbercontact.sberbank.ru\r\ncc02.sbercontact.sberbank.ru\r\ncc03.sbercontact.sberbank.ru\r\ncc04.sbercontact.sberbank.ru\r\ncc05.sbercontact.sberbank.ru\r\ncc06.sbercontact.sberbank.ru\r\ncc07.sbercontact.sberbank.ru\r\ncc08.sbercontact.sberbank.ru\r\ncc1.avito.ru\r\ncc2.avito.ru\r\ncca.avito.ru\r\nccb.avito.ru\r\nccc.avito.ru\r\nccd.avito.ru\r\nccdev.worldbank.org\r\ncceirepository.who.int\r\nccg-dev.avito.ru\r\nccg-pro-api-ast-to-hd-8.avito.ru\r\nccg-prod.avito.ru\r\nccg-uat.avito.ru\r\ncch.avito.ru\r\ncchufs.sberbank.ru\r\ncci.avito.ru\r\nccl.avito.ru\r\nccm-exp-e.mts.ru\r\nccm-exp-e1.mts.ru\r\nccm-exp-ecl.mts.ru\r\nccm.avito.ru\r\nccmmp.magnit.ru\r\nccp.avito.ru\r\nccprd.worldbank.org\r\nccps1.ims.tele2.ru\r\nccps2.ims.tele2.ru\r\nccqa.worldbank.org\r\nccr.miac.tambov.gov.ru\r\nccs.avito.ru\r\nccstatistic.alfabank.ru\r\ncct.avito.ru\r\ncctraining.worldbank.org\r\ncctv.avito.ru\r\nccuat.worldbank.org\r\ncd.avito.ru\r\ncda.avito.ru\r\ncdb.avito.ru\r\ncdb.tools.russianpost.ru\r\ncdc.avito.ru\r\ncdcalendar.lemanapro.ru\r\ncde.avito.ru\r\ncdf.avito.ru\r\ncdi.avito.ru\r\ncdjvmk0yrm5tqxhxtgk2b09cahddvez6dlbrvk5uufhnqudftnr2ywclm0qlm0q.kino-teatr.ru\r\ncdl.avito.ru\r\ncdm.avito.ru\r\ncdms.avito.ru\r\ncdn-asp-server-container.tbank.ru\r\ncdn-auth-cms.who.int\r\ncdn-chunk-internal.vp.tbank.ru\r\ncdn-dev-cms.who.int\r\ncdn-dev.vp.tinkoff.ru\r\ncdn-ec-internal-chunk-dev.tbank.ru\r\ncdn-gp-stage.x5.ru\r\ncdn-gp.x5.ru\r\ncdn-img.perekrestok.ru\r\ncdn-internal-dev.vp.tinkoff.ru\r\ncdn-internal.vp.tinkoff.ru\r\ncdn-investor-psi.sberbank.ru\r\ncdn-investor.sberbank.ru\r\ncdn-ir.open.ru\r\ncdn-ngenix-1.rutube.ru\r\ncdn-ngenix-2.rutube.ru\r\ncdn-origin.psbank.ru\r\ncdn-pb.open.ru\r\ncdn-peremena.open.ru\r\ncdn-pl-internal.vp.tbank.ru\r\ncdn-pl.vp.tbank.ru\r\ncdn-preprod-ir.open.ru\r\ncdn-preprod-pb.open.ru\r\ncdn-preprod-peremena.open.ru\r\ncdn-preprod.open.ru\r\ncdn-static-dev.vp.tbank.ru\r\ncdn-static.vp.tbank.ru\r\ncdn-store.rambler.ru\r\ncdn-test-cms.who.int\r\ncdn-test.tbank.ru\r\ncdn.24.yandex.ru\r\ncdn.2gis.ru\r\ncdn.alfabank.ru\r\ncdn.avito.ru\r\ncdn.banki.ru\r\ncdn.beeline.ru\r\ncdn.cgu.mchs.ru\r\ncdn.citilink.ru\r\ncdn.club.dns-shop.ru\r\ncdn.connect.mail.ru\r\ncdn.culture.ru\r\ncdn.dzen.ru\r\ncdn.eldorado.ru\r\ncdn.gifts.mail.ru\r\ncdn.ift-appweb.broker.vtb.ru\r\ncdn.ift-invest.vtb.ru\r\ncdn.invest.sovcombank.ru\r\ncdn.invest.vtb.ru\r\ncdn.iz.ru\r\ncdn.kino-teatr.ru\r\ncdn.lemanapro.ru\r\ncdn.lenta.ru\r\ncdn.litres.ru\r\ncdn.lk.cdn.megafon.ru\r\ncdn.media.film.ru\r\ncdn.megafon.ru\r\ncdn.messenger.2gis.ru\r\ncdn.mk.ru\r\ncdn.music.beeline.ru\r\ncdn.myoffice.sberbank.ru\r\ncdn.old.ria.ru\r\ncdn.online.sberbank.ru\r\ncdn.open.ru\r\ncdn.profi.ru\r\ncdn.psbank.ru\r\ncdn.rr-appweb.broker.vtb.ru\r\ncdn.rr-invest.vtb.ru\r\ncdn.sberbank.ru\r\ncdn.sportbox.ru\r\ncdn.tass.ru\r\ncdn.usit-ift.vtb.ru\r\ncdn.uspeh.megafon.ru\r\ncdn.vd.ria.ru\r\ncdn.vks.ria.ru\r\ncdn.vp.tinkoff.ru\r\ncdn.vtb.ru\r\ncdn.who.int\r\ncdn.x5.ru\r\ncdn.xplatform.alfabank.ru\r\ncdn00.mir.afisha.ru\r\ncdn01.avito.ru\r\ncdn01.mir.afisha.ru\r\ncdn02.mir.afisha.ru\r\ncdn03.mir.afisha.ru\r\ncdn1.avito.ru\r\ncdn1.babyblog.ru\r\ncdn1.img.crimea.ria.ru\r\ncdn1.img.ria.ru\r\ncdn1.mk.ru\r\ncdn1.tass.ru\r\ncdn101.avito.ru\r\ncdn102.avito.ru\r\ncdn103.avito.ru\r\ncdn2-static-dev.vp.tbank.ru\r\ncdn2.avito.ru\r\ncdn2.gifts.mail.ru\r\ncdn2.img.crimea.ria.ru\r\ncdn2.img.ria.ru\r\ncdn2.online.sberbank.ru\r\ncdn2.sberbank.ru\r\ncdn2.tass.ru\r\ncdn21.img.ria.ru\r\ncdn22.img.ria.ru\r\ncdn23.img.ria.ru\r\ncdn24.img.ria.ru\r\ncdn25.img.ria.ru\r\ncdn3.avito.ru\r\ncdn3.img.ria.ru\r\ncdn3.vedomosti.ru\r\ncdn4.avito.ru\r\ncdn4.img.ria.ru\r\ncdn4.tass.ru\r\ncdn5.avito.ru\r\ncdn5.img.ria.ru\r\ncdncv0.litres.ru\r\ncdncv1.litres.ru\r\ncdncv4.litres.ru\r\ncdncv5.litres.ru\r\ncdncv6.litres.ru\r\ncdncv7.litres.ru\r\ncdndc.img.ria.ru\r\ncdnhealth.www.tinkoff.ru\r\ncdnm.vks.ria.ru\r\ncdnm1.img.crimea.ria.ru\r\ncdnm1.img.ria.ru\r\ncdnm2.img.ria.ru\r\ncdnm21.img.ria.ru\r\ncdnm22.img.ria.ru\r\ncdnm23.img.ria.ru\r\ncdnm24.img.ria.ru\r\ncdnm25.img.ria.ru\r\ncdnm3.img.ria.ru\r\ncdnm4.img.ria.ru\r\ncdnm5.img.ria.ru\r\ncdnmdc.img.ria.ru\r\ncdnmf11.megafon.ru\r\ncdnmfd.img.ria.ru\r\ncdnn.old.ria.ru\r\ncdnn1.img.crimea.ria.ru\r\ncdnn1.img.ria.ru\r\ncdnn2.img.ria.ru\r\ncdnn21.img.ria.ru\r\ncdnns1.mail.ru\r\ncdnns2.mail.ru\r\ncdnns3.mail.ru\r\ncdnns4.mail.ru\r\ncdnns5.mail.ru\r\ncdnns6.mail.ru\r\ncdnq.img.ria.ru\r\ncdnqdc.img.ria.ru\r\ncdntest03mobile.rshb.ru\r\ncdnv-img.perekrestok.ru\r\ncdnvideo.online.sberbank.ru\r\ncdnvideo.sberbank.ru\r\ncdnvideo2.online.sberbank.ru\r\ncdnvideo2.sberbank.ru\r\ncdnvideoweb.online.sberbank.ru\r\ncdnvideoweb.sberbank.ru\r\ncdnvideoweb2.online.sberbank.ru\r\ncdnvideoweb2.sberbank.ru\r\ncdnweb.online.sberbank.ru\r\ncdnweb.sberbank.ru\r\ncdnweb2.online.sberbank.ru\r\ncdnweb2.sberbank.ru\r\ncdo.avito.ru\r\ncdp.avito.ru\r\ncdp.beeline.ru\r\ncdpgw.beeline.ru\r\ncdq-api.avito.ru\r\ncdr.avito.ru\r\ncdrom.avito.ru\r\ncdroster.worldbank.org\r\ncdrp.rzd.ru\r\ncds.avito.ru\r\ncdserver.avito.ru\r\ncdto.digital.gov.ru\r\nce.avito.ru\r\nce67b8beeff94162967f841748dd74dc-clt.ops.beeline.ru\r\ncea.avito.ru\r\ncea.gov.ru\r\ncec.avito.ru\r\ncecilia.avito.ru\r\nced.avito.ru\r\nced8519cdb5d425db444dc679e397a98-clt.ops.beeline.ru\r\ncedar.avito.ru\r\ncedric.avito.ru\r\ncee1.mkb.ru\r\ncee2.mkb.ru\r\ncel.avito.ru\r\ncelcom.avito.ru\r\ncelebrity.avito.ru\r\nceleste.avito.ru\r\nceline.avito.ru\r\ncell.avito.ru\r\ncelltick.zen-test.yandex.ru\r\ncelular.avito.ru\r\ncem.avito.ru\r\ncensus.gosuslugi.ru\r\ncentaurus.avito.ru\r\ncentennial.avito.ru\r\ncenter.avito.ru\r\ncenter.b2blk.megafon.ru\r\ncenter.mts.ru\r\ncenter.rzd.ru\r\ncenter.tg.t2.ru\r\ncenter.travel.t2.ru\r\ncentos-mirror.rbc.ru\r\ncentos.avito.ru\r\ncentral.avito.ru\r\ncentral.kino-teatr.ru\r\ncentralcampaign.tele2.ru\r\ncentre.avito.ru\r\ncentre.kp.ru\r\ncentrifugo.tass.ru\r\ncentrinvest.credit-registry.nalog.ru\r\ncentris.58.yandex.ru\r\ncentro.avito.ru\r\ncentrprof.dtoiv.mos.ru\r\ncenturion.avito.ru\r\nceo.alfabank.ru\r\nceo.avito.ru\r\nceo.eldorado.ru\r\nceolife.beeline.ru\r\ncep.avito.ru\r\nceph-bitrix.msk.avito.ru\r\nceph.ntv.ru\r\nceramics.avito.ru\r\ncerber.rambler.ru\r\ncerbere.avito.ru\r\ncerberus.avito.ru\r\nceres.avito.ru\r\ncert-developer.rosbank.ru\r\ncert-id.rosbank.ru\r\ncert-openapi.rosbank.ru\r\ncert-sbp.openbank.ru\r\ncert.avito.ru\r\ncert.partner.yandex.ru\r\ncert.psbank.ru\r\ncert.rosbank.ru\r\ncert.sberbank.ru\r\ncert.vtb.ru\r\ncertauth.adfs.lemanapro.ru\r\ncertauth.adfs.rosbank.ru\r\ncertauth.adfstest.rosbank.ru\r\ncertauth.login.magnit.ru\r\ncertauth.sts.avito.ru\r\ncertauth.sts1.rosatom.ru\r\ncertauth.sts3.rosatom.ru\r\ncertauth.tsts.rosatom.ru\r\ncertauth.wso.sber.ru\r\ncertauth.wso.sberbank.ru\r\ncertificate.avito.ru\r\ncertificate.otello.2gis.ru\r\ncertification.avito.ru\r\ncerts.tinkoff.ru\r\nces.avito.ru\r\ncesar.avito.ru\r\ncet.avito.ru\r\ncetus.avito.ru\r\ncf.amer-free.prd.media.max.com\r\ncf.asia.prd.media.max.com\r\ncf.avito.ru\r\ncf.br.us.prd.media.max.com\r\ncf.cfc.dev.media.max.com\r\ncf.cfc.int.media.max.com\r\ncf.cfc.prd.media.max.com\r\ncf.cfc.stg.media.max.com\r\ncf.cnn.us.prd.media.max.com\r\ncf.dplus.us.prd.media.max.com\r\ncf.eu.dev.media.max.com\r\ncf.eu.int.media.max.com\r\ncf.eu.prd.media.max.com\r\ncf.eu.stg.media.max.com\r\ncf.highlights.dev.media.max.com\r\ncf.highlights.int.media.max.com\r\ncf.highlights.prd.media.max.com\r\ncf.highlights.stg.media.max.com\r\ncf.latam.dev.media.max.com\r\ncf.latam.int.media.max.com\r\ncf.latam.prd.media.max.com\r\ncf.latam.stg.media.max.com\r\ncf.live.eu.dev.media.max.com\r\ncf.live.eu.int.media.max.com\r\ncf.live.eu.prd.media.max.com\r\ncf.live.eu.stg.media.max.com\r\ncf.live.latam.dev.media.max.com\r\ncf.live.latam.int.media.max.com\r\ncf.live.latam.prd.media.max.com\r\ncf.live.latam.stg.media.max.com\r\ncf.live.na.dev.media.max.com\r\ncf.live.na.int.media.max.com\r\ncf.live.na.prd.media.max.com\r\ncf.live.na.stg.media.max.com\r\ncf.live.olympics.dev.media.max.com\r\ncf.live.olympics.int.media.max.com\r\ncf.live.olympics.prd.media.max.com\r\ncf.live.olympics.stg.media.max.com\r\ncf.live.us.dev.media.max.com\r\ncf.live.us.int.media.max.com\r\ncf.live.us.prd.media.max.com\r\ncf.live.us.stg.media.max.com\r\ncf.logs.dev.media.max.com\r\ncf.logs.int.media.max.com\r\ncf.logs.prd.media.max.com\r\ncf.logs.stg.media.max.com\r\ncf.olympics.dev.media.max.com\r\ncf.olympics.int.media.max.com\r\ncf.olympics.prd.media.max.com\r\ncf.olympics.stg.media.max.com\r\ncf.universal-search-feed.dev.media.max.com\r\ncf.universal-search-feed.int.media.max.com\r\ncf.universal-search-feed.prd.media.max.com\r\ncf.universal-search-feed.stg.media.max.com\r\ncf1.i.mail.ru\r\ncf155.conf.avito.ru\r\ncf165.conf.avito.ru\r\ncf175.conf.avito.ru\r\ncf185.conf.avito.ru\r\ncf195.conf.avito.ru\r\ncf2.i.mail.ru\r\ncf3.i.mail.ru\r\ncf4.i.mail.ru\r\ncf5.i.mail.ru\r\ncf966399a9af4ccc87146f40e7350ae3-clt.ops.beeline.ru\r\ncfc.dev.media.max.com\r\ncfc.int.media.max.com\r\ncfc.mos.ru\r\ncfc.prd.media.max.com\r\ncfc.rusarchives.ru\r\ncfc.stg.media.max.com\r\ncfd.avito.ru\r\ncfd185.avito.ru\r\ncfd264.avito.ru\r\ncfd297.avito.ru\r\ncfd307.avito.ru\r\ncfexporter.meduza.io\r\ncfg.avito.ru\r\ncfg.tinkoff.ru\r\ncfire.mail.ru\r\ncfo-front.alfabank.ru\r\ncfs.avito.ru\r\ncg-entry.meduza.io\r\ncg.avito.ru\r\ncg.rgis.rk.gov.ru\r\ncg.rgistest.rk.gov.ru\r\ncg.rpn.gov.ru\r\ncgate.open.ru\r\ncgc.avito.ru\r\ncggw-asis-a.rzd.ru\r\ncgi.avito.ru\r\ncgko.sakha.gov.ru\r\ncgm.avito.ru\r\ncgp.avito.ru\r\ncgp.mirtv.ru\r\ncgp.rosnedra.gov.ru\r\ncgs.avito.ru\r\ncgu.mchs.gov.ru\r\ncgu.mchs.ru\r\nch.avito.ru\r\nch.redash.vedomosti.ru\r\nch.rs.premier.one\r\ncha.avito.ru\r\nchacha.avito.ru\r\nchad.mail.ru\r\nchad2.mail.ru\r\nchai.101.yandex.ru\r\nchaitanya.avito.ru\r\nchalet.avito.ru\r\nchallenge.avito.ru\r\nchallenger.avito.ru\r\nchamber.skzd.rzd.ru\r\nchampion.avito.ru\r\nchampions.avito.ru\r\nchampions.content.tinkoff.ru\r\nchan.avito.ru\r\nchance.avito.ru\r\nchance.tinkoff.ru\r\nchandler.avito.ru\r\nchandra.avito.ru\r\nchangan.drom.ru\r\nchange.avito.ru\r\nchange.kino-teatr.ru\r\nchangepassword.yandex.ru\r\nchanges.avito.ru\r\nchannel.avito.ru\r\nchannels.avito.ru\r\nchannels.sberbank.ru\r\nchantal.avito.ru\r\nchany.drom.ru\r\nchaos.avito.ru\r\nchaotic.avito.ru\r\nchaplin.avito.ru\r\nchapman.iz.ru\r\nchapman.ren.tv\r\ncharge.avito.ru\r\ncharger.avito.ru\r\ncharity.avito.ru\r\ncharles.avito.ru\r\ncharleston.avito.ru\r\ncharlie.avito.ru\r\ncharlotte.avito.ru\r\ncharm.avito.ru\r\ncharmed.avito.ru\r\ncharon.avito.ru\r\nchart.dev.yandex.ru\r\ncharts.avito.ru\r\nchase.avito.ru\r\nchat-alpha.vtb.ru\r\nchat-bot-ens.nalog.gov.ru\r\nchat-bot-ens.nalog.ru\r\nchat-sharing.vtb.ru\r\nchat.alfabank.ru\r\nchat.avito.ru\r\nchat.beeline.ru\r\nchat.chatdev.psbank.ru\r\nchat.chatprep.psbank.ru\r\nchat.chattest.psbank.ru\r\nchat.dns-shop.ru\r\nchat.dom.t2.ru\r\nchat.dom.tele2.ru\r\nchat.ec.mts.ru\r\nchat.infra.rbc.ru\r\nchat.mchs.ru\r\nchat.my.tiu.ru\r\nchat.net.ixbt.com\r\nchat.psbank.ru\r\nchat.roseltorg.ru\r\nchat.rshb.ru\r\nchat.vtb.ru\r\nchat1.avito.ru\r\nchat1.vtb.ru\r\nchat2.avito.ru\r\nchat2.mail.ru\r\nchat2.my.tiu.ru\r\nchat2.vtb.ru\r\nchat3.vtb.ru\r\nchat4.avito.ru\r\nchat4.vtb.ru\r\nchatbot-id.open.ru\r\nchatbot.sberbank.ru\r\nchatbottest.psbank.ru\r\nchatbox.avito.ru\r\nchatcenter.beeline.ru\r\nchatclient.ssl.mts.ru\r\nchatdev.psbank.ru\r\nchatik.hh.ru\r\nchatik.kirov.hh.ru\r\nchatik.mytischi.hh.ru\r\nchatik.ramenskoye.hh.ru\r\nchatik.ulyanovsk.hh.ru\r\nchatik.zheleznogorsk-kursk.hh.ru\r\nchatkb.alfabank.ru\r\nchatnc.csc.sberbank.ru\r\nchatter.avito.ru\r\nchattest.psbank.ru\r\nchatting.avito.ru\r\nchatul.rshb.ru\r\nchb.beeline.ru\r\nche.avito.ru\r\ncheap.avito.ru\r\ncheb.home.megafon.ru\r\ncheb.mk.ru\r\ncheboksary.avito.ru\r\ncheboksary.beeline.ru\r\ncheboksary.drom.ru\r\ncheboksary.lemanapro.ru\r\nchechnya.dev.home.megafon.ru\r\nchechnya.mts.ru\r\ncheck.avito.ru\r\ncheck.easycert.sberbank.ru\r\ncheck.hr-test.sberbank.ru\r\ncheck.hr.sberbank.ru\r\ncheck.rshb.ru\r\ncheck.tinkoff.ru\r\ncheck.youdo.com\r\ncheck1.worldbank.org\r\ncheckbox.youdo.com\r\ncheckdoc.garant.ru\r\nchecker-amigo-api.e.mail.ru\r\nchecker-e.consultant.ru\r\ncheckin.2gis.ru\r\nchecklist-api-admin.mdrive.magnit.ru\r\nchecklist-api-demo.demo.mdrive.magnit.ru\r\nchecklist-api-demo.mdrive.magnit.ru\r\nchecklist-api-test.mdrive.magnit.ru\r\nchecklist-api.demo.mdrive.magnit.ru\r\nchecklist-api.mdrive.magnit.ru\r\nchecklist-api.qa.mdrive.magnit.ru\r\ncheckmate.avito.ru\r\ncheckout.avito.ru\r\ncheckout.meduza.io\r\ncheckpoint.avito.ru\r\ncheckrelay.avito.ru\r\nchecksrv.avito.ru\r\ncheers.avito.ru\r\ncheese.avito.ru\r\ncheetah.avito.ru\r\nchef.avito.ru\r\nchehov.mts.ru\r\nchekhov.hh.ru\r\nchel.aif.ru\r\nchel.avito.ru\r\nchel.dev.home.megafon.ru\r\nchel.dev.kp.ru\r\nchel.fas.gov.ru\r\nchel.kp.ru\r\nchel.mk.ru\r\nchel.mts.ru\r\nchel.shop.megafon.ru\r\nchelindbank.credit-registry.nalog.ru\r\nchelinvest.credit-registry.nalog.ru\r\nchelno-vershiny.drom.ru\r\nchelny.shop.megafon.ru\r\nchelprojects.kommersant.ru\r\nchelsea.avito.ru\r\nchelyabinsk-rnoc-rr02.backbone.avito.ru\r\nchelyabinsk-rnoc-rr02.backbone.urc.ac.ru.avito.ru\r\nchelyabinsk.alfabank.ru\r\nchelyabinsk.avito.ru\r\nchelyabinsk.babyblog.ru\r\nchelyabinsk.beeline.ru\r\nchelyabinsk.club.dns-shop.ru\r\nchelyabinsk.drom.ru\r\nchelyabinsk.hh.ru\r\nchelyabinsk.lemanapro.ru\r\nchelyabinsk.shop.tele2.ru\r\nchelyabinsk.tele2.ru\r\nchem.avito.ru\r\nchemie.avito.ru\r\nchemistry.avito.ru\r\nchempionat.tass.ru\r\nchen.avito.ru\r\nchennai.avito.ru\r\ncher.shop.megafon.ru\r\ncheremush.mos.ru\r\ncherepanovo.drom.ru\r\ncherepovets.beeline.ru\r\ncherepovets.dns-shop.ru\r\ncherepovets.drom.ru\r\ncherepovets.lemanapro.ru\r\ncherkessk.lemanapro.ru\r\ncherkizovo.interfax.ru\r\ncherm.hh.ru\r\nchernobyl.iz.ru\r\nchernomorskoe.drom.ru\r\nchernozem.tg.t2.ru\r\nchernozem.travel.t2.ru\r\ncherokee.avito.ru\r\ncherry.avito.ru\r\nchertanovo-juzhnoe.mos.ru\r\nchertanovo-severnoe.mos.ru\r\nchertanovocentr.mos.ru\r\nchery.drom.ru\r\ncheryexeed.drom.ru\r\nchess.avito.ru\r\nchester.avito.ru\r\nchetan.avito.ru\r\nchevrolet.avito.ru\r\nchevrolet.drom.ru\r\nchevy.avito.ru\r\nchewbacca.avito.ru\r\nchewie.avito.ru\r\ncheyenne.avito.ru\r\nchi.avito.ru\r\nchiba.avito.ru\r\nchicago.avito.ru\r\nchicco.avito.ru\r\nchicken.avito.ru\r\nchief.avito.ru\r\nchihiro.avito.ru\r\nchild.avito.ru\r\nchildren.avito.ru\r\nchildren1941-1945.review-k8s.aif.ru\r\nchildren1941-1945eng.review-k8s.aif.ru\r\nchile.avito.ru\r\nchili.avito.ru\r\nchill.avito.ru\r\nchillax.avito.ru\r\nchilli.avito.ru\r\nchimera.avito.ru\r\nchin.avito.ru\r\nchina.avito.ru\r\nchina.megafon.ru\r\nchinese.avito.ru\r\nchip.avito.ru\r\nchip.rbc.ru\r\nchita.aif.ru\r\nchita.avito.ru\r\nchita.club.dns-shop.ru\r\nchita.dev.home.megafon.ru\r\nchita.dev.kp.ru\r\nchita.kp.ru\r\nchita.lemanapro.ru\r\nchita.mts.ru\r\nchita.shop.megafon.ru\r\nchitchat.avito.ru\r\nchk.beeline.ru\r\nchloe.avito.ru\r\nchm.avito.ru\r\nchmz.feedback.rosatom.ru\r\nchn.vtb.ru\r\ncho.avito.ru\r\nchocolate.avito.ru\r\nchocolate.zdorovie-shkolnika.spb.aif.ru\r\nchoose.avito.ru\r\nchopin.avito.ru\r\nchopper.rbc.ru\r\nchou.avito.ru\r\nchouchou.avito.ru\r\nchproxy.rs.premier.one\r\nchproxy.rs2.premier.one\r\nchr.mk.ru\r\nchr.rbc.ru\r\nchris.avito.ru\r\nchris.economy.gov.ru\r\nchristian.avito.ru\r\nchristianity.avito.ru\r\nchristmas.avito.ru\r\nchristopher.avito.ru\r\nchromakey.avito.ru\r\nchrome.avito.ru\r\nchromium.avito.ru\r\nchronicle.avito.ru\r\nchronos.avito.ru\r\nchrysler.avito.ru\r\nchs.avito.ru\r\nchs.cgu.mchs.ru\r\nchs.dev.cgu.iac.mchs.ru\r\nchtis-hosting.rbc.ru\r\nchtis.rbc.ru\r\nchto-izmenilos.rbc.ru\r\nchuguevka.drom.ru\r\nchukotka.kp.ru\r\nchukotka.mts.ru\r\nchukotka.shop.megafon.ru\r\nchukovsky-spb.review-k8s.aif.ru\r\nchulman.sakha.gov.ru\r\nchum.avito.ru\r\nchunk-r.2gis.ru\r\nchurch.avito.ru\r\nchurchslaves.lenta.ru\r\nchuvashia.fas.gov.ru\r\nchuvashia.mts.ru\r\nchuvashia.shop.megafon.ru\r\nchuvashia.tele2.ru\r\nchuvashiya.beeline.ru\r\nci.avito.ru\r\nci.openbank.ru\r\nci01e.yandex.ru\r\nci01i.yandex.ru\r\nci02e.yandex.ru\r\nci02i.yandex.ru\r\nci03e.yandex.ru\r\nci03i.yandex.ru\r\nci04e.yandex.ru\r\nci04i.yandex.ru\r\ncia01f.cs-minitools01f.yandex.ru\r\ncia01h.cs-minitools01h.yandex.ru\r\ncia01ht.cs-minitools01ht.yandex.ru\r\nciao.avito.ru\r\ncib.alfabank.ru\r\ncic.avito.ru\r\ncicd.kino-teatr.ru\r\ncicdversion.test.euronews.com\r\ncie.avito.ru\r\ncielo.avito.ru\r\nciface.meduza.io\r\ncifra.vtb.ru\r\ncik.sakha.gov.ru\r\ncim-api-dev.avito.ru\r\ncim-api-qa.avito.ru\r\ncim-api-uat.avito.ru\r\ncim-api.avito.ru\r\ncim-data-quality-qa.avito.ru\r\ncim-dev.avito.ru\r\ncim-geo-dev.avito.ru\r\ncim.avito.ru\r\ncincinnati.avito.ru\r\ncine.avito.ru\r\ncinema.avito.ru\r\ncinemanight.culture.ru\r\ncip-prev.x5.ru\r\ncip.avito.ru\r\ncir.duma.gov.ru\r\ncirce.avito.ru\r\ncircle.avito.ru\r\ncircus.avito.ru\r\ncirrus.avito.ru\r\ncis.avito.ru\r\ncis.customs.gov.ru\r\ncisco-capwap-controller.avito.ru\r\ncisco-ise.alfabank.ru\r\ncisco-lwapp-controller.avito.ru\r\ncisco.avito.ru\r\ncisco1.avito.ru\r\nciscoworks.avito.ru\r\ncisl-gijon.cit.avito.ru\r\ncisl-murcia.cit.avito.ru\r\ncisl-plaisir.cit.avito.ru\r\ncit.alfabank.ru\r\ncit.avito.ru\r\ncitadel.avito.ru\r\ncitep.minzdrav.gov.ru\r\nciti.corp.mail.ru\r\ncitibank.avito.ru\r\ncities-spotlight.who.int\r\ncitilink.external-1.stage.citilink.ru\r\ncitilink.external-2.stage.citilink.ru\r\ncitilink.external-3.stage.citilink.ru\r\ncitizens.afisha.ru\r\ncitrine.mail.ru\r\ncitrix.avito.ru\r\ncitrix1.avito.ru\r\ncitrix2.avito.ru\r\ncitroen.avito.ru\r\ncitron.avito.ru\r\ncity.avito.ru\r\ncity.beeline.ru\r\ncity.mts.ru\r\ncity.tambov.gov.ru\r\ncity.yandex.ru\r\ncityrestaurants.youdo.com\r\ncivil-forum.bizconf.rbc.ru\r\ncivil.avito.ru\r\ncivil.consultant.ru\r\ncivil.max.ru\r\ncj.avito.ru\r\ncjc.avito.ru\r\ncjxy.avito.ru\r\ncjy.avito.ru\r\nck.avito.ru\r\nckad.lenta.ru\r\nckarea.avito.ru\r\nckbm.feedback.rosatom.ru\r\ncknwhplatinum.kino-teatr.ru\r\ncl-1b25e6e4.mf.cdnmgf.megafon.ru\r\ncl-478981c1.mf.cdnmgf.megafon.ru\r\ncl-5324db13.mf.cdnmgf.megafon.ru\r\ncl-541e19d9.mf.cdnmgf.megafon.ru\r\ncl-565f122e.mf.cdnmgf.megafon.ru\r\ncl-5b8e0553.mf.cdnmgf.megafon.ru\r\ncl-65f19c1d.mf.cdnmgf.megafon.ru\r\ncl-6c3d406d.mf.cdnmgf.megafon.ru\r\ncl-6fc11c70.mf.cdnmgf.megafon.ru\r\ncl-8784818a.mf.cdnmgf.megafon.ru\r\ncl-9265c05c.mf.cdnmgf.megafon.ru\r\ncl-9454fc87.mf.cdnmgf.megafon.ru\r\ncl-9b9633a2.mf.cdnmgf.megafon.ru\r\ncl-c1133150.mf.cdnmgf.megafon.ru\r\ncl-c53eed4f.mf.cdnmgf.megafon.ru\r\ncl-eb41f870.mf.cdnmgf.megafon.ru\r\ncl-f50a23f4.mf.cdnmgf.megafon.ru\r\ncl-ms0c0b9d43.mf.cdnmgf.megafon.ru\r\ncl-ms2baa9a04.mf.cdnmgf.megafon.ru\r\ncl-ms51d66d62.mf.cdnmgf.megafon.ru\r\ncl-ms606be191.mf.cdnmgf.megafon.ru\r\ncl-ms67ef30d2.mf.cdnmgf.megafon.ru\r\ncl-ms6d5b0613.mf.cdnmgf.megafon.ru\r\ncl-ms87823ce7.mf.cdnmgf.megafon.ru\r\ncl-ms8dcee928.mf.cdnmgf.megafon.ru\r\ncl-ms8e723e43.mf.cdnmgf.megafon.ru\r\ncl-msd383261a.mf.cdnmgf.megafon.ru\r\ncl-msd7d209a7.mf.cdnmgf.megafon.ru\r\ncl.avito.ru\r\ncl.dm.alfabank.ru\r\ncl.sberbank.ru\r\ncl.vtb.ru\r\ncl1.avito.ru\r\ncl1.kino-teatr.ru\r\nclaim.vtb.ru\r\nclaims.avito.ru\r\nclaire.avito.ru\r\nclan.avito.ru\r\nclans.avito.ru\r\nclara.avito.ru\r\nclare.avito.ru\r\nclarity.avito.ru\r\nclark.avito.ru\r\nclaro.play.max.com\r\nclasificados.avito.ru\r\nclass.avito.ru\r\nclass.rambler.ru\r\nclasses.avito.ru\r\nclassic.avito.ru\r\nclassico.avito.ru\r\nclassific.yandex.ru\r\nclassificados.avito.ru\r\nclassified.avito.ru\r\nclassifieds.avito.ru\r\nclassifieds.mk.ru\r\nclassroom.avito.ru\r\nclaude.avito.ru\r\nclay.avito.ru\r\nclaymore.avito.ru\r\nclb.beeline.ru\r\nclb.primorye.mts.ru\r\nclc.avito.ru\r\nclck.dzen.ru\r\nclck.new.market.pochta.ru\r\nclck.yandex.ru\r\ncldpmx1.i.mail.ru\r\ncldpmx2.i.mail.ru\r\ncldstd1.i.mail.ru\r\ncldstd2.i.mail.ru\r\nclean.avito.ru\r\ncleaning.avito.ru\r\ncleanlocale.test.euronews.com\r\nclear.avito.ru\r\nclearml.cgu.mchs.ru\r\ncleo.avito.ru\r\ncleo1.mail.ru\r\ncleo2.mail.ru\r\ncleo3.mail.ru\r\ncleo4.mail.ru\r\nclerk1.mail.ru\r\nclerk2.mail.ru\r\ncleveland.avito.ru\r\nclever.head.2013.yandex.ru\r\ncleverskincare.avito.ru\r\nclic.avito.ru\r\nclic.iarc.who.int\r\nclick-clus.net.ixbt.com\r\nclick.alfabank.ru\r\nclick.alphabank.ru\r\nclick.avito.ru\r\nclick.barmen.blizko.ru\r\nclick.barmen.pulscen.ru\r\nclick.dsp.rambler.ru\r\nclick.ixbt.com\r\nclick.litres.ru\r\nclick.net.ixbt.com\r\nclick.ok.ru\r\nclick.open.ru\r\nclick.sender.yandex.ru\r\nclick.ssp.rambler.ru\r\nclick01.dsp.rambler.ru\r\nclick01.ssp.rambler.ru\r\nclick02.dsp.rambler.ru\r\nclick02.ssp.rambler.ru\r\nclick2call.vtb.ru\r\nclick3.avito.ru\r\nclick537.beeline.ru\r\nclickdemo.alfabank.ru\r\nclickhouse.yandex.ru\r\nclickme.avito.ru\r\nclicks.avito.ru\r\nclicks.banki.ru\r\nclicks.citilink.ru\r\nclicks.tutu.ru\r\nclickstream-omni.magnit.ru\r\nclickstream.online.sberbank.ru\r\nclickstream.sberbank.ru\r\nclickstream.tinkoff.ru\r\nclid.tele2.ru\r\nclient-automation.ing.k8s.dev.ivi.ru\r\nclient-resp-sms-preprod.mkb.ru\r\nclient.alfabank.ru\r\nclient.avito.ru\r\nclient.consultant.ru\r\nclient.factoring.rosbank.ru\r\nclient.lk.psbank.ru\r\nclient.yandex.ru\r\nclientapi.mail.ru\r\nclientconnection.worldbank.org\r\nclientconnectiondev.worldbank.org\r\nclientconnectiondevt.worldbank.org\r\nclientconnectiondevt2.worldbank.org\r\nclientconnectiondevt3.worldbank.org\r\nclientconnectionfifs.worldbank.org\r\nclientconnectionqa.worldbank.org\r\nclientconnectiontq.worldbank.org\r\nclientconnectiontq2.worldbank.org\r\ncliente.avito.ru\r\nclientes.avito.ru\r\nclientftp.avito.ru\r\nclienti.avito.ru\r\nclientkey.alfabank.ru\r\nclients.avito.ru\r\nclients.open.ru\r\nclientweb.avito.ru\r\nclifford.users.avito.ru\r\nclimate-report2022.nornickel.com\r\nclimate-report2024.nornickel.com\r\nclimate.avito.ru\r\nclimatescreeningtools.worldbank.org\r\nclinic.avito.ru\r\nclinica.kp.ru\r\nclinika.kp.ru\r\nclio.avito.ru\r\nclip.avito.ru\r\nclips.avito.ru\r\nclk.avito.ru\r\nclm.magnit.ru\r\nclock.avito.ru\r\nclock.yandex.ru\r\nclocks.yandex.ru\r\ncloclo1-upload.cloud.mail.ru\r\ncloclo1.cloud.mail.ru\r\ncloclo1.i.mail.ru\r\ncloclo10-upload.cloud.mail.ru\r\ncloclo10.cloud.mail.ru\r\ncloclo10.i.mail.ru\r\ncloclo102.i.mail.ru\r\ncloclo103.i.mail.ru\r\ncloclo11-upload.cloud.mail.ru\r\ncloclo11.cloud.mail.ru\r\ncloclo11.i.mail.ru\r\ncloclo112.i.mail.ru\r\ncloclo113.i.mail.ru\r\ncloclo12.cloud.mail.ru\r\ncloclo12.i.mail.ru\r\ncloclo122.i.mail.ru\r\ncloclo123.i.mail.ru\r\ncloclo13-upload.cloud.mail.ru\r\ncloclo13.cloud.mail.ru\r\ncloclo13.i.mail.ru\r\ncloclo132.i.mail.ru\r\ncloclo133.i.mail.ru\r\ncloclo14-upload.cloud.mail.ru\r\ncloclo14.cloud.mail.ru\r\ncloclo14.i.mail.ru\r\ncloclo142.i.mail.ru\r\ncloclo143.i.mail.ru\r\ncloclo15-upload.cloud.mail.ru\r\ncloclo15.cloud.mail.ru\r\ncloclo15.i.mail.ru\r\ncloclo152.i.mail.ru\r\ncloclo153.i.mail.ru\r\ncloclo16.cloud.mail.ru\r\ncloclo162.i.mail.ru\r\ncloclo163.i.mail.ru\r\ncloclo17-upload.cloud.mail.ru\r\ncloclo17.cloud.mail.ru\r\ncloclo172.i.mail.ru\r\ncloclo173.i.mail.ru\r\ncloclo18-upload.cloud.mail.ru\r\ncloclo18.cloud.mail.ru\r\ncloclo182.i.mail.ru\r\ncloclo183.i.mail.ru\r\ncloclo19-upload.cloud.mail.ru\r\ncloclo19.cloud.mail.ru\r\ncloclo192.i.mail.ru\r\ncloclo193.i.mail.ru\r\ncloclo2-upload.cloud.mail.ru\r\ncloclo2.cloud.mail.ru\r\ncloclo2.i.mail.ru\r\ncloclo20-upload.cloud.mail.ru\r\ncloclo20.cloud.mail.ru\r\ncloclo20.i.mail.ru\r\ncloclo202.i.mail.ru\r\ncloclo203.i.mail.ru\r\ncloclo21-upload.cloud.mail.ru\r\ncloclo21.cloud.mail.ru\r\ncloclo21.i.mail.ru\r\ncloclo212.i.mail.ru\r\ncloclo213.i.mail.ru\r\ncloclo22-upload.cloud.mail.ru\r\ncloclo22.cloud.mail.ru\r\ncloclo22.i.mail.ru\r\ncloclo222.i.mail.ru\r\ncloclo223.i.mail.ru\r\ncloclo23-upload.cloud.mail.ru\r\ncloclo23.cloud.mail.ru\r\ncloclo23.i.mail.ru\r\ncloclo232.i.mail.ru\r\ncloclo233.i.mail.ru\r\ncloclo24-upload.cloud.mail.ru\r\ncloclo24.cloud.mail.ru\r\ncloclo24.i.mail.ru\r\ncloclo242.i.mail.ru\r\ncloclo243.i.mail.ru\r\ncloclo25-upload.cloud.mail.ru\r\ncloclo25.cloud.mail.ru\r\ncloclo25.i.mail.ru\r\ncloclo252.i.mail.ru\r\ncloclo253.i.mail.ru\r\ncloclo26-upload.cloud.mail.ru\r\ncloclo26.cloud.mail.ru\r\ncloclo262.i.mail.ru\r\ncloclo263.i.mail.ru\r\ncloclo27-upload.cloud.mail.ru\r\ncloclo27.cloud.mail.ru\r\ncloclo272.i.mail.ru\r\ncloclo273.i.mail.ru\r\ncloclo28-upload.cloud.mail.ru\r\ncloclo28.cloud.mail.ru\r\ncloclo282.i.mail.ru\r\ncloclo283.i.mail.ru\r\ncloclo29-upload.cloud.mail.ru\r\ncloclo29.cloud.mail.ru\r\ncloclo292.i.mail.ru\r\ncloclo293.i.mail.ru\r\ncloclo3-upload.cloud.mail.ru\r\ncloclo3.cloud.mail.ru\r\ncloclo3.i.mail.ru\r\ncloclo30-upload.cloud.mail.ru\r\ncloclo30.cloud.mail.ru\r\ncloclo30.i.mail.ru\r\ncloclo302.i.mail.ru\r\ncloclo303.i.mail.ru\r\ncloclo31.i.mail.ru\r\ncloclo32.i.mail.ru\r\ncloclo33.i.mail.ru\r\ncloclo34.i.mail.ru\r\ncloclo35.i.mail.ru\r\ncloclo37-upload.cloud.mail.ru\r\ncloclo37.cloud.mail.ru\r\ncloclo372.i.mail.ru\r\ncloclo373.i.mail.ru\r\ncloclo38-upload.cloud.mail.ru\r\ncloclo38.cloud.mail.ru\r\ncloclo382.i.mail.ru\r\ncloclo383.i.mail.ru\r\ncloclo39-upload.cloud.mail.ru\r\ncloclo39.cloud.mail.ru\r\ncloclo392.i.mail.ru\r\ncloclo393.i.mail.ru\r\ncloclo4-upload.cloud.mail.ru\r\ncloclo4.cloud.mail.ru\r\ncloclo4.i.mail.ru\r\ncloclo40-upload.cloud.mail.ru\r\ncloclo40.cloud.mail.ru\r\ncloclo40.i.mail.ru\r\ncloclo402.i.mail.ru\r\ncloclo403.i.mail.ru\r\ncloclo41-upload.cloud.mail.ru\r\ncloclo41.cloud.mail.ru\r\ncloclo41.i.mail.ru\r\ncloclo412.i.mail.ru\r\ncloclo413.i.mail.ru\r\ncloclo42-upload.cloud.mail.ru\r\ncloclo42.cloud.mail.ru\r\ncloclo42.i.mail.ru\r\ncloclo422.i.mail.ru\r\ncloclo423.i.mail.ru\r\ncloclo43.i.mail.ru\r\ncloclo432.i.mail.ru\r\ncloclo433.i.mail.ru\r\ncloclo44-upload.cloud.mail.ru\r\ncloclo44.cloud.mail.ru\r\ncloclo44.i.mail.ru\r\ncloclo442.i.mail.ru\r\ncloclo443.i.mail.ru\r\ncloclo5-upload.cloud.mail.ru\r\ncloclo5.cloud.mail.ru\r\ncloclo52.i.mail.ru\r\ncloclo53.i.mail.ru\r\ncloclo6.cloud.mail.ru\r\ncloclo62.i.mail.ru\r\ncloclo63.i.mail.ru\r\ncloclo72.i.mail.ru\r\ncloclo73.i.mail.ru\r\ncloclo8.cloud.mail.ru\r\ncloclo82.i.mail.ru\r\ncloclo83.i.mail.ru\r\ncloclo9-upload.cloud.mail.ru\r\ncloclo9.cloud.mail.ru\r\ncloclo92.i.mail.ru\r\ncloclo93.i.mail.ru\r\nclocloapi1.i.mail.ru\r\nclocloapi3.i.mail.ru\r\nclof1.i.mail.ru\r\nclof10.i.mail.ru\r\nclof11.i.mail.ru\r\nclof12.i.mail.ru\r\nclof2.i.mail.ru\r\nclof3.i.mail.ru\r\nclof4.i.mail.ru\r\nclone.avito.ru\r\nclose2heart.tinkoff.ru\r\nclosebusiness.psbank.ru\r\nclosed.avito.ru\r\nclotest3.i.mail.ru\r\nclotest4.i.mail.ru\r\nclotest52.i.mail.ru\r\nclotest62.i.mail.ru\r\nclotest63.i.mail.ru\r\nclotest72.i.mail.ru\r\nclothing.avito.ru\r\ncloud-api.e.mail.ru\r\ncloud-api.yandex.ru\r\ncloud-prom.consultant.ru\r\ncloud.avito.ru\r\ncloud.beeline.ru\r\ncloud.consultant.ru\r\ncloud.ec.mts.ru\r\ncloud.garant.ru\r\ncloud.iac.mchs.ru\r\ncloud.kino-teatr.ru\r\ncloud.litres.ru\r\ncloud.lk.cdn.megafon.ru\r\ncloud.mail.ru\r\ncloud.mchs.ru\r\ncloud.megafon.ru\r\ncloud.mkb.ru\r\ncloud.mts.ru\r\ncloud.nalog.ru\r\ncloud.perm.rg.ru\r\ncloud.psbank.ru\r\ncloud.rk.gov.ru\r\ncloud.rusarchives.ru\r\ncloud.t2.ru\r\ncloud.test.iac.mchs.ru\r\ncloud.test.mchs.ru\r\ncloud.test2.mchs.ru\r\ncloud.videocontrol.t2.ru\r\ncloud.vk.com\r\ncloud.vkmail.rosbank.ru\r\ncloud.yandex.ru\r\ncloud1.avito.ru\r\ncloud2.avito.ru\r\ncloud3.avito.ru\r\ncloud3.fsa.gov.ru\r\ncloud35.mchs.ru\r\ncloud4.avito.ru\r\ncloud9.avito.ru\r\ncloudcc.beeline.ru\r\ncloudcc2.beeline.ru\r\ncloudcc3.beeline.ru\r\ncloude.megafon.ru\r\ncloudflare-resolve-to.avito.ru\r\ncloudmail.mts.ru\r\ncloudpbx.beeline.ru\r\ncloudstore.fsa.gov.ru\r\ncloudtls.mkb.ru\r\nclover.avito.ru\r\nclp.factoring.rshb.ru\r\ncls.avito.ru\r\nclub.alfabank.ru\r\nclub.avito.ru\r\nclub.dns-shop.ru\r\nclub.eldorado.ru\r\nclub.garant.ru\r\nclubhouse.avito.ru\r\nclubs.avito.ru\r\ncluj.avito.ru\r\ncluster.aif.ru\r\ncluster.avito.ru\r\ncluster1.avito.ru\r\ncluster2.avito.ru\r\nclusterdb-004.mir.afisha.ru\r\ncm.1tv.ru\r\ncm.avito.ru\r\ncm.beeline.ru\r\ncm.rosbank.ru\r\ncm2.avito.ru\r\ncm6.rosbank.ru\r\ncma.avito.ru\r\ncmail.avito.ru\r\ncmc.avito.ru\r\ncmcc.avito.ru\r\ncmd.avito.ru\r\ncmdb.avito.ru\r\ncmdb.meduza.io\r\ncme.avito.ru\r\ncmgrsb.rosbank.ru\r\ncmi.avito.ru\r\ncmp.avito.ru\r\ncmpssb.beeline.ru\r\ncms-admin.open.ru\r\ncms-mmobile.magnit.ru\r\ncms-res-investor-psi.sberbank.ru\r\ncms-res-investor.sberbank.ru\r\ncms-res.online.sberbank.ru\r\ncms-stage.kommersant.ru\r\ncms.afisha.ru\r\ncms.ag.mos.ru\r\ncms.alfabank.ru\r\ncms.avito.ru\r\ncms.experience.who.int\r\ncms.id.afisha.ru\r\ncms.kino-teatr.ru\r\ncms.kommersant.ru\r\ncms.mir.afisha.ru\r\ncms.mvideo.ru\r\ncms.openbank.ru\r\ncms.partnership.who.int\r\ncms.platform.who.int\r\ncms.rid.afisha.ru\r\ncms.show.afisha.ru\r\ncms.sovcombank.ru\r\ncms.tinkoff.ru\r\ncms.vdstories.mts.ru\r\ncms.who.int\r\ncms1.avito.ru\r\ncms2.avito.ru\r\ncms3.avito.ru\r\ncms7.afisha.ru\r\ncms7.rc.afisha.ru\r\ncmsdev.avito.ru\r\ncmsearch.yandex.ru\r\ncmsicsid.worldbank.org\r\ncmsifc.worldbank.org\r\ncmsint.worldbank.org\r\ncmsmtoc1.worldbank.org\r\ncmsmtog1.worldbank.org\r\ncmsmutu-dev.euronews.com\r\ncmsmutu-prd.euronews.com\r\ncmsmutu-stg.euronews.com\r\ncmsoes.worldbank.org\r\ncmssanctions.worldbank.org\r\ncmstest.avito.ru\r\ncmt.avito.ru\r\ncmt.ixbt.com\r\ncmts1-all.gw.avito.ru\r\ncmts2-all.gw.avito.ru\r\ncn.avito.ru\r\ncn.www.sports.ru\r\ncname.avito.ru\r\ncnc.avito.ru\r\ncnc.park.rambler.ru\r\ncnet.avito.ru\r\ncnnrss.int.media.max.com\r\ncnoub.mail.ru\r\ncnr.avito.ru\r\ncns.avito.ru\r\ncnt.rambler.ru\r\nco.avito.ru\r\nco.esm.apteka.ru\r\nco37tula-r71.gosuslugi.ru\r\ncoa.avito.ru\r\ncoach.avito.ru\r\ncoapi.myoffice.sberbank.ru\r\ncobalt.avito.ru\r\ncobbler.avito.ru\r\ncobra.avito.ru\r\ncobra.sberbank.ru\r\ncobrowsing-cdn-test.tbank.ru\r\ncobrowsing-cdn.tbank.ru\r\ncobrowsing.tinkoff.ru\r\ncoc.avito.ru\r\ncoca-cola.ny.mail.ru\r\ncoca.avito.ru\r\ncockpit.dev.cgu.iac.mchs.ru\r\ncoco.avito.ru\r\ncocoa.avito.ru\r\ncoconut.avito.ru\r\ncocoon.avito.ru\r\ncod-monitor.tomsk.gov.ru\r\ncod.avito.ru\r\ncod2.nalog.ru\r\ncode.ach.gov.ru\r\ncode.avito.ru\r\ncodec1.rambler.ru\r\ncodec2.rambler.ru\r\ncodecsworld.avito.ru\r\ncodepush.profi.ru\r\ncoder.avito.ru\r\ncodex.avito.ru\r\ncody.avito.ru\r\ncofe.2gis.ru\r\ncoffee.2gis.ru\r\ncoffee.avito.ru\r\ncoffee.open.ru\r\ncofiles.userapi.com\r\ncog.mail.ru\r\ncognos.avito.ru\r\ncoin.avito.ru\r\ncoins.avito.ru\r\ncoins.rshb.ru\r\ncoins.tinkoff.ru\r\ncoke.avito.ru\r\ncold.cdn.dzen.ru\r\ncoldberry.yandex.ru\r\ncoleman.avito.ru\r\ncolgate.avito.ru\r\ncolibri.avito.ru\r\ncollab-edge.alfabank.ru\r\ncollab-edge.css.rzd.ru\r\ncollab-edge.emro.who.int\r\ncollab-edge.intech.rshb.ru\r\ncollab-edge.open.ru\r\ncollab-edge.rbc.ru\r\ncollab-edge.rosbank.ru\r\ncollab-edge.rshb.ru\r\ncollab-edge.sber.ru\r\ncollab-edge.sberbank.ru\r\ncollab-edge.sovcombank.ru\r\ncollab-edge.uc.magnit.ru\r\ncollab-edge.voiplab-ext.sberbank.ru\r\ncollab-edge.who.int\r\ncollab-edge.x5.ru\r\ncollab.avito.ru\r\ncollab.worldbank.org\r\ncollabc.worldbank.org\r\ncollabcdev.worldbank.org\r\ncollabcqa.worldbank.org\r\ncollabcstg.worldbank.org\r\ncollabctst.worldbank.org\r\ncollabdev.worldbank.org\r\ncollaborate.avito.ru\r\ncollaborate.kino-teatr.ru\r\ncollaboration-uat.worldbank.org\r\ncollaboration.avito.ru\r\ncollaboration.worldbank.org\r\ncollaboration2.worldbank.org\r\ncollaboration2dev.worldbank.org\r\ncollaboration2qa.worldbank.org\r\ncollaborationifc.worldbank.org\r\ncollabphapps.worldbank.org\r\ncollabphappsdev.worldbank.org\r\ncollabphappsqa.worldbank.org\r\ncollabqa.worldbank.org\r\ncollabstg.worldbank.org\r\ncollection.avito.ru\r\ncollection.yandex.ru\r\ncollection1tv.1tv.ru\r\ncollections.avito.ru\r\ncollections.yandex.ru\r\ncollector.avito.ru\r\ncollege.avito.ru\r\ncollins.avito.ru\r\ncollost.lady.mail.ru\r\ncolo.avito.ru\r\ncolocation.avito.ru\r\ncolombia.avito.ru\r\ncolor.avito.ru\r\ncolorado.avito.ru\r\ncolorful.avito.ru\r\ncolors.avito.ru\r\ncolossus.avito.ru\r\ncolt.avito.ru\r\ncolumbia.avito.ru\r\ncolumbus.avito.ru\r\ncom-services-vip.avito.ru\r\ncom.afro.who.int\r\ncom.avito.ru\r\ncombat.avito.ru\r\ncombo.avito.ru\r\ncomcast.avito.ru\r\ncome.avito.ru\r\ncomedy.avito.ru\r\ncomercial.avito.ru\r\ncomet-cp.rosatom.ru\r\ncomet.avito.ru\r\ncomet.tass.ru\r\ncomet1.avito.ru\r\ncomet2.avito.ru\r\ncomic.avito.ru\r\ncomics.avito.ru\r\ncomissia.economy.gov.ru\r\ncomm.avito.ru\r\ncomment.avito.ru\r\ncomments.avito.ru\r\ncommerce.avito.ru\r\ncommercial.avito.ru\r\ncommission.gosuslugi.ru\r\ncommon-api.kino-teatr.ru\r\ncommon-sw.avito.ru\r\ncommon-sw1.avito.ru\r\ncommon-sw2.avito.ru\r\ncommon.avito.ru\r\ncommunication.avito.ru\r\ncommunications.avito.ru\r\ncommunigate.avito.ru\r\ncommunities.avito.ru\r\ncommunity.avito.ru\r\ncomni.rosbank.ru\r\ncomni2.rosbank.ru\r\ncomodo.avito.ru\r\ncomp.avito.ru\r\ncompanies.rbc.ru\r\ncompanion.t2.ru\r\ncompanion.tele2.ru\r\ncompanionapp.online.sberbank.ru\r\ncompanionappift.online.sberbank.ru\r\ncompanionapppsi.online.sberbank.ru\r\ncompany.2gis.ru\r\ncompany.avito.ru\r\ncompany.citilink.ru\r\ncompany.garant.ru\r\ncompany.habr.com\r\ncompany.rzd.ru\r\ncompany.tutu.ru\r\ncompany.yandex.ru\r\ncompany2.yandex.ru\r\ncompaq.avito.ru\r\ncompare.avito.ru\r\ncompass.2gis.ru\r\ncompass.api.2gis.ru\r\ncompass.avito.ru\r\ncompassmaps.2gis.ru\r\ncompasspoint.worldbank.org\r\ncomplaints.avito.ru\r\ncomplete.avito.ru\r\ncomposer.2gis.ru\r\ncomposite.avito.ru\r\ncompras.avito.ru\r\ncompton.avito.ru\r\ncompunet.avito.ru\r\ncompute.mail.ru\r\ncomputer.avito.ru\r\ncomputers.avito.ru\r\ncoms.avito.ru\r\ncomsci.avito.ru\r\ncomunidad.avito.ru\r\ncomunity.avito.ru\r\ncomwww.babyblog.ru\r\ncon.avito.ru\r\ncon.transport.mos.ru\r\nconan.avito.ru\r\nconcentrate.rambler.ru\r\nconcentrator.gosuslugi.ru\r\nconcept.avito.ru\r\nconcord.avito.ru\r\nconcorde.avito.ru\r\nconcours.avito.ru\r\nconcurs.avito.ru\r\nconcurso.avito.ru\r\nconcursos.avito.ru\r\ncondor.avito.ru\r\nconf-media.megafon.ru\r\nconf.avito.ru\r\nconf.citilink.ru\r\nconf.garant.ru\r\nconf.megafon.ru\r\nconf.open.ru\r\nconf.profil.mos.ru\r\nconf.rosatom.ru\r\nconf.sev.gov.ru\r\nconf.skype.ec.mts.ru\r\nconf.task.ixbt.com\r\nconf01.pexip.beeline.ru\r\nconfcup2017.tass.ru\r\nconference-10-centralimpcluster.mts.ru\r\nconference-2-centralimpcluster.mts.ru\r\nconference-2-css-rzd.css.rzd.ru\r\nconference-2-cucm-presence.who.int\r\nconference-2-rzd-imp.css.rzd.ru\r\nconference-2-standalonecluster.khv.gov.ru\r\nconference-2-standaloneclusterc887f.khv.gov.ru\r\nconference-3-css-rzd.css.rzd.ru\r\nconference-3-rzd-imp.css.rzd.ru\r\nconference-3-standaloneclusterc887f.khv.gov.ru\r\nconference-6-cucm-presence.who.int\r\nconference-8-centralimpcluster.mts.ru\r\nconference-9-centralimpcluster.mts.ru\r\nconference-center.sberbank.ru\r\nconference-info.vedomosti.ru\r\nconference.avito.ru\r\nconference.jabber.avito.ru\r\nconference.mail.ru\r\nconference.rbc.ru\r\nconference.tass.ru\r\nconference2020.mts.ru\r\nconferencemanager.worldbank.org\r\nconferences.avito.ru\r\nconferencia.avito.ru\r\nconfidential.kino-teatr.ru\r\nconfig.avito.ru\r\nconfig.kino-teatr.ru\r\nconfig.rcs.ims.tele2.ru\r\nconfig.tinkoff.ru\r\nconfignt.ixbt.com\r\nconfigurator.avito.ru\r\nconfirm.avito.ru\r\nconfirmation.avito.ru\r\nconfirmation.fas.gov.ru\r\nconfluence.2gis.ru\r\nconfluence.avito.ru\r\nconfluence.babyblog.ru\r\nconfluence.citilink.ru\r\nconfluence.mts.ru\r\nconfluence.rbc.ru\r\nconfluence.rnd.consultant.ru\r\nconfluence.sovcombank.ru\r\nconfluence02.rbc.ru\r\ncongo.avito.ru\r\nconnatixnewplayerfor.test.euronews.com\r\nconnect-chat-stage.lemanapro.ru\r\nconnect-chat.lemanapro.ru\r\nconnect-kscore.gosuslugi.ru\r\nconnect-qa1.crowdtest.yandex.ru\r\nconnect-stage.lemanapro.ru\r\nconnect.avito.ru\r\nconnect.cs7777.vk.com\r\nconnect.it.63.yandex.ru\r\nconnect.lemanapro.ru\r\nconnect.mail.ru\r\nconnect.megafon.ru\r\nconnect.mkb.ru\r\nconnect.mts.ru\r\nconnect.ok.ru\r\nconnect.tau.vk.com\r\nconnect.yandex.ru\r\nconnect2-stage.lemanapro.ru\r\nconnect2.avito.ru\r\nconnect2.lemanapro.ru\r\nconnection.avito.ru\r\nconnections.avito.ru\r\nconnector.avito.ru\r\nconnectra.alfabank.ru\r\nconquest.avito.ru\r\nconrad.avito.ru\r\ncons.sev.gov.ru\r\nconsensus.rbc.ru\r\nconsgd.consultant.ru\r\nconsole-2.net.ixbt.com\r\nconsole-3.net.ixbt.com\r\nconsole-new.net.ixbt.com\r\nconsole.avito.ru\r\nconsole.cloud.mts.ru\r\nconsole.ift.mdm.sber.ru\r\nconsole.kino-teatr.ru\r\nconsole.net.ixbt.com\r\nconsole.paas.cloud.mts.ru\r\nconstitution.garant.ru\r\nconstitution.kremlin.ru\r\nconstruction.avito.ru\r\nconstruction.garant.ru\r\nconstruction.iiot.gov.ru\r\nconstructor.maps.yandex.ru\r\nconstrutor.avito.ru\r\nconsul.avito.ru\r\nconsult.avito.ru\r\nconsulta.avito.ru\r\nconsultant.avito.ru\r\nconsultant.beeline.ru\r\nconsultations.worldbank.org\r\nconsulting.avito.ru\r\nconsulting.rbc.ru\r\nconsumer-operations.alfabank.ru\r\nconsumer.avito.ru\r\ncontact.avito.ru\r\ncontact.yandex.ru\r\ncontact2.yandex.ru\r\ncontacts.avito.ru\r\ncontador.avito.ru\r\ncontent-6.foto.my.mail.ru\r\ncontent-ci360-dev.mvideo.ru\r\ncontent-ci360-test.eldorado.ru\r\ncontent-ci360-test.mvideo.ru\r\ncontent-ci360.eldorado.ru\r\ncontent-ci360.mvideo.ru\r\ncontent.2gis.ru\r\ncontent.avito.ru\r\ncontent.gibdd.mail.ru\r\ncontent.tinkoff.ru\r\ncontent.video11.mail.ru\r\ncontent.video12.mail.ru\r\ncontent.video13.mail.ru\r\ncontent.video15.mail.ru\r\ncontent.video16.mail.ru\r\ncontent.video17.mail.ru\r\ncontent.video18.mail.ru\r\ncontent.video19.mail.ru\r\ncontent.video21.mail.ru\r\ncontent.video22.mail.ru\r\ncontent.video23.mail.ru\r\ncontent.video24.mail.ru\r\ncontent.video25.mail.ru\r\ncontent.video31.mail.ru\r\ncontent.video32.mail.ru\r\ncontent.video33.mail.ru\r\ncontent.video34.mail.ru\r\ncontent.video35.mail.ru\r\ncontent.video36.mail.ru\r\ncontent.video5.mail.ru\r\ncontent.video6.mail.ru\r\ncontent.video7.mail.ru\r\ncontent.video8.mail.ru\r\ncontent.webmaster.yandex.ru\r\ncontent.zakon.ru\r\ncontent2.avito.ru\r\ncontent6.avito.ru\r\ncontent7.avito.ru\r\ncontents.avito.ru\r\ncontentsee.rbc.ru\r\nconter.1986.yandex.ru\r\ncontest.2gis.ru\r\ncontest.avito.ru\r\ncontest.ixbt.com\r\ncontest.m24.ru\r\ncontest.mts.ru\r\ncontest.yandex.ru\r\ncontests.avito.ru\r\ncontext.avito.ru\r\ncontgr1.i.mail.ru\r\ncontinental.avito.ru\r\ncontingent.mari-el.gov.ru\r\ncontingent.mos.ru\r\ncontinuum.avito.ru\r\ncontract.avito.ru\r\ncontract.beeline.ru\r\ncontract.gosuslugi.ru\r\ncontractor.avito.ru\r\ncontractors-croc.sbud.rshb.ru\r\ncontractors-var.sbud.rshb.ru\r\ncontractors.sbud.rshb.ru\r\ncontracts.lemanapro.ru\r\ncontraforma.397.yandex.ru\r\ncontrib.avito.ru\r\ncontribute.avito.ru\r\ncontrol.avito.ru\r\ncontrol.garant.ru\r\ncontrol.lk.cdn.megafon.ru\r\ncontrol2.avito.ru\r\ncontroller.avito.ru\r\ncontrolpanel.avito.ru\r\ncontrolpanel.zdorovie-shkolnika.spb.aif.ru\r\nconv-coll-rep.yandex.ru\r\nconvention.avito.ru\r\nconvergence.avito.ru\r\nconversion.psbank.ru\r\nconvert.avito.ru\r\nconverter.avito.ru\r\ncook.avito.ru\r\ncookbook.avito.ru\r\ncookie.avito.ru\r\ncookie.zdorovie-shkolnika.spb.aif.ru\r\ncooking.lady.mail.ru\r\ncool.avito.ru\r\ncool.karen-0.yandex.ru\r\ncool.yandex.ru\r\ncool2.yandex.ru\r\ncoop.avito.ru\r\ncooper.avito.ru\r\ncoordinates.beeline.ru\r\ncopper-dnk.lenta.ru\r\ncopper.avito.ru\r\ncopy.avito.ru\r\ncopyright.avito.ru\r\ncor.avito.ru\r\ncoral.avito.ru\r\ncorba-https-export-ng1.yandex.ru\r\ncorba-https-export.yandex.ru\r\ncore-pht-proxy.maps.yandex.ru\r\ncore-s-pfv.rosatom.ru\r\ncore-stv-ugc-proxy.maps.yandex.ru\r\ncore.avito.ru\r\ncore0.node9.mail.ru\r\ncore1.avito.ru\r\ncore1.node9.mail.ru\r\ncore2.avito.ru\r\ncore2.node9.mail.ru\r\ncore3.avito.ru\r\ncore3.node9.mail.ru\r\ncorner.avito.ru\r\ncorniglia.yandex.ru\r\ncorona.avito.ru\r\ncorona.project.tinkoff.ru\r\ncoronae.userapi.com\r\ncoronavirusca.userapi.com\r\ncorp-lk-invest-preprod.mkb.ru\r\ncorp.avito.ru\r\ncorp.eldorado.ru\r\ncorp.ivi.ru\r\ncorp.ixbt.com\r\ncorp.mail.ru\r\ncorp.megafon.ru\r\ncorp.mvideo.ru\r\ncorp.profi.ru\r\ncorp.t2.ru\r\ncorp.tass.ru\r\ncorp.tele2.ru\r\ncorp.test.ivi.ru\r\ncorp.vk.com\r\ncorp.wildberries.ru\r\ncorp2.avito.ru\r\ncorpbi-rnd.mts.ru\r\ncorpbi.mts.ru\r\ncorpcard.alfabank.ru\r\ncorpgov-pdf.x5.ru\r\ncorpmail.avito.ru\r\ncorpmail.rbc.ru\r\ncorporate-tst.mkb.ru\r\ncorporate.avito.ru\r\ncorporate.mkb.ru\r\ncorporate.psbank.ru\r\ncorporate.rbc.ru\r\ncorpsms.beeline.ru\r\ncorptaxi.mts.ru\r\ncorreio.avito.ru\r\ncorreo.avito.ru\r\ncorreo.kino-teatr.ru\r\ncorreoweb.avito.ru\r\ncorreu.avito.ru\r\ncortess.rbc.ru\r\ncorvette.avito.ru\r\ncorvette.mail.ru\r\ncorvus.avito.ru\r\ncos-prod.rshb.ru\r\ncos.avito.ru\r\ncosa.rk.gov.ru\r\ncosanostra.avito.ru\r\ncosign.avito.ru\r\ncosme.avito.ru\r\ncosmetic.avito.ru\r\ncosmetic.magnit.ru\r\ncosmic.avito.ru\r\ncosmo.avito.ru\r\ncosmopolitan.alfabank.ru\r\ncosmos.avito.ru\r\ncosmos.sber.ru\r\ncosplay.mail.ru\r\ncost.avito.ru\r\ncosta.avito.ru\r\ncostarica.avito.ru\r\ncotg.kino-teatr.ru\r\ncottage.avito.ru\r\ncotton.avito.ru\r\ncoturn1-cp.rosatom.ru\r\ncoturn2-cp.rosatom.ru\r\ncouchbase.rbc.ru\r\ncouchbase01.dev.rbc.ru\r\ncouchbase03.dev.rbc.ru\r\ncougar.avito.ru\r\ncougar.yandex.ru\r\ncouncil.avito.ru\r\ncouncil.gov.ru\r\ncount.avito.ru\r\ncountdown.avito.ru\r\ncounter.avito.ru\r\ncounter.drom.ru\r\ncounter.sberbank.ru\r\ncounter02.rambler.ru\r\ncounters.avito.ru\r\ncounterstrike.avito.ru\r\ncountry.avito.ru\r\ncountry.kp.ru\r\ncountrysurveys.worldbank.org\r\ncoupang4.avito.ru\r\ncoupon.avito.ru\r\ncoupons.avito.ru\r\ncourier-bsl.magnit.ru\r\ncourier-highload.magnit.ru\r\ncourier-lenvendo.magnit.ru\r\ncourier-qsoft.magnit.ru\r\ncourier-stage.magnit.ru\r\ncourier-stage2.magnit.ru\r\ncourier-test.magnit.ru\r\ncourier-test1.magnit.ru\r\ncourier-test10.magnit.ru\r\ncourier-test11.magnit.ru\r\ncourier-test2.magnit.ru\r\ncourier-test3.magnit.ru\r\ncourier-test4.magnit.ru\r\ncourier-test5.magnit.ru\r\ncourier-test6.magnit.ru\r\ncourier-test7.magnit.ru\r\ncourier-test8.magnit.ru\r\ncourier-test9.magnit.ru\r\ncourier.avito.ru\r\ncourier.magnit.ru\r\ncouriers.magnit.ru\r\ncourrier.avito.ru\r\ncourse-ey.rbc.ru\r\ncourse.avito.ru\r\ncourses.avito.ru\r\ncourses.beeline.ru\r\ncover.avito.ru\r\ncovers.avito.ru\r\ncovid.2gis.ru\r\ncovid.digital.gov.ru\r\ncovid.life.ru\r\ncovid.rbc.ru\r\ncovid19.sakha.gov.ru\r\ncovid19.who.int\r\ncovid19app.who.int\r\ncovid19supply.who.int\r\ncovidresponse.userapi.com\r\ncow.avito.ru\r\ncowboy.avito.ru\r\ncoworking.mos.ru\r\ncowww.kino-teatr.ru\r\ncox.avito.ru\r\ncoyote.avito.ru\r\ncp.avito.ru\r\ncp.l2.mail.ru\r\ncp.lemanapro.ru\r\ncp.mos.ru\r\ncp.ural.mts.ru\r\ncp01.avito.ru\r\ncp01int.avito.ru\r\ncp1.avito.ru\r\ncp2.avito.ru\r\ncp3.avito.ru\r\ncp4.avito.ru\r\ncp5.avito.ru\r\ncpa.avito.ru\r\ncpa.hh.ru\r\ncpa.youdo.com\r\ncpa.zdorovie-shkolnika.spb.aif.ru\r\ncpan-mirror.rbc.ru\r\ncpan.avito.ru\r\ncpanel.afro.who.int\r\ncpanel.avito.ru\r\ncpanel1.avito.ru\r\ncpanel2.avito.ru\r\ncpanel3.avito.ru\r\ncpc.avito.ru\r\ncpcalendars.afro.who.int\r\ncpcalendars.kino-teatr.ru\r\ncpcd-demo.consultant.ru\r\ncpcd.consultant.ru\r\ncpcontacts.afro.who.int\r\ncpcontacts.kino-teatr.ru\r\ncpd.avito.ru\r\ncpdviseynovawww.kino-teatr.ru\r\ncpe.avito.ru\r\ncpl.avito.ru\r\ncploginky.avito.ru\r\ncploginoh.avito.ru\r\ncpm.avito.ru\r\ncpma.psbank.ru\r\ncpma2.psbank.ru\r\ncpmsg.kino-teatr.ru\r\ncpn.avito.ru\r\ncpnew.avito.ru\r\ncpp-jobs.2gis.ru\r\ncpp-nnov.nalog.ru\r\ncpp.avito.ru\r\ncpr.1c.yandex.ru\r\ncps.avito.ru\r\ncpt.avito.ru\r\ncpt.mail.ru\r\ncptest.avito.ru\r\ncpub.messenger.magnit.ru\r\ncpw.avito.ru\r\ncq.avito.ru\r\ncr.avito.ru\r\ncr.minzdrav.gov.ru\r\ncra.avito.ru\r\ncracker.avito.ru\r\ncraft.avito.ru\r\ncrafts.avito.ru\r\ncrafts.style.rbc.ru\r\ncraig.avito.ru\r\ncraiova.avito.ru\r\ncranach.lenta.ru\r\ncrane.avito.ru\r\ncrash.avito.ru\r\ncrater.avito.ru\r\ncrawl.avito.ru\r\ncrawler.avito.ru\r\ncrawler.yandex.ru\r\ncrayon.avito.ru\r\ncrazy.avito.ru\r\ncrazypanda.mail.ru\r\ncrc.avito.ru\r\ncream.avito.ru\r\ncreate.avito.ru\r\ncreateapps.test.euronews.com\r\ncreater.avito.ru\r\ncreation.avito.ru\r\ncreative-origin.asia.stg.media.max.com\r\ncreative-origin.emea.prd.media.max.com\r\ncreative-origin.oceania.dev.media.max.com\r\ncreative.avito.ru\r\ncreative.tele2.ru\r\ncreator.avito.ru\r\ncreator.sber.ru\r\ncreator.sberbank.ru\r\ncredentialscraft-weban.megafon.ru\r\ncredit-registry.nalog.ru\r\ncredit.avito.ru\r\ncredit.magnit.ru\r\ncredit.rbc.ru\r\ncredit.vtb.ru\r\ncreditbank.avito.ru\r\ncreditcard.avito.ru\r\ncreditcard.magnit.ru\r\ncredito.avito.ru\r\ncredits.alfabank.ru\r\ncreditural.credit-registry.nalog.ru\r\ncreenkey.kino-teatr.ru\r\ncrema.avito.ru\r\ncreme.avito.ru\r\ncret.kino-teatr.ru\r\ncrew.avito.ru\r\ncri.avito.ru\r\ncricket.avito.ru\r\ncrime.avito.ru\r\ncrimea.avito.ru\r\ncrimea.dev.kp.ru\r\ncrimea.kp.ru\r\ncrimea.mironline.ru\r\ncrimea.mk.ru\r\ncrimea.ria.ru\r\ncrimson.avito.ru\r\ncrinfo.worldbank.org\r\ncripple.meduza.io\r\ncris.avito.ru\r\ncrisis.mail.ru\r\ncristal.avito.ru\r\ncristi.avito.ru\r\ncristian.avito.ru\r\ncristina.avito.ru\r\ncritical.avito.ru\r\ncrius.leasing.rshb.ru\r\ncrl.avito.ru\r\ncrl.gosuslugi.ru\r\ncrl1.avito.ru\r\ncrl2.avito.ru\r\ncrls.yandex.ru\r\ncrm-call-prod.mkb.ru\r\ncrm-call-test.mkb.ru\r\ncrm-call.mkb.ru\r\ncrm-dev.avito.ru\r\ncrm-st1.blizko.ru\r\ncrm-st1.pulscen.ru\r\ncrm-st2.blizko.ru\r\ncrm-st2.pulscen.ru\r\ncrm-st3.blizko.ru\r\ncrm-st3.pulscen.ru\r\ncrm-st4.blizko.ru\r\ncrm-st4.pulscen.ru\r\ncrm-st5.blizko.ru\r\ncrm-st5.pulscen.ru\r\ncrm-st6.blizko.ru\r\ncrm-st6.pulscen.ru\r\ncrm-st7.blizko.ru\r\ncrm-st7.pulscen.ru\r\ncrm.2gis.ru\r\ncrm.alfabank.ru\r\ncrm.avito.ru\r\ncrm.blizko.ru\r\ncrm.factoring.rshb.ru\r\ncrm.gosuslugi.ru\r\ncrm.hh.ru\r\ncrm.hub.litres.ru\r\ncrm.kino-teatr.ru\r\ncrm.ozon.ru\r\ncrm.pulscen.ru\r\ncrm.rambler.ru\r\ncrm.vtb.ru\r\ncrm.yandex.ru\r\ncrm1.avito.ru\r\ncrm2.avito.ru\r\ncrm3.avito.ru\r\ncrmdev.avito.ru\r\ncrmfront1c.yandex.ru\r\ncrmfront1d.yandex.ru\r\ncrmfront1e.yandex.ru\r\ncrmfront2c.yandex.ru\r\ncrmfront2d.yandex.ru\r\ncrmfront2e.yandex.ru\r\ncrmob.minzdrav.gov.ru\r\ncrmplus.beeline.ru\r\ncrmsnd1.worldbank.org\r\ncrmsnd4.worldbank.org\r\ncrmtd.mts.ru\r\ncrmtest.avito.ru\r\ncro.avito.ru\r\ncroatia.avito.ru\r\ncrollingtext8x8.kino-teatr.ru\r\ncron.avito.ru\r\ncronos.avito.ru\r\ncross.avito.ru\r\ncross.m24.ru\r\ncrossfarmgpprd.worldbank.org\r\ncrossfarmgpqa.worldbank.org\r\ncrossfarmintprd.worldbank.org\r\ncrossfarmintqa.worldbank.org\r\ncrossroads.avito.ru\r\ncrossword.magnit.ru\r\ncrossx.m24.ru\r\ncrow.avito.ru\r\ncrowd.avito.ru\r\ncrowd.translate.yandex.ru\r\ncrowdtest.api.plus.tst.kinopoisk.ru\r\ncrowdtest.direct.yandex.ru\r\ncrowdtest.metrika.yandex.ru\r\ncrowdtest.music.yandex.ru\r\ncrowdtest.payment-widget-smarttv.plus.tst.kinopoisk.ru\r\ncrowdtest.payment-widget.plus.tst.kinopoisk.ru\r\ncrowdtest.telephony.yandex.ru\r\ncrown.avito.ru\r\ncrs.avito.ru\r\ncrs.garant.ru\r\ncrt.avito.ru\r\ncrucible.2gis.ru\r\ncruise.avito.ru\r\ncrunch.avito.ru\r\ncrux.avito.ru\r\ncryo.avito.ru\r\ncrypto.rosatom.ru\r\ncryptobol.beeline.ru\r\ncryptoforum.rbc.ru\r\ncrypton.avito.ru\r\ncryptosrv2.tambov.gov.ru\r\ncryptosrv3.tambov.gov.ru\r\ncrystal.avito.ru\r\ncs-caslave01e.yandex.ru\r\ncs-caslave01f.yandex.ru\r\ncs-caslave02e.yandex.ru\r\ncs-caslave02f.yandex.ru\r\ncs-caslave03e.yandex.ru\r\ncs-caslave03f.yandex.ru\r\ncs-clusterizer01h.yandex.ru\r\ncs-clusterizer04h.yandex.ru\r\ncs-com.yc.mvideo.ru\r\ncs-dex-dev-nsg.yc.mvideo.ru\r\ncs-dex-dev.yc.mvideo.ru\r\ncs-dex-prod-nsg.yc.mvideo.ru\r\ncs-dex-prod.yc.mvideo.ru\r\ncs-dex.yc.mvideo.ru\r\ncs-elliptics01ft.yandex.ru\r\ncs-ellpic05e.yandex.ru\r\ncs-lards-dev-nsg.yc.mvideo.ru\r\ncs-lards-dev.yc.mvideo.ru\r\ncs-lards-prod-nsg.yc.mvideo.ru\r\ncs-lards-prod.yc.mvideo.ru\r\ncs-lnr.yc.mvideo.ru\r\ncs-main.yc.mvideo.ru\r\ncs-minitools01e.yandex.ru\r\ncs-minitools01h.yandex.ru\r\ncs-mongotools01hp.yandex.ru\r\ncs-mongotools01ht.yandex.ru\r\ncs-mongotools02e.yandex.ru\r\ncs-mongotools02f.yandex.ru\r\ncs-mongotools02h.yandex.ru\r\ncs-mqueue.yc.mvideo.ru\r\ncs-mxclassifier01e.yandex.ru\r\ncs-mxclassifier01ft.yandex.ru\r\ncs-mxclassifier01ht.yandex.ru\r\ncs-mxclassifier02ht.yandex.ru\r\ncs-order-execution.yc.mvideo.ru\r\ncs-prf.yc.mvideo.ru\r\ncs-res.yc.mvideo.ru\r\ncs-sandbox-dev-nsg.yc.mvideo.ru\r\ncs-sandbox-dev.yc.mvideo.ru\r\ncs-sandbox-istio-nsg.yc.mvideo.ru\r\ncs-sandbox-istio-old-nsg.yc.mvideo.ru\r\ncs-sandbox-istio-old.yc.mvideo.ru\r\ncs-sandbox-istio-test-nsg.yc.mvideo.ru\r\ncs-sandbox-istio-test.yc.mvideo.ru\r\ncs-sandbox-istio.yc.mvideo.ru\r\ncs-sandbox-istio1-nsg.yc.mvideo.ru\r\ncs-sandbox-istio1.yc.mvideo.ru\r\ncs-sandbox-new.yc.mvideo.ru\r\ncs-sandbox-rotate.yc.mvideo.ru\r\ncs-sandbox-test-nsg.yc.mvideo.ru\r\ncs-sandbox-test.yc.mvideo.ru\r\ncs-sandbox.yc.mvideo.ru\r\ncs-sandbox2-new.yc.mvideo.ru\r\ncs-sandbox2.yc.mvideo.ru\r\ncs-service-execution.yc.mvideo.ru\r\ncs-seshatstor01ft.yandex.ru\r\ncs-sew-uat.yc.mvideo.ru\r\ncs-sew.yc.mvideo.ru\r\ncs-stock-management.yc.mvideo.ru\r\ncs-storagetools01e.yandex.ru\r\ncs-storagetools01hd.yandex.ru\r\ncs-titan.yc.mvideo.ru\r\ncs-toolsback01hp.yandex.ru\r\ncs-toolsfront01hp.yandex.ru\r\ncs-vio-dev-istio-nsg.yc.mvideo.ru\r\ncs-vio-dev-istio.yc.mvideo.ru\r\ncs-vio-dev-nsg.yc.mvideo.ru\r\ncs-vio-dev.yc.mvideo.ru\r\ncs-vio-prod-istio-nsg.yc.mvideo.ru\r\ncs-vio-prod-istio.yc.mvideo.ru\r\ncs-vio-prod-nsg.yc.mvideo.ru\r\ncs-vio-prod.yc.mvideo.ru\r\ncs-vio.yc.mvideo.ru\r\ncs-wikifront01d.yandex.ru\r\ncs-wikifront01dv.yandex.ru\r\ncs-wikifront01e.yandex.ru\r\ncs-wikifront01ev.yandex.ru\r\ncs-wikifront01g.yandex.ru\r\ncs-wikifront01gv.yandex.ru\r\ncs.avito.ru\r\ncs.cache.api.vtb.ru\r\ncs.cache2.api.vtb.ru\r\ncs.ozon.ru\r\ncs01.avito.ru\r\ncs02.avito.ru\r\ncs1-16.userapi.com\r\ncs1-19.userapi.com\r\ncs1-35.userapi.com\r\ncs1.avito.ru\r\ncs10.userapi.com\r\ncs10000.userapi.com\r\ncs10001.userapi.com\r\ncs10003.userapi.com\r\ncs10004.userapi.com\r\ncs10008.userapi.com\r\ncs10009.userapi.com\r\ncs10010.userapi.com\r\ncs10011.userapi.com\r\ncs10012.userapi.com\r\ncs10013.userapi.com\r\ncs10014.userapi.com\r\ncs10015.userapi.com\r\ncs10016.userapi.com\r\ncs10017.userapi.com\r\ncs10019.userapi.com\r\ncs10020.userapi.com\r\ncs10021.userapi.com\r\ncs10023.userapi.com\r\ncs10024.userapi.com\r\ncs10025.userapi.com\r\ncs10026.userapi.com\r\ncs10027.userapi.com\r\ncs10028.userapi.com\r\ncs10029.userapi.com\r\ncs10030.userapi.com\r\ncs10033.userapi.com\r\ncs10035.userapi.com\r\ncs10036.userapi.com\r\ncs10037.userapi.com\r\ncs10039.userapi.com\r\ncs10040.userapi.com\r\ncs10041.userapi.com\r\ncs10045.userapi.com\r\ncs10046.userapi.com\r\ncs10047.userapi.com\r\ncs10048.userapi.com\r\ncs10050.userapi.com\r\ncs10051.userapi.com\r\ncs10055.userapi.com\r\ncs10056.userapi.com\r\ncs10057.userapi.com\r\ncs10058.userapi.com\r\ncs10059.userapi.com\r\ncs10060.userapi.com\r\ncs10061.userapi.com\r\ncs10062.userapi.com\r\ncs10063.userapi.com\r\ncs10064.userapi.com\r\ncs10066.userapi.com\r\ncs10067.userapi.com\r\ncs10069.userapi.com\r\ncs10071.userapi.com\r\ncs10072.userapi.com\r\ncs10073.userapi.com\r\ncs10075.userapi.com\r\ncs10076.userapi.com\r\ncs10078.userapi.com\r\ncs10079.userapi.com\r\ncs10081.userapi.com\r\ncs10082.userapi.com\r\ncs10083.userapi.com\r\ncs10084.userapi.com\r\ncs10085.userapi.com\r\ncs10086.userapi.com\r\ncs10087.userapi.com\r\ncs10089.userapi.com\r\ncs10090.userapi.com\r\ncs10091.userapi.com\r\ncs10092.userapi.com\r\ncs10094.userapi.com\r\ncs10095.userapi.com\r\ncs10096.userapi.com\r\ncs10098.userapi.com\r\ncs10099.userapi.com\r\ncs10100.userapi.com\r\ncs10102.userapi.com\r\ncs10104.userapi.com\r\ncs10105.userapi.com\r\ncs10108.userapi.com\r\ncs10110.userapi.com\r\ncs10112.userapi.com\r\ncs10115.userapi.com\r\ncs10116.userapi.com\r\ncs10118.userapi.com\r\ncs10119.userapi.com\r\ncs10120.userapi.com\r\ncs10122.userapi.com\r\ncs10123.userapi.com\r\ncs10125.userapi.com\r\ncs10126.userapi.com\r\ncs10127.userapi.com\r\ncs10129.userapi.com\r\ncs10130.userapi.com\r\ncs10131.userapi.com\r\ncs10132.userapi.com\r\ncs10133.userapi.com\r\ncs10134.userapi.com\r\ncs10135.userapi.com\r\ncs10136.userapi.com\r\ncs10137.userapi.com\r\ncs10138.userapi.com\r\ncs10139.userapi.com\r\ncs10140.vk.com\r\ncs10141.userapi.com\r\ncs10146.userapi.com\r\ncs10147.userapi.com\r\ncs10148.userapi.com\r\ncs10150.userapi.com\r\ncs10152.userapi.com\r\ncs10153.userapi.com\r\ncs10155.userapi.com\r\ncs10156.userapi.com\r\ncs10157.userapi.com\r\ncs10158.userapi.com\r\ncs10159.userapi.com\r\ncs10161.userapi.com\r\ncs10162.userapi.com\r\ncs10163.userapi.com\r\ncs10165.userapi.com\r\ncs10166.userapi.com\r\ncs10167.userapi.com\r\ncs10168.userapi.com\r\ncs10169.userapi.com\r\ncs10170.userapi.com\r\ncs10171.userapi.com\r\ncs10172.userapi.com\r\ncs10173.userapi.com\r\ncs10174.userapi.com\r\ncs10175.userapi.com\r\ncs10177.userapi.com\r\ncs10178.userapi.com\r\ncs10179.userapi.com\r\ncs10180.userapi.com\r\ncs10181.userapi.com\r\ncs10183.userapi.com\r\ncs10184.userapi.com\r\ncs10185.userapi.com\r\ncs10186.userapi.com\r\ncs10188.userapi.com\r\ncs10189.userapi.com\r\ncs10190.userapi.com\r\ncs10191.userapi.com\r\ncs10193.userapi.com\r\ncs10194.userapi.com\r\ncs10197.userapi.com\r\ncs10199.userapi.com\r\ncs10200.userapi.com\r\ncs10201.userapi.com\r\ncs10203.userapi.com\r\ncs10204.userapi.com\r\ncs10207.userapi.com\r\ncs10208.userapi.com\r\ncs10210.userapi.com\r\ncs10210.vk.com\r\ncs10211.userapi.com\r\ncs10215.userapi.com\r\ncs10217.userapi.com\r\ncs10218.userapi.com\r\ncs10221.userapi.com\r\ncs10222.userapi.com\r\ncs10223.userapi.com\r\ncs10227.userapi.com\r\ncs10228.userapi.com\r\ncs10229.userapi.com\r\ncs10230.userapi.com\r\ncs10232.userapi.com\r\ncs10233.userapi.com\r\ncs10234.userapi.com\r\ncs10237.userapi.com\r\ncs10238.userapi.com\r\ncs10239.userapi.com\r\ncs10240.userapi.com\r\ncs10243.userapi.com\r\ncs10247.userapi.com\r\ncs10249.userapi.com\r\ncs10250.userapi.com\r\ncs10251.userapi.com\r\ncs10252.userapi.com\r\ncs10253.userapi.com\r\ncs10254.userapi.com\r\ncs10255.userapi.com\r\ncs10256.userapi.com\r\ncs10258.userapi.com\r\ncs10259.userapi.com\r\ncs10260.userapi.com\r\ncs10262.userapi.com\r\ncs10263.userapi.com\r\ncs10264.userapi.com\r\ncs10265.userapi.com\r\ncs10266.userapi.com\r\ncs10267.userapi.com\r\ncs10268.userapi.com\r\ncs10269.userapi.com\r\ncs10271.userapi.com\r\ncs10274.userapi.com\r\ncs10275.userapi.com\r\ncs10276.userapi.com\r\ncs10277.userapi.com\r\ncs10278.userapi.com\r\ncs10280.userapi.com\r\ncs10281.userapi.com\r\ncs10284.userapi.com\r\ncs10286.userapi.com\r\ncs10287.userapi.com\r\ncs10292.userapi.com\r\ncs10293.userapi.com\r\ncs10294.userapi.com\r\ncs10295.userapi.com\r\ncs10296.userapi.com\r\ncs10297.userapi.com\r\ncs10300.userapi.com\r\ncs10301.userapi.com\r\ncs10302.userapi.com\r\ncs10303.userapi.com\r\ncs10304.userapi.com\r\ncs10305.userapi.com\r\ncs10306.userapi.com\r\ncs10307.userapi.com\r\ncs10310.vk.com\r\ncs10311.userapi.com\r\ncs10312.userapi.com\r\ncs10315.userapi.com\r\ncs10316.userapi.com\r\ncs10318.userapi.com\r\ncs10319.userapi.com\r\ncs1032.userapi.com\r\ncs10320.userapi.com\r\ncs10322.userapi.com\r\ncs10323.userapi.com\r\ncs10325.userapi.com\r\ncs10326.userapi.com\r\ncs10327.userapi.com\r\ncs10329.userapi.com\r\ncs10331.userapi.com\r\ncs10333.userapi.com\r\ncs10334.userapi.com\r\ncs10335.userapi.com\r\ncs10336.userapi.com\r\ncs10337.userapi.com\r\ncs10338.userapi.com\r\ncs10340.userapi.com\r\ncs10343.userapi.com\r\ncs10344.userapi.com\r\ncs10345.userapi.com\r\ncs10346.userapi.com\r\ncs10347.userapi.com\r\ncs10348.userapi.com\r\ncs10349.userapi.com\r\ncs10350.userapi.com\r\ncs10351.userapi.com\r\ncs10354.userapi.com\r\ncs10358.userapi.com\r\ncs10361.userapi.com\r\ncs10362.userapi.com\r\ncs10363.userapi.com\r\ncs10364.userapi.com\r\ncs10365.userapi.com\r\ncs10367.userapi.com\r\ncs10368.userapi.com\r\ncs10370.userapi.com\r\ncs10372.userapi.com\r\ncs10373.userapi.com\r\ncs10374.userapi.com\r\ncs10377.userapi.com\r\ncs10378.userapi.com\r\ncs10379.userapi.com\r\ncs10380.userapi.com\r\ncs10382.userapi.com\r\ncs10384.userapi.com\r\ncs10385.userapi.com\r\ncs10387.userapi.com\r\ncs10388.userapi.com\r\ncs10389.userapi.com\r\ncs10392.userapi.com\r\ncs10393.userapi.com\r\ncs10394.userapi.com\r\ncs10395.userapi.com\r\ncs10396.userapi.com\r\ncs10397.userapi.com\r\ncs10399.userapi.com\r\ncs10400.vk.com\r\ncs10402.userapi.com\r\ncs10404.userapi.com\r\ncs10408.userapi.com\r\ncs10409.userapi.com\r\ncs10410.userapi.com\r\ncs10410.vk.com\r\ncs10411.userapi.com\r\ncs10412.userapi.com\r\ncs10413.userapi.com\r\ncs10415.userapi.com\r\ncs10416.userapi.com\r\ncs10417.userapi.com\r\ncs10419.userapi.com\r\ncs10421.userapi.com\r\ncs10422.userapi.com\r\ncs10424.userapi.com\r\ncs10425.userapi.com\r\ncs10426.userapi.com\r\ncs10427.userapi.com\r\ncs10429.userapi.com\r\ncs10430.vk.com\r\ncs10431.userapi.com\r\ncs10432.userapi.com\r\ncs10433.userapi.com\r\ncs10434.userapi.com\r\ncs10435.userapi.com\r\ncs10446.userapi.com\r\ncs10456.userapi.com\r\ncs10458.userapi.com\r\ncs10460.userapi.com\r\ncs10461.userapi.com\r\ncs10463.userapi.com\r\ncs10464.userapi.com\r\ncs10465.userapi.com\r\ncs10466.userapi.com\r\ncs10467.userapi.com\r\ncs10469.userapi.com\r\ncs10471.userapi.com\r\ncs10473.userapi.com\r\ncs10474.userapi.com\r\ncs10475.userapi.com\r\ncs10476.userapi.com\r\ncs10477.userapi.com\r\ncs10478.userapi.com\r\ncs10480.userapi.com\r\ncs10482.userapi.com\r\ncs10483.userapi.com\r\ncs10485.userapi.com\r\ncs10487.userapi.com\r\ncs10488.userapi.com\r\ncs10490.userapi.com\r\ncs10491.userapi.com\r\ncs10492.userapi.com\r\ncs10493.userapi.com\r\ncs10494.userapi.com\r\ncs10495.userapi.com\r\ncs10496.userapi.com\r\ncs10499.userapi.com\r\ncs10500.userapi.com\r\ncs10500.vk.com\r\ncs10502.userapi.com\r\ncs10504.userapi.com\r\ncs10505.userapi.com\r\ncs10507.userapi.com\r\ncs10509.userapi.com\r\ncs10510.vk.com\r\ncs10514.userapi.com\r\ncs10515.userapi.com\r\ncs10519.userapi.com\r\ncs10520.userapi.com\r\ncs10521.userapi.com\r\ncs10522.userapi.com\r\ncs10523.userapi.com\r\ncs10524.userapi.com\r\ncs10525.userapi.com\r\ncs10526.userapi.com\r\ncs10527.userapi.com\r\ncs10529.userapi.com\r\ncs1053.userapi.com\r\ncs10530.userapi.com\r\ncs10531.userapi.com\r\ncs10532.userapi.com\r\ncs10533.userapi.com\r\ncs10534.userapi.com\r\ncs10535.userapi.com\r\ncs10536.userapi.com\r\ncs10537.userapi.com\r\ncs10539.userapi.com\r\ncs10540.userapi.com\r\ncs10541.userapi.com\r\ncs10543.userapi.com\r\ncs10544.userapi.com\r\ncs10545.userapi.com\r\ncs10546.userapi.com\r\ncs10547.userapi.com\r\ncs10548.userapi.com\r\ncs10549.userapi.com\r\ncs10550.userapi.com\r\ncs10551.userapi.com\r\ncs10552.userapi.com\r\ncs10553.userapi.com\r\ncs10554.userapi.com\r\ncs10555.userapi.com\r\ncs10556.userapi.com\r\ncs10557.userapi.com\r\ncs10560.userapi.com\r\ncs10561.userapi.com\r\ncs10563.userapi.com\r\ncs10564.userapi.com\r\ncs10565.userapi.com\r\ncs10567.userapi.com\r\ncs10568.userapi.com\r\ncs10569.userapi.com\r\ncs10571.userapi.com\r\ncs10572.userapi.com\r\ncs10573.userapi.com\r\ncs10575.userapi.com\r\ncs10576.userapi.com\r\ncs10577.userapi.com\r\ncs10578.userapi.com\r\ncs10579.userapi.com\r\ncs10580.userapi.com\r\ncs10581.userapi.com\r\ncs10582.userapi.com\r\ncs10585.userapi.com\r\ncs10586.userapi.com\r\ncs10587.userapi.com\r\ncs10588.userapi.com\r\ncs10589.userapi.com\r\ncs1059.userapi.com\r\ncs10590.userapi.com\r\ncs10591.userapi.com\r\ncs10592.userapi.com\r\ncs10593.userapi.com\r\ncs10596.userapi.com\r\ncs10597.userapi.com\r\ncs10599.userapi.com\r\ncs106.userapi.com\r\ncs10600.userapi.com\r\ncs10601.userapi.com\r\ncs10602.userapi.com\r\ncs10603.userapi.com\r\ncs10604.userapi.com\r\ncs10605.userapi.com\r\ncs10606.userapi.com\r\ncs10607.userapi.com\r\ncs10610.userapi.com\r\ncs10611.userapi.com\r\ncs10617.userapi.com\r\ncs10619.userapi.com\r\ncs10620.userapi.com\r\ncs10620.vk.com\r\ncs10622.userapi.com\r\ncs10624.userapi.com\r\ncs10626.userapi.com\r\ncs10627.userapi.com\r\ncs10628.userapi.com\r\ncs1063.userapi.com\r\ncs10630.userapi.com\r\ncs10631.userapi.com\r\ncs10632.userapi.com\r\ncs10635.userapi.com\r\ncs10636.userapi.com\r\ncs10637.userapi.com\r\ncs10638.userapi.com\r\ncs10639.userapi.com\r\ncs10640.userapi.com\r\ncs10641.userapi.com\r\ncs10644.userapi.com\r\ncs10645.userapi.com\r\ncs10700.vk.com\r\ncs10710.vk.com\r\ncs10740.vk.com\r\ncs10781.userapi.com\r\ncs10800.vk.com\r\ncs10900.vk.com\r\ncs11000.vk.com\r\ncs11035.userapi.com\r\ncs11040.vk.com\r\ncs11110.vk.com\r\ncs11153.userapi.com\r\ncs11200.vk.com\r\ncs11240.vk.com\r\ncs11340.userapi.com\r\ncs11400.vk.com\r\ncs11500.vk.com\r\ncs11510.vk.com\r\ncs120.vk.com\r\ncs130.vk.com\r\ncs140.vk.com\r\ncs16.avito.ru\r\ncs2.avito.ru\r\ncs200.vk.com\r\ncs210.vk.com\r\ncs220.vk.com\r\ncs230.vk.com\r\ncs240.vk.com\r\ncs25.userapi.com\r\ncs3.1tv.ru\r\ncs3.avito.ru\r\ncs300.vk.com\r\ncs301110.vk.com\r\ncs301200.vk.com\r\ncs301209.userapi.com\r\ncs301210.vk.com\r\ncs301213.userapi.com\r\ncs301400.vk.com\r\ncs301410.vk.com\r\ncs301610.vk.com\r\ncs301700.vk.com\r\ncs301810.vk.com\r\ncs302500.vk.com\r\ncs302507.userapi.com\r\ncs302510.vk.com\r\ncs302514.userapi.com\r\ncs302710.vk.com\r\ncs303110.vk.com\r\ncs303200.userapi.com\r\ncs303200.vk.com\r\ncs303310.vk.com\r\ncs303400.vk.com\r\ncs303510.vk.com\r\ncs303610.vk.com\r\ncs303900.vk.com\r\ncs304100.vk.com\r\ncs304110.vk.com\r\ncs304200.vk.com\r\ncs304300.vk.com\r\ncs304410.vk.com\r\ncs304600.vk.com\r\ncs304609.userapi.com\r\ncs304800.vk.com\r\ncs304810.vk.com\r\ncs304900.vk.com\r\ncs304910.vk.com\r\ncs305110.vk.com\r\ncs305113.userapi.com\r\ncs305210.vk.com\r\ncs305300.vk.com\r\ncs305510.vk.com\r\ncs305700.vk.com\r\ncs305710.vk.com\r\ncs305900.vk.com\r\ncs305910.vk.com\r\ncs306813.userapi.com\r\ncs308129.userapi.com\r\ncs309331.userapi.com\r\ncs310.vk.com\r\ncs316926.userapi.com\r\ncs317017.userapi.com\r\ncs317121.userapi.com\r\ncs317531.userapi.com\r\ncs319416.userapi.com\r\ncs319717.userapi.com\r\ncs320.vk.com\r\ncs323520.userapi.com\r\ncs330.vk.com\r\ncs340.vk.com\r\ncs3560e.m10.rambler.ru\r\ncs4.avito.ru\r\ncs400.vk.com\r\ncs402318.userapi.com\r\ncs402331.userapi.com\r\ncs403319.userapi.com\r\ncs405417.userapi.com\r\ncs405424.userapi.com\r\ncs405516.userapi.com\r\ncs406229.userapi.com\r\ncs406620.userapi.com\r\ncs407322.userapi.com\r\ncs407724.userapi.com\r\ncs407825.userapi.com\r\ncs407924.userapi.com\r\ncs410523.userapi.com\r\ncs410624.userapi.com\r\ncs411918.userapi.com\r\ncs4141.userapi.com\r\ncs416529.userapi.com\r\ncs418329.userapi.com\r\ncs419028.userapi.com\r\ncs419927.userapi.com\r\ncs421319.userapi.com\r\ncs4320.vk.com\r\ncs4330.vk.com\r\ncs4420.vk.com\r\ncs4440.vk.com\r\ncs4500.vk.com\r\ncs4700.vk.com\r\ncs4900m.m10.rambler.ru\r\ncs4930.vk.com\r\ncs5.avito.ru\r\ncs5010.vk.com\r\ncs508200.vk.com\r\ncs508300.vk.com\r\ncs508400.vk.com\r\ncs511300.userapi.com\r\ncs5130.vk.com\r\ncs5141.userapi.com\r\ncs5144.userapi.com\r\ncs5200.vk.com\r\ncs523410.userapi.com\r\ncs527510.vk.com\r\ncs529400.vk.com\r\ncs5510.vk.com\r\ncs5538.userapi.com\r\ncs5600.vk.com\r\ncs5700.vk.com\r\ncs5740.vk.com\r\ncs5800.vk.com\r\ncs5810.vk.com\r\ncs5830.vk.com\r\ncs5900.vk.com\r\ncs5910.vk.com\r\ncs5917.userapi.com\r\ncs5942.userapi.com\r\ncs6010.vk.com\r\ncs6043.userapi.com\r\ncs605220.vk.com\r\ncs605230.vk.com\r\ncs605320.vk.com\r\ncs605330.vk.com\r\ncs605420.vk.com\r\ncs605430.vk.com\r\ncs605520.vk.com\r\ncs605530.vk.com\r\ncs605620.vk.com\r\ncs605630.vk.com\r\ncs605720.vk.com\r\ncs605730.vk.com\r\ncs605820.vk.com\r\ncs605830.vk.com\r\ncs605920.vk.com\r\ncs605930.vk.com\r\ncs606020.vk.com\r\ncs606030.vk.com\r\ncs606120.vk.com\r\ncs606130.vk.com\r\ncs606220.vk.com\r\ncs606230.vk.com\r\ncs606320.vk.com\r\ncs606330.vk.com\r\ncs606420.vk.com\r\ncs606430.vk.com\r\ncs606520.vk.com\r\ncs606530.vk.com\r\ncs606620.vk.com\r\ncs606630.vk.com\r\ncs606720.vk.com\r\ncs606730.vk.com\r\ncs606820.vk.com\r\ncs606830.vk.com\r\ncs606920.vk.com\r\ncs606930.vk.com\r\ncs609400-10.vk.com\r\ncs609400-20.vk.com\r\ncs609400-30.vk.com\r\ncs609400-40.vk.com\r\ncs609400-50.vk.com\r\ncs609400.vk.com\r\ncs611100-10.vk.com\r\ncs611100-20.vk.com\r\ncs611100-30.vk.com\r\ncs611100-50.vk.com\r\ncs6112.userapi.com\r\ncs6120.userapi.com\r\ncs6124.userapi.com\r\ncs616431-10.vk.com\r\ncs616431-20.vk.com\r\ncs616431-30.vk.com\r\ncs616431-40.vk.com\r\ncs616431-50.vk.com\r\ncs6263.userapi.com\r\ncs626622.userapi.com\r\ncs6301.userapi.com\r\ncs632405.userapi.com\r\ncs632600.userapi.com\r\ncs632605.userapi.com\r\ncs635106.userapi.com\r\ncs635600.userapi.com\r\ncs640006.userapi.com\r\ncs640106.userapi.com\r\ncs640200.userapi.com\r\ncs640303.userapi.com\r\ncs640304.userapi.com\r\ncs640306.userapi.com\r\ncs640401.userapi.com\r\ncs640405.userapi.com\r\ncs640500.userapi.com\r\ncs640502.userapi.com\r\ncs7051.userapi.com\r\ncs7062.userapi.com\r\ncs715.userapi.com\r\ncs764.userapi.com\r\ncs767670000000.vk.com\r\ncs7777.vk.com\r\ncs783.userapi.com\r\ncs808511-10.vk.com\r\ncs808511-30.vk.com\r\ncs808511-40.vk.com\r\ncs808511-50.vk.com\r\ncs810.vk.com\r\ncs813110-10.vk.com\r\ncs813110-20.vk.com\r\ncs813110-30.vk.com\r\ncs813110-40.vk.com\r\ncs813110-50.vk.com\r\ncs829417-10.vk.com\r\ncs829417-20.vk.com\r\ncs829417-30.vk.com\r\ncs829417-40.vk.com\r\ncs829417-50.vk.com\r\ncs836725.userapi.com\r\ncs837135.userapi.com\r\ncs9-10v4.userapi.com\r\ncs9-11v4.userapi.com\r\ncs9-13v4.userapi.com\r\ncs9-14v4.userapi.com\r\ncs9-15v4.userapi.com\r\ncs9-17v4.userapi.com\r\ncs9-18v4.userapi.com\r\ncs9-19v4.userapi.com\r\ncs9-1v4.userapi.com\r\ncs9-2v4.userapi.com\r\ncs9-3v4.userapi.com\r\ncs9-4v4.userapi.com\r\ncs9-5v4.userapi.com\r\ncs9-6v4.userapi.com\r\ncs9-7v4.userapi.com\r\ncs9-8v4.userapi.com\r\ncs9-9v4.userapi.com\r\ncs9610.vk.com\r\ncs9710.vk.com\r\ncs9730.vk.com\r\ncs9810.vk.com\r\ncs9880.userapi.com\r\ncs9991.userapi.com\r\ncsa.avito.ru\r\ncsa.social.tomsk.gov.ru\r\ncsai.worldbank.org\r\ncsbilldb01e-vip.yandex.ru\r\ncsbilldb01e.yandex.ru\r\ncsc-ift.csctest.sberbank.ru\r\ncsc.avito.ru\r\ncsc.sberbank.ru\r\ncsctest.sberbank.ru\r\ncsd.avito.ru\r\ncse.avito.ru\r\ncsearch.tst.yandex.ru\r\ncsf.avito.ru\r\ncsfront02h.yandex.ru\r\ncsfront03h.yandex.ru\r\ncsfront04h.yandex.ru\r\ncsfront05h.yandex.ru\r\ncsfront06h.yandex.ru\r\ncsg.avito.ru\r\ncshm-sbsc01.v10.csngok.ok.avito.ru\r\ncsi.avito.ru\r\ncsj.avito.ru\r\ncsk.mchs.gov.ru\r\ncsk.mchs.ru\r\ncsk.organizations.mchs.gov.ru\r\ncslab.sberbank.ru\r\ncsm-nat-10.avito.ru\r\ncsm-nat-10.vk.com\r\ncsm.avito.ru\r\ncsng.ok.avito.ru\r\ncsngok.ok.avito.ru\r\ncso.avito.ru\r\ncso.worldbank.org\r\ncsodev.worldbank.org\r\ncsoor.mchs.gov.ru\r\ncsoor.mchs.ru\r\ncsoor.organizations.mchs.gov.ru\r\ncsoqa.worldbank.org\r\ncsostg.worldbank.org\r\ncsp.avito.ru\r\ncspreport.mail.ru\r\ncsr.avito.ru\r\ncsr.bizconf.rbc.ru\r\ncsr11.net.avito.ru\r\ncsr12.net.avito.ru\r\ncsr2017.vtb.ru\r\ncsr2018.rostelecom.ru\r\ncsr2019.rostelecom.ru\r\ncsr2019.vtb.ru\r\ncsr2020.vtb.ru\r\ncsr2023.vtb.ru\r\ncsr21.arch.avito.ru\r\ncsr21.net.avito.ru\r\ncsr21.net.zdorovie-shkolnika.spb.aif.ru\r\ncsr31.eng.avito.ru\r\ncsr31.net.avito.ru\r\ncsr31.net.zdorovie-shkolnika.spb.aif.ru\r\ncsr41.net.avito.ru\r\ncsradar.sberbank.ru\r\ncss.avito.ru\r\ncss.rzd.ru\r\ncss.yandex.ru\r\ncss1.avito.ru\r\ncss2.avito.ru\r\ncsstream.worldbank.org\r\ncsstreamdev.worldbank.org\r\ncsstreamqa.worldbank.org\r\ncsstreamstg.worldbank.org\r\ncstest.avito.ru\r\ncstrike.avito.ru\r\ncsweb.avito.ru\r\nct.avito.ru\r\nct.zdorovie-shkolnika.spb.aif.ru\r\nct12.dev.zoon.ru\r\nct16.dev.zoon.ru\r\nct26.dev.zoon.ru\r\nct27.dev.zoon.ru\r\nct32.dev.zoon.ru\r\nct39.dev.zoon.ru\r\nct48.dev.zoon.ru\r\nct51.dev.zoon.ru\r\nct56.dev.zoon.ru\r\nct63.dev.zoon.ru\r\nct84.dev.zoon.ru\r\nct86.dev.zoon.ru\r\nct88.dev.zoon.ru\r\nct95.dev.zoon.ru\r\nct97.dev.zoon.ru\r\nctc.avito.ru\r\nctl.avito.ru\r\ncto.mail.ru\r\nctoemc.duma.gov.ru\r\nctp.avito.ru\r\nctrl.avito.ru\r\ncts-rooms.x5.ru\r\ncts.open.ru\r\ncts.russianpost.ru\r\ncts01.rosatom.ru\r\ncts02.rosatom.ru\r\ncts03.rosatom.ru\r\ncts05.rosatom.ru\r\ncts08.rosatom.ru\r\ncts09.rosatom.ru\r\ncts1.messenger.magnit.ru\r\ncts10.rosatom.ru\r\nctx-mam.open.ru\r\nctx-mdm.open.ru\r\nctx.avito.ru\r\nctx.mts.ru\r\nctxvdi.alfabank.ru\r\ncu.avito.ru\r\ncub.avito.ru\r\ncuba.avito.ru\r\ncube.avito.ru\r\ncuckoo.avito.ru\r\ncucumber.avito.ru\r\ncuda.avito.ru\r\ncuda.yandex.ru\r\ncuda2.avito.ru\r\ncul.avito.ru\r\ncultura.avito.ru\r\nculture.avito.ru\r\nculture.gosuslugi.ru\r\nculture.iiot.gov.ru\r\nculture.in.rosbank.ru\r\nculture.mchs.gov.ru\r\ncumbersome.rambler.ru\r\ncumulus.avito.ru\r\ncup.avito.ru\r\ncup2006.lenta.ru\r\ncup2010.lenta.ru\r\ncupcake.avito.ru\r\ncupid.avito.ru\r\ncups.mail.ru\r\ncure.avito.ru\r\ncure.kino-teatr.ru\r\ncuriosity.avito.ru\r\ncursos.avito.ru\r\ncurtis.avito.ru\r\ncustody.mkb.ru\r\ncustom.avito.ru\r\ncustomer-domain-istio.yc.mvideo.ru\r\ncustomer-domain-ns-istio.yc.mvideo.ru\r\ncustomer-domain.yc.mvideo.ru\r\ncustomer-subscriptions-gateway.wildberries.ru\r\ncustomer.avito.ru\r\ncustomers.avito.ru\r\ncustomersupport.avito.ru\r\ncustoms.consultant.ru\r\ncustoms.gov.ru\r\ncustoms.pochta.ru\r\ncute.avito.ru\r\ncuttlefish.vedomosti.ru\r\ncv.avito.ru\r\ncv.litres.ru\r\ncv0.litres.ru\r\ncv1.litres.ru\r\ncv2.litres.ru\r\ncv3.litres.ru\r\ncv4.litres.ru\r\ncv5.litres.ru\r\ncv6.litres.ru\r\ncv7.litres.ru\r\ncv8.litres.ru\r\ncv9.litres.ru\r\ncvb.alfabank.ru\r\ncvc.alfabank.ru\r\ncvc.mts.ru\r\ncvc.vk.com\r\ncvdb03e.yandex.ru\r\ncveapi.avito.ru\r\ncvhefd.ixbt.com\r\ncvs.avito.ru\r\ncvstat03e.yandex.ru\r\ncw.avito.ru\r\ncw01host1.avito.ru\r\ncw01host10.avito.ru\r\ncw01host10.vk.com\r\ncw01host2.avito.ru\r\ncw01host3.avito.ru\r\ncw01host4.avito.ru\r\ncw01host5.avito.ru\r\ncw01host6.avito.ru\r\ncw01host7.avito.ru\r\ncw01host8.avito.ru\r\ncw01host9.avito.ru\r\ncw03host1.avito.ru\r\ncw03host2.avito.ru\r\ncw07web01.avito.ru\r\ncwa.avito.ru\r\ncwbx.open.ru\r\ncwc.avito.ru\r\ncwcx.avito.ru\r\ncweb.avito.ru\r\ncwp.rzd.ru\r\ncws.avito.ru\r\ncx.avito.ru\r\ncxa-spb.rbc.ru\r\ncxhackathon.tele2.ru\r\ncxzy.avito.ru\r\ncy.89.yandex.ru\r\ncy.avito.ru\r\ncyan.avito.ru\r\ncyber.avito.ru\r\ncyber.d-aalekseev.sports.ru\r\ncyber.d-aalyushin.sports.ru\r\ncyber.d-aanisimov.sports.ru\r\ncyber.d-abocharov.sports.ru\r\ncyber.d-afedorov.sports.ru\r\ncyber.d-akentyeva.sports.ru\r\ncyber.d-akorotin.sports.ru\r\ncyber.d-akostelnyuk.sports.ru\r\ncyber.d-anisimov.sports.ru\r\ncyber.d-anscii.sports.ru\r\ncyber.d-anufant.sports.ru\r\ncyber.d-aoshchepkov.sports.ru\r\ncyber.d-apanisko.sports.ru\r\ncyber.d-apopov.sports.ru\r\ncyber.d-ashepard.sports.ru\r\ncyber.d-atrubchik.sports.ru\r\ncyber.d-avalov.sports.ru\r\ncyber.d-avolegov.sports.ru\r\ncyber.d-avseyanko.sports.ru\r\ncyber.d-betting-insider.sports.ru\r\ncyber.d-bezgubov.sports.ru\r\ncyber.d-buyanov.sports.ru\r\ncyber.d-chaplinskiy.sports.ru\r\ncyber.d-cyber-stage.sports.ru\r\ncyber.d-cyber-test.sports.ru\r\ncyber.d-damakin.sports.ru\r\ncyber.d-denisov.sports.ru\r\ncyber.d-dkustov.sports.ru\r\ncyber.d-dmedvedev.sports.ru\r\ncyber.d-doba.sports.ru\r\ncyber.d-dolzhenko.sports.ru\r\ncyber.d-eemelyanov.sports.ru\r\ncyber.d-eeremina.sports.ru\r\ncyber.d-emadyarov.sports.ru\r\ncyber.d-frolov.sports.ru\r\ncyber.d-gnekrasov.sports.ru\r\ncyber.d-ikudrya.sports.ru\r\ncyber.d-khorolets-new.sports.ru\r\ncyber.d-khorolets.sports.ru\r\ncyber.d-kostelnyuk.sports.ru\r\ncyber.d-kozlov.sports.ru\r\ncyber.d-livantsov.sports.ru\r\ncyber.d-mlevashov.sports.ru\r\ncyber.d-momotyuk.sports.ru\r\ncyber.d-ogrigoreva.sports.ru\r\ncyber.d-peshiy.sports.ru\r\ncyber.d-plubyanskiy.sports.ru\r\ncyber.d-ppigalev.sports.ru\r\ncyber.d-rabaydulin.sports.ru\r\ncyber.d-savederkin.sports.ru\r\ncyber.d-savin.sports.ru\r\ncyber.d-seo.sports.ru\r\ncyber.d-sryaposov.sports.ru\r\ncyber.d-stage-new.sports.ru\r\ncyber.d-stage.sports.ru\r\ncyber.d-test-02.sports.ru\r\ncyber.d-test-04.sports.ru\r\ncyber.d-test.sports.ru\r\ncyber.d-tokareva.sports.ru\r\ncyber.d-vetoshkin.sports.ru\r\ncyber.d-vshibanov.sports.ru\r\ncyber.d-vstarov.sports.ru\r\ncyber.d-vstarynin.sports.ru\r\ncyber.gogolev.sports.ru\r\ncyber.i-avseyanko.sports.ru\r\ncyber.k8s-qa-nginx-01.sports.ru.sports.ru\r\ncyber.qa.sports.ru\r\ncyber.sports.ru\r\ncyber.stage.sports.ru\r\ncyberhero.t2.ru\r\ncyberhero.tele2.ru\r\ncyberplat2.rbc.ru\r\ncyberpunk.content.tinkoff.ru\r\ncybersecurity.tass.ru\r\ncyberspace.avito.ru\r\ncyberzone.avito.ru\r\ncyc.avito.ru\r\ncyclone.avito.ru\r\ncyclops.avito.ru\r\ncygnus.avito.ru\r\ncykmvrecycle12.kino-teatr.ru\r\ncynthia.avito.ru\r\ncypher.yandex.ru\r\ncypress.avito.ru\r\ncyprus.avito.ru\r\ncyprus.dev.kp.ru\r\ncyprus.kp.ru\r\ncyrus.avito.ru\r\ncz.avito.ru\r\nczat.avito.ru\r\nczech.babyblog.ru\r\nczech.dev.kp.ru\r\nczentrobrazovaniya16tula-r71.gosweb.gosuslugi.ru\r\nczentrobrazovaniya18tula-r71.gosweb.gosuslugi.ru\r\nczentrobrazovaniya23novomoskovsk-r71.gosweb.gosuslugi.ru\r\nczentrobrazovaniya39tula-r71.gosweb.gosuslugi.ru\r\nczentrobrazovaniya47petelino-r71.gosweb.gosuslugi.ru\r\nczentrobrazovaniya55xrushhevo-r71.gosweb.gosuslugi.ru\r\nczogpa.perekrestok.ru\r\nd-aalekseev.sports.ru\r\nd-aalyushin.sports.ru\r\nd-aanisimov.sports.ru\r\nd-abocharov.sports.ru\r\nd-afedorov.sports.ru\r\nd-akentyeva.sports.ru\r\nd-akorotin.sports.ru\r\nd-akostelnyuk.sports.ru\r\nd-anisimov.sports.ru\r\nd-anscii.sports.ru\r\nd-anufant.sports.ru\r\nd-aoshchepkov.sports.ru\r\nd-apanisko.sports.ru\r\nd-apopov.sports.ru\r\nd-ashepard.sports.ru\r\nd-assets.2gis.ru\r\nd-atrubchik.sports.ru\r\nd-avalov.sports.ru\r\nd-avolegov.sports.ru\r\nd-avseyanko.sports.ru\r\nd-betting-insider.sports.ru\r\nd-bezgubov.sports.ru\r\nd-buyanov.sports.ru\r\nd-chaplinskiy.sports.ru\r\nd-cyber-stage.sports.ru\r\nd-cyber-test.sports.ru\r\nd-damakin.sports.ru\r\nd-denisov.sports.ru\r\nd-dkustov.sports.ru\r\nd-dmedvedev.sports.ru\r\nd-doba.sports.ru\r\nd-dolzhenko.sports.ru\r\nd-eemelyanov.sports.ru\r\nd-eeremina.sports.ru\r\nd-emadyarov.sports.ru\r\nd-fedorov.sports.ru\r\nd-frolov.sports.ru\r\nd-gnekrasov.sports.ru\r\nd-ikudrya.sports.ru\r\nd-ipsec01.infra.rbc.ru\r\nd-ipsec02.infra.rbc.ru\r\nd-khorolets-new.sports.ru\r\nd-khorolets.sports.ru\r\nd-kostelnyuk.sports.ru\r\nd-kozlov.sports.ru\r\nd-livantsov.sports.ru\r\nd-mlevashov.sports.ru\r\nd-momotyuk.sports.ru\r\nd-ogrigoreva.sports.ru\r\nd-peshiy.sports.ru\r\nd-plubyanskiy.sports.ru\r\nd-ppigalev.sports.ru\r\nd-rabaydulin.sports.ru\r\nd-savederkin.sports.ru\r\nd-savin.sports.ru\r\nd-seo.sports.ru\r\nd-sryaposov.sports.ru\r\nd-stage-new.sports.ru\r\nd-stage.sports.ru\r\nd-test-02.sports.ru\r\nd-test-04.sports.ru\r\nd-test.sports.ru\r\nd-tokareva.sports.ru\r\nd-vetoshkin.sports.ru\r\nd-vshibanov.sports.ru\r\nd-vstarov.sports.ru\r\nd-vstarynin.sports.ru\r\nd-zuber.sports.ru\r\nd.327.01.04.yandex.ru\r\nd.avito.ru\r\nd.beeline.ru\r\nd.championat.com\r\nd.eldorado.ru\r\nd.garant.ru\r\nd.i38.avito.ru\r\nd.i39.avito.ru\r\nd.i40.avito.ru\r\nd.i40.vk.com\r\nd.i41.avito.ru\r\nd.i42.avito.ru\r\nd.i43.avito.ru\r\nd.i44.avito.ru\r\nd.i45.avito.ru\r\nd.i46.avito.ru\r\nd.i47.avito.ru\r\nd.i48.avito.ru\r\nd.i49.avito.ru\r\nd.i50.avito.ru\r\nd.i51.avito.ru\r\nd.i52.avito.ru\r\nd.i53.avito.ru\r\nd.i54.avito.ru\r\nd.i55.avito.ru\r\nd.i56.avito.ru\r\nd.i57.avito.ru\r\nd.i58.avito.ru\r\nd.i59.avito.ru\r\nd.i60.avito.ru\r\nd.i61.avito.ru\r\nd.i62.avito.ru\r\nd.i63.avito.ru\r\nd.i64.avito.ru\r\nd.i65.avito.ru\r\nd.i66.avito.ru\r\nd.i67.avito.ru\r\nd.i68.avito.ru\r\nd.i69.avito.ru\r\nd.i70.avito.ru\r\nd.i71.avito.ru\r\nd.i72.avito.ru\r\nd.i73.avito.ru\r\nd.i74.avito.ru\r\nd.i75.avito.ru\r\nd.i76.avito.ru\r\nd.i77.avito.ru\r\nd.i78.avito.ru\r\nd.i79.avito.ru\r\nd.i80.avito.ru\r\nd.i81.avito.ru\r\nd.i82.avito.ru\r\nd.i83.avito.ru\r\nd.i84.avito.ru\r\nd.i85.avito.ru\r\nd.i86.avito.ru\r\nd.i87.avito.ru\r\nd.i88.avito.ru\r\nd.i89.avito.ru\r\nd.i90.avito.ru\r\nd.i91.avito.ru\r\nd.i92.avito.ru\r\nd.i93.avito.ru\r\nd.i94.avito.ru\r\nd.i95.avito.ru\r\nd.i96.avito.ru\r\nd.i97.avito.ru\r\nd.i98.avito.ru\r\nd.i99.avito.ru\r\nd.minprom.gov.ru\r\nd.ns.e.avito.ru\r\nd.ns.email.avito.ru\r\nd.premier.one\r\nd.rgis.rk.gov.ru\r\nd.rgistest.rk.gov.ru\r\nd.rutube.ru\r\nd.vtb.ru\r\nd0.avito.ru\r\nd01awmobapp.main.russianpost.ru\r\nd01rkweblb.main.russianpost.ru\r\nd09fed8f-c9d1-4117-b3e6-bb11fe0cb9f6-umedia.ops.beeline.ru\r\nd1-mail-02.smev.tambov.gov.ru\r\nd1.avito.ru\r\nd10.avito.ru\r\nd10.vk.com\r\nd101.avito.ru\r\nd11.avito.ru\r\nd12.avito.ru\r\nd129b11a291b83d73fb37f21b9844901.rt.avito.ru\r\nd13.avito.ru\r\nd14.avito.ru\r\nd15.avito.ru\r\nd15de2e3-6702-4e07-a323-5a4ec423701b-umedia.ops.beeline.ru\r\nd16.avito.ru\r\nd2-mail-01.smev.tambov.gov.ru\r\nd2-mail-02.smev.tambov.gov.ru\r\nd2.avito.ru\r\nd21.avito.ru\r\nd22.avito.ru\r\nd22c6cdb4188b228174a-hbd.ops.beeline.ru\r\nd27.avito.ru\r\nd28.avito.ru\r\nd2df43bb-9198-4595-a9b6-f3cf57728b87.kino-teatr.ru\r\nd3.avito.ru\r\nd31.avito.ru\r\nd32.avito.ru\r\nd34.avito.ru\r\nd36.avito.ru\r\nd37.avito.ru\r\nd3a15f90-1a8d-520f-9a2c-bf4bf91f46b4-bw.ops.beeline.ru\r\nd4.avito.ru\r\nd5.avito.ru\r\nd6.avito.ru\r\nd6a5c954.services.gismeteo.ru\r\nd6qzbwte-rlp.ops.beeline.ru\r\nd7.avito.ru\r\nd71.avito.ru\r\nd8.avito.ru\r\nd9.avito.ru\r\nd9.cd.bb.a1.top.mail.ru\r\nd9.ntv.ru\r\nda.avito.ru\r\nda.rbc.ru\r\nda.streams.mail.ru\r\nda.who.int\r\nda1.avito.ru\r\nda17.avito.ru\r\nda2.avito.ru\r\ndaa.avito.ru\r\ndac.avito.ru\r\ndachatbot.vtb.ru\r\ndada.avito.ru\r\ndaedalus.avito.ru\r\ndaemon.avito.ru\r\ndaesin.avito.ru\r\ndaffy.avito.ru\r\ndag.avito.ru\r\ndag.kp.ru\r\ndag01.corp.wildberries.ru\r\ndagestan.dev.home.megafon.ru\r\ndagestan.mts.ru\r\ndaily.afisha.ru\r\ndaily.avito.ru\r\ndaily.rbc.ru\r\ndaisuke.avito.ru\r\ndaisy.avito.ru\r\ndaitspc-prod.cloud.vk.com\r\ndaitspc-stage.cloud.vk.com\r\ndakar.avito.ru\r\ndakota.avito.ru\r\ndalet.rbc.ru\r\ndali.avito.ru\r\ndali.iz.ru\r\ndallas.avito.ru\r\ndallas.yandex.ru\r\ndalnerechensk.hh.ru\r\ndalnerechenskij-r25.gosweb.gosuslugi.ru\r\ndam.avito.ru\r\ndam.vtb.ru\r\ndamdam.avito.ru\r\ndame.avito.ru\r\ndamian.avito.ru\r\ndan.avito.ru\r\ndana.avito.ru\r\ndance.avito.ru\r\ndangan.avito.ru\r\ndanger.avito.ru\r\ndani.avito.ru\r\ndanieapp.avito.ru\r\ndaniel.avito.ru\r\ndanilovsky.mos.ru\r\ndanny.avito.ru\r\ndante.avito.ru\r\ndanube.avito.ru\r\ndany.avito.ru\r\ndaphne.avito.ru\r\ndar.avito.ru\r\ndaria.yandex.ru\r\ndarim.m24.ru\r\ndarius.avito.ru\r\ndark.avito.ru\r\ndarkfire.avito.ru\r\ndarkknight.avito.ru\r\ndarklord.avito.ru\r\ndarkman.avito.ru\r\ndarknark.lenta.ru\r\ndarkness.avito.ru\r\ndarknet.lenta.ru\r\ndarknight.avito.ru\r\ndarkorbit.avito.ru\r\ndarkside.avito.ru\r\ndarkstar.avito.ru\r\ndarling.avito.ru\r\ndart.avito.ru\r\ndarwin.avito.ru\r\ndas.avito.ru\r\ndash.avito.ru\r\ndashboard-apicdn.rosatom.ru\r\ndashboard.avito.ru\r\ndashboard.k8s.rg.ru\r\ndashboard.kino-teatr.ru\r\ndashboard.transport.mos.ru\r\ndashboardtele2.rbc.ru\r\ndat154.avito.ru\r\ndata-import.dns-shop.ru\r\ndata-journalism.profi.tass.ru\r\ndata-science.profi.tass.ru\r\ndata-stream-bus-oni.rbc.ru\r\ndata-stream-bus.rbc.ru\r\ndata.2gis.ru\r\ndata.amigo.mail.ru\r\ndata.avito.ru\r\ndata.gov.ru\r\ndata.megafon.ru\r\ndata.mos.ru\r\ndata.mtp.mos.ru\r\ndata.nalog.ru\r\ndata.news.yandex.ru\r\ndata.pulse.mail.ru\r\ndata.rnis.mos.ru\r\ndata.sberbank.ru\r\ndata.tinkoff.ru\r\ndata.who.int\r\ndata.worldbank.org\r\ndata.yandex.ru\r\ndata1.avito.ru\r\ndata2.avito.ru\r\ndata3.avito.ru\r\ndatabank.credit-registry.nalog.ru\r\ndatabase.avito.ru\r\ndatabase1.avito.ru\r\ndatabase2.avito.ru\r\ndatabases.avito.ru\r\ndatabox.worldbank.org\r\ndatacenter.avito.ru\r\ndatacollect.iarc.who.int\r\ndatacontentstagingproxy.who.int\r\ndatafeedback.api.2gis.ru\r\ndataff.mail.ru\r\ndatafrontdoorproxy.who.int\r\ndatahelpdesk.worldbank.org\r\ndatainsight.rtb.beeline.ru\r\ndatalab.magnit.ru\r\ndatalens.net.ixbt.com\r\ndatamarketing.youdo.com\r\ndataorigin.avito.ru\r\ndataplan.avito.ru\r\ndataproductionproxy.who.int\r\ndataroom.open.ru\r\ndataservices.avito.ru\r\ndataservices.worldbank.org\r\ndatasets.mchs.ru\r\ndatasetup.garant.ru\r\ndatasphere.yandex.ru\r\ndatastagingproxy.who.int\r\ndatasync.avito.ru\r\ndataviz.iarc.who.int\r\ndataviz.worldbank.org\r\ndatavizdev.worldbank.org\r\ndatavizext.worldbank.org\r\ndatavizint.worldbank.org\r\ndatavizqa.worldbank.org\r\ndate.2gis.ru\r\ndate.avito.ru\r\ndatenschutz.avito.ru\r\ndateyourself.2gis.ru\r\ndating.avito.ru\r\ndating.ok.ru\r\ndating.rambler.ru\r\ndating.tele2.ru\r\ndatsun.drom.ru\r\ndaugia.avito.ru\r\ndaum.avito.ru\r\ndauphin.avito.ru\r\ndav.avito.ru\r\ndav75.users.avito.ru\r\ndave.avito.ru\r\ndave1.avito.ru\r\ndavid.avito.ru\r\ndavinci.avito.ru\r\ndavis.avito.ru\r\ndavramenko.ing.k8s.dev.ivi.ru\r\ndawn.avito.ru\r\ndaxdc1qa.worldbank.org\r\ndaxdc2qa.worldbank.org\r\ndaxqa.worldbank.org\r\nday.avito.ru\r\ndaybyday.avito.ru\r\ndaysgone.project.tinkoff.ru\r\ndb-lb.mts.sovcombank.ru\r\ndb-lb.rt.sovcombank.ru\r\ndb-srv01f.maps.yandex.ru\r\ndb-srv02e.maps.yandex.ru\r\ndb-srv02f.maps.yandex.ru\r\ndb-srv04f.maps.yandex.ru\r\ndb.aif-city.spb.aif.ru\r\ndb.avito.ru\r\ndb.dostoevskiy-spb.aif.ru\r\ndb.gkh.hab.aif.ru\r\ndb.minzdrav.gov.ru\r\ndb.vtb.ru\r\ndb0.avito.ru\r\ndb01.avito.ru\r\ndb02.avito.ru\r\ndb1.avito.ru\r\ndb1.minzdrav.gov.ru\r\ndb2.avito.ru\r\ndb3.avito.ru\r\ndb4.avito.ru\r\ndb5.avito.ru\r\ndb5extms.avito.ru\r\ndb6.avito.ru\r\ndb8.avito.ru\r\ndb9.avito.ru\r\ndba.avito.ru\r\ndbadapter.azuremsk.ec.mts.ru\r\ndbadmin.avito.ru\r\ndbase.avito.ru\r\ndbd.avito.ru\r\ndbkurort.minzdrav.gov.ru\r\ndbo-auth-preprod.mkb.ru\r\ndbo-help.openbank.ru\r\ndbo.open.ru\r\ndbo.openbank.ru\r\ndbo.rshb.ru\r\ndbo.sovcombank.ru\r\ndbo.vtb.ru\r\ndbocb-test.psbank.ru\r\ndbohmbo.open.ru\r\ndbotest.vtb.ru\r\ndbpassword.worldbank.org\r\ndbpassworddev.worldbank.org\r\ndbpasswordqa.worldbank.org\r\ndbpassworduat.worldbank.org\r\ndbragin.ing.k8s.dev.ivi.ru\r\ndbs.avito.ru\r\ndbs1.avito.ru\r\ndbserver.avito.ru\r\ndbsoft01.db.rbc.ru\r\ndbtest.mts.ru\r\ndbue-assortment-dev1.yc.mvideo.ru\r\ndbuploader.beeline.ru\r\ndc.avito.ru\r\ndc01.office.tutu.ru\r\ndc02.office.tutu.ru\r\ndc03.office.tutu.ru\r\ndc04.office.tutu.ru\r\ndc05.office.tutu.ru\r\ndc06.office.tutu.ru\r\ndc07.office.tutu.ru\r\ndc08.office.tutu.ru\r\ndc1.avito.ru\r\ndc2.avito.ru\r\ndc2.mail.ru\r\ndc3.avito.ru\r\ndc4.avito.ru\r\ndcc.avito.ru\r\ndcc1.rambler.ru\r\ndcc2.mail.ru\r\ndcc2.rambler.ru\r\ndce.avito.ru\r\ndcm.avito.ru\r\ndcms.avito.ru\r\ndcn-dav.film.ru\r\ndcn.film.ru\r\ndcode.avito.ru\r\ndcp.avito.ru\r\ndcs.avito.ru\r\ndct.avito.ru\r\ndcts03.rosatom.ru\r\ndd.avito.ru\r\nddc.avito.ru\r\nddd.avito.ru\r\ndddd.avito.ru\r\nddh.avito.ru\r\nddh.worldbank.org\r\nddhqa.worldbank.org\r\nddhstg.worldbank.org\r\nddhuat.worldbank.org\r\nddi.avito.ru\r\nddivergence.mail.ru\r\nddl.avito.ru\r\nddns.avito.ru\r\nddns1.avito.ru\r\nddo229.neoplus.adsl.0.yandex.ru\r\nddos.megafon.ru\r\nddos.protect.megafon.ru\r\nddosguard.otzovik.com\r\nddosprotect.mts.ru\r\nddp-stg.sberbank.ru\r\nddp-t.sberbank.ru\r\nddp-web.online.sberbank.ru\r\nddp.avito.ru\r\nddp.sberbank.ru\r\ndds.avito.ru\r\nde.ac.gov.ru\r\nde.avito.ru\r\nde.babyblog.ru\r\nde.developer.sber.ru\r\nde.euronews.com\r\nde.litres.ru\r\nde.mos.ru\r\nde1.avito.ru\r\ndeai.avito.ru\r\ndeal.avito.ru\r\ndealer.auto.yandex.ru\r\ndealer.avito.ru\r\ndealer.beeline.ru\r\ndealer.megafon.ru\r\ndealer.mts.ru\r\ndealer.nnov.mts.ru\r\ndealer.sib.mts.ru\r\ndealer.tele2.ru\r\ndealer.ts.mts.ru\r\ndealers.avito.ru\r\ndealers.szf.megafon.ru\r\ndealing.rshb.ru\r\ndealing2.rshb.ru\r\ndealing2.uat.rshb.ru\r\ndeals.avito.ru\r\ndean.avito.ru\r\ndear.habr.com\r\ndeath.avito.ru\r\ndeb.avito.ru\r\ndebian.avito.ru\r\ndeborah.avito.ru\r\ndebt.open.ru\r\ndebug.avito.ru\r\ndecameron.content.tinkoff.ru\r\ndeckhouse.k8s.rg.ru\r\ndeclaration1868.tass.ru\r\ndeco.avito.ru\r\ndede.avito.ru\r\ndedi.avito.ru\r\ndedicado.avito.ru\r\ndedicated.avito.ru\r\ndeedee.avito.ru\r\ndeep.avito.ru\r\ndeepak.avito.ru\r\ndeepblue.avito.ru\r\ndeer.avito.ru\r\ndefacto22.9111.ru\r\ndefault.avito.ru\r\ndefault.ing.k8s.dev.ivi.ru\r\ndefault.ing.k8s.staging.ivi.ru\r\ndefault.private-vpce.euc1.prd.api.max.com\r\ndefault.private-vpce.euc1.stg.api.max.com\r\ndefault.private-vpce.eun1.prd.api.max.com\r\ndefault.private-vpce.euw1.prd.api.max.com\r\ndefault.private-vpce.euw1.stg.api.max.com\r\ndefault.private-vpce.use1.dev.api.max.com\r\ndefault.private-vpce.use1.int.api.max.com\r\ndefault.private-vpce.use1.prd.api.max.com\r\ndefault.private-vpce.use1.stg.api.max.com\r\ndefault.private-vpce.use2.prd.api.max.com\r\ndefault.private-vpce.use2.stg.api.max.com\r\ndefault.private-vpce.usw2.int.api.max.com\r\ndefault.private-vpce.usw2.prd.api.max.com\r\ndefault.private-vpce.usw2.stg.api.max.com\r\ndefault.searo.who.int\r\ndefaults.kp.ru\r\ndefender.avito.ru\r\ndefiant.avito.ru\r\ndeg.gosuslugi.ru\r\ndei.avito.ru\r\ndeimos.avito.ru\r\ndel.avito.ru\r\ndelhi.avito.ru\r\ndeli.avito.ru\r\ndelicious.avito.ru\r\ndeliver.avito.ru\r\ndelivery-c2c-api-orders-staging.k.avito.ru\r\ndelivery-ci360-dev.mvideo.ru\r\ndelivery-ci360-test.eldorado.ru\r\ndelivery-ci360-test.mvideo.ru\r\ndelivery-ci360.eldorado.ru\r\ndelivery-ci360.mvideo.ru\r\ndelivery-club.vedomosti.ru\r\ndelivery-service.uat.ecom.md.magnit.ru\r\ndelivery.a.avito.ru\r\ndelivery.a.vk.com\r\ndelivery.api.2gis.ru\r\ndelivery.avito.ru\r\ndelivery.b.avito.ru\r\ndelivery.http.yandex.ru\r\ndelivery.manager.lemanapro.ru\r\ndelivery.platform.avito.ru\r\ndelivery.swid.avito.ru\r\ndelivery.yandex.ru\r\ndeliveryclub.youdo.com\r\ndell.avito.ru\r\ndelo.2gis.ru\r\ndelo.mos.ru\r\ndelo.vtb.ru\r\ndelover.1.yandex.ru\r\ndelovtb.rbc.ru\r\ndeloweb.sakha.gov.ru\r\ndelphi.avito.ru\r\ndelta.avito.ru\r\ndelta.mail.ru\r\ndelta2.mail.ru\r\ndelta7.mail.ru\r\ndem.avito.ru\r\ndemeter.avito.ru\r\ndemo-actuator-aws-dev.test.cs-aws.mvideo.ru\r\ndemo-actuator-dev.test.cs-aws.mvideo.ru\r\ndemo-atlas.mchs.ru\r\ndemo-aws.tp.mvideo.ru\r\ndemo-cb.open.ru\r\ndemo-supplierportal.x5.ru\r\ndemo.api.2gis.ru\r\ndemo.api.litres.ru\r\ndemo.arenda.beeline.ru\r\ndemo.avito.ru\r\ndemo.avntg-02.cloud.mts.ru\r\ndemo.b24.sev.gov.ru\r\ndemo.bd.megafon.ru\r\ndemo.consultant.ru\r\ndemo.db.vtb.ru\r\ndemo.factoring.rshb.ru\r\ndemo.feedback.rosatom.ru\r\ndemo.garant.ru\r\ndemo.gkh.hab.aif.ru\r\ndemo.gosuslugi.ru\r\ndemo.if.db-test.vtb.ru\r\ndemo.kassa.beeline.ru\r\ndemo.kino-teatr.ru\r\ndemo.megafon.ru\r\ndemo.mmobile.magnit.ru\r\ndemo.ofd.beeline.ru\r\ndemo.ozon.ru\r\ndemo.rs.premier.one\r\ndemo.rs2.premier.one\r\ndemo.s3.cloud.mts.ru\r\ndemo.sbercontact.sberbank.ru\r\ndemo.sbm.sberbank.ru\r\ndemo.srm-deals.x5.ru\r\ndemo.test.euronews.com\r\ndemo.tls.api.litres.ru\r\ndemo.tracker.yandex.ru\r\ndemo.v3.disk.mts.ru\r\ndemo01.avito.ru\r\ndemo02.avito.ru\r\ndemo1-esia.gosuslugi.ru\r\ndemo1.avito.ru\r\ndemo10.avito.ru\r\ndemo10.vk.com\r\ndemo11.avito.ru\r\ndemo12.avito.ru\r\ndemo13.avito.ru\r\ndemo14.avito.ru\r\ndemo15.avito.ru\r\ndemo16.avito.ru\r\ndemo17.avito.ru\r\ndemo18.avito.ru\r\ndemo19.avito.ru\r\ndemo2.avito.ru\r\ndemo20.avito.ru\r\ndemo20.vk.com\r\ndemo21.avito.ru\r\ndemo3.avito.ru\r\ndemo4.avito.ru\r\ndemo5.avito.ru\r\ndemo6.avito.ru\r\ndemo7.avito.ru\r\ndemo8.avito.ru\r\ndemo9.avito.ru\r\ndemocorporate.psbank.ru\r\ndemocracy.avito.ru\r\ndemofm.beeline.ru\r\ndemomoney.yandex.ru\r\ndemomoney2.yandex.ru\r\ndemon.avito.ru\r\ndemos.avito.ru\r\ndemoshop.avito.ru\r\ndemosite.avito.ru\r\ndemoumnoejkh.megafon.ru\r\ndemwunz.users.avito.ru\r\nden-mera.tass.ru\r\nden.avito.ru\r\ndendy.um.rambler.ru\r\ndeneb.avito.ru\r\ndenebola.avito.ru\r\ndeneme.avito.ru\r\ndengi.kommersant.ru\r\ndengi.mts.ru\r\ndengi.tele2.ru\r\ndenis.avito.ru\r\ndenisenko.shared.dev.lab.x5.ru\r\ndenisloginov.85.yandex.ru\r\ndennis.avito.ru\r\ndenta33.174.yandex.ru\r\ndental.avito.ru\r\ndentist.avito.ru\r\ndentistry.avito.ru\r\ndenver.avito.ru\r\ndep.avito.ru\r\ndepad.sakha.gov.ru\r\ndeples.sakha.gov.ru\r\ndeples.tomsk.gov.ru\r\ndeploy.avito.ru\r\ndeploy.kino-teatr.ru\r\ndeploy.zdorovie-shkolnika.spb.aif.ru\r\ndepo.avito.ru\r\ndepohota.sakha.gov.ru\r\ndepohran.sakha.gov.ru\r\ndeportes.avito.ru\r\ndepot.avito.ru\r\ndepot1.avito.ru\r\ndepot1.mail.ru\r\ndepot2.mail.ru\r\ndepression.avito.ru\r\ndeprgi.sakha.gov.ru\r\ndepsmi.sakha.gov.ru\r\ndept.avito.ru\r\ndept.open.ru\r\ndeputatsky.sakha.gov.ru\r\ndepvet.sakha.gov.ru\r\nderby.avito.ru\r\nderecho.avito.ru\r\nderek.avito.ru\r\nderp-221-1.azuremsk.cloudapp.ec.mts.ru\r\ndes.avito.ru\r\ndesa.avito.ru\r\ndesaclub.ruwww.babyblog.ru\r\ndesarrollo.avito.ru\r\ndescargas.avito.ru\r\ndesert.avito.ru\r\ndesi.avito.ru\r\ndesign.alfabank.ru\r\ndesign.avito.ru\r\ndesign.gazeta.ru\r\ndesign.gov.ru\r\ndesign.magnit.ru\r\ndesign.mts.ru\r\ndesign.tele2.ru\r\ndesign.web.drive.megafon.ru\r\ndesign.web.uspeh.megafon.ru\r\ndesign2.avito.ru\r\ndesign3.avito.ru\r\ndesigner.avito.ru\r\ndesignfd.avito.ru\r\ndesigns.avito.ru\r\ndesignsystem.beeline.ru\r\ndesire.avito.ru\r\ndesk.avito.ru\r\ndesktop.avito.ru\r\ndesktop.userapi.com\r\ndesktop.yandex.ru\r\ndesktopdeploymentserver.worldbank.org\r\ndesp.rosatom.ru\r\ndesperado.avito.ru\r\ndestek.avito.ru\r\ndestiny.avito.ru\r\ndet.avito.ru\r\ndeti.avito.ru\r\ndeti.gov.ru\r\ndeti.iz.ru\r\ndeti.mail.ru\r\ndeti.t2.ru\r\ndeti.tass.ru\r\ndeti.tele2.ru\r\ndetk.2018.yandex.ru\r\ndetox.avito.ru\r\ndetroit.avito.ru\r\ndetsad.gosuslugi.ru\r\ndeuce.avito.ru\r\ndev-admin.avito.ru\r\ndev-ai.tutu.ru\r\ndev-api.avito.ru\r\ndev-awaps-ms2.yandex.ru\r\ndev-basket.dns-shop.ru\r\ndev-caches.tutu.ru\r\ndev-chat-sharing.vtb.ru\r\ndev-chat-turn.vtb.ru\r\ndev-chat.vtb.ru\r\ndev-cms.experience.who.int\r\ndev-cms.partnership.who.int\r\ndev-cms.platform.who.int\r\ndev-cms.who.int\r\ndev-dns-club.dns-shop.ru\r\ndev-dns.dns-shop.ru\r\ndev-evoting.test.gosuslugi.ru\r\ndev-ikul.rshb.ru\r\ndev-kafka-dv1.dns-shop.ru\r\ndev-openapi.psbank.ru\r\ndev-opros-sberbank-ru.sberbank.ru\r\ndev-rp.rshb.ru\r\ndev-trainee.life.ru\r\ndev-tst-m.mdm.beeline.ru\r\ndev-tst-s.mdm.beeline.ru\r\ndev-www.avito.ru\r\ndev-www.webinar.2gis.ru\r\ndev.1tv.ru\r\ndev.2022.1tv.ru\r\ndev.2gis.ru\r\ndev.4-7.yandex.ru\r\ndev.admin.avito.ru\r\ndev.afro.who.int\r\ndev.aif-city.spb.aif.ru\r\ndev.aisubp.mos.ru\r\ndev.alfabank.ru\r\ndev.api-marketolog.mts.ru\r\ndev.api.max.com\r\ndev.api.mk.ru\r\ndev.app4t2.tele2.ru\r\ndev.arh.mk.ru\r\ndev.ast.mk.ru\r\ndev.avito.ru\r\ndev.baikal.mk.ru\r\ndev.bdl.rutube.ru\r\ndev.belgorod.mk.ru\r\ndev.blag.mk.ru\r\ndev.brl.mk.ru\r\ndev.busines-lady-spb.aif.ru\r\ndev.championat.com\r\ndev.cheb.mk.ru\r\ndev.chel.mk.ru\r\ndev.chr.mk.ru\r\ndev.city.mts.ru\r\ndev.cloud.mts.ru\r\ndev.companies.rbc.ru\r\ndev.core.md.magnit.ru\r\ndev.crimea.mk.ru\r\ndev.crmsnd1.worldbank.org\r\ndev.crmsnd4.worldbank.org\r\ndev.cs7777.vk.com\r\ndev.datacollect.iarc.who.int\r\ndev.dating.tele2.ru\r\ndev.dostoevskiy-spb.aif.ru\r\ndev.drive2.ru\r\ndev.eburg.mk.ru\r\ndev.euronews.com\r\ndev.ext.max.com\r\ndev.film.ru\r\ndev.firenotification.mchs.ru\r\ndev.gkh.hab.aif.ru\r\ndev.goszakupki.psbank.ru\r\ndev.hab.mk.ru\r\ndev.iac.mchs.ru\r\ndev.ivanovo.mk.ru\r\ndev.ivi.ru\r\ndev.izhevsk.mk.ru\r\ndev.job.2gis.ru\r\ndev.k.avito.ru\r\ndev.k8.garant.ru\r\ndev.karel.mk.ru\r\ndev.kavkaz.mk.ru\r\ndev.kazan.mk.ru\r\ndev.kbr.mk.ru\r\ndev.kemerovo.mk.ru\r\ndev.kino-teatr.ru\r\ndev.kirov.mk.ru\r\ndev.kostroma.mk.ru\r\ndev.kp.ru\r\ndev.kras.mk.ru\r\ndev.kuban.mk.ru\r\ndev.kuzbass.mk.ru\r\ndev.lab.x5.ru\r\ndev.lastmile.yc.mvideo.ru\r\ndev.longread.altai.aif.ru\r\ndev.m.mts.ru\r\ndev.m24.ru\r\ndev.magadan.mk.ru\r\ndev.market.ag.mos.ru\r\ndev.marketing.mts.ru\r\ndev.marketolog.mts.ru\r\ndev.max.com\r\ndev.max.ru\r\ndev.med.mts.ru\r\ndev.meduza.io\r\ndev.mk.ru\r\ndev.mkala.mk.ru\r\ndev.mobile.heroism.yandex.ru\r\ndev.mrl.mk.ru\r\ndev.murmansk.mk.ru\r\ndev.news.ozon.ru\r\ndev.nn.mk.ru\r\ndev.novos.mk.ru\r\ndev.ntv.ru\r\ndev.omsk.mk.ru\r\ndev.opaas.who.int\r\ndev.orel.mk.ru\r\ndev.oren.mk.ru\r\ndev.pay.life.ru\r\ndev.perm.mk.ru\r\ndev.platform.md.magnit.ru\r\ndev.promouters.ag.mos.ru\r\ndev.pvg.mk.ru\r\ndev.rests.afisha.ru\r\ndev.rosbank.ru\r\ndev.rostov.mk.ru\r\ndev.rzn.mk.ru\r\ndev.samara.mk.ru\r\ndev.saratov.mk.ru\r\ndev.sberdisk.sberbank.ru\r\ndev.serp.mk.ru\r\ndev.shop.avito.ru\r\ndev.smm.tass.ru\r\ndev.smolensk.mk.ru\r\ndev.sochi.mk.ru\r\ndev.sovcombank.ru\r\ndev.spb.mk.ru\r\ndev.stark.mts.ru\r\ndev.subscriber.max.com\r\ndev.svodka1.tass.ru\r\ndev.tambov.mk.ru\r\ndev.tau.vk.com\r\ndev.thecity.m24.ru\r\ndev.tomsk.mk.ru\r\ndev.tula.mk.ru\r\ndev.tumen.mk.ru\r\ndev.tv.mk.ru\r\ndev.tver.mk.ru\r\ndev.tvh.mts.ru\r\ndev.ufa.mk.ru\r\ndev.ugra.mk.ru\r\ndev.ul.mk.ru\r\ndev.ulan.mk.ru\r\ndev.vedomosti.ru\r\ndev.videoplatform.rambler.ru\r\ndev.vlad.mk.ru\r\ndev.vladimir.mk.ru\r\ndev.volg.mk.ru\r\ndev.vologda.mk.ru\r\ndev.vrn.mk.ru\r\ndev.wbgcrm.worldbank.org\r\ndev.wbgcrm2.worldbank.org\r\ndev.wbgcrm2dev.worldbank.org\r\ndev.wbgcrm2qa.worldbank.org\r\ndev.wbgcrm2stg.worldbank.org\r\ndev.wbgcrm2trn.worldbank.org\r\ndev.wbgcrm2tst.worldbank.org\r\ndev.wbgcrmfqa.worldbank.org\r\ndev.www.max.com\r\ndev.www.mk.ru\r\ndev.ya.magnit.ru\r\ndev.yakutia.mk.ru\r\ndev.yandex.ru\r\ndev.yar.mk.ru\r\ndev.yaroslavl.mk.ru\r\ndev.zen-test.yandex.ru\r\ndev.zoon.ru\r\ndev0.avito.ru\r\ndev01.avito.ru\r\ndev02.avito.ru\r\ndev02.instamedia.rambler.ru\r\ndev1.avito.ru\r\ndev1.kassa.rambler.ru\r\ndev1.lastmile.yc.mvideo.ru\r\ndev1.top100.rambler.ru\r\ndev10.avito.ru\r\ndev10.kassa.rambler.ru\r\ndev10.vk.com\r\ndev11.kassa.rambler.ru\r\ndev12.kassa.rambler.ru\r\ndev12.zoon.ru\r\ndev13.kassa.rambler.ru\r\ndev14.kassa.rambler.ru\r\ndev15.kassa.rambler.ru\r\ndev2.avito.ru\r\ndev2.kassa.rambler.ru\r\ndev2.m24.ru\r\ndev2.top100.rambler.ru\r\ndev2.zoon.ru\r\ndev3.avito.ru\r\ndev3.kassa.rambler.ru\r\ndev3.top100.rambler.ru\r\ndev3.zoon.ru\r\ndev4.avito.ru\r\ndev4.kassa.rambler.ru\r\ndev4.top100.rambler.ru\r\ndev5.avito.ru\r\ndev5.kassa.rambler.ru\r\ndev5.top100.rambler.ru\r\ndev6.avito.ru\r\ndev6.kassa.rambler.ru\r\ndev6.top100.rambler.ru\r\ndev7.avito.ru\r\ndev7.kassa.rambler.ru\r\ndev8.kassa.rambler.ru\r\ndev9.kassa.rambler.ru\r\ndeva.avito.ru\r\ndevadmin.avito.ru\r\ndevapi.avito.ru\r\ndevat.82.mchs.ru\r\ndevat.mchs.ru\r\ndevblog.avito.ru\r\ndevchat.vtb.ru\r\ndevcms.avito.ru\r\ndevcube.yandex.ru\r\ndevday.2gis.ru\r\ndevdb.avito.ru\r\ndeve.avito.ru\r\ndevel.avito.ru\r\ndevel.gis.rosenergo.gov.ru\r\ndevel.tutu.ru\r\ndevel.zdorovie-shkolnika.spb.aif.ru\r\ndevel2.avito.ru\r\ndevelop.avito.ru\r\ndevelop.console.dev.cloud.mts.ru\r\ndevelop.platform.dev.cloud.mts.ru\r\ndevelop.rests.afisha.ru\r\ndeveloper-pre.mkb.ru\r\ndeveloper-test.mkb.ru\r\ndeveloper.api.alphabank.ru\r\ndeveloper.avito.ru\r\ndeveloper.kino-teatr.ru\r\ndeveloper.mts.ru\r\ndeveloper.rosbank.ru\r\ndeveloper.sber.ru\r\ndeveloper.sberbank.ru\r\ndeveloper.store.yandex.ru\r\ndeveloper.tech.yandex.ru\r\ndeveloper.vtb.ru\r\ndeveloper.yandex.ru\r\ndevelopers.alfabank.ru\r\ndevelopers.avito.ru\r\ndevelopers.kino-teatr.ru\r\ndevelopers.lemanapro.ru\r\ndevelopers.mts.ru\r\ndevelopers.sber.ru\r\ndevelopers.sberbank.ru\r\ndevelopers.vtb.ru\r\ndevelopment.avito.ru\r\ndevforum.avito.ru\r\ndevice.id.sber.ru\r\ndevice.oauth.sber.ru\r\ndevice.oauthsigma.sber.ru\r\ndevices.online.sberbank.ru\r\ndevices.sberbank.ru\r\ndevicestest.online.sberbank.ru\r\ndevicestest.sberbank.ru\r\ndevicestestift.online.sberbank.ru\r\ndevil.avito.ru\r\ndevils.avito.ru\r\ndevlink.alfabank.ru\r\ndevmail.avito.ru\r\ndevon.avito.ru\r\ndevops-319.azuremsk.cloudapp.ec.mts.ru\r\ndevops.dc.cloud.mts.ru\r\ndevops.max.com\r\ndevopscdn.worldbank.org\r\ndevpi.test.ivi.ru\r\ndevppb1-00.yandex.ru\r\ndevproxy.who.int\r\ndevsecure.avito.ru\r\ndevserver.avito.ru\r\ndevsite.avito.ru\r\ndevsolutions.fas.gov.ru\r\ndevssl.mvideo.ru\r\ndevtest.avito.ru\r\ndevtest.mk.ru\r\ndevul-c2b-sbp.openbank.ru\r\ndevwww.avito.ru\r\ndewey.avito.ru\r\ndex.avito.ru\r\ndex.k8s.rg.ru\r\ndexter.avito.ru\r\ndf.avito.ru\r\ndf.mos.ru\r\ndf1.mail.ru\r\ndf10.mail.ru\r\ndf11.mail.ru\r\ndf12.mail.ru\r\ndf13.mail.ru\r\ndf14.mail.ru\r\ndf15.mail.ru\r\ndf16.mail.ru\r\ndf17.mail.ru\r\ndf18.mail.ru\r\ndf2.mail.ru\r\ndf3.mail.ru\r\ndf4.mail.ru\r\ndf5.mail.ru\r\ndf7.mail.ru\r\ndf8.mail.ru\r\ndf9.mail.ru\r\ndfa.alfabank.ru\r\ndfa.sber.ru\r\ndfas.avito.ru\r\ndfmit.sberbank.ru\r\ndfp.avito.ru\r\ndfs.ivi.ru\r\ndfw-nbl.latam.dev.media.max.com\r\ndfw-nbl.latam.int.media.max.com\r\ndfw-nbl.latam.prd.media.max.com\r\ndfw-nbl.latam.stg.media.max.com\r\ndg.700.yandex.ru\r\ndg.avito.ru\r\ndg.rgis.rk.gov.ru\r\ndg.rgistest.rk.gov.ru\r\ndgc.worldbank.org\r\ndgcdev.worldbank.org\r\ndgcqa.worldbank.org\r\ndgcs.worldbank.org\r\ndgcstg.worldbank.org\r\ndgctst.worldbank.org\r\ndget.kino-teatr.ru\r\ndgonchar.ing.k8s.dev.ivi.ru\r\ndgorokhova.ing.k8s.dev.ivi.ru\r\ndgp122.mos.ru\r\ndgp129.mos.ru\r\ndgp48.mos.ru\r\ndgp52.mos.ru\r\ndgp69.mos.ru\r\ndh.avito.ru\r\ndha.who.int\r\ndharma.avito.ru\r\ndhcp-144-249-iva.maps.yandex.ru\r\ndhcp-144-250-iva.maps.yandex.ru\r\ndhcp-144-251-iva.maps.yandex.ru\r\ndhcp-144-252-iva.maps.yandex.ru\r\ndhcp-144-253-iva.maps.yandex.ru\r\ndhcp-231-249-myt.maps.yandex.ru\r\ndhcp-231-250-myt.maps.yandex.ru\r\ndhcp-231-251-myt.maps.yandex.ru\r\ndhcp-231-252-myt.maps.yandex.ru\r\ndhcp-231-253-myt.maps.yandex.ru\r\ndhcp.avito.ru\r\ndhcp.pilsnet.avito.ru\r\ndhcp.zmml.avito.ru\r\ndhcp01.infra.rbc.ru\r\ndhcp01e.maps.yandex.ru\r\ndhcp01h.maps.yandex.ru\r\ndhcp02f.maps.yandex.ru\r\ndhcp1.avito.ru\r\ndhcp2.avito.ru\r\ndhi.who.int\r\ndhis.searo.who.int\r\ndhis.zw.afro.who.int\r\ndhistvd.afro.who.int\r\ndhl.avito.ru\r\ndhs.avito.ru\r\ndi-dark.msg.tass.ru\r\ndi-dark.teams.infra.rbc.ru\r\ndi.avito.ru\r\ndi.msg.tass.ru\r\ndi.myteam.tass.ru\r\ndi.teams.infra.rbc.ru\r\ndia.avito.ru\r\ndiabet-mobile.mts.ru\r\ndiablo.avito.ru\r\ndiabolo.avito.ru\r\ndiag.beeline.ru\r\ndial.avito.ru\r\ndialer.avito.ru\r\ndialin.alfabank.ru\r\ndialin.avito.ru\r\ndialin.external.t2.ru\r\ndialin.magnit.ru\r\ndialin.msk.vtb.ru\r\ndialin.mts.ru\r\ndialin.mvideo.ru\r\ndialin.ntv.ru\r\ndialin.open.ru\r\ndialin.psbank.ru\r\ndialin.rosbank.ru\r\ndialin.russianpost.ru\r\ndialin.sakha.gov.ru\r\ndialin.sberbank.ru\r\ndialin.skype.ec.mts.ru\r\ndialin.t2.ru\r\ndialin.x5.ru\r\ndialog-api.pv.mts.ru\r\ndialog-eed.pv.mts.ru\r\ndialog-eem.pv.mts.ru\r\ndialog-m.tele2.ru\r\ndialog-messenger-ift.online.sberbank.ru\r\ndialog-messenger-psi.online.sberbank.ru\r\ndialog-messenger.online.sberbank.ru\r\ndialog-site.sberbank.ru\r\ndialog.avito.ru\r\ndialog.od-dev.sberbank.ru\r\ndialog.od-ift.sberbank.ru\r\ndialog.od-nt.sberbank.ru\r\ndialog.od-psi.sberbank.ru\r\ndialog.pv.mts.ru\r\ndialog.sberbank.ru\r\ndialog.tass.ru\r\ndialogi.rbc.ru\r\ndialogmsk.2018.yandex.ru\r\ndialogs.yandex.ru\r\ndialogue.beeline.ru\r\ndialup.avito.ru\r\ndialup.rambler.ru\r\ndiamant.avito.ru\r\ndiamante.avito.ru\r\ndiamond.avito.ru\r\ndiana.avito.ru\r\ndiana.mail.ru\r\ndiane.avito.ru\r\ndiary.avito.ru\r\ndiary.mkb.ru\r\ndiaspora.avito.ru\r\ndib.open.ru\r\ndic.avito.ru\r\ndic.yandex.ru\r\ndice.avito.ru\r\ndickson.avito.ru\r\ndict.avito.ru\r\ndict.yandex.ru\r\ndictant.yandex.ru\r\ndictionary.avito.ru\r\ndictionary.yandex.ru\r\ndicts.sps.rosatom.ru\r\ndicula.rbc.ru\r\ndiddy.avito.ru\r\ndidi.avito.ru\r\ndiego.avito.ru\r\ndiehard.yandex.ru\r\ndiemthi.avito.ru\r\ndiendan.avito.ru\r\ndiesel.avito.ru\r\ndiet.avito.ru\r\ndieta.avito.ru\r\ndieta.t2.ru\r\ndieta.tele2.ru\r\ndiffusion.avito.ru\r\ndig.avito.ru\r\ndigdoc.psbank.ru\r\ndigest.megafon.ru\r\ndigg.avito.ru\r\ndigi.avito.ru\r\ndigilib.avito.ru\r\ndigisys.avito.ru\r\ndigit-test-01.interfax.ru\r\ndigit.avito.ru\r\ndigital-gifts.tele2.ru\r\ndigital-guides.tele2.ru\r\ndigital-marketplace.megafon.ru\r\ndigital-rub-test.t-bank.ru\r\ndigital-ruble-game.vtb.ru\r\ndigital-showcase.tele2.ru\r\ndigital.alfabank.ru\r\ndigital.avito.ru\r\ndigital.cgu.mchs.ru\r\ndigital.credit-registry.nalog.ru\r\ndigital.dev.cgu.iac.mchs.ru\r\ndigital.frontend-dev.k8s.rg.ru\r\ndigital.frontend-stage.k8s.rg.ru\r\ndigital.gazeta.ru\r\ndigital.gosuslugi.ru\r\ndigital.gov.ru\r\ndigital.m24.ru\r\ndigital.mchs.gov.ru\r\ndigital.open.ru\r\ndigital.vtb.ru\r\ndigitalb2b.mts.ru\r\ndigitaldeportal.t2.ru\r\ndigitalevolution.tass.ru\r\ndigitalmedia.avito.ru\r\ndigitalproduct.rshb.ru\r\ndigitalprofile.demo.megafon.ru\r\ndigitaltourism.demo.megafon.ru\r\ndigitalvpn.open.ru\r\ndigp.alfabank.ru\r\ndiktant.nalog.ru\r\ndilabs.open.ru\r\ndima.avito.ru\r\ndimati.73.yandex.ru\r\ndimitrius.64.yandex.ru\r\ndimon01i.yandex.ru\r\ndin1.mail.ru\r\ndin12.mail.ru\r\nding.avito.ru\r\ndingdong.avito.ru\r\ndingo.avito.ru\r\ndingorio.avito.ru\r\ndino.avito.ru\r\ndinosaur.avito.ru\r\ndinozavry.tass.ru\r\ndio.avito.ru\r\ndione.avito.ru\r\ndionysos.avito.ru\r\ndionysus.avito.ru\r\ndip.1tv.ru\r\ndipsy.avito.ru\r\ndir.1std.yandex.ru\r\ndir.avito.ru\r\ndir.consultant.ru\r\ndirac.avito.ru\r\ndirect-commander-test.yandex.ru\r\ndirect-in.sberbank.ru\r\ndirect-mod-test.yandex.ru\r\ndirect-mod-test2.yandex.ru\r\ndirect-mod.yandex.ru\r\ndirect.5brand.yandex.ru\r\ndirect.avito.ru\r\ndirect.sbbolmobile.sberbank.ru\r\ndirect.yandex.ru\r\ndirectline.psbank.ru\r\ndirector-trust.open.ru\r\ndirector.avito.ru\r\ndirectories.avito.ru\r\ndirectorio.avito.ru\r\ndirectory.avito.ru\r\ndirekcia.dogm.mos.ru\r\ndis.avito.ru\r\ndis.vk.com\r\ndisc.yandex.ru\r\ndisco.avito.ru\r\ndiscomobileid.beeline.ru\r\ndiscount.avito.ru\r\ndiscount.psbank.ru\r\ndiscount.vtb.ru\r\ndiscountfinder.avito.ru\r\ndiscounts.api.2gis.ru\r\ndiscover.avito.ru\r\ndiscovery.avito.ru\r\ndiscus.avito.ru\r\ndiscuss.avito.ru\r\ndiscussion.avito.ru\r\ndiscuz.avito.ru\r\ndisk.avito.ru\r\ndisk.garant.ru\r\ndisk.mirtv.ru\r\ndisk.mts.ru\r\ndisk.mvideo.ru\r\ndisk.open.ru\r\ndisk.rzd.ru\r\ndisk.salt.x5.ru\r\ndisk.sber.ru\r\ndisk.t2.ru\r\ndisk.tass.ru\r\ndisk.tele2.ru\r\ndisk.yandex.ru\r\ndisk2-test.yandex.ru\r\ndisney.avito.ru\r\ndispatch.avito.ru\r\ndispatcher.2gis.ru\r\ndispatcher.cloud.mail.ru\r\ndisplay.avito.ru\r\ndisplay.yandex.ru\r\ndisplog5.yandex.ru\r\ndisplog7.yandex.ru\r\ndisplog9.yandex.ru\r\ndist.avito.ru\r\ndistance.avito.ru\r\ndistant.megafon.ru\r\ndistribution-dev01i.ppc.yandex.ru\r\ndistribution.crowdtest.yandex.ru\r\ndistribution.yandex.ru\r\ndistributionadmin1.mail.ru\r\ndistributor.avito.ru\r\ndistributors.avito.ru\r\ndistrmake.yandex.ru\r\ndistrsubv1.go.mail.ru\r\ndistrtest.yandex.ru\r\ndit.consultant.ru\r\ndiva.avito.ru\r\ndivine.avito.ru\r\ndivya.avito.ru\r\ndixie.avito.ru\r\ndiy.avito.ru\r\ndj.avito.ru\r\ndjachkovskij.sakha.gov.ru\r\ndjango.avito.ru\r\ndk.avito.ru\r\ndk.mail.ru\r\ndkb.gov.ru\r\ndkn.mos.ru\r\ndkushnerev-www.t.avito.ru\r\ndl.avito.ru\r\ndl.beeline.ru\r\ndl.mail.ru\r\ndl.msg.tass.ru\r\ndl.myteam.tass.ru\r\ndl.open.ru\r\ndl.t2.ru\r\ndl.teams.infra.rbc.ru\r\ndl.tele2.ru\r\ndl1-filestore-vvostok-narod.yandex.ru\r\ndl1.avito.ru\r\ndl1s-filestore-vvostok-narod.yandex.ru\r\ndl2.avito.ru\r\ndl3.avito.ru\r\ndl5.avito.ru\r\ndl7cam1.i.mail.ru\r\ndl7cam2.i.mail.ru\r\ndle.avito.ru\r\ndlg-web.mkb.ru\r\ndlhbplatinum.kino-teatr.ru\r\ndlp1.mail.ru\r\ndlp2.mail.ru\r\ndlp3.mail.ru\r\ndlp4.mail.ru\r\ndls.avito.ru\r\ndlt.mail.ru\r\ndm-eosk.rosatom.ru\r\ndm.365.yandex.ru\r\ndm.alfabank.ru\r\ndm.avito.ru\r\ndm.vtb.ru\r\ndma.avito.ru\r\ndmc.avito.ru\r\ndmc.beeline.ru\r\ndmc.demo.megafon.ru\r\ndmca.avito.ru\r\ndme.avito.ru\r\ndmedia-g.avito.ru\r\ndmg.avito.ru\r\ndmitriev.ing.k8s.dev.ivi.ru\r\ndmitriy.n.n.2015.yandex.ru\r\ndmitrov.home.megafon.ru\r\ndmitrovskiy.mos.ru\r\ndmm.avito.ru\r\ndmoskovskiy.ing.k8s.dev.ivi.ru\r\ndmp-test-1.ria.ru\r\ndmp-test-2.ria.ru\r\ndmp-test-3.ria.ru\r\ndmp-test-4.ria.ru\r\ndmp-test.ria.ru\r\ndmp.dmpkit.lemanapro.ru\r\ndmp.magnit.ru\r\ndmp.rambler.ru\r\ndmp20.magnit.ru\r\ndmpkit.lemanapro.ru\r\ndmrbackup1.mail.ru\r\ndms.avito.ru\r\ndms.sberbank.ru\r\ndms1.avito.ru\r\ndmt.avito.ru\r\ndmx.avito.ru\r\ndmz-chrdk-web01.dmz.tass.ru\r\ndmz-db01-cl01.dmz.tass.ru\r\ndmz-dc03.dmz.tass.ru\r\ndmz-expe01-n01.lab.tass.ru\r\ndmz-expe01-n01.tass.ru\r\ndmz-expe01-n02.lab.tass.ru\r\ndmz-expe01-n02.tass.ru\r\ndmz-ksc01-gate.tass.ru\r\ndmz-ns04.dmz.tass.ru\r\ndmz-proxy.garant.ru\r\ndmz-test.garant.ru\r\ndmz-wbx02-irp01.tass.ru\r\ndmz-wbx02-irp02.tass.ru\r\ndmz-web01-cl01.dmz.tass.ru\r\ndmz-web02-cl01.dmz.tass.ru\r\ndmz-web04-n1.dmz.tass.ru\r\ndmz-wse01-n01.dmz.tass.ru\r\ndmz-wse01-n02.dmz.tass.ru\r\ndmz-wse02-cl01.dmz.tass.ru\r\ndmz-wse02-n02.tass.ru\r\ndmz-wse03-cl01.tass.ru\r\ndmz-wse03-cl02.tass.ru\r\ndmz-wse03-n01.tass.ru\r\ndmz-wsedge01-n01.tass.ru\r\ndmz-wsedge01-n02.tass.ru\r\ndmz-wsedge02-n01.tass.ru\r\ndmz-wsedge02-n02.tass.ru\r\ndmz.avito.ru\r\ndmz.psi.teamid.sber.ru\r\ndmz.psi.userid.sber.ru\r\ndmz.tass.ru\r\ndn.avito.ru\r\ndn.mail.ru\r\ndn.tinkoff.ru\r\ndn2.avito.ru\r\ndna.avito.ru\r\ndnafso.cn.www.sports.ru\r\ndnc.avito.ru\r\ndncaps2.beeline.ru\r\ndnepropetrovsk.babyblog.ru\r\ndnfaforum.kino-teatr.ru\r\ndnm.avito.ru\r\ndnn.avito.ru\r\ndnp.avito.ru\r\ndns-2.avito.ru\r\ndns.avito.ru\r\ndns.class.avito.ru\r\ndns.lk.cdn.megafon.ru\r\ndns.yandex.ru\r\ndns0.avito.ru\r\ndns01.avito.ru\r\ndns02.avito.ru\r\ndns03.avito.ru\r\ndns1.avito.ru\r\ndns1.mail.ru\r\ndns10.avito.ru\r\ndns10.vk.com\r\ndns11.avito.ru\r\ndns12.avito.ru\r\ndns13.avito.ru\r\ndns14.avito.ru\r\ndns18.avito.ru\r\ndns19.avito.ru\r\ndns2.avito.ru\r\ndns2.mail.ru\r\ndns20.avito.ru\r\ndns20.vk.com\r\ndns21.avito.ru\r\ndns22.avito.ru\r\ndns3.avito.ru\r\ndns4.avito.ru\r\ndns5.avito.ru\r\ndns6.avito.ru\r\ndns7.avito.ru\r\ndns8.avito.ru\r\ndns9.avito.ru\r\ndnsadmin.alfabank.ru\r\ndnsadmin.avito.ru\r\ndnstest.avito.ru\r\ndnstopup.tele2.ru\r\ndnswl.avito.ru\r\ndo.avito.ru\r\ndo.gibz.kp.ru\r\ndo.gosuslugi.ru\r\ndo.it.alfabank.ru\r\ndo.mari-el.gov.ru\r\ndo.test.gosuslugi.ru\r\ndoberman.avito.ru\r\ndobro.beeline.ru\r\ndobro.magnit.ru\r\ndobro.mail.ru\r\ndobro.tele2.ru\r\ndobro.vk.com\r\ndobroe.aif.ru\r\ndobronew.kp.ru\r\ndobrovolets.review-k8s.aif.ru\r\ndoc-upload.mos.ru\r\ndoc.avito.ru\r\ndoc.cdn.beeline.ru\r\ndoc.duma.gov.ru\r\ndoc.eldorado.ru\r\ndoc.lk.psbank.ru\r\ndoc.mk.ru\r\ndoc.top100.rambler.ru\r\ndoc.vtb.ru\r\ndoc2.avito.ru\r\ndoccano.z38.zoon.ru\r\ndoccenter01e.cs-minitools01e.yandex.ru\r\ndoccenter01h.cs-minitools01h.yandex.ru\r\ndoccenter01ht.cs-minitools01ht.yandex.ru\r\ndocflow.dev.cgu.iac.mchs.ru\r\ndocflow.pg.cgu.mchs.ru\r\ndocfront1f.yandex.ru\r\ndocfront1o.yandex.ru\r\ndocfront2f.yandex.ru\r\ndocfront2o.yandex.ru\r\ndocfront3f.yandex.ru\r\ndocfront3o.yandex.ru\r\ndocfront4f.yandex.ru\r\ndock.avito.ru\r\ndocker-hub.2gis.ru\r\ndocker-hub.d1.2gis.ru\r\ndocker-hub.n3.2gis.ru\r\ndocker.avito.ru\r\ndocker.registry.tbank.ru\r\ndocker.registry.tinkoff.ru\r\ndocker.srv.hub.litres.ru\r\ndocker.srv.litres.ru\r\ndocker.update.megafon.ru\r\ndocman.avito.ru\r\ndocs-beta.ui.megafon.ru\r\ndocs.avito.ru\r\ndocs.console.cloud.mts.ru\r\ndocs.culture.ru\r\ndocs.dc.cloud.mts.ru\r\ndocs.duma.gov.ru\r\ndocs.edu.gov.ru\r\ndocs.franch.x5.ru\r\ndocs.garant.ru\r\ndocs.gkh.hab.aif.ru\r\ndocs.iarc.who.int\r\ndocs.it.hh.ru\r\ndocs.kino-teatr.ru\r\ndocs.kommersant.ru\r\ndocs.litres.ru\r\ndocs.magnit.ru\r\ndocs.mail.ru\r\ndocs.moscowapp.mos.ru\r\ndocs.myoffice.fas.gov.ru\r\ndocs.myoffice.sberbank.ru\r\ndocs.net.ixbt.com\r\ndocs.ozon.ru\r\ndocs.paas.cloud.mts.ru\r\ndocs.platform.digital.gov.ru\r\ndocs.svodka1.tass.ru\r\ndocsb1.i.mail.ru\r\ndocsb10.i.mail.ru\r\ndocsb11.i.mail.ru\r\ndocsb12.i.mail.ru\r\ndocsb13.i.mail.ru\r\ndocsb14.i.mail.ru\r\ndocsb15.i.mail.ru\r\ndocsb2.i.mail.ru\r\ndocsb20.i.mail.ru\r\ndocsb21.i.mail.ru\r\ndocsb22.i.mail.ru\r\ndocsb23.i.mail.ru\r\ndocsb24.i.mail.ru\r\ndocsb3.i.mail.ru\r\ndocsb4.i.mail.ru\r\ndocsb5.i.mail.ru\r\ndocsf1.i.mail.ru\r\ndocsf2.i.mail.ru\r\ndocsf3.i.mail.ru\r\ndocsf4.i.mail.ru\r\ndocsp1.i.mail.ru\r\ndocsp2.i.mail.ru\r\ndocstest.mchs.ru\r\ndoctor.avito.ru\r\ndoctor.rambler.ru\r\ndoctors.avito.ru\r\ndocument.avito.ru\r\ndocument.kremlin.ru\r\ndocumentation.avito.ru\r\ndocumentos.avito.ru\r\ndocuments.avito.ru\r\ndocviewer.yandex.ru\r\ndod.avito.ru\r\ndodge.avito.ru\r\ndodge.drom.ru\r\ndodo.avito.ru\r\ndodo.youdo.com\r\ndof.avito.ru\r\ndofus.avito.ru\r\ndog.avito.ru\r\ndogbert.avito.ru\r\ndogfood-dev.avito.ru\r\ndoggy.avito.ru\r\ndogma.avito.ru\r\ndogma.film.ru\r\ndogs.avito.ru\r\ndoh.mail.ru\r\ndoh.mts.ru\r\ndoi.avito.ru\r\ndoi.worldbank.org\r\ndoidev.worldbank.org\r\ndoiqa.worldbank.org\r\ndoistg.worldbank.org\r\ndoit.avito.ru\r\ndojo.avito.ru\r\ndoki.ixbt.com\r\ndoktor.rambler.ru\r\ndoku.avito.ru\r\ndol.beeline.ru\r\ndolce.avito.ru\r\ndolgbook.saratov.gov.ru\r\ndolgoprudny.hh.ru\r\ndoll.avito.ru\r\ndollar.avito.ru\r\ndollars.avito.ru\r\ndolls.avito.ru\r\ndolly.avito.ru\r\ndolphin.avito.ru\r\ndom.avito.ru\r\ndom.beeline.ru\r\ndom.gosuslugi.ru\r\ndom.kp.ru\r\ndom.lady.mail.ru\r\ndom.lenta.ru\r\ndom.t2.ru\r\ndom.tele2.ru\r\ndom.yandex.ru\r\ndoma.life.ru\r\ndoma.megafon.ru\r\ndoma.test.ivi.ru\r\ndomain.avito.ru\r\ndomain.yandex.ru\r\ndomain2.avito.ru\r\ndomain3.avito.ru\r\ndomaincontrol.avito.ru\r\ndomaincontrolpanel.avito.ru\r\ndomaincp.avito.ru\r\ndomaindnszones.avito.ru\r\ndomaindnszones.office.tutu.ru\r\ndomains.avito.ru\r\ndomenvironmental.rambler.ru\r\ndomi.avito.ru\r\ndomination.avito.ru\r\ndomini.avito.ru\r\ndominio.avito.ru\r\ndominios.avito.ru\r\ndomino.avito.ru\r\ndominus.avito.ru\r\ndomodedovo.babyblog.ru\r\ndomodedovo.beeline.ru\r\ndomofon.mts.ru\r\ndomreg.avito.ru\r\ndomruall.litres.ru\r\ndomrupremium.litres.ru\r\ndomruread.litres.ru\r\ndon.avito.ru\r\ndonald.avito.ru\r\ndonate.avito.ru\r\ndoncova.1tv.ru\r\ndonetsk.gosuslugi.ru\r\ndonetsk.kp.ru\r\ndongo.rbc.ru\r\ndongwon.avito.ru\r\ndonkey.avito.ru\r\ndonna.avito.ru\r\ndonor-krovi.tass.ru\r\ndonskoy.mos.ru\r\ndoodle.avito.ru\r\ndoom.avito.ru\r\ndoor.avito.ru\r\ndoors.avito.ru\r\ndop.avito.ru\r\ndops164gaxlabelsdono.test.euronews.com\r\ndops193envbranchpass.test.euronews.com\r\ndops255cixlighthouse.test.euronews.com\r\ndops61christian.test.euronews.com\r\ndops61euronewsfront.test.euronews.com\r\ndora.avito.ru\r\ndorado.avito.ru\r\ndoraemon.avito.ru\r\ndorblu01f.maps.yandex.ru\r\ndorblu01h.maps.yandex.ru\r\ndoris.avito.ru\r\ndorogi.gosuslugi.ru\r\ndorogomilovo.mos.ru\r\ndos.avito.ru\r\ndos.protect.megafon.ru\r\ndoska.avito.ru\r\ndostavili.2gis.ru\r\ndostavka-bsl.magnit.ru\r\ndostavka-highload.magnit.ru\r\ndostavka-lenvendo.magnit.ru\r\ndostavka-qsoft.magnit.ru\r\ndostavka-stage.magnit.ru\r\ndostavka-stage2.magnit.ru\r\ndostavka-test.magnit.ru\r\ndostavka-test1.magnit.ru\r\ndostavka-test10.magnit.ru\r\ndostavka-test11.magnit.ru\r\ndostavka-test2.magnit.ru\r\ndostavka-test3.magnit.ru\r\ndostavka-test4.magnit.ru\r\ndostavka-test5.magnit.ru\r\ndostavka-test6.magnit.ru\r\ndostavka-test7.magnit.ru\r\ndostavka-test8.magnit.ru\r\ndostavka-test9.magnit.ru\r\ndostavka.magnit.ru\r\ndostavka.russianpost.ru\r\ndostavka.vtb.ru\r\ndostavka.x5.ru\r\ndostavka.yandex.ru\r\ndostup.mts.ru\r\ndot.avito.ru\r\ndot.ixbt.com\r\ndot.mts.ru\r\ndot.net.ixbt.com\r\ndot.rc.ixbt.com\r\ndot.www.ixbt.com\r\ndota.avito.ru\r\ndotnet.avito.ru\r\ndotproject.avito.ru\r\ndots.avito.ru\r\ndouglas.avito.ru\r\ndove.avito.ru\r\ndove.lenta.ru\r\ndown.avito.ru\r\ndownload-mobile-greenfield1.online.sberbank.ru\r\ndownload-mobile-node1.online.sberbank.ru\r\ndownload-mobile-node2.online.sberbank.ru\r\ndownload-mobile-node3.online.sberbank.ru\r\ndownload-mobile-node4.online.sberbank.ru\r\ndownload-mobile-node5.online.sberbank.ru\r\ndownload-mobile-node6.online.sberbank.ru\r\ndownload-mobile-node7.online.sberbank.ru\r\ndownload-mobile-standin1.online.sberbank.ru\r\ndownload-mobile-standin2.online.sberbank.ru\r\ndownload.2gis.ru\r\ndownload.avito.ru\r\ndownload.max.ru\r\ndownload.yandex.ru\r\ndownload1.avito.ru\r\ndownload2.avito.ru\r\ndownload3.avito.ru\r\ndownload4.avito.ru\r\ndownloaddigitalcodecs.avito.ru\r\ndownloaddigitaldm.avito.ru\r\ndownloaddigitaldownloads.avito.ru\r\ndownloaddigitalmanager.avito.ru\r\ndownloader.avito.ru\r\ndownloader.disk.yandex.ru\r\ndownloader.dst.yandex.ru\r\ndownloadhdcodecs.avito.ru\r\ndownloadmediacodecs.avito.ru\r\ndownloadmediadm.avito.ru\r\ndownloadmediadownloads.avito.ru\r\ndownloadmediamanager.avito.ru\r\ndownloadprocodecs.avito.ru\r\ndownloadprodm.avito.ru\r\ndownloadprodownloads.avito.ru\r\ndownloadpromanager.avito.ru\r\ndownloads.avito.ru\r\ndowntown.avito.ru\r\ndp-1047-www.k.avito.ru\r\ndp-933-www.k.avito.ru\r\ndp-980-www.k.avito.ru\r\ndp-export01.rbc.ru\r\ndp-findata01.rbc.ru\r\ndp.1tv.ru\r\ndp.avito.ru\r\ndp.corp.mail.ru\r\ndp.ivanovo.tele2.ru\r\ndp.megafon.ru\r\ndp.tinkoff.ru\r\ndp.vtb.ru\r\ndp.yar.tele2.ru\r\ndpd.youdo.com\r\ndpinchuk.dev.api.mk.ru\r\ndpinchuk.dev.arh.mk.ru\r\ndpinchuk.dev.ast.mk.ru\r\ndpinchuk.dev.baikal.mk.ru\r\ndpinchuk.dev.belgorod.mk.ru\r\ndpinchuk.dev.blag.mk.ru\r\ndpinchuk.dev.brl.mk.ru\r\ndpinchuk.dev.cheb.mk.ru\r\ndpinchuk.dev.chel.mk.ru\r\ndpinchuk.dev.chr.mk.ru\r\ndpinchuk.dev.crimea.mk.ru\r\ndpinchuk.dev.eburg.mk.ru\r\ndpinchuk.dev.hab.mk.ru\r\ndpinchuk.dev.ivanovo.mk.ru\r\ndpinchuk.dev.izhevsk.mk.ru\r\ndpinchuk.dev.karel.mk.ru\r\ndpinchuk.dev.kavkaz.mk.ru\r\ndpinchuk.dev.kazan.mk.ru\r\ndpinchuk.dev.kbr.mk.ru\r\ndpinchuk.dev.kemerovo.mk.ru\r\ndpinchuk.dev.kirov.mk.ru\r\ndpinchuk.dev.kostroma.mk.ru\r\ndpinchuk.dev.kras.mk.ru\r\ndpinchuk.dev.kuban.mk.ru\r\ndpinchuk.dev.kuzbass.mk.ru\r\ndpinchuk.dev.magadan.mk.ru\r\ndpinchuk.dev.mk.ru\r\ndpinchuk.dev.mkala.mk.ru\r\ndpinchuk.dev.mrl.mk.ru\r\ndpinchuk.dev.murmansk.mk.ru\r\ndpinchuk.dev.nn.mk.ru\r\ndpinchuk.dev.novos.mk.ru\r\ndpinchuk.dev.omsk.mk.ru\r\ndpinchuk.dev.orel.mk.ru\r\ndpinchuk.dev.oren.mk.ru\r\ndpinchuk.dev.perm.mk.ru\r\ndpinchuk.dev.push.mk.ru\r\ndpinchuk.dev.rostov.mk.ru\r\ndpinchuk.dev.rzn.mk.ru\r\ndpinchuk.dev.samara.mk.ru\r\ndpinchuk.dev.saratov.mk.ru\r\ndpinchuk.dev.serp.mk.ru\r\ndpinchuk.dev.smolensk.mk.ru\r\ndpinchuk.dev.sochi.mk.ru\r\ndpinchuk.dev.spb.mk.ru\r\ndpinchuk.dev.tambov.mk.ru\r\ndpinchuk.dev.tomsk.mk.ru\r\ndpinchuk.dev.tula.mk.ru\r\ndpinchuk.dev.tumen.mk.ru\r\ndpinchuk.dev.tv.mk.ru\r\ndpinchuk.dev.tver.mk.ru\r\ndpinchuk.dev.ufa.mk.ru\r\ndpinchuk.dev.ugra.mk.ru\r\ndpinchuk.dev.ul.mk.ru\r\ndpinchuk.dev.ulan.mk.ru\r\ndpinchuk.dev.vlad.mk.ru\r\ndpinchuk.dev.vladimir.mk.ru\r\ndpinchuk.dev.volg.mk.ru\r\ndpinchuk.dev.vologda.mk.ru\r\ndpinchuk.dev.vrn.mk.ru\r\ndpinchuk.dev.www.mk.ru\r\ndpinchuk.dev.yakutia.mk.ru\r\ndpinchuk.dev.yar.mk.ru\r\ndpinchuk.dev.yaroslavl.mk.ru\r\ndpmsappdev.worldbank.org\r\ndpo.mos.ru\r\ndpo.psi.mchs.gov.ru\r\ndpo.tomsk.gov.ru\r\ndprf.gov.ru\r\ndprhensimmta.avito.ru\r\ndpronin.ing.k8s.dev.ivi.ru\r\ndps-fm.mkb.ru\r\ndps.avito.ru\r\ndpt.avito.ru\r\ndq.avito.ru\r\ndr-www.avito.ru\r\ndr.avito.ru\r\ndr.beeline.ru\r\ndrac.avito.ru\r\ndraco.avito.ru\r\ndracula.avito.ru\r\ndracula.rbc.ru\r\ndraft.avito.ru\r\ndrago.avito.ru\r\ndragon.avito.ru\r\ndragon2.mail.ru\r\ndragon3.mail.ru\r\ndragonfly.avito.ru\r\ndragonnew.avito.ru\r\ndragonpals.mail.ru\r\ndragonpass.mironline.ru\r\ndragons.avito.ru\r\ndragonsaga.mail.ru\r\ndrake.avito.ru\r\ndrama.avito.ru\r\ndrawio.yc.mvideo.ru\r\ndrc.avito.ru\r\ndream.avito.ru\r\ndream.tinkoff.ru\r\ndreamer.avito.ru\r\ndreamjob.afisha.ru\r\ndreamland.avito.ru\r\ndreams.avito.ru\r\ndreamteam.avito.ru\r\ndreamz.avito.ru\r\ndrew.avito.ru\r\ndrift.avito.ru\r\ndriss.avito.ru\r\ndrive.avito.ru\r\ndrive.magnit.ru\r\ndrive.mail.ru\r\ndrive.mchs.gov.ru\r\ndrive.megafon.ru\r\ndrive.rosnedra.gov.ru\r\ndrive.yandex.ru\r\ndriven.film.ru\r\ndriver.avito.ru\r\ndriver.yandex.ru\r\ndrivers.avito.ru\r\ndrm.avito.ru\r\ndrogo.avito.ru\r\ndrokino-school.gosuslugi.ru\r\ndrop.avito.ru\r\ndropbox.avito.ru\r\ndrozd.mail.ru\r\ndrozdov.1976.yandex.ru\r\ndrp.avito.ru\r\ndrumandbass.avito.ru\r\ndrupal.avito.ru\r\ndrupal7.avito.ru\r\ndrupaltest.avito.ru\r\ndrusanov.ing.k8s.dev.ivi.ru\r\ndrv.dns-shop.ru\r\ndrweb-2.tambov.gov.ru\r\ndrweb.avito.ru\r\ndrweb2.mail.ru\r\nds-42samisusami-kirov-r43.gosweb.gosuslugi.ru\r\nds-cns-3.kino-teatr.ru\r\nds-erudit-zelenogorsk-r04.gosweb.gosuslugi.ru\r\nds-kolokolchik-mitrofanova-r38.gosweb.gosuslugi.ru\r\nds-norilchonok-r04.gosweb.gosuslugi.ru\r\nds-plugin.gosuslugi.ru\r\nds-raduga-yugorsk-r86.gosweb.gosuslugi.ru\r\nds-ryabinka-kuragino-r04.gosweb.gosuslugi.ru\r\nds-teremok-xantymansijsk-r86.gosweb.gosuslugi.ru\r\nds-unit-dev1.yc.mvideo.ru\r\nds-zorkino-r64.gosweb.gosuslugi.ru\r\nds-zvyozdochka-vladimiroaleksandrovskoe-r25.gosweb.gosuslugi.ru\r\nds.avito.ru\r\nds.dev.cgu.iac.mchs.ru\r\nds.mail.ru\r\nds.tomsk.gov.ru\r\nds1.avito.ru\r\nds10.avito.ru\r\nds10.vk.com\r\nds11-petropavlovskkamchatskij-r30.gosweb.gosuslugi.ru\r\nds13-ryazan-r62.gosweb.gosuslugi.ru\r\nds140-krasnoyarsk-r04.gosweb.gosuslugi.ru\r\nds148-makeevka-r897.gosweb.gosuslugi.ru\r\nds2.avito.ru\r\nds231-saratov-r64.gosweb.gosuslugi.ru\r\nds25-belgorod-r31.gosweb.gosuslugi.ru\r\nds3.avito.ru\r\nds30-surgut.gosuslugi.ru\r\nds302-doneck-r897.gosweb.gosuslugi.ru\r\nds345-omsk-r52.gosweb.gosuslugi.ru\r\nds35-magadan-r44.gosweb.gosuslugi.ru\r\nds38-makeevka-r897.gosweb.gosuslugi.ru\r\nds5-staryj-oskol-r31.gosweb.gosuslugi.ru\r\nds5-voxtoga-r19.gosweb.gosuslugi.ru\r\nds6-belgorod-r31.gosweb.gosuslugi.ru\r\nds6.avito.ru\r\nds7-blagodatnoe-r07.gosweb.gosuslugi.ru\r\nds7-magadan-r44.gosweb.gosuslugi.ru\r\nds70-kirov-r43.gosweb.gosuslugi.ru\r\nds78-surgut-r86.gosweb.gosuslugi.ru\r\nds9-krasnoyarsk-r04.gosweb.gosuslugi.ru\r\ndsa-auth-test.mkb.ru\r\ndsa-test.mkb.ru\r\ndsa.avito.ru\r\ndsadmin.avito.ru\r\ndsc.avito.ru\r\ndsd.tele2.ru\r\ndserbin.ing.k8s.dev.ivi.ru\r\ndsf.avito.ru\r\ndshaymardanova.ing.k8s.dev.ivi.ru\r\ndshebordaev.ing.k8s.dev.ivi.ru\r\ndsi.avito.ru\r\ndsl.avito.ru\r\ndsm.consultant.ru\r\ndsm.ok.ru\r\ndsmirnov.ing.k8s.dev.ivi.ru\r\ndsp.avito.ru\r\ndsp.beeline.ru\r\ndsp.ok.ru\r\ndsp.rambler.ru\r\ndsp.rbc.ru\r\ndsp46.mos.ru\r\ndsp59.mos.ru\r\ndsp6.mos.ru\r\ndspace.avito.ru\r\ndspcounter.rbc.ru\r\ndss.avito.ru\r\ndss.nalog.ru\r\ndss.roseltorg.ru\r\ndss.sberbank.ru\r\ndss2.roseltorg.ru\r\ndsscloud.beeline.ru\r\ndst.yandex.ru\r\ndszn.sev.gov.ru\r\ndt-window.mos.ru\r\ndt.avito.ru\r\ndtc.avito.ru\r\ndte.azure.magnit.ru\r\ndtest.iz.ru\r\ndtest.mirtv.ru\r\ndtk.avito.ru\r\ndtl-vpn-fw.open.ru\r\ndtr.vedomosti.ru\r\ndts.avito.ru\r\ndu.sports.ru\r\ndual.avito.ru\r\ndubai.avito.ru\r\ndubai.lady.mail.ru\r\ndubinin.lideryrossii.tass.ru\r\ndubious.users.avito.ru\r\ndubna.home.megafon.ru\r\ndubna.test.home.megafon.ru\r\nduck.avito.ru\r\nduck.mail.ru\r\ndude.avito.ru\r\nduithreadguardframework.kino-teatr.ru\r\nduke.avito.ru\r\nduldurga.drom.ru\r\ndulich.avito.ru\r\nduma.avito.ru\r\nduma.consultant.ru\r\nduma.gov.ru\r\nduma.lenta.ru\r\nduma.life.ru\r\nduma2.garant.ru\r\ndumbo.avito.ru\r\ndummy.avito.ru\r\ndump.avito.ru\r\ndunaevsky.iz.ru\r\nduncan.avito.ru\r\ndundee.rbc.ru\r\ndune.avito.ru\r\ndung.avito.ru\r\nduplo.avito.ru\r\ndurga.avito.ru\r\nduspatalin.lady.mail.ru\r\ndust.avito.ru\r\nduster.avito.ru\r\ndv-proxy.dns-shop.ru\r\ndv.2.yandex.ru\r\ndv.app.vtb.ru\r\ndv.avito.ru\r\ndv.b2blk.megafon.ru\r\ndv.dev.kp.ru\r\ndv.kommersant.ru\r\ndv.kp.ru\r\ndv.rbc.ru\r\ndv.tass.ru\r\ndvananina-agent.t.avito.ru\r\ndvananina-avi-pro-frontend.k.avito.ru\r\ndvananina-avi-pro-frontend.t.avito.ru\r\ndvananina-avitopro.t.avito.ru\r\ndvananina-dealer.t.avito.ru\r\ndvananina-test-agent.t.avito.ru\r\ndvananina-test-dealer.t.avito.ru\r\ndvd.avito.ru\r\ndveduta.ing.k8s.dev.ivi.ru\r\ndvizh.beeline.ru\r\ndvo.sakha.gov.ru\r\ndvr.avito.ru\r\ndvzd.rzd.ru\r\ndw.avito.ru\r\ndw.euro.who.int\r\ndwar.mail.ru\r\ndwarf.mail.ru\r\ndwcloudorigin.avito.ru\r\ndweb.avito.ru\r\ndwh-docs.avito.ru\r\ndwh.dns-shop.ru\r\ndwight.freecom-test.mts.ru\r\ndwinetproxy.mts.ru\r\ndwiorigin.avito.ru\r\ndworigin.avito.ru\r\ndwp.aho.afro.who.int\r\ndwpbmc.magnit.ru\r\ndws.cloud.mts.ru\r\ndwww.babyblog.ru\r\ndx.avito.ru\r\ndy.avito.ru\r\ndyn.avito.ru\r\ndyn.ig.rambler.ru\r\ndyn.tinkoff.ru\r\ndyna-elk-test.mkb.ru\r\ndynamic.avito.ru\r\ndynamics.avito.ru\r\ndys.avito.ru\r\ndyson.afisha.ru\r\ndz.avito.ru\r\ndzdkem.rzd.ru\r\ndzdkry.rzd.ru\r\ndzdmsk.rzd.ru\r\ndzdnsk.rzd.ru\r\ndzdspb.rzd.ru\r\ndzdtula.rzd.ru\r\ndzdvgg.rzd.ru\r\ndzdyar.rzd.ru\r\ndzen.yandex.ru\r\ndzerzhinsk.beeline.ru\r\ndzerzhinsk.hh.ru\r\ndzerzhinskiy.drom.ru\r\ndzhankoy.drom.ru\r\ndzo-test.mkb.ru\r\ndzone.avito.ru\r\ndzr.demo.megafon.ru\r\ne-burg.mts.ru\r\ne-commerce.avito.ru\r\ne-corporate.mkb.ru\r\ne-file.tinkoff.ru\r\ne-ir.mkb.ru\r\ne-learning.avito.ru\r\ne-learning.kino-teatr.ru\r\ne-learning.tinkoff.ru\r\ne-mail.avito.ru\r\ne-mail.mts.ru\r\ne-sport.mail.ru\r\ne-sports.mail.ru\r\ne-staff.psbank.ru\r\ne-trast.gosuslugi.ru\r\ne-trust.gosuslugi.ru\r\ne-trust2.gosuslugi.ru\r\ne.avito.ru\r\ne.corp.megafon.ru\r\ne.mail.ru\r\ne.ns.e.avito.ru\r\ne.ns.email.avito.ru\r\ne.open.ru\r\ne.shop.megafon.ru\r\ne.v.litvinenko.1.yandex.ru\r\ne.vkmail.rosbank.ru\r\ne0.hh.ru\r\ne1.avito.ru\r\ne10.avito.ru\r\ne10.vk.com\r\ne2.avito.ru\r\ne2c.alfabank.ru\r\ne2epayments.beeline.ru\r\ne3.avito.ru\r\ne4.avito.ru\r\ne5.avito.ru\r\ne59e1555-fb45-532d-8391-e814dc09a8b0-bw.ops.beeline.ru\r\ne6.avito.ru\r\ne98a56df-fda9-525f-88fa-297cd723e635-bw.ops.beeline.ru\r\nea.avito.ru\r\neac.avito.ru\r\neac4f89e.services.gismeteo.ru\r\nead.avito.ru\r\nead.zdorovie-shkolnika.spb.aif.ru\r\neaeu.economy.gov.ru\r\neagle.avito.ru\r\neagles.avito.ru\r\neai.rosatom.ru\r\neao.dev.home.megafon.ru\r\neao.kp.ru\r\neao.mts.ru\r\neao.shop.megafon.ru\r\neao.shop.tele2.ru\r\neao.tele2.ru\r\neapr.euro.who.int\r\nearl.54.yandex.ru\r\nearn.avito.ru\r\nearnmoney.avito.ru\r\nears.avito.ru\r\nearth.avito.ru\r\neas.avito.ru\r\neas.exchange.rosbank.ru\r\neas.pochta.ru\r\neas.rosbank.ru\r\neas.sberbank.ru\r\neas.tools.russianpost.ru\r\neast.avito.ru\r\neast.kp.ru\r\neaster.avito.ru\r\neasy-report.yc.mvideo.ru\r\neasy.avito.ru\r\neasydeal.psbank.ru\r\neasydigitaldm.avito.ru\r\neasydigitaldownloads.avito.ru\r\neasydigitalmanager.avito.ru\r\neasymediadm.avito.ru\r\neasymediadownloads.avito.ru\r\neasymediamanager.avito.ru\r\neasymoney.avito.ru\r\neasyprodm.avito.ru\r\neasyprodownloads.avito.ru\r\neasyproject.beeline.ru\r\neasypromanager.avito.ru\r\neasyway.avito.ru\r\neat.avito.ru\r\neauth-uat.beeline.ru\r\neauth.beeline.ru\r\neaward.top100.rambler.ru\r\neb.avito.ru\r\neb1.esbstage.worldbank.org\r\nebank.avito.ru\r\nebay.avito.ru\r\nebay.lady.mail.ru\r\nebconf.rosbank.ru\r\nebg-dev.mkb.ru\r\nebi.avito.ru\r\nebill.avito.ru\r\nebisu.avito.ru\r\nebiz.avito.ru\r\nebiz.worldbank.org\r\nebizcmprd.worldbank.org\r\nebizcmqa.worldbank.org\r\nebizcmtrn.worldbank.org\r\nebizdev.worldbank.org\r\nebizevents.worldbank.org\r\nebizeventsdev.worldbank.org\r\nebizeventsqa.worldbank.org\r\nebizeventsstg.worldbank.org\r\nebizeventstest.worldbank.org\r\nebizeventstrn.worldbank.org\r\nebizhelp.worldbank.org\r\nebizhelpd.worldbank.org\r\nebizhelpq.worldbank.org\r\nebizhelps.worldbank.org\r\nebizhelpt.worldbank.org\r\nebizphat.worldbank.org\r\nebizphatdev.worldbank.org\r\nebizphatqa.worldbank.org\r\nebizprd.worldbank.org\r\nebizqa.worldbank.org\r\nebizstage.worldbank.org\r\nebizstg.worldbank.org\r\nebiztest.worldbank.org\r\nebiztrn.worldbank.org\r\nebm.avito.ru\r\nebook.avito.ru\r\nebooks.avito.ru\r\nebs-anketa.alfabank.ru\r\nebs-bio.rshb.ru\r\nebs-integration-test.megafon.ru\r\nebs.avito.ru\r\nebukva.litres.ru\r\neburg.avito.ru\r\neburg.home.megafon.ru\r\neburg.kommersant.ru\r\neburg.mk.ru\r\nebusiness.avito.ru\r\nebusiness.worldbank.org\r\nebusinessntlm.worldbank.org\r\nebusinessntlmd.worldbank.org\r\nebusinessntlmdev.worldbank.org\r\nebusinessntlmq.worldbank.org\r\nebusinessntlmqa.worldbank.org\r\nebusinessntlms.worldbank.org\r\nebusinessntlmstg.worldbank.org\r\nebusinessntlmt.worldbank.org\r\nebusinessntlmtrn.worldbank.org\r\nebusinessntlmtst.worldbank.org\r\nebusinessqa.worldbank.org\r\nebusinessrp.worldbank.org\r\nebusinessrpqa.worldbank.org\r\nebusinessrpstg.worldbank.org\r\nebusinessrpt.worldbank.org\r\nebusinessrptrn.worldbank.org\r\nebusinesst.worldbank.org\r\nebusinesstst.worldbank.org\r\nebuy.avito.ru\r\nec.ac.gov.ru\r\nec.avito.ru\r\nec.gov.ru\r\nec.kommersant.ru\r\nec.mts.ru\r\nec2.avito.ru\r\neca-sync-eem-dialog-messenger-ift.online.sberbank.ru\r\neca-sync-eem-dialog-messenger-psi.online.sberbank.ru\r\neca-sync-eem-dialog-messenger.online.sberbank.ru\r\neca.avito.ru\r\necalibrary.worldbank.org\r\necampus.avito.ru\r\necard.alfabank.ru\r\necard.avito.ru\r\necard.tinkoff.ru\r\necards.avito.ru\r\necc.avito.ru\r\necdl.avito.ru\r\necdn.sovcombank.ru\r\nece.avito.ru\r\necf8427xchel.ural.mts.ru\r\nechelon.avito.ru\r\nechidna.avito.ru\r\necho.avito.ru\r\necho.swarm.cgu.mchs.ru\r\necho.swarm.iac.mchs.ru\r\necho1.i.mail.ru\r\necho1.mail.ru\r\necho12.i.mail.ru\r\necho12.mail.ru\r\neclass.avito.ru\r\neclipse.avito.ru\r\necm.avito.ru\r\necm.megafon.ru\r\necmdm.avito.ru\r\necmdm2.avito.ru\r\neco-id.mts.ru\r\neco.avito.ru\r\neco.project.tinkoff.ru\r\necoatom.iz.ru\r\necoday.mts.ru\r\necoindex.2gis.ru\r\necology.avito.ru\r\necom-api.magnit.ru\r\necom-bank.ozon.ru\r\necom.alfabank.ru\r\necom.avito.ru\r\necom.md.magnit.ru\r\necom.open.ru\r\necom.sberbank.ru\r\necomap.mos.ru\r\necomm1.avito.ru\r\necommerce.avito.ru\r\necomtest.alfabank.ru\r\necon.avito.ru\r\neconombank.credit-registry.nalog.ru\r\neconomic.life.ru\r\neconomics.avito.ru\r\neconomy.alania.gov.ru\r\neconomy.avito.ru\r\neconomy.credit-registry.nalog.ru\r\neconomy.gov.ru\r\neconsult.worldbank.org\r\neconsultstc.worldbank.org\r\necontrol.demo.megafon.ru\r\necosystem.dns-shop.ru\r\necowww.kino-teatr.ru\r\necozaeco.content.tinkoff.ru\r\necp-quiz.roseltorg.ru\r\necp.avito.ru\r\necp.exchange.rosbank.ru\r\necp.rosbank.ru\r\necr.avito.ru\r\necs.avito.ru\r\necshop.avito.ru\r\nectest.avito.ru\r\necuador.avito.ru\r\ned.avito.ru\r\ned.film.ru\r\ned.instyle.rambler.ru\r\ned.kp.ru\r\ned.lenta.ru\r\ned.t2.ru\r\ned2.stage.secret.rambler.ru\r\ned5desktop.worldbank.org\r\neda.afisha.ru\r\neda.avito.ru\r\neda.tele2.ru\r\neda.x5.ru\r\nedc.74.yandex.ru\r\nedc.avito.ru\r\nedc.mos.ru\r\nedc1tstjboss2.worldbank.org\r\neddie.avito.ru\r\nedds.mchs.gov.ru\r\neddy.avito.ru\r\nedelweiss.avito.ru\r\neden.avito.ru\r\nedesign.avito.ru\r\nedgar.avito.ru\r\nedge-lb-g1.ozon.ru\r\nedge-lb-g3.ozon.ru\r\nedge-lb-g5.ozon.ru\r\nedge-lb-g6.ozon.ru\r\nedge-lb-z1-g1.ozon.ru\r\nedge-lb-z23-g1.ozon.ru\r\nedge-msk.sovcombank.ru\r\nedge-upvideo-ec.rbc.ru\r\nedge-upvideo.rbc.ru\r\nedge.avito.ru\r\nedge.pexip.megafon.ru\r\nedge.tomsk.gov.ru\r\nedge1.avito.ru\r\nedge2.avito.ru\r\nedgemail.worldbank.org\r\nedi.avito.ru\r\nedinoeokno.rzd.ru\r\nedison.avito.ru\r\nedit.avito.ru\r\nedit.ren.tv\r\nedit.rosbalt.ru\r\nedition.rg.ru\r\neditor-dev.k8s.rg.ru\r\neditor-development.k8s.rg.ru\r\neditor-production.k8s.rg.ru\r\neditor-stage.k8s.rg.ru\r\neditor.avito.ru\r\neditor.k8s.rg.ru\r\neditor.portal.ria.ru\r\neditor.sberhelp.sber.ru\r\neditor.tr.ria.ru\r\neditorial-hr.sberbank.ru\r\neditorial.avito.ru\r\neditorial.rbc.ru\r\nedlhbplatinum.kino-teatr.ru\r\nedm.avito.ru\r\nedmd.worldbank.org\r\nedmonton.avito.ru\r\nedmp.worldbank.org\r\nedmq.worldbank.org\r\nedms.avito.ru\r\nedmt.worldbank.org\r\nedo.avito.ru\r\nedo.mts.ru\r\nedo.nalog.ru\r\nedo.pochta.ru\r\nedo.rzd.ru\r\nedo.tele2.ru\r\nedo2.nalog.gov.ru\r\nedoc.avito.ru\r\nedocs.avito.ru\r\nedofarmaimpex.dc.cloud.mts.ru\r\neds.avito.ru\r\nedson.avito.ru\r\nedtech.kp.ru\r\nedu-eosk.rosatom.ru\r\nedu-stage.gosuslugi.ru\r\nedu-uat.gosuslugi.ru\r\nedu.1tv.ru\r\nedu.2gis.ru\r\nedu.avito.ru\r\nedu.expert.yandex.ru\r\nedu.garant.ru\r\nedu.gossluzhba.gov.ru\r\nedu.gov.ru\r\nedu.interfax.ru\r\nedu.megafon.ru\r\nedu.pochta.ru\r\nedu.rs.gov.ru\r\nedu.sakha.gov.ru\r\nedu.suhareva-center.mos.ru\r\nedu.tender.mos.ru\r\nedu.tinkoff.ru\r\nedu.wildberries.ru\r\nedu.yandex.ru\r\nedu1.avito.ru\r\nedu2.avito.ru\r\nedu3.avito.ru\r\nedu4.avito.ru\r\neduardo.avito.ru\r\neduc.avito.ru\r\neducacion.avito.ru\r\neducation.avito.ru\r\neducation.beeline.ru\r\neducation.megafon.ru\r\neducation.profi.tass.ru\r\neducation.rzd.ru\r\neducationglobal.afisha.ru\r\neduprof.mos.ru\r\neduroam.avito.ru\r\nedwin.avito.ru\r\nedwinbennett.29028.yandex.ru\r\nee.avito.ru\r\nee1a279fb674487c92b5c8b78500a217-clt.ops.beeline.ru\r\need-dialog-messenger-ift.online.sberbank.ru\r\need-dialog-messenger-psi.online.sberbank.ru\r\need-dialog-messenger.online.sberbank.ru\r\needition.avito.ru\r\neee.avito.ru\r\neem-dialog-messenger-ift.online.sberbank.ru\r\neem-dialog-messenger-psi.online.sberbank.ru\r\neem-dialog-messenger.online.sberbank.ru\r\neeshe.test.ivi.ru\r\nef.avito.ru\r\neffect.habr.com\r\nefimov.1992.yandex.ru\r\nefir.genproc.gov.ru\r\nefir.m24.ru\r\neflscore.sovcombank.ru\r\nefms.tinkoff.ru\r\neforce.avito.ru\r\neform.avito.ru\r\neforms.avito.ru\r\nefp19.rosatom.ru\r\nefr.rshb.ru\r\nefs.sberbank.ru\r\nefspsi.sberbank.ru\r\nefx-demo.rosbank.ru\r\neg.avito.ru\r\neg.yandex.ru\r\negain.rosbank.ru\r\negas.sakha.gov.ru\r\negcdn.avito.ru\r\nege.avito.ru\r\nege.yandex.ru\r\nege2023.iz.ru\r\negg.mail.ru\r\negis.sakha.gov.ru\r\negitim.avito.ru\r\negiveext.worldbank.org\r\negiveextdev.worldbank.org\r\negiveextqa.worldbank.org\r\negmsadrms201.eg.ad.worldbank.org\r\nego.avito.ru\r\negov.avito.ru\r\negresados.avito.ru\r\negrms.worldbank.org\r\negrmsqa.worldbank.org\r\negroupware.avito.ru\r\negw.avito.ru\r\negw.open.ru\r\negw01.open.ru\r\negw02.open.ru\r\negwmntr.open.ru\r\negwtest.open.ru\r\negypt.avito.ru\r\negypt.dev.kp.ru\r\neh.cs7777.vk.com\r\nehealth.avito.ru\r\nehnergiya-zdorovya.lady.mail.ru\r\nehost.open.ru\r\nehost1.open.ru\r\nehost2.open.ru\r\nehp.feedback.rosatom.ru\r\nehr.avito.ru\r\nehsan.avito.ru\r\nehz.feedback.rosatom.ru\r\nei.avito.ru\r\neias.fas.gov.ru\r\neidos.avito.ru\r\neie.avito.ru\r\neiger.avito.ru\r\neinform.council.gov.ru\r\neinstein.avito.ru\r\neinstitute.worldbank.org\r\neip.avito.ru\r\neir.rosreestr.gov.ru\r\neis.avito.ru\r\neis.mon.gov.ru\r\neis.online.sberbank.ru\r\neistest.online.sberbank.ru\r\nejd.gosuslugi.ru\r\nejevika.mail.ru\r\nejournal.avito.ru\r\nejournals.avito.ru\r\nejsihccoupfqzqvur.hh.ru\r\nek-cat6506-gw.avito.ru\r\nek.avito.ru\r\nek.vtb.ru\r\neka.babyblog.ru\r\nekaplun.ing.k8s.dev.ivi.ru\r\nekaterinburg.afisha.ru\r\nekaterinburg.avito.ru\r\nekaterinburg.beeline.ru\r\nekaterinburg.club.dns-shop.ru\r\nekaterinburg.dns-shop.ru\r\nekaterinburg.drom.ru\r\nekaterinburg.hh.ru\r\nekaterinburg.lemanapro.ru\r\nekaterinburvg.hh.ru\r\nekatrrinburg.dns-shop.ru\r\nekb-c60.tass.ru\r\nekb-dmz01.tass.ru\r\nekb-gw01.tass.ru\r\nekb.avito.ru\r\nekb.beeline.ru\r\nekb.rbc.ru\r\nekb.video.rbc.ru\r\nekburg.tutu.ru\r\nekmp-a-51.rzd.ru\r\nekmp.rzd.ru\r\neko-trans.57.yandex.ru\r\neko.avito.ru\r\nekonayka.leasing.rshb.ru\r\nekonika.youdo.com\r\nekoniva-vrn.review-k8s.aif.ru\r\nekonomi.avito.ru\r\nekotorg.1.yandex.ru\r\neks.aws.tp.mvideo.ru\r\neks.demo-aws.tp.mvideo.ru\r\neks.infra-test.aws.mvideo.ru\r\neks.kostroma.gov.ru\r\neks.test.cs-aws.mvideo.ru\r\neks.testing.aws.mvideo.ru\r\neks.tp-dev.aws.mvideo.ru\r\neks.tp-web.aws.mvideo.ru\r\neks.web-staging.aws.mvideo.ru\r\neks.web.prod.aws.tp.mvideo.ru\r\neks.web.stage.aws.tp.mvideo.ru\r\neks.web.staging2.aws.tp.mvideo.ru\r\nekspert.yandex.ru\r\nekt.tele2.ru\r\nekt1.companion.tele2.ru\r\nekt2.companion.tele2.ru\r\nel-market.vtb.ru\r\nel.avito.ru\r\nelabuga.babyblog.ru\r\nelaine.avito.ru\r\nelan.avito.ru\r\nelara.avito.ru\r\nelastic-01.tech.boards.mchs.ru\r\nelastic-face.meduza.io\r\nelastic.avito.ru\r\nelbrus.yandex.ru\r\nelbrusetokavkaz.tass.ru\r\nelc.avito.ru\r\neldikan.sakha.gov.ru\r\neldorado.avito.ru\r\neleanor.avito.ru\r\nelearn.avito.ru\r\nelearn.beeline.ru\r\nelearning.avito.ru\r\nelearning.megafon.ru\r\nelec.avito.ru\r\nelecstat.mos.ru\r\nelection.avito.ru\r\nelections.avito.ru\r\nelections.gosuslugi.ru\r\nelections.gslb.gosuslugi.ru\r\nelections2018.tass.ru\r\nelectra.avito.ru\r\nelectric.avito.ru\r\nelectro.avito.ru\r\nelectron.avito.ru\r\nelectronics.avito.ru\r\nelegance.avito.ru\r\nelegant.avito.ru\r\nelektro.avito.ru\r\nelektroset.1.yandex.ru\r\nelemash.feedback.rosatom.ru\r\nelement.avito.ru\r\nelement.mail.ru\r\nelement.yandex.ru\r\nelement47.rutube.ru\r\nelements.yandex.ru\r\nelena.avito.ru\r\nelephant.avito.ru\r\nelets.dns-shop.ru\r\neleven.avito.ru\r\nelf.sovcombank.ru\r\nelf2.mail.ru\r\nelgg.avito.ru\r\neli.avito.ru\r\nelias.avito.ru\r\nelib.avito.ru\r\nelibrary.avito.ru\r\nelibrary.worldbank.org\r\nelijah.avito.ru\r\nelis.avito.ru\r\nelisa.avito.ru\r\nelista.home.megafon.ru\r\nelista.lemanapro.ru\r\nelista.mts.ru\r\nelisto02e.mt.yandex.ru\r\nelite.avito.ru\r\nelizabeth-ii.tass.ru\r\nelizaveta-ii.tass.ru\r\nelk.avito.ru\r\nelk.beeline.ru\r\nelk.csut.mchs.ru\r\nelka-dobra.life.ru\r\nelka.life.ru\r\nelka.tele2.ru\r\nelka2015.gazeta.ru\r\nellie.avito.ru\r\nelma-chizhik-stage.x5.ru\r\nelma.avito.ru\r\nelma.sdesk-stage-1.salt.x5.ru\r\nelmatest-minio.interfax.ru\r\nelmatest-mongo.interfax.ru\r\nelmatest-onlyoffice.interfax.ru\r\nelmatest-pg.interfax.ru\r\nelmatest-pgaudit.interfax.ru\r\nelmatest-rabbitmq.interfax.ru\r\nelmatest.interfax.ru\r\nelmer.avito.ru\r\nelmo.avito.ru\r\neln.test.emias.mos.ru\r\nelnino.avito.ru\r\nelnur.2019.yandex.ru\r\nelo.avito.ru\r\nelp.worldbank.org\r\nelpaso.avito.ru\r\nelrepo-mirror.rbc.ru\r\nelrond.avito.ru\r\nels.avito.ru\r\nels.beeline.ru\r\nels01f.elliptics.music.dev.yandex.ru\r\nels02f.elliptics.music.dev.yandex.ru\r\nelsa.avito.ru\r\nelsa.mail.ru\r\nelton.avito.ru\r\nelvis.avito.ru\r\nelysium.avito.ru\r\nem.avito.ru\r\nem.kommersant.ru\r\nemail-notifications-sendsay-webhooks-qa.tinkoff.ru\r\nemail.00.yandex.ru\r\nemail.2gis.ru\r\nemail.3agon.yandex.ru\r\nemail.avito.ru\r\nemail.domclick.ru\r\nemail.email.daily.afisha.ru\r\nemail.garant.ru\r\nemail.hh.ru\r\nemail.info.2gis.ru\r\nemail.kino-teatr.ru\r\nemail.kommersant.ru\r\nemail.lk.otello.2gis.ru\r\nemail.magnit.ru\r\nemail.newsletters.afisha.ru\r\nemail.ok.ru\r\nemail.open.ru\r\nemail.rbc.ru\r\nemail.reg.alfabank.ru\r\nemail.ria.ru\r\nemail.rk.gov.ru\r\nemail.rosbank.ru\r\nemail.rshb.ru\r\nemail.rtk-holding.ru\r\nemail.who.int\r\nemail1.avito.ru\r\nemail1.sber.ru\r\nemail1.sberbank.ru\r\nemail10.sber.ru\r\nemail10.sberbank.ru\r\nemail11.sber.ru\r\nemail11.sberbank.ru\r\nemail12.sber.ru\r\nemail12.sberbank.ru\r\nemail13.sber.ru\r\nemail13.sberbank.ru\r\nemail14.sberbank.ru\r\nemail15.sberbank.ru\r\nemail16.sberbank.ru\r\nemail2.avito.ru\r\nemail2.kommersant.ru\r\nemail2.sber.ru\r\nemail2.sberbank.ru\r\nemail3.avito.ru\r\nemail3.sber.ru\r\nemail3.sberbank.ru\r\nemailadmin.avito.ru\r\nemailer.avito.ru\r\nemailing.avito.ru\r\nemailmarketing.avito.ru\r\nemails.avito.ru\r\nemails.tbank.ru\r\nemails.tinkoff.ru\r\nemails.x5.ru\r\nemall.avito.ru\r\neman.avito.ru\r\nemarketing.avito.ru\r\nemba.avito.ru\r\nembed.avito.ru\r\nembed.life.ru\r\nemc-hotel.fas.gov.ru\r\nemc.avito.ru\r\nemc.fas.gov.ru\r\nemc.lenta.ru\r\nemd.avito.ru\r\nemeeting.worldbank.org\r\nemeetingdev.worldbank.org\r\nemeetingqa.worldbank.org\r\nemeetings.worldbank.org\r\nemeetingstg.worldbank.org\r\nemerald.avito.ru\r\nemerald.mail.ru\r\nemercom28-proxy.28.mchs.gov.ru\r\nemergency.avito.ru\r\nemergency.dev.iiot.gov.ru\r\nemergency.iiot.gov.ru\r\nemg.avito.ru\r\nemias.mos.ru\r\nemilia.avito.ru\r\nemily.avito.ru\r\neminem.avito.ru\r\nemkt.avito.ru\r\neml.mts.ru\r\nemltr.2gis.ru\r\nemm.avito.ru\r\nemm.magnit.ru\r\nemm.sberbank.ru\r\nemm.x5.ru\r\nemma.avito.ru\r\nemmanuel.avito.ru\r\nemmy.avito.ru\r\nemo.avito.ru\r\nemoney.avito.ru\r\nemotion.avito.ru\r\nemp-anketa.alfabank.ru\r\nemp-lead.alfabank.ru\r\nemp-lk.alfabank.ru\r\nemp-office.sberbank.ru\r\nemp.avito.ru\r\nemp.mos.ru\r\nemperor.avito.ru\r\nempire.avito.ru\r\nempire.film.ru\r\nempleo.avito.ru\r\nemploi.avito.ru\r\nemployee-app.magnit.ru\r\nemployee.auth.lemanapro.ru\r\nemployee.avito.ru\r\nemployer-reviews-front.hh.ru\r\nemployment.avito.ru\r\nemprego.avito.ru\r\nempresas.avito.ru\r\nempty.avito.ru\r\nemr.avito.ru\r\nemrklc.06.yandex.ru\r\nemro.who.int\r\nems.avito.ru\r\nems1.avito.ru\r\nemto277627.avito.ru\r\nemu.avito.ru\r\nen.avito.ru\r\nen.corp.mail.ru\r\nen.fas.gov.ru\r\nen.film.ru\r\nen.flag.kremlin.ru\r\nen.forum4.km.duma.gov.ru\r\nen.gazeta.ru\r\nen.intermuseum.culture.ru\r\nen.invest.khv.gov.ru\r\nen.iz.ru\r\nen.kino-teatr.ru\r\nen.komitet2-1.km.duma.gov.ru\r\nen.komitet2-15.km.duma.gov.ru\r\nen.komitet2-19.km.duma.gov.ru\r\nen.komitet2-20.km.duma.gov.ru\r\nen.komitet2-22.km.duma.gov.ru\r\nen.komitet2-3.km.duma.gov.ru\r\nen.komitet2-4.km.duma.gov.ru\r\nen.komitet2-7.km.duma.gov.ru\r\nen.komitet2-8.km.duma.gov.ru\r\nen.komitet2-9.km.duma.gov.ru\r\nen.komitet29.km.duma.gov.ru\r\nen.komitet5.km.duma.gov.ru\r\nen.kremlin.ru\r\nen.letters.kremlin.ru\r\nen.litres.ru\r\nen.mchs.gov.ru\r\nen.mchs.ru\r\nen.meduza.io\r\nen.moneyfbapp.yandex.ru\r\nen.new.fsa.gov.ru\r\nen.old.mchs.ru\r\nen.putin.kremlin.ru\r\nen.redesign.film.ru\r\nen.special.kremlin.ru\r\nen.special.letters.kremlin.ru\r\nen.sports.ru\r\nen.szrf.km.duma.gov.ru\r\nen.tele2.ru\r\nen.test.mchs.ru\r\nenaction.garant.ru\r\nenakievo.gosuslugi.ru\r\nenc.drom.ru\r\nenc.yandex.ru\r\nencashment.sberbank.ru\r\nencoder.avito.ru\r\nencoder1.mail.ru\r\nencoder10.mail.ru\r\nencoder11.mail.ru\r\nencoder12.mail.ru\r\nencoder13.mail.ru\r\nencoder14.mail.ru\r\nencoder15.mail.ru\r\nencoder16.mail.ru\r\nencoder17.mail.ru\r\nencoder18.mail.ru\r\nencoder19.mail.ru\r\nencoder2.mail.ru\r\nencoder20.mail.ru\r\nencoder21.mail.ru\r\nencoder22.mail.ru\r\nencoder23.mail.ru\r\nencoder24.mail.ru\r\nencoder25.mail.ru\r\nencoder26.mail.ru\r\nencoder27.mail.ru\r\nencoder28.mail.ru\r\nencoder29.mail.ru\r\nencoder3.mail.ru\r\nencoder30.mail.ru\r\nencoder31.mail.ru\r\nencoder32.mail.ru\r\nencoder33.mail.ru\r\nencoder34.mail.ru\r\nencoder35.mail.ru\r\nencoder36.mail.ru\r\nencoder37.mail.ru\r\nencoder38.mail.ru\r\nencoder39.mail.ru\r\nencoder4.mail.ru\r\nencoder40.mail.ru\r\nencoder41.mail.ru\r\nencoder42.mail.ru\r\nencoder43.mail.ru\r\nencoder44.mail.ru\r\nencoder45.mail.ru\r\nencoder46.mail.ru\r\nencoder47.mail.ru\r\nencoder49.mail.ru\r\nencoder5.mail.ru\r\nencoder51.i.mail.ru\r\nencoder52.i.mail.ru\r\nencoder53.i.mail.ru\r\nencoder54.i.mail.ru\r\nencoder6.mail.ru\r\nencoder7.mail.ru\r\nencoder8.mail.ru\r\nencoder9.mail.ru\r\nencoderext11.i.mail.ru\r\nencoderext12.i.mail.ru\r\nencoderext13.i.mail.ru\r\nencoderext14.i.mail.ru\r\nencoderext20.i.mail.ru\r\nencoderext21.i.mail.ru\r\nencoderext22.i.mail.ru\r\nencoderext23.i.mail.ru\r\nencoderext25.i.mail.ru\r\nencoderext4.i.mail.ru\r\nencore.avito.ru\r\nencrypt.avito.ru\r\nencuesta.avito.ru\r\nencuestas.avito.ru\r\nencyber.sports.ru\r\nencycl.yandex.ru\r\nencyclopedia.yandex.ru\r\nendeavor.avito.ru\r\nendeavour.avito.ru\r\nendor.avito.ru\r\nendpoint.avito.ru\r\nendymion.avito.ru\r\nenem.drom.ru\r\nenergobank.credit-registry.nalog.ru\r\nenergotransbank.credit-registry.nalog.ru\r\nenergy.avito.ru\r\nenergy.beeline.ru\r\nenergy2019.vedomosti.ru\r\nenergyhub.roseltorg.ru\r\nenergyserbia.life.ru\r\nenet.avito.ru\r\nenet1.avito.ru\r\nenews.avito.ru\r\nenfield.spb.aif.ru\r\neng-demo.garant.ru\r\neng-placesapi.avito.ru\r\neng.avito.ru\r\neng.constitution.kremlin.ru\r\neng.flag.kremlin.ru\r\neng.garant.ru\r\neng.genproc.gov.ru\r\neng.kremlin.ru\r\neng.letters.kremlin.ru\r\neng.nalog.ru\r\neng.news.kremlin.ru\r\neng.putin.kremlin.ru\r\neng.rzd.ru\r\neng.special.kremlin.ru\r\neng.state.kremlin.ru\r\neng.uawww.chechnya.gov.ru\r\nengage.avito.ru\r\nengels.avito.ru\r\nengels.dns-shop.ru\r\nengels.drom.ru\r\nengine.avito.ru\r\nengineering.avito.ru\r\nengland.lenta.ru\r\nenglish.avito.ru\r\nenglish.rosatom.ru\r\nenigma.avito.ru\r\nenikolaev.ing.k8s.dev.ivi.ru\r\nenisejsk-r04.gosweb.gosuslugi.ru\r\nenjoycodecs.avito.ru\r\nenjoydigitalcodecs.avito.ru\r\nenjoyfreecodecs.avito.ru\r\nenjoylife.avito.ru\r\nenjoylivecodecs.avito.ru\r\nenjoymediacodecs.avito.ru\r\nenjoymediafile.avito.ru\r\nenjoymediafileinc.avito.ru\r\nenjoymediafiles.avito.ru\r\nenjoymediafilesinc.avito.ru\r\nenjoynewcodecs.avito.ru\r\nenjoythiscodecs.avito.ru\r\nenketo.afro.who.int\r\nenlace.avito.ru\r\nenms.demo.megafon.ru\r\nenplus.life.ru\r\nenpm4zgmak9kzzn0.gkh.hab.aif.ru\r\nenq.avito.ru\r\nenquete.avito.ru\r\nenquetes.avito.ru\r\nenrichment.tinkoff.ru\r\nenroll.avito.ru\r\nens.avito.ru\r\nens.mkb.ru\r\nens2.mail.ru\r\nens3.mail.ru\r\nenseo.play.max.com\r\nent.avito.ru\r\nenter.avito.ru\r\nenterprise.api-maps.yandex.ru\r\nenterprise.avito.ru\r\nenterprise.geocode-maps.yandex.ru\r\nenterprise.static-maps.yandex.ru\r\nenterpriseenrollment.mdm.beeline.ru\r\nenterpriseenrollment.tass.ru\r\nenterpriseenrollment.worldbank.org\r\nenterpriseregistration.avito.ru\r\nenterpriseregistration.rosbank.ru\r\nenterpriseregistration.sber.ru\r\nenterpriseregistration.sberbank.ru\r\nentertain.avito.ru\r\nentertainment.avito.ru\r\nentest.avito.ru\r\nentrance1.mts.ru\r\nentrance2.mts.ru\r\nentrance3.mts.ru\r\nentrance4.mts.ru\r\nentrepreneur.avito.ru\r\nentrepreneurs.avito.ru\r\nentry.avito.ru\r\nenv.avito.ru\r\nenv.datacollect.iarc.who.int\r\nenvbranch.test.euronews.com\r\nenvios.avito.ru\r\nenvironment.avito.ru\r\nenvy.avito.ru\r\nenzo.avito.ru\r\neo.avito.ru\r\neo.gkreg.rk.gov.ru\r\neoe.avito.ru\r\neoffice.avito.ru\r\neoffice6-dev1.mos.ru\r\neoi.rzd.ru\r\neol.avito.ru\r\neon.avito.ru\r\neos-sp-test.mkb.ru\r\neos.avito.ru\r\neosk.rosatom.ru\r\neowyn.avito.ru\r\nep.avito.ru\r\nep.gosuslugi.ru\r\nep.roseltorg.ru\r\nepa.api.vtb.ru\r\nepage.avito.ru\r\nepaper.avito.ru\r\nepay.avito.ru\r\nepayment.avito.ru\r\nepc.tinkoff.ru\r\nepermina.ing.k8s.dev.ivi.ru\r\nepg.avito.ru\r\nepgu.gosuslugi.ru\r\nepgu.ot.gov.ru\r\nepi.avito.ru\r\nepic.avito.ru\r\nepidemic.life.ru\r\neplayer.megafon.ru\r\neplus.avito.ru\r\nepm.avito.ru\r\nepo.avito.ru\r\nepokdf.mail.ru\r\neportal.avito.ru\r\neportal.magnit.ru\r\neportfolio.avito.ru\r\nepost.avito.ru\r\neposta.avito.ru\r\nepp.avito.ru\r\nepp.genproc.gov.ru\r\nepp.worldbank.org\r\nepq.worldbank.org\r\nepr.afro.who.int\r\neprints.avito.ru\r\nepro.avito.ru\r\neproc.avito.ru\r\neps.ach.gov.ru\r\neps.avito.ru\r\nepsilon.avito.ru\r\neqmgmt.fas.gov.ru\r\neqms2.fas.gov.ru\r\neqms3.fas.gov.ru\r\nequinox.avito.ru\r\neqvi.vedomosti.ru\r\ner.avito.ru\r\ner.mis.zdrav.tomsk.gov.ru\r\nera.avito.ru\r\neragon.avito.ru\r\nerasmus.avito.ru\r\nerato.avito.ru\r\nerbium.avito.ru\r\nerc-uat.who.int\r\nerc.avito.ru\r\nerc.who.int\r\nerdschool.gosuslugi.ru\r\neremin.dev.mk.ru\r\neremin.dev.www.mk.ru\r\neric.avito.ru\r\nerica.avito.ru\r\nericsson.avito.ru\r\nerik.avito.ru\r\nerika.avito.ru\r\neris.avito.ru\r\nerm.mts.ru\r\nermmorn.kino-teatr.ru\r\nernasd.mail.ru\r\nernesto.avito.ru\r\nernicompany.tiu.ru\r\nernie.avito.ru\r\nero.avito.ru\r\neroom.avito.ru\r\neros.avito.ru\r\nerotika.gambit.vzhukov.ing.k8s.dev.ivi.ru\r\nerotika.gambit10.test.ivi.ru\r\nerotika.gambit11.test.ivi.ru\r\nerotika.gambit12.test.ivi.ru\r\nerotika.gambit13.test.ivi.ru\r\nerotika.gambit14.test.ivi.ru\r\nerotika.gambit15.test.ivi.ru\r\nerotika.gambit2.test.ivi.ru\r\nerotika.gambit3.test.ivi.ru\r\nerotika.gambit4.test.ivi.ru\r\nerotika.gambit5.test.ivi.ru\r\nerotika.gambit6.test.ivi.ru\r\nerotika.gambit7.test.ivi.ru\r\nerotika.gambit8.test.ivi.ru\r\nerotika.gambit9.test.ivi.ru\r\nerotika.test.ivi.ru\r\nerp.avito.ru\r\nerp.kino-teatr.ru\r\nerr.apteka.ru\r\nerr.avito.ru\r\nerr.lenta.ru\r\nerr.zdorovie-shkolnika.spb.aif.ru\r\nerrand-api-demo.demo.mdrive.magnit.ru\r\nerrand-api-demo.mdrive.magnit.ru\r\nerrand-api.mdrive.magnit.ru\r\nerratum-test2.yandex.ru\r\nerratum-test4.yandex.ru\r\nerratum-test5.yandex.ru\r\nerratum.lenta.ru\r\nerratum1-00.yandex.ru\r\nerratum5-00.yandex.ru\r\nerratum6-00.yandex.ru\r\nerratum7-00.yandex.ru\r\nerror.avito.ru\r\nerror.kinopoisk.ru\r\nerrors.avito.ru\r\nerwin.avito.ru\r\neryabets.ing.k8s.dev.ivi.ru\r\nes-bi.gosuslugi.ru\r\nes-demo.gosuslugi.ru\r\nes-demo1.gosuslugi.ru\r\nes-filters-dev.k8s.rg.ru\r\nes-filters-production.k8s.rg.ru\r\nes-filters-stage.k8s.rg.ru\r\nes-filters.k8s.rg.ru\r\nes-reports.gosuslugi.ru\r\nes.avito.ru\r\nes.dprf.gov.ru\r\nes.euronews.com\r\nes.litres.ru\r\nes.livingit.euronews.com\r\nes.mail.ru\r\nes.redash.vedomosti.ru\r\nes.sberbank.ru\r\nesa-res.online.sberbank.ru\r\nesa-si-res.online.sberbank.ru\r\nesa.avito.ru\r\nesa.rzd.ru\r\nesales.avito.ru\r\nesb.dit.mos.ru\r\nesb.rgistest.rk.gov.ru\r\nesb.worldbank.org\r\nesbdev.worldbank.org\r\nesbstage.worldbank.org\r\nesbtest.worldbank.org\r\nesc.avito.ru\r\nescape.avito.ru\r\neschool.avito.ru\r\nescobar.avito.ru\r\nescoop.worldbank.org\r\nescrow.avito.ru\r\nesd.avito.ru\r\nesecure.rosbank.ru\r\nesed.sakha.gov.ru\r\neservice.avito.ru\r\neservices.avito.ru\r\neset-adm-region.rbc.ru\r\neset-proxy.rbc.ru\r\neset.avito.ru\r\nesf.avito.ru\r\nesg-index.rbc.ru\r\nesg-report.beeline.ru\r\nesg.nornickel.com\r\nesg.rbc.ru\r\nesgmanifest.2gis.ru\r\neshop.avito.ru\r\neshop.beeline.ru\r\nesi.avito.ru\r\nesia-dev.test.gosuslugi.ru\r\nesia-portal1.test.gosuslugi.ru\r\nesia-portal2.test.gosuslugi.ru\r\nesia.fsa.gov.ru\r\nesia.gosuslugi.ru\r\nesia.gslb.gosuslugi.ru\r\nesia.reports.rostelecom.ru\r\nesip.mos.ru\r\nesir.rosatom.ru\r\neski.avito.ru\r\neskk.cgu.mchs.ru\r\neskk.dev.cgu.iac.mchs.ru\r\neskk.pg.cgu.mchs.ru\r\nesl.avito.ru\r\neslides.iarc.who.int\r\nesm.apteka.ru\r\nesmdtpep.vtb.ru\r\nesmeralda.avito.ru\r\nesn.090.yandex.ru\r\nesnsi.gosuslugi.ru\r\nesnsi.test.gosuslugi.ru\r\neso.avito.ru\r\nesosulin.ing.k8s.dev.ivi.ru\r\nesp.avito.ru\r\nesp.fsvts.gov.ru\r\nesp.garant.ru\r\nesp.rosatom.ru\r\nespace.avito.ru\r\nespan.worldbank.org\r\nespana.avito.ru\r\nespanol.avito.ru\r\nespas.worldbank.org\r\nespasdev.worldbank.org\r\nespasqa.worldbank.org\r\nespasstg.worldbank.org\r\nespen.afro.who.int\r\nesper-ftp.rbc.ru\r\nesper.rbc.ru\r\nesport.mail.ru\r\nesport.megafon.ru\r\nesport.tele2.ru\r\nesports.avito.ru\r\nesports.avntg-03.cloud.mts.ru\r\nesports.mail.ru\r\nesports.s3.avntg-03.cloud.mts.ru\r\nespresso.avito.ru\r\nesr-psi.sberbank.ru\r\nesr.sberbank.ru\r\nesrdapp.worldbank.org\r\nesrdappdev.worldbank.org\r\nesrdappqa.worldbank.org\r\nesrdappstg.worldbank.org\r\nesrr-cggw-01.esrr.rzd.ru\r\nesrr-cggw-02.esrr.rzd.ru\r\ness.avito.ru\r\nessai.avito.ru\r\nesse.avito.ru\r\nessen.avito.ru\r\nessence.avito.ru\r\nessentuki-r07.gosweb.gosuslugi.ru\r\nest.avito.ru\r\nestadisticas.avito.ru\r\nestate-prod-3.salt.x5.ru\r\nestate.avito.ru\r\nestate.mts.ru\r\nestates.avito.ru\r\nesther.avito.ru\r\nestimator.estate.mts.ru\r\nesto.tomsk.gov.ru\r\nestolyarov.ing.k8s.dev.ivi.ru\r\nestonia.avito.ru\r\nestonia.babyblog.ru\r\nestore.avito.ru\r\nestrella.avito.ru\r\nesum.x5.ru\r\nesup-extranet.megafon.ru\r\nesupport.avito.ru\r\nesurv.afro.who.int\r\nesx.avito.ru\r\nesx1.avito.ru\r\nesx2.avito.ru\r\nesx3.avito.ru\r\nesx4.avito.ru\r\nesx5.avito.ru\r\nesx6.avito.ru\r\nesxi-ru-01.znak.com\r\nesxi.avito.ru\r\nesxi01.avito.ru\r\nesxi02.avito.ru\r\nesxi03.avito.ru\r\nesxi04.avito.ru\r\net.avito.ru\r\net.mail.ru\r\neta.api.2gis.ru\r\neta.avito.ru\r\netalent.worldbank.org\r\netalentdev.worldbank.org\r\netalentqa.worldbank.org\r\netalenttest.worldbank.org\r\netc.avito.ru\r\netcd-autotest.ing.k8s.dev.ivi.ru\r\neteam.worldbank.org\r\neteamca.worldbank.org\r\neteamdev.worldbank.org\r\neteamnew.worldbank.org\r\neteamnewdev.worldbank.org\r\neteamnewqa.worldbank.org\r\neteamnewstg.worldbank.org\r\neteamnewtst.worldbank.org\r\neteamqa.worldbank.org\r\netech.avito.ru\r\neternal.avito.ru\r\neternity.avito.ru\r\netherpad.avito.ru\r\nethics.avito.ru\r\neticket.avito.ru\r\netiket.beeline.ru\r\netl-rk08.gosuslugi.ru\r\netl.86.reports.rostelecom.ru\r\netls.ozon.ru\r\netn.vm.culture.ru\r\netna.avito.ru\r\netoile.avito.ru\r\netools.avito.ru\r\netorg-test.openbank.ru\r\netorussia-mesto.ren.tv\r\netp.roseltorg.ru\r\netp.rzd.ru\r\netp.smb.apim.psbank.ru\r\netp.smb.apimtst.psbank.ru\r\netpgp.rzd.ru\r\netripdisplay.worldbank.org\r\netripdisplaynew.worldbank.org\r\netripdisplayqa.worldbank.org\r\nets.avito.ru\r\nets.messenger.magnit.ru\r\nets01.rosatom.ru\r\netv.avito.ru\r\netzp.rzd.ru\r\neu.avito.ru\r\neu.cdn.avito.ru\r\neu.edge.avito.ru\r\neu.pool.avito.ru\r\neu.pool.zdorovie-shkolnika.spb.aif.ru\r\neu1.avito.ru\r\neu3rm.kino-teatr.ru\r\neuc1.prd.api.max.com\r\neuc1.stg.api.max.com\r\neucalyptus.avito.ru\r\neuclid.avito.ru\r\neugene.avito.ru\r\neugeniomochizuki.lenta.ru\r\neuler.avito.ru\r\neum.mapp-appl.mvideo.ru\r\neun1.prd.api.max.com\r\neureka.avito.ru\r\neuro.avito.ru\r\neuro.dev.kp.ru\r\neuro.gazeta.ru\r\neuro.who.int\r\neuro16widget.yandex.ru\r\neuro2008.avito.ru\r\neuro2008.lenta.ru\r\neuro2012.avito.ru\r\neuro2012.lenta.ru\r\neuro2016.kia.lenta.ru\r\neuro2024.premier.one\r\neurohealthobservatory.who.int\r\neuronews.staging.euronews.com\r\neuropa.avito.ru\r\neurope.avito.ru\r\neuropewest.longread.altai.aif.ru\r\neurotour.film.ru\r\neurovision.1tv.ru\r\neuterpe.avito.ru\r\neuw1.prd.api.max.com\r\neuw1.stg.api.max.com\r\nev.avito.ru\r\neva.avito.ru\r\neva.mail.ru\r\neval.avito.ru\r\nevaluation.avito.ru\r\nevans.avito.ru\r\nevasys.avito.ru\r\neve.avito.ru\r\nevent-chat.rosbank.ru\r\nevent-dispatcher.corp.tutu.ru\r\nevent-stream-api.magnit.ru\r\nevent.2gis.ru\r\nevent.avito.ru\r\nevent.rosbank.ru\r\nevent.rutube.ru\r\nevent.yandex.ru\r\neventos.avito.ru\r\nevents-old.yandex.ru\r\nevents.avito.ru\r\nevents.euronews.com\r\nevents.iarc.who.int\r\nevents.kommersant.ru\r\nevents.kremlin.ru\r\nevents.megafon.ru\r\nevents.project.tinkoff.ru\r\nevents.rbc.ru\r\nevents.sps.rosatom.ru\r\nevents.tass.ru\r\nevents.tutu.ru\r\nevents.vedomosti.ru\r\nevents.video.rambler.ru\r\nevents.wpro.who.int\r\nevents.yandex.ru\r\neventshow2016.vedomosti.ru\r\neventum.avito.ru\r\never.avito.ru\r\neverest.avito.ru\r\nevergreen.avito.ru\r\neverything.avito.ru\r\nevgen.095.yandex.ru\r\nevgeny.kazban3.0.yandex.ru\r\nevgeny.krasanoff.2017.yandex.ru\r\nevgenyi1208.9111.ru\r\nevil.avito.ru\r\nevision.avito.ru\r\nevklid.mail.ru\r\nevm.avito.ru\r\nevo-cert.rosbank.ru\r\nevo-test.rosbank.ru\r\nevo.avito.ru\r\nevo.rosbank.ru\r\nevoheroes.mail.ru\r\nevolution.avito.ru\r\nevotor-test.mkb.ru\r\nevp.avito.ru\r\new.avito.ru\r\new11111111111addtiti.test.euronews.com\r\new2414letsreworkthej.test.euronews.com\r\new2672jstotsadobe.test.euronews.com\r\new2672moveadobejstot.test.euronews.com\r\new2883apollocleaning.test.euronews.com\r\new2953perfcallearlyf.test.euronews.com\r\new3050integratethene.test.euronews.com\r\new3159changestylebut.test.euronews.com\r\new3159changestylebuttonreadmorebyloadmore.test.euronews.com\r\new3169relatedarticle.test.euronews.com\r\new3434sponsorlogotex.test.euronews.com\r\new3445tracktheadbloc.test.euronews.com\r\new3510avoidflushinge.test.euronews.com\r\new3553embedplaybutto.test.euronews.com\r\new3867classcsstoolti.test.euronews.com\r\new3870refactoclassco.test.euronews.com\r\new4023fpdinsidernouveaudatalayerp1.test.euronews.com\r\new4041connatixnotend.test.euronews.com\r\new4059faviconsupdate.test.euronews.com\r\new4065tsupgradeservi.test.euronews.com\r\new4078arsidebardedou.test.euronews.com\r\new4123modifyonerrori.test.euronews.com\r\new4125removetranslat.test.euronews.com\r\new4167euroviewsdiscl.test.euronews.com\r\new4185phpunit10.test.euronews.com\r\new4193a11yoptimizebr.test.euronews.com\r\new4210breakingnewsne.test.euronews.com\r\new4217weatherembedse.test.euronews.com\r\new4262donotindexembe.test.euronews.com\r\new4306socialloginoni.test.euronews.com\r\new4307apacheerrors.test.euronews.com\r\new4312jstsmenulangua.test.euronews.com\r\new4313jstsheaderscri.test.euronews.com\r\new4314tsmoveupgradej.test.euronews.com\r\new4319.test.euronews.com\r\new4323ymalimages13is.test.euronews.com\r\new4341toolsnewsettin.test.euronews.com\r\new4342sponsorlogoemp.test.euronews.com\r\new4342sponsorlogoemptyspacearoundforsomeimages.test.euronews.com\r\new4343newadvertising.test.euronews.com\r\new4344adcleanbasetwi.test.euronews.com\r\new4347aduseadstempla.test.euronews.com\r\new4348adfixnewwallpa.test.euronews.com\r\new4351implementinggr.test.euronews.com\r\new4352implementbombo.test.euronews.com\r\new4353adpsimplementg.test.euronews.com\r\new4354implementmoatd.test.euronews.com\r\new4354moatnewadverti.test.euronews.com\r\new4355reimplementmoa.test.euronews.com\r\new4356implementteads.test.euronews.com\r\new4373optimizefreefo.test.euronews.com\r\new4377updatetwitterx.test.euronews.com\r\new4380refactoringaut.test.euronews.com\r\new4385issuelcponpage.test.euronews.com\r\new4393adredesignstic.test.euronews.com\r\new4403articleredesig.test.euronews.com\r\new4407headerredesign.test.euronews.com\r\new4408displaytagscas.test.euronews.com\r\new4415businesscreati.test.euronews.com\r\new4417cherrytagpagec.test.euronews.com\r\new4433trranslationsupdatethem.test.euronews.com\r\new4434insidergestion.test.euronews.com\r\new4436videossitemaps.test.euronews.com\r\new4439gigyappaddgigu.test.euronews.com\r\new4446articlelayoutm.test.euronews.com\r\new4446articlelayoutmobilewithinterscroller.test.euronews.com\r\new4448articleaddeupo.test.euronews.com\r\new4450bnlabelissueon.test.euronews.com\r\new4450bnlabelissueonlandings.test.euronews.com\r\new4454createsomerout.test.euronews.com\r\new4455handleurlretur.test.euronews.com\r\new4456pooolintegrate.test.euronews.com\r\new4457fixpfpcontroll.test.euronews.com\r\new4458removearticlec.test.euronews.com\r\new4459newblockbanner.test.euronews.com\r\new4460newroutepoooli.test.euronews.com\r\new4461lazyloadvuukle.test.euronews.com\r\new4462vuukleactivate.test.euronews.com\r\new4464cachereduceacc.test.euronews.com\r\new4464cachereduceaccountpages.test.euronews.com\r\new4465webpackenvs.test.euronews.com\r\new4466fpdaddmsnonlog.test.euronews.com\r\new4467jsruntimeenvs.test.euronews.com\r\new4472gigyappaddappv.test.euronews.com\r\new4473gigyaaddlangua.test.euronews.com\r\new4474videovideoouts.test.euronews.com\r\new4475autoplaylaucnh.test.euronews.com\r\new4477refactocsstwig.test.euronews.com\r\new4478playerneeddoub.test.euronews.com\r\new4482noindexwireson.test.euronews.com\r\new4486addspecificlas.test.euronews.com\r\new4488hrlot120240117.test.euronews.com\r\new4488hrlot120240207.test.euronews.com\r\new4488hrlot120240214.test.euronews.com\r\new4488hrlot1pointsui.test.euronews.com\r\new4488hrmvp20240221.test.euronews.com\r\new4490hrarbo.test.euronews.com\r\new4492businesschange.test.euronews.com\r\new4493redirectioneup.test.euronews.com\r\new4499brandedarticle.test.euronews.com\r\new4500gaminsider.test.euronews.com\r\new4502gigyaaddlangua.test.euronews.com\r\new4506healthredirect.test.euronews.com\r\new4515fpdaddbusiness.test.euronews.com\r\new4516fpddatalayerfl.test.euronews.com\r\new4517fpdaddnlhealth.test.euronews.com\r\new4518fpdaddnewnleup.test.euronews.com\r\new4519gigyacleancook.test.euronews.com\r\new4520sementicupdate.test.euronews.com\r\new4521a11yfixdutitre.test.euronews.com\r\new4522hr1stlevellayo.test.euronews.com\r\new4523seotwittermeta.test.euronews.com\r\new4526fpdremembermes.test.euronews.com\r\new4527headerredesign.test.euronews.com\r\new4528hrmenusidebarl.test.euronews.com\r\new4529headerredesign.test.euronews.com\r\new4530hrlot1componen.test.euronews.com\r\new4533headerredesign.test.euronews.com\r\new4535imagewidthof12.test.euronews.com\r\new4536hrpoc1topleade.test.euronews.com\r\new4536hrpoc2topleade.test.euronews.com\r\new4541headerredesign.test.euronews.com\r\new4542headerredesign.test.euronews.com\r\new4543headerredesign.test.euronews.com\r\new4544headerredesign.test.euronews.com\r\new4547hrlot1submenul.test.euronews.com\r\new4548headerredesign.test.euronews.com\r\new4549headerredesign.test.euronews.com\r\new4557php83.test.euronews.com\r\new4558symfony7.test.euronews.com\r\new4560articleredesig.test.euronews.com\r\new4562gigyaaddlangua.test.euronews.com\r\new4563bodyclasslistb.test.euronews.com\r\new4569swipealternate.test.euronews.com\r\new4573hrlot1componen.test.euronews.com\r\new4574headerredesign.test.euronews.com\r\new4575gigyaissuetrac.test.euronews.com\r\new4577fixgptloadingc.test.euronews.com\r\new4579usersegmentati.test.euronews.com\r\new4580toolsnewdesign.test.euronews.com\r\new4583switchliveurls.test.euronews.com\r\new4586articleaddeupo.test.euronews.com\r\new4589noaddcallsafte.test.euronews.com\r\new4591changesitemaps.test.euronews.com\r\new4592businessoutrai.test.euronews.com\r\new4593healthsitemapu.test.euronews.com\r\new4595healthaddoutbr.test.euronews.com\r\new4599useeveryloopco.test.euronews.com\r\new4600fixtestsandadd.test.euronews.com\r\new4601fpdcantredirec.test.euronews.com\r\new4604uselastpublish.test.euronews.com\r\new4606addaccountredi.test.euronews.com\r\new4609blockserror.test.euronews.com\r\new4610addsentryapm.test.euronews.com\r\new4611refactocsstwig.test.euronews.com\r\new4616chartbeatartic.test.euronews.com\r\new4618vuuklechangela.test.euronews.com\r\new4620bcseuroviewsin.test.euronews.com\r\new4622removelegacyht.test.euronews.com\r\new4624adsstickyfloor.test.euronews.com\r\new4625videonewadvert.test.euronews.com\r\new4630implementyield.test.euronews.com\r\new4631blockverticalt.test.euronews.com\r\new4634tagpagination.test.euronews.com\r\new4635augmentedbanne.test.euronews.com\r\new4637updatetranslat.test.euronews.com\r\new4640fpdaddlanguage.test.euronews.com\r\new4641bcshealthandeu.test.euronews.com\r\new4643adobeintegrate.test.euronews.com\r\new4644advertisingrei.test.euronews.com\r\new4645advertisingpsi.test.euronews.com\r\new4647iosexcludedeep.test.euronews.com\r\new4648augmentedbanne.test.euronews.com\r\new4649refactoadobeda.test.euronews.com\r\new4650fixbrandedinar.test.euronews.com\r\new4652didomievoltosh.test.euronews.com\r\new4654fixesgastronom.test.euronews.com\r\new4655bugwithspecial.test.euronews.com\r\new4656gigyafixprovid.test.euronews.com\r\new4660adp2refactowal.test.euronews.com\r\new4661fixautorefresh.test.euronews.com\r\new4662fixautorefresh.test.euronews.com\r\new4666headerredesign.test.euronews.com\r\new4673a11yreplaceari.test.euronews.com\r\new4674rgpddidomiembe.test.euronews.com\r\new4675hrlot2wallpape.test.euronews.com\r\new4683seodeletevideo.test.euronews.com\r\new4684seochangeartic.test.euronews.com\r\new4685deletevideoobj.test.euronews.com\r\new4691changearticlev.test.euronews.com\r\new4692invertmostread.test.euronews.com\r\new4693addanaccessibi.test.euronews.com\r\new4694breakingnewsrs.test.euronews.com\r\new4695translationsup.test.euronews.com\r\new4696tagonlyonepage.test.euronews.com\r\new4698hrlot1footerla.test.euronews.com\r\new4700hrlot1sidebars.test.euronews.com\r\new4703arenajustinhom.test.euronews.com\r\new4704articlepartner.test.euronews.com\r\new4715featuredprogra.test.euronews.com\r\new4717adnativokeyval.test.euronews.com\r\new4718hrblocklatests.test.euronews.com\r\new4719fixoffscreenad.test.euronews.com\r\new4720newadvertising.test.euronews.com\r\new4721headerredesign.test.euronews.com\r\new4722fixemailverifi.test.euronews.com\r\new4724adcleanparalla.test.euronews.com\r\new4725indexeddbandzo.test.euronews.com\r\new4727seoissueurlvid.test.euronews.com\r\new4734hrlot2submenuw.test.euronews.com\r\new4736tsfacebook.test.euronews.com\r\new4739healthaddimage.test.euronews.com\r\new4741fixerrors.test.euronews.com\r\new4742hrlot1miseenpl.test.euronews.com\r\new4747baseadunitwith.test.euronews.com\r\new4749canonicalpagen.test.euronews.com\r\new4752pooolwallretur.test.euronews.com\r\new4754labellabelmiss.test.euronews.com\r\new4757createentityga.test.euronews.com\r\new4758contextualdata.test.euronews.com\r\new4759serverdataserv.test.euronews.com\r\new4760datalayerserve.test.euronews.com\r\new4764servicedatainj.test.euronews.com\r\new4767tsdatalayerbui.test.euronews.com\r\new4768newslettereuel.test.euronews.com\r\new4769updatetrads.test.euronews.com\r\new4773seodeleteusele.test.euronews.com\r\new4774seomissingtime.test.euronews.com\r\new4775headernoindexd.test.euronews.com\r\new4781headerredesign.test.euronews.com\r\new4786inpmovecolumnf.test.euronews.com\r\new4792fixlogincontex.test.euronews.com\r\new4795seooptimsedesc.test.euronews.com\r\new4796fpdrefactorout.test.euronews.com\r\new4797retrievetherec.test.euronews.com\r\new4799hrbreakingnews.test.euronews.com\r\new4800hrlot1mainnava.test.euronews.com\r\new4801zodschemaforli.test.euronews.com\r\new4802fixisbreakingn.test.euronews.com\r\new4808fixindexeddbca.test.euronews.com\r\new4809hrverification.test.euronews.com\r\new4810refactobyebyel.test.euronews.com\r\new4811fpdegrapeshott.test.euronews.com\r\new4820fixdoublecallw.test.euronews.com\r\new4826fpdissuelitere.test.euronews.com\r\new4829advertisingp3h.test.euronews.com\r\new4835handleconsenta.test.euronews.com\r\new4836adobeajoutflag.test.euronews.com\r\new4838fixlogrenderer.test.euronews.com\r\new4843cleanconnatixi.test.euronews.com\r\new4844checkloginremo.test.euronews.com\r\new4846cssdeleteartic.test.euronews.com\r\new4847csscleandesend.test.euronews.com\r\new4848cssspecscleand.test.euronews.com\r\new4851cssdeletenorma.test.euronews.com\r\new4852increasejustin.test.euronews.com\r\new4856addirislivestr.test.euronews.com\r\new4857irisendpointar.test.euronews.com\r\new4859quickfixmoat.test.euronews.com\r\new4862navbarblockdev.test.euronews.com\r\new4863dynamicmenubui.test.euronews.com\r\new4864replacesportby.test.euronews.com\r\new4865menuaddeventst.test.euronews.com\r\new4866livecoverageri.test.euronews.com\r\new4870hrmvpdisablefo.test.euronews.com\r\new4871redirectdubdom.test.euronews.com\r\new4873adsonswipe.test.euronews.com\r\new4874fpddatalayerin.test.euronews.com\r\new4876pooolcsschange.test.euronews.com\r\new4877jobbiochangeli.test.euronews.com\r\new4880onlyallowgetme.test.euronews.com\r\new4883seocramergames.test.euronews.com\r\new4885hrsearchengine.test.euronews.com\r\new4886headerredesign.test.euronews.com\r\new4889reimplementtwi.test.euronews.com\r\new4891geoedgeupdateg.test.euronews.com\r\new4893hubpages.test.euronews.com\r\new4897weatherlanguag.test.euronews.com\r\new4903mediaobjectcol.test.euronews.com\r\new4905fixogimage.test.euronews.com\r\new4906twigupdateserv.test.euronews.com\r\new4911barrenowrulesu.test.euronews.com\r\new4925eventslinkedit.test.euronews.com\r\new4926changeconnatix.test.euronews.com\r\new4927missingvisible.test.euronews.com\r\new4932hrinpartnershe.test.euronews.com\r\new4934breadcrumbhome.test.euronews.com\r\new4935hrnomenumainin.test.euronews.com\r\new4944hrbuginvideola.test.euronews.com\r\new4952mpuxnewheaderf.test.euronews.com\r\new4953pooolquickwinc.test.euronews.com\r\new4954pooolcleancons.test.euronews.com\r\new4956pooolimplement.test.euronews.com\r\new4958pooolconsentwa.test.euronews.com\r\new4963cssoptimsremov.test.euronews.com\r\new4964sharebuttondoe.test.euronews.com\r\new4965changelazyload.test.euronews.com\r\new4967quiclfixadlazy.test.euronews.com\r\new4969gigyadatepicke.test.euronews.com\r\new4971cleanhottopic.test.euronews.com\r\new4972articleswipert.test.euronews.com\r\new4973hotfixsidebarm.test.euronews.com\r\new4974headersocialic.test.euronews.com\r\new4976wecannotscroll.test.euronews.com\r\new4977translationsth.test.euronews.com\r\new4984deleteeuronews.test.euronews.com\r\new4986headerincrease.test.euronews.com\r\new4988fixdefaultffbe.test.euronews.com\r\new4990fixheaderfindu.test.euronews.com\r\new4991fixhrloginnoti.test.euronews.com\r\new4992hrascrollbarap.test.euronews.com\r\new5001adblockrenamea.test.euronews.com\r\new5003reenabledidomi.test.euronews.com\r\new5005didomi.test.euronews.com\r\new5006gigyafuckbots.test.euronews.com\r\new5007justinimagesmi.test.euronews.com\r\new5012cleanfilesonco.test.euronews.com\r\new5015fixcomponentbr.test.euronews.com\r\new5018errortemplates.test.euronews.com\r\new5020cssadblockersr.test.euronews.com\r\new5021cleanremoveold.test.euronews.com\r\new5032managethemenav.test.euronews.com\r\new5033fpdhidemarketi.test.euronews.com\r\new5034hrtrendinginve.test.euronews.com\r\new5035deletecomponen.test.euronews.com\r\new5038fpdaddbomborad.test.euronews.com\r\new5039increaseservic.test.euronews.com\r\new5045menubuildertit.test.euronews.com\r\new5045menubuilderwor.test.euronews.com\r\new5046menuheaderthem.test.euronews.com\r\new5047menuheaderprog.test.euronews.com\r\new5049menuheadertagh.test.euronews.com\r\new5052articlefixalig.test.euronews.com\r\new5054bulletinstrang.test.euronews.com\r\new5057pooolprefetch.test.euronews.com\r\new5060cleanremovecod.test.euronews.com\r\new5061cleanremovecod.test.euronews.com\r\new5062cssmoveblocksc.test.euronews.com\r\new5067advertisingmul.test.euronews.com\r\new5068changeremember.test.euronews.com\r\new5069majtrads.test.euronews.com\r\new5070justinnotworki.test.euronews.com\r\new5073tweakadlazyval.test.euronews.com\r\new5077register.test.euronews.com\r\new5081fpddoubleicons.test.euronews.com\r\new5083hotfixwallpape.test.euronews.com\r\new5084adswallpapercl.test.euronews.com\r\new5085hotfixbreadcru.test.euronews.com\r\new5086issuedatepicke.test.euronews.com\r\new5089articlefontsgr.test.euronews.com\r\new5090hrapipartnersh.test.euronews.com\r\new5091cleancsscleanb.test.euronews.com\r\new5093otheradsthanou.test.euronews.com\r\new5095justinchangeth.test.euronews.com\r\new5096pixelai.test.euronews.com\r\new5098gigyaxcnilreme.test.euronews.com\r\new5100articleadaddin.test.euronews.com\r\new5103weathersaveonl.test.euronews.com\r\new5106headerswitchdi.test.euronews.com\r\new5111datalayercreat.test.euronews.com\r\new5113tsdatalayerres.test.euronews.com\r\new5115twigffsurlebou.test.euronews.com\r\new5117wallpapererror.test.euronews.com\r\new5120removejslazylo.test.euronews.com\r\new5121fixlateststori.test.euronews.com\r\new5124increaseadshoo.test.euronews.com\r\new5125fixremovecallt.test.euronews.com\r\new5126gigyalere.test.euronews.com\r\new5134displaynavbarw.test.euronews.com\r\new5137addspecificsur.test.euronews.com\r\new5138cssbasecssextr.test.euronews.com\r\new5139removeresetcss.test.euronews.com\r\new5140cssappcssdelet.test.euronews.com\r\new5141menuaddpodcast.test.euronews.com\r\new5143addadvertising.test.euronews.com\r\new5144fixliveembeder.test.euronews.com\r\new5146appjsxcsseffec.test.euronews.com\r\new5148appcsserrorpag.test.euronews.com\r\new5149cssappcsstospo.test.euronews.com\r\new5150appcssmixinetc.test.euronews.com\r\new5151appcssmovegall.test.euronews.com\r\new5154movecarouseljs.test.euronews.com\r\new5158mediaobjectfix.test.euronews.com\r\new5159refactocsstwig.test.euronews.com\r\new5161cssfixfooterpa.test.euronews.com\r\new5162advertisingp3t.test.euronews.com\r\new5165featureflippin.test.euronews.com\r\new5171didomixiconini.test.euronews.com\r\new5176notagsonpages.test.euronews.com\r\new5177vuuklelanguage.test.euronews.com\r\new5179changelinkurls.test.euronews.com\r\new5180addtimezoneona.test.euronews.com\r\new5184deletesearchpa.test.euronews.com\r\new5185jstotsloadwidg.test.euronews.com\r\new5186deleteispartne.test.euronews.com\r\new5189breakingnewspr.test.euronews.com\r\new5190jstotspixelscr.test.euronews.com\r\new5191cleanappjslega.test.euronews.com\r\new5194cleanenumverti.test.euronews.com\r\new5197unparsablestru.test.euronews.com\r\new5198changeembedtim.test.euronews.com\r\new5199justinarticlet.test.euronews.com\r\new5200cssxheaderpocn.test.euronews.com\r\new5202cloneappcssmov.test.euronews.com\r\new5210tagpaginationp.test.euronews.com\r\new5212cleanremoveold.test.euronews.com\r\new5219updatetranslat.test.euronews.com\r\new5231changecanonica.test.euronews.com\r\new5232seodeleteallth.test.euronews.com\r\new5233headerblocklat.test.euronews.com\r\new5268superbuilder.test.euronews.com\r\new5269blockprogramsl.test.euronews.com\r\new5271headeradjustla.test.euronews.com\r\new5277fixownembeds.test.euronews.com\r\new5283bulletincarous.test.euronews.com\r\new5284yieldbirdspeci.test.euronews.com\r\new5287articlemodifys.test.euronews.com\r\new5289pooolusesingle.test.euronews.com\r\new5290missingcidsons.test.euronews.com\r\new5291menubuilderlat.test.euronews.com\r\new5293pocwebpushinsi.test.euronews.com\r\new5296articlespacead.test.euronews.com\r\new5297footerapplythe.test.euronews.com\r\new5299customblockwit.test.euronews.com\r\new5300hotfixlazyload.test.euronews.com\r\new5301footer.test.euronews.com\r\new5303deleteoldheade.test.euronews.com\r\new5307articleremovep.test.euronews.com\r\new5308changehttpsche.test.euronews.com\r\new5316irisendpointar.test.euronews.com\r\new5318cssfixcsswater.test.euronews.com\r\new5320consentacrosss.test.euronews.com\r\new5321breakingnewsem.test.euronews.com\r\new5323fiximagelazylo.test.euronews.com\r\new5324tsxopentelemet.test.euronews.com\r\new5327fixflaguserlog.test.euronews.com\r\new5329useidforprogra.test.euronews.com\r\new5331blockadaptativ.test.euronews.com\r\new5332jstotsburnfree.test.euronews.com\r\new5333jstotsdeletelo.test.euronews.com\r\new5337applyprogramco.test.euronews.com\r\new5339dynamicheaderp.test.euronews.com\r\new5340jstotsburnmore.test.euronews.com\r\new5358missiingtitlea.test.euronews.com\r\new5360seoxcannonical.test.euronews.com\r\new5362addnoindex.test.euronews.com\r\new5363cleanoldpartne.test.euronews.com\r\new5366fixauthorprobl.test.euronews.com\r\new5367seoaddarticles.test.euronews.com\r\new5368seochangeh1whe.test.euronews.com\r\new5372blocbarrenowre.test.euronews.com\r\new5378swcjestandclea.test.euronews.com\r\new5380adsxcssadsslot.test.euronews.com\r\new5386reduceadhesion.test.euronews.com\r\new5389hotfixmainnavf.test.euronews.com\r\new5390connatix.test.euronews.com\r\new5391deleteprograml.test.euronews.com\r\new5391jstotsdeletepr.test.euronews.com\r\new5392movesportjsfro.test.euronews.com\r\new5394weatherissuewi.test.euronews.com\r\new5396euroenwskeymet.test.euronews.com\r\new5398bnitdoesntdisp.test.euronews.com\r\new5405loadmoreretour.test.euronews.com\r\new5406addadhookresol.test.euronews.com\r\new5408connatixxstick.test.euronews.com\r\new5409fixtimeoutfora.test.euronews.com\r\new5413missingstylesh.test.euronews.com\r\new5414sponsorpagexad.test.euronews.com\r\new5418pooolcssantiad.test.euronews.com\r\new5421gigyaforminput.test.euronews.com\r\new5423removeperforma.test.euronews.com\r\new5424justinisbroken.test.euronews.com\r\new54284r9g3w0t.avito.ru\r\new5429webcreateanadv.test.euronews.com\r\new5433fixinarticlead.test.euronews.com\r\new5443newsletterai.test.euronews.com\r\new5444gigyalogin.test.euronews.com\r\new5445fixerrorsapito.test.euronews.com\r\new5446pooolcsscookie.test.euronews.com\r\new5447cachelandingpa.test.euronews.com\r\new5448fix500errors.test.euronews.com\r\new5450nevertimeoutad.test.euronews.com\r\new5451revertyieldbir.test.euronews.com\r\new5451yieldbirdtagss.test.euronews.com\r\new5453articlepagecac.test.euronews.com\r\new5454adobedoublehit.test.euronews.com\r\new5456mediaobjectbul.test.euronews.com\r\new5457sportsresultsl.test.euronews.com\r\new5458simplifyallloc.test.euronews.com\r\new5459blockthemegrou.test.euronews.com\r\new5463optimizecssonb.test.euronews.com\r\new5465jstotsfootball.test.euronews.com\r\new5469adobemediastar.test.euronews.com\r\new5470restoreprod.test.euronews.com\r\new5476adddefaultimag.test.euronews.com\r\new5479dvdoubleverify.test.euronews.com\r\new5480apmoptimizefar.test.euronews.com\r\new5484laststepsforfo.test.euronews.com\r\new5486archivesretour.test.euronews.com\r\new5490addinformation.test.euronews.com\r\new5497xssvulnerabili.test.euronews.com\r\new5499archiveremoveu.test.euronews.com\r\new5504mentioninpartn.test.euronews.com\r\new5505addcontextuals.test.euronews.com\r\new5508fixcommaxkey.test.euronews.com\r\new5509.test.euronews.com\r\new5512csscleanandopt.test.euronews.com\r\new5513cssburnmixinty.test.euronews.com\r\new5517videodisplayis.test.euronews.com\r\new5521errorzodserver.test.euronews.com\r\new5522jstotsdeleteho.test.euronews.com\r\new5523renamexkey.test.euronews.com\r\new5526increaseyieldb.test.euronews.com\r\new5527addfreshkeywor.test.euronews.com\r\new5529tsxqualityfixo.test.euronews.com\r\new5530rtljustintitle.test.euronews.com\r\new5531fixadobedouble.test.euronews.com\r\new5532yieldbirdtimeo.test.euronews.com\r\new5533outbrainvsswip.test.euronews.com\r\new5536deletedoubleim.test.euronews.com\r\new5538upgradeliveram.test.euronews.com\r\new5540newimageserver.test.euronews.com\r\new5541playwrightmust.test.euronews.com\r\new5546addpolishvars.test.euronews.com\r\new5548footerbytoolsi.test.euronews.com\r\new5551yieldbirdfrack.test.euronews.com\r\new5554increasecachec.test.euronews.com\r\new5555addoutbraintom.test.euronews.com\r\new5564implementnonli.test.euronews.com\r\new5565nonliaddtagson.test.euronews.com\r\new5573breakingnewsem.test.euronews.com\r\new5574testsconnatix.test.euronews.com\r\new5579upgradebrowser.test.euronews.com\r\new5580connatixplayer.test.euronews.com\r\new5583addcustomerseg.test.euronews.com\r\new5585irisendpointar.test.euronews.com\r\new5586irisendpointar.test.euronews.com\r\new5588irisarticlelea.test.euronews.com\r\new5600adobeissuewith.test.euronews.com\r\new5605updaterobottxp.test.euronews.com\r\new5606adsxloadinginc.test.euronews.com\r\new5610polishsocialme.test.euronews.com\r\new5612issuewithwallp.test.euronews.com\r\new5616addirisapp.test.euronews.com\r\new5623usetradkeysfor.test.euronews.com\r\new5627seooptimizevid.test.euronews.com\r\new5628seochangenocom.test.euronews.com\r\new5632updatepolishda.test.euronews.com\r\new5635migratespecial.test.euronews.com\r\new5636adobeissueswit.test.euronews.com\r\new5637redirectioncon.test.euronews.com\r\new5638tsupgradetotyp.test.euronews.com\r\new5640editwellknowni.test.euronews.com\r\new5643errorsredirect.test.euronews.com\r\new5644outbrainconnat.test.euronews.com\r\new5648metatagsmultip.test.euronews.com\r\new5651dommediaobject.test.euronews.com\r\new5652adddev.test.euronews.com\r\new5652connatixplayer.test.euronews.com\r\new5656verticaltopsto.test.euronews.com\r\new5663europedeletemy.test.euronews.com\r\new5671insideruserema.test.euronews.com\r\new5673datalayerinsid.test.euronews.com\r\new5674datalayerinsid.test.euronews.com\r\new5677theswipedoesnt.test.euronews.com\r\new5688deleteplanding.test.euronews.com\r\new5689connatixxstick.test.euronews.com\r\new5690redirectionbru.test.euronews.com\r\new5691polishintegrat.test.euronews.com\r\new5692apixappprotect.test.euronews.com\r\new5695nonlivideo.test.euronews.com\r\new5696simplifyembedw.test.euronews.com\r\new5701adobexplayervi.test.euronews.com\r\new5705landingnewsyre.test.euronews.com\r\new5711updateadstxtca.test.euronews.com\r\new5712videospacesbet.test.euronews.com\r\new5716issuepfpios.test.euronews.com\r\new5724blockparamspon.test.euronews.com\r\new5732cacheweatherpa.test.euronews.com\r\new5733weatherxapifix.test.euronews.com\r\new5734weatherfixsurr.test.euronews.com\r\new5736reduceapicalls.test.euronews.com\r\new5745fixtheswiper.test.euronews.com\r\new5750videolinknotvi.test.euronews.com\r\new5757fpdmigratewatc.test.euronews.com\r\new5763breakingnewsha.test.euronews.com\r\new5765fixcontextuals.test.euronews.com\r\new5767upgradecachewe.test.euronews.com\r\new5774insidersegment.test.euronews.com\r\new5776titleliveartic.test.euronews.com\r\new5778removearchives.test.euronews.com\r\new5780programpagesla.test.euronews.com\r\new5781videofixdesign.test.euronews.com\r\new5782uselectionredi.test.euronews.com\r\new5783revertcachetim.test.euronews.com\r\new5796cleangigyacont.test.euronews.com\r\new5800optimizeredisk.test.euronews.com\r\new5808uxchangesticki.test.euronews.com\r\new5809weatherapiaddd.test.euronews.com\r\new5814updateoutbrain.test.euronews.com\r\new5816upgradeadblock.test.euronews.com\r\new5817weatherapiunex.test.euronews.com\r\new5819fixweatherembe.test.euronews.com\r\new5833trackingrefact.test.euronews.com\r\new5835cssxperfcreate.test.euronews.com\r\new5838cssxperfunbloc.test.euronews.com\r\new5840weatherbotsdet.test.euronews.com\r\new5841errorlogin.test.euronews.com\r\new5843addtimeoutsso.test.euronews.com\r\new5851adunitvertical.test.euronews.com\r\new5854polishjustindi.test.euronews.com\r\new5859geotranslation.test.euronews.com\r\new5864removeffdescri.test.euronews.com\r\new5875adunitthemefix.test.euronews.com\r\new5895updateautorefr.test.euronews.com\r\newa.avito.ru\r\neway.magnit.ru\r\neway1.magnit.ru\r\neway2.magnit.ru\r\neweb.avito.ru\r\newebapps.worldbank.org\r\newebappsqa.worldbank.org\r\newent.yandex.ru\r\newents.yandex.ru\r\newinsiderxsegmentsse.test.euronews.com\r\news.avito.ru\r\news.exchange.rosbank.ru\r\news.magnit.ru\r\news.rosbank.ru\r\news.sberbank.ru\r\nex-mbx001.open.ru\r\nex-mbx0010.open.ru\r\nex-mbx0011.open.ru\r\nex-mbx0012.open.ru\r\nex-mbx002.open.ru\r\nex-mbx003.open.ru\r\nex-mbx004.open.ru\r\nex-mbx005.open.ru\r\nex-mbx006.open.ru\r\nex-mbx007.open.ru\r\nex-mbx008.open.ru\r\nex-mbx009.open.ru\r\nex-mbx010.open.ru\r\nex-mbx011.open.ru\r\nex-mbx012.open.ru\r\nex-mbx013.open.ru\r\nex-mbx014.open.ru\r\nex-mbx015.open.ru\r\nex-mbx016.open.ru\r\nex-mbx017.open.ru\r\nex-mbx018.open.ru\r\nex-mbx019.open.ru\r\nex-mbx020.open.ru\r\nex.avito.ru\r\nex.mos.ru\r\nex.rosbank.ru\r\nex.wto.economy.gov.ru\r\nex2.avito.ru\r\nexam.avito.ru\r\nexam.beeline.ru\r\nexample-dev.k8s.rg.ru\r\nexample.avito.ru\r\nexams.avito.ru\r\nexcalibur.avito.ru\r\nexcel.avito.ru\r\nexcellence.avito.ru\r\nexcellent.avito.ru\r\nexcelsior.avito.ru\r\nexch-all.roseltorg.ru\r\nexch-mbx-03.cf.wildberries.ru\r\nexch-mbx-04.cf.wildberries.ru\r\nexch-mbx-05.cf.wildberries.ru\r\nexch.avito.ru\r\nexch.fadm.gov.ru\r\nexchange-imap.its.avito.ru\r\nexchange.avito.ru\r\nexchange.corp.wildberries.ru\r\nexchange.kino-teatr.ru\r\nexchange.mchs.gov.ru\r\nexchange.minkavkaz.gov.ru\r\nexchange.wildberries.ru\r\nexchange01.avito.ru\r\nexchange01.corp.wildberries.ru\r\nexchange01.tutu.ru\r\nexchange02.tutu.ru\r\nexchange03.tutu.ru\r\nexchange1.avito.ru\r\nexchange2.avito.ru\r\nexchangecas.corp.wildberries.ru\r\nexchangedtln.corp.wildberries.ru\r\nexchangeost.corp.wildberries.ru\r\nexchangeost01.corp.wildberries.ru\r\nexchauth.tele2.ru\r\nexchbhlan3.avito.ru\r\nexchbhlan5.avito.ru\r\nexchbhorl2.avito.ru\r\nexclusive.avito.ru\r\nexec.avito.ru\r\nexec.worldbank.org\r\nexecdev.worldbank.org\r\nexecqa.worldbank.org\r\nexecstg.worldbank.org\r\nexecution-ci360-dev.mvideo.ru\r\nexecution-ci360-test.mvideo.ru\r\nexecution-ci360.mvideo.ru\r\nexedge.ozon.ru\r\nexedge02z1.ozon.ru\r\nexercise.avito.ru\r\nexile.avito.ru\r\nexit.avito.ru\r\nexit.magnit.ru\r\nexmail.avito.ru\r\nexmo.rbc.ru\r\nexo.avito.ru\r\nexodus.avito.ru\r\nexp-e-cluster.lab.tass.ru\r\nexp-edge.x5.ru\r\nexp-edge01.x5.ru\r\nexp-edge02.x5.ru\r\nexp.73.yandex.ru\r\nexp.avito.ru\r\nexp.cgu.mchs.ru\r\nexp.mos.ru\r\nexp.tvdb.mts.ru\r\nexp01e.maps.yandex.ru\r\nexp01e.tst.maps.yandex.ru\r\nexp01f.maps.yandex.ru\r\nexpc.css.rzd.ru\r\nexpe-01.fish.gov.ru\r\nexpe-1.who.int\r\nexpe-2.who.int\r\nexpe-3.who.int\r\nexpe-s-lab.voiplab-ext.sberbank.ru\r\nexpe-s-n1up.sberbank.ru\r\nexpe-s-n2sko.sberbank.ru\r\nexpe.css.rzd.ru\r\nexpe.rbc.ru\r\nexpe.sberbank.ru\r\nexpe.who.int\r\nexperience.avito.ru\r\nexperience.who.int\r\nexperiencecontentstagingproxy.who.int\r\nexperienceproductionproxy.who.int\r\nexperiencestagingproxy.who.int\r\nexperiment.avito.ru\r\nexpert.avito.ru\r\nexpert.economy.gov.ru\r\nexpert.garant.ru\r\nexpert.minpromtorg.gov.ru\r\nexpert.vk.com\r\nexpert.yandex.ru\r\nexperts.avito.ru\r\nexplore.avito.ru\r\nexplorer.avito.ru\r\nexpo.avito.ru\r\nexport.avito.ru\r\nexport.dns-shop.ru\r\nexport.pochta.ru\r\nexport.russianpost.ru\r\nexport.yandex.ru\r\nexportcenter.sbercontact.sberbank.ru\r\nexporter.avito.ru\r\nexpress-bsl.magnit.ru\r\nexpress-highload.magnit.ru\r\nexpress-lenvendo.magnit.ru\r\nexpress-m-test.mkb.ru\r\nexpress-m.mkb.ru\r\nexpress-qsoft.magnit.ru\r\nexpress-stage.magnit.ru\r\nexpress-stage2.magnit.ru\r\nexpress-test.magnit.ru\r\nexpress-test.mkb.ru\r\nexpress-test1.magnit.ru\r\nexpress-test10.magnit.ru\r\nexpress-test11.magnit.ru\r\nexpress-test2.magnit.ru\r\nexpress-test3.magnit.ru\r\nexpress-test4.magnit.ru\r\nexpress-test5.magnit.ru\r\nexpress-test6.magnit.ru\r\nexpress-test7.magnit.ru\r\nexpress-test8.magnit.ru\r\nexpress-test9.magnit.ru\r\nexpress.avito.ru\r\nexpress.council.gov.ru\r\nexpress.magnit.ru\r\nexpress.mts.ru\r\nexpress.rosatom.ru\r\nexpress.rshb.ru\r\nexpress.rzd.ru\r\nexpress.tele2.ru\r\nexpresstst.psbank.ru\r\nexpressway-e.obluo.tomsk.gov.ru\r\nexpresswaye.emro.who.int\r\nexpway-c.lemanapro.ru\r\nexpway-e.lemanapro.ru\r\nexseed.avito.ru\r\next-api.max.ru\r\next-bots.max.ru\r\next-datamng-gis-deg.itsm.mos.ru\r\next-delivery.yc.mvideo.ru\r\next-elasticsearch-fts-dialog-messenger-ift.online.sberbank.ru\r\next-elasticsearch-fts-dialog-messenger-psi.online.sberbank.ru\r\next-elasticsearch-fts-dialog-messenger.online.sberbank.ru\r\next-www.megafon.ru\r\next.avito.ru\r\next.clickstream.sberbank.ru\r\next.contest.yandex.ru\r\next.euronews.com\r\next.garant.ru\r\next.kinopoisk.ru\r\nextapps.worldbank.org\r\nextappsqa.worldbank.org\r\nextend.avito.ru\r\nextension.avito.ru\r\nextensions.avito.ru\r\nextern.avito.ru\r\nexternal-api.mediabilling.kinopoisk.ru\r\nexternal-api.mt.mediabilling.kinopoisk.ru\r\nexternal-api.plus.kinopoisk.ru\r\nexternal-api.plus.tst.kinopoisk.ru\r\nexternal-git.open.ru\r\nexternal.avito.ru\r\nexternal.cc.mts.ru\r\nexternal.t2.ru\r\nexternal.tele2.ru\r\nexterno.avito.ru\r\nextestm.rambler.ru\r\nextgit-eto.yandex.ru\r\nextgit-ugr.yandex.ru\r\nextgit.yandex.ru\r\nextinvhst.infra.rbc.ru\r\nextra.avito.ru\r\nextract.yandex.ru\r\nextranet-new.garant.ru\r\nextranet.avito.ru\r\nextranet.megafon.ru\r\nextranet.rbc.ru\r\nextranet.searo.who.int\r\nextranet.tele2.ru\r\nextranet2.avito.ru\r\nextras.avito.ru\r\nextreme.avito.ru\r\nextsvn-eto.yandex.ru\r\nextsvn-ugr.yandex.ru\r\nextsvn.yandex.ru\r\nexwaye-mra.khv.gov.ru\r\nexwaye.khv.gov.ru\r\nexwaye.sakhalin.gov.ru\r\neye.avito.ru\r\neyny.avito.ru\r\nez.avito.ru\r\nezadmin.avito.ru\r\nezcollab.who.int\r\nezhik.1611.yandex.ru\r\nezproxy.avito.ru\r\nf.1313.yandex.ru\r\nf.avito.ru\r\nf.kino-teatr.ru\r\nf.ns.e.avito.ru\r\nf.ns.email.avito.ru\r\nf.stage.secret.rambler.ru\r\nf.t2.ru\r\nf.tele2.ru\r\nf.you.rambler.ru\r\nf0r3st.133.yandex.ru\r\nf1.avito.ru\r\nf1.mts.ru\r\nf1.psbank.ru\r\nf1.stage.dev.lab.x5.ru\r\nf10.stage.dev.lab.x5.ru\r\nf100.i.mail.ru\r\nf101.i.mail.ru\r\nf102.mail.ru\r\nf103.i.mail.ru\r\nf104.mail.ru\r\nf105.i.mail.ru\r\nf108.mail.ru\r\nf11.avito.ru\r\nf11.stage.dev.lab.x5.ru\r\nf111.mail.ru\r\nf112.mail.ru\r\nf114.mail.ru\r\nf12.i.mail.ru\r\nf12.stage.dev.lab.x5.ru\r\nf121.i.mail.ru\r\nf125.i.mail.ru\r\nf129.mail.ru\r\nf13.stage.dev.lab.x5.ru\r\nf130.i.mail.ru\r\nf131.i.mail.ru\r\nf132.mail.ru\r\nf133.i.mail.ru\r\nf134.i.mail.ru\r\nf135.i.mail.ru\r\nf14.i.mail.ru\r\nf14.stage.dev.lab.x5.ru\r\nf140.i.mail.ru\r\nf141.i.mail.ru\r\nf142.i.mail.ru\r\nf143.i.mail.ru\r\nf144.i.mail.ru\r\nf145.i.mail.ru\r\nf15.i.mail.ru\r\nf15.stage.dev.lab.x5.ru\r\nf150.i.mail.ru\r\nf152.i.mail.ru\r\nf153.i.mail.ru\r\nf155.i.mail.ru\r\nf16.stage.dev.lab.x5.ru\r\nf160.i.mail.ru\r\nf161.i.mail.ru\r\nf162.i.mail.ru\r\nf164.i.mail.ru\r\nf165.i.mail.ru\r\nf17.stage.dev.lab.x5.ru\r\nf170.i.mail.ru\r\nf171.i.mail.ru\r\nf172.mail.ru\r\nf173.i.mail.ru\r\nf174.i.mail.ru\r\nf175.i.mail.ru\r\nf18.stage.dev.lab.x5.ru\r\nf180.i.mail.ru\r\nf181.i.mail.ru\r\nf182.mail.ru\r\nf183.i.mail.ru\r\nf184.i.mail.ru\r\nf185.i.mail.ru\r\nf19.stage.dev.lab.x5.ru\r\nf190.i.mail.ru\r\nf191.i.mail.ru\r\nf192.i.mail.ru\r\nf193.i.mail.ru\r\nf194.i.mail.ru\r\nf195.i.mail.ru\r\nf199.mail.ru\r\nf1s.psbank.ru\r\nf2.avito.ru\r\nf2.i.mail.ru\r\nf2.sports.ru\r\nf2.stage.dev.lab.x5.ru\r\nf2.stage.secret.rambler.ru\r\nf20.i.mail.ru\r\nf20.stage.dev.lab.x5.ru\r\nf200.i.mail.ru\r\nf201.i.mail.ru\r\nf202.i.mail.ru\r\nf203.i.mail.ru\r\nf204.i.mail.ru\r\nf205.i.mail.ru\r\nf206.mail.ru\r\nf21.i.mail.ru\r\nf21.stage.dev.lab.x5.ru\r\nf210.i.mail.ru\r\nf211.i.mail.ru\r\nf212.i.mail.ru\r\nf213.i.mail.ru\r\nf214.i.mail.ru\r\nf215.i.mail.ru\r\nf22.stage.dev.lab.x5.ru\r\nf220.i.mail.ru\r\nf221.i.mail.ru\r\nf222.i.mail.ru\r\nf223.i.mail.ru\r\nf224.i.mail.ru\r\nf225.i.mail.ru\r\nf227.mail.ru\r\nf23.i.mail.ru\r\nf23.stage.dev.lab.x5.ru\r\nf230.i.mail.ru\r\nf231.i.mail.ru\r\nf232.i.mail.ru\r\nf233.i.mail.ru\r\nf234.i.mail.ru\r\nf24.i.mail.ru\r\nf24.stage.dev.lab.x5.ru\r\nf240.mail.ru\r\nf241.i.mail.ru\r\nf242.i.mail.ru\r\nf243.i.mail.ru\r\nf24383b898912.meduza.io\r\nf245.i.mail.ru\r\nf25.i.mail.ru\r\nf25.stage.dev.lab.x5.ru\r\nf250.i.mail.ru\r\nf251.i.mail.ru\r\nf252.i.mail.ru\r\nf253.i.mail.ru\r\nf254.i.mail.ru\r\nf255.i.mail.ru\r\nf260.i.mail.ru\r\nf261.i.mail.ru\r\nf262.i.mail.ru\r\nf263.i.mail.ru\r\nf264.i.mail.ru\r\nf265.i.mail.ru\r\nf270.i.mail.ru\r\nf272.i.mail.ru\r\nf273.i.mail.ru\r\nf274.i.mail.ru\r\nf275.i.mail.ru\r\nf280.i.mail.ru\r\nf281.i.mail.ru\r\nf282.i.mail.ru\r\nf283.i.mail.ru\r\nf285.i.mail.ru\r\nf290.i.mail.ru\r\nf291.i.mail.ru\r\nf292.i.mail.ru\r\nf293.i.mail.ru\r\nf294.i.mail.ru\r\nf295.i.mail.ru\r\nf296.mail.ru\r\nf3.avito.ru\r\nf3.stage.dev.lab.x5.ru\r\nf30.i.mail.ru\r\nf300.i.mail.ru\r\nf301.i.mail.ru\r\nf302.i.mail.ru\r\nf303.i.mail.ru\r\nf304.i.mail.ru\r\nf305.i.mail.ru\r\nf31.i.mail.ru\r\nf310.i.mail.ru\r\nf311.i.mail.ru\r\nf312.i.mail.ru\r\nf313.i.mail.ru\r\nf315.i.mail.ru\r\nf320.i.mail.ru\r\nf321.i.mail.ru\r\nf322.i.mail.ru\r\nf323.i.mail.ru\r\nf324.i.mail.ru\r\nf325.i.mail.ru\r\nf325.mail.ru\r\nf33.i.mail.ru\r\nf330.i.mail.ru\r\nf331.i.mail.ru\r\nf332.i.mail.ru\r\nf333.i.mail.ru\r\nf334.i.mail.ru\r\nf335.i.mail.ru\r\nf33d35f3c4854e9fbeb8b00a848ea73a.ops.beeline.ru\r\nf34.i.mail.ru\r\nf340.i.mail.ru\r\nf341.i.mail.ru\r\nf342.i.mail.ru\r\nf343.i.mail.ru\r\nf344.i.mail.ru\r\nf345.i.mail.ru\r\nf35.i.mail.ru\r\nf350.i.mail.ru\r\nf351.i.mail.ru\r\nf352.i.mail.ru\r\nf353.i.mail.ru\r\nf354.i.mail.ru\r\nf355.i.mail.ru\r\nf360.i.mail.ru\r\nf361.i.mail.ru\r\nf362.i.mail.ru\r\nf363.i.mail.ru\r\nf364.i.mail.ru\r\nf365.i.mail.ru\r\nf370.i.mail.ru\r\nf371.i.mail.ru\r\nf372.i.mail.ru\r\nf373.i.mail.ru\r\nf374.i.mail.ru\r\nf375.i.mail.ru\r\nf380.i.mail.ru\r\nf381.i.mail.ru\r\nf38172564ba14286bb82bf16185a1a28.ops.beeline.ru\r\nf382.i.mail.ru\r\nf383.i.mail.ru\r\nf384.i.mail.ru\r\nf385.i.mail.ru\r\nf390.i.mail.ru\r\nf391.i.mail.ru\r\nf392.i.mail.ru\r\nf393.i.mail.ru\r\nf394.i.mail.ru\r\nf395.i.mail.ru\r\nf4.avito.ru\r\nf4.mail.ru\r\nf4.stage.dev.lab.x5.ru\r\nf40.i.mail.ru\r\nf400.i.mail.ru\r\nf401.i.mail.ru\r\nf402.i.mail.ru\r\nf403.i.mail.ru\r\nf404.i.mail.ru\r\nf405.i.mail.ru\r\nf41.i.mail.ru\r\nf410.i.mail.ru\r\nf411.i.mail.ru\r\nf412.i.mail.ru\r\nf413.i.mail.ru\r\nf414.i.mail.ru\r\nf415.i.mail.ru\r\nf42.i.mail.ru\r\nf420.i.mail.ru\r\nf421.i.mail.ru\r\nf422.i.mail.ru\r\nf423.i.mail.ru\r\nf424.i.mail.ru\r\nf425.i.mail.ru\r\nf43.i.mail.ru\r\nf430.i.mail.ru\r\nf431.i.mail.ru\r\nf432.i.mail.ru\r\nf433.i.mail.ru\r\nf434.i.mail.ru\r\nf435.i.mail.ru\r\nf44.i.mail.ru\r\nf4462.i.mail.ru\r\nf45.i.mail.ru\r\nf450.i.mail.ru\r\nf451.i.mail.ru\r\nf452.i.mail.ru\r\nf453.i.mail.ru\r\nf454.i.mail.ru\r\nf455.i.mail.ru\r\nf460.i.mail.ru\r\nf461.i.mail.ru\r\nf462.i.mail.ru\r\nf463.i.mail.ru\r\nf464.i.mail.ru\r\nf465.i.mail.ru\r\nf470.i.mail.ru\r\nf471.i.mail.ru\r\nf472.i.mail.ru\r\nf473.i.mail.ru\r\nf474.i.mail.ru\r\nf475.i.mail.ru\r\nf480.i.mail.ru\r\nf481.i.mail.ru\r\nf482.i.mail.ru\r\nf483.i.mail.ru\r\nf484.i.mail.ru\r\nf485.i.mail.ru\r\nf490.i.mail.ru\r\nf491.i.mail.ru\r\nf492.i.mail.ru\r\nf493.i.mail.ru\r\nf494.i.mail.ru\r\nf495.i.mail.ru\r\nf5.avito.ru\r\nf5.i.mail.ru\r\nf5.stage.dev.lab.x5.ru\r\nf50.i.mail.ru\r\nf500.i.mail.ru\r\nf501.i.mail.ru\r\nf502.i.mail.ru\r\nf503.i.mail.ru\r\nf504.i.mail.ru\r\nf505.i.mail.ru\r\nf51.i.mail.ru\r\nf510.i.mail.ru\r\nf511.i.mail.ru\r\nf512.i.mail.ru\r\nf513.i.mail.ru\r\nf514.i.mail.ru\r\nf515.i.mail.ru\r\nf52.i.mail.ru\r\nf52ea402319b01e97743-hbd.ops.beeline.ru\r\nf54.i.mail.ru\r\nf55.i.mail.ru\r\nf5eeee24-9ab4-53f9-829f-8122e18813bb-bw.ops.beeline.ru\r\nf6.avito.ru\r\nf6.stage.dev.lab.x5.ru\r\nf61.i.mail.ru\r\nf62.i.mail.ru\r\nf64.i.mail.ru\r\nf65.i.mail.ru\r\nf7.stage.dev.lab.x5.ru\r\nf70.mail.ru\r\nf71.i.mail.ru\r\nf73.i.mail.ru\r\nf74.i.mail.ru\r\nf75.i.mail.ru\r\nf8.mail.ru\r\nf8.stage.dev.lab.x5.ru\r\nf82.i.mail.ru\r\nf83.i.mail.ru\r\nf84.i.mail.ru\r\nf85.i.mail.ru\r\nf88138d1e31f48a5af884e29f50b6392-clt.ops.beeline.ru\r\nf9.stage.dev.lab.x5.ru\r\nf90.i.mail.ru\r\nf914f3b0cc5a41d293337dec3814860e-clt.ops.beeline.ru\r\nf92.i.mail.ru\r\nf93.i.mail.ru\r\nf94.i.mail.ru\r\nf95.i.mail.ru\r\nf95cf483249fca56644b-hbd.ops.beeline.ru\r\nfa.avito.ru\r\nfa.duma.gov.ru\r\nfa.euronews.com\r\nfa.fonbet.ru\r\nfa.rbc.ru\r\nfa6ezuu3-rlp.ops.beeline.ru\r\nfaas-docs.cloud.mts.ru\r\nfaas-test.cloud.mts.ru\r\nfab.avito.ru\r\nfaberlic.lady.mail.ru\r\nfabian.avito.ru\r\nfabio.avito.ru\r\nfabric.meduza.io\r\nfabric.srvc.prod.monitor.meduza.io\r\nface.avito.ru\r\nface.swc01.meduza.io\r\nfacebook.avito.ru\r\nfaceboook.avito.ru\r\nfacecast.tinkoff.ru\r\nfaced.metr.yandex.ru\r\nfaceebook.avito.ru\r\nfaces.avito.ru\r\nfacilities.avito.ru\r\nfactiva.worldbank.org\r\nfactor1.alfabank.ru\r\nfactoring.alfabank.ru\r\nfactoring.megafon.ru\r\nfactoring.mkb.ru\r\nfactoring.psbank.ru\r\nfactoring.rosbank.ru\r\nfactoring.rshb.ru\r\nfactory.avito.ru\r\nfacts.avito.ru\r\nfacturacion.avito.ru\r\nfaculty.avito.ru\r\nfad.avito.ru\r\nfadi.avito.ru\r\nfadm.gov.ru\r\nfadn.gov.ru\r\nfaeton2.yandex.ru\r\nfafa.avito.ru\r\nfai.avito.ru\r\nfailover.avito.ru\r\nfair.avito.ru\r\nfairplay.abatenov.ing.k8s.dev.ivi.ru\r\nfairplay.abesekerskij.ing.k8s.dev.ivi.ru\r\nfairplay.agrozniy.ing.k8s.dev.ivi.ru\r\nfairplay.akazachev.ing.k8s.dev.ivi.ru\r\nfairplay.akhazanov.ing.k8s.dev.ivi.ru\r\nfairplay.akhudyakov.ing.k8s.dev.ivi.ru\r\nfairplay.alapshin.ing.k8s.dev.ivi.ru\r\nfairplay.android-autotest.ing.k8s.dev.ivi.ru\r\nfairplay.aschekoturova.ing.k8s.dev.ivi.ru\r\nfairplay.dpronin.ing.k8s.dev.ivi.ru\r\nfairplay.dshaymardanova.ing.k8s.dev.ivi.ru\r\nfairplay.dshebordaev.ing.k8s.dev.ivi.ru\r\nfairplay.estolyarov.ing.k8s.dev.ivi.ru\r\nfairplay.gambit-qa.ing.k8s.dev.ivi.ru\r\nfairplay.ialekhin.ing.k8s.dev.ivi.ru\r\nfairplay.ikrasavin.ing.k8s.dev.ivi.ru\r\nfairplay.ios-primo.ing.k8s.dev.ivi.ru\r\nfairplay.ishilkin.ing.k8s.dev.ivi.ru\r\nfairplay.kinopoisk.ru\r\nfairplay.logger-and-collector-tests.ing.k8s.dev.ivi.ru\r\nfairplay.mapimaster.ing.k8s.dev.ivi.ru\r\nfairplay.mapitest.ing.k8s.dev.ivi.ru\r\nfairplay.mgrischenko.ing.k8s.dev.ivi.ru\r\nfairplay.mtarakanova.ing.k8s.dev.ivi.ru\r\nfairplay.nbarsukov.ing.k8s.dev.ivi.ru\r\nfairplay.nbrodnikov.ing.k8s.dev.ivi.ru\r\nfairplay.nestor-tester.ing.k8s.dev.ivi.ru\r\nfairplay.novoselov.ing.k8s.dev.ivi.ru\r\nfairplay.pchukhnina.ing.k8s.dev.ivi.ru\r\nfairplay.rkostyukov.ing.k8s.dev.ivi.ru\r\nfairplay.samsonov.ing.k8s.dev.ivi.ru\r\nfairplay.smoke-web.ing.k8s.dev.ivi.ru\r\nfairplay.streamux.ing.k8s.dev.ivi.ru\r\nfairplay.svolkov.ing.k8s.dev.ivi.ru\r\nfairplay.takimova.ing.k8s.dev.ivi.ru\r\nfairplay.ttsvetkova.ing.k8s.dev.ivi.ru\r\nfairplay.tvildanov.ing.k8s.dev.ivi.ru\r\nfairplay.vanikin.ing.k8s.dev.ivi.ru\r\nfairplay.vision-autotest.ing.k8s.dev.ivi.ru\r\nfairplay.vision.ing.k8s.dev.ivi.ru\r\nfairplay.vkhripach.ing.k8s.dev.ivi.ru\r\nfairplay.vkugay.ing.k8s.dev.ivi.ru\r\nfairplay.vkutskaylis.ing.k8s.dev.ivi.ru\r\nfairplay.vpetukhova.ing.k8s.dev.ivi.ru\r\nfairplay.vrylov.ing.k8s.dev.ivi.ru\r\nfairplay.vstreltsov.ing.k8s.dev.ivi.ru\r\nfairplay.vsvetlov.ing.k8s.dev.ivi.ru\r\nfairplay.web.ing.k8s.dev.ivi.ru\r\nfairplay.yandriyanova.ing.k8s.dev.ivi.ru\r\nfairplay.yapavlov.ing.k8s.dev.ivi.ru\r\nfairplay.ybolotnikov.ing.k8s.dev.ivi.ru\r\nfairplay.ysimonov.ing.k8s.dev.ivi.ru\r\nfairtrade.avito.ru\r\nfairy.avito.ru\r\nfairytale.avito.ru\r\nfaisal.avito.ru\r\nfaith.avito.ru\r\nfaith.www.sports.ru\r\nfakalipit-mbp.cit.avito.ru\r\nfake.avito.ru\r\nfakelogin.distribution.yandex.ru\r\nfakesite123.avito.ru\r\nfaktury.avito.ru\r\nfalcon.avito.ru\r\nfallback1.mail.ru\r\nfallback2.mail.ru\r\nfallback2.rambler.ru\r\nfallback3.mail.ru\r\nfallback4.mail.ru\r\nfallback5.mail.ru\r\nfallback6.mail.ru\r\nfallback7.mail.ru\r\nfallback8.mail.ru\r\nfallscreek.leasing.rshb.ru\r\nfamiliar.avito.ru\r\nfamilies.lemanapro.ru\r\nfamily-vrn.aif.ru\r\nfamily.alfabank.ru\r\nfamily.avito.ru\r\nfamily.dns.yandex.ru\r\nfamily.project.tinkoff.ru\r\nfamily.tinkoff.ru\r\nfamily.yandex.ru\r\nfamilysearch.yandex.ru\r\nfamous.avito.ru\r\nfan.avito.ru\r\nfan.gismeteo.ru\r\nfanclub.avito.ru\r\nfancy.avito.ru\r\nfano.gov.ru\r\nfans.avito.ru\r\nfantasia.avito.ru\r\nfantasy.avito.ru\r\nfantasy.sports.ru\r\nfap.avito.ru\r\nfaperta.avito.ru\r\nfapmc.gov.ru\r\nfaq.avito.ru\r\nfaq.ixbt.com\r\nfaraday.avito.ru\r\nfaramir.yandex.ru\r\nfargo.avito.ru\r\nfarhangi.avito.ru\r\nfarm.avito.ru\r\nfarmer.avito.ru\r\nfarmer.rbc.ru\r\nfarsi.euronews.com\r\nfart.avito.ru\r\nfas.avito.ru\r\nfas.gov.ru\r\nfashion.avito.ru\r\nfast.avito.ru\r\nfast.pro.avito.ru\r\nfastcash.avito.ru\r\nfastcontent00.yandex.ru\r\nfastdigitalcodecs.avito.ru\r\nfastdigitaldm.avito.ru\r\nfastdigitaldownloads.avito.ru\r\nfastdigitalmanager.avito.ru\r\nfaster.avito.ru\r\nfastestvrn.megafon.ru\r\nfasthdcodecs.avito.ru\r\nfastmediacodecs.avito.ru\r\nfastmediadm.avito.ru\r\nfastmediadownloads.avito.ru\r\nfastmediamanager.avito.ru\r\nfastnet.avito.ru\r\nfastprocodecs.avito.ru\r\nfastprodm.avito.ru\r\nfastprodownloads.avito.ru\r\nfastpromanager.avito.ru\r\nfasttier1-00.yandex.ru\r\nfasttier2-00.yandex.ru\r\nfaswalk.fas.gov.ru\r\nfat.avito.ru\r\nfatality.avito.ru\r\nfatca.rshb.ru\r\nfatca.sberbank.ru\r\nfatca.vtb.ru\r\nfate.avito.ru\r\nfathi.avito.ru\r\nfatih.1841.yandex.ru\r\nfatih.avito.ru\r\nfatima.avito.ru\r\nfau1.mail.ru\r\nfau10.mail.ru\r\nfau11.mail.ru\r\nfau12.mail.ru\r\nfau13.mail.ru\r\nfau14.mail.ru\r\nfau15.mail.ru\r\nfau16.mail.ru\r\nfau17.mail.ru\r\nfau18.mail.ru\r\nfau19.mail.ru\r\nfau2.mail.ru\r\nfau20.mail.ru\r\nfau21.mail.ru\r\nfau22.mail.ru\r\nfau23.mail.ru\r\nfau24.mail.ru\r\nfau25.mail.ru\r\nfau26.mail.ru\r\nfau27.mail.ru\r\nfau28.mail.ru\r\nfau29.mail.ru\r\nfau3.mail.ru\r\nfau30.mail.ru\r\nfau4.mail.ru\r\nfau5.mail.ru\r\nfau6.mail.ru\r\nfau7.mail.ru\r\nfau8.mail.ru\r\nfau9.mail.ru\r\nfaust.avito.ru\r\nfavela.mail.ru\r\nfavicon1-00.yandex.ru\r\nfavicon3-00.yandex.ru\r\nfavorites.api.2gis.ru\r\nfax.avito.ru\r\nfaxserver.avito.ru\r\nfb.avito.ru\r\nfb.beeline.ru\r\nfb.tinkoff.ru\r\nfb.worldbank.org\r\nfb01e.cs-minitools01e.yandex.ru\r\nfb01f.cs-minitools01f.yandex.ru\r\nfb01h.cs-minitools01h.yandex.ru\r\nfb01ht.cs-minitools01ht.yandex.ru\r\nfb12.avito.ru\r\nfbapp.avito.ru\r\nfbapps.avito.ru\r\nfbl-first.tinkoff.ru\r\nfbl-last.tinkoff.ru\r\nfbl.avito.ru\r\nfbm.avito.ru\r\nfbqa.worldbank.org\r\nfbuat13.yc.mvideo.ru\r\nfbusites.fas.gov.ru\r\nfbx-nord.ivi.ru\r\nfc.avito.ru\r\nfc.gosuslugi.ru\r\nfc2.avito.ru\r\nfcc.avito.ru\r\nfcgi.avito.ru\r\nfcmk.minzdrav.gov.ru\r\nfcp.beeline.ru\r\nfcpe.beeline.ru\r\nfcpilo.minzdrav.gov.ru\r\nfcs.avito.ru\r\nfctc.who.int\r\nfcvindicators.worldbank.org\r\nfd.avito.ru\r\nfda.middle-api.magnit.ru\r\nfdc.avito.ru\r\nfdm.avito.ru\r\nfdr.tinkoff.ru\r\nfds.avito.ru\r\nfdst.mkb.ru\r\nfe-synterra.1tv.ru\r\nfe.avito.ru\r\nfe.openbank.ru\r\nfe.rambler.ru\r\nfe01.avito.ru\r\nfe1.avito.ru\r\nfe1.duma.gov.ru\r\nfe2.avito.ru\r\nfe2.duma.gov.ru\r\nfear.avito.ru\r\nfeature-13-sharings-main-370.np.project.tinkoff.ru\r\nfeature-5-test-page-370.np.project.tinkoff.ru\r\nfeature-qa.yandex.ru\r\nfeature.iptv.beeline.ru\r\nfeatures.avito.ru\r\nfecg.rosbank.ru\r\nfed.avito.ru\r\nfedbst.rk.gov.ru\r\nfeddemo1.gosuslugi.ru\r\nfeddemo2.gosuslugi.ru\r\nfederation-accounting.avito.ru\r\nfederation.avito.ru\r\nfedora-mirror.rbc.ru\r\nfedora-mirror02.rbc.ru\r\nfedora.avito.ru\r\nfedorov.ing.k8s.dev.ivi.ru\r\nfedorovskaya.9111.ru\r\nfedotov.lenta.ru\r\nfedprod.worldbank.org\r\nfedqa.worldbank.org\r\nfee.123.yandex.ru\r\nfee.avito.ru\r\nfeed.avito.ru\r\nfeed.kino-teatr.ru\r\nfeed.rbc.ru\r\nfeedback.2gis.ru\r\nfeedback.api.2gis.ru\r\nfeedback.avito.ru\r\nfeedback.hh.ru\r\nfeedback.meduza.io\r\nfeedback.ok.ru\r\nfeedback.rosatom.ru\r\nfeedback.rutube.ru\r\nfeedback.sfera.x5.ru\r\nfeedback.tinkoff.ru\r\nfeedback.unicreditbank.ru\r\nfeedback.yandex.ru\r\nfeedback2.yandex.ru\r\nfeedbackdashboard.worldbank.org\r\nfeedbackdashboarddev.worldbank.org\r\nfeedbackdashboardqa.worldbank.org\r\nfeedbackdashboardtst.worldbank.org\r\nfeedme.avito.ru\r\nfeeds.avito.ru\r\nfeeds.kino-teatr.ru\r\nfeeds.kommersant.ru\r\nfef.avito.ru\r\nfelis.yandex.ru\r\nfelix.avito.ru\r\nfemdom.avito.ru\r\nfemida01h.cs-minitools01h.yandex.ru\r\nfemida01ht.cs-minitools01ht.yandex.ru\r\nfen.avito.ru\r\nfender.avito.ru\r\nfeng.avito.ru\r\nfenix.avito.ru\r\nfenrir.avito.ru\r\nfeodosiya.drom.ru\r\nfer34.mail.ru\r\nferi.avito.ru\r\nfermat.avito.ru\r\nfermi.avito.ru\r\nfernando.avito.ru\r\nferrari.avito.ru\r\nferry.avito.ru\r\nfes.avito.ru\r\nfest.2gis.ru\r\nfest.tele2.ru\r\nfestival.avito.ru\r\nfetcher1.mail.ru\r\nfetcher10.mail.ru\r\nfetcher2.mail.ru\r\nfetcher3.mail.ru\r\nfetcher4.mail.ru\r\nfetcher5.mail.ru\r\nfetcher6.mail.ru\r\nfetcher7.mail.ru\r\nfetcher8.mail.ru\r\nfetcher9.mail.ru\r\nff.avito.ru\r\nff.mchs.ru\r\nffdd2d.tbank.ru\r\nffl.avito.ru\r\nffm.avito.ru\r\nfg.avito.ru\r\nfgc.avito.ru\r\nfgis.economy.gov.ru\r\nfgistp.economy.gov.ru\r\nfgistp.mnp.economy.gov.ru\r\nfgistp.mnp.test.economy.gov.ru\r\nfgistp.test.economy.gov.ru\r\nfh.avito.ru\r\nfhg.avito.ru\r\nfhg2.avito.ru\r\nfhg3.avito.ru\r\nfi.avito.ru\r\nfi.rasp.yandex.ru\r\nfias-file.nalog.ru\r\nfias.cgu.mchs.ru\r\nfias.dev.cgu.iac.mchs.ru\r\nfiat.avito.ru\r\nfiat.drom.ru\r\nfic.avito.ru\r\nfichiers.avito.ru\r\nfiction.avito.ru\r\nfield.avito.ru\r\nfiesta.avito.ru\r\nfifa.alfabank.ru\r\nfifa.avito.ru\r\nfifa17.stage.championat.com\r\nfifa2010.rambler.ru\r\nfiftrustee.worldbank.org\r\nfiftrusteeadmin.worldbank.org\r\nfiftrusteeadminqa.worldbank.org\r\nfiftrusteeqa.worldbank.org\r\nfig.avito.ru\r\nfigaro.avito.ru\r\nfile-demo.mdrive.magnit.ru\r\nfile-upload-node1.online.sberbank.ru\r\nfile-upload-node2.online.sberbank.ru\r\nfile-upload-node3.online.sberbank.ru\r\nfile-upload-node4.online.sberbank.ru\r\nfile-upload-node5.online.sberbank.ru\r\nfile-upload-node6.online.sberbank.ru\r\nfile-upload-node7.online.sberbank.ru\r\nfile-upload-nodegf.online.sberbank.ru\r\nfile-upload-nodesi.online.sberbank.ru\r\nfile-upload-nodesi2.online.sberbank.ru\r\nfile.avito.ru\r\nfile.iz.ru\r\nfile.nalog.ru\r\nfile.nnov.mts.ru\r\nfile.rshb.ru\r\nfile01.avito.ru\r\nfile1.avito.ru\r\nfile2.avito.ru\r\nfile601.abesekerskij.ing.k8s.dev.ivi.ru\r\nfile601.akhlebnikov.ing.k8s.dev.ivi.ru\r\nfile601.android-autotest-2.ing.k8s.dev.ivi.ru\r\nfile601.android-autotest-smoke.ing.k8s.dev.ivi.ru\r\nfile601.android-autotest.ing.k8s.dev.ivi.ru\r\nfile601.android-mobile.ing.k8s.dev.ivi.ru\r\nfile601.android.ing.k8s.dev.ivi.ru\r\nfile601.asmirnov.ing.k8s.dev.ivi.ru\r\nfile601.davramenko.ing.k8s.dev.ivi.ru\r\nfile601.dpronin.ing.k8s.dev.ivi.ru\r\nfile601.dshaymardanova.ing.k8s.dev.ivi.ru\r\nfile601.dshebordaev.ing.k8s.dev.ivi.ru\r\nfile601.gambit-autotest-1.ing.k8s.dev.ivi.ru\r\nfile601.gambit-autotest-2.ing.k8s.dev.ivi.ru\r\nfile601.gambit-smoke.ing.k8s.dev.ivi.ru\r\nfile601.ikrylov.ing.k8s.dev.ivi.ru\r\nfile601.ios-primo.ing.k8s.dev.ivi.ru\r\nfile601.ios-smoke.ing.k8s.dev.ivi.ru\r\nfile601.ios.ing.k8s.dev.ivi.ru\r\nfile601.isizov-2.ing.k8s.dev.ivi.ru\r\nfile601.kmartyashkov.ing.k8s.dev.ivi.ru\r\nfile601.mgrischenko.ing.k8s.dev.ivi.ru\r\nfile601.mkudusov.ing.k8s.dev.ivi.ru\r\nfile601.nbarsukov.ing.k8s.dev.ivi.ru\r\nfile601.nbrodnikov.ing.k8s.dev.ivi.ru\r\nfile601.nfrolkin.ing.k8s.dev.ivi.ru\r\nfile601.nkudryavtseva.ing.k8s.dev.ivi.ru\r\nfile601.nmarchenko.ing.k8s.dev.ivi.ru\r\nfile601.pchukhnina.ing.k8s.dev.ivi.ru\r\nfile601.punpun.ing.k8s.dev.ivi.ru\r\nfile601.smarttv.ing.k8s.dev.ivi.ru\r\nfile601.svolkov.ing.k8s.dev.ivi.ru\r\nfile601.vanikin.ing.k8s.dev.ivi.ru\r\nfile601.vishchuk.ing.k8s.dev.ivi.ru\r\nfile601.vision-autotest-2.ing.k8s.dev.ivi.ru\r\nfile601.vision-autotest.ing.k8s.dev.ivi.ru\r\nfile601.vision-smoke.ing.k8s.dev.ivi.ru\r\nfile601.vision.ing.k8s.dev.ivi.ru\r\nfile601.vkutskaylis.ing.k8s.dev.ivi.ru\r\nfile601.vstreltsov.ing.k8s.dev.ivi.ru\r\nfile601.yapavlov.ing.k8s.dev.ivi.ru\r\nfile602.abesekerskij.ing.k8s.dev.ivi.ru\r\nfile602.akhlebnikov.ing.k8s.dev.ivi.ru\r\nfile602.android-autotest-2.ing.k8s.dev.ivi.ru\r\nfile602.android-autotest-smoke.ing.k8s.dev.ivi.ru\r\nfile602.android-autotest.ing.k8s.dev.ivi.ru\r\nfile602.android-mobile.ing.k8s.dev.ivi.ru\r\nfile602.android.ing.k8s.dev.ivi.ru\r\nfile602.asmirnov.ing.k8s.dev.ivi.ru\r\nfile602.davramenko.ing.k8s.dev.ivi.ru\r\nfile602.dpronin.ing.k8s.dev.ivi.ru\r\nfile602.dshaymardanova.ing.k8s.dev.ivi.ru\r\nfile602.dshebordaev.ing.k8s.dev.ivi.ru\r\nfile602.gambit-autotest-1.ing.k8s.dev.ivi.ru\r\nfile602.gambit-autotest-2.ing.k8s.dev.ivi.ru\r\nfile602.gambit-smoke.ing.k8s.dev.ivi.ru\r\nfile602.ikrylov.ing.k8s.dev.ivi.ru\r\nfile602.ios-primo.ing.k8s.dev.ivi.ru\r\nfile602.ios-smoke.ing.k8s.dev.ivi.ru\r\nfile602.ios.ing.k8s.dev.ivi.ru\r\nfile602.isizov-2.ing.k8s.dev.ivi.ru\r\nfile602.kmartyashkov.ing.k8s.dev.ivi.ru\r\nfile602.mgrischenko.ing.k8s.dev.ivi.ru\r\nfile602.mkudusov.ing.k8s.dev.ivi.ru\r\nfile602.nbarsukov.ing.k8s.dev.ivi.ru\r\nfile602.nbrodnikov.ing.k8s.dev.ivi.ru\r\nfile602.nfrolkin.ing.k8s.dev.ivi.ru\r\nfile602.nkudryavtseva.ing.k8s.dev.ivi.ru\r\nfile602.nmarchenko.ing.k8s.dev.ivi.ru\r\nfile602.pchukhnina.ing.k8s.dev.ivi.ru\r\nfile602.punpun.ing.k8s.dev.ivi.ru\r\nfile602.smarttv.ing.k8s.dev.ivi.ru\r\nfile602.svolkov.ing.k8s.dev.ivi.ru\r\nfile602.vanikin.ing.k8s.dev.ivi.ru\r\nfile602.vishchuk.ing.k8s.dev.ivi.ru\r\nfile602.vision-autotest-2.ing.k8s.dev.ivi.ru\r\nfile602.vision-autotest.ing.k8s.dev.ivi.ru\r\nfile602.vision-smoke.ing.k8s.dev.ivi.ru\r\nfile602.vision.ing.k8s.dev.ivi.ru\r\nfile602.vkutskaylis.ing.k8s.dev.ivi.ru\r\nfile602.vstreltsov.ing.k8s.dev.ivi.ru\r\nfile602.yapavlov.ing.k8s.dev.ivi.ru\r\nfile621.nfrolkin.ing.k8s.dev.ivi.ru\r\nfile621.svolkov.ing.k8s.dev.ivi.ru\r\nfile622.nfrolkin.ing.k8s.dev.ivi.ru\r\nfile622.svolkov.ing.k8s.dev.ivi.ru\r\nfilebox.avito.ru\r\nfiled10-24.my.mail.ru\r\nfiled12-29.my.mail.ru\r\nfiled8-24.my.mail.ru\r\nfiledlv1.mail.ru\r\nfiledlv2.mail.ru\r\nfilemaker.avito.ru\r\nfileproxy.avito.ru\r\nfiler.avito.ru\r\nfiler1.avito.ru\r\nfiler2.avito.ru\r\nfileria3.ria.ru\r\nfileria4.ria.ru\r\nfiles-c.mts.ru\r\nfiles-i1812.film.ru\r\nfiles-i22.film.ru\r\nfiles-n.mts.ru\r\nfiles-tapi.tinkoff.ru\r\nfiles.2gis.ru\r\nfiles.apps.sberbank.ru\r\nfiles.avito.ru\r\nfiles.clearml.cgu.mchs.ru\r\nfiles.crm.yandex.ru\r\nfiles.gossluzhba.gov.ru\r\nfiles.kino-teatr.ru\r\nfiles.mail.ru\r\nfiles.messenger.yandex.ru\r\nfiles.moscowapp.mos.ru\r\nfiles.msp.economy.gov.ru\r\nfiles.myoffice.sberbank.ru\r\nfiles.otp.sberbank.ru\r\nfiles.sberstore.sberbank.ru\r\nfiles.sovcombank.ru\r\nfiles.sps.rosatom.ru\r\nfiles.vrn.kommersant.ru\r\nfiles.yandex.ru\r\nfiles1.avito.ru\r\nfiles1.barmen.blizko.ru\r\nfiles1.barmen.pulscen.ru\r\nfiles1.mail.ru\r\nfiles1.showcases.barmen.blizko.ru\r\nfiles1.showcases.barmen.pulscen.ru\r\nfiles2.avito.ru\r\nfiles2.mail.ru\r\nfiles3.avito.ru\r\nfiles4.avito.ru\r\nfilesagent-upload.mail.ru\r\nfileserver.avito.ru\r\nfileshare.avito.ru\r\nfilespotcdn.rosatom.ru\r\nfiletransfer.avito.ru\r\nfileupload.avito.ru\r\nfilex.avito.ru\r\nfilexch01.minobrnauki.gov.ru\r\nfilicity.afisha.ru\r\nfilin.mail.ru\r\nfilin1.i.mail.ru\r\nfilin2.i.mail.ru\r\nfilin3.mail.ru\r\nfilin4.mail.ru\r\nfilm.avito.ru\r\nfilme.avito.ru\r\nfilmy.avito.ru\r\nfilosofia.avito.ru\r\nfilter.avito.ru\r\nfilter.ncnd.t2.ru\r\nfilter1.avito.ru\r\nfilter2.avito.ru\r\nfin.avito.ru\r\nfin.rosnedra.gov.ru\r\nfin2019.vedomosti.ru\r\nfinal.avito.ru\r\nfinal.chempionat.tass.ru\r\nfinance-android.pochta.ru\r\nfinance-ios.pochta.ru\r\nfinance-rc.yandex.ru\r\nfinance.avito.ru\r\nfinance.mail.ru\r\nfinance.ozon.ru\r\nfinance.pochta.ru\r\nfinance.rambler.ru\r\nfinance.wildberries.ru\r\nfinance1.wildberries.ru\r\nfinance2.wildberries.ru\r\nfinance3.wildberries.ru\r\nfinance4.wildberries.ru\r\nfinance5.wildberries.ru\r\nfinanceiro.avito.ru\r\nfinances.worldbank.org\r\nfinancesapp.worldbank.org\r\nfinancial.avito.ru\r\nfinanse.avito.ru\r\nfinbook.consultant.ru\r\nfinch.avito.ru\r\nfind.avito.ru\r\nfind.net.ixbt.com\r\nfindcodecs.avito.ru\r\nfinddigitalcodecs.avito.ru\r\nfinder.avito.ru\r\nfindfreecodecs.avito.ru\r\nfindlivecodecs.avito.ru\r\nfindmediacodecs.avito.ru\r\nfindmediafile.avito.ru\r\nfindmediafileinc.avito.ru\r\nfindmediafiles.avito.ru\r\nfindmediafilesinc.avito.ru\r\nfindmymediafile.avito.ru\r\nfindmymediafileinc.avito.ru\r\nfindmymediafiles.avito.ru\r\nfindmymediafilesinc.avito.ru\r\nfindnewcodecs.avito.ru\r\nfindthiscodecs.avito.ru\r\nfine.avito.ru\r\nfinedog-mobile.tbank.ru\r\nfingrad.sovcombank.ru\r\nfinland.avito.ru\r\nfinline-demo.sberbank.ru\r\nfinline.sberbank.ru\r\nfinn.avito.ru\r\nfino.gis.rosenergo.gov.ru\r\nfinopolisforum.bizconf.rbc.ru\r\nfinplan.vtb.ru\r\nfinportal-test.mts.ru\r\nfinportal.mts.ru\r\nfinportal.x5.ru\r\nfinradar.rshb.ru\r\nfinsite.t2.ru\r\nfinstar.smb.apim.psbank.ru\r\nfinstar.smb.apimtst.psbank.ru\r\nfintech-business.tinkoff.ru\r\nfintech-msgr-api.tinkoff.ru\r\nfintech-qa.tinkoff.ru\r\nfintech-sso.tinkoff.ru\r\nfiona.avito.ru\r\nfiorinm-auth.tele2.ru\r\nfir.avito.ru\r\nfire.avito.ru\r\nfireball.avito.ru\r\nfirebird.avito.ru\r\nfiredept.wildberries.ru\r\nfirefly.avito.ru\r\nfirefox.avito.ru\r\nfirefox.yandex.ru\r\nfireman.mchs.ru\r\nfirenotification.mchs.gov.ru\r\nfirenotification.mchs.ru\r\nfirewall.avito.ru\r\nfirewall.economy.gov.ru\r\nfirewall2.avito.ru\r\nfirewallix.avito.ru\r\nfirma.avito.ru\r\nfirme.avito.ru\r\nfirmsonmap.api.2gis.ru\r\nfirmware.avito.ru\r\nfirmware.tstore.magnit.ru\r\nfirmy.avito.ru\r\nfirst.avito.ru\r\nfirst.rbc.ru\r\nfirst.sber.ru\r\nfis.avito.ru\r\nfish.avito.ru\r\nfish.dev.kp.ru\r\nfish.gov.ru\r\nfish.kp.ru\r\nfish1.avito.ru\r\nfishbook.avito.ru\r\nfisher.avito.ru\r\nfisheye.avito.ru\r\nfisheye.mail.ru\r\nfishing.avito.ru\r\nfisip.avito.ru\r\nfist.avito.ru\r\nfisto.avito.ru\r\nfit.365.yandex.ru\r\nfit.avito.ru\r\nfitness.avito.ru\r\nfitness.mts.ru\r\nfitter1.i.mail.ru\r\nfitter2.i.mail.ru\r\nfitter3.i.mail.ru\r\nfitter4.i.mail.ru\r\nfivebox.x5.ru\r\nfivestar.avito.ru\r\nfix.avito.ru\r\nfixgo-auto.t2.ru\r\nfixgo-home.t2.ru\r\nfixmail.mts.ru\r\nfixmoatnewadvertisin.test.euronews.com\r\nfixservice.mts.ru\r\nfixsrv.mts.ru\r\nfixunknownlocalevers.test.euronews.com\r\nfizpartnerint.alfabank.ru\r\nfj.avito.ru\r\nfk.avito.ru\r\nfkip.avito.ru\r\nfl.avito.ru\r\nflag.kremlin.ru\r\nflame.avito.ru\r\nflames.avito.ru\r\nflamingo.avito.ru\r\nflash-automation.cdn.dev.api.max.com\r\nflash-automation.cdn.int.api.max.com\r\nflash-automation.cdn.prd.api.max.com\r\nflash-automation.cdn.stg.api.max.com\r\nflash.avito.ru\r\nflat.avito.ru\r\nflc.avito.ru\r\nfld.kino-teatr.ru\r\nfldbnode1.mir.afisha.ru\r\nfldbnode2.mir.afisha.ru\r\nflebodia.lady.mail.ru\r\nflecs.alfabank.ru\r\nfleece.balance.yandex.ru\r\nfleet.avito.ru\r\nfleur.avito.ru\r\nflex.avito.ru\r\nflex.cgu.mchs.ru\r\nflex.dev.cgu.iac.mchs.ru\r\nflex.rosbank.ru\r\nflexo.rbc.ru\r\nflexo3.rbc.ru\r\nflexo4.rbc.ru\r\nflexy-callback.open.ru\r\nflexy.open.ru\r\nflftsvl3-rlp.ops.beeline.ru\r\nflicker.kommersant.ru\r\nflickr.avito.ru\r\nflight-grafana.tele2.ru\r\nflight.avito.ru\r\nflight.yandex.ru\r\nflights.euronews.com\r\nflights.yandex.ru\r\nflint.avito.ru\r\nflirt.avito.ru\r\nflo.avito.ru\r\nflog.avito.ru\r\nfloor.avito.ru\r\nfloors-widget.api.2gis.ru\r\nfloors.2gis.ru\r\nflor.24.yandex.ru\r\nflora.avito.ru\r\nflorence.avito.ru\r\nflores.avito.ru\r\nflorian.avito.ru\r\nflorida.avito.ru\r\nflow.avito.ru\r\nflow.yandex.ru\r\nflow.zdorovie-shkolnika.spb.aif.ru\r\nflower.avito.ru\r\nflowers.avito.ru\r\nfloyd.avito.ru\r\nfloyd.rbc.ru\r\nfloyd.yandex.ru\r\nflr-all.avito.ru\r\nflseok.avito.ru\r\nfluffy.avito.ru\r\nflugtag.tele2.ru\r\nflussonic.genproc.gov.ru\r\nflussonic.ntv.ru\r\nflux.avito.ru\r\nflv.avito.ru\r\nflv.video.yandex.ru\r\nfly.asia.int.media.max.com\r\nfly.avito.ru\r\nfly.br.asia.int.media.max.com\r\nfly.cfc.dev.media.max.com\r\nfly.cfc.int.media.max.com\r\nfly.cfc.prd.media.max.com\r\nfly.cfc.stg.media.max.com\r\nfly.dplus.asia.int.media.max.com\r\nfly.eu.dev.media.max.com\r\nfly.eu.int.media.max.com\r\nfly.eu.prd.media.max.com\r\nfly.eu.stg.media.max.com\r\nfly.latam.dev.media.max.com\r\nfly.latam.int.media.max.com\r\nfly.latam.prd.media.max.com\r\nfly.latam.stg.media.max.com\r\nfly.live.asia.dev.media.max.com\r\nfly.live.asia.prd.media.max.com\r\nfly.live.br.asia.dev.media.max.com\r\nfly.live.br.asia.prd.media.max.com\r\nfly.live.cnn.asia.dev.media.max.com\r\nfly.live.cnn.asia.prd.media.max.com\r\nfly.live.dplus.asia.dev.media.max.com\r\nfly.live.dplus.asia.prd.media.max.com\r\nfly.live.eu.dev.media.max.com\r\nfly.live.eu.int.media.max.com\r\nfly.live.eu.prd.media.max.com\r\nfly.live.eu.stg.media.max.com\r\nfly.live.latam.dev.media.max.com\r\nfly.live.latam.int.media.max.com\r\nfly.live.latam.prd.media.max.com\r\nfly.live.latam.stg.media.max.com\r\nfly.live.na.dev.media.max.com\r\nfly.live.na.int.media.max.com\r\nfly.live.na.prd.media.max.com\r\nfly.live.na.stg.media.max.com\r\nfly.live.olympics.dev.media.max.com\r\nfly.live.olympics.int.media.max.com\r\nfly.live.olympics.prd.media.max.com\r\nfly.live.olympics.stg.media.max.com\r\nfly.live.us.dev.media.max.com\r\nfly.live.us.int.media.max.com\r\nfly.live.us.prd.media.max.com\r\nfly.live.us.stg.media.max.com\r\nfly.megafon.ru\r\nfly.olympics.dev.media.max.com\r\nfly.olympics.int.media.max.com\r\nfly.olympics.prd.media.max.com\r\nfly.olympics.stg.media.max.com\r\nflyd.mail.ru\r\nflyers.avito.ru\r\nfm.2017.yandex.ru\r\nfm.avito.ru\r\nfm.beeline.ru\r\nfm.kp.ru\r\nfmba.gov.ru\r\nfmc.avito.ru\r\nfmc.beeline.ru\r\nfmipa.avito.ru\r\nfmis.duma.gov.ru\r\nfml-back.yandex.ru\r\nfmmeta2-00.yandex.ru\r\nfms.avito.ru\r\nfms.gov.ru\r\nfms1.avito.ru\r\nfms2.avito.ru\r\nfms3.mail.ru\r\nfmtn-pilot.beeline.ru\r\nfmtn.beeline.ru\r\nfnc.avito.ru\r\nfns.mchs.ru\r\nfo-home.denisenko.shared.dev.lab.x5.ru\r\nfo.abroskin.shared.dev.lab.x5.ru\r\nfo.avito.ru\r\nfo.belikova.shared.dev.lab.x5.ru\r\nfo.denisenko.shared.dev.lab.x5.ru\r\nfo.rosbank.ru\r\nfo2.abroskin.shared.dev.lab.x5.ru\r\nfobos.avito.ru\r\nfocus.avito.ru\r\nfocus.beeline.ru\r\nfocus.vimpelcom.ru\r\nfocuspartners.beeline.ru\r\nfog.avito.ru\r\nfokino.drom.ru\r\nfokino.home.megafon.ru\r\nfokino.test.home.megafon.ru\r\nfolder.pd.ld.t2.ru\r\nfolder.pd.pochta-r.t2.ru\r\nfolder.pd.t2.ru\r\nfolk-rating.service.banki.ru\r\nfond.culture.ru\r\nfond.mos.ru\r\nfondpotanin.rbc.ru\r\nfoo.avito.ru\r\nfoo.bar.avito.ru\r\nfood.2gis.ru\r\nfood.avito.ru\r\nfood.yandex.ru\r\nfoot.avito.ru\r\nfootball.avito.ru\r\nfootball.magnit.ru\r\nfootball.mvideo.ru\r\nfootball18.sport.rbc.ru\r\nfor.avito.ru\r\nforce.avito.ru\r\nforceline.gw.yandex.ru\r\nforceredeploybranch.test.euronews.com\r\nford.avito.ru\r\nford.rbc.ru\r\nford.zdorovie-shkolnika.spb.aif.ru\r\nforesight.rbc.ru\r\nforest-save.t2.ru\r\nforest.avito.ru\r\nforestdnszones.avito.ru\r\nforestdnszones.office.tutu.ru\r\nforeteller-proxy.2gis.ru\r\nforever.avito.ru\r\nforeverpromo.tele2.ru\r\nforex.avito.ru\r\nforge.avito.ru\r\nform.alfabank.ru\r\nform.avito.ru\r\nform.unicreditbank.ru\r\nforma.tinkoff.ru\r\nformacion.avito.ru\r\nformat.nalog.ru\r\nformation.avito.ru\r\nformosa.avito.ru\r\nforms-fdemo.gosuslugi.ru\r\nforms.2gis.ru\r\nforms.avito.ru\r\nforms.mchs.gov.ru\r\nforms.mchs.ru\r\nforms.mexp.minzdrav.gov.ru\r\nforms.tele2.ru\r\nforms.yandex.ru\r\nformula1.avito.ru\r\nfornax.avito.ru\r\nforo.avito.ru\r\nforos.avito.ru\r\nforos.drom.ru\r\nforpost1.garant.ru\r\nforshtadt.credit-registry.nalog.ru\r\nfort.16.yandex.ru\r\nfort01.rambler.ru\r\nfort1.i.mail.ru\r\nfort2.i.mail.ru\r\nforte.avito.ru\r\nfortmyers.avito.ru\r\nfortran.avito.ru\r\nfortress.avito.ru\r\nfortuna.avito.ru\r\nfortune.avito.ru\r\nforu.avito.ru\r\nforum-1f.yandex.ru\r\nforum-test.avito.ru\r\nforum.1tv.ru\r\nforum.9111.ru\r\nforum.avito.ru\r\nforum.citilink.ru\r\nforum.consultant.ru\r\nforum.direct.yandex.ru\r\nforum.dns-shop.ru\r\nforum.film.ru\r\nforum.games.mail.ru\r\nforum.garant.ru\r\nforum.ixbt.com\r\nforum.kino-teatr.ru\r\nforum.kinopoisk.ru\r\nforum.km.duma.gov.ru\r\nforum.lady.mail.ru\r\nforum.m24.ru\r\nforum.ozon.ru\r\nforum.rbc.ru\r\nforum.sib.mts.ru\r\nforum.yandex.ru\r\nforum1.avito.ru\r\nforum2.avito.ru\r\nforum3.avito.ru\r\nforum4.km.duma.gov.ru\r\nforum5.avito.ru\r\nforums.avito.ru\r\nforums.mail.ru\r\nforums.zdorovie-shkolnika.spb.aif.ru\r\nforums2.avito.ru\r\nforumtest.avito.ru\r\nforward.avito.ru\r\nforwarding.avito.ru\r\nforyou.avito.ru\r\nforza.avito.ru\r\nfotki.avito.ru\r\nfotki.yandex.ru\r\nfoto-goda-2021.tass.ru\r\nfoto.avito.ru\r\nfoto.ixbt.com\r\nfoto.kommersant.ru\r\nfoto.leasing.rshb.ru\r\nfoto.mail.ru\r\nfoto.my.mail.ru\r\nfotografia.avito.ru\r\nfotos.avito.ru\r\nfoundation.avito.ru\r\nfour.avito.ru\r\nfourgifsip.avito.ru\r\nfox-777.2013.yandex.ru\r\nfox.avito.ru\r\nfoxford.100ege.yandex.ru\r\nfoxford.litres.ru\r\nfoxtelhubbl.play.max.com\r\nfoxteliq.play.max.com\r\nfoxtrot.avito.ru\r\nfoxy.avito.ru\r\nfp-cit1.garant.ru\r\nfp-cit2.garant.ru\r\nfp-cit4.garant.ru\r\nfp-cit6.garant.ru\r\nfp-ext2.garant.ru\r\nfp.avito.ru\r\nfp.perekrestok.ru\r\nfp.tinkoff.ru\r\nfpa.avito.ru\r\nfpcmail.rzd.ru\r\nfpcmail2.rzd.ru\r\nfpcmail3.rzd.ru\r\nfpcmail4.rzd.ru\r\nfpcmail5.rzd.ru\r\nfpi.gov.ru\r\nfps-qa.tinkoff.ru\r\nfps.avito.ru\r\nfptest.avito.ru\r\nfr.avito.ru\r\nfr.euronews.com\r\nfr.magnit.ru\r\nfrag.mail.ru\r\nfragoria.mail.ru\r\nfraise.avito.ru\r\nfrak-echd.mos.ru\r\nframe.avito.ru\r\nframe.tutu.ru\r\nframework.x5.ru\r\nfran.avito.ru\r\nfrance.avito.ru\r\nfranch.x5.ru\r\nfranchise.avito.ru\r\nfrancis.avito.ru\r\nfrancisco.avito.ru\r\nfranco.avito.ru\r\nfrank.avito.ru\r\nfrankfurt.avito.ru\r\nfranklin.avito.ru\r\nfranky.avito.ru\r\nfraud-protection.t2.ru\r\nfraudanke.magnit.ru\r\nfred.avito.ru\r\nfreddy.avito.ru\r\nfrederick.avito.ru\r\nfree-origin.dev.media.max.com\r\nfree-origin.stg.media.max.com\r\nfree.1tv.ru\r\nfree.avito.ru\r\nfree.mail.rambler.ru\r\nfree.news.rambler.ru\r\nfree.play.max.com\r\nfree.rambler.ru\r\nfree2.avito.ru\r\nfreeads.avito.ru\r\nfreebies.avito.ru\r\nfreebooks.avito.ru\r\nfreebox.avito.ru\r\nfreebsd.avito.ru\r\nfreechat.avito.ru\r\nfreecom-app-test.mts.ru\r\nfreecom-app.mts.ru\r\nfreecom-app.new-cashback.mts.ru\r\nfreecom-stage.mts.ru\r\nfreecom-test.mts.ru\r\nfreedigitalcodecs.avito.ru\r\nfreedigitaldm.avito.ru\r\nfreedigitaldownloads.avito.ru\r\nfreedigitalmanager.avito.ru\r\nfreedom.avito.ru\r\nfreedownload.avito.ru\r\nfreeforall.avito.ru\r\nfreegift.avito.ru\r\nfreehdcodecs.avito.ru\r\nfreehost.avito.ru\r\nfreeipa.pg.cgu.mchs.ru\r\nfreelance.avito.ru\r\nfreelance.habr.com\r\nfreeland.avito.ru\r\nfreely.avito.ru\r\nfreemail.avito.ru\r\nfreemaildomains.avito.ru\r\nfreemaildomains.zdorovie-shkolnika.spb.aif.ru\r\nfreeman.avito.ru\r\nfreemediacodecs.avito.ru\r\nfreemediadm.avito.ru\r\nfreemediadownloads.avito.ru\r\nfreemediamanager.avito.ru\r\nfreeprocodecs.avito.ru\r\nfreeprodm.avito.ru\r\nfreeprodownloads.avito.ru\r\nfreepromanager.avito.ru\r\nfreesoft.avito.ru\r\nfreestyle.avito.ru\r\nfreetime.avito.ru\r\nfreeweb.avito.ru\r\nfreeworld.avito.ru\r\nfreeze.avito.ru\r\nfreezone.avito.ru\r\nfreid.mail.ru\r\nfrench.avito.ru\r\nfresco.avito.ru\r\nfresh-bgu.minfin.rk.gov.ru\r\nfresh.avito.ru\r\nfresh.magnit.ru\r\nfresno.avito.ru\r\nfrey.avito.ru\r\nfreya.avito.ru\r\nfrgu.gosuslugi.ru\r\nfrida.avito.ru\r\nfriday.vedomosti.ru\r\nfriend-psi.sber.ru\r\nfriend.avito.ru\r\nfriend.sber.ru\r\nfriendadmin.beeline.ru\r\nfriendchatbotpro.sberbank.ru\r\nfriendly.avito.ru\r\nfriends-contest.2gis.ru\r\nfriends.2gis.ru\r\nfriends.avito.ru\r\nfriends.ivi.ru\r\nfriendship.2gis.ru\r\nfriendship.avito.ru\r\nfrink.avito.ru\r\nfrm.avito.ru\r\nfrm.duma.tambov.gov.ru\r\nfrma.tambov.gov.ru\r\nfrmp.tambov.gov.ru\r\nfrodo.avito.ru\r\nfrog.avito.ru\r\nfrog.mail.ru\r\nfroggy.avito.ru\r\nfromwl.avito.ru\r\nfront-dev.1tv.ru\r\nfront-nmaps01h.cloud.maps.yandex.ru\r\nfront-portal-cit-new2.garant.ru\r\nfront-portal-ext-new.garant.ru\r\nfront-portal.garant.ru\r\nfront.afisha.ru\r\nfront.avito.ru\r\nfront.greenfield1.online.sberbank.ru\r\nfront.greenfield2.online.sberbank.ru\r\nfront.node0.online.sberbank.ru\r\nfront.node1.online.sberbank.ru\r\nfront.node2.online.sberbank.ru\r\nfront.node3.online.sberbank.ru\r\nfront.node4.online.sberbank.ru\r\nfront.node5.online.sberbank.ru\r\nfront.node6.online.sberbank.ru\r\nfront.nodegf1.online.sberbank.ru\r\nfront.ren.tv\r\nfront01.car.rambler.ru\r\nfront02.car.rambler.ru\r\nfront03.car.rambler.ru\r\nfront04.car.rambler.ru\r\nfront1.avito.ru\r\nfront1.srv.mk.ru\r\nfront2.avito.ru\r\nfront3.avito.ru\r\nfront99.gazeta.ru\r\nfronta.greenfield1.online.sberbank.ru\r\nfrontb.greenfield1.online.sberbank.ru\r\nfrontdoor.avito.ru\r\nfrontend-dev.k8s.rg.ru\r\nfrontend-helpcenter.avito.ru\r\nfrontend-stage.k8s.rg.ru\r\nfrontend.avito.ru\r\nfrontend.k8s.rg.ru\r\nfrontend.kino-teatr.ru\r\nfrontend.vh.yandex.ru\r\nfronterr.tutu.ru\r\nfrontier.avito.ru\r\nfrontlog.tutu.ru\r\nfronton.lemanapro.ru\r\nfrontpage.avito.ru\r\nfrost.avito.ru\r\nfrozen.avito.ru\r\nfruit.avito.ru\r\nfruits.mail.ru\r\nfruits2.mail.ru\r\nfs-a.drom.ru\r\nfs.avito.ru\r\nfs.sberbank.ru\r\nfs.tinkoff.ru\r\nfs1.avito.ru\r\nfs1.drom.ru\r\nfs2.avito.ru\r\nfs2.drom.ru\r\nfs5.avito.ru\r\nfsa.avito.ru\r\nfsa.gov.ru\r\nfsapi.myoffice.sberbank.ru\r\nfsc.avito.ru\r\nfsimg.avito.ru\r\nfskn.tomsk.gov.ru\r\nfsm.avito.ru\r\nfso.avito.ru\r\nfsproxyhn.kis.avito.ru\r\nfsproxyst.kis.avito.ru\r\nfstorage.magnit.ru\r\nfsvts.gov.ru\r\nft.avito.ru\r\nft.botplatform.rcs.ims.tele2.ru\r\nft.rcs.ims.tele2.ru\r\nft01.dom.test.gosuslugi.ru\r\nftp-eu.avito.ru\r\nftp.1tv.ru\r\nftp.appservice.azuremsk.ec.mts.ru\r\nftp.apteki.2gis.ru\r\nftp.avito.ru\r\nftp.blog.avito.ru\r\nftp.bus.gov.ru\r\nftp.cp.avito.ru\r\nftp.demo.avito.ru\r\nftp.dev.avito.ru\r\nftp.dns-shop.ru\r\nftp.forum.avito.ru\r\nftp.kino-teatr.ru\r\nftp.lemanapro.ru\r\nftp.mkb.ru\r\nftp.obrnadzor.gov.ru\r\nftp.photo-new.rg.ru\r\nftp.ptv.2gis.ru\r\nftp.secure.avito.ru\r\nftp.shop.avito.ru\r\nftp.spb.kommersant.ru\r\nftp.staging.avito.ru\r\nftp.tass.ru\r\nftp.tele2.ru\r\nftp.test.avito.ru\r\nftp.yandex.ru\r\nftp.zakupki.gov.ru\r\nftp01.avito.ru\r\nftp02.avito.ru\r\nftp03.tass.ru\r\nftp05.tinkoff.ru\r\nftp1.avito.ru\r\nftp10.avito.ru\r\nftp10.vk.com\r\nftp12.avito.ru\r\nftp13.avito.ru\r\nftp14.avito.ru\r\nftp15.avito.ru\r\nftp2.avito.ru\r\nftp2.drom.ru\r\nftp2.kommersant.ru\r\nftp3.avito.ru\r\nftp4.avito.ru\r\nftp5.avito.ru\r\nftp6.avito.ru\r\nftp7.avito.ru\r\nftp8.avito.ru\r\nftp9.avito.ru\r\nftpadmin.avito.ru\r\nftpcc.beeline.ru\r\nftpmini.avito.ru\r\nftpr.beeline.ru\r\nftps.avito.ru\r\nftpserver.avito.ru\r\nftptest.avito.ru\r\nftpweb.avito.ru\r\nfuck.avito.ru\r\nfuel.avito.ru\r\nfuji.avito.ru\r\nfukuoka.avito.ru\r\nfukushima.avito.ru\r\nfull.avito.ru\r\nfullhouse.avito.ru\r\nfullmoon.avito.ru\r\nfun.avito.ru\r\nfun.t2.ru\r\nfun.tele2.ru\r\nfunai.yandex.ru\r\nfund.avito.ru\r\nfund.zdorovie-shkolnika.spb.aif.ru\r\nfundraising.avito.ru\r\nfunfunfun.avito.ru\r\nfunky.avito.ru\r\nfunny.avito.ru\r\nfunnyman.avito.ru\r\nfunzone.avito.ru\r\nfurniture.avito.ru\r\nfury.avito.ru\r\nfusion.avito.ru\r\nfusion.rosatom.ru\r\nfutaba.avito.ru\r\nfutbol.avito.ru\r\nfuture.avito.ru\r\nfuture.gosuslugi.ru\r\nfuture.magnit.ru\r\nfuture.mail.ru\r\nfuture.rbc.ru\r\nfuture.trends.rbc.ru\r\nfuturecity.lenta.ru\r\nfuturemed.tass.ru\r\nfutureshop.x5.ru\r\nfuuud.project.tinkoff.ru\r\nfuzzy.avito.ru\r\nfvnomont.home.megafon.ru\r\nfw-k01.infra.rbc.ru\r\nfw-k02.infra.rbc.ru\r\nfw-out.duma.gov.ru\r\nfw.aprf.gov.ru\r\nfw.avito.ru\r\nfw.sc.tambov.gov.ru\r\nfw01.avito.ru\r\nfw02.avito.ru\r\nfw1.avito.ru\r\nfw1.sc.tambov.gov.ru\r\nfw2.avito.ru\r\nfw2.sc.tambov.gov.ru\r\nfw3.avito.ru\r\nfwa.duma.gov.ru\r\nfwallow.avito.ru\r\nfwb.duma.gov.ru\r\nfwsb.1tv.ru\r\nfwww.babyblog.ru\r\nfx.avito.ru\r\nfx.mts.ru\r\nfx.rbc.ru\r\nfx.yandex.ru\r\nfxbqag.znak.com\r\nfyi.2gis.ru\r\nfz.avito.ru\r\nfz185.minstroy.saratov.gov.ru\r\nfzpg.ksmg.megafon.ru\r\ng-userpic.livejournal.com\r\ng.avito.ru\r\ng.dns-shop.ru\r\ng.kino-teatr.ru\r\ng.meduza.io\r\ng.staging.meduza.io\r\ng1.avito.ru\r\ng2.avito.ru\r\ng3.avito.ru\r\ng4.avito.ru\r\ng5.avito.ru\r\ng6.avito.ru\r\nga.avito.ru\r\nga.ozon.ru\r\nga.trex.premier.one\r\ngaban.avito.ru\r\ngabriel.avito.ru\r\ngac-rds-external-readonly-preprod.avito.ru\r\ngac-rds-external-readonly.avito.ru\r\ngac.drom.ru\r\ngadget.avito.ru\r\ngadget.yandex.ru\r\ngadgets.avito.ru\r\ngadmin.avito.ru\r\ngaga.avito.ru\r\ngagarin.igor.87.yandex.ru\r\ngaia.avito.ru\r\ngaidarforum.bizconf.rbc.ru\r\ngaki.yandex.ru\r\ngal.avito.ru\r\ngal.beeline.ru\r\ngala.avito.ru\r\ngalactica.avito.ru\r\ngaladriel.avito.ru\r\ngalatea.avito.ru\r\ngalaxy.avito.ru\r\ngalaxynote9.rbc.ru\r\ngalera.mail.ru\r\ngaleri.avito.ru\r\ngaleria.avito.ru\r\ngaleria.project.tinkoff.ru\r\ngalerie.avito.ru\r\ngalileo.avito.ru\r\ngalkina.9111.ru\r\ngalleries.avito.ru\r\ngallery.avito.ru\r\ngallery.rbc.ru\r\ngallery2.avito.ru\r\ngallery360.vtb.ru\r\ngallium.avito.ru\r\ngalois.avito.ru\r\ngals.avito.ru\r\ngama.avito.ru\r\ngambit-autotest-1.ing.k8s.dev.ivi.ru\r\ngambit-autotest-2.ing.k8s.dev.ivi.ru\r\ngambit-beta.test.ivi.ru\r\ngambit-jenkins.test.ivi.ru\r\ngambit-master.test.ivi.ru\r\ngambit-qa.ing.k8s.dev.ivi.ru\r\ngambit-smoke-3627000c-w-0.ing.k8s.dev.ivi.ru\r\ngambit-smoke-48471cd5-w-0.ing.k8s.dev.ivi.ru\r\ngambit-smoke-55204bc4-w-0.ing.k8s.dev.ivi.ru\r\ngambit-smoke-5858aeb4-w-0.ing.k8s.dev.ivi.ru\r\ngambit-smoke-6d76f316-w-0.ing.k8s.dev.ivi.ru\r\ngambit-smoke-9e88ed10-w-0.ing.k8s.dev.ivi.ru\r\ngambit-smoke-c85cc08b-w-0.ing.k8s.dev.ivi.ru\r\ngambit-smoke-dfb6be54-w-0.ing.k8s.dev.ivi.ru\r\ngambit-smoke-f5167725-w-0.ing.k8s.dev.ivi.ru\r\ngambit-smoke-f8e7b03f-w-0.ing.k8s.dev.ivi.ru\r\ngambit-smoke.ing.k8s.dev.ivi.ru\r\ngambit.abakhareva.ing.k8s.dev.ivi.ru\r\ngambit.abatenov.ing.k8s.dev.ivi.ru\r\ngambit.abesekerskij.ing.k8s.dev.ivi.ru\r\ngambit.advstand.ing.k8s.dev.ivi.ru\r\ngambit.aefanov.ing.k8s.dev.ivi.ru\r\ngambit.agrozniy.ing.k8s.dev.ivi.ru\r\ngambit.akazachev.ing.k8s.dev.ivi.ru\r\ngambit.akhazanov.ing.k8s.dev.ivi.ru\r\ngambit.akhlebnikov.ing.k8s.dev.ivi.ru\r\ngambit.alapshin.ing.k8s.dev.ivi.ru\r\ngambit.android-autotest-2.ing.k8s.dev.ivi.ru\r\ngambit.android-autotest-smoke.ing.k8s.dev.ivi.ru\r\ngambit.android-autotest.ing.k8s.dev.ivi.ru\r\ngambit.android-mobile.ing.k8s.dev.ivi.ru\r\ngambit.android.ing.k8s.dev.ivi.ru\r\ngambit.anmakarov.ing.k8s.dev.ivi.ru\r\ngambit.apetrushishin.ing.k8s.dev.ivi.ru\r\ngambit.asafin.ing.k8s.dev.ivi.ru\r\ngambit.aschekoturova.ing.k8s.dev.ivi.ru\r\ngambit.asmirnov.ing.k8s.dev.ivi.ru\r\ngambit.asnezhnitskaya.ing.k8s.dev.ivi.ru\r\ngambit.astarostin.ing.k8s.dev.ivi.ru\r\ngambit.atatarinov.ing.k8s.dev.ivi.ru\r\ngambit.atitova.ing.k8s.dev.ivi.ru\r\ngambit.auto-atitova.ing.k8s.dev.ivi.ru\r\ngambit.autoysimonov.ing.k8s.dev.ivi.ru\r\ngambit.dbondarenko.ing.k8s.dev.ivi.ru\r\ngambit.default.ing.k8s.dev.ivi.ru\r\ngambit.dgonchar.ing.k8s.dev.ivi.ru\r\ngambit.dgorokhova.ing.k8s.dev.ivi.ru\r\ngambit.dmitriev.ing.k8s.dev.ivi.ru\r\ngambit.dmoskovskiy.ing.k8s.dev.ivi.ru\r\ngambit.dpronin.ing.k8s.dev.ivi.ru\r\ngambit.dpronyakin.ing.k8s.dev.ivi.ru\r\ngambit.dserbin.ing.k8s.dev.ivi.ru\r\ngambit.dshaymardanova.ing.k8s.dev.ivi.ru\r\ngambit.dshebordaev.ing.k8s.dev.ivi.ru\r\ngambit.dsmirnov.ing.k8s.dev.ivi.ru\r\ngambit.ekaplun.ing.k8s.dev.ivi.ru\r\ngambit.enikolaev.ing.k8s.dev.ivi.ru\r\ngambit.eryabets.ing.k8s.dev.ivi.ru\r\ngambit.esosulin.ing.k8s.dev.ivi.ru\r\ngambit.estolyarov.ing.k8s.dev.ivi.ru\r\ngambit.fedorov.ing.k8s.dev.ivi.ru\r\ngambit.gambit-autotest-1.ing.k8s.dev.ivi.ru\r\ngambit.gambit-autotest-2.ing.k8s.dev.ivi.ru\r\ngambit.gambit-qa.ing.k8s.dev.ivi.ru\r\ngambit.gambit-smoke-3627000c-w-0.ing.k8s.dev.ivi.ru\r\ngambit.gambit-smoke-48471cd5-w-0.ing.k8s.dev.ivi.ru\r\ngambit.gambit-smoke-55204bc4-w-0.ing.k8s.dev.ivi.ru\r\ngambit.gambit-smoke-5858aeb4-w-0.ing.k8s.dev.ivi.ru\r\ngambit.gambit-smoke-6d76f316-w-0.ing.k8s.dev.ivi.ru\r\ngambit.gambit-smoke-9e88ed10-w-0.ing.k8s.dev.ivi.ru\r\ngambit.gambit-smoke-c85cc08b-w-0.ing.k8s.dev.ivi.ru\r\ngambit.gambit-smoke-dfb6be54-w-0.ing.k8s.dev.ivi.ru\r\ngambit.gambit-smoke-f5167725-w-0.ing.k8s.dev.ivi.ru\r\ngambit.gambit-smoke-f8e7b03f-w-0.ing.k8s.dev.ivi.ru\r\ngambit.gambit-smoke.ing.k8s.dev.ivi.ru\r\ngambit.guptest.ing.k8s.dev.ivi.ru\r\ngambit.hydra-autotest.ing.k8s.dev.ivi.ru\r\ngambit.ialekhin.ing.k8s.dev.ivi.ru\r\ngambit.ifluerash.ing.k8s.dev.ivi.ru\r\ngambit.ikrasavin.ing.k8s.dev.ivi.ru\r\ngambit.ikrylov.ing.k8s.dev.ivi.ru\r\ngambit.ilisovtsov.ing.k8s.dev.ivi.ru\r\ngambit.ios-primo.ing.k8s.dev.ivi.ru\r\ngambit.ios-smoke.ing.k8s.dev.ivi.ru\r\ngambit.ios-stats.ing.k8s.dev.ivi.ru\r\ngambit.ios.ing.k8s.dev.ivi.ru\r\ngambit.ishilkin.ing.k8s.dev.ivi.ru\r\ngambit.ishkurko.ing.k8s.dev.ivi.ru\r\ngambit.isizov-2.ing.k8s.dev.ivi.ru\r\ngambit.isizov.ing.k8s.dev.ivi.ru\r\ngambit.kafanasev.ing.k8s.dev.ivi.ru\r\ngambit.kemelyanov.ing.k8s.dev.ivi.ru\r\ngambit.kmartyashkov.ing.k8s.dev.ivi.ru\r\ngambit.logger-and-collector-tests.ing.k8s.dev.ivi.ru\r\ngambit.mapi-landing-autotest.ing.k8s.dev.ivi.ru\r\ngambit.mapimaster.ing.k8s.dev.ivi.ru\r\ngambit.mapitest.ing.k8s.dev.ivi.ru\r\ngambit.mgrischenko-0.ing.k8s.dev.ivi.ru\r\ngambit.mgrischenko-1.ing.k8s.dev.ivi.ru\r\ngambit.mgrischenko.ing.k8s.dev.ivi.ru\r\ngambit.mkolygin.ing.k8s.dev.ivi.ru\r\ngambit.mkudusov.ing.k8s.dev.ivi.ru\r\ngambit.msokolov.ing.k8s.dev.ivi.ru\r\ngambit.mstarostina.ing.k8s.dev.ivi.ru\r\ngambit.mtarakanova.ing.k8s.dev.ivi.ru\r\ngambit.nbarsukov.ing.k8s.dev.ivi.ru\r\ngambit.nbrodnikov.ing.k8s.dev.ivi.ru\r\ngambit.nestor-tester.ing.k8s.dev.ivi.ru\r\ngambit.nkudryavtseva.ing.k8s.dev.ivi.ru\r\ngambit.nmarchenko.ing.k8s.dev.ivi.ru\r\ngambit.novoselov.ing.k8s.dev.ivi.ru\r\ngambit.paidmodel.ing.k8s.dev.ivi.ru\r\ngambit.pchukhnina.ing.k8s.dev.ivi.ru\r\ngambit.pskritskiy.ing.k8s.dev.ivi.ru\r\ngambit.punpun.ing.k8s.dev.ivi.ru\r\ngambit.rkostyukov.ing.k8s.dev.ivi.ru\r\ngambit.samsonov.ing.k8s.dev.ivi.ru\r\ngambit.skuzmitskiy.ing.k8s.dev.ivi.ru\r\ngambit.smarttv.ing.k8s.dev.ivi.ru\r\ngambit.smoke-web.ing.k8s.dev.ivi.ru\r\ngambit.stable.ivi.ru\r\ngambit.staging.ivi.ru\r\ngambit.streamux.ing.k8s.dev.ivi.ru\r\ngambit.svolkov.ing.k8s.dev.ivi.ru\r\ngambit.takimova.ing.k8s.dev.ivi.ru\r\ngambit.test.ivi.ru\r\ngambit.ttsvetkova.ing.k8s.dev.ivi.ru\r\ngambit.tvildanov.ing.k8s.dev.ivi.ru\r\ngambit.vanikin.ing.k8s.dev.ivi.ru\r\ngambit.vishchuk.ing.k8s.dev.ivi.ru\r\ngambit.vision-autotest-2.ing.k8s.dev.ivi.ru\r\ngambit.vision-autotest.ing.k8s.dev.ivi.ru\r\ngambit.vision-smoke.ing.k8s.dev.ivi.ru\r\ngambit.vision.ing.k8s.dev.ivi.ru\r\ngambit.vkhripach.ing.k8s.dev.ivi.ru\r\ngambit.vkhripach.test.ivi.ru\r\ngambit.vklimentev.ing.k8s.dev.ivi.ru\r\ngambit.vkugay.ing.k8s.dev.ivi.ru\r\ngambit.vkutskaylis.ing.k8s.dev.ivi.ru\r\ngambit.vpetukhov.ing.k8s.dev.ivi.ru\r\ngambit.vpetukhova.ing.k8s.dev.ivi.ru\r\ngambit.vpyslar.ing.k8s.dev.ivi.ru\r\ngambit.vrylov-1.ing.k8s.dev.ivi.ru\r\ngambit.vrylov.ing.k8s.dev.ivi.ru\r\ngambit.vstreltsov.ing.k8s.dev.ivi.ru\r\ngambit.vzhukov.ing.k8s.dev.ivi.ru\r\ngambit.web.ing.k8s.dev.ivi.ru\r\ngambit.yandriyanova.ing.k8s.dev.ivi.ru\r\ngambit.yapavlov.ing.k8s.dev.ivi.ru\r\ngambit.ybolotnikov.ing.k8s.dev.ivi.ru\r\ngambit.yermak.ing.k8s.dev.ivi.ru\r\ngambit.ysimonov-2.ing.k8s.dev.ivi.ru\r\ngambit.ysimonov.ing.k8s.dev.ivi.ru\r\ngambit.zshhegolikhina.ing.k8s.dev.ivi.ru\r\ngambit10.test.ivi.ru\r\ngambit11.test.ivi.ru\r\ngambit12.test.ivi.ru\r\ngambit13.test.ivi.ru\r\ngambit14.test.ivi.ru\r\ngambit15.test.ivi.ru\r\ngambit16.test.ivi.ru\r\ngambit17.test.ivi.ru\r\ngambit2.test.ivi.ru\r\ngambit3.test.ivi.ru\r\ngambit4.test.ivi.ru\r\ngambit5.test.ivi.ru\r\ngambit6.test.ivi.ru\r\ngambit7.test.ivi.ru\r\ngambit8.test.ivi.ru\r\ngambit9.test.ivi.ru\r\ngame-api-cubesolutions.beeline.ru\r\ngame-my01.bb.mail.ru\r\ngame.avito.ru\r\ngame.beeline.ru\r\ngame.evo-cert.rosbank.ru\r\ngame.evo-test.rosbank.ru\r\ngame.evo.rosbank.ru\r\ngame.litres.ru\r\ngame.megafon.ru\r\ngame.mvideo.ru\r\ngame.tele2.ru\r\ngame.tz.mail.ru\r\ngame.vtb.ru\r\ngame1.avito.ru\r\ngame2.avito.ru\r\ngame2048.beeline.ru\r\ngame5.avito.ru\r\ngamehub.rambler.ru\r\ngamer.avito.ru\r\ngamers.avito.ru\r\ngames-test.mkb.ru\r\ngames.avito.ru\r\ngames.beeline.ru\r\ngames.euronews.com\r\ngames.mail.ru\r\ngames.megafon.ru\r\ngames.mkb.ru\r\ngames.money.yandex.ru\r\ngames.mts.ru\r\ngames.net.ixbt.com\r\ngames.ok.ru\r\ngames.rambler.ru\r\ngames.rbc.ru\r\ngames.tele2.ru\r\ngames08.gazeta.ru\r\ngames10.mail.ru\r\ngames11.mail.ru\r\ngames13.mail.ru\r\ngames14.mail.ru\r\ngames15.mail.ru\r\ngames16.mail.ru\r\ngames17.mail.ru\r\ngames18.mail.ru\r\ngames19.mail.ru\r\ngames2.avito.ru\r\ngames2.mail.ru\r\ngames20.mail.ru\r\ngames23.mail.ru\r\ngames25.mail.ru\r\ngames26.mail.ru\r\ngames27.mail.ru\r\ngames28.mail.ru\r\ngames29.mail.ru\r\ngames3.mail.ru\r\ngames30.mail.ru\r\ngames31.mail.ru\r\ngames32.mail.ru\r\ngames33.mail.ru\r\ngames34.mail.ru\r\ngames35.mail.ru\r\ngames36.mail.ru\r\ngames37.mail.ru\r\ngames38.mail.ru\r\ngames4.mail.ru\r\ngames5.mail.ru\r\ngames6.mail.ru\r\ngames7.mail.ru\r\ngames8.mail.ru\r\ngames9.mail.ru\r\ngamesdb2.mail.ru\r\ngamesdb3.mail.ru\r\ngameta.yandex.ru\r\ngamez.avito.ru\r\ngamezone.avito.ru\r\ngamification.sps.rosatom.ru\r\ngaming-start.megafon.ru\r\ngaming.avito.ru\r\ngaming.beeline.ru\r\ngaming.megafon.ru\r\ngamma.avito.ru\r\ngamma.mail.ru\r\ngamma.zen-test.yandex.ru\r\ngammacloud.mail.ru\r\ngan.avito.ru\r\ngandalf.avito.ru\r\ngandalf.yandex.ru\r\nganesh.avito.ru\r\nganesha.avito.ru\r\nganges.avito.ru\r\nganimed.mail.ru\r\nganymede.avito.ru\r\ngap.avito.ru\r\ngapi.avito.ru\r\ngapps.avito.ru\r\ngarage.avito.ru\r\ngarage.mts.ru\r\ngarant.avito.ru\r\ngarant.open.ru\r\ngarant.psbank.ru\r\ngarcia.avito.ru\r\ngarda.megafon.ru\r\ngarden.avito.ru\r\ngardena.avito.ru\r\ngareth.avito.ru\r\ngarfield.avito.ru\r\ngarm.avito.ru\r\ngarnet.avito.ru\r\ngarnet.pet-project.habr.com\r\ngarnier-olia.lady.mail.ru\r\ngaruda.avito.ru\r\ngarus-proxima.garant.ru\r\ngarus.garant.ru\r\ngarweb-new-virt.garant.ru\r\ngarweb.garant.ru\r\ngary.avito.ru\r\ngaryg.mail.ru\r\ngas.avito.ru\r\ngas.beeline.ru\r\ngas.rk.gov.ru\r\ngasification.tass.ru\r\ngaspar.avito.ru\r\ngasps-support.genproc.gov.ru\r\ngaston.avito.ru\r\ngastro.avito.ru\r\ngasu.gov.ru\r\ngate-dialog-messenger-ift.online.sberbank.ru\r\ngate-dialog-messenger-psi.online.sberbank.ru\r\ngate-dialog-messenger.online.sberbank.ru\r\ngate-digital-services.t2.ru\r\ngate-mk1.mk.ru\r\ngate-pop3.dmz.tass.ru\r\ngate.avito.ru\r\ngate.mnr.gov.ru\r\ngate196.mta.gosuslugi.ru\r\ngate197.mta.gosuslugi.ru\r\ngate198.mta.gosuslugi.ru\r\ngate199.mta.gosuslugi.ru\r\ngate2.avito.ru\r\ngate2.digital.gov.ru\r\ngate200.mta.gosuslugi.ru\r\ngate201.mta.gosuslugi.ru\r\ngate202.mta.gosuslugi.ru\r\ngate203.mta.gosuslugi.ru\r\ngate204.mta.gosuslugi.ru\r\ngate205.mta.gosuslugi.ru\r\ngate3.mchs.gov.ru\r\ngatekeeper.avito.ru\r\ngates.avito.ru\r\ngateway.avito.ru\r\ngateway.chat.psbank.ru\r\ngateway.chatdev.psbank.ru\r\ngateway.chatprep.psbank.ru\r\ngateway.chattest.psbank.ru\r\ngateway.euro.who.int\r\ngateway.gosuslugi.ru\r\ngateway.kino-teatr.ru\r\ngateway1.avito.ru\r\ngateway2.avito.ru\r\ngato.avito.ru\r\ngauss.avito.ru\r\ngautam.avito.ru\r\ngava.avito.ru\r\ngay.avito.ru\r\ngaz.drom.ru\r\ngaza.avito.ru\r\ngaza.iz.ru\r\ngazart-2023.kp.ru\r\ngazeta.aif.ru\r\ngazeta.avito.ru\r\ngazeta.lenta.ru\r\ngazeta.yandex.ru\r\ngazprombank.credit-registry.nalog.ru\r\ngazprombank.interfax.ru\r\ngb.avito.ru\r\ngb.sports.ru\r\ngb2-bratsk.gosuslugi.ru\r\ngbs.avito.ru\r\ngbuvostizm.mos.ru\r\ngc.avito.ru\r\ngc.pics.livejournal.com\r\ngca.avito.ru\r\ngcc.avito.ru\r\ngci.avito.ru\r\ngclub.m.beeline.ru\r\ngcm.avito.ru\r\ngcom-product-find-dev.avito.ru\r\ngcom-product-find-qa.avito.ru\r\ngcp-routing.latam.stg.media.max.com\r\ngcp-routing.live.latam.int.media.max.com\r\ngcp-routing.live.latam.stg.media.max.com\r\ngcp.amer-free.int.media.max.com\r\ngcp.apac-free.int.media.max.com\r\ngcp.asia.dev.media.max.com\r\ngcp.asia.int.media.max.com\r\ngcp.asia.prd.media.max.com\r\ngcp.asia.stg.media.max.com\r\ngcp.br.asia.dev.media.max.com\r\ngcp.br.asia.int.media.max.com\r\ngcp.br.asia.prd.media.max.com\r\ngcp.br.asia.stg.media.max.com\r\ngcp.br.eu.dev.media.max.com\r\ngcp.br.eu.int.media.max.com\r\ngcp.br.eu.prd.media.max.com\r\ngcp.br.eu.stg.media.max.com\r\ngcp.br.latam.dev.media.max.com\r\ngcp.br.latam.int.media.max.com\r\ngcp.br.latam.prd.media.max.com\r\ngcp.br.latam.stg.media.max.com\r\ngcp.br.oceania.dev.media.max.com\r\ngcp.br.oceania.int.media.max.com\r\ngcp.br.oceania.prd.media.max.com\r\ngcp.br.oceania.stg.media.max.com\r\ngcp.br.us.dev.media.max.com\r\ngcp.br.us.int.media.max.com\r\ngcp.br.us.prd.media.max.com\r\ngcp.br.us.stg.media.max.com\r\ngcp.cfc.dev.media.max.com\r\ngcp.cfc.int.media.max.com\r\ngcp.cfc.prd.media.max.com\r\ngcp.cfc.stg.media.max.com\r\ngcp.cnn.latam.dev.media.max.com\r\ngcp.cnn.latam.stg.media.max.com\r\ngcp.cnn.us.int.media.max.com\r\ngcp.cnn.us.prd.media.max.com\r\ngcp.cnnrss.int.media.max.com\r\ngcp.creatives.int.media.max.com\r\ngcp.dazn.dev.media.max.com\r\ngcp.dazn.int.media.max.com\r\ngcp.dazn.prd.media.max.com\r\ngcp.dazn.stg.media.max.com\r\ngcp.dplus.asia.dev.media.max.com\r\ngcp.dplus.asia.int.media.max.com\r\ngcp.dplus.asia.prd.media.max.com\r\ngcp.dplus.asia.stg.media.max.com\r\ngcp.dplus.eu.dev.media.max.com\r\ngcp.dplus.eu.int.media.max.com\r\ngcp.dplus.eu.prd.media.max.com\r\ngcp.dplus.eu.stg.media.max.com\r\ngcp.dplus.latam.dev.media.max.com\r\ngcp.dplus.latam.int.media.max.com\r\ngcp.dplus.latam.prd.media.max.com\r\ngcp.dplus.latam.stg.media.max.com\r\ngcp.dplus.oceania.dev.media.max.com\r\ngcp.dplus.oceania.int.media.max.com\r\ngcp.dplus.oceania.prd.media.max.com\r\ngcp.dplus.oceania.stg.media.max.com\r\ngcp.dplus.us.dev.media.max.com\r\ngcp.dplus.us.int.media.max.com\r\ngcp.dplus.us.prd.media.max.com\r\ngcp.dplus.us.stg.media.max.com\r\ngcp.emea-free.int.media.max.com\r\ngcp.eu.dev.media.max.com\r\ngcp.eu.int.media.max.com\r\ngcp.eu.prd.media.max.com\r\ngcp.eu.stg.media.max.com\r\ngcp.free.int.media.max.com\r\ngcp.latam-free.int.media.max.com\r\ngcp.latam.dev.media.max.com\r\ngcp.latam.int.media.max.com\r\ngcp.latam.prd.media.max.com\r\ngcp.latam.stg.media.max.com\r\ngcp.live.asia.dev.media.max.com\r\ngcp.live.asia.prd.media.max.com\r\ngcp.live.br.asia.dev.media.max.com\r\ngcp.live.br.asia.prd.media.max.com\r\ngcp.live.br.eu.dev.media.max.com\r\ngcp.live.br.eu.int.media.max.com\r\ngcp.live.br.eu.prd.media.max.com\r\ngcp.live.br.eu.stg.media.max.com\r\ngcp.live.br.latam.dev.media.max.com\r\ngcp.live.br.latam.int.media.max.com\r\ngcp.live.br.latam.prd.media.max.com\r\ngcp.live.br.latam.stg.media.max.com\r\ngcp.live.br.oceania.int.media.max.com\r\ngcp.live.br.us.dev.media.max.com\r\ngcp.live.br.us.int.media.max.com\r\ngcp.live.br.us.prd.media.max.com\r\ngcp.live.br.us.stg.media.max.com\r\ngcp.live.cnn.asia.dev.media.max.com\r\ngcp.live.cnn.asia.prd.media.max.com\r\ngcp.live.cnn.eu.stg.media.max.com\r\ngcp.live.cnn.latam.dev.media.max.com\r\ngcp.live.cnn.latam.prd.media.max.com\r\ngcp.live.cnn.oceania.int.media.max.com\r\ngcp.live.dazn-eu-portable.int.media.max.com\r\ngcp.live.dazn.dev.media.max.com\r\ngcp.live.dazn.int.media.max.com\r\ngcp.live.dazn.prd.media.max.com\r\ngcp.live.dazn.stg.media.max.com\r\ngcp.live.dplus.asia.dev.media.max.com\r\ngcp.live.dplus.asia.prd.media.max.com\r\ngcp.live.dplus.eu.dev.media.max.com\r\ngcp.live.dplus.eu.int.media.max.com\r\ngcp.live.dplus.eu.prd.media.max.com\r\ngcp.live.dplus.eu.stg.media.max.com\r\ngcp.live.dplus.latam.dev.media.max.com\r\ngcp.live.dplus.latam.int.media.max.com\r\ngcp.live.dplus.latam.prd.media.max.com\r\ngcp.live.dplus.latam.stg.media.max.com\r\ngcp.live.dplus.oceania.int.media.max.com\r\ngcp.live.dplus.us.dev.media.max.com\r\ngcp.live.dplus.us.int.media.max.com\r\ngcp.live.dplus.us.prd.media.max.com\r\ngcp.live.dplus.us.stg.media.max.com\r\ngcp.live.emea.dev.media.max.com\r\ngcp.live.emea.int.media.max.com\r\ngcp.live.emea.prd.media.max.com\r\ngcp.live.emea.stg.media.max.com\r\ngcp.live.epl.dev.media.max.com\r\ngcp.live.eu.dev.media.max.com\r\ngcp.live.eu.int.media.max.com\r\ngcp.live.eu.prd.media.max.com\r\ngcp.live.eu.stg.media.max.com\r\ngcp.live.latam.dev.media.max.com\r\ngcp.live.latam.int.media.max.com\r\ngcp.live.latam.prd.media.max.com\r\ngcp.live.latam.stg.media.max.com\r\ngcp.live.na.dev.media.max.com\r\ngcp.live.na.int.media.max.com\r\ngcp.live.na.prd.media.max.com\r\ngcp.live.na.stg.media.max.com\r\ngcp.live.oceania.int.media.max.com\r\ngcp.live.olympics.dev.media.max.com\r\ngcp.live.olympics.int.media.max.com\r\ngcp.live.olympics.prd.media.max.com\r\ngcp.live.olympics.stg.media.max.com\r\ngcp.live.sa.dev.media.max.com\r\ngcp.live.sa.int.media.max.com\r\ngcp.live.sa.prd.media.max.com\r\ngcp.live.sa.stg.media.max.com\r\ngcp.live.us.dev.media.max.com\r\ngcp.live.us.int.media.max.com\r\ngcp.live.us.prd.media.max.com\r\ngcp.live.us.stg.media.max.com\r\ngcp.oceania-free.int.media.max.com\r\ngcp.oceania.dev.media.max.com\r\ngcp.oceania.int.media.max.com\r\ngcp.oceania.prd.media.max.com\r\ngcp.oceania.stg.media.max.com\r\ngcp.olympics.dev.media.max.com\r\ngcp.olympics.int.media.max.com\r\ngcp.olympics.prd.media.max.com\r\ngcp.olympics.stg.media.max.com\r\ngcs.avito.ru\r\ngd.avito.ru\r\ngdi.avito.ru\r\ngdp2krsk.gosuslugi.ru\r\nge.avito.ru\r\ngea.avito.ru\r\ngear.avito.ru\r\ngears.avito.ru\r\nged.avito.ru\r\ngee.rpn.gov.ru\r\ngeek.avito.ru\r\ngeisha.lady.mail.ru\r\ngelik.tinkoff.ru\r\ngem.avito.ru\r\ngemini.avito.ru\r\ngems.avito.ru\r\ngen-callback.open.ru\r\ngen.avito.ru\r\ngen.gismeteo.ru\r\ngenbank.credit-registry.nalog.ru\r\ngene.avito.ru\r\ngenealogy.avito.ru\r\ngeneral.avito.ru\r\ngenerator.avito.ru\r\ngenesis.avito.ru\r\ngenesis.drom.ru\r\ngenesis.mail.ru\r\ngenesis.open.ru\r\ngenesys.sovcombank.ru\r\ngenetics.avito.ru\r\ngenie.avito.ru\r\ngenius.avito.ru\r\ngennady.0101.yandex.ru\r\ngenome.avito.ru\r\ngenplan.yalta.rk.gov.ru\r\ngenproc.gov.ru\r\ngentle-ekb.yandex.ru\r\ngentle-min.yandex.ru\r\ngentle-min2.yandex.ru\r\ngentle-novosib.yandex.ru\r\ngentle-sib.yandex.ru\r\ngentle-sim.yandex.ru\r\ngeo-dev.demo.megafon.ru\r\ngeo-sorry.banki.ru\r\ngeo-t.geoapi.sberbank.ru\r\ngeo-t.online.sberbank.ru\r\ngeo-test.demo.megafon.ru\r\ngeo.avito.ru\r\ngeo.cloud.mts.ru\r\ngeo.magnit.ru\r\ngeo.online.sberbank.ru\r\ngeo.pochta.ru\r\ngeo.psbank.ru\r\ngeo.s3.cloud.mts.ru\r\ngeo.tele2.ru\r\ngeo1.geoapi.sberbank.ru\r\ngeo1.online.sberbank.ru\r\ngeo2.online.sberbank.ru\r\ngeoanalytics.beeline.ru\r\ngeoapi.babyblog.ru\r\ngeoapi.sberbank.ru\r\ngeochecki-vpd.nalog.gov.ru\r\ngeocode-maps.yandex.ru\r\ngeocontext.yandex.ru\r\ngeodata.academy.mchs.ru\r\ngeodata.mchs.ru\r\ngeoexport.yandex.ru\r\ngeogen.yandex.ru\r\ngeogen01t.yandex.ru\r\ngeography.avito.ru\r\ngeoinfo.rbc.ru\r\ngeoip.avito.ru\r\ngeolog.life.ru\r\ngeology.avito.ru\r\ngeonetwork.avito.ru\r\ngeoplus.t2.ru\r\ngeoplus.tele2.ru\r\ngeoportal.avito.ru\r\ngeoportal.rgis.rk.gov.ru\r\ngeoportal.rgistest.rk.gov.ru\r\ngeoproxy.ozon.ru\r\ngeorge.avito.ru\r\ngeorges.avito.ru\r\ngeorgia.avito.ru\r\ngeos.rambler.ru\r\ngeoserver01.cgu.mchs.ru\r\ngeotech.avito.ru\r\ngeov2.demo.megafon.ru\r\ngeowb.wb.ad.worldbank.org\r\ngeowb.worldbank.org\r\ngeoweb.avito.ru\r\ngep.datacollect.iarc.who.int\r\ngepagard.lady.mail.ru\r\ngepard.mail.ru\r\ngepsdemo.gosuslugi.ru\r\nger.avito.ru\r\ngera.avito.ru\r\ngerald.avito.ru\r\ngerard.avito.ru\r\ngerasymenko.2017.yandex.ru\r\ngerman.avito.ru\r\ngerman.zdorovie-shkolnika.spb.aif.ru\r\ngermany.avito.ru\r\ngeroi-fotohroniki.tass.ru\r\ngeronimo.avito.ru\r\ngerxe.mail.ru\r\nges.avito.ru\r\ngestalt.avito.ru\r\ngestao.avito.ru\r\ngestia.mail.ru\r\ngestion.avito.ru\r\nget.avito.ru\r\ngetcodecs.avito.ru\r\ngetdigitalcodecs.avito.ru\r\ngetfreecodecs.avito.ru\r\ngetlivecodecs.avito.ru\r\ngetlogin.rosbank.ru\r\ngetmediacodecs.avito.ru\r\ngetnewcodecs.avito.ru\r\ngetsenty-dev.yandex.ru\r\ngetslot.lemanapro.ru\r\ngetthiscodecs.avito.ru\r\ngewinnspiel.avito.ru\r\ngeyser.avito.ru\r\ngf.avito.ru\r\ngf1.online.sberbank.ru\r\ngforge.avito.ru\r\ngfs.avito.ru\r\ngfs.gov.ru\r\ngfstest.avito.ru\r\ngfx.avito.ru\r\ngg.avito.ru\r\nggg.avito.ru\r\nggs.sakha.gov.ru\r\ngh.avito.ru\r\ngh.tomsk.gov.ru\r\nghc.avito.ru\r\nghk.feedback.rosatom.ru\r\nghost.avito.ru\r\nghost.iz.ru\r\nghost.kino-teatr.ru\r\nghosthunter.avito.ru\r\nghoul-web.rbc.ru\r\nghoul.rbc.ru\r\ngi.avito.ru\r\ngia.beeline.ru\r\ngiacms.worldbank.org\r\ngiadms.worldbank.org\r\ngiadmsqa.worldbank.org\r\ngiant.avito.ru\r\ngiasp.worldbank.org\r\ngib.avito.ru\r\ngibbs.avito.ru\r\ngibdd.mail.ru\r\ngibdd.sakha.gov.ru\r\ngibproxy.hh.ru\r\ngid.m24.ru\r\ngid.vk.com\r\ngidropolis.life.ru\r\ngif.avito.ru\r\ngift.avito.ru\r\ngift2.mail.ru\r\ngift3.mail.ru\r\ngift4.mail.ru\r\ngift5.mail.ru\r\ngiftbook.litres.ru\r\ngifts.avito.ru\r\ngifts.mail.ru\r\ngifts.megafon.ru\r\ngifts.tele2.ru\r\ngiga.avito.ru\r\ngigabyte.avito.ru\r\ngigalegal.sber.ru\r\ngigapixel-admin.life.ru\r\ngigapixel.life.ru\r\ngigi.avito.ru\r\ngigizamozgi.rbc.ru\r\ngilda.avito.ru\r\ngimis-rk.gosuslugi.ru\r\ngimli.avito.ru\r\ngimn-intellekt-essentuki-r07.gosweb.gosuslugi.ru\r\ngimn1-sever.gosuslugi.ru\r\ngimn19-r45.gosuslugi.ru\r\ngimn24-stavropol-r07.gosweb.gosuslugi.ru\r\ngimn3-krasnoyarsk-r04.gosweb.gosuslugi.ru\r\ngimn33-doneck-r897.gosweb.gosuslugi.ru\r\ngimn4-krasnoyarsk-r04.gosweb.gosuslugi.ru\r\ngimnaziya133ussurijsk-r25.gosweb.gosuslugi.ru\r\ngimnaziya19kaluga-r40.gosweb.gosuslugi.ru\r\ngimnaziya2nizhnevartovsk-r86.gosweb.gosuslugi.ru\r\ngimnaziya33ulyanovsk-r73.gosweb.gosuslugi.ru\r\ngimnaziya44ulyanovsk-r73.gosweb.gosuslugi.ru\r\ngimnaziyaketchenerovskaya-r08.gosweb.gosuslugi.ru\r\ngimnaziyalaboratoriyasalaxovasurgut-r86.gosweb.gosuslugi.ru\r\ngimnaziyanazranovskogoaliyurt-r26.gosweb.gosuslugi.ru\r\ngimnaziyayugorsk.gosuslugi.ru\r\ngimns1.gosuslugi.ru\r\ngims.cgu.mchs.ru\r\ngims.tomsk.gov.ru\r\ngimsservices.mchs.ru\r\ngin.avito.ru\r\ngina.avito.ru\r\nginger.avito.ru\r\ngingiva.mail.ru\r\nginny.avito.ru\r\nginza.avito.ru\r\nginzburg.mail.ru\r\ngio.avito.ru\r\ngiod.consultant.ru\r\ngiovanni.avito.ru\r\ngip.avito.ru\r\ngiporigin.avito.ru\r\ngirl.avito.ru\r\ngirls.avito.ru\r\ngis.avito.ru\r\ngis1.avito.ru\r\ngis2.avito.ru\r\ngisgmp.cgu.mchs.ru\r\ngisgmp.dev.cgu.iac.mchs.ru\r\ngislaved.avito.ru\r\ngisn.tomsk.gov.ru\r\ngisogd.mos.ru\r\ngisogd.rk.gov.ru\r\ngisp.gov.ru\r\ngissc.mnr.gov.ru\r\ngistek.rosenergo.gov.ru\r\ngisweb.avito.ru\r\ngit-dc.resources.cloud.mts.ru\r\ngit-treemap.k.avito.ru\r\ngit.9111.ru\r\ngit.avito.ru\r\ngit.dev.zoon.ru\r\ngit.gitlab.gitlab.git.gitlab.aif-city.spb.aif.ru\r\ngit.kino-teatr.ru\r\ngit.kommersant.ru\r\ngit.minzdrav.gov.ru\r\ngit.mk.ru\r\ngit.paas.cloud.mts.ru\r\ngit.sakha.gov.ru\r\ngit.ugwcscan95946ce37bd9a35718a685dbdf36ac61.greeenway.aif.ru\r\ngit.yandex.ru\r\ngit2742.film.ru\r\ngithub.yandex.ru\r\ngitlab-ci.park.rambler.ru\r\ngitlab-internal.wildberries.ru\r\ngitlab-mirror.srv.hub.litres.ru\r\ngitlab-private.wildberries.ru\r\ngitlab-test.dev.iac.mchs.ru\r\ngitlab-vm.tech.mvideo.ru\r\ngitlab.2gis.ru\r\ngitlab.avito.ru\r\ngitlab.babyblog.ru\r\ngitlab.cgu.mchs.ru\r\ngitlab.dev.iac.mchs.ru\r\ngitlab.dostoevskiy-spb.aif.ru\r\ngitlab.education.tbank.ru\r\ngitlab.git.gkh.hab.aif.ru\r\ngitlab.git.www.spasibo-internet.kazan.aif.ru\r\ngitlab.infra.cgu.mchs.ru\r\ngitlab.interfax.ru\r\ngitlab.kino-teatr.ru\r\ngitlab.magnit.ru\r\ngitlab.rambler.ru\r\ngitlab.rpn.gov.ru\r\ngitlab.srv.hub.litres.ru\r\ngitlab.staging.tech.mvideo.ru\r\ngitlab.tech.mvideo.ru\r\ngitlab.vtb.ru\r\ngitlab.wildberries.ru\r\ngiveapm.worldbank.org\r\ngiveapmdev.worldbank.org\r\ngiveapmdevapp.worldbank.org\r\ngiveapmqa.worldbank.org\r\ngiveapmqaapp.worldbank.org\r\ngivenchy.lady.mail.ru\r\ngiving.avito.ru\r\ngiza.kommersant.ru\r\ngizmo.avito.ru\r\ngj.avito.ru\r\ngjc.avito.ru\r\ngjs.avito.ru\r\ngk.24okna.yandex.ru\r\ngk.avito.ru\r\ngkcp.sakha.gov.ru\r\ngkgeo.sakha.gov.ru\r\ngkgosz.sakha.gov.ru\r\ngkinpn.sakha.gov.ru\r\ngkobzgn.sakha.gov.ru\r\ngku.sakha.gov.ru\r\ngkyu.sakha.gov.ru\r\ngkzn.sakha.gov.ru\r\ngl.avito.ru\r\ngl.dv.rbc.ru\r\ngl.net.ixbt.com\r\nglaas.who.int\r\nglacier.avito.ru\r\nglacky.rbc.ru\r\nglad.avito.ru\r\nglade.lady.mail.ru\r\ngladiator.avito.ru\r\nglamour.avito.ru\r\nglass.avito.ru\r\nglava.sakha.gov.ru\r\nglavarchiv-uzao.review-k8s.aif.ru\r\nglavkadry-ekaterinburg.tass.ru\r\nglo.rbc.ru\r\nglobal-link2.0.yandex.ru\r\nglobal.2018.yandex.ru\r\nglobal.avito.ru\r\nglobal.university.ozon.ru\r\nglobal2.avito.ru\r\nglobe.avito.ru\r\nglobo.avito.ru\r\nglobus.avito.ru\r\nglobus.yandex.ru\r\nglonass.psc.tambov.gov.ru\r\ngloria.avito.ru\r\nglory.avito.ru\r\nglow.avito.ru\r\nglp.mis.2gis.ru\r\nglpi.avito.ru\r\nglpi.srv.hub.litres.ru\r\ngls.avito.ru\r\ngls.rosatom.ru\r\ngluk.66686.yandex.ru\r\ngm.avito.ru\r\ngm.rshb.ru\r\ngmail.avito.ru\r\ngman.avito.ru\r\ngmax.avito.ru\r\ngmc.apteka.ru\r\ngmcr6vsf.alfabank.ru\r\ngmmcgrnappisc01.gmmcbx-3883-www.k.avito.ru\r\ngmo.minzdrav.gov.ru\r\ngmonit-collector.dns-shop.ru\r\ngmrk.mail.ru\r\ngms.avito.ru\r\ngms.worldbank.org\r\ngmsntlm.worldbank.org\r\ngmsntlmqa.worldbank.org\r\ngmsntlmqa2.worldbank.org\r\ngmsqa.worldbank.org\r\ngmsqa2.worldbank.org\r\ngmss-global-alb.dev.media.max.com\r\ngmss-global-lb.dev.media.max.com\r\ngmss-global-lb.int.media.max.com\r\ngmss-global-lb.prd.media.max.com\r\ngmss-global-lb.stg.media.max.com\r\ngmssvc.worldbank.org\r\ngmssvcqa.worldbank.org\r\ngmt.avito.ru\r\ngmt.yandex.ru\r\ngn.psi.teamid.sber.ru\r\ngn.psi.userid.sber.ru\r\ngna.habr.com\r\ngnin.kino-teatr.ru\r\ngnome.mail.ru\r\ngo-croc.sbud.rshb.ru\r\ngo-jobs.2gis.ru\r\ngo-test.alfabank.ru\r\ngo-var.sbud.rshb.ru\r\ngo.2gis.ru\r\ngo.afisha.ru\r\ngo.avito.ru\r\ngo.daily.afisha.ru\r\ngo.garant.ru\r\ngo.job.megafon.ru\r\ngo.mail.ru\r\ngo.open.ru\r\ngo.sber.ru\r\ngo.sbud.rshb.ru\r\ngo.tele2.ru\r\ngo.tinkoff.ru\r\ngo.tutu.ru\r\ngo.university.kommersant.ru\r\ngo2.avito.ru\r\ngo4it.avito.ru\r\ngoal.mts.ru\r\ngoals01e.cs-minitools01e.yandex.ru\r\ngoals01f.cs-minitools01f.yandex.ru\r\ngoals01h.cs-minitools01h.yandex.ru\r\ngoals01ht.cs-minitools01ht.yandex.ru\r\ngoat.avito.ru\r\ngobbit.users.avito.ru\r\ngoblin-hosting.rbc.ru\r\ngoblin.avito.ru\r\ngoblin.rbc.ru\r\ngobo.avito.ru\r\ngochs.tomsk.gov.ru\r\ngod-konsolidacii.sakha.gov.ru\r\ngod-patriotizma.sakha.gov.ru\r\ngod.avito.ru\r\ngoddess.avito.ru\r\ngodzilla.avito.ru\r\ngoelro.life.ru\r\ngogl.avito.ru\r\ngogle.avito.ru\r\ngogo.avito.ru\r\ngogol.content.tinkoff.ru\r\ngogol.tinkoff.ru\r\ngogolev.sports.ru\r\ngolbat.yandex.ru\r\ngold.api.megafon.ru\r\ngold.avito.ru\r\ngold.psbank.ru\r\ngold2.psbank.ru\r\ngolden-village.yandex.ru\r\ngolden.avito.ru\r\ngolden.open.ru\r\ngoldenautumn.bizconf.rbc.ru\r\ngoldfish.avito.ru\r\ngoldik2.mail.ru\r\ngoldmine.avito.ru\r\ngolem.yandex.ru\r\ngolestan.avito.ru\r\ngolf.avito.ru\r\ngoliath.avito.ru\r\ngolicino.mts.ru\r\ngollum.avito.ru\r\ngolos-temp.rosatom.ru\r\ngolos.tele2.ru\r\ngolubev.55.yandex.ru\r\ngolyshmanovo.drom.ru\r\ngomez.avito.ru\r\ngomooke1.avito.ru\r\ngondor.avito.ru\r\ngong.avito.ru\r\ngonghui.avito.ru\r\ngonzo.avito.ru\r\ngood.avito.ru\r\ngood.lenta.ru\r\ngood.m.lenta.ru\r\ngood.s1.dove.lenta.ru\r\ngood.s1.m.lenta.ru\r\ngood.s2.dove.lenta.ru\r\ngood.s2.m.lenta.ru\r\ngood.yandex.ru\r\ngood2.yandex.ru\r\ngoodfeel.avito.ru\r\ngoodies.avito.ru\r\ngoodlife.avito.ru\r\ngoodluck.avito.ru\r\ngoodman.77.yandex.ru\r\ngoodok.mts.ru\r\ngoods.2gis.ru\r\ngoods.avito.ru\r\ngoods.rutube.ru\r\ngoodtimes.avito.ru\r\ngoofy.avito.ru\r\ngoogle-analytics.beeline.ru\r\ngoogle.avito.ru\r\ngoogle.lenta.ru\r\ngoogle.ops.beeline.ru\r\ngoogle1.avito.ru\r\ngooogle.avito.ru\r\ngoose.avito.ru\r\ngoran.avito.ru\r\ngordon.avito.ru\r\ngore.avito.ru\r\ngorenje.lady.mail.ru\r\ngorilla.avito.ru\r\ngorki-leninskie.drom.ru\r\ngornichnaja.tass.ru\r\ngorno-altaysk.lemanapro.ru\r\ngorod-bryansk.aif.ru\r\ngorod-semiluki-r36.gosuslugi.ru\r\ngorod.afisha.ru\r\ngorod.avito.ru\r\ngorod.ma.67.yandex.ru\r\ngorod.mos.ru\r\ngorod.yandex.ru\r\ngoroda.kommersant.ru\r\ngoroda.life.ru\r\ngorodauga.south.vedomosti.ru\r\ngorodid-preprod.vtb.ru\r\ngoroskop.domclick.ru\r\ngort.avito.ru\r\ngoryachij-klyuch.hh.ru\r\ngorynych-db-test.yandex.ru\r\ngorynych-db01e.yandex.ru\r\ngorynych-dev.yandex.ru\r\ngorynych-test.yandex.ru\r\ngorynych01i.yandex.ru\r\ngos.avito.ru\r\ngos.garant.ru\r\ngos.itc.fas.gov.ru\r\ngos2023.itc.fas.gov.ru\r\ngosalcogol.sakha.gov.ru\r\ngosbar-uat.test.gosuslugi.ru\r\ngosbar.gosuslugi.ru\r\ngoscomnas.sakha.gov.ru\r\ngoscreen.meduza.io\r\ngosduma.tass.ru\r\ngosinvest.open.gov.ru\r\ngossluzhba.gov.ru\r\ngost.avito.ru\r\ngost.rambler.ru\r\ngost.regdemo1.gosuslugi.ru\r\ngostpki.vtb.ru\r\ngostudy.aif.ru\r\ngosuslugi.ozon.ru\r\ngosweb-beta.gosuslugi.ru\r\ngosweb-dev.test.gosuslugi.ru\r\ngosweb.gosuslugi.ru\r\ngoszakaz.garant.ru\r\ngoszakazchik.mos.ru\r\ngoszakupki.open.gov.ru\r\ngoszakupki.psbank.ru\r\ngotcha.avito.ru\r\ngoto.avito.ru\r\ngoto.baza.drom.ru\r\ngourmet.avito.ru\r\ngov.avito.ru\r\ngov.consultant.ru\r\ngov.garant.ru\r\ngov.gosuslugi.ru\r\ngov.pbx.megafon.ru\r\ngov2018.vedomosti.ru\r\ngovdata360.worldbank.org\r\ngovernment.consultant.ru\r\ngovernment.vedomosti.ru\r\ngovernorsportal.worldbank.org\r\ngoya.avito.ru\r\ngoya.rutube.ru\r\ngoz.itc.fas.gov.ru\r\ngoz.rshb.ru\r\ngp.avito.ru\r\ngp.tinkoff.ru\r\ngp180.mos.ru\r\ngp4omsk.gosuslugi.ru\r\ngp67.mos.ru\r\ngp8.mos.ru\r\ngpapps.worldbank.org\r\ngpappsqa.worldbank.org\r\ngpbl.spec.tass.ru\r\ngpdevcdn.worldbank.org\r\ngpm.avito.ru\r\ngpmb.org.who.int\r\ngpn.mchs.ru\r\ngps.avito.ru\r\ngps.eldorado.ru\r\ngpsdata.x5.ru\r\ngpt.beeline.ru\r\ngptmobile.t2.ru\r\ngpu.avito.ru\r\ngpvtxmsfs.kino-teatr.ru\r\ngr.avito.ru\r\ngr.euronews.com\r\ngr.lenta.ru\r\ngra.avito.ru\r\ngrace.avito.ru\r\ngrad.avito.ru\r\ngrade.market.yandex.ru\r\ngraduate.avito.ru\r\ngraduation.avito.ru\r\ngrafana-124810a5.xaas.kz.cloud.vk.com\r\ngrafana-3b3f36ee.xaas.kz.cloud.vk.com\r\ngrafana-af8fbad4.xaas.kz.cloud.vk.com\r\ngrafana-bpmsoft.monitoring.tutu.ru\r\ngrafana-c82dade3.xaas.kz.cloud.vk.com\r\ngrafana-croc.monitoring.tutu.ru\r\ngrafana-dc483b2b.xaas.kz.cloud.vk.com\r\ngrafana-k8s.meduza.io\r\ngrafana-nordclan.monitoring.tutu.ru\r\ngrafana-sb.pg.tutu.ru\r\ngrafana.city.mts.ru\r\ngrafana.cs.cs.cs-aws.mvideo.ru\r\ngrafana.csut.mchs.ru\r\ngrafana.k8s.rg.ru\r\ngrafana.mk.ru\r\ngrafana.net.ixbt.com\r\ngrafana.pnp.cs-aws.mvideo.ru\r\ngrafana.rs.premier.one\r\ngrafana.rs2.premier.one\r\ngrafana.srv.hub.litres.ru\r\ngrafana.test.cs-aws.mvideo.ru\r\ngrafana24718.mk.ru\r\ngraffiti.avito.ru\r\ngramota.mts.ru\r\ngramota.yandex.ru\r\ngramotno.rosatom.ru\r\ngramotno.yandex.ru\r\ngrampus-int.alfabank.ru\r\ngrampus-uat.alfabank.ru\r\ngran.youdo.com\r\ngranada.avito.ru\r\ngrand.avito.ru\r\ngranny.tele2.ru\r\ngrant.culture.ru\r\ngrant.sev.gov.ru\r\ngrant.vysotsky.tass.ru\r\ngrants.avito.ru\r\ngrants.culture.ru\r\ngrants.project.tinkoff.ru\r\ngrants.tinkoff.ru\r\ngraph-kremlin.consultant.ru\r\ngraph.afisha.ru\r\ngraph.avito.ru\r\ngraph.document.kremlin.ru\r\ngraph.garant.ru\r\ngrapher.avito.ru\r\ngraphics.avito.ru\r\ngraphite.avito.ru\r\ngraphite.mail.ru\r\ngraphite1.rtb.beeline.ru\r\ngraphite11.mail.ru\r\ngraphite12.mail.ru\r\ngraphite13.mail.ru\r\ngraphite2.rtb.beeline.ru\r\ngraphql-smarttv.kinopoisk.ru\r\ngraphql-web.kinopoisk.ru\r\ngraphql.dsp.rambler.ru\r\ngraphql.kinopoisk.ru\r\ngraphs.avito.ru\r\ngraphs.mb-cert-mon.rosbank.ru\r\ngraphs.mbr-mon.rosbank.ru\r\ngraphs.meduza.io\r\ngrapi.rbc.ru\r\ngrasfile.worldbank.org\r\ngrasfiledev.worldbank.org\r\ngrasfileqa.worldbank.org\r\ngrass.avito.ru\r\ngrassroots.avito.ru\r\ngratis.avito.ru\r\ngravicapa01d.yandex.ru\r\ngravicapa01e.yandex.ru\r\ngravicapa01g.yandex.ru\r\ngravicapa01h.yandex.ru\r\ngravicapa02d.yandex.ru\r\ngravicapa02e.yandex.ru\r\ngravicapa02g.yandex.ru\r\ngravicapa02h.yandex.ru\r\ngravicapa03d.yandex.ru\r\ngravicapa03e.yandex.ru\r\ngravicapa03g.yandex.ru\r\ngravicapa03h.yandex.ru\r\ngravicapa04d.yandex.ru\r\ngravicapa04e.yandex.ru\r\ngravicapa04g.yandex.ru\r\ngravicapa04h.yandex.ru\r\ngravicapa05d.yandex.ru\r\ngravicapa05e.yandex.ru\r\ngravicapa05g.yandex.ru\r\ngravicapa05h.yandex.ru\r\ngravicapa06d.yandex.ru\r\ngravicapa06e.yandex.ru\r\ngravicapa06g.yandex.ru\r\ngravicapa06h.yandex.ru\r\ngravicapa07d.yandex.ru\r\ngravicapa07e.yandex.ru\r\ngravicapa07g.yandex.ru\r\ngravicapa07h.yandex.ru\r\ngravity.avito.ru\r\ngravity.tele2.ru\r\ngray.avito.ru\r\ngrayberry.yandex.ru\r\ngraylog.monitoring.tutu.ru\r\ngrc-cdn.3igames.mail.ru\r\ngrd.avito.ru\r\ngreat.avito.ru\r\ngreatdeal.avito.ru\r\ngree.25.yandex.ru\r\ngreece.avito.ru\r\ngreen.1986.yandex.ru\r\ngreen.avito.ru\r\ngreen.www.max.com\r\ngreenapple.avito.ru\r\ngreenbay2.worldbank.org\r\ngreendog.avito.ru\r\ngreenfield1.online.sberbank.ru\r\ngreenfield2.online.sberbank.ru\r\ngreenfox.avito.ru\r\ngreenhealth.bizconf.rbc.ru\r\ngreenweek.bizconf.rbc.ru\r\ngreetings.avito.ru\r\ngreg.avito.ru\r\ngregory.avito.ru\r\ngrey.avito.ru\r\ngreyhound.mail.ru\r\ngrid.avito.ru\r\ngridpp.avito.ru\r\ngrigoriy.2bstudio.yandex.ru\r\ngrill.magnit.ru\r\ngrist.net.ixbt.com\r\ngristle.mail.ru\r\ngrls-test.minzdrav.gov.ru\r\ngromit.avito.ru\r\ngroove.avito.ru\r\ngroovy.avito.ru\r\ngroro.rpn.gov.ru\r\ngross77.31.yandex.ru\r\nground.avito.ru\r\nground.parade2018.tass.ru\r\ngroup.avito.ru\r\ngroup4.avito.ru\r\ngroupib-abm.alfabank.ru\r\ngroupib-ac.alfabank.ru\r\ngroupib-alfaid.alfabank.ru\r\ngroupib-am.alfabank.ru\r\ngroupon.avito.ru\r\ngroups.avito.ru\r\ngroups.sps.rosatom.ru\r\ngroupware.avito.ru\r\ngroupwise.avito.ru\r\ngrowfood.project.tinkoff.ru\r\ngrowth-api.dns-shop.ru\r\ngrowthstrategy.vedomosti.ru\r\ngrozniy.drom.ru\r\ngrozny.babyblog.ru\r\ngroznyy.lemanapro.ru\r\ngrpc-api.irecommend.ru\r\ngrs.avito.ru\r\ngrubber2.rbc.ru\r\ngruppy.chempionat.tass.ru\r\ngrups.dns-shop.ru\r\ngruz.megafon.ru\r\ngruzi.1.yandex.ru\r\ngrw-cggw-01.grw.rzd.ru\r\ngrw-cggw-02.grw.rzd.ru\r\ngry.avito.ru\r\ngs.avito.ru\r\ngs.garant.ru\r\ngs1.avito.ru\r\ngs2.avito.ru\r\ngsa.avito.ru\r\ngsc.avito.ru\r\ngscore.gosuslugi.ru\r\ngsd02.worldbank.org\r\ngsdappsdev.worldbank.org\r\ngsdfc.worldbank.org\r\ngsdfcqa.worldbank.org\r\ngsdmsde02.worldbank.org\r\ngsdmsde03.worldbank.org\r\ngsdmsweadev01.worldbank.org\r\ngsdmsweaqa01.worldbank.org\r\ngsdpace.worldbank.org\r\ngsdtfs.worldbank.org\r\ngsf.avito.ru\r\ngsgou.users.avito.ru\r\ngshf.avito.ru\r\ngsk.avito.ru\r\ngslb-biuais.mos.ru\r\ngslb-job.megafon.ru\r\ngslb-mguu.mos.ru\r\ngslb-tac.megafon.ru\r\ngslb.gosuslugi.ru\r\ngsm-demo.mdrive.magnit.ru\r\ngsm.avito.ru\r\ngsn.tomsk.gov.ru\r\ngsoft.garant.ru\r\ngss.avito.ru\r\ngss1.avito.ru\r\ngsstroi-janus2.mos.ru\r\ngsstroi-turn2.mos.ru\r\ngsstroi-vr.mos.ru\r\ngsstroi.mos.ru\r\ngstat.gosuslugi.ru\r\ngt-stage.ixbt.com\r\ngt.avito.ru\r\ngt.government.ru\r\ngt2.avito.ru\r\ngta.avito.ru\r\ngtest.avito.ru\r\ngti.avito.ru\r\ngtlk.rbc.ru\r\ngtm.alfabank.ru\r\ngtm.avito.ru\r\ngtm1.avito.ru\r\ngtm2.avito.ru\r\ngto.sport.mos.ru\r\ngts.avito.ru\r\ngts.lemanapro.ru\r\ngtxd.worldbank.org\r\ngtxdev1.yandex.ru\r\ngtxdmsg.worldbank.org\r\ngtxp.worldbank.org\r\ngtxpmsg.worldbank.org\r\ngtxt.worldbank.org\r\ngtxtmsg.worldbank.org\r\ngu-st.test.gosuslugi.ru\r\ngu.avito.ru\r\nguangzhou.avito.ru\r\nguarantees.alfabank.ru\r\nguard.api.kassa.yandex.ru\r\nguard.api.tickets.yandex.ru\r\nguard.avito.ru\r\nguardian.avito.ru\r\nguardian.wildberries.ru\r\nguava.avito.ru\r\ngubkin.home.megafon.ru\r\ngubkin90.tass.ru\r\ngubkinadm.gosuslugi.ru\r\ngucci.avito.ru\r\ngudok.t2.ru\r\ngudok.tele2.ru\r\nguest-mfkvk.megafon.ru\r\nguest-wifi-dev.sberbank.ru\r\nguest-wifi-nginx5403.sberbank.ru\r\nguest-wifi-nginx5404.sberbank.ru\r\nguest-wifi.sberbank.ru\r\nguest.avito.ru\r\nguest.khv.gov.ru\r\nguest.wifi.rshb.ru\r\nguest1.online.sberbank.ru\r\nguestbook.avito.ru\r\nguestc.khv.gov.ru\r\ngueste.khv.gov.ru\r\nguests.open.ru\r\ngui.avito.ru\r\nguia.avito.ru\r\nguidance.magnit.ru\r\nguide.avito.ru\r\nguidebook.tourism.gov.ru\r\nguideline.2gis.ru\r\nguideline.avito.ru\r\nguidelines.eldorado.ru\r\nguidelines.mvideo.ru\r\nguides.avito.ru\r\nguides.gosuslugi.ru\r\nguides.rusarchives.ru\r\nguidlines.mvideo.ru\r\nguitar.avito.ru\r\ngulag.championat.com\r\ngulf.home.megafon.ru\r\ngulfstream.youdo.com\r\ngulmarg.mail.ru\r\ngum.avito.ru\r\ngum.tele2.ru\r\ngundam.avito.ru\r\nguns.mail.ru\r\ngunther.avito.ru\r\nguptest.ing.k8s.dev.ivi.ru\r\ngurjeva.tass.ru\r\ngurov66.leasing.rshb.ru\r\nguru.avito.ru\r\ngus.avito.ru\r\ngusinoozersk.drom.ru\r\ngutenberg.avito.ru\r\ngutianko.tass.ru\r\ngv1.esbstage.worldbank.org\r\ngvc-cggw-asis.rzd.ru\r\ngvc-cggw-cgfe-01.rzd.ru\r\ngvc-cggw-cgfe-02.rzd.ru\r\ngvc.rzd.ru\r\ngvitodiscover.avito.ru\r\ngvozdika.mail.ru\r\ngvp.gov.ru\r\ngw-198.minprom.gov.ru\r\ngw-alfa-m10.alfabank.ru\r\ngw-alfa-rzd.alfabank.ru\r\ngw-cft-tsk.x5.ru\r\ngw-eks.x5.ru\r\ngw-import.x5.ru\r\ngw-ndh.avito.ru\r\ngw-player2-echd.mos.ru\r\ngw-suim.x5.ru\r\ngw-wrs3.x5.ru\r\ngw-ymoney.x5.ru\r\ngw.ac.gov.ru\r\ngw.ag.avito.ru\r\ngw.agro.tambov.gov.ru\r\ngw.avito.ru\r\ngw.bnsc.avito.ru\r\ngw.council.gov.ru\r\ngw.factoring.rshb.ru\r\ngw.fas.gov.ru\r\ngw.kino-teatr.ru\r\ngw.mkb.ru\r\ngw.nd.avito.ru\r\ngw.pp.avito.ru\r\ngw.saratov.gov.ru\r\ngw.spy.revizorro.p.rkn.gov.ru\r\ngw.spy.revizorro.s.rkn.gov.ru\r\ngw.tele2.ru\r\ngw.tokm.tambov.gov.ru\r\ngw.uszn.tambov.gov.ru\r\ngw1.avito.ru\r\ngw1.mail.ru\r\ngw2.avito.ru\r\ngw2.mail.ru\r\ngw241.fas.gov.ru\r\ngw3.avito.ru\r\ngw4.avito.ru\r\ngw4.fas.gov.ru\r\ngw5.fas.gov.ru\r\ngw6.fas.gov.ru\r\ngwbd.open.ru\r\ngwia.avito.ru\r\ngwmail.avito.ru\r\ngwn.kino-teatr.ru\r\ngwop8.garant.ru\r\ngws-api-sandbox.avito.ru\r\ngws-dev.avito.ru\r\ngws-qa.avito.ru\r\ngws-rds-external-readonly-uat.avito.ru\r\ngws-uat.avito.ru\r\ngws.avito.ru\r\ngwssjwod-rlp.ops.beeline.ru\r\ngx.avito.ru\r\ngx1.avito.ru\r\ngx2.avito.ru\r\ngx3.avito.ru\r\ngx4.avito.ru\r\ngy.avito.ru\r\ngygia-stg.euronews.com\r\ngym.tele2.ru\r\ngymnasium-7.gosuslugi.ru\r\ngymnastics.avito.ru\r\ngz.avito.ru\r\ngzc.avito.ru\r\ngzd.rzd.ru\r\ngzs.avito.ru\r\nh.avito.ru\r\nh.if.vtb.ru\r\nh.vtb.ru\r\nh1.avito.ru\r\nh10.avito.ru\r\nh10.vk.com\r\nh11.avito.ru\r\nh12.avito.ru\r\nh120.avito.ru\r\nh120.vk.com\r\nh13.avito.ru\r\nh14.avito.ru\r\nh15.avito.ru\r\nh2.avito.ru\r\nh2.hf.vtb.ru\r\nh2.if.vtb.ru\r\nh2.rr.vtb.ru\r\nh2.vtb.ru\r\nh21.avito.ru\r\nh2h.bo-test.vtb.ru\r\nh2h.mkb.ru\r\nh2media.avito.ru\r\nh2ojtbkd-rlp.ops.beeline.ru\r\nh2osport.2018.yandex.ru\r\nh3.avito.ru\r\nh4.avito.ru\r\nh5.avito.ru\r\nh59b.avito.ru\r\nh6.avito.ru\r\nh7.avito.ru\r\nh8.avito.ru\r\nha.avito.ru\r\nha.pool.avito.ru\r\nhab.aif.ru\r\nhab.dev.kp.ru\r\nhab.kp.ru\r\nhab.mk.ru\r\nhabarovsk.avito.ru\r\nhabarovsk.babyblog.ru\r\nhabarovsk.drom.ru\r\nhabarovsk.fas.gov.ru\r\nhabarovsk.lemanapro.ru\r\nhabbo.avito.ru\r\nhaber.avito.ru\r\nhachi.avito.ru\r\nhack-app.wildberries.ru\r\nhack.avito.ru\r\nhackathon.tele2.ru\r\nhackathon.vtb.ru\r\nhacker.avito.ru\r\nhacker.zdorovie-shkolnika.spb.aif.ru\r\nhackers.avito.ru\r\nhades.avito.ru\r\nhadi.avito.ru\r\nhadoop2-00.yandex.ru\r\nhadron.avito.ru\r\nhagrid.avito.ru\r\nhaha.avito.ru\r\nhahaha.avito.ru\r\nhaima.drom.ru\r\nhainan.tass.ru\r\nhair.avito.ru\r\nhakas.dev.home.megafon.ru\r\nhakas.shop.megafon.ru\r\nhakasia.fas.gov.ru\r\nhakim.avito.ru\r\nhakutaku.yandex.ru\r\nhal.avito.ru\r\nhale.avito.ru\r\nhall.avito.ru\r\nhalley.avito.ru\r\nhalloween.avito.ru\r\nhalloween.mail.ru\r\nhalo.avito.ru\r\nhalva.life.ru\r\nhalvamedia.sovcombank.ru\r\nham.avito.ru\r\nhama.avito.ru\r\nhamburg.avito.ru\r\nhamid.avito.ru\r\nhamilton.avito.ru\r\nhamlet.avito.ru\r\nhamm.avito.ru\r\nhammer.avito.ru\r\nhammerfest-gsw.avito.ru\r\nhampers.yandex.ru\r\nhampers64.yandex.ru\r\nhamster.avito.ru\r\nhamster.yandex.ru\r\nhamza.avito.ru\r\nhana.avito.ru\r\nhandball.avito.ru\r\nhandbook.avito.ru\r\nhandmade.avito.ru\r\nhandy.avito.ru\r\nhandy.ixbt.com\r\nhangman.avito.ru\r\nhangout.avito.ru\r\nhani.avito.ru\r\nhani.sakha.gov.ru\r\nhank.avito.ru\r\nhanna.avito.ru\r\nhannah.avito.ru\r\nhannibal.avito.ru\r\nhannibal.film.ru\r\nhanoi.avito.ru\r\nhans.avito.ru\r\nhansa.avito.ru\r\nhanson.avito.ru\r\nhanty-mansiysk.lemanapro.ru\r\nhanybal.avito.ru\r\nhao.avito.ru\r\nhapi.avito.ru\r\nhappiness-addon.yandex.ru\r\nhappiness.avito.ru\r\nhappiness.tass.ru\r\nhappiness.tele2.ru\r\nhappy.avito.ru\r\nhappy.x5.ru\r\nhappy123.avito.ru\r\nhappylife.avito.ru\r\nhappyspace.76.yandex.ru\r\nhappytime.avito.ru\r\nhar.maps.yandex.ru\r\nharbor.kino-teatr.ru\r\nharbor.services.tp.mvideo.ru\r\nharcyzsk.babyblog.ru\r\nhardcore.avito.ru\r\nhardware.avito.ru\r\nhardy.avito.ru\r\nhari.avito.ru\r\nharis.avito.ru\r\nharley.avito.ru\r\nharmonia.avito.ru\r\nharmony.avito.ru\r\nharold.avito.ru\r\nharper.avito.ru\r\nharrier.avito.ru\r\nharris.avito.ru\r\nharrison.avito.ru\r\nharry.avito.ru\r\nhartford.avito.ru\r\nharu.avito.ru\r\nharvey.avito.ru\r\nhasan.avito.ru\r\nhash.avito.ru\r\nhasp.avito.ru\r\nhassan.avito.ru\r\nhataboutpie.kino-teatr.ru\r\nhathor.avito.ru\r\nhats.avito.ru\r\nhavana.mail.ru\r\nhaven.avito.ru\r\nhavoc.avito.ru\r\nhawaii.avito.ru\r\nhawaii.web-staging.2gis.ru\r\nhawcproject.iarc.who.int\r\nhawk.avito.ru\r\nhawkingdialinrouterport1.avito.ru\r\nhawthorn.avito.ru\r\nhay.avito.ru\r\nhayato.avito.ru\r\nhayden.avito.ru\r\nhb.avito.ru\r\nhbase-test.azuremsk.cloudapp.ec.mts.ru\r\nhbf.avito.ru\r\nhbo.max.com\r\nhc-spb.rbc.ru\r\nhc.avito.ru\r\nhcc.avito.ru\r\nhcm.avito.ru\r\nhcm.ipad.avito.ru\r\nhcp.avito.ru\r\nhctn.2gis.ru\r\nhd.avito.ru\r\nhd.kinopoisk.ru\r\nhd.rpn.gov.ru\r\nhd.rutube.ru\r\nhde.alfabank.ru\r\nhdr.avito.ru\r\nhds.alfabank.ru\r\nhe-mc.t2.ru\r\nhe.avito.ru\r\nheadhunter.avito.ru\r\nheadless-cms.vtb.ru\r\nheadless-cms3.vtb.ru\r\nheadless-cms4.vtb.ru\r\nheadless-cms5.vtb.ru\r\nheadlines.avito.ru\r\nhealing.avito.ru\r\nhealth.avito.ru\r\nhealth.mail.ru\r\nhealth.yandex.ru\r\nhealthactivation.lady.mail.ru\r\nhealthbot.who.int\r\nhealthbottest.who.int\r\nhealthcare.avito.ru\r\nhealthcluster.who.int\r\nhearst2.mail.ru\r\nhearst3.mail.ru\r\nhearst4.mail.ru\r\nheart.avito.ru\r\nheartbeat-dev.sber.ru\r\nheartbeat-uat.sber.ru\r\nheartbeat.sber.ru\r\nhearty2.yandex.ru\r\nheatmap.worldbank.org\r\nheatmapdev.worldbank.org\r\nheatmapqa.worldbank.org\r\nheatmapstg.worldbank.org\r\nheatmaptrn.worldbank.org\r\nheaven.avito.ru\r\nheavy.yandex.ru\r\nheavy2.yandex.ru\r\nhebe.avito.ru\r\nhebrides.2gis.ru\r\nhecate.avito.ru\r\nhector.avito.ru\r\nhegarty.leasing.rshb.ru\r\nhehe.avito.ru\r\nheimdall.alfabank.ru\r\nheimdall.avito.ru\r\nheimdall.prelive.alfabank.ru\r\nheineken.avito.ru\r\nhektor.avito.ru\r\nhelen.avito.ru\r\nhelena.avito.ru\r\nhelios.avito.ru\r\nhelium.avito.ru\r\nhelix.avito.ru\r\nhell.avito.ru\r\nhell.rambler.ru\r\nhello.avito.ru\r\nhello.megafon.ru\r\nhello.mneblizko.mts.ru\r\nhellokitty.avito.ru\r\nhelloween.mail.ru\r\nhelloworld.avito.ru\r\nhelm.avito.ru\r\nhelomatch.avito.ru\r\nhelp.2gis.ru\r\nhelp.avito.ru\r\nhelp.b2b.mvideo.ru\r\nhelp.bo-test.vtb.ru\r\nhelp.domclick.ru\r\nhelp.garant.ru\r\nhelp.gkh.hab.aif.ru\r\nhelp.kostroma.gov.ru\r\nhelp.max.com\r\nhelp.max.ru\r\nhelp.mchs.gov.ru\r\nhelp.mkb.ru\r\nhelp.rambler.ru\r\nhelp.rbc.ru\r\nhelp.sed.khv.gov.ru\r\nhelp.tinkoff.ru\r\nhelp.yandex.ru\r\nhelpdesk.avito.ru\r\nhelpdesk.dom.gosuslugi.ru\r\nhelpdesk.drive2.ru\r\nhelpdesk.magnit.ru\r\nhelpdesk.rtb.beeline.ru\r\nhelpdesk2.avito.ru\r\nhelper.avito.ru\r\nhelper.megafon.ru\r\nhelpme.avito.ru\r\nhelsinki.avito.ru\r\nhema.22.yandex.ru\r\nhemera.avito.ru\r\nhenri.avito.ru\r\nhenry.avito.ru\r\nhentai.avito.ru\r\nhep.avito.ru\r\nhepatest.rbc.ru\r\nhera.avito.ru\r\nheracles.avito.ru\r\nherakles.avito.ru\r\nherbalife.avito.ru\r\nhercules.avito.ru\r\nheritage.avito.ru\r\nhermes.2gis.ru\r\nhermes.avito.ru\r\nhermes.rbc.ru\r\nhermes1.avito.ru\r\nhermes2.avito.ru\r\nhermestest.2gis.ru\r\nhermit.avito.ru\r\nhermod-tst.open.ru\r\nhermod.open.ru\r\nhero.avito.ru\r\nheroes.2gis.ru\r\nheroes.avito.ru\r\nheroez.life.ru\r\nheroism.yandex.ru\r\nheron.avito.ru\r\nheron.lenta.ru\r\nherson.kp.ru\r\nhertz.avito.ru\r\nhestia.avito.ru\r\nhey.avito.ru\r\nhf-chat-sharing.vtb.ru\r\nhf-chat-turn.vtb.ru\r\nhf-chat.vtb.ru\r\nhf-ibrb.test.vtb.ru\r\nhf-id-sberbank-ru.sberbank.ru\r\nhf-mbrb.test.vtb.ru\r\nhf-online.test.vtb.ru\r\nhf-opros-sberbank-ru.sberbank.ru\r\nhf-pay-test.vtb.ru\r\nhf.avito.ru\r\nhf.db-test.vtb.ru\r\nhfccourse.users.avito.ru\r\nhg.avito.ru\r\nhgfedcbastageupload.avito.ru\r\nhh.avito.ru\r\nhh43.mail.ru\r\nhhcheck.hh.ru\r\nhi-oleg.project.tinkoff.ru\r\nhi-tech.mail.ru\r\nhi.avito.ru\r\nhicham.avito.ru\r\nhida.yandex.ru\r\nhidden.avito.ru\r\nhiddenmiles.project.tinkoff.ru\r\nhide.avito.ru\r\nhideip-canada.avito.ru\r\nhideip-europe.avito.ru\r\nhideip-hongkong.avito.ru\r\nhideip-italy.avito.ru\r\nhideip-uk.avito.ru\r\nhideip-usa.avito.ru\r\nhideip.avito.ru\r\nhideki.avito.ru\r\nhideref01ht.cs-minitools01ht.yandex.ru\r\nhiggs.avito.ru\r\nhigh5.rosbank.ru\r\nhighland.avito.ru\r\nhighlights.dev.media.max.com\r\nhighlights.int.media.max.com\r\nhighlights.prd.media.max.com\r\nhighlights.stg.media.max.com\r\nhighload1.track-partner.beeline.ru\r\nhighload2.track-partner.beeline.ru\r\nhighschool.avito.ru\r\nhighway.avito.ru\r\nhihihi.avito.ru\r\nhiho.avito.ru\r\nhikari.avito.ru\r\nhikaru.avito.ru\r\nhikvision.bizconf.rbc.ru\r\nhilbert.avito.ru\r\nhilda.avito.ru\r\nhilfe.avito.ru\r\nhimalaya.avito.ru\r\nhime.avito.ru\r\nhimera.ivi.ru\r\nhimki.drom.ru\r\nhimki.mts.ru\r\nhimself-ktr-api.nalog.ru\r\nhimself-ktr-map.nalog.ru\r\nhimself-ktr-service.nalog.ru\r\nhimself-ktr.nalog.ru\r\nhinata.avito.ru\r\nhindi.avito.ru\r\nhino.avito.ru\r\nhint.alfabank.ru\r\nhip.avito.ru\r\nhip.searo.who.int\r\nhipchat.rbc.ru\r\nhiphop.avito.ru\r\nhippo.avito.ru\r\nhiringday.avito.ru\r\nhiringteam.profi.ru\r\nhirlevel.avito.ru\r\nhiroshima.avito.ru\r\nhis.avito.ru\r\nhispania.avito.ru\r\nhist.avito.ru\r\nhistoria.avito.ru\r\nhistory.avito.ru\r\nhistory.ren.tv\r\nhistory.rostelecom.ru\r\nhit.avito.ru\r\nhitech-old.mail.ru\r\nhitech.avito.ru\r\nhitech.mail.ru\r\nhits.avito.ru\r\nhive.avito.ru\r\nhj-cat4900-gw.avito.ru\r\nhj.avito.ru\r\nhk.avito.ru\r\nhkps.pool.avito.ru\r\nhkqrpk.ozon.ru\r\nhl.avito.ru\r\nhlh.who.int\r\nhlj.avito.ru\r\nhlrdap.avito.ru\r\nhls.avito.ru\r\nhlvkxwww.app.kino-teatr.ru\r\nhm.avito.ru\r\nhm990205.magnit.ru\r\nhmao.tele2.ru\r\nhmc.avito.ru\r\nhms.avito.ru\r\nhn.avito.ru\r\nhn.ipad.avito.ru\r\nhn.nhac.avito.ru\r\nhnc-system.ing.k8s.dev.ivi.ru\r\nhnted-preprod.mkb.ru\r\nho.avito.ru\r\nhoanganh.avito.ru\r\nhobart.avito.ru\r\nhobbes.avito.ru\r\nhobbit.avito.ru\r\nhobby.avito.ru\r\nhockey.lenta.ru\r\nhockey18.sport.rbc.ru\r\nhod.avito.ru\r\nhoff.youdo.com\r\nhoffman-hosting.rbc.ru\r\nhoffman.rbc.ru\r\nhofman.avito.ru\r\nhoge.avito.ru\r\nhojungga1.avito.ru\r\nhoken.avito.ru\r\nhokkaido.42.yandex.ru\r\nhokkaido.avito.ru\r\nhola.avito.ru\r\nholding.avito.ru\r\nholiday.avito.ru\r\nholidayoffer.avito.ru\r\nholidays.avito.ru\r\nholland.avito.ru\r\nholly.avito.ru\r\nhollywood.avito.ru\r\nholmes.rbc.ru\r\nholocaust.avito.ru\r\nholy.avito.ru\r\nhome-academy.project.tinkoff.ru\r\nhome-academy.tinkoff.ru\r\nhome.avito.ru\r\nhome.garant.ru\r\nhome.megafon.ru\r\nhome.rosbank.ru\r\nhome.stage.avito.ru\r\nhome.yandex.ru\r\nhome1.avito.ru\r\nhome2.avito.ru\r\nhomehelp.t2.ru\r\nhomeless.avito.ru\r\nhomemiles.project.tinkoff.ru\r\nhomenet.beeline.ru\r\nhomepage.avito.ru\r\nhomepage.yandex.ru\r\nhomer.avito.ru\r\nhomes.avito.ru\r\nhomeschooling.avito.ru\r\nhomolog.avito.ru\r\nhomologacao.avito.ru\r\nhonda.avito.ru\r\nhonda.drom.ru\r\nhonduras.avito.ru\r\nhonduras2.mail.ru\r\nhoney.avito.ru\r\nhoney.yandex.ru\r\nhoneymoon.avito.ru\r\nhongkong.avito.ru\r\nhongqi.drom.ru\r\nhonolulu.avito.ru\r\nhonor.vedomosti.ru\r\nhonor10.vedomosti.ru\r\nhonorguard.tass.ru\r\nhooch.mail.ru\r\nhood.avito.ru\r\nhook.avito.ru\r\nhoover.avito.ru\r\nhop.kino-teatr.ru\r\nhope.avito.ru\r\nhora.avito.ru\r\nhorde.avito.ru\r\nhorizon.avito.ru\r\nhornet.avito.ru\r\nhorny-rabbit.kino-teatr.ru\r\nhoro.avito.ru\r\nhoro.mail.ru\r\nhoros.rambler.ru\r\nhoroscop.avito.ru\r\nhoroscope.avito.ru\r\nhoroscopes.rambler.ru\r\nhorror.avito.ru\r\nhorse.avito.ru\r\nhorse2.mail.ru\r\nhorses.avito.ru\r\nhortdb.kino-teatr.ru\r\nhorus.avito.ru\r\nhoruzhiy-iosif.9111.ru\r\nhosam.avito.ru\r\nhospital.avito.ru\r\nhospitality.avito.ru\r\nhost-012.minprom.gov.ru\r\nhost-013.minprom.gov.ru\r\nhost-014.minprom.gov.ru\r\nhost-015.minprom.gov.ru\r\nhost-016.minprom.gov.ru\r\nhost-017.minprom.gov.ru\r\nhost-018.minprom.gov.ru\r\nhost-019.minprom.gov.ru\r\nhost-020.minprom.gov.ru\r\nhost-021.minprom.gov.ru\r\nhost-022.minprom.gov.ru\r\nhost-023.minprom.gov.ru\r\nhost-024.minprom.gov.ru\r\nhost-026.minprom.gov.ru\r\nhost-027.minprom.gov.ru\r\nhost-028.minprom.gov.ru\r\nhost-029.minprom.gov.ru\r\nhost-030.minprom.gov.ru\r\nhost-032.minprom.gov.ru\r\nhost-033.minprom.gov.ru\r\nhost-034.minprom.gov.ru\r\nhost-036.minprom.gov.ru\r\nhost-037.minprom.gov.ru\r\nhost-040.minprom.gov.ru\r\nhost-041.minprom.gov.ru\r\nhost-042.minprom.gov.ru\r\nhost-043.minprom.gov.ru\r\nhost-044.minprom.gov.ru\r\nhost-045.minprom.gov.ru\r\nhost-046.minprom.gov.ru\r\nhost-047.minprom.gov.ru\r\nhost-048.minprom.gov.ru\r\nhost-049.minprom.gov.ru\r\nhost-050.minprom.gov.ru\r\nhost-051.minprom.gov.ru\r\nhost-052.minprom.gov.ru\r\nhost-054.minprom.gov.ru\r\nhost-055.minprom.gov.ru\r\nhost-056.minprom.gov.ru\r\nhost-057.minprom.gov.ru\r\nhost-058.minprom.gov.ru\r\nhost-059.minprom.gov.ru\r\nhost-062.minprom.gov.ru\r\nhost-063.minprom.gov.ru\r\nhost-064.minprom.gov.ru\r\nhost-065.minprom.gov.ru\r\nhost-066.minprom.gov.ru\r\nhost-067.minprom.gov.ru\r\nhost-068.minprom.gov.ru\r\nhost-069.minprom.gov.ru\r\nhost-070.minprom.gov.ru\r\nhost-071.minprom.gov.ru\r\nhost-072.minprom.gov.ru\r\nhost-073.minprom.gov.ru\r\nhost-074.minprom.gov.ru\r\nhost-075.minprom.gov.ru\r\nhost-076.minprom.gov.ru\r\nhost-077.minprom.gov.ru\r\nhost-078.minprom.gov.ru\r\nhost-079.minprom.gov.ru\r\nhost-080.minprom.gov.ru\r\nhost-081.minprom.gov.ru\r\nhost-082.minprom.gov.ru\r\nhost-083.minprom.gov.ru\r\nhost-084.minprom.gov.ru\r\nhost-085.minprom.gov.ru\r\nhost-086.minprom.gov.ru\r\nhost-087.minprom.gov.ru\r\nhost-088.minprom.gov.ru\r\nhost-089.minprom.gov.ru\r\nhost-090.minprom.gov.ru\r\nhost-091.minprom.gov.ru\r\nhost-092.minprom.gov.ru\r\nhost-093.minprom.gov.ru\r\nhost-094.minprom.gov.ru\r\nhost-095.minprom.gov.ru\r\nhost-096.minprom.gov.ru\r\nhost-097.minprom.gov.ru\r\nhost-099.minprom.gov.ru\r\nhost-101.minprom.gov.ru\r\nhost-102.minprom.gov.ru\r\nhost-103.minprom.gov.ru\r\nhost-104.minprom.gov.ru\r\nhost-105.minprom.gov.ru\r\nhost-106.minprom.gov.ru\r\nhost-107.minprom.gov.ru\r\nhost-108.minprom.gov.ru\r\nhost-109.minprom.gov.ru\r\nhost-110.minprom.gov.ru\r\nhost-111.minprom.gov.ru\r\nhost-112.minprom.gov.ru\r\nhost-113.minprom.gov.ru\r\nhost-114.minprom.gov.ru\r\nhost-116.minprom.gov.ru\r\nhost-118.minprom.gov.ru\r\nhost-119.minprom.gov.ru\r\nhost-120.minprom.gov.ru\r\nhost-121.minprom.gov.ru\r\nhost-122.minprom.gov.ru\r\nhost-123.minprom.gov.ru\r\nhost-124.minprom.gov.ru\r\nhost-125.minprom.gov.ru\r\nhost-126.minprom.gov.ru\r\nhost-127.minprom.gov.ru\r\nhost-130.minprom.gov.ru\r\nhost-131.minprom.gov.ru\r\nhost-132.minprom.gov.ru\r\nhost-133.minprom.gov.ru\r\nhost-134.minprom.gov.ru\r\nhost-135.minprom.gov.ru\r\nhost-136.minprom.gov.ru\r\nhost-137.minprom.gov.ru\r\nhost-138.minprom.gov.ru\r\nhost-139.minprom.gov.ru\r\nhost-140.minprom.gov.ru\r\nhost-141.minprom.gov.ru\r\nhost-142.minprom.gov.ru\r\nhost-143.minprom.gov.ru\r\nhost-144.minprom.gov.ru\r\nhost-145.minprom.gov.ru\r\nhost-146.minprom.gov.ru\r\nhost-147.minprom.gov.ru\r\nhost-148.minprom.gov.ru\r\nhost-149.minprom.gov.ru\r\nhost-151.minprom.gov.ru\r\nhost-152.minprom.gov.ru\r\nhost-153.minprom.gov.ru\r\nhost-154.minprom.gov.ru\r\nhost-155.minprom.gov.ru\r\nhost-156.minprom.gov.ru\r\nhost-157.minprom.gov.ru\r\nhost-158.minprom.gov.ru\r\nhost-159.minprom.gov.ru\r\nhost-160.minprom.gov.ru\r\nhost-161.minprom.gov.ru\r\nhost-162.minprom.gov.ru\r\nhost-163.minprom.gov.ru\r\nhost-164.minprom.gov.ru\r\nhost-165.minprom.gov.ru\r\nhost-166.minprom.gov.ru\r\nhost-167.minprom.gov.ru\r\nhost-168.minprom.gov.ru\r\nhost-169.minprom.gov.ru\r\nhost-170.minprom.gov.ru\r\nhost-171.minprom.gov.ru\r\nhost-172.minprom.gov.ru\r\nhost-173.minprom.gov.ru\r\nhost-174.minprom.gov.ru\r\nhost-175.minprom.gov.ru\r\nhost-176.minprom.gov.ru\r\nhost-177.minprom.gov.ru\r\nhost-178.minprom.gov.ru\r\nhost-179.minprom.gov.ru\r\nhost-180.minprom.gov.ru\r\nhost-181.minprom.gov.ru\r\nhost-182.minprom.gov.ru\r\nhost-183.minprom.gov.ru\r\nhost-184.minprom.gov.ru\r\nhost-185.minprom.gov.ru\r\nhost-186.minprom.gov.ru\r\nhost-187.minprom.gov.ru\r\nhost-188.minprom.gov.ru\r\nhost-189.minprom.gov.ru\r\nhost-190.minprom.gov.ru\r\nhost-191.minprom.gov.ru\r\nhost-194.minprom.gov.ru\r\nhost-195.minprom.gov.ru\r\nhost-196.minprom.gov.ru\r\nhost-197.minprom.gov.ru\r\nhost-200.minprom.gov.ru\r\nhost-201.minprom.gov.ru\r\nhost-202.minprom.gov.ru\r\nhost-203.minprom.gov.ru\r\nhost-204.minprom.gov.ru\r\nhost-206.minprom.gov.ru\r\nhost-207.minprom.gov.ru\r\nhost-208.minprom.gov.ru\r\nhost-209.minprom.gov.ru\r\nhost-210.minprom.gov.ru\r\nhost-211.minprom.gov.ru\r\nhost-212.minprom.gov.ru\r\nhost-213.minprom.gov.ru\r\nhost-214.minprom.gov.ru\r\nhost-215.minprom.gov.ru\r\nhost-217.minprom.gov.ru\r\nhost-218.minprom.gov.ru\r\nhost-219.minprom.gov.ru\r\nhost-220.minprom.gov.ru\r\nhost-221.minprom.gov.ru\r\nhost-222.minprom.gov.ru\r\nhost-223.minprom.gov.ru\r\nhost-224.minprom.gov.ru\r\nhost-225.minprom.gov.ru\r\nhost-226.minprom.gov.ru\r\nhost-227.minprom.gov.ru\r\nhost-229.minprom.gov.ru\r\nhost-230.minprom.gov.ru\r\nhost-231.minprom.gov.ru\r\nhost-232.minprom.gov.ru\r\nhost-233.minprom.gov.ru\r\nhost-234.minprom.gov.ru\r\nhost-236.minprom.gov.ru\r\nhost-237.minprom.gov.ru\r\nhost-238.minprom.gov.ru\r\nhost-239.minprom.gov.ru\r\nhost.avito.ru\r\nhost.master.2016.yandex.ru\r\nhost01.avito.ru\r\nhost02.avito.ru\r\nhost03.avito.ru\r\nhost04.avito.ru\r\nhost05.avito.ru\r\nhost1.avito.ru\r\nhost10.avito.ru\r\nhost10.mon.gov.ru\r\nhost10.vk.com\r\nhost101.avito.ru\r\nhost11.avito.ru\r\nhost11.mon.gov.ru\r\nhost12.avito.ru\r\nhost12.mon.gov.ru\r\nhost120.avito.ru\r\nhost120.vk.com\r\nhost122.avito.ru\r\nhost13.avito.ru\r\nhost13.mon.gov.ru\r\nhost14.mon.gov.ru\r\nhost15.mon.gov.ru\r\nhost16.mon.gov.ru\r\nhost17.mon.gov.ru\r\nhost18.mon.gov.ru\r\nhost19.mon.gov.ru\r\nhost2.avito.ru\r\nhost2.mon.gov.ru\r\nhost20.avito.ru\r\nhost20.mon.gov.ru\r\nhost20.vk.com\r\nhost21.avito.ru\r\nhost21.mon.gov.ru\r\nhost2123.avito.ru\r\nhost22.mon.gov.ru\r\nhost23.96.12.217.alfabank.ru\r\nhost23.avito.ru\r\nhost23.mon.gov.ru\r\nhost24.mon.gov.ru\r\nhost25.avito.ru\r\nhost25.mon.gov.ru\r\nhost26.mon.gov.ru\r\nhost27.mon.gov.ru\r\nhost28.mon.gov.ru\r\nhost29.mon.gov.ru\r\nhost3.avito.ru\r\nhost3.mon.gov.ru\r\nhost30.family.tomsk.gov.ru\r\nhost30.mon.gov.ru\r\nhost31.mon.gov.ru\r\nhost32.mon.gov.ru\r\nhost4.avito.ru\r\nhost4.mon.gov.ru\r\nhost41.avito.ru\r\nhost5.avito.ru\r\nhost5.mon.gov.ru\r\nhost6.avito.ru\r\nhost6.mon.gov.ru\r\nhost6.zdorovie-shkolnika.spb.aif.ru\r\nhost7.avito.ru\r\nhost7.mon.gov.ru\r\nhost8.avito.ru\r\nhost8.mon.gov.ru\r\nhost9.avito.ru\r\nhost9.mon.gov.ru\r\nhosted.avito.ru\r\nhostel.avito.ru\r\nhoster.avito.ru\r\nhosting-cp.mail.ru\r\nhosting.avito.ru\r\nhosting.cc.mts.ru\r\nhosting.mail.ru\r\nhosting.mts.ru\r\nhosting.rbc.ru\r\nhosting01.avito.ru\r\nhosting1.avito.ru\r\nhosting2.avito.ru\r\nhosting3.avito.ru\r\nhosting4.avito.ru\r\nhostkarma.avito.ru\r\nhostmaster.avito.ru\r\nhostmaster.kino-teatr.ru\r\nhosts.avito.ru\r\nhot-arctic.gazeta.ru\r\nhot-spot.megafon.ru\r\nhot.avito.ru\r\nhotaru.yandex.ru\r\nhotdigitalcodecs.avito.ru\r\nhotel.avito.ru\r\nhotel.tutu.ru\r\nhoteles.avito.ru\r\nhotels.avito.ru\r\nhotels.babyblog.ru\r\nhotels.tutu.ru\r\nhotels.zdorovie-shkolnika.spb.aif.ru\r\nhotfreecodecs.avito.ru\r\nhoth.avito.ru\r\nhotline.avito.ru\r\nhotline.lemanapro.ru\r\nhotlivecodecs.avito.ru\r\nhotmail.avito.ru\r\nhotmediacodecs.avito.ru\r\nhotnewcodecs.avito.ru\r\nhotpoint-ariston.lady.mail.ru\r\nhotspot.avito.ru\r\nhotspot.beeline.ru\r\nhotspot.megafon.ru\r\nhottabych.mail.ru\r\nhotthiscodecs.avito.ru\r\nhound.avito.ru\r\nhouse.avito.ru\r\nhouse.magnit.ru\r\nhousing.avito.ru\r\nhousing.dev.iiot.gov.ru\r\nhousing.iiot.gov.ru\r\nhousing.mos.ru\r\nhouston.avito.ru\r\nhover-h3.drom.ru\r\nhoward.avito.ru\r\nhowto.avito.ru\r\nhp.avito.ru\r\nhp4.mail.ru\r\nhpc.avito.ru\r\nhps.avito.ru\r\nhptest.avito.ru\r\nhpv.mkb.ru\r\nhq-fw2-0.rbc.ru\r\nhq-fw2-1.rbc.ru\r\nhq-fw2-3.rbc.ru\r\nhq-gw1-0.rbc.ru\r\nhq-gw2.rbc.ru\r\nhq-logger01.rbc.ru\r\nhq-relay01.rbc.ru\r\nhq-relay02.rbc.ru\r\nhq-z2-srx650.reth0.4.rbc.ru\r\nhq.avito.ru\r\nhq2.avito.ru\r\nhqjt.avito.ru\r\nhr-dev.sber.ru\r\nhr-dev.sberbank.ru\r\nhr-draft.sber.ru\r\nhr-draft.sberbank.ru\r\nhr-forum.rbc.ru\r\nhr-ift.sber.ru\r\nhr-ift.sberbank.ru\r\nhr-index.rbc.ru\r\nhr-portal.tinkoff.ru\r\nhr-qa.sber.ru\r\nhr-qa.sberbank.ru\r\nhr-reserve.fas.gov.ru\r\nhr-support.tinkoff.ru\r\nhr-test.sber.ru\r\nhr-uat.sber.ru\r\nhr-uat.sberbank.ru\r\nhr.alfabank.ru\r\nhr.avito.ru\r\nhr.citilink.ru\r\nhr.drom.ru\r\nhr.magnit.ru\r\nhr.sber.ru\r\nhr.sberbank.ru\r\nhra.lb.tinkoff.ru\r\nhralert.vedomosti.ru\r\nhrautumn19.vedomosti.ru\r\nhrc.tbank.ru\r\nhrd.avito.ru\r\nhre.avito.ru\r\nhrforecast.sakha.gov.ru\r\nhrgpmqa.worldbank.org\r\nhrgpmsvcqa.worldbank.org\r\nhris.avito.ru\r\nhrjira.mail.ru\r\nhrkiosk.worldbank.org\r\nhrleto19.vedomosti.ru\r\nhrm.avito.ru\r\nhrms.avito.ru\r\nhrpointsuivi.test.euronews.com\r\nhrtek.vk.com\r\nhrwebtop.worldbank.org\r\nhrwebtopdev.worldbank.org\r\nhrwebtopqa.worldbank.org\r\nhrwebtopuat.worldbank.org\r\nhs.avito.ru\r\nhs.mail.ru\r\nhs1.avito.ru\r\nhsbc.avito.ru\r\nhse.sber.ru\r\nhshs.avito.ru\r\nhsi.avito.ru\r\nhsl.avito.ru\r\nhso.worldbank.org\r\nhsp.avito.ru\r\nhst.avito.ru\r\nht.avito.ru\r\nhtml.avito.ru\r\nhtml.mk.ru\r\nhtml5.avito.ru\r\nhtpp.www.babyblog.ru\r\nhts.avito.ru\r\nhts.mts.ru\r\nhttp-www.kino-teatr.ru\r\nhttp.avito.ru\r\nhttp1.avito.ru\r\nhttp2.avito.ru\r\nhttpbin.avito.ru\r\nhttps.avito.ru\r\nhttps.dns.yandex.ru\r\nhttpswww.avito.ru\r\nhttpswww.kino-teatr.ru\r\nhttpwww.kino-teatr.ru\r\nhtv-appstore.mts.ru\r\nhtv-cds.mts.ru\r\nhtv-eds.mts.ru\r\nhtv-elk.mts.ru\r\nhtv-erdm.mts.ru\r\nhtv-imp.mts.ru\r\nhtv-lab.mts.ru\r\nhtv-mag1-ekat.mts.ru\r\nhtv-mag1-moscow1.mts.ru\r\nhtv-mag1-moscow2.mts.ru\r\nhtv-mag1-novosib.mts.ru\r\nhtv-mag1-rostov.mts.ru\r\nhtv-mag2-ekat.mts.ru\r\nhtv-mag2-moscow1.mts.ru\r\nhtv-mag2-moscow2.mts.ru\r\nhtv-mag2-novosib.mts.ru\r\nhtv-mag2-rostov.mts.ru\r\nhtv-mw.mts.ru\r\nhtv-platbox.mts.ru\r\nhtv-prls.mts.ru\r\nhtv-rrs-central.mts.ru\r\nhtv-rrs-ekat.mts.ru\r\nhtv-rrs-moscow1.mts.ru\r\nhtv-rrs-moscow2.mts.ru\r\nhtv-rrs-novosib.mts.ru\r\nhtv-rrs-posters.mts.ru\r\nhtv-rrs-rostov.mts.ru\r\nhtv-rrs.mts.ru\r\nhtv-stat.mts.ru\r\nhtv-tms.mts.ru\r\nhtv-vod.mts.ru\r\nhtv-vsc.mts.ru\r\nhtv-wv.mts.ru\r\nhtv-zrpcc.mts.ru\r\nhtwww.kino-teatr.ru\r\nhu.avito.ru\r\nhu.euronews.com\r\nhuawei-hitech.m24.ru\r\nhuawei.rbc.ru\r\nhuawei.vedomosti.ru\r\nhuaweimate20.vedomosti.ru\r\nhub.avito.ru\r\nhub.litres.ru\r\nhub.megafon.ru\r\nhub.zoon.ru\r\nhubble.avito.ru\r\nhubs.worldbank.org\r\nhubsdev.worldbank.org\r\nhubsqa.worldbank.org\r\nhubswindev.worldbank.org\r\nhud.avito.ru\r\nhudson.avito.ru\r\nhugo.avito.ru\r\nhulimsunt-shkola.gosuslugi.ru\r\nhulk.avito.ru\r\nhuman-rights2022.nornickel.com\r\nhuman-rights2023.nornickel.com\r\nhuman-rights2024.nornickel.com\r\nhuman.avito.ru\r\nhumanresources.avito.ru\r\nhummer.avito.ru\r\nhumor.avito.ru\r\nhun.avito.ru\r\nhungary.avito.ru\r\nhungry.tinkoff.ru\r\nhunter.avito.ru\r\nhunters.avito.ru\r\nhunting.avito.ru\r\nhunting.eldorado.ru\r\nhurricane.avito.ru\r\nhusqvarna.yandex.ru\r\nhussain.avito.ru\r\nhussein.avito.ru\r\nhuygens.avito.ru\r\nhvac.avito.ru\r\nhw.avito.ru\r\nhw.net.ixbt.com\r\nhw.yandex.ru\r\nhw1-platform.tutu.ru\r\nhw1-preprod-platform.tutu.ru\r\nhw2-prod-platform.tutu.ru\r\nhw3-prod-platform.tutu.ru\r\nhw70f395eb456e.avito.ru\r\nhwww.babyblog.ru\r\nhx.avito.ru\r\nhy.avito.ru\r\nhybrid.avito.ru\r\nhydra-autotest.ing.k8s.dev.ivi.ru\r\nhydra.avito.ru\r\nhydra.cgu.mchs.ru\r\nhydra.dev.cgu.iac.mchs.ru\r\nhydra.dev.volna.rambler.ru\r\nhydra.mchs.ru\r\nhydra.ok.ru\r\nhydra.pg.cgu.mchs.ru\r\nhydra.rambler.ru\r\nhydra.stage.vibe.rambler.ru\r\nhydra.vibe.rambler.ru\r\nhydrant.garant.ru\r\nhydrogen.avito.ru\r\nhyouon32.avito.ru\r\nhyper.avito.ru\r\nhyper.beeline.ru\r\nhyperion.avito.ru\r\nhyperstore.browser.yandex.ru\r\nhyundai.avito.ru\r\nhz.avito.ru\r\nhzjqfpacupdate.kino-teatr.ru\r\ni-avseyanko.sports.ru\r\ni-m.hh.ru\r\ni-maps.yandex.ru\r\ni-origin.avito.ru\r\ni-origin.pics.livejournal.com\r\ni.alfabank.ru\r\ni.assist.drom.ru\r\ni.avito.ru\r\ni.beeline.ru\r\ni.drom.ru\r\ni.garant.ru\r\ni.hh.ru\r\ni.irecommend.ru\r\ni.kommersant.ru\r\ni.kuznecov.po1.mail.ru\r\ni.lb.megafon.ru\r\ni.megafon.ru\r\ni.net.ixbt.com\r\ni.otzovik.com\r\ni.pics.livejournal.com\r\ni.rests.afisha.ru\r\ni.rosbank.ru\r\ni.yandex.ru\r\ni0-ibrb.test.vtb.ru\r\ni0-mbrb.test.vtb.ru\r\ni0-online.test.vtb.ru\r\ni0.avito.ru\r\ni0.db-test.vtb.ru\r\ni1.avito.ru\r\ni10.avito.ru\r\ni10.vk.com\r\ni11.avito.ru\r\ni12.avito.ru\r\ni13.avito.ru\r\ni14.avito.ru\r\ni15.avito.ru\r\ni16.avito.ru\r\ni17.avito.ru\r\ni18.avito.ru\r\ni18nloader.test.euronews.com\r\ni19.avito.ru\r\ni2.avito.ru\r\ni20.avito.ru\r\ni20.vk.com\r\ni2025.otzovik.com\r\ni21.avito.ru\r\ni22.avito.ru\r\ni23.avito.ru\r\ni24.avito.ru\r\ni25.avito.ru\r\ni26.avito.ru\r\ni27.avito.ru\r\ni28.avito.ru\r\ni29.avito.ru\r\ni3.avito.ru\r\ni30.avito.ru\r\ni30.vk.com\r\ni31.avito.ru\r\ni32.avito.ru\r\ni33.avito.ru\r\ni34.avito.ru\r\ni35.avito.ru\r\ni36.avito.ru\r\ni37.avito.ru\r\ni38.avito.ru\r\ni39.avito.ru\r\ni4.avito.ru\r\ni40.avito.ru\r\ni41.avito.ru\r\ni42.avito.ru\r\ni43.avito.ru\r\ni44.avito.ru\r\ni45.avito.ru\r\ni46.avito.ru\r\ni47.avito.ru\r\ni48.avito.ru\r\ni49.avito.ru\r\ni5.avito.ru\r\ni50.avito.ru\r\ni51.avito.ru\r\ni52.avito.ru\r\ni53.avito.ru\r\ni54.avito.ru\r\ni55.avito.ru\r\ni56.avito.ru\r\ni57.avito.ru\r\ni58.avito.ru\r\ni59.avito.ru\r\ni6.avito.ru\r\ni60.avito.ru\r\ni61.avito.ru\r\ni62.avito.ru\r\ni63.avito.ru\r\ni64.avito.ru\r\ni65.avito.ru\r\ni66.avito.ru\r\ni67.avito.ru\r\ni68.avito.ru\r\ni69.avito.ru\r\ni7.avito.ru\r\ni70.avito.ru\r\ni71.avito.ru\r\ni72.avito.ru\r\ni73.avito.ru\r\ni74.avito.ru\r\ni75.avito.ru\r\ni76.avito.ru\r\ni77.avito.ru\r\ni78.avito.ru\r\ni79.avito.ru\r\ni8.avito.ru\r\ni80.avito.ru\r\ni81.avito.ru\r\ni82.avito.ru\r\ni83.avito.ru\r\ni84.avito.ru\r\ni85.avito.ru\r\ni86.avito.ru\r\ni87.avito.ru\r\ni88.avito.ru\r\ni89.avito.ru\r\ni9.avito.ru\r\ni90.avito.ru\r\ni91.avito.ru\r\ni92.avito.ru\r\ni93.avito.ru\r\ni94.avito.ru\r\ni95.avito.ru\r\ni96.avito.ru\r\ni97.avito.ru\r\ni98.avito.ru\r\ni99.avito.ru\r\nia.avito.ru\r\nia.vpk.gov.ru\r\niaas.beeline.ru\r\niaas.cloud.mts.ru\r\niaas.nsk.cloud.mts.ru\r\niaas.spb.cloud.mts.ru\r\niaas.vld.cloud.mts.ru\r\niaas152.msk.cloud.mts.ru\r\niac.mchs.ru\r\niad.avito.ru\r\niae.nalog.ru\r\nialekhin.ing.k8s.dev.ivi.ru\r\niam-t-int.rosatom.ru\r\niam.ads.sber.ru\r\niam.avito.ru\r\niam.duma.gov.ru\r\niam.rosatom.ru\r\niamcdn.rosatom.ru\r\niamp.rosbank.ru\r\niamweb.rosatom.ru\r\nian.avito.ru\r\niap.genproc.gov.ru\r\niap2013.genproc.gov.ru\r\niap2015.genproc.gov.ru\r\niapps.avito.ru\r\niarc.who.int\r\nias.avito.ru\r\nias.mon.gov.ru\r\niasbb.open.ru\r\nib-aplpay-validation.open.ru\r\nib-qa.tinkoff.ru\r\nib.alfabank.ru\r\nib.avito.ru\r\nib.open.ru\r\nib.perevodworld.vtb.ru\r\nib.psbank.ru\r\nib.rosbank.ru\r\nib2.psbank.ru\r\nibank.alfabank.ru\r\nibank.avito.ru\r\nibank.rosbank.ru\r\nibanking.avito.ru\r\nibc.avito.ru\r\nibc.uln.rshb.ru\r\nibfront1c.yandex.ru\r\nibfront1d.yandex.ru\r\nibfront1e.yandex.ru\r\nibfront1f.yandex.ru\r\nibfront1g.yandex.ru\r\nibfront2c.yandex.ru\r\nibfront2d.yandex.ru\r\nibfront2e.yandex.ru\r\nibfront2f.yandex.ru\r\nibfront2g.yandex.ru\r\nibis.avito.ru\r\nibiza.avito.ru\r\nibm.avito.ru\r\nibook.avito.ru\r\nibrahim.avito.ru\r\nibrb.test.vtb.ru\r\nibs.avito.ru\r\nic-asa5520-vpn-fw.avito.ru\r\nic-ca.openbank.ru\r\nic-md.openbank.ru\r\nic-res.openbank.ru\r\nic-test.openbank.ru\r\nic-vss6509-gw.avito.ru\r\nic.alfabank.ru\r\nic.avito.ru\r\nic.kemerovo.rshb.ru\r\nic.kommersant.ru\r\nic.openbank.ru\r\nic.pics.livejournal.com\r\nic.sovcombank.ru\r\nic.z38.zoon.ru\r\nic2.alfabank.ru\r\nica.avito.ru\r\nical.avito.ru\r\nicam.worldbank.org\r\nicamapi.esbmd.worldbank.org\r\nicamapi.esbmp.worldbank.org\r\nicamapi.esbms.worldbank.org\r\nicamapi.esbmt.worldbank.org\r\nicamapi.worldbank.org\r\nicamapicallback.worldbank.org\r\nicamapicallbackdev.worldbank.org\r\nicamapicallbackqa.worldbank.org\r\nicamapicallbacksnd.worldbank.org\r\nicamapicbkesb.worldbank.org\r\nicamapicbkesbd.worldbank.org\r\nicamapicbkesbs.worldbank.org\r\nicamapicbkesbt.worldbank.org\r\nicamapidev.worldbank.org\r\nicamapiqa.worldbank.org\r\nicamapisnd.worldbank.org\r\nicamdev.worldbank.org\r\nicamp.worldbank.org\r\nicamp1a.worldbank.org\r\nicamp1b.worldbank.org\r\nicamp2a.worldbank.org\r\nicamp2b.worldbank.org\r\nicamqa.worldbank.org\r\nican.avito.ru\r\nicare.avito.ru\r\nicarus.avito.ru\r\nicc.avito.ru\r\nicdc.rosbank.ru\r\nicdcdn.who.int\r\nicdn.lenta.ru\r\nice.avito.ru\r\nice.tele2.ru\r\niceberg.avito.ru\r\nicebreakers.tass.ru\r\niceland.avito.ru\r\niceman.avito.ru\r\nicestadiums.life.ru\r\nich.avito.ru\r\nichi.avito.ru\r\nici.avito.ru\r\nicinga.avito.ru\r\niclient.open.ru\r\nicm.avito.ru\r\nicms.avito.ru\r\nico.avito.ru\r\nicom.avito.ru\r\nicon.avito.ru\r\niconf.rosatom.ru\r\nicp.avito.ru\r\nicp.worldbank.org\r\nicpmdirectory.avito.ru\r\nicpmupdate.avito.ru\r\nicq.avito.ru\r\nicq.jabber.avito.ru\r\nics.avito.ru\r\nicsid.worldbank.org\r\nicsiddev.worldbank.org\r\nicsidextadmin.worldbank.org\r\nicsidextadmindev.worldbank.org\r\nicsidextadminqa.worldbank.org\r\nicsidqa.worldbank.org\r\nict.avito.ru\r\nid-ext.rambler.ru\r\nid-hub-sandbox.alfabank.ru\r\nid-hub.alfabank.ru\r\nid-planet.rambler.ru\r\nid-sandbox.alfabank.ru\r\nid-stage.afisha.ru\r\nid-t-ext.rosatom.ru\r\nid-test.alfabank.ru\r\nid.afisha.ru\r\nid.alfabank.ru\r\nid.app-assistent.open.ru\r\nid.avito.ru\r\nid.cloud.mts.ru\r\nid.cs7777.vk.com\r\nid.dev.cloud.mts.ru\r\nid.magnit.ru\r\nid.mail.ru\r\nid.ozon.ru\r\nid.rambler.ru\r\nid.remotesupport.tass.ru\r\nid.rosatom.ru\r\nid.rosbank.ru\r\nid.sber.ru\r\nid.sberbank-ru.os-prom.sberbank.ru\r\nid.sberbank-ru.os-psi.sberbank.ru\r\nid.sberbank.ru\r\nid.tau.vk.com\r\nid.tbank.ru\r\nid.tinkoff.ru\r\nid.vtb.ru\r\nid.x5.ru\r\nida.avito.ru\r\nida.worldbank.org\r\nidacapital.worldbank.org\r\nidacapitaldev40.worldbank.org\r\nidacapitaldev41pha.worldbank.org\r\nidaho.avito.ru\r\nidata.avito.ru\r\nidatchik.msk.mts.ru\r\nidaweb.worldbank.org\r\nidawebqa.worldbank.org\r\niday.mts.ru\r\nidb.avito.ru\r\nidc.avito.ru\r\nide.avito.ru\r\nidea.avito.ru\r\nidea.open.ru\r\nideal.2002.yandex.ru\r\nideal.avito.ru\r\nideal.lady.mail.ru\r\nideas.avito.ru\r\nideas.sps.rosatom.ru\r\nidefix.avito.ru\r\nidemo.vtb.ru\r\nident.avito.ru\r\nident.mts.ru\r\nidentification.megafon.ru\r\nidentity.avito.ru\r\nidentity.beeline.ru\r\nidentity.chat.psbank.ru\r\nidentity.chatdev.psbank.ru\r\nidentity.chatprep.psbank.ru\r\nidentity.chattest.psbank.ru\r\nidentity.dam.vtb.ru\r\nidentity.worldbank.org\r\nidentitybuildt.worldbank.org\r\nidentitydev.worldbank.org\r\nidentityqa.worldbank.org\r\nidentitytq.worldbank.org\r\nidentityvendor.worldbank.org\r\nidentityvendordev.worldbank.org\r\nidentityvendorqa.worldbank.org\r\nides.alfabank.ru\r\nides.open.ru\r\nides.rosbank.ru\r\nides.tinkoff.ru\r\nidiots.avito.ru\r\nidktv.rosatom.ru\r\nidm.avito.ru\r\nidm.emm.sberbank.ru\r\nidm01.rosatom.ru\r\nidm02.rosatom.ru\r\nidm03.rosatom.ru\r\nidm04.rosatom.ru\r\nidm05.rosatom.ru\r\nidm06.rosatom.ru\r\nidocs.alfabank.ru\r\nidp-external-test.alfabank.ru\r\nidp-external.alfabank.ru\r\nidp-prodlike-awrwlxbyb2rsawtl.beeline.ru\r\nidp-test.avito.ru\r\nidp.avito.ru\r\nidp.beeline.ru\r\nidp.cloud.mts.ru\r\nidp.kommersant.ru\r\nidp.paas.cloud.mts.ru\r\nidp.tass.ru\r\nidp2.avito.ru\r\nidpapi.vimpelcom.ru\r\nidphydra-uat.beeline.ru\r\nidplogin-int.beeline.ru\r\nidpmapic.vimpelcom.ru\r\nidrambler.afisha.ru\r\nids-cns-3.kino-teatr.ru\r\nids.avito.ru\r\nids.zdorovie-shkolnika.spb.aif.ru\r\nids1.avito.ru\r\nids2.avito.ru\r\nidstat.app-assistent.open.ru\r\nie.avito.ru\r\nie.yandex.ru\r\nie8.mail.ru\r\niec.avito.ru\r\nieee.avito.ru\r\nieg.worldbank.org\r\nielts.avito.ru\r\niem-int-idp-front.beeline.ru\r\nien.avito.ru\r\niep.avito.ru\r\nies.avito.ru\r\nif-ibrb.test.vtb.ru\r\nif-mbrb.test.vtb.ru\r\nif-online.test.vtb.ru\r\nif-pay-test.vtb.ru\r\nif.app.vtb.ru\r\nif.avito.ru\r\nif.db-test.vtb.ru\r\nif1.mail.ru\r\nif10.mail.ru\r\nif11.mail.ru\r\nif12.mail.ru\r\nif13.mail.ru\r\nif14.mail.ru\r\nif15.mail.ru\r\nif16.mail.ru\r\nif17.mail.ru\r\nif18.mail.ru\r\nif19.mail.ru\r\nif2.mail.ru\r\nif20.mail.ru\r\nif21.mail.ru\r\nif22.mail.ru\r\nif23.mail.ru\r\nif24.mail.ru\r\nif25.mail.ru\r\nif26.mail.ru\r\nif27.mail.ru\r\nif28.mail.ru\r\nif29.mail.ru\r\nif3.mail.ru\r\nif30.mail.ru\r\nif31.mail.ru\r\nif32.mail.ru\r\nif33.mail.ru\r\nif34.mail.ru\r\nif35.mail.ru\r\nif36.mail.ru\r\nif37.mail.ru\r\nif38.mail.ru\r\nif39.mail.ru\r\nif4.mail.ru\r\nif40.mail.ru\r\nif41.mail.ru\r\nif42.mail.ru\r\nif43.mail.ru\r\nif44.mail.ru\r\nif45.mail.ru\r\nif46.mail.ru\r\nif47.mail.ru\r\nif48.mail.ru\r\nif49.mail.ru\r\nif5.mail.ru\r\nif50.mail.ru\r\nif6.mail.ru\r\nif7.mail.ru\r\nif8.mail.ru\r\nif9.mail.ru\r\nifa.drom.ru\r\nifcdonor.worldbank.org\r\nifchtauth.worldbank.org\r\nifchtauthd.worldbank.org\r\nifchtauthq.worldbank.org\r\nifcltauth.worldbank.org\r\nifcltauthd.worldbank.org\r\nifcltauthq.worldbank.org\r\nifcmtauth.worldbank.org\r\nifcmtauthd.worldbank.org\r\nifcmtauthq.worldbank.org\r\nifcsummitftdev.worldbank.org\r\nifcsummitfttest.worldbank.org\r\nifedorchuk.dev.arh.mk.ru\r\nifedorchuk.dev.ast.mk.ru\r\nifedorchuk.dev.baikal.mk.ru\r\nifedorchuk.dev.belgorod.mk.ru\r\nifedorchuk.dev.blag.mk.ru\r\nifedorchuk.dev.brl.mk.ru\r\nifedorchuk.dev.cheb.mk.ru\r\nifedorchuk.dev.chel.mk.ru\r\nifedorchuk.dev.chr.mk.ru\r\nifedorchuk.dev.crimea.mk.ru\r\nifedorchuk.dev.eburg.mk.ru\r\nifedorchuk.dev.hab.mk.ru\r\nifedorchuk.dev.ivanovo.mk.ru\r\nifedorchuk.dev.izhevsk.mk.ru\r\nifedorchuk.dev.karel.mk.ru\r\nifedorchuk.dev.kavkaz.mk.ru\r\nifedorchuk.dev.kazan.mk.ru\r\nifedorchuk.dev.kbr.mk.ru\r\nifedorchuk.dev.kemerovo.mk.ru\r\nifedorchuk.dev.kostroma.mk.ru\r\nifedorchuk.dev.kras.mk.ru\r\nifedorchuk.dev.kuban.mk.ru\r\nifedorchuk.dev.kuzbass.mk.ru\r\nifedorchuk.dev.magadan.mk.ru\r\nifedorchuk.dev.mkala.mk.ru\r\nifedorchuk.dev.mrl.mk.ru\r\nifedorchuk.dev.murmansk.mk.ru\r\nifedorchuk.dev.nn.mk.ru\r\nifedorchuk.dev.novos.mk.ru\r\nifedorchuk.dev.omsk.mk.ru\r\nifedorchuk.dev.orel.mk.ru\r\nifedorchuk.dev.oren.mk.ru\r\nifedorchuk.dev.perm.mk.ru\r\nifedorchuk.dev.rostov.mk.ru\r\nifedorchuk.dev.rzn.mk.ru\r\nifedorchuk.dev.samara.mk.ru\r\nifedorchuk.dev.saratov.mk.ru\r\nifedorchuk.dev.serp.mk.ru\r\nifedorchuk.dev.sochi.mk.ru\r\nifedorchuk.dev.spb.mk.ru\r\nifedorchuk.dev.tambov.mk.ru\r\nifedorchuk.dev.tomsk.mk.ru\r\nifedorchuk.dev.tula.mk.ru\r\nifedorchuk.dev.tumen.mk.ru\r\nifedorchuk.dev.tv.mk.ru\r\nifedorchuk.dev.tver.mk.ru\r\nifedorchuk.dev.ufa.mk.ru\r\nifedorchuk.dev.ugra.mk.ru\r\nifedorchuk.dev.ul.mk.ru\r\nifedorchuk.dev.ulan.mk.ru\r\nifedorchuk.dev.vlad.mk.ru\r\nifedorchuk.dev.vladimir.mk.ru\r\nifedorchuk.dev.volg.mk.ru\r\nifedorchuk.dev.vologda.mk.ru\r\nifedorchuk.dev.vrn.mk.ru\r\nifedorchuk.dev.www.mk.ru\r\nifedorchuk.dev.yakutia.mk.ru\r\nifedorchuk.dev.yar.mk.ru\r\nifedorchuk.dev.yaroslavl.mk.ru\r\niflash.video.ria.ru\r\nifluerash.ing.k8s.dev.ivi.ru\r\nifolder.avito.ru\r\niframely.net.ixbt.com\r\nift-alis.vacr.vtb.ru\r\nift-alis.varc.vtb.ru\r\nift-appweb.broker.vtb.ru\r\nift-chat-sharing.vtb.ru\r\nift-chat-turn.vtb.ru\r\nift-chat.vtb.ru\r\nift-ibmb1-sharing.vtb.ru\r\nift-ibmb2-sharing.vtb.ru\r\nift-ibrb1-sharing.vtb.ru\r\nift-invest.vtb.ru\r\nift-ios.vacr.vtb.ru\r\nift-mobile.broker.vtb.ru\r\nift-opros-sberbank-ru.sberbank.ru\r\nift-realty-price-predictor.domclick.ru\r\nift-recog.vacr.vtb.ru\r\nift-salute.devicestest.sberbank.ru\r\nift-static.superapp.sberbank.ru\r\nift-synt.vacr.vtb.ru\r\nift.fgw-onb-dmz.fgw.db-test.vtb.ru\r\nift.fgw-onb-dmz.fgw.if.db-test.vtb.ru\r\nift.h.vtb.ru\r\nift.mdm.sber.ru\r\nift.salute.online.sberbank.ru\r\nift.sber.ru\r\nift.sberdisk.sberbank.ru\r\niftmpclickstream.testonline.sberbank.ru\r\niftp.avito.ru\r\niftsyncplay.online.sberbank.ru\r\nig.avito.ru\r\nigapi.megafon.ru\r\nigate.avito.ru\r\nigk.avito.ru\r\nigloo.avito.ru\r\nignite.avito.ru\r\nignition.avito.ru\r\nigor.87.yandex.ru\r\nigor.avito.ru\r\nigra-uspeh.kommersant.ru\r\nigra.avito.ru\r\nigra.beeline.ru\r\nigra.eldorado.ru\r\nigra.mvideo.ru\r\nigra1.mvideo.ru\r\nigra2.eldorado.ru\r\nigra2.mvideo.ru\r\nigramin.sakha.gov.ru\r\nigroteka.mts.ru\r\nih.rosatom.ru\r\nihelper.amur.mts.ru\r\nihelper.buryatia.mts.ru\r\nihelper.chita.mts.ru\r\nihelper.chukotka.mts.ru\r\nihelper.dv.mts.ru\r\nihelper.eao.mts.ru\r\nihelper.irkutsk.mts.ru\r\nihelper.kamchatka.mts.ru\r\nihelper.khv.mts.ru\r\nihelper.magadan.mts.ru\r\nihelper.mts.ru\r\nihelper.nnov.mts.ru\r\nihelper.nw.mts.ru\r\nihelper.primorye.mts.ru\r\nihelper.sakh.mts.ru\r\nihelper.sakha.mts.ru\r\nihelper.samara.mts.ru\r\nihelper.sib.mts.ru\r\nihelper.ug.mts.ru\r\nihelper.ural.mts.ru\r\niherb.aif.ru\r\nihjztitlwqmwn3b.nqzwec0eohzuxit7.www.rostelecom.oren.aif.ru\r\nihome.avito.ru\r\nihome.rosbank.ru\r\nii.avito.ru\r\niii.avito.ru\r\niina.avito.ru\r\niiot.gov.ru\r\niiot.mts.ru\r\niis.avito.ru\r\nik.avito.ru\r\nikaros.avito.ru\r\nikev2.2gis.ru\r\nikey.magnit.ru\r\nikiburulskoe-r08.gosweb.gosuslugi.ru\r\niklan.avito.ru\r\niknow-vm.yandex.ru\r\nikr.msp.economy.gov.ru\r\nikrasavin.ing.k8s.dev.ivi.ru\r\nikrylov.ing.k8s.dev.ivi.ru\r\niks.avito.ru\r\nil.avito.ru\r\nil.kp.ru\r\nil276.tass.ru\r\nilab.avito.ru\r\nilap.worldbank.org\r\nilearn.avito.ru\r\nilearn.interfax.ru\r\niledebeaute.lady.mail.ru\r\nilias.avito.ru\r\niliketravel.rbc.ru\r\nilisovtsov.ing.k8s.dev.ivi.ru\r\nill.avito.ru\r\nilliad.avito.ru\r\nillinois.avito.ru\r\nilluminati.avito.ru\r\nillusion.avito.ru\r\nilo.avito.ru\r\niloveyou.avito.ru\r\nilrhmru.kino-teatr.ru\r\nils.avito.ru\r\niltumen.sakha.gov.ru\r\nilya.vinogradov.1996.yandex.ru\r\nilya.yandex.ru\r\nim-otrtop-tst.mkb.ru\r\nim-tst.mkb.ru\r\nim-tub-prestable.yandex.ru\r\nim-tub.yandex.ru\r\nim.1tv.ru\r\nim.avito.ru\r\nim.gosuslugi.ru\r\nim.kommersant.ru\r\nim.magnit.ru\r\nim.mkb.ru\r\nim.nalog.ru\r\nim.perekrestok.ru\r\nim.rtpete.avito.ru\r\nim.rtpqa.avito.ru\r\nim.russianpost.ru\r\nim.tele2.ru\r\nim.vprok.ru\r\nim0-tub.yandex.ru\r\nim0.kommersant.ru\r\nim1.avito.ru\r\nim1.kommersant.ru\r\nim2-tub.yandex.ru\r\nim2.avito.ru\r\nim2.kommersant.ru\r\nim3-tub.yandex.ru\r\nim3.avito.ru\r\nim3.kommersant.ru\r\nim4-tub.yandex.ru\r\nim4.avito.ru\r\nim4.kommersant.ru\r\nim5-tub.yandex.ru\r\nim5.kommersant.ru\r\nim6-tub.yandex.ru\r\nim6.kommersant.ru\r\nim7-tub.yandex.ru\r\nim7.kommersant.ru\r\nim8-tub.yandex.ru\r\nim8.kommersant.ru\r\nim9.kommersant.ru\r\nima.avito.ru\r\nimac.avito.ru\r\nimage-converter-lambda.int.euronews.com\r\nimage-converter-lambda.prod.euronews.com\r\nimage-converter-lambda.qat.euronews.com\r\nimage-converter-lambda.trn.euronews.com\r\nimage-resizer-dev.k8s.rg.ru\r\nimage-resizer-stage.k8s.rg.ru\r\nimage.alfabank.ru\r\nimage.avito.ru\r\nimage.businesseducation.tinkoff.ru\r\nimage.crmtd.mts.ru\r\nimage.debt.open.ru\r\nimage.demo.mdrive.magnit.ru\r\nimage.e.corp.megafon.ru\r\nimage.e.shop.megafon.ru\r\nimage.email.domclick.ru\r\nimage.email.rosbank.ru\r\nimage.email2.kommersant.ru\r\nimage.emails.tbank.ru\r\nimage.emails.tinkoff.ru\r\nimage.hello.mneblizko.mts.ru\r\nimage.mail.gosuslugi.ru\r\nimage.mdrive.magnit.ru\r\nimage.promo.citilink.ru\r\nimage.qa.mdrive.magnit.ru\r\nimage.service.citilink.ru\r\nimage1.avito.ru\r\nimage2.avito.ru\r\nimage2.kommersant.ru\r\nimage2.m24.ru\r\nimage3.avito.ru\r\nimagegallery.avito.ru\r\nimagehost.avito.ru\r\nimagenes.avito.ru\r\nimagens.avito.ru\r\nimagerenderer.tutu.ru\r\nimages-api.cloud.mail.ru\r\nimages-foodtech.dev.magnit.ru\r\nimages-foodtech.magnit.ru\r\nimages-foodtech.uat.magnit.ru\r\nimages-shop.vtb.ru\r\nimages.a.avito.ru\r\nimages.a.vk.com\r\nimages.apteka.ru\r\nimages.avito.ru\r\nimages.cdn.dev.api.max.com\r\nimages.cdn.int.api.max.com\r\nimages.cdn.prd.api.max.com\r\nimages.cdn.stg.api.max.com\r\nimages.drive2.ru\r\nimages.garant.ru\r\nimages.kino-teatr.ru\r\nimages.lady.mail.ru\r\nimages.rambler.ru\r\nimages.stand22.rambler.ru\r\nimages.stand26.rambler.ru\r\nimages.tanks.mail.ru\r\nimages.tiu.ru\r\nimages.tutu.ru\r\nimages.yandex.ru\r\nimages0.avito.ru\r\nimages1.avito.ru\r\nimages2.avito.ru\r\nimages3.avito.ru\r\nimages4.avito.ru\r\nimages5.avito.ru\r\nimages6.avito.ru\r\nimages7.avito.ru\r\nimages8.avito.ru\r\nimagesapi.cloud.mail.ru\r\nimageserver.avito.ru\r\nimageupload.avito.ru\r\nimaginary.avito.ru\r\nimagine.avito.ru\r\nimaginemybuild-c5x32.mail.ru\r\nimaginemybuild-c5x64.mail.ru\r\nimaginemybuild-c6x32.mail.ru\r\nimaginemybuild-c6x64.mail.ru\r\nimaging.avito.ru\r\nimagini.avito.ru\r\nimail.avito.ru\r\nimail.longread.altai.aif.ru\r\niman.avito.ru\r\nimap.atd.gov.ru\r\nimap.atr.gov.ru\r\nimap.avito.ru\r\nimap.cloudmail.mts.ru\r\nimap.exchange.rosbank.ru\r\nimap.interfax.ru\r\nimap.kp.ru\r\nimap.lemanapro.ru\r\nimap.mail.ru\r\nimap.myoffice.sberbank.ru\r\nimap.rambler.ru\r\nimap.rosbank.ru\r\nimap.rutube.ru\r\nimap.yandex.ru\r\nimap1.avito.ru\r\nimap2.avito.ru\r\nimap3.avito.ru\r\nimap4.avito.ru\r\nimap9.mail.ru\r\nimaps.avito.ru\r\nimat-relpred.yandex.ru\r\nimat2009.yandex.ru\r\nimat2011.yandex.ru\r\nimc.avito.ru\r\nimedia.avito.ru\r\nimg-dostavka.magnit.ru\r\nimg-fotki.yandex.ru\r\nimg-photobank.iz.ru\r\nimg.9111.ru\r\nimg.afisha.ru\r\nimg.alfabank.ru\r\nimg.avito.ru\r\nimg.babyblog.ru\r\nimg.championat.com\r\nimg.crimea.ria.ru\r\nimg.domofon.mts.ru\r\nimg.e.avito.ru\r\nimg.feedback.rosatom.ru\r\nimg.fotki.yandex.ru\r\nimg.gazeta.ru\r\nimg.gismeteo.ru\r\nimg.k8s.rg.ru\r\nimg.kino-teatr.ru\r\nimg.lab.ria.ru\r\nimg.lady.mail.ru\r\nimg.lenta.ru\r\nimg.mail.ru\r\nimg.med.vesti.ru\r\nimg.minzdrav.gov.ru\r\nimg.net.ixbt.com\r\nimg.realty.vesti.ru\r\nimg.ria.ru\r\nimg.rosbalt.ru\r\nimg.ssp.rambler.ru\r\nimg.stage.championat.com\r\nimg.tutu.ru\r\nimg.yandex.ru\r\nimg0.avito.ru\r\nimg01.avito.ru\r\nimg01.ssp.rambler.ru\r\nimg02.avito.ru\r\nimg02.ssp.rambler.ru\r\nimg03.avito.ru\r\nimg03.leasing.rshb.ru\r\nimg04.avito.ru\r\nimg05.avito.ru\r\nimg06.avito.ru\r\nimg1-fotki.yandex.ru\r\nimg1.1tv.ru\r\nimg1.avito.ru\r\nimg1.cs.ixbt.com\r\nimg1.mail.ru\r\nimg10.avito.ru\r\nimg10.vk.com\r\nimg11.avito.ru\r\nimg11.mail.ru\r\nimg12.mail.ru\r\nimg13.avito.ru\r\nimg13.mail.ru\r\nimg14.avito.ru\r\nimg14.mail.ru\r\nimg142.avito.ru\r\nimg165.avito.ru\r\nimg170.avito.ru\r\nimg181.avito.ru\r\nimg2-fotki.yandex.ru\r\nimg2.1tv.ru\r\nimg2.avito.ru\r\nimg2.cs.ixbt.com\r\nimg2.mail.ru\r\nimg2.rosbalt.ru\r\nimg20.avito.ru\r\nimg2081.avito.ru\r\nimg21.mail.ru\r\nimg22.mail.ru\r\nimg23.mail.ru\r\nimg24.mail.ru\r\nimg3-fotki.yandex.ru\r\nimg3.avito.ru\r\nimg3.mail.ru\r\nimg31.mail.ru\r\nimg32.mail.ru\r\nimg33.mail.ru\r\nimg34.mail.ru\r\nimg4-fotki.yandex.ru\r\nimg4.avito.ru\r\nimg4.mail.ru\r\nimg40.avito.ru\r\nimg41.mail.ru\r\nimg42.mail.ru\r\nimg43.avito.ru\r\nimg43.mail.ru\r\nimg44.avito.ru\r\nimg44.mail.ru\r\nimg5-fotki.yandex.ru\r\nimg5.avito.ru\r\nimg51.mail.ru\r\nimg52.mail.ru\r\nimg53.mail.ru\r\nimg54.mail.ru\r\nimg58.avito.ru\r\nimg6-fotki.yandex.ru\r\nimg6.avito.ru\r\nimg61.mail.ru\r\nimg62.mail.ru\r\nimg63.mail.ru\r\nimg64.mail.ru\r\nimg7-fotki.yandex.ru\r\nimg7.avito.ru\r\nimg76.avito.ru\r\nimg8.avito.ru\r\nimg87.avito.ru\r\nimg9.avito.ru\r\nimg91.avito.ru\r\nimg97.avito.ru\r\nimg99.avito.ru\r\nimgif1-img.mail.ru\r\nimgif1-web.mail.ru\r\nimgif1.mail.ru\r\nimgif10-img.mail.ru\r\nimgif10-web.mail.ru\r\nimgif10.mail.ru\r\nimgif11-img.mail.ru\r\nimgif11-web.mail.ru\r\nimgif11.mail.ru\r\nimgif12-img.mail.ru\r\nimgif12-web.mail.ru\r\nimgif12.mail.ru\r\nimgif13-img.mail.ru\r\nimgif13-web.mail.ru\r\nimgif13.mail.ru\r\nimgif14-img.mail.ru\r\nimgif14-web.mail.ru\r\nimgif14.mail.ru\r\nimgif15-img.mail.ru\r\nimgif15-web.mail.ru\r\nimgif15.mail.ru\r\nimgif16-img.mail.ru\r\nimgif16-web.mail.ru\r\nimgif16.mail.ru\r\nimgif17-img.mail.ru\r\nimgif17-web.mail.ru\r\nimgif17.mail.ru\r\nimgif18-img.mail.ru\r\nimgif18-web.mail.ru\r\nimgif18.mail.ru\r\nimgif19-img.mail.ru\r\nimgif19-web.mail.ru\r\nimgif19.mail.ru\r\nimgif2-img.mail.ru\r\nimgif2-web.mail.ru\r\nimgif2.mail.ru\r\nimgif20-img.mail.ru\r\nimgif20-web.mail.ru\r\nimgif20.mail.ru\r\nimgif21-img.mail.ru\r\nimgif21-web.mail.ru\r\nimgif21.mail.ru\r\nimgif22-img.mail.ru\r\nimgif22-web.mail.ru\r\nimgif22.mail.ru\r\nimgif23-img.mail.ru\r\nimgif23-web.mail.ru\r\nimgif23.mail.ru\r\nimgif24-img.mail.ru\r\nimgif24-web.mail.ru\r\nimgif24.mail.ru\r\nimgif25-img.mail.ru\r\nimgif25-web.mail.ru\r\nimgif25.mail.ru\r\nimgif26-img.mail.ru\r\nimgif26-web.mail.ru\r\nimgif26.mail.ru\r\nimgif27-img.mail.ru\r\nimgif27-web.mail.ru\r\nimgif27.mail.ru\r\nimgif28-img.mail.ru\r\nimgif28-web.mail.ru\r\nimgif28.mail.ru\r\nimgif29-img.mail.ru\r\nimgif29-web.mail.ru\r\nimgif29.mail.ru\r\nimgif3-img.mail.ru\r\nimgif3-web.mail.ru\r\nimgif3.mail.ru\r\nimgif30-img.mail.ru\r\nimgif30-web.mail.ru\r\nimgif30.mail.ru\r\nimgif31-img.mail.ru\r\nimgif31-web.mail.ru\r\nimgif31.mail.ru\r\nimgif32-img.mail.ru\r\nimgif32-web.mail.ru\r\nimgif32.mail.ru\r\nimgif33-img.mail.ru\r\nimgif33-web.mail.ru\r\nimgif33.mail.ru\r\nimgif34-img.mail.ru\r\nimgif34-web.mail.ru\r\nimgif34.mail.ru\r\nimgif35-img.mail.ru\r\nimgif35-web.mail.ru\r\nimgif35.mail.ru\r\nimgif36-img.mail.ru\r\nimgif36-web.mail.ru\r\nimgif36.mail.ru\r\nimgif37-img.mail.ru\r\nimgif37-web.mail.ru\r\nimgif37.mail.ru\r\nimgif38-img.mail.ru\r\nimgif38-web.mail.ru\r\nimgif38.mail.ru\r\nimgif39-img.mail.ru\r\nimgif39-web.mail.ru\r\nimgif39.mail.ru\r\nimgif4-img.mail.ru\r\nimgif4-web.mail.ru\r\nimgif4.mail.ru\r\nimgif40-img.mail.ru\r\nimgif40-web.mail.ru\r\nimgif40.mail.ru\r\nimgif41-img.mail.ru\r\nimgif41-web.mail.ru\r\nimgif41.mail.ru\r\nimgif42-img.mail.ru\r\nimgif42-web.mail.ru\r\nimgif42.mail.ru\r\nimgif43-img.mail.ru\r\nimgif43-web.mail.ru\r\nimgif43.mail.ru\r\nimgif44-img.mail.ru\r\nimgif44-web.mail.ru\r\nimgif44.mail.ru\r\nimgif45-img.mail.ru\r\nimgif45-web.mail.ru\r\nimgif45.mail.ru\r\nimgif46-img.mail.ru\r\nimgif46-web.mail.ru\r\nimgif46.mail.ru\r\nimgif47-img.mail.ru\r\nimgif47-web.mail.ru\r\nimgif47.mail.ru\r\nimgif48-img.mail.ru\r\nimgif48-web.mail.ru\r\nimgif48.mail.ru\r\nimgif49-img.mail.ru\r\nimgif49-web.mail.ru\r\nimgif49.mail.ru\r\nimgif5-img.mail.ru\r\nimgif5-web.mail.ru\r\nimgif5.mail.ru\r\nimgif50-img.mail.ru\r\nimgif50-web.mail.ru\r\nimgif50.mail.ru\r\nimgif6-img.mail.ru\r\nimgif6-web.mail.ru\r\nimgif6.mail.ru\r\nimgif7-img.mail.ru\r\nimgif7-web.mail.ru\r\nimgif7.mail.ru\r\nimgif8-img.mail.ru\r\nimgif8-web.mail.ru\r\nimgif8.mail.ru\r\nimgif9-img.mail.ru\r\nimgif9-web.mail.ru\r\nimgif9.mail.ru\r\nimgly.production.scw01.meduza.io\r\nimgly2.production.scw01.meduza.io\r\nimgmisc1-00.yandex.ru\r\nimgmisc2-00.yandex.ru\r\nimgmisc5-00.yandex.ru\r\nimgmisc6-00.yandex.ru\r\nimgmisc7-00.yandex.ru\r\nimgproxy.dev.ya.magnit.ru\r\nimgproxy.uat.ya.magnit.ru\r\nimgs.avito.ru\r\nimgup-lb.avito.ru\r\nimgxx.avito.ru\r\nimhere.avito.ru\r\nimis.avito.ru\r\nimk.avito.ru\r\nimmigration.avito.ru\r\nimmobilien.avito.ru\r\nimmortal.avito.ru\r\nimobiliare.avito.ru\r\nimode.avito.ru\r\nimp.avito.ru\r\nimp.dsp.rambler.ru\r\nimp01.dsp.rambler.ru\r\nimp02.dsp.rambler.ru\r\nimpact.avito.ru\r\nimperia.avito.ru\r\nimperia.mail.ru\r\nimperial.avito.ru\r\nimport-int.tinkoff.ru\r\nimport-wizard.tinkoff.ru\r\nimport.avito.ru\r\nimport.lemanapro.ru\r\nimport.x5.ru\r\nimporter.apteka.ru\r\nimpressionism.lenta.ru\r\nimpro-second.meduza.io\r\nimpro.meduza.io\r\nimpro3-second.meduza.io\r\nimproxy3-00.yandex.ru\r\nimproxy4-00.yandex.ru\r\nimproxy5-00.yandex.ru\r\nimpuls.avito.ru\r\nimpulse.avito.ru\r\nimpulse.vedomosti.ru\r\nimran.avito.ru\r\nims-fns.iac.mchs.ru\r\nims.avito.ru\r\nims1.rzd.ru\r\nims2.rzd.ru\r\nimsc-fe1.beeline.ru\r\nimsc-fe2.beeline.ru\r\nimsc-fe3.beeline.ru\r\nimsc.beeline.ru\r\nimsear.searo.who.int\r\nimsp.worldbank.org\r\nimspiritvks.rosatom.ru\r\nimss.avito.ru\r\nimst.worldbank.org\r\nimt.avito.ru\r\nimt.kommersant.ru\r\nimtub3-00.yandex.ru\r\nimtub5-00.yandex.ru\r\nimvu.avito.ru\r\nimwxsecure.avito.ru\r\nimx1.rambler.ru\r\nimx2.rambler.ru\r\nin-callback.open.ru\r\nin-test-shcherbakova-01.interfax.ru\r\nin-test-shcherbakova-02.interfax.ru\r\nin-test-shcherbakova-03.interfax.ru\r\nin-test-shcherbakova-04.interfax.ru\r\nin-test-squid-01.interfax.ru\r\nin.avito.ru\r\nin.dc.cloud.mts.ru\r\nin.life.ru\r\nin.minenergo.gov.ru\r\nin.open.ru\r\nin.rosbank.ru\r\nin.russianpost.ru\r\nin.sports.ru\r\nina.avito.ru\r\ninb-hearings-video.who.int\r\ninb.avito.ru\r\ninbound.avito.ru\r\ninbox.avito.ru\r\ninbvideo.who.int\r\ninc.avito.ru\r\ninca.avito.ru\r\nincidents.x5.ru\r\nincom.avito.ru\r\nincom.lenta.ru\r\nincoming.avito.ru\r\nincubator.avito.ru\r\nindeed2fapush.alfabank.ru\r\nindependent.avito.ru\r\nindesign.avito.ru\r\nindever-krasnodar.kuban.rbc.ru\r\nindex.avito.ru\r\nindexmedicus.afro.who.int\r\nindi-web130.avito.ru\r\nindi-web130.vk.com\r\nindia.avito.ru\r\nindia.hh.ru\r\nindian.avito.ru\r\nindiana.avito.ru\r\nindicadores.avito.ru\r\nindicators.who.int\r\nindigo.avito.ru\r\nindigoberry.yandex.ru\r\nindira.avito.ru\r\nindonesia.avito.ru\r\nindoor-demo.megafon.ru\r\nindoor-test.yandex.ru\r\nindoor.beeline.ru\r\nindoor.demo.megafon.ru\r\nindoor.pochta.ru\r\nindoor.vimpelcom.ru\r\nindoornew.beeline.ru\r\nindoornew.vimpelcom.ru\r\nindra.avito.ru\r\nindus.avito.ru\r\nindustrial.avito.ru\r\nindustrial.kp.ru\r\nindustry.avito.ru\r\nindustry.garant.ru\r\nindy.avito.ru\r\ninet.avito.ru\r\ninet.yandex.ru\r\ninetlms.duma.gov.ru\r\ninews.avito.ru\r\ninex.avito.ru\r\ninf.avito.ru\r\ninfadev2.worldbank.org\r\ninfadev3.worldbank.org\r\ninfadevsh.worldbank.org\r\ninfamdm.worldbank.org\r\ninfamdmd.worldbank.org\r\ninfamdmdev.worldbank.org\r\ninfamdmp.worldbank.org\r\ninfamdmq.worldbank.org\r\ninfamdmqa.worldbank.org\r\ninfamdms.worldbank.org\r\ninfamdmstg.worldbank.org\r\ninfamdmt.worldbank.org\r\ninfamdmtrn.worldbank.org\r\ninfamdmtst.worldbank.org\r\ninfamm.worldbank.org\r\ninfapc.worldbank.org\r\ninfapcd.worldbank.org\r\ninfapcq.worldbank.org\r\ninfapcs.worldbank.org\r\ninfapct.worldbank.org\r\ninfapmprod.worldbank.org\r\ninfapmstage.worldbank.org\r\ninfapmtest.worldbank.org\r\ninfaprd1.worldbank.org\r\ninfaprd2.worldbank.org\r\ninfaprd3.worldbank.org\r\ninfaprd4.worldbank.org\r\ninfaprd5.worldbank.org\r\ninfaprdwsh.worldbank.org\r\ninfaqawsh.worldbank.org\r\ninfastg1.worldbank.org\r\ninfastg2.worldbank.org\r\ninfastg3.worldbank.org\r\ninfastg4.worldbank.org\r\ninfastgwsh.worldbank.org\r\ninfatest2.worldbank.org\r\ninfatest3.worldbank.org\r\ninfatstwsh.worldbank.org\r\ninferno.avito.ru\r\ninfinite.avito.ru\r\ninfiniti.avito.ru\r\ninfiniti.drom.ru\r\ninfinity.avito.ru\r\ninfm-704-www.k.avito.ru\r\ninfm-732-www.k.avito.ru\r\ninfm-737-www.k.avito.ru\r\ninfm-789-www.k.avito.ru\r\ninfm-793-www.k.avito.ru\r\ninfm-805-www.k.avito.ru\r\ninfm-850-www.k.avito.ru\r\ninfm-878-www.k.avito.ru\r\ninfm-918-www.k.avito.ru\r\ninfm-931-www.k.avito.ru\r\ninfm-948-www.k.avito.ru\r\ninfm.avito.ru\r\ninfo-komanda.mos.ru\r\ninfo.2gis.ru\r\ninfo.2lex.yandex.ru\r\ninfo.apps.sberbank.ru\r\ninfo.avito.ru\r\ninfo.drom.ru\r\ninfo.garant.ru\r\ninfo.gosuslugi.ru\r\ninfo.internet.beeline.ru\r\ninfo.marketolog.mts.ru\r\ninfo.megafon.ru\r\ninfo.mos.ru\r\ninfo.otp.sberbank.ru\r\ninfo.ria.ru\r\ninfo.sber.ru\r\ninfo.sberbank.ru\r\ninfo.tele2.ru\r\ninfo.worldbank.org\r\ninfo1.avito.ru\r\ninfo2.avito.ru\r\ninfoblox-gm.open.ru\r\ninfoblox.open.ru\r\ninfocenter.avito.ru\r\ninfogate.tinkoff.ru\r\ninfographics.gazeta.ru\r\ninfographics.lenta.ru\r\ninfographics.tass.ru\r\ninfohmbo.open.ru\r\ninfomat.gosuslugi.ru\r\ninfomat2.gosuslugi.ru\r\ninfonet.avito.ru\r\ninfor-to-idk-dev.open.ru\r\ninform.avito.ru\r\ninform.megafon.ru\r\ninforma.avito.ru\r\ninformatica.avito.ru\r\ninformatika.avito.ru\r\ninformation.avito.ru\r\ninformer.avito.ru\r\ninformer.gismeteo.ru\r\ninformer.yandex.ru\r\ninfos.avito.ru\r\ninfosec.profi.ru\r\ninfoservice.rshb.ru\r\ninfosys.avito.ru\r\ninfotec.avito.ru\r\ninfotech.avito.ru\r\ninfoweb.avito.ru\r\ninfra-bdo.corp.t2.ru\r\ninfra-demo.minzdrav.gov.ru\r\ninfra-invest.rbc.ru\r\ninfra-test.aws.mvideo.ru\r\ninfra.avito.ru\r\ninfra.mail.ru\r\ninfra.tutu.ru\r\ninfra.ycloud-deploy-practic.yc.mvideo.ru\r\ninfra1.avito.ru\r\ninfra2.avito.ru\r\ninfraforum.rbc.ru\r\ninfrainvest.rbc.ru\r\ning.avito.ru\r\ningenieria.avito.ru\r\ningos.life.ru\r\ningosstrakh.life.ru\r\ningrad-lk-test.mkb.ru\r\ningress.demo.meduza.io\r\ningushetia.dev.home.megafon.ru\r\ninh.tinkoff.ru\r\ninlab.litres.ru\r\ninlove.avito.ru\r\ninmobiliarias.avito.ru\r\ninmx.rambler.ru\r\ninno.avito.ru\r\ninnova.avito.ru\r\ninnovate.avito.ru\r\ninnovation.avito.ru\r\ninnovation.rzd.ru\r\ninnovation.vtb.ru\r\ninnovations.megafon.ru\r\ninnovations.mts.ru\r\ninnovo.avito.ru\r\ninout.avito.ru\r\ninpage.metrica.yandex.ru\r\ninpage.metrika.yandex.ru\r\ninpas-test.mkb.ru\r\ninput.avito.ru\r\ninq.cgu.mchs.ru\r\ninquiries.worldbank.org\r\nins.avito.ru\r\nins0.i.mail.ru\r\nins1.i.mail.ru\r\nins8.mail.ru\r\nins9.mail.ru\r\ninsane.avito.ru\r\ninscription.avito.ru\r\ninsf.sberbank.ru\r\ninsfpsi.sberbank.ru\r\ninsfqa.sberbank.ru\r\ninside.avito.ru\r\ninsider.avito.ru\r\ninsiderdevenvs.test.euronews.com\r\ninsidertestenveventn.test.euronews.com\r\ninsiderwall.test.euronews.com\r\ninsight.avito.ru\r\ninsights-dev.lxp.academy.who.int\r\ninsights-uat.lxp.academy.who.int\r\ninsights.avito.ru\r\ninsite.avito.ru\r\ninsole.wildberries.ru\r\ninsomnia.avito.ru\r\ninspector.gosuslugi.ru\r\ninspiration.avito.ru\r\ninspire.avito.ru\r\ninspire.megafon.ru\r\ninstagram-embed.sports.ru\r\ninstall.avito.ru\r\ninstana.vprok.ru\r\ninstant.avito.ru\r\ninstitutki.kino-teatr.ru\r\ninstore.yc.mvideo.ru\r\ninstyle.avito.ru\r\ninsurance-aa.t2.ru\r\ninsurance.avito.ru\r\ninsurance.mts.ru\r\ninsurance.tele2.ru\r\ninsure.mts.ru\r\nint.api.avito.ru\r\nint.api.max.com\r\nint.avito.ru\r\nint.beeline.ru\r\nint.cloud.mail.ru\r\nint.drive.megafon.ru\r\nint.euronews.com\r\nint.ext.max.com\r\nint.habr.com\r\nint.rambler.ru\r\nint.uspeh.megafon.ru\r\nint.www.max.com\r\nint01e.maps.yandex.ru\r\nint01e.tst.maps.yandex.ru\r\nint01f.maps.yandex.ru\r\nint01h.maps.yandex.ru\r\nint02e.maps.yandex.ru\r\nint02f.maps.yandex.ru\r\nint03e.maps.yandex.ru\r\nint03f.maps.yandex.ru\r\nint03h.maps.yandex.ru\r\nint04e.maps.yandex.ru\r\nint04f.maps.yandex.ru\r\nint04h.maps.yandex.ru\r\nint05e.maps.yandex.ru\r\nint06e.maps.yandex.ru\r\nint06f.maps.yandex.ru\r\nint06h.maps.yandex.ru\r\nint07e.maps.yandex.ru\r\nint07f.maps.yandex.ru\r\nint07h.maps.yandex.ru\r\nint223.zakupki.gov.ru\r\nint44.zakupki.gov.ru\r\nintapi.terminal.yandex.ru\r\nintech-croc.sbud.rshb.ru\r\nintech-var.sbud.rshb.ru\r\nintech.sbud.rshb.ru\r\ninteg.mts.ru\r\nintegra.avito.ru\r\nintegral.avito.ru\r\nintegration.avito.ru\r\nintegration.learning.ozon.ru\r\nintegration.tinkoff.ru\r\nintegration.university.ozon.ru\r\nintegrityrpt.worldbank.org\r\nintegrityrptdev.worldbank.org\r\nintegrityrptqa.worldbank.org\r\nintegrityrptuat.worldbank.org\r\nintel.avito.ru\r\ninter.avito.ru\r\ninteractive-answers.webmaster.yandex.ru\r\ninteractive-answers.yandex.ru\r\ninteractive.avito.ru\r\ninteractive.euronews.com\r\ninteresnaya.sport.mos.ru\r\ninterface.avito.ru\r\ninterfaces.dam.tass.ru\r\ninterior.avito.ru\r\nintermapper.avito.ru\r\nintermuseum.culture.ru\r\nintern-dev.rbc.ru\r\nintern.avito.ru\r\nintern.contest.yandex.ru\r\nintern.tele2.ru\r\ninternal-api-768.culture.ru\r\ninternal-api.e.mail.ru\r\ninternal-banners.second.meduza.io\r\ninternal-eem-dialog-messenger-ift.online.sberbank.ru\r\ninternal-eem-dialog-messenger-psi.online.sberbank.ru\r\ninternal-eem-dialog-messenger.online.sberbank.ru\r\ninternal.avito.ru\r\ninternal.kino-teatr.ru\r\ninternal.listicle.meduza.io\r\ninternal.meduza.io\r\ninternal.ntv.ru\r\ninternal.open.ru\r\ninternal.psi.teamid.sber.ru\r\ninternal.psi.userid.sber.ru\r\ninternal.second.meduza.io\r\ninternal.second2.meduza.io\r\ninternal.second3.meduza.io\r\ninternal.staging.meduza.io\r\ninternal.staging.tr.meduza.io\r\ninternal.third.meduza.io\r\ninternal.yandex.ru\r\ninternalapi.e.mail.ru\r\ninternapoli.avito.ru\r\ninternational.avito.ru\r\ninternational.council.gov.ru\r\ninternet-support.tass.ru\r\ninternet.alfabank.ru\r\ninternet.avito.ru\r\ninternet.beeline.ru\r\ninternet.garant.ru\r\ninternet.mari-el.mts.ru\r\ninternet.mts.ru\r\ninternet.yandex.ru\r\ninternetbankmb.open.ru\r\ninternetmarketing.avito.ru\r\ninternetmetr.yandex.ru\r\ninternetmetre.yandex.ru\r\ninternetometer.yandex.ru\r\ninternetometr.yandex.ru\r\ninternetr-all.avito.ru\r\ninterno.avito.ru\r\ninternship.avito.ru\r\ninternship.mts.ru\r\ninternship.tass.ru\r\nintersignup.rosatom.ru\r\nintertest.avito.ru\r\ninterview-expo.hh.ru\r\ninterview.alfabank.ru\r\nintest.avito.ru\r\nintgit.yandex.ru\r\ninti.avito.ru\r\nintl.avito.ru\r\nintouch.rbc.ru\r\nintpsb1c.psbank.ru\r\nintqscapps.worldbank.org\r\nintqscappsqa.worldbank.org\r\nintra.1tv.ru\r\nintra.avito.ru\r\nintra1.1tv.ru\r\nintracdn.worldbank.org\r\nintranet.avito.ru\r\nintranet.beeline.ru\r\nintranet.citilink.ru\r\nintranet.euro.who.int\r\nintranet.max.com\r\nintranet.rbc.ru\r\nintranet1.avito.ru\r\nintranet2.avito.ru\r\nintraru-preprod.lemanapro.ru\r\nintraru-stage.lemanapro.ru\r\nintraru.lemanapro.ru\r\nintraru3.lemanapro.ru\r\nintrepid.avito.ru\r\nintresources.worldbank.org\r\nintro.avito.ru\r\nintsmtp.worldbank.org\r\nintspservices.worldbank.org\r\nintspservicesdev.worldbank.org\r\nintspservicesqa.worldbank.org\r\nintspservicesstg.worldbank.org\r\nintspservicestst.worldbank.org\r\nintuition.beeline.ru\r\nintupdate.consultant.ru\r\nintupdateusers.consultant.ru\r\ninv.avito.ru\r\ninvb.credit-registry.nalog.ru\r\ninvent.avito.ru\r\ninventario.avito.ru\r\ninventori-dev01f.yandex.ru\r\ninventori-rtb-dev.yandex.ru\r\ninventori-rtb-pre.yandex.ru\r\ninventori-rtb-rc.yandex.ru\r\ninventori-rtb-rc2.yandex.ru\r\ninventori01e.yandex.ru\r\ninventory-dev.yandex.ru\r\ninventory-test.yandex.ru\r\ninventory.app-assistent.open.ru\r\ninventory.avito.ru\r\ninventory.ural.mts.ru\r\ninvest-m.psbank.ru\r\ninvest-m1.psbank.ru\r\ninvest-media.tbank.ru\r\ninvest-rc.yandex.ru\r\ninvest-test.mkb.ru\r\ninvest-w.psbank.ru\r\ninvest.alfabank.ru\r\ninvest.auth.alfabank.ru\r\ninvest.avito.ru\r\ninvest.gosuslugi.ru\r\ninvest.megafon.ru\r\ninvest.mkb.ru\r\ninvest.open.ru\r\ninvest.ozon.ru\r\ninvest.project.tinkoff.ru\r\ninvest.psbank.ru\r\ninvest.rbc.ru\r\ninvest.rshb.ru\r\ninvest.sovcombank.ru\r\ninvest.tomsk.gov.ru\r\ninvest.vtb.ru\r\ninvest.yandex.ru\r\ninvestdemo1.test.gosuslugi.ru\r\ninvestigacion.avito.ru\r\ninvestigationplus.rambler.ru\r\ninvestletter.rbc.ru\r\ninvestment.avito.ru\r\ninvestments.alfabank.ru\r\ninvestments.rbc.ru\r\ninvestor.avito.ru\r\ninvestor.hh.ru\r\ninvestor.online.sberbank.ru\r\ninvestor.sberbank.ru\r\ninvestor.zdorovie-shkolnika.spb.aif.ru\r\ninvestorday.sber.ru\r\ninvestwknd.rbc.ru\r\ninvision.avito.ru\r\ninvite.avito.ru\r\ninvitro.rbc.ru\r\ninvoice-discount.x5.ru\r\ninvoice-test.mkb.ru\r\ninvoice.avito.ru\r\ninvoice.psbank.ru\r\ninvoice.sovcombank.ru\r\ninwan.cea.gov.ru\r\nio.avito.ru\r\niofficetest.beeline.ru\r\nion.avito.ru\r\niops-staging.iarc.who.int\r\niops.iarc.who.int\r\nios-agent-api.e.mail.ru\r\nios-audio-de.litres.ru\r\nios-audio-en.litres.ru\r\nios-audio.litres.ru\r\nios-dev.alfabank.ru\r\nios-ebook-cat2.litres.ru\r\nios-ebook-lv.litres.ru\r\nios-primo.ing.k8s.dev.ivi.ru\r\nios-smoke.ing.k8s.dev.ivi.ru\r\nios-stats.ing.k8s.dev.ivi.ru\r\nios-up1-asbs.online.sberbank.ru\r\nios-up2-asbs.online.sberbank.ru\r\nios-up3-asbs.online.sberbank.ru\r\nios-up4-asbs.online.sberbank.ru\r\nios-up5-asbs.online.sberbank.ru\r\nios-up6-asbs.online.sberbank.ru\r\nios-up7-asbs.online.sberbank.ru\r\nios-upgf-asbs.online.sberbank.ru\r\nios-upsi-asbs.online.sberbank.ru\r\nios-upsi2-asbs.online.sberbank.ru\r\nios.avito.ru\r\nios.ing.k8s.dev.ivi.ru\r\nios.litres.ru\r\nios.tinkoff.ru\r\nios.vacr.vtb.ru\r\nios.zdorovie-shkolnika.spb.aif.ru\r\niosmdm.ift.mdm.sber.ru\r\niot-beta.quasar.yandex.ru\r\niot-index.megafon.ru\r\niot.beeline.ru\r\niot.kino-teatr.ru\r\niot.megafon.ru\r\niot.mts.ru\r\niot.quasar.yandex.ru\r\niot.t2.ru\r\niota.avito.ru\r\niov.megafon.ru\r\niowa.avito.ru\r\nip-109-235-163-12.yandex.ru\r\nip-109-235-163-13.yandex.ru\r\nip-109-235-163-2.yandex.ru\r\nip-109-235-163-21.yandex.ru\r\nip-109-235-163-22.yandex.ru\r\nip-109-235-163-23.yandex.ru\r\nip-109-235-163-24.yandex.ru\r\nip-109-235-163-25.yandex.ru\r\nip-109-235-163-26.yandex.ru\r\nip-109-235-163-27.yandex.ru\r\nip-109-235-163-28.yandex.ru\r\nip-109-235-163-29.yandex.ru\r\nip-109-235-163-3.yandex.ru\r\nip-109-235-163-31.yandex.ru\r\nip-109-235-163-33.yandex.ru\r\nip-109-235-163-34.yandex.ru\r\nip-109-235-163-35.yandex.ru\r\nip-109-235-163-36.yandex.ru\r\nip-109-235-163-37.yandex.ru\r\nip-109-235-163-38.yandex.ru\r\nip-109-235-163-39.yandex.ru\r\nip-109-235-163-4.yandex.ru\r\nip-109-235-163-40.yandex.ru\r\nip-109-235-163-41.yandex.ru\r\nip-109-235-163-42.yandex.ru\r\nip-109-235-163-45.yandex.ru\r\nip-109-235-163-47.yandex.ru\r\nip-109-235-163-49.yandex.ru\r\nip-109-235-163-5.yandex.ru\r\nip-109-235-163-50.yandex.ru\r\nip-109-235-163-51.yandex.ru\r\nip-109-235-163-52.yandex.ru\r\nip-109-235-163-54.yandex.ru\r\nip-109-235-163-55.yandex.ru\r\nip-109-235-163-6.yandex.ru\r\nip-109-235-163-8.yandex.ru\r\nip-109-235-163-9.yandex.ru\r\nip-77-75-158-100.yandex.ru\r\nip-77-75-158-101.yandex.ru\r\nip-77-75-158-102.yandex.ru\r\nip-77-75-158-106.yandex.ru\r\nip-77-75-158-107.yandex.ru\r\nip-77-75-158-108.yandex.ru\r\nip-77-75-158-110.yandex.ru\r\nip-77-75-158-111.yandex.ru\r\nip-77-75-158-112.yandex.ru\r\nip-77-75-158-113.yandex.ru\r\nip-77-75-158-114.yandex.ru\r\nip-77-75-158-117.yandex.ru\r\nip-77-75-158-118.yandex.ru\r\nip-77-75-158-120.yandex.ru\r\nip-77-75-158-122.yandex.ru\r\nip-77-75-158-123.yandex.ru\r\nip-77-75-158-29.yandex.ru\r\nip-77-75-158-68.yandex.ru\r\nip-77-75-158-69.yandex.ru\r\nip-77-75-158-71.yandex.ru\r\nip-77-75-158-72.yandex.ru\r\nip-77-75-158-74.yandex.ru\r\nip-77-75-158-75.yandex.ru\r\nip-77-75-158-76.yandex.ru\r\nip-77-75-158-78.yandex.ru\r\nip-77-75-158-79.yandex.ru\r\nip-77-75-158-80.yandex.ru\r\nip-77-75-158-81.yandex.ru\r\nip-77-75-158-84.yandex.ru\r\nip-77-75-158-85.yandex.ru\r\nip-77-75-158-86.yandex.ru\r\nip-77-75-158-87.yandex.ru\r\nip-77-75-158-88.yandex.ru\r\nip-77-75-158-89.yandex.ru\r\nip-77-75-158-90.yandex.ru\r\nip-77-75-158-92.yandex.ru\r\nip-77-75-158-93.yandex.ru\r\nip-77-75-158-95.yandex.ru\r\nip-77-75-158-97.yandex.ru\r\nip-77-75-158-98.yandex.ru\r\nip-ca.avito.ru\r\nip-hk.avito.ru\r\nip-it.avito.ru\r\nip-lb-vip.garant.ru\r\nip-management.tass.ru\r\nip-uk.avito.ru\r\nip-us.avito.ru\r\nip-usa.avito.ru\r\nip.avito.ru\r\nip.beeline.ru\r\nip.gosuslugi.ru\r\nip.mts.ru\r\nip.nnov.mts.ru\r\nip.nw.mts.ru\r\nip.primorye.mts.ru\r\nip.sib.mts.ru\r\nip.ug.mts.ru\r\nip.ural.mts.ru\r\nip.yandex.ru\r\nip1.avito.ru\r\nip1.esbstage.worldbank.org\r\nip1.plus.tele2.ru\r\nip120-72.avito.ru\r\nip176-194.avito.ru\r\nip2.avito.ru\r\nip2.plus.tele2.ru\r\nip3.avito.ru\r\nip3.plus.tele2.ru\r\nip4.avito.ru\r\nip4.plus.tele2.ru\r\nip5.avito.ru\r\nip6.avito.ru\r\nipa.rg.ru\r\nipac.avito.ru\r\nipaccess.gov.ru\r\nipad.avito.ru\r\nipam.avito.ru\r\nipam.open.ru\r\nipatovo26.gosuslugi.ru\r\nipc.avito.ru\r\nipcacs.sberbank.ru\r\nipcam.avito.ru\r\nipcentrex.beeline.ru\r\nipe.newsletter.euronews.com\r\nipfix01.infra.rbc.ru\r\niphone.avito.ru\r\nipkb.rosatom.ru\r\nipkc.rosatom.ru\r\nipklib.rosatom.ru\r\nipkm.rosatom.ru\r\nipmi.sports.ru\r\nipmonitor.avito.ru\r\nipn.avito.ru\r\nipo.2gis.ru\r\nipo.avito.ru\r\nipod.avito.ru\r\nipolekhin.dev.mk.ru\r\nipolekhin.dev.www.mk.ru\r\niportal.avito.ru\r\nipoteka-online.vtb.ru\r\nipoteka-preprod.open.ru\r\nipoteka.alfabank.ru\r\nipoteka.alphabank.ru\r\nipoteka.avito.ru\r\nipoteka.open.ru\r\nipoteka.vtb.ru\r\nipotekaonline-preprod.open.ru\r\nipotekaonline-test.open.ru\r\nipotekaonline-tst.open.ru\r\nipotekaonline.open.ru\r\nipotekapartner-preprod.open.ru\r\nipotekapartner.open.ru\r\nipp.avito.ru\r\nipphone.avito.ru\r\nipplan.avito.ru\r\nipr.kostroma.gov.ru\r\nipriem.genproc.gov.ru\r\niproxy.avito.ru\r\niproxy1.avito.ru\r\nips-api.rosbank.ru\r\nips-cert-api.rosbank.ru\r\nips-test-api.rosbank.ru\r\nips.avito.ru\r\nips.worldbank.org\r\nipsdev.worldbank.org\r\nipsec.avito.ru\r\nipsle.openapi.rosbank.ru\r\nipsqa.worldbank.org\r\nipsstg.worldbank.org\r\niptv.avito.ru\r\nipv4.avito.ru\r\nipv4.demo.avito.ru\r\nipv4.forum.avito.ru\r\nipv4.internet.yandex.ru\r\nipv4.mail.ru\r\nipv4.pool.avito.ru\r\nipv6.api.direct.yandex.ru\r\nipv6.avito.ru\r\nipv6.internet.yandex.ru\r\nipv6.yandex.ru\r\niq-chat-test.mkb.ru\r\niq-chat.mkb.ru\r\niq.avito.ru\r\niq.otzovik.com\r\niqtest.sovcombank.ru\r\niquik.open.ru\r\nir-test.mkb.ru\r\nir.avito.ru\r\nir.drom.ru\r\nir.mkb.ru\r\nir.open.ru\r\nir.preprod-front.open.ru\r\nir.qa-front.open.ru\r\nir.tele2.ru\r\nir01h.yandex.ru\r\nira.avito.ru\r\niran.avito.ru\r\niraq.avito.ru\r\niraqi.avito.ru\r\nirb.youdo.com\r\nirc.avito.ru\r\nirc.sac.avito.ru\r\nirc.worldbank.org\r\nirc2.avito.ru\r\nircip.avito.ru\r\nirecommendru.irecommend.ru\r\nireland.avito.ru\r\nirene.avito.ru\r\niridium.avito.ru\r\nirina.avito.ru\r\niris.avito.ru\r\niris2.avito.ru\r\nirk.avito.ru\r\nirk.beeline.ru\r\nirk.dev.kp.ru\r\nirk.gov.ru\r\nirk.kp.ru\r\nirkutsk.alfabank.ru\r\nirkutsk.avito.ru\r\nirkutsk.babyblog.ru\r\nirkutsk.beeline.ru\r\nirkutsk.dev.home.megafon.ru\r\nirkutsk.dns-shop.ru\r\nirkutsk.drom.ru\r\nirkutsk.hh.ru\r\nirkutsk.lemanapro.ru\r\nirkutsk.mts.ru\r\nirkutsk.openbank.ru\r\nirkutsk.shop.megafon.ru\r\nirkutsk.tele2.ru\r\nirkutsk.tutu.ru\r\nirm.avito.ru\r\nirm.feedback.rosatom.ru\r\nirm.mts.ru\r\nirm.sberbank.ru\r\niron.avito.ru\r\nironday.api.2gis.ru\r\nironmail1.rzd.ru\r\nironmail2.rzd.ru\r\nironman.avito.ru\r\nironman3.alfabank.ru\r\nironport.avito.ru\r\nironport1.avito.ru\r\nironport2.avito.ru\r\nirving.avito.ru\r\nis-azure-stack-222.azuremsk.cloudapp.ec.mts.ru\r\nis-post.is.rosenergo.gov.ru\r\nis.avito.ru\r\nis.minprom.gov.ru\r\nis.mon.gov.ru\r\nis.profi.ru\r\nis.rossvyaz.gov.ru\r\nisa.avito.ru\r\nisaaa01.i.mail.ru\r\nisaaa02.i.mail.ru\r\nisaac.avito.ru\r\nisabel.avito.ru\r\nisad2.avito.ru\r\nisatap.avito.ru\r\nisatl02.i.mail.ru\r\nisatl03.i.mail.ru\r\nisbank.credit-registry.nalog.ru\r\nisc.avito.ru\r\nisdb01.i.mail.ru\r\nisdb02.i.mail.ru\r\nise-01.infra.tutu.ru\r\nise-02.infra.tutu.ru\r\nise-node07.sberbank.ru\r\nise-node08.sberbank.ru\r\nisearch2.worldbank.org\r\nisearch2dev.worldbank.org\r\nisearch2dr.worldbank.org\r\nisearch2drdev.worldbank.org\r\nisearch2drqa.worldbank.org\r\nisearch2lgcy.worldbank.org\r\nisearch2lgcyqa.worldbank.org\r\nisearch2qa.worldbank.org\r\nisearch2qaload.worldbank.org\r\nisearch2stg.worldbank.org\r\nisearchbeta.worldbank.org\r\nisearchbetadev.worldbank.org\r\nisearchbetaqa.worldbank.org\r\nisearchbetastg.worldbank.org\r\nisearchlgcydev.worldbank.org\r\nisearchlgcyqa.worldbank.org\r\nisee.avito.ru\r\niseg.yandex.ru\r\nisengard.avito.ru\r\niserver.avito.ru\r\niservice.avito.ru\r\nisf.avito.ru\r\nisg.avito.ru\r\nisga.obrnadzor.gov.ru\r\nishilkin.ing.k8s.dev.ivi.ru\r\nishkurko.ing.k8s.dev.ivi.ru\r\nishop.avito.ru\r\nishosting01.i.mail.ru\r\nishosting02.i.mail.ru\r\nisi.avito.ru\r\nisidore.avito.ru\r\nisimulate.worldbank.org\r\nisis.avito.ru\r\nisizov-2.ing.k8s.dev.ivi.ru\r\nisizov.ing.k8s.dev.ivi.ru\r\niskra.garant.ru\r\nisla.yandex.ru\r\nislam.avito.ru\r\nislamic.avito.ru\r\nisland.avito.ru\r\nisle.avito.ru\r\nism.avito.ru\r\nismail.avito.ru\r\nismart.mts.ru\r\nismoduleloaded.kino-teatr.ru\r\nismtp.avito.ru\r\niso.avito.ru\r\niso20022.kb.apim.psbank.ru\r\nisogd.sev.gov.ru\r\nisoline.api.2gis.ru\r\nisp-caledon.cit.avito.ru\r\nisp.avito.ru\r\nisp.yandex.ru\r\nispace.avito.ru\r\nispadmin.avito.ru\r\nispan.worldbank.org\r\nispandev.worldbank.org\r\nispanqa.worldbank.org\r\nispanstg.worldbank.org\r\nispanuat.worldbank.org\r\nisphosts.avito.ru\r\nispkg01.i.mail.ru\r\nisradar01.i.mail.ru\r\nisradar01.mail.ru\r\nisradar02.i.mail.ru\r\nisradar02.mail.ru\r\nisradar03.i.mail.ru\r\nisradar03.mail.ru\r\nisradar04.i.mail.ru\r\nisradar04.mail.ru\r\nisradar05.i.mail.ru\r\nisradar05.mail.ru\r\nisradar06.mail.ru\r\nisradar07.mail.ru\r\nisradar08.mail.ru\r\nisradar09.mail.ru\r\nisradar10.i.mail.ru\r\nisradar10.mail.ru\r\nisradar11.i.mail.ru\r\nisradar12.i.mail.ru\r\nisradar13.i.mail.ru\r\nisradar14.i.mail.ru\r\nisradar15.i.mail.ru\r\nisradar20.i.mail.ru\r\nisradar21.i.mail.ru\r\nisrael.avito.ru\r\niss.avito.ru\r\nissa.amur.mts.ru\r\nissa.avito.ru\r\nissa.buryatia.mts.ru\r\nissa.chita.mts.ru\r\nissa.chukotka.mts.ru\r\nissa.eao.mts.ru\r\nissa.irkutsk.mts.ru\r\nissa.kamchatka.mts.ru\r\nissa.khv.mts.ru\r\nissa.magadan.mts.ru\r\nissa.primorye.mts.ru\r\nissa.sakh.mts.ru\r\nissa.sakha.mts.ru\r\nissa.sib.mts.ru\r\nissam.avito.ru\r\nisso.mts.ru\r\nisstatd-st01.i.mail.ru\r\nisstatd-st02.i.mail.ru\r\nisstatd-st03.i.mail.ru\r\nisstatd-st04.i.mail.ru\r\nisstatd-st05.i.mail.ru\r\nisstatd01.i.mail.ru\r\nissue.avito.ru\r\nissues.avito.ru\r\nist.avito.ru\r\nistanbul.74.yandex.ru\r\nistanbul.avito.ru\r\nistest.z38.zoon.ru\r\nistp-1.gosuslugi.ru\r\nistra.lemanapro.ru\r\nistream101-external-01-echd.mos.ru\r\nistream101-external-02-echd.mos.ru\r\nistreblenie.aif.ru\r\nistun.avito.ru\r\nisu.sber.ru\r\nisu.sberbank.ru\r\nisup.economy.gov.ru\r\nisup.minzdrav.gov.ru\r\nisuprid.rosatom.ru\r\nisv.avito.ru\r\nisvh01.i.mail.ru\r\nisvh03.i.mail.ru\r\nisvh04.i.mail.ru\r\nisvh05.i.mail.ru\r\nit-tian.ru.2.yandex.ru\r\nit-tian.ru.3.yandex.ru\r\nit.ac.mos.ru\r\nit.avito.ru\r\nit.euronews.com\r\nit.hh.ru\r\nit.mail.ru\r\nit.rutube.ru\r\nit1.avito.ru\r\nita.avito.ru\r\nitadmin.avito.ru\r\nitalia.avito.ru\r\nitalia.tass.ru\r\nitaly.avito.ru\r\nitaly.babyblog.ru\r\nitassistant.t2.ru\r\nitc.avito.ru\r\nitc.fas.gov.ru\r\nitcenter.avito.ru\r\nitchy.avito.ru\r\nitd.avito.ru\r\nite.avito.ru\r\nitec.avito.ru\r\nitech.avito.ru\r\nitem-523-www.k.avito.ru\r\nitem.avito.ru\r\nitems-advert.s1.citilink.ru\r\nitems-attachments.s1.citilink.ru\r\nitems-certificates.s1.citilink.ru\r\nitems.s1.citilink.ru\r\nitems.s2.citilink.ru\r\nitest.avito.ru\r\nithelp.avito.ru\r\nithelp.beeline.ru\r\niti.avito.ru\r\nitm.avito.ru\r\nitmkb-test.mkb.ru\r\nitnet.avito.ru\r\nito.avito.ru\r\nitogi.rzd.ru\r\nitogi2019.vtb.ru\r\nitogi2020.vtb.ru\r\nitogi2021.iz.ru\r\nitp.avito.ru\r\nitp.ssp.rambler.ru\r\nitraveler.tele2.ru\r\nits-spb.demo.megafon.ru\r\nits.avito.ru\r\nits.itsm.mos.ru\r\nitservicedesk.avito.ru\r\nitservices.avito.ru\r\nitsm.avito.ru\r\nitsoparchservices.worldbank.org\r\nitsupport.avito.ru\r\nittn.mail.ru\r\nitunes.avito.ru\r\nitv.1tv.ru\r\nitv.avito.ru\r\nitv.mts.ru\r\nitv.zdorovie-shkolnika.spb.aif.ru\r\nitw.worldbank.org\r\nitwdev.worldbank.org\r\nitwqa.worldbank.org\r\niu-upch.sakha.gov.ru\r\niu-upkm.sakha.gov.ru\r\niu-uppr.sakha.gov.ru\r\niu-upzp.sakha.gov.ru\r\nius.avito.ru\r\niutnb.avito.ru\r\niv.dev.home.megafon.ru\r\niv.garant.ru\r\niv.kommersant.ru\r\niv.shop.megafon.ru\r\niv2.garant.ru\r\niva-fsp01-fs02.ld.yandex.ru\r\niva-rzd.css.rzd.ru\r\niva-vks-2.css.rzd.ru\r\niva-vks-3.css.rzd.ru\r\niva-vks.css.rzd.ru\r\niva.avito.ru\r\niva.open.ru\r\nivan.avito.ru\r\nivanov.5er3zhenk4.yandex.ru\r\nivanovcode.dev.arh.mk.ru\r\nivanovcode.dev.ast.mk.ru\r\nivanovcode.dev.baikal.mk.ru\r\nivanovcode.dev.belgorod.mk.ru\r\nivanovcode.dev.blag.mk.ru\r\nivanovcode.dev.chel.mk.ru\r\nivanovcode.dev.crimea.mk.ru\r\nivanovcode.dev.kavkaz.mk.ru\r\nivanovcode.dev.orel.mk.ru\r\nivanovcode.dev.tv.mk.ru\r\nivanovcode.dev.vlad.mk.ru\r\nivanovcode.dev.volg.mk.ru\r\nivanovcode.dev.vologda.mk.ru\r\nivanovcode.dev.vrn.mk.ru\r\nivanovcode.dev.www.mk.ru\r\nivanovo.avito.ru\r\nivanovo.babyblog.ru\r\nivanovo.beeline.ru\r\nivanovo.dev.kp.ru\r\nivanovo.lemanapro.ru\r\nivanovo.mk.ru\r\nivanovo.mts.ru\r\nivanovo.shop.tele2.ru\r\nivanow.1c.yandex.ru\r\nivaschenko.nizamov.6.yandex.ru\r\nivat.open.ru\r\nivavks.rosatom.ru\r\nivent.yandex.ru\r\nivents.yandex.ru\r\niview.avito.ru\r\nivn.beeline.ru\r\nivo.garant.ru\r\nivory.avito.ru\r\nivoryberry.yandex.ru\r\nivr.avito.ru\r\nivy.avito.ru\r\niw.avito.ru\r\niw.tinkoff.ru\r\niw1.esbstage.worldbank.org\r\niwdevrp.worldbank.org\r\niweb.avito.ru\r\niwqarp.worldbank.org\r\niwrp.worldbank.org\r\niws.avito.ru\r\niwstgrp.worldbank.org\r\niwtstrp.worldbank.org\r\niwuatrp.worldbank.org\r\niwww.avito.ru\r\nix.net.ixbt.com\r\nix.otzovik.com\r\nixb.net.ixbt.com\r\nixbt-stage.ixbt.com\r\nixbt.net.ixbt.com\r\nixbtwire.net.ixbt.com\r\nixhash.avito.ru\r\nixion.avito.ru\r\niy.kommersant.ru\r\nizbircom.tomsk.gov.ru\r\nizdatel.pochta.ru\r\nizdatel.russianpost.ru\r\nizh.dev.kp.ru\r\nizh.drom.ru\r\nizh.kp.ru\r\nizhevsk.aif.ru\r\nizhevsk.avito.ru\r\nizhevsk.beeline.ru\r\nizhevsk.drom.ru\r\nizhevsk.lemanapro.ru\r\nizhevsk.mk.ru\r\nizhevsk.mts.ru\r\nizhevsk.tele2.ru\r\nizk.beeline.ru\r\nizo.t2.ru\r\nizo.tele2.ru\r\nizobilniy.home.megafon.ru\r\nizor.sakha.gov.ru\r\nizvestia105.iz.ru\r\nj-core.ec.mts.ru\r\nj-mx240.m10.rambler.ru\r\nj.avito.ru\r\nj.life.ru\r\nj.tbank.ru\r\nj.tinkoff.ru\r\nj1.avito.ru\r\nj2.avito.ru\r\nja.avito.ru\r\nja.invest.khv.gov.ru\r\njabba.avito.ru\r\njabber.avito.ru\r\njack.avito.ru\r\njackass.avito.ru\r\njackpot.avito.ru\r\njackson.avito.ru\r\njacksonville.avito.ru\r\njacob.avito.ru\r\njade.avito.ru\r\njaeger-collector.sandbox.sandbox.ya.tp.mvideo.ru\r\njaeger-collector.web.nft.ya.tp.mvideo.ru\r\njaeger-collector.web.nft3.ya.tp.mvideo.ru\r\njaeger-collector.web.prod.ya.tp.mvideo.ru\r\njaeger-collector.web.production-pilot.ya.tp.mvideo.ru\r\njaeger.pnp.cs-aws.mvideo.ru\r\njaeger.test.cs-aws.mvideo.ru\r\njaffa.mail.ru\r\njaguar.avito.ru\r\njaguarxf.rbc.ru\r\njaime.avito.ru\r\njain.avito.ru\r\njak.avito.ru\r\njaka.avito.ru\r\njakarta.avito.ru\r\njakarta.web-staging.2gis.ru\r\njake.avito.ru\r\njakutsk.sakha.gov.ru\r\njalal.avito.ru\r\njam.avito.ru\r\njamal.avito.ru\r\njambo.avito.ru\r\njames.avito.ru\r\njames.zdorovie-shkolnika.spb.aif.ru\r\njamf.tass.ru\r\njamie.avito.ru\r\njams-srv01f.maps.yandex.ru\r\njams-srv02f.maps.yandex.ru\r\njams-srv03f.maps.yandex.ru\r\njams-srv04f.maps.yandex.ru\r\njams1.mail.ru\r\njamsgen01e.tst.maps.yandex.ru\r\njamsgen01h.maps.yandex.ru\r\njamsgen01h.tst.maps.yandex.ru\r\njana.avito.ru\r\njane.avito.ru\r\njaney.avito.ru\r\njang.avito.ru\r\njang3572.avito.ru\r\njanus.avito.ru\r\njanus1-cp.rosatom.ru\r\njanus2-cp.rosatom.ru\r\njapan.avito.ru\r\njapan.tass.ru\r\njapan.vedomosti.ru\r\njapanese.avito.ru\r\njardin-greenfield.rbc.ru\r\njas.avito.ru\r\njasmin.avito.ru\r\njason.avito.ru\r\njason1.avito.ru\r\njasper.avito.ru\r\njasper.reports.rostelecom.ru\r\njava.avito.ru\r\njavaapp.worldbank.org\r\njavascript.avito.ru\r\njavier.avito.ru\r\njay.avito.ru\r\njazz-beta.sber.ru\r\njazz-dev.sber.ru\r\njazz.avito.ru\r\njazz.sber.ru\r\njazz.sberbank.ru\r\njb.avito.ru\r\njbc.avito.ru\r\njc.avito.ru\r\njc.film.ru\r\njcc.avito.ru\r\njd.avito.ru\r\njd.mail.ru\r\nje.avito.ru\r\njean.avito.ru\r\njedi-any.yandex.ru\r\njedi.avito.ru\r\njedi.yandex.ru\r\njeep.avito.ru\r\njeff.avito.ru\r\njefferson.avito.ru\r\njeka.wildberries.ru\r\njelly.avito.ru\r\njellyfish.avito.ru\r\njen.avito.ru\r\njenkins.avito.ru\r\njenkins.qart.yandex.ru\r\njenkins.srv.hub.litres.ru\r\njenkins.srv.litres.ru\r\njenkins24718.mk.ru\r\njennifer.avito.ru\r\njenny.avito.ru\r\njere.mail.ru\r\njeremy.avito.ru\r\njericho.avito.ru\r\njerome.avito.ru\r\njerry.avito.ru\r\njersey.avito.ru\r\njess.avito.ru\r\njesse.avito.ru\r\njessica.avito.ru\r\njessie.avito.ru\r\njester.avito.ru\r\njesus.avito.ru\r\njet.avito.ru\r\njeu.avito.ru\r\njeux.avito.ru\r\njewel.avito.ru\r\njewelry.avito.ru\r\njf.avito.ru\r\njfahrsswww.kino-teatr.ru\r\njg.avito.ru\r\njgdw.avito.ru\r\njgr.meduza.io\r\njgxy.avito.ru\r\njh.avito.ru\r\njhbe0ckh-rlp.ops.beeline.ru\r\njiaowu.avito.ru\r\njigsaw.avito.ru\r\njim.avito.ru\r\njim.tinkoff.ru\r\njim10.mail.ru\r\njim11.mail.ru\r\njim12.i.mail.ru\r\njim12.mail.ru\r\njim13.i.mail.ru\r\njim13.mail.ru\r\njim14.mail.ru\r\njim15.mail.ru\r\njim16.mail.ru\r\njim17.mail.ru\r\njim18.mail.ru\r\njim19.mail.ru\r\njim20.mail.ru\r\njim21.mail.ru\r\njim22.mail.ru\r\njim23.mail.ru\r\njim24.mail.ru\r\njim25.mail.ru\r\njim26.mail.ru\r\njim27.mail.ru\r\njim28.mail.ru\r\njim29.mail.ru\r\njim30.mail.ru\r\njim31.mail.ru\r\njim32.mail.ru\r\njim33.mail.ru\r\njim34.mail.ru\r\njim35.mail.ru\r\njim36.mail.ru\r\njim37.mail.ru\r\njim38.mail.ru\r\njim39.mail.ru\r\njim40.mail.ru\r\njim41.mail.ru\r\njim42.mail.ru\r\njim43.mail.ru\r\njim44.mail.ru\r\njim45.mail.ru\r\njim46.mail.ru\r\njim47.mail.ru\r\njim48.mail.ru\r\njim49.mail.ru\r\njim5.mail.ru\r\njim50.i.mail.ru\r\njim50.mail.ru\r\njim51.i.mail.ru\r\njim51.mail.ru\r\njim52.i.mail.ru\r\njim6.mail.ru\r\njim7.mail.ru\r\njim8.mail.ru\r\njim9.mail.ru\r\njimbo.avito.ru\r\njiml.mail.ru\r\njiml1.mail.ru\r\njiml2.mail.ru\r\njiml3.mail.ru\r\njiml4.mail.ru\r\njimltest1.i.mail.ru\r\njimmy.avito.ru\r\njimo.avito.ru\r\njimtest1.i.mail.ru\r\njimtest1.mail.ru\r\njimtest2.i.mail.ru\r\njimtest3.i.mail.ru\r\njin.avito.ru\r\njing.avito.ru\r\njing01e.cs-minitools01e.yandex.ru\r\njing01f.cs-minitools01f.yandex.ru\r\njing01h.cs-minitools01h.yandex.ru\r\njing01ht.cs-minitools01ht.yandex.ru\r\njinx.avito.ru\r\njios.sports.ru\r\njira.2gis.ru\r\njira.alfabank.ru\r\njira.avito.ru\r\njira.babyblog.ru\r\njira.citilink.ru\r\njira.gkh.hab.aif.ru\r\njira.hh.ru\r\njira.iarc.who.int\r\njira.mail.ru\r\njira.mts.ru\r\njira.net.ixbt.com\r\njira.rbc.ru\r\njira.rnd.consultant.ru\r\njira.support.avito.ru\r\njira.tele2.ru\r\njira02.rbc.ru\r\njiraext.mts.ru\r\njirasandbox.mkb.ru\r\njitsi.infra.rbc.ru\r\njitsi.mkb.ru\r\njitsi.msk.rzd.ru\r\njitsi.rbc.ru\r\njitsu.ixbt.com\r\njitsu.net.ixbt.com\r\njitsustat-old.net.ixbt.com\r\njitsustat.net.ixbt.com\r\njitsustat202307.net.ixbt.com\r\njiuye.avito.ru\r\njive.avito.ru\r\njiwei.avito.ru\r\njj-cat4900-gw.avito.ru\r\njj.avito.ru\r\njjc.avito.ru\r\njk.avito.ru\r\njku.sakha.gov.ru\r\njl.avito.ru\r\njm.avito.ru\r\njmptest1.mail.ru\r\njms.avito.ru\r\njnp.avito.ru\r\njns.avito.ru\r\njoan.avito.ru\r\njoanna.avito.ru\r\njob-qa.2gis.ru\r\njob-test.beeline.ru\r\njob.2gis.ru\r\njob.alfabank.ru\r\njob.avito.ru\r\njob.beeline.ru\r\njob.cloud.mts.ru\r\njob.eldorado.ru\r\njob.garant.ru\r\njob.megafon.ru\r\njob.mts.ru\r\njob.ozon.ru\r\njob.psbank.ru\r\njob.sberbank.ru\r\njob.yandex.ru\r\njob.youdo.com\r\njoboffers.euronews.com\r\njobs.avito.ru\r\njobs.euronews.com\r\njobs.projects.avito.ru\r\njobs.yandex.ru\r\njobsearch.avito.ru\r\njobtst.psbank.ru\r\njocuri.avito.ru\r\njoe.avito.ru\r\njoel.avito.ru\r\njoey.avito.ru\r\njohn.4volta.yandex.ru\r\njohn.avito.ru\r\njohn.smith.17.yandex.ru\r\njohn2004.11.yandex.ru\r\njohnny.avito.ru\r\njoin-inet.sber.ru\r\njoin.avito.ru\r\njoin.cea.gov.ru\r\njoin.magnit.ru\r\njoin.megafon.ru\r\njoin.mts.ru\r\njoin.rshb.ru\r\njoin.sber.ru\r\njoin.sberbank.ru\r\njoin2.avito.ru\r\njointeam.2gis.ru\r\njoinus.avito.ru\r\njojo.avito.ru\r\njoke.avito.ru\r\njoker.avito.ru\r\njokes.avito.ru\r\njoko.avito.ru\r\njolly.avito.ru\r\njon.avito.ru\r\njonas.avito.ru\r\njonathan.avito.ru\r\njoom.avito.ru\r\njoomla.avito.ru\r\njoomla25.avito.ru\r\njordan.avito.ru\r\njorge.avito.ru\r\njose.avito.ru\r\njoseph.avito.ru\r\njosh.avito.ru\r\njoshi.avito.ru\r\njoshua.avito.ru\r\njournal.avito.ru\r\njournal.beeline.ru\r\njournal.citilink.ru\r\njournal.litres.ru\r\njournal.tbank.ru\r\njournal.tinkoff.ru\r\njournals.avito.ru\r\njoy.avito.ru\r\njoyce.avito.ru\r\njp.avito.ru\r\njpadult.avito.ru\r\njpk.avito.ru\r\njpkc.avito.ru\r\njpm-prod.tinkoff.ru\r\njpm-test.tinkoff.ru\r\njpn.avito.ru\r\njquery.avito.ru\r\njr.avito.ru\r\njs.avito.ru\r\njs.hindi.avito.ru\r\njs.kino-teatr.ru\r\njs1.avito.ru\r\njs2-00.yandex.ru\r\njsch.roseltorg.ru\r\njsd.beeline.ru\r\njsd.ec.mts.ru\r\njsgames.mail.ru\r\njsj.avito.ru\r\njsm.market.yandex.ru\r\njson.alfabank.ru\r\njson.avito.ru\r\njsp.avito.ru\r\njspsinatest.litres.ru\r\njss.avito.ru\r\njss.corp.mail.ru\r\njsts.rosatom.ru\r\njsvpcinc-rlp.ops.beeline.ru\r\njt.avito.ru\r\njuan.avito.ru\r\njudas.avito.ru\r\njudge.dit.mos.ru\r\njudge.esports.mail.ru\r\njudge.mail.ru\r\njudith.avito.ru\r\njudo.avito.ru\r\njudy.avito.ru\r\njuegos.avito.ru\r\njugger.mail.ru\r\njuggermobile.mail.ru\r\njuggernaut-iva.yandex.ru\r\njuh.afisha.ru\r\njuice.avito.ru\r\njules.avito.ru\r\njuli.avito.ru\r\njulia.avito.ru\r\njuliak.89.yandex.ru\r\njulian.avito.ru\r\njulie.avito.ru\r\njuliet.avito.ru\r\njulio.avito.ru\r\njulius.avito.ru\r\njulliet.avito.ru\r\njumbo.avito.ru\r\njump.avito.ru\r\njumper-dav.film.ru\r\njumper.film.ru\r\njun.avito.ru\r\njune.avito.ru\r\njungle.avito.ru\r\njunior.avito.ru\r\njuniper.avito.ru\r\njunk.avito.ru\r\njuno.avito.ru\r\njunspace.mail.ru\r\njupiter.avito.ru\r\njupyter-img.z38.zoon.ru\r\njupyter-is.z38.zoon.ru\r\njupyter.avito.ru\r\njupyter.cgu.mchs.ru\r\njupyter.dev.cgu.iac.mchs.ru\r\njupyter.rs.premier.one\r\njupyter.rs2.premier.one\r\njura-gw1.avito.ru\r\njura.avito.ru\r\njuridico.avito.ru\r\njurnal.avito.ru\r\njury.avito.ru\r\njust.avito.ru\r\njust4fun.avito.ru\r\njustice.avito.ru\r\njustin.avito.ru\r\njustme.avito.ru\r\njustmoosepc.yandex.ru\r\njustmoosepc64.yandex.ru\r\njuventus.avito.ru\r\njv.avito.ru\r\njw.avito.ru\r\njwc.avito.ru\r\njweb.avito.ru\r\njwgl.avito.ru\r\njwplayer.tass.ru\r\njwxt.avito.ru\r\njwy58.mail.ru\r\njx.avito.ru\r\njxc4xsdcgc.zakon.ru\r\njxcg.avito.ru\r\njxjy.avito.ru\r\njy.avito.ru\r\njz.avito.ru\r\nk-ipsec01.infra.rbc.ru\r\nk-okey.rosbank.ru\r\nk.a.72.yandex.ru\r\nk.avito.ru\r\nk00.openbank.ru\r\nk1.avito.ru\r\nk2.avito.ru\r\nk2crypto.open.ru\r\nk3-chat.vtb.ru\r\nk4-chat.vtb.ru\r\nk5-chat.vtb.ru\r\nk8.garant.ru\r\nk8s-3d92bba13af71c.ml.kz.cloud.vk.com\r\nk8s-ext-envoy.lb.tinkoff.ru\r\nk8s-mn.ds.t2.ru\r\nk8s-qa-nginx-01.sports.ru.sports.ru\r\nk8s-test.ds.t2.ru\r\nk8s-u.ds.t2.ru\r\nk8s.avito.ru\r\nk8s.cyber.sports.ru\r\nk8s.lb.tinkoff.ru\r\nk8s.mirtv.ru\r\nk8s.mm.t2.ru\r\nk8s.mvideo.ru\r\nk8s.mvno.t2.ru\r\nk8s.ntv.ru\r\nk8s.rg.ru\r\nk8s.sports.ru\r\nka-lex.9111.ru\r\nka-lex.test2.9111.ru\r\nka.avito.ru\r\nka.megafon.ru\r\nka.vtb.ru\r\nkabakovy-exhibits.tass.ru\r\nkabakovy-exponaty.tass.ru\r\nkabakovy.tass.ru\r\nkabinet.altai.mts.ru\r\nkabinet.barnaul.mts.ru\r\nkabinet.kemerovo.mts.ru\r\nkabinet.mts.ru\r\nkabinet.norilsk.mts.ru\r\nkabinet.nsk.mts.ru\r\nkabinet.omsk.mts.ru\r\nkabinet.tula.mts.ru\r\nkabinet.vtb.ru\r\nkabuto.yandex.ru\r\nkabuto01.rbc.ru\r\nkadastrdon.161.yandex.ru\r\nkadr.garant.ru\r\nkadrovik.garant.ru\r\nkadry.review-k8s.aif.ru\r\nkadry.sakha.gov.ru\r\nkafanasev.ing.k8s.dev.ivi.ru\r\nkafka01.mchs.ru\r\nkagami.avito.ru\r\nkage.avito.ru\r\nkage.yandex.ru\r\nkagoshima.avito.ru\r\nkai.avito.ru\r\nkain.avito.ru\r\nkairos.avito.ru\r\nkaiser.avito.ru\r\nkaito.avito.ru\r\nkaitori.avito.ru\r\nkaiyi.drom.ru\r\nkaizen.avito.ru\r\nkaka.avito.ru\r\nkakdela.hh.ru\r\nkakpravilno.life.ru\r\nkaku.avito.ru\r\nkala.avito.ru\r\nkalendarz.avito.ru\r\nkalender.avito.ru\r\nkali.avito.ru\r\nkalikino.drom.ru\r\nkalina.mail.ru\r\nkalinin.andrew.85.yandex.ru\r\nkaliningrad.aif.ru\r\nkaliningrad.alfabank.ru\r\nkaliningrad.avito.ru\r\nkaliningrad.babyblog.ru\r\nkaliningrad.beeline.ru\r\nkaliningrad.dev.kp.ru\r\nkaliningrad.hh.ru\r\nkaliningrad.home.megafon.ru\r\nkaliningrad.kp.ru\r\nkaliningrad.lemanapro.ru\r\nkaliningrad.mts.ru\r\nkaliningrad.rbc.ru\r\nkaliningrad.shop.megafon.ru\r\nkaliningrad.tass.ru\r\nkaliningrad.tele2.ru\r\nkalitva.home.megafon.ru\r\nkalmykia.dev.home.megafon.ru\r\nkalmykia.shop.megafon.ru\r\nkaltura.avito.ru\r\nkaluga.2gis.ru\r\nkaluga.aif.ru\r\nkaluga.avito.ru\r\nkaluga.beeline.ru\r\nkaluga.dns-shop.ru\r\nkaluga.drom.ru\r\nkaluga.fas.gov.ru\r\nkaluga.hh.ru\r\nkaluga.kp.ru\r\nkaluga.lemanapro.ru\r\nkaluga.mts.ru\r\nkaluga.tass.ru\r\nkaluga.tele2.ru\r\nkaluga.tutu.ru\r\nkam.beeline.ru\r\nkamchatka.dev.home.megafon.ru\r\nkamchatka.gov.ru\r\nkamchatka.kp.ru\r\nkamchatka.mts.ru\r\nkamchatka.shop.megafon.ru\r\nkamchatka.tele2.ru\r\nkamchatka2021.life.ru\r\nkamel.avito.ru\r\nkamennaobi.babyblog.ru\r\nkamenolomnya.hh.ru\r\nkamenrai.gosuslugi.ru\r\nkamensk-uralskiy.dns-shop.ru\r\nkamera.avito.ru\r\nkami.avito.ru\r\nkamikaze.avito.ru\r\nkamil.avito.ru\r\nkamkombank.credit-registry.nalog.ru\r\nkamrayon.gosuslugi.ru\r\nkamyshin.drom.ru\r\nkan.avito.ru\r\nkana.avito.ru\r\nkanash.home.megafon.ru\r\nkandidat.lenta.ru\r\nkane.avito.ru\r\nkanet.2016.yandex.ru\r\nkang.avito.ru\r\nkangaroo.avito.ru\r\nkani.avito.ru\r\nkani.yandex.ru\r\nkanji.avito.ru\r\nkannskiy.kinofestivali.tass.ru\r\nkanri.avito.ru\r\nkansas.avito.ru\r\nkansascity.avito.ru\r\nkant.tinkoff.ru\r\nkanto.avito.ru\r\nkap.vtb.ru\r\nkapital.avito.ru\r\nkapitsa.vtb.ru\r\nkappa.avito.ru\r\nkappa.k.avito.ru\r\nkappa.mail.ru\r\nkappa.yandex.ru\r\nkar.avito.ru\r\nkaraoke.avito.ru\r\nkaraoke.beeline.ru\r\nkaraoke.t2.ru\r\nkaraoke.tele2.ru\r\nkarate.avito.ru\r\nkarelia.aif.ru\r\nkarelia.dev.home.megafon.ru\r\nkarelia.fas.gov.ru\r\nkarelia.mts.ru\r\nkarelia.rbc.ru\r\nkarelia.shop.megafon.ru\r\nkarelia.tele2.ru\r\nkaren.avito.ru\r\nkaren.zdorovie-shkolnika.spb.aif.ru\r\nkargadm.tomsk.gov.ru\r\nkargasok.social.tomsk.gov.ru\r\nkari.avito.ru\r\nkarim.avito.ru\r\nkarin.avito.ru\r\nkarina.avito.ru\r\nkarma.avito.ru\r\nkarma.cs.cs.cs-aws.mvideo.ru\r\nkarma.rbc.ru\r\nkarma.test.cs-aws.mvideo.ru\r\nkaro.avito.ru\r\nkarriere.avito.ru\r\nkart.avito.ru\r\nkarta-moskvicha.mos.ru\r\nkarta.avito.ru\r\nkarta.magnit.ru\r\nkarta.sakha.gov.ru\r\nkarta.tele2.ru\r\nkartaskidok.unicreditbank.ru\r\nkarti.yandex.ru\r\nkas.avito.ru\r\nkas2-grpc.consultant.ru\r\nkashira.hh.ru\r\nkasibm.edu.gov.ru\r\nkasimov.tass.ru\r\nkaskad.52.yandex.ru\r\nkasko.sberbank.ru\r\nkasko.vtb.ru\r\nkasper.avito.ru\r\nkaspersky.avito.ru\r\nkaspersky.vedomosti.ru\r\nkassa.alfabank.ru\r\nkassa.avito.ru\r\nkassa.beeline.ru\r\nkassa.megafon.ru\r\nkassa.mts.ru\r\nkassa.rambler.ru\r\nkassa.yandex.ru\r\nkastromgate.rosbank.ru\r\nkat.avito.ru\r\nkatalog.avito.ru\r\nkatana.avito.ru\r\nkatay.tele2.ru\r\nkateclapp.tinkoff.ru\r\nkath.avito.ru\r\nkato.avito.ru\r\nkatowice.avito.ru\r\nkatrina.avito.ru\r\nkaty.avito.ru\r\nkav-m.alfabank.ru\r\nkav.avito.ru\r\nkavalerovskij-r25.gosweb.gosuslugi.ru\r\nkavkaz.b2blk.megafon.ru\r\nkavkaz.mk.ru\r\nkavkaz.rbc.ru\r\nkavkaz.spec.tass.ru\r\nkawagoe.avito.ru\r\nkawaii.avito.ru\r\nkawaji.avito.ru\r\nkayako.avito.ru\r\nkazahstan.babyblog.ru\r\nkazakhstan.alfabank.ru\r\nkazan-tatarstan.beeline.ru\r\nkazan.aif.ru\r\nkazan.alfabank.ru\r\nkazan.avito.ru\r\nkazan.babyblog.ru\r\nkazan.beeline.ru\r\nkazan.dev.kp.ru\r\nkazan.dns-shop.ru\r\nkazan.drom.ru\r\nkazan.hh.ru\r\nkazan.kommersant.ru\r\nkazan.kp.ru\r\nkazan.lemanapro.ru\r\nkazan.tele2.ru\r\nkazan.tutu.ru\r\nkazan.www.babyblog.ru\r\nkazban3.0.yandex.ru\r\nkazimir.9111.ru\r\nkb.avito.ru\r\nkbhmb.credit-registry.nalog.ru\r\nkbox.avito.ru\r\nkbr.megafon.ru\r\nkbr.mk.ru\r\nkbr.mts.ru\r\nkbr.shop.megafon.ru\r\nkbranch.k.avito.ru\r\nkbsammit.credit-registry.nalog.ru\r\nkbsh-cggw-01.kbsh.rzd.ru\r\nkbsh-cggw-02.kbsh.rzd.ru\r\nkbsh.rzd.ru\r\nkc-auth-dev.rutube.ru\r\nkc.avito.ru\r\nkcc.avito.ru\r\nkcellread.litres.ru\r\nkcg.rosbank.ru\r\nkchr.dev.home.megafon.ru\r\nkchr.gov.ru\r\nkchr.mts.ru\r\nkchr.shop.megafon.ru\r\nkchs.tomsk.gov.ru\r\nkcot.27102016.yandex.ru\r\nkcp.worldbank.org\r\nkcsoale.social.tomsk.gov.ru\r\nkcsotm7.social.tomsk.gov.ru\r\nkd.avito.ru\r\nkd.mts.ru\r\nkdc.avito.ru\r\nkdelu.vtb.ru\r\nkdp.mk.ru\r\nkds.avito.ru\r\nke.avito.ru\r\nkea.avito.ru\r\nkebab.mail.ru\r\nkedr.mts.ru\r\nkedradm.gosuslugi.ru\r\nkedradm.tomsk.gov.ru\r\nkedrovyi.social.tomsk.gov.ru\r\nkeel-new.scw01.meduza.io\r\nkeel-old.scw01.meduza.io\r\nkeel.scw01.meduza.io\r\nkeenwilling.rambler.ru\r\nkeeper.avito.ru\r\nkefir.lady.mail.ru\r\nkei.avito.ru\r\nkeira.avito.ru\r\nkeitai.avito.ru\r\nkeith.avito.ru\r\nkeithpc.leasing.rshb.ru\r\nkelly.avito.ru\r\nkelt13.13.yandex.ru\r\nkelvin.avito.ru\r\nkem.dev.home.megafon.ru\r\nkem.dev.kp.ru\r\nkem.kp.ru\r\nkem.shop.megafon.ru\r\nkemelyanov.ing.k8s.dev.ivi.ru\r\nkemerovo.alfabank.ru\r\nkemerovo.avito.ru\r\nkemerovo.babyblog.ru\r\nkemerovo.beeline.ru\r\nkemerovo.club.dns-shop.ru\r\nkemerovo.drom.ru\r\nkemerovo.lemanapro.ru\r\nkemerovo.mts.ru\r\nkemerovo.rtp.sbc.sip.beeline.ru\r\nkemerovo.sig.sbc.sip.beeline.ru\r\nkemerovskaya-obl.beeline.ru\r\nken.avito.ru\r\nkennedy.avito.ru\r\nkenny.avito.ru\r\nkenobi.avito.ru\r\nkenshin.avito.ru\r\nkent.avito.ru\r\nkent.lenta.ru\r\nkentucky.avito.ru\r\nkenya.mail.ru\r\nkenzo.avito.ru\r\nkepa.avito.ru\r\nkepegawaian.avito.ru\r\nkepler.avito.ru\r\nkerala.avito.ru\r\nkerberos.avito.ru\r\nkerio.avito.ru\r\nkermit.avito.ru\r\nkernel.avito.ru\r\nkerr.avito.ru\r\nkesc-vpn.avito.ru\r\nkesl.mis.zdrav.tomsk.gov.ru\r\nkestrel.avito.ru\r\nkevin.avito.ru\r\nkey-db1e-vip.yandex.ru\r\nkey-db1e.yandex.ru\r\nkey-db2e-vip.yandex.ru\r\nkey-db2e.yandex.ru\r\nkey-target1e.yandex.ru\r\nkey-target2e.yandex.ru\r\nkey.avito.ru\r\nkey.net.ixbt.com\r\nkeyboard.avito.ru\r\nkeyboard.yandex.ru\r\nkeys.avito.ru\r\nkeys.mkb.ru\r\nkeystone.avito.ru\r\nkeyword.avito.ru\r\nkf.avito.ru\r\nkf.mail.ru\r\nkfc.youdo.com\r\nkfree.avito.ru\r\nkfrforum.fas.gov.ru\r\nkg.avito.ru\r\nkg.megafon.ru\r\nkg.mirtv.ru\r\nkgh.mos.ru\r\nkgu.mos.ru\r\nkgwtest.mkb.ru\r\nkh.avito.ru\r\nkhabarovsk.alfabank.ru\r\nkhabarovsk.beeline.ru\r\nkhabarovsk.club.dns-shop.ru\r\nkhabarovsk.dns-shop.ru\r\nkhabarovsk.hh.ru\r\nkhakasia.mts.ru\r\nkhakasia.tele2.ru\r\nkhaled.avito.ru\r\nkhalid.avito.ru\r\nkhalil.avito.ru\r\nkhan.avito.ru\r\nkhanty-mansiysk.drom.ru\r\nkhanty-mansiysk.home.megafon.ru\r\nkharkov.babyblog.ru\r\nkhb.beeline.ru\r\nkhb.dev.home.megafon.ru\r\nkhb.shop.megafon.ru\r\nkherlen.006.yandex.ru\r\nkhimki.hh.ru\r\nkhimki.mts.ru\r\nkhodanov.vysotsky.tass.ru\r\nkhonorik-named.rbc.ru\r\nkhonorik.rbc.ru\r\nkhonorik2.rbc.ru\r\nkhorshid.avito.ru\r\nkhv.gov.ru\r\nkhv.mts.ru\r\nkhvkbti.0001.yandex.ru\r\nki.avito.ru\r\nkia.afisha.ru\r\nkia.avito.ru\r\nkibana-dev.k8s.rg.ru\r\nkibana-sb.pg.tutu.ru\r\nkibana-stage.k8s.rg.ru\r\nkibana.k8s.rg.ru\r\nkibana.logs.rc.elc.tutu.ru\r\nkibana.openbank.ru\r\nkibana.tech.boards.mchs.ru\r\nkick.avito.ru\r\nkid.avito.ru\r\nkids.afisha.ru\r\nkids.avito.ru\r\nkids.kremlin.ru\r\nkids.minpromtorg.gov.ru\r\nkids.ozon.ru\r\nkids.t2.ru\r\nkids.tele2.ru\r\nkidsassist.t2.ru\r\nkiev.avito.ru\r\nkiev.babyblog.ru\r\nkievstar-api.ivi.ru\r\nkievstar-dfs.ivi.ru\r\nkievstar-l.ivi.ru\r\nkif.avito.ru\r\nkigoibmmc.mos.ru\r\nkiki.avito.ru\r\nkiks.kinopoisk.ru\r\nkiks.yandex.ru\r\nkiller.avito.ru\r\nkim-atom.roseltorg.ru\r\nkim-irao.roseltorg.ru\r\nkim.avito.ru\r\nkim.roseltorg.ru\r\nkimchi.avito.ru\r\nkimoto.avito.ru\r\nkind.yandex.ru\r\nkinder.avito.ru\r\nking.avito.ru\r\nking1.mail.ru\r\nkingdom.avito.ru\r\nkingdomrift.mail.ru\r\nkingkong.avito.ru\r\nkings.avito.ru\r\nkingston.avito.ru\r\nkino.1tv.ru\r\nkino.avito.ru\r\nkino.frontend-dev.k8s.rg.ru\r\nkino.frontend-stage.k8s.rg.ru\r\nkino.mail.ru\r\nkino.tele2.ru\r\nkino.yandex.ru\r\nkino1tv-static.1tv.ru\r\nkinofest.tele2.ru\r\nkinofestivali.tass.ru\r\nkinogoda.mail.ru\r\nkinolog-yuriy.liza-alert.tass.ru\r\nkinomarathon.premier.one\r\nkinopoisk-go-widget.kinopoisk.ru\r\nkinotavr.kinofestivali.tass.ru\r\nkinwww.kino-teatr.ru\r\nkinza.mail.ru\r\nkiosk.avito.ru\r\nkiosk.beeline.ru\r\nkiosk.dalet.euronews.com\r\nkiosk.habr.com\r\nkiosk.megafon.ru\r\nkiosk.rambler.ru\r\nkir.avito.ru\r\nkira.avito.ru\r\nkirakira.avito.ru\r\nkiran.avito.ru\r\nkirill.22-w.yandex.ru\r\nkirin.yandex.ru\r\nkirishka.2004.yandex.ru\r\nkirk.avito.ru\r\nkirka.mail.ru\r\nkirov.aif.ru\r\nkirov.avito.ru\r\nkirov.dev.home.megafon.ru\r\nkirov.dev.kp.ru\r\nkirov.drom.ru\r\nkirov.hh.ru\r\nkirov.kp.ru\r\nkirov.lemanapro.ru\r\nkirov.mts.ru\r\nkirov.shop.megafon.ru\r\nkis.avito.ru\r\nkis.shop.megafon.ru\r\nkisa.mail.ru\r\nkiselevsk.dns-shop.ru\r\nkislovodsk.beeline.ru\r\nkislovodsk.dns-shop.ru\r\nkiss.avito.ru\r\nkit.avito.ru\r\nkit.yandex.ru\r\nkita.avito.ru\r\nkita.yandex.ru\r\nkitchen.avito.ru\r\nkite.avito.ru\r\nkitlab.mchs.ru\r\nkitsune.yandex.ru\r\nkitten.avito.ru\r\nkitty.avito.ru\r\nkitty.balancer.serp.yandex.ru\r\nkiwi.avito.ru\r\nkizel.hh.ru\r\nkizen.sbercontact.sberbank.ru\r\nkizuna.avito.ru\r\nkj.avito.ru\r\nkjc.avito.ru\r\nkk.avito.ru\r\nkk.megafon.ru\r\nkkgvv24.gosuslugi.ru\r\nkkk.avito.ru\r\nkkk.kino-teatr.ru\r\nkkkk.avito.ru\r\nkkt-online.nalog.gov.ru\r\nkkt-online.nalog.ru\r\nkl-cat4900-gw.avito.ru\r\nkl.avito.ru\r\nklara.avito.ru\r\nklass.rambler.ru\r\nklaus.avito.ru\r\nklepovskoe-r20.gosweb.gosuslugi.ru\r\nklg.aif.ru\r\nklg.beeline.ru\r\nklg.dev.home.megafon.ru\r\nklg.shop.megafon.ru\r\nklgd-4.gosuslugi.ru\r\nklgd-cggw-02.klgd.rzd.ru\r\nklgd.demo.megafon.ru\r\nklient.avito.ru\r\nklimat-iva58.yandex.ru\r\nklimat-mt.yandex.ru\r\nklimat-mt56.yandex.ru\r\nklimov.dev.arh.mk.ru\r\nklimov.dev.ast.mk.ru\r\nklimov.dev.baikal.mk.ru\r\nklimov.dev.belgorod.mk.ru\r\nklimov.dev.blag.mk.ru\r\nklimov.dev.brl.mk.ru\r\nklimov.dev.cheb.mk.ru\r\nklimov.dev.chel.mk.ru\r\nklimov.dev.chr.mk.ru\r\nklimov.dev.crimea.mk.ru\r\nklimov.dev.eburg.mk.ru\r\nklimov.dev.hab.mk.ru\r\nklimov.dev.ivanovo.mk.ru\r\nklimov.dev.izhevsk.mk.ru\r\nklimov.dev.karel.mk.ru\r\nklimov.dev.kavkaz.mk.ru\r\nklimov.dev.kazan.mk.ru\r\nklimov.dev.kbr.mk.ru\r\nklimov.dev.kemerovo.mk.ru\r\nklimov.dev.kirov.mk.ru\r\nklimov.dev.kostroma.mk.ru\r\nklimov.dev.kras.mk.ru\r\nklimov.dev.kuban.mk.ru\r\nklimov.dev.kuzbass.mk.ru\r\nklimov.dev.magadan.mk.ru\r\nklimov.dev.mk.ru\r\nklimov.dev.mkala.mk.ru\r\nklimov.dev.mrl.mk.ru\r\nklimov.dev.murmansk.mk.ru\r\nklimov.dev.nn.mk.ru\r\nklimov.dev.novos.mk.ru\r\nklimov.dev.omsk.mk.ru\r\nklimov.dev.orel.mk.ru\r\nklimov.dev.oren.mk.ru\r\nklimov.dev.perm.mk.ru\r\nklimov.dev.rostov.mk.ru\r\nklimov.dev.rzn.mk.ru\r\nklimov.dev.samara.mk.ru\r\nklimov.dev.saratov.mk.ru\r\nklimov.dev.serp.mk.ru\r\nklimov.dev.smolensk.mk.ru\r\nklimov.dev.sochi.mk.ru\r\nklimov.dev.spb.mk.ru\r\nklimov.dev.tambov.mk.ru\r\nklimov.dev.tomsk.mk.ru\r\nklimov.dev.tula.mk.ru\r\nklimov.dev.tumen.mk.ru\r\nklimov.dev.tver.mk.ru\r\nklimov.dev.ufa.mk.ru\r\nklimov.dev.ugra.mk.ru\r\nklimov.dev.ul.mk.ru\r\nklimov.dev.ulan.mk.ru\r\nklimov.dev.vlad.mk.ru\r\nklimov.dev.vladimir.mk.ru\r\nklimov.dev.volg.mk.ru\r\nklimov.dev.vologda.mk.ru\r\nklimov.dev.vrn.mk.ru\r\nklimov.dev.www.mk.ru\r\nklimov.dev.yakutia.mk.ru\r\nklimov.dev.yar.mk.ru\r\nklimov.dev.yaroslavl.mk.ru\r\nklimovsk.beeline.ru\r\nklimt.avito.ru\r\nklin.dns-shop.ru\r\nklin.home.megafon.ru\r\nklin.lemanapro.ru\r\nklincy.dns-shop.ru\r\nkliniki.open.ru\r\nklm.avito.ru\r\nklpadm.tomsk.gov.ru\r\nklub.avito.ru\r\nkluch-kuban.review-k8s.aif.ru\r\nkm.avito.ru\r\nkm.duma.gov.ru\r\nkmail01.magnit.ru\r\nkmail02.magnit.ru\r\nkmail03.magnit.ru\r\nkmail04.magnit.ru\r\nkmartyashkov.ing.k8s.dev.ivi.ru\r\nkmc.avito.ru\r\nkmf.avito.ru\r\nkmkorma.kommersant.ru\r\nkmm.avito.ru\r\nkmns.life.ru\r\nkmp5med.gosuslugi.ru\r\nkmr.beeline.ru\r\nkms.avito.ru\r\nkmumb.tele2.ru\r\nkmz.feedback.rosatom.ru\r\nkn.avito.ru\r\nknb.beeline.ru\r\nknd-project.ac.gov.ru\r\nknd.ac.gov.ru\r\nknd.gosuslugi.ru\r\nknd.gpn.mchs.ru\r\nknee.mail.ru\r\nkng.beeline.ru\r\nknight.avito.ru\r\nknights.mail.ru\r\nknowledge.avito.ru\r\nknowledgebase.avito.ru\r\nknowledgemanagement.avito.ru\r\nknox.avito.ru\r\nknxmtt.cn.www.sports.ru\r\nko.avito.ru\r\nko.invest.khv.gov.ru\r\nkoa.avito.ru\r\nkoala.avito.ru\r\nkobayashi.avito.ru\r\nkobe.avito.ru\r\nkobe.yandex.ru\r\nkochi.avito.ru\r\nkodak.avito.ru\r\nkofe.2gis.ru\r\nkoffice.avito.ru\r\nkoga.yandex.ru\r\nkogadm.tomsk.gov.ru\r\nkogalym.home.megafon.ru\r\nkoha.avito.ru\r\nkohahq.searo.who.int\r\nkohammr.searo.who.int\r\nkojura.mail.ru\r\nkoko.avito.ru\r\nkokoro.avito.ru\r\nkolcssp.social.tomsk.gov.ru\r\nkolganova.2020.yandex.ru\r\nkollontaj-r40.gosweb.gosuslugi.ru\r\nkolo.avito.ru\r\nkolomna.drom.ru\r\nkolomna.hh.ru\r\nkolpashevo-r69.gosweb.gosuslugi.ru\r\nkolpashevo.social.tomsk.gov.ru\r\nkolpino.dns-shop.ru\r\nkolya.site-stage.freecom-app-test.mts.ru\r\nkom.avito.ru\r\nkomanda.mts.ru\r\nkomanda.sakha.gov.ru\r\nkomi.avito.ru\r\nkomi.dev.home.megafon.ru\r\nkomi.dev.kp.ru\r\nkomi.kp.ru\r\nkomi.mts.ru\r\nkomi.shop.megafon.ru\r\nkomi.tele2.ru\r\nkomission.vtb.ru\r\nkomitet-agro.duma.gov.ru\r\nkomitet-bn.km.duma.gov.ru\r\nkomitet-ekol.duma.gov.ru\r\nkomitet-finans.duma.gov.ru\r\nkomitet-prosvesh.duma.gov.ru\r\nkomitet.duma.gov.ru\r\nkomitet1.km.duma.gov.ru\r\nkomitet10.km.duma.gov.ru\r\nkomitet2-1.km.duma.gov.ru\r\nkomitet2-10.km.duma.gov.ru\r\nkomitet2-11.km.duma.gov.ru\r\nkomitet2-13.km.duma.gov.ru\r\nkomitet2-14.km.duma.gov.ru\r\nkomitet2-15.km.duma.gov.ru\r\nkomitet2-16.km.duma.gov.ru\r\nkomitet2-18.km.duma.gov.ru\r\nkomitet2-19.km.duma.gov.ru\r\nkomitet2-2.km.duma.gov.ru\r\nkomitet2-20.km.duma.gov.ru\r\nkomitet2-21.km.duma.gov.ru\r\nkomitet2-22.km.duma.gov.ru\r\nkomitet2-24.km.duma.gov.ru\r\nkomitet2-3.km.duma.gov.ru\r\nkomitet2-4.km.duma.gov.ru\r\nkomitet2-5.km.duma.gov.ru\r\nkomitet2-6.km.duma.gov.ru\r\nkomitet2-7.km.duma.gov.ru\r\nkomitet2-8.km.duma.gov.ru\r\nkomitet2-9.km.duma.gov.ru\r\nkomitet2.km.duma.gov.ru\r\nkomitet4.km.duma.gov.ru\r\nkomitet5.km.duma.gov.ru\r\nkomitet6.km.duma.gov.ru\r\nkomitet7.km.duma.gov.ru\r\nkomitet8.km.duma.gov.ru\r\nkomsomolsk-na-amure.dns-shop.ru\r\nkomsomolsk.drom.ru\r\nkomsomolsk.mts.ru\r\nkomsomolskij.gosuslugi.ru\r\nkomus.youdo.com\r\nkon.avito.ru\r\nkondrat-vm.yandex.ru\r\nkonflikt.mail.ru\r\nkong.avito.ru\r\nkonkurs.avito.ru\r\nkonkurs.hlc.beeline.ru\r\nkonkurs.minzdrav.gov.ru\r\nkonkurs.ren.tv\r\nkonovalova.160279.yandex.ru\r\nkons.mchs.ru\r\nkonservy.5morey.yandex.ru\r\nkonto.avito.ru\r\nkontragent.magnit.ru\r\nkonura.mail.ru\r\nkonvict.avito.ru\r\nkool.avito.ru\r\nkoordinator-tatyana.liza-alert.tass.ru\r\nkopenhagen.avito.ru\r\nkopeysk.dns-shop.ru\r\nkopia.avito.ru\r\nkopilka.mail.ru\r\nkor.avito.ru\r\nkorea.avito.ru\r\nkorean.avito.ru\r\nkorenevskij-r38.gosweb.gosuslugi.ru\r\nkorolev.dns-shop.ru\r\nkorolev.hh.ru\r\nkorolev.home.megafon.ru\r\nkorolev.test.home.megafon.ru\r\nkortschool.gosuslugi.ru\r\nkorussbof.sberbank.ru\r\nkorzun-test.tbank.ru\r\nkos.avito.ru\r\nkoshelevbank.credit-registry.nalog.ru\r\nkosmos.avito.ru\r\nkostroma.avito.ru\r\nkostroma.drom.ru\r\nkostroma.fas.gov.ru\r\nkostroma.gov.ru\r\nkostroma.hh.ru\r\nkostroma.kp.ru\r\nkostroma.lemanapro.ru\r\nkostroma.mts.ru\r\nkostroma.tele2.ru\r\nkot47.emails.tinkoff.ru\r\nkot48.emails.tinkoff.ru\r\nkot49.emails.tinkoff.ru\r\nkot50.emails.tinkoff.ru\r\nkot83.emails.tinkoff.ru\r\nkot84.emails.tinkoff.ru\r\nkot85.emails.tinkoff.ru\r\nkot86.emails.tinkoff.ru\r\nkota.avito.ru\r\nkoteg.mail.ru\r\nkoti.avito.ru\r\nkotlas.dns-shop.ru\r\nkotlovka.mos.ru\r\nkotzdorov.t2.ru\r\nkovrov.dns-shop.ru\r\nkoyo.avito.ru\r\nkoza.mail.ru\r\nkozhevnikovo.social.tomsk.gov.ru\r\nkozhevnikovskij-r69.gosweb.gosuslugi.ru\r\nkp-bot.dev.kp.ru\r\nkp-graphql-api.ott-backend.prestable.kinopoisk.ru\r\nkp-graphql-api.prestable.kinopoisk.ru\r\nkp-graphql-api.testing.kinopoisk.ru\r\nkp-graphql-api.unstable.kinopoisk.ru\r\nkp-guess-game-api.kinopoisk.ru\r\nkp.avito.ru\r\nkp.vedomosti.ru\r\nkpak.dom.test.gosuslugi.ru\r\nkpi.afro.who.int\r\nkpi.avito.ru\r\nkpi.rpn.gov.ru\r\nkpiball.tele2.ru\r\nkpjfwdat-rlp.ops.beeline.ru\r\nkpn.play-hbo.max.com\r\nkpn.play.max.com\r\nkps.avito.ru\r\nkpu.alfabank.ru\r\nkq.avito.ru\r\nkr.avito.ru\r\nkr.kommersant.ru\r\nkraft.avito.ru\r\nkraken.avito.ru\r\nkraken.rambler.ru\r\nkrakend-demo.mdrive.magnit.ru\r\nkrakow.avito.ru\r\nkrang.avito.ru\r\nkrang.rambler.ru\r\nkras.dev.home.megafon.ru\r\nkras.mk.ru\r\nkras.mts.ru\r\nkras.rzd.ru\r\nkras.shop.megafon.ru\r\nkrasanoff.2017.yandex.ru\r\nkrasnoarmeisk.mts.ru\r\nkrasnoborskij-r29.gosweb.gosuslugi.ru\r\nkrasnodar.avito.ru\r\nkrasnodar.babyblog.ru\r\nkrasnodar.beeline.ru\r\nkrasnodar.dns-shop.ru\r\nkrasnodar.drom.ru\r\nkrasnodar.fas.gov.ru\r\nkrasnodar.hh.ru\r\nkrasnodar.lemanapro.ru\r\nkrasnodar.rbc.ru\r\nkrasnodar.shop.megafon.ru\r\nkrasnodar.shop.tele2.ru\r\nkrasnodar.tele2.ru\r\nkrasnogorsk.drom.ru\r\nkrasnogorsk.gosuslugi.ru\r\nkrasnogorsk.hh.ru\r\nkrasnogorsk.mts.ru\r\nkrasnokamensk.drom.ru\r\nkrasnoobsk.drom.ru\r\nkrasnoufimsk.drom.ru\r\nkrasnoyarsk.alfabank.ru\r\nkrasnoyarsk.avito.ru\r\nkrasnoyarsk.babyblog.ru\r\nkrasnoyarsk.beeline.ru\r\nkrasnoyarsk.dns-shop.ru\r\nkrasnoyarsk.hh.ru\r\nkrasnoyarsk.lemanapro.ru\r\nkrasnoyarsk.rtp.sbc.sip.beeline.ru\r\nkrasnoyarsk.sig.sbc.sip.beeline.ru\r\nkrasnoyarsk.tele2.ru\r\nkrasnoyarskiy-kr.beeline.ru\r\nkrasny5.premier.one\r\nkrd.home.megafon.ru\r\nkrd.kommersant.ru\r\nkremlin.life.ru\r\nkrgdb4.gosuslugi.ru\r\nkrim.drom.ru\r\nkris.avito.ru\r\nkrishna.avito.ru\r\nkristine.avito.ru\r\nkrivosheinskij-r69.gosweb.gosuslugi.ru\r\nkrn.beeline.ru\r\nkrona2.yandex.ru\r\nkronos.avito.ru\r\nkronshtadt.hh.ru\r\nkronstadt.bizconf.rbc.ru\r\nkroshka.mail.ru\r\nkroshka2.mail.ru\r\nkrovstat.minzdrav.gov.ru\r\nkrs.avito.ru\r\nkrs.beeline.ru\r\nkrshadm.tomsk.gov.ru\r\nkrsk.avito.ru\r\nkrsk.dev.kp.ru\r\nkrsk.fas.gov.ru\r\nkrsk.kp.ru\r\nkrutinskij-r52.gosweb.gosuslugi.ru\r\nkruzhok.project.tinkoff.ru\r\nkruzhok.tinkoff.ru\r\nkrw-cggw-01.krw.rzd.ru\r\nkrw-cggw-02.krw.rzd.ru\r\nkrym-v-cifrah.tass.ru\r\nkrym.aif.ru\r\nkrym.lemanapro.ru\r\nkrym10.iz.ru\r\nkrypton.avito.ru\r\nkryptonite.vedomosti.ru\r\nks-inventory-api.avito.ru\r\nks-invoice-api.avito.ru\r\nks-limits-api.avito.ru\r\nks-opros.mos.ru\r\nks-order-api.avito.ru\r\nks-program-api.avito.ru\r\nks-vendingtransactions-mq0.avito.ru\r\nks-vendingtransactions-mq1.avito.ru\r\nks-vendingtransactions-mq2.avito.ru\r\nks-vendingtransactions-mq3.avito.ru\r\nks-vendingtransactions-mq4.avito.ru\r\nks.avito.ru\r\nks.home.megafon.ru\r\nks.sakha.gov.ru\r\nks.shop.megafon.ru\r\nksa.vtb.ru\r\nksc.roseltorg.ru\r\nkscore.gosuslugi.ru\r\nksi.avito.ru\r\nksm.beeline.ru\r\nksmg.factoring.rshb.ru\r\nksmg.tass.ru\r\nksp.avito.ru\r\nksportal.garant.ru\r\nksrf.consultant.ru\r\nkss.avito.ru\r\nkst.avito.ru\r\nkstovo.dns-shop.ru\r\nkstr.dev.home.megafon.ru\r\nkstr.shop.megafon.ru\r\nksu.avito.ru\r\nksv.rpn.gov.ru\r\nksv.v2.rpn.gov.ru\r\nkt.avito.ru\r\nkta.kino-teatr.ru\r\nktc.avito.ru\r\nktm.avito.ru\r\nkto-kuda.life.ru\r\nktozvonit.beeline.ru\r\nktv.avito.ru\r\nku.avito.ru\r\nkuba.avito.ru\r\nkuban.aif.ru\r\nkuban.avito.ru\r\nkuban.dev.kp.ru\r\nkuban.kp.ru\r\nkuban.mk.ru\r\nkuban.mts.ru\r\nkuban.rbc.ru\r\nkuban.tass.ru\r\nkube-dev.drom.ru\r\nkube-test.mvideo.ru\r\nkube.drom.ru\r\nkube.mvideo.ru\r\nkube.srv.hub.litres.ru\r\nkubeconfig.k8s.rg.ru\r\nkubernetes.avito.ru\r\nkubik.33.yandex.ru\r\nkubokgpn.life.ru\r\nkuda.yandex.ru\r\nkudesnik.yandex.ru\r\nkudesnik2.yandex.ru\r\nkudesnik3.yandex.ru\r\nkudesnik5.yandex.ru\r\nkudesnik7.yandex.ru\r\nkudesnik8.yandex.ru\r\nkudesnik9.yandex.ru\r\nkuhnyanarayone.youdo.com\r\nkuibyshevo-krym.drom.ru\r\nkuku.avito.ru\r\nkulikov.dmitry.1980.yandex.ru\r\nkulikov.n.1.yandex.ru\r\nkultur.avito.ru\r\nkultura-predprod.mos.ru\r\nkultura.avito.ru\r\nkultura.mos.ru\r\nkuma.avito.ru\r\nkumar.avito.ru\r\nkumi.avito.ru\r\nkunden.avito.ru\r\nkungfu.avito.ru\r\nkupilegko1.alfabank.ru\r\nkur-gnez.gosuslugi.ru\r\nkur.beeline.ru\r\nkura.avito.ru\r\nkurchatov.gosuslugi.ru\r\nkurchatov.home.megafon.ru\r\nkurgan.avito.ru\r\nkurgan.dev.home.megafon.ru\r\nkurgan.drom.ru\r\nkurgan.lemanapro.ru\r\nkurgan.mts.ru\r\nkurgan.shop.megafon.ru\r\nkurgan.tele2.ru\r\nkurganov.test.9111.ru\r\nkurort.minzdrav.gov.ru\r\nkurs-mobile-psi.sberbank.ru\r\nkurs-mobile.sberbank.ru\r\nkurs.alfabank.ru\r\nkurs.avito.ru\r\nkurs.rosatom.ru\r\nkurs2.rosatom.ru\r\nkursk.avito.ru\r\nkursk.babyblog.ru\r\nkursk.dev.kp.ru\r\nkursk.dns-shop.ru\r\nkursk.drom.ru\r\nkursk.hh.ru\r\nkursk.kp.ru\r\nkursk.lemanapro.ru\r\nkursk.mts.ru\r\nkursk.tele2.ru\r\nkursk.tutu.ru\r\nkurskadmin.gosuslugi.ru\r\nkurt.net.ixbt.com\r\nkurtametov.tass.ru\r\nkurtamysh.drom.ru\r\nkurum.yandex.ru\r\nkuse.yandex.ru\r\nkustendorf.life.ru\r\nkustendorfclassic.life.ru\r\nkut-zags.nalog.ru\r\nkut.nalog.ru\r\nkutuphane.avito.ru\r\nkuzbank.credit-registry.nalog.ru\r\nkuzbass.aif.ru\r\nkuzbass.tele2.ru\r\nkuznetsov.tass.ru\r\nkv.avito.ru\r\nkvantera-games.megafon.ru\r\nkvint.mkb.ru\r\nkvk-b2blk.megafon.ru\r\nkvk-lync13-edge.megafon.ru\r\nkvk-mdmt-dev1.megafon.ru\r\nkvk-mdmt-uagr1.megafon.ru\r\nkvk-mdmt-uagr2.megafon.ru\r\nkvm-datapro.hh.ru\r\nkvm-isg.hh.ru\r\nkvm.avito.ru\r\nkvm1.avito.ru\r\nkvm2.avito.ru\r\nkvm3.avito.ru\r\nkvm4.avito.ru\r\nkvqrrpacupdate.kino-teatr.ru\r\nkvr.28.yandex.ru\r\nkvy.2017.yandex.ru\r\nkw.avito.ru\r\nkws.factoring.rshb.ru\r\nkx.avito.ru\r\nky.avito.ru\r\nkyc.avito.ru\r\nkygl.avito.ru\r\nkyle.avito.ru\r\nkylie.avito.ru\r\nkyokushin.avito.ru\r\nkyoto.avito.ru\r\nkyzyl.drom.ru\r\nkyzyl.lemanapro.ru\r\nkyzyl.sig.sbc.sip.beeline.ru\r\nkz.avito.ru\r\nkz.cloud.vk.com\r\nkz.mirtv.ru\r\nkz.zdorovie-shkolnika.spb.aif.ru\r\nkzd.rzd.ru\r\nkzl.beeline.ru\r\nkzn.beeline.ru\r\nkzn5txwwsyp1dhao.grant.oren.aif.ru\r\nl-clients.cloud.mail.ru\r\nl.avito.ru\r\nl.cloud.mail.ru\r\nl.euronews.com\r\nl.mvideo.ru\r\nl.roseltorg.ru\r\nl.tinkoff.ru\r\nl.vtb.ru\r\nl2.avito.ru\r\nl27.0.0.1.yandex.ru\r\nl2tp-ca.avito.ru\r\nl2tp-hk.avito.ru\r\nl2tp-it.avito.ru\r\nl2tp-uk.avito.ru\r\nl2tp-us.avito.ru\r\nl2tp.avito.ru\r\nl7b-test.yandex.ru\r\nl7test.litres.ru\r\nl92.epgu-front.test.gosuslugi.ru\r\nla.avito.ru\r\nla2.avito.ru\r\nlaasavr-3-2-00.yandex.ru\r\nlab-booking.iarc.who.int\r\nlab.avito.ru\r\nlab.net.ixbt.com\r\nlab.tass.ru\r\nlab.x5.ru\r\nlab1.avito.ru\r\nlabel.avito.ru\r\nlabelimages.avito.ru\r\nlabelladiva.kino-teatr.ru\r\nlabmx1.mail.ru\r\nlabmx2.mail.ru\r\nlabo.avito.ru\r\nlabor.71.yandex.ru\r\nlabor.avito.ru\r\nlabrador.avito.ru\r\nlabs.avito.ru\r\nlabs.dev.kp.ru\r\nlabs.yandex.ru\r\nlacerta02.rbc.ru\r\nlacoste.avito.ru\r\nlada.avito.ru\r\nladolcevita.avito.ru\r\nlady.avito.ru\r\nlady.mail.ru\r\nlady.zdorovie-shkolnika.spb.aif.ru\r\nlaguna.avito.ru\r\nlaila.avito.ru\r\nlakhtacenter.tass.ru\r\nlala.avito.ru\r\nlalala.avito.ru\r\nlambda.avito.ru\r\nlambda.mail.ru\r\nlamour.avito.ru\r\nlamp.avito.ru\r\nlampora.mail.ru\r\nlams.avito.ru\r\nlan.avito.ru\r\nlana.avito.ru\r\nlancaster.avito.ru\r\nlance.avito.ru\r\nlancelot.avito.ru\r\nlancer.avito.ru\r\nland.avito.ru\r\nlanding.avito.ru\r\nlanding.beeline.ru\r\nlanding.mail.ru\r\nlanding.ml.megafon.ru\r\nlandings.2gis.ru\r\nlandlord.yandex.ru\r\nlandmark.avito.ru\r\nlandscape.avito.ru\r\nlang.avito.ru\r\nlang.beeline.ru\r\nlangepas.home.megafon.ru\r\nlangrec.yandex.ru\r\nlanguage.avito.ru\r\nlanguageredirector.test.euronews.com\r\nlanguages.avito.ru\r\nlanka.avito.ru\r\nlantern.avito.ru\r\nlaos.avito.ru\r\nlap1.srv.hub.litres.ru\r\nlapin.avito.ru\r\nlapis.avito.ru\r\nlaplace.avito.ru\r\nlaptop.avito.ru\r\nlaptops.avito.ru\r\nlara.avito.ru\r\nlarch.avito.ru\r\nlards-dev.yc.mvideo.ru\r\nlards.yc.mvideo.ru\r\nlarek.meduza.io\r\nlark.avito.ru\r\nlarry.avito.ru\r\nlars.avito.ru\r\nlars.worldbank.org\r\nlarsapp.worldbank.org\r\nlarsappdev.worldbank.org\r\nlarsappqa.worldbank.org\r\nlarsapproval.worldbank.org\r\nlarsapprovaldev.worldbank.org\r\nlarsapprovalqa.worldbank.org\r\nlarsapprovalstg.worldbank.org\r\nlarsapprovaltst.worldbank.org\r\nlarsappstg.worldbank.org\r\nlarsapptst.worldbank.org\r\nlarsdev.worldbank.org\r\nlarsmapp.worldbank.org\r\nlarsmappdev.worldbank.org\r\nlarsmappqa.worldbank.org\r\nlarsmappstg.worldbank.org\r\nlarsmapptst.worldbank.org\r\nlarsp.worldbank.org\r\nlarsqa.worldbank.org\r\nlarsstg.worldbank.org\r\nlarstst.worldbank.org\r\nlas-bsd-jail01-0.yandex.ru\r\nlas-bsd-jail02-0.yandex.ru\r\nlas-bsd-jail03-0.yandex.ru\r\nlas-bsd-jail04-0.yandex.ru\r\nlasagna.rambler.ru\r\nlasavr-1-1-00.yandex.ru\r\nlasavr-1-10-00.yandex.ru\r\nlasavr-1-11-00.yandex.ru\r\nlasavr-1-12-00.yandex.ru\r\nlasavr-1-13-00.yandex.ru\r\nlasavr-1-14-00.yandex.ru\r\nlasavr-1-15-00.yandex.ru\r\nlasavr-1-16-00.yandex.ru\r\nlasavr-1-17-00.yandex.ru\r\nlasavr-1-2-00.yandex.ru\r\nlasavr-1-20-00.yandex.ru\r\nlasavr-1-3-00.yandex.ru\r\nlasavr-1-5-00.yandex.ru\r\nlasavr-1-6-00.yandex.ru\r\nlasavr-1-7-00.yandex.ru\r\nlasavr-2-1-00.yandex.ru\r\nlasavr-2-10-00.yandex.ru\r\nlasavr-2-11-00.yandex.ru\r\nlasavr-2-12-00.yandex.ru\r\nlasavr-2-13-00.yandex.ru\r\nlasavr-2-16-00.yandex.ru\r\nlasavr-2-2-00.yandex.ru\r\nlasavr-2-20-00.yandex.ru\r\nlasavr-2-3-00.yandex.ru\r\nlasavr-2-5-00.yandex.ru\r\nlasavr-2-6-00.yandex.ru\r\nlasavr-3-1-00.yandex.ru\r\nlasavr-3-10-00.yandex.ru\r\nlasavr-3-11-00.yandex.ru\r\nlasavr-3-12-00.yandex.ru\r\nlasavr-3-13-00.yandex.ru\r\nlasavr-3-15-00.yandex.ru\r\nlasavr-3-16-00.yandex.ru\r\nlasavr-3-2-00.yandex.ru\r\nlasavr-3-20-00.yandex.ru\r\nlasavr-3-3-00.yandex.ru\r\nlasclasavr-2-2-00.yandex.ru\r\nlaser.avito.ru\r\nlastchance.avito.ru\r\nlastmile-dev1.logistics.yc.mvideo.ru\r\nlastmile-e2e-prod1.yc.mvideo.ru\r\nlastmile-tst.k8s.mvideo.ru\r\nlastmile.yc.mvideo.ru\r\nlastminute.avito.ru\r\nlastochka.tutu.ru\r\nlasvegas.avito.ru\r\nlasyava-1-00.yandex.ru\r\nlasyava-2-00.yandex.ru\r\nlasyava-3-00.yandex.ru\r\nlaunch.avito.ru\r\nlaura.avito.ru\r\nlava.avito.ru\r\nlaw.2gis.ru\r\nlaw.avito.ru\r\nlawbusiness.vedomosti.ru\r\nlawis.sovcombank.ru\r\nlawrence.avito.ru\r\nlawyer.avito.ru\r\nlayout.avito.ru\r\nlazarus.avito.ru\r\nlazy.avito.ru\r\nlb.avito.ru\r\nlb.tver.mts.ru\r\nlb01.avito.ru\r\nlb02.avito.ru\r\nlb1.avito.ru\r\nlb1.i.mail.ru\r\nlb1.mail.ru\r\nlb10.mail.ru\r\nlb11.mail.ru\r\nlb12.mail.ru\r\nlb13.mail.ru\r\nlb14.mail.ru\r\nlb15.mail.ru\r\nlb16.mail.ru\r\nlb17.mail.ru\r\nlb18.mail.ru\r\nlb19.mail.ru\r\nlb2.avito.ru\r\nlb2.i.mail.ru\r\nlb2.mail.ru\r\nlb20.mail.ru\r\nlb3.avito.ru\r\nlb3.i.mail.ru\r\nlb3.mail.ru\r\nlb4.i.mail.ru\r\nlb4.mail.ru\r\nlb5.i.mail.ru\r\nlb5.mail.ru\r\nlb6.mail.ru\r\nlb7.mail.ru\r\nlb8.mail.ru\r\nlb9.mail.ru\r\nlbr10.mail.ru\r\nlbr11.mail.ru\r\nlbr12.mail.ru\r\nlbr13.mail.ru\r\nlbr14.mail.ru\r\nlbr15.mail.ru\r\nlbr16.mail.ru\r\nlbr17.mail.ru\r\nlbr18.mail.ru\r\nlbr19.mail.ru\r\nlbr20.mail.ru\r\nlbr7.mail.ru\r\nlbr8.mail.ru\r\nlbr9.mail.ru\r\nlbs.avito.ru\r\nlbtest.avito.ru\r\nlc.avito.ru\r\nlc.home.megafon.ru\r\nlc.shop.megafon.ru\r\nlc1.avito.ru\r\nlc2.avito.ru\r\nlc3.avito.ru\r\nlcbvnsfg-rlp.ops.beeline.ru\r\nlcc.avito.ru\r\nlcgbdii.gridpp.avito.ru\r\nlcgcleaning.youdo.com\r\nlclients.cloud.mail.ru\r\nlconture-make-up.lady.mail.ru\r\nlcs.avito.ru\r\nld.avito.ru\r\nld.social.tomsk.gov.ru\r\nldap-test.avito.ru\r\nldap.avito.ru\r\nldap.fms.gov.ru\r\nldap01.avito.ru\r\nldap01.infra.rbc.ru\r\nldap02.avito.ru\r\nldap04.db.rbc.ru\r\nldap1.avito.ru\r\nldap2.avito.ru\r\nldap3.avito.ru\r\nldapauth.avito.ru\r\nldapclient.avito.ru\r\nldaps.avito.ru\r\nldaptest.avito.ru\r\nldc.avito.ru\r\nldgw.open.ru\r\nldp.avito.ru\r\nlds.avito.ru\r\nle-check.avito.ru\r\nle-test.avito.ru\r\nle.avito.ru\r\nle.tbank.ru\r\nle13.hh.ru\r\nle13yar.hh.ru\r\nlea.avito.ru\r\nlead.avito.ru\r\nlead.zdorovie-shkolnika.spb.aif.ru\r\nleader.avito.ru\r\nleader.lemanapro.ru\r\nleader.mchs.gov.ru\r\nleader.mchs.ru\r\nleaders-of-changes.rosatom.ru\r\nleads.avito.ru\r\nleaf.avito.ru\r\nleague.avito.ru\r\nleaked.sberbank.ru\r\nleap.avito.ru\r\nlearn-test.lemanapro.ru\r\nlearn.alfabank.ru\r\nlearn.avito.ru\r\nlearn.corp.mail.ru\r\nlearn.lemanapro.ru\r\nlearn.mchs.ru\r\nlearn.partners.lemanapro.ru\r\nlearn.vtb.ru\r\nlearn2.avito.ru\r\nlearning-admin.tbank.ru\r\nlearning-admin.tinkoff.ru\r\nlearning-api.tbank.ru\r\nlearning-api.tinkoff.ru\r\nlearning.avito.ru\r\nlearning.learning.ozon.ru\r\nlearning.ozon.ru\r\nlearning.rosbank.ru\r\nlearning.rzd.ru\r\nlearning.tbank.ru\r\nlearning.tinkoff.ru\r\nlearning.university.ozon.ru\r\nlearnrus.beeline.ru\r\nleasing-cabinet.taxi.yandex.ru\r\nleasing.avito.ru\r\nleasing.rshb.ru\r\nlebanon.avito.ru\r\nlecm.2gis.ru\r\nlectory.m24.ru\r\nled.avito.ru\r\nleda.avito.ru\r\nleda.mail.ru\r\nledokol.lenta.ru\r\nlee.avito.ru\r\nleech.avito.ru\r\nleeds.avito.ru\r\nleela.avito.ru\r\nlegacy.avito.ru\r\nlegacy.dns-shop.ru\r\nlegacy.rosatom.ru\r\nlegacy.sberbank.ru\r\nlegacy.vtb.ru\r\nlegacymail.avito.ru\r\nlegal.avito.ru\r\nlegal.max.ru\r\nlegal.open.ru\r\nlegal.yandex.ru\r\nlegaltech.garant.ru\r\nlegend.avito.ru\r\nlegenda.mail.ru\r\nlegendary.avito.ru\r\nlegendofheroes.mail.ru\r\nlegends.avito.ru\r\nlegion.avito.ru\r\nlegislation.council.gov.ru\r\nlegislation.garant.ru\r\nlego-52e9b0ae40c088a00f8b45ac.ct226.dev.zoon.ru\r\nlego-59d4ac89d9f514019932d75f.ct215.dev.zoon.ru\r\nlego-5a0b5070a24fd95ca1560120.ct215.dev.zoon.ru\r\nlego-5a66fc7bfb0c9615d81810d3.ct215.dev.zoon.ru\r\nlego.avito.ru\r\nlego.yandex.ru\r\nlego01f.cs-minitools01f.yandex.ru\r\nlego01h.cs-minitools01h.yandex.ru\r\nlego351.mail.ru\r\nlego5a0b5070a24fd95ca1560120.ct215.dev.zoon.ru\r\nlegoauth.lemanapro.ru\r\nlegolas.avito.ru\r\nleia.avito.ru\r\nleiden.tass.ru\r\nleila.avito.ru\r\nlemon.avito.ru\r\nlemonad.mail.ru\r\nlena.avito.ru\r\nlenatom.feedback.rosatom.ru\r\nlenfilm.life.ru\r\nleningrad.iz.ru\r\nleningradskaya-obl.beeline.ru\r\nleninsk-kuznetskiy.dns-shop.ru\r\nleninskiy.101.yandex.ru\r\nlenny.avito.ru\r\nlenobl.fas.gov.ru\r\nlenovoselfie.afisha.ru\r\nlens.avito.ru\r\nlenta.avito.ru\r\nlenta.yandex.ru\r\nlenta.youdo.com\r\nleo.avito.ru\r\nleo.vtb.ru\r\nleon.avito.ru\r\nleonardo.avito.ru\r\nleonoff.09.yandex.ru\r\nleopard.avito.ru\r\nleopard.mail.ru\r\nlermontov-r07.gosweb.gosuslugi.ru\r\nles-na-svyazi-artyom.liza-alert.tass.ru\r\nles.avito.ru\r\nlesbian.avito.ru\r\nleslie.avito.ru\r\nless.rbc.ru\r\nleto.avito.ru\r\nleto.magnit.ru\r\nleto.mos.ru\r\nletsencrypt-iaas.infra.tutu.ru\r\nletsencrypt.infra.tutu.ru\r\nletsgo.avito.ru\r\nletter.avito.ru\r\nletter.openbank.ru\r\nletters.kostroma.gov.ru\r\nletters.kremlin.ru\r\nletters.yandex.ru\r\nletters2-qa.yandex.ru\r\nletuchie-korabli.tass.ru\r\nlevi.avito.ru\r\nleviathan.avito.ru\r\nlewis.avito.ru\r\nlex.avito.ru\r\nlexi.avito.ru\r\nlexington.avito.ru\r\nlexus.avito.ru\r\nlexus.drom.ru\r\nlexuses.rbc.ru\r\nlf.mail.ru\r\nlf0.mail.ru\r\nlf1.mail.ru\r\nlf10.i.mail.ru\r\nlf10.mail.ru\r\nlf100.mail.ru\r\nlf10img.mail.ru\r\nlf10l2.mail.ru\r\nlf10l3.mail.ru\r\nlf10l4.mail.ru\r\nlf11.mail.ru\r\nlf11img.mail.ru\r\nlf11l2.mail.ru\r\nlf11l3.mail.ru\r\nlf11l4.mail.ru\r\nlf12.mail.ru\r\nlf12img.mail.ru\r\nlf12l2.mail.ru\r\nlf12l3.mail.ru\r\nlf12l4.mail.ru\r\nlf13.mail.ru\r\nlf14.mail.ru\r\nlf15.mail.ru\r\nlf16.mail.ru\r\nlf17.mail.ru\r\nlf17img.mail.ru\r\nlf17l2.mail.ru\r\nlf17l3.mail.ru\r\nlf17l4.mail.ru\r\nlf18.mail.ru\r\nlf18img.mail.ru\r\nlf18l2.mail.ru\r\nlf18l3.mail.ru\r\nlf18l4.mail.ru\r\nlf19.mail.ru\r\nlf19img.mail.ru\r\nlf19l2.mail.ru\r\nlf19l3.mail.ru\r\nlf19l4.mail.ru\r\nlf1img.mail.ru\r\nlf1l2.mail.ru\r\nlf1l3.mail.ru\r\nlf1l4.mail.ru\r\nlf2.mail.ru\r\nlf20.mail.ru\r\nlf20img.mail.ru\r\nlf20l2.mail.ru\r\nlf20l3.mail.ru\r\nlf20l4.mail.ru\r\nlf23.i.mail.ru\r\nlf24.i.mail.ru\r\nlf25.i.mail.ru\r\nlf25.mail.ru\r\nlf26.mail.ru\r\nlf27.mail.ru\r\nlf28.mail.ru\r\nlf29.mail.ru\r\nlf2img.mail.ru\r\nlf2l2.mail.ru\r\nlf2l3.mail.ru\r\nlf2l4.mail.ru\r\nlf3.mail.ru\r\nlf30.mail.ru\r\nlf31.mail.ru\r\nlf32.mail.ru\r\nlf33.mail.ru\r\nlf34.mail.ru\r\nlf35.mail.ru\r\nlf36.mail.ru\r\nlf37.mail.ru\r\nlf38.mail.ru\r\nlf39.mail.ru\r\nlf3img.mail.ru\r\nlf3l2.mail.ru\r\nlf3l3.mail.ru\r\nlf3l4.mail.ru\r\nlf4.mail.ru\r\nlf40.mail.ru\r\nlf41.mail.ru\r\nlf42.mail.ru\r\nlf43.mail.ru\r\nlf44.mail.ru\r\nlf45.mail.ru\r\nlf46.mail.ru\r\nlf47.mail.ru\r\nlf48.mail.ru\r\nlf4img.mail.ru\r\nlf4l2.mail.ru\r\nlf4l3.mail.ru\r\nlf4l4.mail.ru\r\nlf5.mail.ru\r\nlf50.i.mail.ru\r\nlf51.i.mail.ru\r\nlf52.i.mail.ru\r\nlf53.i.mail.ru\r\nlf54.i.mail.ru\r\nlf55.i.mail.ru\r\nlf5img.mail.ru\r\nlf5l2.mail.ru\r\nlf5l3.mail.ru\r\nlf5l4.mail.ru\r\nlf6.mail.ru\r\nlf60.i.mail.ru\r\nlf61.i.mail.ru\r\nlf62.i.mail.ru\r\nlf63.i.mail.ru\r\nlf64.i.mail.ru\r\nlf65.i.mail.ru\r\nlf6img.mail.ru\r\nlf6l2.mail.ru\r\nlf6l3.mail.ru\r\nlf6l4.mail.ru\r\nlf7.mail.ru\r\nlf70.i.mail.ru\r\nlf71.i.mail.ru\r\nlf72.i.mail.ru\r\nlf73.i.mail.ru\r\nlf74.i.mail.ru\r\nlf75.mail.ru\r\nlf76.mail.ru\r\nlf77.mail.ru\r\nlf78.mail.ru\r\nlf79.mail.ru\r\nlf7img.mail.ru\r\nlf7l2.mail.ru\r\nlf7l3.mail.ru\r\nlf7l4.mail.ru\r\nlf8.mail.ru\r\nlf80.mail.ru\r\nlf81.mail.ru\r\nlf82.mail.ru\r\nlf83.mail.ru\r\nlf84.mail.ru\r\nlf85.mail.ru\r\nlf86.mail.ru\r\nlf87.mail.ru\r\nlf88.mail.ru\r\nlf89.mail.ru\r\nlf8img.mail.ru\r\nlf8l2.mail.ru\r\nlf8l3.mail.ru\r\nlf8l4.mail.ru\r\nlf9.mail.ru\r\nlf90.mail.ru\r\nlf91.mail.ru\r\nlf92.mail.ru\r\nlf93.mail.ru\r\nlf94.mail.ru\r\nlf95.mail.ru\r\nlf96.mail.ru\r\nlf97.mail.ru\r\nlf98.mail.ru\r\nlf99.mail.ru\r\nlf9img.mail.ru\r\nlf9l2.mail.ru\r\nlf9l3.mail.ru\r\nlf9l4.mail.ru\r\nlfc-atlas.gridpp.avito.ru\r\nlfng1.mail.ru\r\nlfrd.mail.ru\r\nlfrd1.mail.ru\r\nlfrd12.mail.ru\r\nlfrd2.mail.ru\r\nlfrd22.mail.ru\r\nlfrd3.i.mail.ru\r\nlfrd4.i.mail.ru\r\nlfrd5.i.mail.ru\r\nlfs.avito.ru\r\nlg-lm-dev1.yc.mvideo.ru\r\nlg-lm-preprod1.yc.mvideo.ru\r\nlg-sl-dev1.yc.mvideo.ru\r\nlg-sl-prod1.yc.mvideo.ru\r\nlg.avito.ru\r\nlg.video-mp4.euronews.com\r\nlg43.avito.ru\r\nlgandroid.afisha.ru\r\nlgfridge.lenta.ru\r\nlh.avito.ru\r\nlhr.avito.ru\r\nli.avito.ru\r\nli.drom.ru\r\nliam.rpn.gov.ru\r\nlian.avito.ru\r\nlib-content.tutu.ru\r\nlib.adm.gov.ru\r\nlib.avito.ru\r\nlib.consultant.ru\r\nlib.litres.ru\r\nlib.minprom.gov.ru\r\nlib.rbc.ru\r\nlib.tutu.ru\r\nlib1.avito.ru\r\nlib2.avito.ru\r\nlibanswers.avito.ru\r\nliberte.avito.ru\r\nliberty.avito.ru\r\nlibexpr.kino-teatr.ru\r\nlibguides.avito.ru\r\nlibopac.avito.ru\r\nlibproxy.avito.ru\r\nlibra.avito.ru\r\nlibra.rbc.ru\r\nlibra01f.cs-minitools01f.yandex.ru\r\nlibra01h.cs-minitools01h.yandex.ru\r\nlibra01ht.cs-minitools01ht.yandex.ru\r\nlibrary.avito.ru\r\nlibraryopac.searo.who.int\r\nlibre.avito.ru\r\nlibresources.worldbank.org\r\nlibweb.avito.ru\r\nlic-49.gosuslugi.ru\r\nlic-gatchinskij3-r41.gosweb.gosuslugi.ru\r\nlic-lider-krasnoyarsk-r04.gosweb.gosuslugi.ru\r\nlic.avito.ru\r\nlic1-usman-r42.gosweb.gosuslugi.ru\r\nlic2-orenburg-r56.gosweb.gosuslugi.ru\r\nlic28-krasnoyarsk-r04.gosweb.gosuslugi.ru\r\nlicense.avito.ru\r\nlicense1.avito.ru\r\nlicensing.avito.ru\r\nliceum9.gosuslugi.ru\r\nlicey20ul.gosuslugi.ru\r\nlicey64-omsk.gosuslugi.ru\r\nliczej129barnaul-r22.gosweb.gosuslugi.ru\r\nliczej12kurgan-r45.gosweb.gosuslugi.ru\r\nliczej2tula-r71.gosweb.gosuslugi.ru\r\nliczej3surgut-r86.gosweb.gosuslugi.ru\r\nliczejkireevskij-r71.gosweb.gosuslugi.ru\r\nliczejlesnikovskij-r45.gosweb.gosuslugi.ru\r\nliczejulgtuulyanovsk-r73.gosweb.gosuslugi.ru\r\nlide-build.kino-teatr.ru\r\nlider.avito.ru\r\nliders.rusarchives.ru\r\nlideryrossii.tass.ru\r\nlidia.avito.ru\r\nliebe.avito.ru\r\nlien.avito.ru\r\nlife.avito.ru\r\nlife.mail.ru\r\nlife.megafon.ru\r\nlife.mts.ru\r\nlife.nornickel.com\r\nlife.t2.ru\r\nlife.tele2.ru\r\nlifeline.avito.ru\r\nlifepay-test.mkb.ru\r\nlifepay.mkb.ru\r\nlifestyle.avito.ru\r\nlifestyletour.max.com\r\nliga.avito.ru\r\nliga.stage.championat.com\r\nligabisnesa.vtb.ru\r\nlight.avito.ru\r\nlighthouse.avito.ru\r\nlighting.avito.ru\r\nlightning.avito.ru\r\nlightningomegacloud.mail.ru\r\nlike.avito.ru\r\nlikemore-fe.go.mail.ru\r\nlikes.services.livejournal.com\r\nliketravel.2015.yandex.ru\r\nlila.avito.ru\r\nlilac.avito.ru\r\nlili.avito.ru\r\nliliana.avito.ru\r\nlilith.avito.ru\r\nlilo.avito.ru\r\nlily.avito.ru\r\nlima.avito.ru\r\nlima.yandex.ru\r\nlimard.mail.ru\r\nlimbo.avito.ru\r\nlime.avito.ru\r\nlimelight.avito.ru\r\nlimesurvey.avito.ru\r\nlimited.avito.ru\r\nlimited.mchs.gov.ru\r\nlimited.mchs.ru\r\nlimo.avito.ru\r\nlimon.avito.ru\r\nlims.avito.ru\r\nlin.avito.ru\r\nlina.avito.ru\r\nlincoln.avito.ru\r\nlinda.avito.ru\r\nlinda.mail.ru\r\nline.avito.ru\r\nline.zdorovie-shkolnika.spb.aif.ru\r\nlineage.avito.ru\r\nlineage2.avito.ru\r\nlingua.avito.ru\r\nlingvo.yandex.ru\r\nlink-unblock.production.meduza.io\r\nlink-unblock.staging.meduza.io\r\nlink.2gis.ru\r\nlink.alfabank.ru\r\nlink.avito.ru\r\nlink.banki.ru\r\nlink.businesseducation.tinkoff.ru\r\nlink.council.gov.ru\r\nlink.crmtd.mts.ru\r\nlink.debt.open.ru\r\nlink.dom.gosuslugi.ru\r\nlink.e.corp.megafon.ru\r\nlink.e.shop.megafon.ru\r\nlink.email.domclick.ru\r\nlink.email.rosbank.ru\r\nlink.email2.kommersant.ru\r\nlink.emails.tbank.ru\r\nlink.emails.tinkoff.ru\r\nlink.hello.mneblizko.mts.ru\r\nlink.info.megafon.ru\r\nlink.mail.gosuslugi.ru\r\nlink.max.com\r\nlink.mos.ru\r\nlink.mp.rzd.ru\r\nlink.perekrestok.ru\r\nlink.profi.ru\r\nlink.promo.citilink.ru\r\nlink.service.citilink.ru\r\nlink.sovcombank.ru\r\nlink.tinkoff.ru\r\nlink.vtb.ru\r\nlink1.alfabank.ru\r\nlinkedin.avito.ru\r\nlinkin.avito.ru\r\nlinkmsg.alfabank.ru\r\nlinks.alphabank.ru\r\nlinks.app.rbc.ru\r\nlinks.avito.ru\r\nlinks.email.dns-shop.ru\r\nlinks.max.com\r\nlinks.myoffice.sberbank.ru\r\nlinks.trigger.culture.ru\r\nlinode.avito.ru\r\nlinux.avito.ru\r\nlinux.garant.ru\r\nlinux.pp.avito.ru\r\nlinux1.avito.ru\r\nlinux2.avito.ru\r\nlinux3.avito.ru\r\nlinx-cucm-sub-03.lemanapro.ru\r\nlinx-cup-sub-02.lemanapro.ru\r\nlion.avito.ru\r\nlion.yandex.ru\r\nlions.avito.ru\r\nlip.avito.ru\r\nlip.beeline.ru\r\nlipetsk.avito.ru\r\nlipetsk.beeline.ru\r\nlipetsk.dev.kp.ru\r\nlipetsk.dns-shop.ru\r\nlipetsk.drom.ru\r\nlipetsk.hh.ru\r\nlipetsk.kp.ru\r\nlipetsk.lemanapro.ru\r\nlipetsk.mts.ru\r\nlipetsk.tele2.ru\r\nlipetsk.tutu.ru\r\nlipidium.lady.mail.ru\r\nliptonicetea.afisha.ru\r\nliquid.avito.ru\r\nlira.avito.ru\r\nlis.avito.ru\r\nlisa.avito.ru\r\nliski-adm.gosuslugi.ru\r\nliski.dns-shop.ru\r\nlist.avito.ru\r\nlist.ixbt.com\r\nlist.rosbalt.ru\r\nlista.avito.ru\r\nlistas.avito.ru\r\nliste.avito.ru\r\nlisten.avito.ru\r\nlisten.litres.ru\r\nlister.avito.ru\r\nlistes.avito.ru\r\nlisticle.meduza.io\r\nlistings.avito.ru\r\nlistmarket.rutube.ru\r\nlists.avito.ru\r\nlistserv.avito.ru\r\nlistsrv.avito.ru\r\nlit.avito.ru\r\nlite-pentest.vtb.ru\r\nlite-test.vtb.ru\r\nlite.avito.ru\r\nlite.cgu.mchs.ru\r\nlite.consultant.ru\r\nlite.open.ru\r\nlite.openbank.ru\r\nlite.vtb.ru\r\nliteracy.yandex.ru\r\nliterature.avito.ru\r\nlitereader.profi.ru\r\nlitereaderpr.profi.ru\r\nlitereaderprext.profi.ru\r\nlithium.avito.ru\r\nlithuania.avito.ru\r\nlittle.avito.ru\r\nlittlerepulsive.rambler.ru\r\nlive-400-1.rutube.ru\r\nlive-gccdn.rbc.ru\r\nlive-stage.ixbt.com\r\nlive.avito.ru\r\nlive.eldorado.ru\r\nlive.ixbt.com\r\nlive.mts.ru\r\nlive.net.ixbt.com\r\nlive.ok.ru\r\nlive.open.ru\r\nlive.worldbank.org\r\nlive1.avito.ru\r\nlive2.avito.ru\r\nlive3.avito.ru\r\nlivechat.avito.ru\r\nlivechatnew.worldbank.org\r\nlivecoder06.rbc.ru\r\nlivedigitalcodecs.avito.ru\r\nlivedigitaldm.avito.ru\r\nlivedigitaldownloads.avito.ru\r\nlivedigitalmanager.avito.ru\r\nlivehdcodecs.avito.ru\r\nlivehelp.avito.ru\r\nlivehelp.worldbank.org\r\nliveid.services.livejournal.com\r\nlivemail.yandex.ru\r\nlivemediacodecs.avito.ru\r\nlivemediadm.avito.ru\r\nlivemediadownloads.avito.ru\r\nlivemediamanager.avito.ru\r\nliveprocodecs.avito.ru\r\nliveprodm.avito.ru\r\nliveprodownloads.avito.ru\r\nlivepromanager.avito.ru\r\nliverc.ixbt.com\r\nliverpool.avito.ru\r\nlivestation.video-mp4.euronews.com\r\nlivestats.avito.ru\r\nlivestream.avito.ru\r\nlivestreamfiold.videocdn.avito.ru\r\nlivesupport.avito.ru\r\nlivetime.megafon.ru\r\nliveupdate.avito.ru\r\nliveut2-dl.ok.ru\r\nliveut2-kv.ok.ru\r\nliveut2-m100.ok.ru\r\nliza-alert.tass.ru\r\nliza.avito.ru\r\nlizard.avito.ru\r\nlizard.rbc.ru\r\nlj-massmail.livejournal.com\r\nlj-notifications.livejournal.com\r\nlj.avito.ru\r\nlj.gazeta.ru\r\nlj.media.stage.videoplatform.rambler.ru\r\nlk-ausn.nalog.gov.ru\r\nlk-b2b-info.mts.ru\r\nlk-cloud.demo.megafon.ru\r\nlk-dbo.rshb.ru\r\nlk-dedmoroz2022.beeline.ru\r\nlk-developer.vtb.ru\r\nlk-ds.qsupport.mts.ru\r\nlk-ecomm.psbank.ru\r\nlk-invest.mkb.ru\r\nlk-okey.rosbank.ru\r\nlk-online.sberbank.ru\r\nlk-s7.pbx.megafon.ru\r\nlk.aif-city.spb.aif.ru\r\nlk.app-assistent.open.ru\r\nlk.arkhangelsk.mts.ru\r\nlk.avito.ru\r\nlk.beeline.ru\r\nlk.broker.vtb.ru\r\nlk.busines-lady-spb.aif.ru\r\nlk.cdn.megafon.ru\r\nlk.cloud.megafon.ru\r\nlk.corp.tutu.ru\r\nlk.cpp-nnov.nalog.ru\r\nlk.dc.cloud.mts.ru\r\nlk.dom.gosuslugi.ru\r\nlk.domofon.mts.ru\r\nlk.dostoevskiy-spb.aif.ru\r\nlk.eldorado.ru\r\nlk.emias.mos.ru\r\nlk.factoring.rshb.ru\r\nlk.fraud-protection.t2.ru\r\nlk.fsvts.gov.ru\r\nlk.gosuslugi.ru\r\nlk.gosweb.gosuslugi.ru\r\nlk.gslb.gosuslugi.ru\r\nlk.innovation.vtb.ru\r\nlk.ivanovo.mts.ru\r\nlk.kino-teatr.ru\r\nlk.megafon.ru\r\nlk.mkb.ru\r\nlk.mts.ru\r\nlk.nalog.ru\r\nlk.nov.mts.ru\r\nlk.nt01.dom.test.gosuslugi.ru\r\nlk.otello.2gis.ru\r\nlk.pogashenie.vtb.ru\r\nlk.ppzt.mos.ru\r\nlk.protect.megafon.ru\r\nlk.psbank.ru\r\nlk.psi01.dom.test.gosuslugi.ru\r\nlk.remotesupport.tass.ru\r\nlk.rosbank.ru\r\nlk.rosnedra.gov.ru\r\nlk.rpn.gov.ru\r\nlk.sit01.dom.test.gosuslugi.ru\r\nlk.sms-archive.mts.ru\r\nlk.solidwaf.megafon.ru\r\nlk.sovcombank.ru\r\nlk.spb.mts.ru\r\nlk.ssp.dom.test.gosuslugi.ru\r\nlk.ssp.rambler.ru\r\nlk.suhareva-center.mos.ru\r\nlk.svm.psbank.ru\r\nlk.taximeter.yandex.ru\r\nlk.tele2.ru\r\nlk.ug.mts.ru\r\nlk.ugeso.sakhalin.gov.ru\r\nlk.v1.rpn.gov.ru\r\nlk.v2.rpn.gov.ru\r\nlk.vologda.mts.ru\r\nlk.vtb.ru\r\nlk.wi-fi.megafon.ru\r\nlk1.beeline.ru\r\nlk2.service.nalog.ru\r\nlk2.solidwaf.megafon.ru\r\nlk3.solidwaf.megafon.ru\r\nlka.ural.mts.ru\r\nlkbg.sev.gov.ru\r\nlkbo.vtb.ru\r\nlkbroker.mkb.ru\r\nlkc.beeline.ru\r\nlkcar.transport.mos.ru\r\nlkchel.ural.mts.ru\r\nlkd.beeline.ru\r\nlkdr.nalog.gov.ru\r\nlkfl.nalog.ru\r\nlkfl2.nalog.ru\r\nlkio.nalog.ru\r\nlkip.nalog.ru\r\nlkk.vtb.ru\r\nlkkopilka.mts.ru\r\nlkkurgan.ural.mts.ru\r\nlkmagn.ural.mts.ru\r\nlkmgts.mts.ru\r\nlkmiass.ural.mts.ru\r\nlknpd.nalog.ru\r\nlkpo.dzen.ru\r\nlkpreprod.psbank.ru\r\nlkpusher-api.web-staging.2gis.ru\r\nlks-preprod.mkb.ru\r\nlktest.psbank.ru\r\nlkul.nalog.ru\r\nll.avito.ru\r\nll.yandex.ru\r\nlldcosrv2h.yandex.ru\r\nlldocsrv-tst1j.yandex.ru\r\nlldocsrv1h.yandex.ru\r\nlldocsrv1j.yandex.ru\r\nlldocsrv1m.yandex.ru\r\nlldocsrv2h.yandex.ru\r\nlldocsrv2j.yandex.ru\r\nlldocsrv2m.yandex.ru\r\nlldocsrv3h.yandex.ru\r\nlldocsrv3j.yandex.ru\r\nlldocsrv3m.yandex.ru\r\nlldocsrv4h.yandex.ru\r\nlldocsrv4j.yandex.ru\r\nlldocsrv4m.yandex.ru\r\nlldocsrv5h.yandex.ru\r\nlldocsrv5j.yandex.ru\r\nlldocsrv5m.yandex.ru\r\nlldocsrv6h.yandex.ru\r\nlldocsrv6j.yandex.ru\r\nlldocsrv6m.yandex.ru\r\nlloyd.avito.ru\r\nlm.avito.ru\r\nlm1.avito.ru\r\nlmbuacreenkey.kino-teatr.ru\r\nlmc.avito.ru\r\nlmc.rbc.ru\r\nlms-crichardson.avito.ru\r\nlms-jwckong2.avito.ru\r\nlms-test1.avito.ru\r\nlms.avito.ru\r\nlms.duma.gov.ru\r\nlms.vtb.ru\r\nln.avito.ru\r\nlngate01.tele2.ru\r\nlnr.yc.mvideo.ru\r\nlnweb18.worldbank.org\r\nlnweb28.worldbank.org\r\nlnweb77.worldbank.org\r\nlnweb90.worldbank.org\r\nlo.avito.ru\r\nlo.kino-teatr.ru\r\nlo.mts.ru\r\nlo.vip.avito.ru\r\nlo9inov.4n.yandex.ru\r\nloa.mail.ru\r\nload-m.afisha.yandex.ru\r\nload-weekend.afisha.yandex.ru\r\nload.2gis.ru\r\nload.avito.ru\r\nload.crm.2gis.ru\r\nloadtest.avito.ru\r\nloans.tinkoff.ru\r\nlobby.avito.ru\r\nlobnya.home.megafon.ru\r\nlobnya.mts.ru\r\nlobo.avito.ru\r\nlocal.2gis.ru\r\nlocal.api.avito.ru\r\nlocal.avito.ru\r\nlocal.drom.ru\r\nlocal.secure.avito.ru\r\nlocalerequestlistene.test.euronews.com\r\nlocalhost.avito.ru\r\nlocalhost.blog.avito.ru\r\nlocalhost.rbc.ru\r\nlocalizationlms.avito.ru\r\nlocate.avito.ru\r\nlocator.avito.ru\r\nlocator.beeline.ru\r\nlocator.mironline.ru\r\nlock.avito.ru\r\nlock.kino-teatr.ru\r\nlockter.sovcombank.ru\r\nloco.avito.ru\r\nlod.mail.ru\r\nlog.app-assistent.open.ru\r\nlog.avito.ru\r\nlog.dns-shop.ru\r\nlog.domofon.mts.ru\r\nlog.duma.gov.ru\r\nlog.dzen.ru\r\nlog.ren.tv\r\nlog.rutube.ru\r\nlog.strm.yandex.ru\r\nlog.svc.paas.cloud.mts.ru\r\nlog1.avito.ru\r\nlogan.avito.ru\r\nlogbook.avito.ru\r\nlogger-and-collector-tests.ing.k8s.dev.ivi.ru\r\nlogger.avito.ru\r\nlogger.culture.ru\r\nlogger.id.sber.ru\r\nlogger01.db.rbc.ru\r\nlogging.avito.ru\r\nloghost.avito.ru\r\nlogic.avito.ru\r\nlogiciel.avito.ru\r\nlogico.2015.yandex.ru\r\nlogin-funtest.mts.ru\r\nlogin-loadtest.mts.ru\r\nlogin-rc.yandex.ru\r\nlogin-wifi.sberbank.ru\r\nlogin.avito.ru\r\nlogin.beeline.ru\r\nlogin.citilink.ru\r\nlogin.consultant.ru\r\nlogin.cs7777.vk.com\r\nlogin.ixbt.com\r\nlogin.kino-teatr.ru\r\nlogin.magnit.ru\r\nlogin.mdm.megafon.ru\r\nlogin.mos.ru\r\nlogin.mts.ru\r\nlogin.profi.ru\r\nlogin.tau.vk.com\r\nlogin.tele2.ru\r\nlogin.test-gp.mcx.gov.ru\r\nlogin.yandex.ru\r\nlogin1.avito.ru\r\nlogin2.avito.ru\r\nlogist.russianpost.ru\r\nlogistic.avito.ru\r\nlogistics-go.x5.ru\r\nlogistics-lastmile-dev1.yc.mvideo.ru\r\nlogistics-lastmile-e2e-prod1.yc.mvideo.ru\r\nlogistics-lastmile-preprod1.yc.mvideo.ru\r\nlogistics.2gis.ru\r\nlogistics.avito.ru\r\nlogistics.open.ru\r\nlogistics.x5.ru\r\nlogman2.mail.ru\r\nlogman3.mail.ru\r\nlogman4.mail.ru\r\nlogman5.mail.ru\r\nlogman6.mail.ru\r\nlogo.avito.ru\r\nlogon.avito.ru\r\nlogos.avito.ru\r\nlogos.myoffice.sberbank.ru\r\nlogos.sports.ru\r\nlogos.yandex.ru\r\nlogout.avito.ru\r\nlogpush-stat.prod.meduza.io\r\nlogpush-stat.production.meduza.io\r\nlogs.avito.ru\r\nlogs.dsp.rambler.ru\r\nlogs.kino-teatr.ru\r\nlogs3.mail.ru\r\nlogs4.mail.ru\r\nlogserver.avito.ru\r\nloja.avito.ru\r\nloja.kino-teatr.ru\r\nlojas.avito.ru\r\nloke.avito.ru\r\nloki.avito.ru\r\nloki24718.mk.ru\r\nloko.avito.ru\r\nloko07092011.championat.com\r\nlokum.yandex.ru\r\nlol.avito.ru\r\nlola.avito.ru\r\nloli.avito.ru\r\nlolita.avito.ru\r\nlolo.avito.ru\r\nlolol.avito.ru\r\nlombard.58.yandex.ru\r\nlondon.avito.ru\r\nlong.avito.ru\r\nlongevity.avito.ru\r\nlongisland.avito.ru\r\nlongread.stage.championat.com\r\nlook.avito.ru\r\nlook.lemanapro.ru\r\nlook.open.ru\r\nlookatme.avito.ru\r\nloopback.avito.ru\r\nlopess.rbc.ru\r\nlord.avito.ru\r\nlords.avito.ru\r\nlori.avito.ru\r\nlosangeles.avito.ru\r\nloseb.mail.ru\r\nlost.avito.ru\r\nloto.avito.ru\r\nloto.iz.ru\r\nlotro.mail.ru\r\nlottery.avito.ru\r\nlottery.magnit.ru\r\nlottery.t2.ru\r\nlotto.avito.ru\r\nlotus.avito.ru\r\nlotus.tele2.ru\r\nloud-fans.project.tinkoff.ru\r\nlouis.avito.ru\r\nlouisiana.avito.ru\r\nlouisville.avito.ru\r\nloulou.avito.ru\r\nlounge.avito.ru\r\nlove.1tv.ru\r\nlove.avito.ru\r\nlove.mail.ru\r\nlove.meduza.io\r\nlove.tele2.ru\r\nlove1.avito.ru\r\nlove2.avito.ru\r\nlovely.avito.ru\r\nlover.avito.ru\r\nlovers.avito.ru\r\nloves.avito.ru\r\nlow.avito.ru\r\nloyalty.alfabank.ru\r\nloyalty.avito.ru\r\nloyalty.mironline.ru\r\nloza.mail.ru\r\nlp-test.mkb.ru\r\nlp.avito.ru\r\nlp.beeline.ru\r\nlp.mts.ru\r\nlp.psbank.ru\r\nlp.pulscen.ru\r\nlp.tele2.ru\r\nlp.tinkoff.ru\r\nlp1.avito.ru\r\nlp1.tele2.ru\r\nlp2.avito.ru\r\nlp2.tele2.ru\r\nlp3.avito.ru\r\nlp4.avito.ru\r\nlpekaln.ing.k8s.dev.ivi.ru\r\nlpi.worldbank.org\r\nlpisurvey.worldbank.org\r\nlpisurvey2014.worldbank.org\r\nlpisurvey2016.worldbank.org\r\nlpl.30.yandex.ru\r\nlpm.avito.ru\r\nlpn.srv.hub.litres.ru\r\nlps.avito.ru\r\nlpse.avito.ru\r\nlpta001.itd.avito.ru\r\nlpta009.itd.avito.ru\r\nlrf1.mail.ru\r\nlrf2.mail.ru\r\nlrf3.mail.ru\r\nlrf4.mail.ru\r\nlrf5.mail.ru\r\nlrf6.mail.ru\r\nlrhmru.kino-teatr.ru\r\nlrp-a1.tinkoff.ru\r\nlrp.lb.tinkoff.ru\r\nls.avito.ru\r\nls.content.tinkoff.ru\r\nls.rusarchives.ru\r\nlsg.avito.ru\r\nlsh.avito.ru\r\nlsrp.avito.ru\r\nlst.avito.ru\r\nlsv00form-builder.dev.iac.mchs.ru\r\nlsweb-ext01.msk.vtb.ru\r\nlsweb-ext02.msk.vtb.ru\r\nlt-ibrb.test.vtb.ru\r\nlt-mbrb.test.vtb.ru\r\nlt-online.test.vtb.ru\r\nlt.avito.ru\r\nlt.garant.ru\r\nltauthdev.worldbank.org\r\nltauthdev1.worldbank.org\r\nltautholc.worldbank.org\r\nltautholcqa.worldbank.org\r\nltautholcuat.worldbank.org\r\nltauthprs.worldbank.org\r\nltauthprsqa.worldbank.org\r\nltauthstg.worldbank.org\r\nltback1.yandex.ru\r\nltback2.yandex.ru\r\nltfront1.yandex.ru\r\nltfront2.yandex.ru\r\nlts.avito.ru\r\nltx.avito.ru\r\nltxreserverd.mail.ru\r\nlua-stdlib.kino-teatr.ru\r\nlua.avito.ru\r\nlucas.avito.ru\r\nlucas.yandex.ru\r\nlucca.avito.ru\r\nlucia.avito.ru\r\nlucifer.avito.ru\r\nlucius.avito.ru\r\nluck.avito.ru\r\nluck.mail.ru\r\nlucky.avito.ru\r\nlucky7.avito.ru\r\nlucy.avito.ru\r\nlugansk.kp.ru\r\nluggage.avito.ru\r\nluigi.avito.ru\r\nluis.avito.ru\r\nluka.avito.ru\r\nlukas.avito.ru\r\nlukasz.avito.ru\r\nluke.avito.ru\r\nlukino.hh.ru\r\nlukomski-tribuna.sports.ru\r\nlulu.avito.ru\r\nlumiere.avito.ru\r\nlumiere00.yandex.ru\r\nlumiere01.yandex.ru\r\nluna.avito.ru\r\nluna.mail.ru\r\nlunar.avito.ru\r\nlupus.avito.ru\r\nlust.avito.ru\r\nluther.avito.ru\r\nlux.avito.ru\r\nluxo.rbc.ru\r\nluxor.avito.ru\r\nluxury.avito.ru\r\nlv.avito.ru\r\nlv121101224239.avito.ru\r\nlvs.avito.ru\r\nlvs1.avito.ru\r\nlvs2.avito.ru\r\nlw.avito.ru\r\nlx.avito.ru\r\nlxc-jitsi-test.msk.avito.ru\r\nlxp.academy.who.int\r\nlxy.avito.ru\r\nly.avito.ru\r\nlyc86barnaul.gosuslugi.ru\r\nlync-fe-01.corp.mvideo.ru\r\nlync-fe-02.corp.mvideo.ru\r\nlync-fe-03.corp.mvideo.ru\r\nlync-vm01.cea.gov.ru\r\nlync-vm02.cea.gov.ru\r\nlync.avito.ru\r\nlync.euronews.com\r\nlync.sakha.gov.ru\r\nlync.sberbank.ru\r\nlyncaccess.avito.ru\r\nlyncaccess.psbank.ru\r\nlyncav.avito.ru\r\nlyncchat.mts.ru\r\nlyncconf.mts.ru\r\nlyncdiscover.alfabank.ru\r\nlyncdiscover.avito.ru\r\nlyncdiscover.cea.gov.ru\r\nlyncdiscover.euronews.com\r\nlyncdiscover.ext.euronews.com\r\nlyncdiscover.external.t2.ru\r\nlyncdiscover.external.tele2.ru\r\nlyncdiscover.magnit.ru\r\nlyncdiscover.mkb.ru\r\nlyncdiscover.msk.vtb.ru\r\nlyncdiscover.mts.ru\r\nlyncdiscover.mvideo.ru\r\nlyncdiscover.ntv.ru\r\nlyncdiscover.open.ru\r\nlyncdiscover.psbank.ru\r\nlyncdiscover.ria.ru\r\nlyncdiscover.rosbank.ru\r\nlyncdiscover.russianpost.ru\r\nlyncdiscover.sakha.gov.ru\r\nlyncdiscover.sberbank.ru\r\nlyncdiscover.skype.ec.mts.ru\r\nlyncdiscover.t2.ru\r\nlyncdiscoverinternal.avito.ru\r\nlyncdiscoverinternal.external.tele2.ru\r\nlyncdiscoverinternal.mkb.ru\r\nlyncdiscoverinternal.sakha.gov.ru\r\nlyncedge.avito.ru\r\nlyncedge.zdorovie-shkolnika.spb.aif.ru\r\nlyncext.avito.ru\r\nlyncext.cea.gov.ru\r\nlynch.avito.ru\r\nlyncmeeting.euronews.com\r\nlyncpool01-ext.russianpost.ru\r\nlyncpool01.main.russianpost.ru\r\nlyncscheduler.euronews.com\r\nlyncsip.mvideo.ru\r\nlyncwc.ntv.ru\r\nlyncweb.avito.ru\r\nlyncweb.mvideo.ru\r\nlyncweb.sberbank.ru\r\nlyncwebapps.psbank.ru\r\nlyncwebconf.avito.ru\r\nlyncwebconf.euronews.com\r\nlyncws.mts.ru\r\nlyncws.ntv.ru\r\nlyncws.open.ru\r\nlyncws1.mts.ru\r\nlynn.avito.ru\r\nlynx.avito.ru\r\nlynx.yandex.ru\r\nlyon.avito.ru\r\nlyra.avito.ru\r\nlyris.avito.ru\r\nlys.avito.ru\r\nlytkarino.drom.ru\r\nlyubercy.home.megafon.ru\r\nlyubertsi.dns-shop.ru\r\nlyubertsy.drom.ru\r\nlyudi-rzd.life.ru\r\nlz.avito.ru\r\nm-beta.yandex.ru\r\nm-c.t2.ru\r\nm-c.tele2.ru\r\nm-dev.avito.ru\r\nm-k.avito.ru\r\nm-lib.litres.ru\r\nm-test.avito.ru\r\nm.2gis.ru\r\nm.37251.yandex.ru\r\nm.82.yandex.ru\r\nm.9111.ru\r\nm.abakan.dev.kp.ru\r\nm.abakan.kp.ru\r\nm.afisha.ru\r\nm.afisha.yandex.ru\r\nm.aleksandrova.dev.kp.ru\r\nm.alfabank.ru\r\nm.alt.dev.kp.ru\r\nm.alt.kp.ru\r\nm.amur.dev.kp.ru\r\nm.amur.kp.ru\r\nm.angius.yandex.ru\r\nm.arden.yandex.ru\r\nm.arh.dev.kp.ru\r\nm.arh.kp.ru\r\nm.astrakhan.dev.kp.ru\r\nm.astrakhan.kp.ru\r\nm.auto.kp.ru\r\nm.auto.yandex.ru\r\nm.avia.tutu.ru\r\nm.avis.yandex.ru\r\nm.avito.ru\r\nm.babyblog.ru\r\nm.baku.yandex.ru\r\nm.balkans.dev.kp.ru\r\nm.balkans.kp.ru\r\nm.bazar.babyblog.ru\r\nm.bel.dev.kp.ru\r\nm.bel.kp.ru\r\nm.belarus.kp.ru\r\nm.belgorod.tutu.ru\r\nm.beta-taxi.yandex.ru\r\nm.beta.avito.ru\r\nm.beta.kp.ru\r\nm.blogs.yandex.ru\r\nm.boulogne.yandex.ru\r\nm.bryansk.dev.kp.ru\r\nm.bryansk.kp.ru\r\nm.bryansk.tutu.ru\r\nm.bus.tutu.ru\r\nm.byakko.yandex.ru\r\nm.canada.dev.kp.ru\r\nm.championat.com\r\nm.chel.dev.kp.ru\r\nm.chel.kp.ru\r\nm.chita.dev.kp.ru\r\nm.chita.kp.ru\r\nm.chukotka.kp.ru\r\nm.citilink.ru\r\nm.class.rambler.ru\r\nm.corniglia.yandex.ru\r\nm.crimea.dev.kp.ru\r\nm.crimea.kp.ru\r\nm.crimea.ria.ru\r\nm.cs7777.vk.com\r\nm.cyber.sports.ru\r\nm.cyprus.dev.kp.ru\r\nm.cyprus.kp.ru\r\nm.czech.dev.kp.ru\r\nm.dag.kp.ru\r\nm.dashboards.mvideo.ru\r\nm.dating.rambler.ru\r\nm.demo.avito.ru\r\nm.demomoney.yandex.ru\r\nm.dev.avito.ru\r\nm.dev.kp.ru\r\nm.disk.yandex.ru\r\nm.dns-shop.ru\r\nm.doctor.rambler.ru\r\nm.doktor.rambler.ru\r\nm.dom.gosuslugi.ru\r\nm.dom.kp.ru\r\nm.donetsk.kp.ru\r\nm.dv.dev.kp.ru\r\nm.dv.kp.ru\r\nm.dzen.ru\r\nm.eao.kp.ru\r\nm.egypt.dev.kp.ru\r\nm.ekburg.tutu.ru\r\nm.elbrus.yandex.ru\r\nm.encyber.sports.ru\r\nm.euro.dev.kp.ru\r\nm.euronews.com\r\nm.feedback.yandex.ru\r\nm.feedback2.yandex.ru\r\nm.felis.yandex.ru\r\nm.finance.rambler.ru\r\nm.fotki.yandex.ru\r\nm.front99.gazeta.ru\r\nm.ftp.kino-teatr.ru\r\nm.funai.yandex.ru\r\nm.gaki.yandex.ru\r\nm.games.rambler.ru\r\nm.garant.ru\r\nm.gazeta.ru\r\nm.gifts.mail.ru\r\nm.gismeteo.ru\r\nm.globus.yandex.ru\r\nm.go.tutu.ru\r\nm.golbat.yandex.ru\r\nm.gorod.afisha.ru\r\nm.gosuslugi.ru\r\nm.government.ru\r\nm.gudok.tele2.ru\r\nm.hab.dev.kp.ru\r\nm.hab.kp.ru\r\nm.habr.com\r\nm.hakutaku.yandex.ru\r\nm.herson.kp.ru\r\nm.hida.yandex.ru\r\nm.home.garant.ru\r\nm.horoscopes.rambler.ru\r\nm.hotaru.yandex.ru\r\nm.il.kp.ru\r\nm.images.rambler.ru\r\nm.images.stand22.rambler.ru\r\nm.images.stand26.rambler.ru\r\nm.internet.yandex.ru\r\nm.invest.khv.gov.ru\r\nm.irk.dev.kp.ru\r\nm.irk.kp.ru\r\nm.irkutsk.tutu.ru\r\nm.isla.yandex.ru\r\nm.ivanovo.dev.kp.ru\r\nm.ixbt.com\r\nm.izh.dev.kp.ru\r\nm.izh.kp.ru\r\nm.kaliningrad.dev.kp.ru\r\nm.kaliningrad.kp.ru\r\nm.kaluga.kp.ru\r\nm.kaluga.tutu.ru\r\nm.kamchatka.kp.ru\r\nm.kani.yandex.ru\r\nm.kappa.yandex.ru\r\nm.kazan.dev.kp.ru\r\nm.kazan.kp.ru\r\nm.kazan.tutu.ru\r\nm.kem.dev.kp.ru\r\nm.kem.kp.ru\r\nm.kino-teatr.ru\r\nm.kino.stage.aggregator.rambler.ru\r\nm.kinopoisk.ru\r\nm.kirin.yandex.ru\r\nm.kirov.dev.kp.ru\r\nm.kirov.kp.ru\r\nm.kita.yandex.ru\r\nm.kitsune.yandex.ru\r\nm.klass.rambler.ru\r\nm.kobe.yandex.ru\r\nm.koga.yandex.ru\r\nm.komi.dev.kp.ru\r\nm.komi.kp.ru\r\nm.komission.vtb.ru\r\nm.kostroma.kp.ru\r\nm.kp.ru\r\nm.kp.vedomosti.ru\r\nm.krasnodar.tutu.ru\r\nm.krsk.dev.kp.ru\r\nm.krsk.kp.ru\r\nm.kuban.dev.kp.ru\r\nm.kuban.kp.ru\r\nm.kursk.dev.kp.ru\r\nm.kursk.kp.ru\r\nm.kursk.tutu.ru\r\nm.kuse.yandex.ru\r\nm.lady.mail.ru\r\nm.lastochka.tutu.ru\r\nm.legal.yandex.ru\r\nm.lenta.ru\r\nm.lenta.yandex.ru\r\nm.lepetsk.kp.ru\r\nm.lipetsk.dev.kp.ru\r\nm.lipetsk.kp.ru\r\nm.lipetsk.tutu.ru\r\nm.livejournal.com\r\nm.lugansk.kp.ru\r\nm.magadan.kp.ru\r\nm.magnit.ru\r\nm.mahachkala.tutu.ru\r\nm.mail.ru\r\nm.maps.yandex.ru\r\nm.market.pepelac01hp.yandex.ru\r\nm.market.pepelac02hp.yandex.ru\r\nm.market.secret.yandex.ru\r\nm.market.yandex.ru\r\nm.mdm.beeline.ru\r\nm.med.kp.ru\r\nm.metro.yandex.ru\r\nm.minprom.gov.ru\r\nm.mkb.ru\r\nm.money.yandex.ru\r\nm.montenegro.dev.kp.ru\r\nm.mos.ru\r\nm.mosobl.kp.ru\r\nm.msk.dev.kp.ru\r\nm.msk.kp.ru\r\nm.mts.ru\r\nm.murmansk.dev.kp.ru\r\nm.murmansk.kp.ru\r\nm.my.mail.ru\r\nm.nahodki.yandex.ru\r\nm.navigator.megafon.ru\r\nm.new.pogoda.rambler.ru\r\nm.news.yandex.ru\r\nm.news24.dev.kp.ru\r\nm.nnov.dev.kp.ru\r\nm.nnov.kp.ru\r\nm.nsk.dev.kp.ru\r\nm.nsk.kp.ru\r\nm.oauth-rc.yandex.ru\r\nm.oauth.yandex.ru\r\nm.ok.ru\r\nm.old.afisha.yandex.ru\r\nm.omsk.dev.kp.ru\r\nm.omsk.kp.ru\r\nm.onlinetrade.ru\r\nm.openid.yandex.ru\r\nm.orel.dev.kp.ru\r\nm.orel.kp.ru\r\nm.orel.tutu.ru\r\nm.orenburg.kp.ru\r\nm.peacock.vedomosti.ru\r\nm.penza.dev.kp.ru\r\nm.penza.kp.ru\r\nm.perm.dev.kp.ru\r\nm.perm.kp.ru\r\nm.pikabu.ru\r\nm.pogoda.yandex.ru\r\nm.pool.avito.ru\r\nm.popov.dev.kp.ru\r\nm.pro.avito.ru\r\nm.psi.mchs.gov.ru\r\nm.psi.mchs.ru\r\nm.pskov.dev.kp.ru\r\nm.pskov.kp.ru\r\nm.rabota.yandex.ru\r\nm.rambler.ru\r\nm.rasp.yandex.ru\r\nm.rbc.ru\r\nm.rnd.consultant.ru\r\nm.rosbalt.ru\r\nm.rostov-na-donu.tutu.ru\r\nm.rostov.dev.kp.ru\r\nm.rostov.kp.ru\r\nm.ryazan.dev.kp.ru\r\nm.ryazan.kp.ru\r\nm.ryazan.tutu.ru\r\nm.s-peacock.vedomosti.ru\r\nm.sakhalin.kp.ru\r\nm.samara.dev.kp.ru\r\nm.samara.kp.ru\r\nm.sapsan.tutu.ru\r\nm.saratov.dev.kp.ru\r\nm.saratov.kp.ru\r\nm.search.rambler.ru\r\nm.sed.khv.gov.ru\r\nm.service.kp.ru\r\nm.sevastopol.kp.ru\r\nm.shark-ha-ovh-1.vedomosti.ru\r\nm.shark-ha-ovh-2.vedomosti.ru\r\nm.shark.vedomosti.ru\r\nm.singapore.vedomosti.ru\r\nm.slovari.yandex.ru\r\nm.smol.dev.kp.ru\r\nm.smol.kp.ru\r\nm.smolensk.tutu.ru\r\nm.sochi.tutu.ru\r\nm.soft.yandex.ru\r\nm.sp-money.yandex.ru\r\nm.sp.angius.yandex.ru\r\nm.sp.arden.yandex.ru\r\nm.sp.avis.yandex.ru\r\nm.sp.babyblog.ru\r\nm.sp.baku.yandex.ru\r\nm.sp.boulogne.yandex.ru\r\nm.sp.byakko.yandex.ru\r\nm.sp.corniglia.yandex.ru\r\nm.sp.demomoney.yandex.ru\r\nm.sp.elbrus.yandex.ru\r\nm.sp.felis.yandex.ru\r\nm.sp.funai.yandex.ru\r\nm.sp.gaki.yandex.ru\r\nm.sp.globus.yandex.ru\r\nm.sp.golbat.yandex.ru\r\nm.sp.hakutaku.yandex.ru\r\nm.sp.hida.yandex.ru\r\nm.sp.hotaru.yandex.ru\r\nm.sp.isla.yandex.ru\r\nm.sp.kani.yandex.ru\r\nm.sp.kappa.yandex.ru\r\nm.sp.kirin.yandex.ru\r\nm.sp.kita.yandex.ru\r\nm.sp.kitsune.yandex.ru\r\nm.sp.kobe.yandex.ru\r\nm.sp.koga.yandex.ru\r\nm.sp.kuse.yandex.ru\r\nm.spb.dev.kp.ru\r\nm.spb.kp.ru\r\nm.sports.ru\r\nm.stage.avito.ru\r\nm.stage.championat.com\r\nm.stage.games.rambler.ru\r\nm.stage.zdorovie-shkolnika.spb.aif.ru\r\nm.staging.avito.ru\r\nm.stand22.rambler.ru\r\nm.stand26.rambler.ru\r\nm.static.gazeta.ru\r\nm.stav.dev.kp.ru\r\nm.stav.kp.ru\r\nm.stavropol.tutu.ru\r\nm.store.yandex.ru\r\nm.tambov.dev.kp.ru\r\nm.tambov.kp.ru\r\nm.tambov.tutu.ru\r\nm.tau.vk.com\r\nm.taxi-partners.yandex.ru\r\nm.taxi.yandex.ru\r\nm.tele2.ru\r\nm.test.avito.ru\r\nm.tinkoff.ru\r\nm.tomsk.dev.kp.ru\r\nm.tomsk.kp.ru\r\nm.tours.tutu.ru\r\nm.travel.tele2.ru\r\nm.travel.yandex.ru\r\nm.tula.dev.kp.ru\r\nm.tula.kp.ru\r\nm.tula.tutu.ru\r\nm.tumen.dev.kp.ru\r\nm.tumen.kp.ru\r\nm.tune.yandex.ru\r\nm.tutu.ru\r\nm.tv.yandex.ru\r\nm.tver.dev.kp.ru\r\nm.tver.kp.ru\r\nm.ufa.dev.kp.ru\r\nm.ufa.kp.ru\r\nm.ugra.dev.kp.ru\r\nm.ugra.kp.ru\r\nm.ul.dev.kp.ru\r\nm.ul.kp.ru\r\nm.ulan.kp.ru\r\nm.unicreditbank.ru\r\nm.ural.dev.kp.ru\r\nm.ural.kp.ru\r\nm.vk.com\r\nm.vkvideo.cs7777.vk.com\r\nm.vkvideo.tau.vk.com\r\nm.vladimir.dev.kp.ru\r\nm.vladimir.kp.ru\r\nm.vmeste.yandex.ru\r\nm.vnov.dev.kp.ru\r\nm.vnov.kp.ru\r\nm.volgograd.dev.kp.ru\r\nm.volgograd.kp.ru\r\nm.vologda.dev.kp.ru\r\nm.vologda.kp.ru\r\nm.voronezh.tutu.ru\r\nm.vozduh.afisha.ru\r\nm.vrn.dev.kp.ru\r\nm.vrn.kp.ru\r\nm.vtb.ru\r\nm.weather.rambler.ru\r\nm.weekend.rambler.ru\r\nm.www.sports.ru\r\nm.yaca.yandex.ru\r\nm.yakutia.dev.kp.ru\r\nm.yakutia.kp.ru\r\nm.yamal.dev.kp.ru\r\nm.yamal.kp.ru\r\nm.yandex.ru\r\nm.yar.dev.kp.ru\r\nm.yar.kp.ru\r\nm.zap.kp.ru\r\nm.zen-test.yandex.ru\r\nm.zg.megafon.ru\r\nm0.avito.ru\r\nm00.emitbase.rbc.ru\r\nm00.v2.app.rbc.ru\r\nm00.v2.auth.rbc.ru\r\nm00.v2.jobs.rbc.ru\r\nm00.v3.bc.rbc.ru\r\nm00.v3.jobs.rbc.ru\r\nm00.v5.magazine.rbc.ru\r\nm01.autodiscover.rbc.ru\r\nm01.avito.ru\r\nm01.captcha.rbc.ru\r\nm01.data.finance.rbc.ru\r\nm01.dev.elk.marketing.rbc.ru\r\nm01.elk.marketing.rbc.ru\r\nm01.emitbase.rbc.ru\r\nm01.kaliningrad-sdelano.rbc.ru\r\nm01.libarchive.infra.rbc.ru\r\nm01.logstash.infra.rbc.ru\r\nm01.staging.v1.amp.rbc.ru\r\nm01.staging.v1.auth-rt.rbc.ru\r\nm01.staging.v2.app.rbc.ru\r\nm01.staging.v3.bc.rbc.ru\r\nm01.staging.v3.jobs.rbc.ru\r\nm01.staging.v5.magazine.rbc.ru\r\nm01.stands.v1.amp.rbc.ru\r\nm01.stands.v5.cash.rbc.ru\r\nm01.telegraf.dp.infra.rbc.ru\r\nm01.test.emitbase.rbc.ru\r\nm01.test.files.rbc.ru\r\nm01.test.kafka.infra.rbc.ru\r\nm01.test.v1.bo.finance.rbc.ru\r\nm01.test.v2.app.rbc.ru\r\nm01.test.v2.auth.rbc.ru\r\nm01.test.v3.bc.rbc.ru\r\nm01.test.v5.cash.rbc.ru\r\nm01.test.v5.magazine.rbc.ru\r\nm01.test.v6.bo.rbc.ru\r\nm01.test2.v2.app.rbc.ru\r\nm01.v1.amp.rbc.ru\r\nm01.v1.auth-rt.rbc.ru\r\nm01.v1.autotest.rbc.ru\r\nm01.v5.magazine.rbc.ru\r\nm02.captcha.rbc.ru\r\nm02.dev.elk.marketing.rbc.ru\r\nm02.elastic-dp.infra.rbc.ru\r\nm02.emitbase.rbc.ru\r\nm02.files.rbc.ru\r\nm02.kaliningrad-sdelano.rbc.ru\r\nm02.logstash.infra.rbc.ru\r\nm02.staging.v1.amp.rbc.ru\r\nm02.staging.v2.auth.rbc.ru\r\nm02.staging.v3.jobs.rbc.ru\r\nm02.staging.v5.magazine.rbc.ru\r\nm02.test.captcha.rbc.ru\r\nm02.test.data.finance.rbc.ru\r\nm02.test.emitbase.rbc.ru\r\nm02.test.kafka.infra.rbc.ru\r\nm02.test.v1.amp.rbc.ru\r\nm02.test.v1.bo.finance.rbc.ru\r\nm02.test.v2.app.rbc.ru\r\nm02.test.v2.auth.rbc.ru\r\nm02.test.v3.bc.rbc.ru\r\nm02.test2.v2.app.rbc.ru\r\nm02.v1.amp.rbc.ru\r\nm02.v1.auth-rt.rbc.ru\r\nm02.v1.autotest.rbc.ru\r\nm02.v2.app.rbc.ru\r\nm02.v2.auth.rbc.ru\r\nm02.v2.jobs.rbc.ru\r\nm02.v3.bc.rbc.ru\r\nm03.elk.marketing.rbc.ru\r\nm03.test.kafka.infra.rbc.ru\r\nm03.v2.auth.rbc.ru\r\nm04.elastic-dp.infra.rbc.ru\r\nm04.elk.marketing.rbc.ru\r\nm04.v1.auth-rt.rbc.ru\r\nm05.elastic-dp.infra.rbc.ru\r\nm05.test.ls.infra.rbc.ru\r\nm06.elastic-dp.infra.rbc.ru\r\nm07.elastic-dp.infra.rbc.ru\r\nm1-service.pochta.ru\r\nm1.avito.ru\r\nm1.m24.ru\r\nm10.avito.ru\r\nm10.v5.cash.rbc.ru\r\nm10.vk.com\r\nm11.avito.ru\r\nm11.v5.cash.rbc.ru\r\nm12.avito.ru\r\nm12.v5.cash.rbc.ru\r\nm13.avito.ru\r\nm176-96-238-140.cust.tele2.ru\r\nm18.avito.ru\r\nm19.avito.ru\r\nm2-iva2.yandex.ru\r\nm2-mt2.yandex.ru\r\nm2-pue2.yandex.ru\r\nm2.avito.ru\r\nm20.avito.ru\r\nm20.vk.com\r\nm2d-ftp04.tass.ru\r\nm2m-auto.mts.ru\r\nm2m-manager.mts.ru\r\nm2m.avito.ru\r\nm2m.mts.ru\r\nm2m.t2.ru\r\nm2m.tele2.ru\r\nm2mgis.mts.ru\r\nm3.avito.ru\r\nm35-vgp3.gosuslugi.ru\r\nm4.avito.ru\r\nm4d.nalog.gov.ru\r\nm5.avito.ru\r\nm5store.tinkoff.ru\r\nm6.avito.ru\r\nm7.avito.ru\r\nm8.avito.ru\r\nm9.avito.ru\r\nm9.msk-ix.cloud.yandex.ru\r\nma.avito.ru\r\nma.kinopoisk.ru\r\nma2.fano.gov.ru\r\nma3.fano.gov.ru\r\nmaas.msk.mts.ru\r\nmaas360.sberbank.ru\r\nmaat.avito.ru\r\nmab.avito.ru\r\nmac.avito.ru\r\nmac.yc.mvideo.ru\r\nmac1.avito.ru\r\nmac2.avito.ru\r\nmacbeth.avito.ru\r\nmacbook.avito.ru\r\nmacduff.avito.ru\r\nmacedonia.avito.ru\r\nmach.avito.ru\r\nmacho.avito.ru\r\nmacos.avito.ru\r\nmad.avito.ru\r\nmada.avito.ru\r\nmada.kino-teatr.ru\r\nmadagascar.avito.ru\r\nmade.by.avito.ru\r\nmadeinrussia.bizconf.rbc.ru\r\nmadeinrussia.gov.ru\r\nmadi.avito.ru\r\nmadison.avito.ru\r\nmadmax.avito.ru\r\nmadonna.avito.ru\r\nmadonna.beeline.ru\r\nmadonnasber.afisha.ru\r\nmadrid.avito.ru\r\nmadzhalis.drom.ru\r\nmadzi.76.yandex.ru\r\nmae.avito.ru\r\nmaemo.ixbt.com\r\nmaestro.avito.ru\r\nmafia.avito.ru\r\nmafiawars.avito.ru\r\nmag.afisha.ru\r\nmag.avito.ru\r\nmag.ixbt.com\r\nmag.proza.ru\r\nmag.stihi.ru\r\nmag1.avito.ru\r\nmaga.avito.ru\r\nmagadan.dev.home.megafon.ru\r\nmagadan.drom.ru\r\nmagadan.kp.ru\r\nmagadan.lemanapro.ru\r\nmagadan.mts.ru\r\nmagadan.shop.megafon.ru\r\nmagadan.tele2.ru\r\nmagas.lemanapro.ru\r\nmagas.mts.ru\r\nmagaz.meduza.io\r\nmagazin.avito.ru\r\nmagazinda.youdo.com\r\nmagazine.avito.ru\r\nmagazine.rbc.ru\r\nmagazines.beeline.ru\r\nmagazines.tele2.ru\r\nmage.avito.ru\r\nmagellan.avito.ru\r\nmagenta.avito.ru\r\nmagento.avito.ru\r\nmagento.kino-teatr.ru\r\nmages.kino-teatr.ru\r\nmaggie.avito.ru\r\nmagic.avito.ru\r\nmagic.mail.ru\r\nmagiclinks.yandex.ru\r\nmagix.avito.ru\r\nmagma.avito.ru\r\nmagnet.avito.ru\r\nmagneteam.magnit.ru\r\nmagneto.avito.ru\r\nmagnit-api-cdn.prod.ya.magnit.ru\r\nmagnit.youdo.com\r\nmagniteam.magnit.ru\r\nmagnitogorsk.avito.ru\r\nmagnitogorsk.drom.ru\r\nmagnitogorsk.lemanapro.ru\r\nmagnitogorsk.mts.ru\r\nmagnolia.avito.ru\r\nmagnum-mobile.magnit.ru\r\nmagnum.avito.ru\r\nmagnum.magnit.ru\r\nmagnus.avito.ru\r\nmagpie.avito.ru\r\nmagportal.lemanapro.ru\r\nmagrathea2.yandex.ru\r\nmahachkala.avito.ru\r\nmahachkala.lemanapro.ru\r\nmahaons.2016.yandex.ru\r\nmahara.avito.ru\r\nmahdi.avito.ru\r\nmaher.avito.ru\r\nmahjong.beeline.ru\r\nmaia.avito.ru\r\nmaikop.dns-shop.ru\r\nmail-01.lemanapro.ru\r\nmail-02.lemanapro.ru\r\nmail-03.lemanapro.ru\r\nmail-04.lemanapro.ru\r\nmail-1.avito.ru\r\nmail-2.avito.ru\r\nmail-fcod.bus.gov.ru\r\nmail-fcod.zakupki.gov.ru\r\nmail-gw.avito.ru\r\nmail-gw1.tele2.ru\r\nmail-gw2.tele2.ru\r\nmail-in.avito.ru\r\nmail-int.avito.ru\r\nmail-mobile.avito.ru\r\nmail-old.avito.ru\r\nmail-open.open.ru\r\nmail-out.avito.ru\r\nmail-pda.rambler.ru\r\nmail-rcod.bus.gov.ru\r\nmail-rcod.zakupki.gov.ru\r\nmail-relay.avito.ru\r\nmail-srv.fas.gov.ru\r\nmail-test.mkb.ru\r\nmail.01.mchs.gov.ru\r\nmail.02.mchs.gov.ru\r\nmail.04.mchs.gov.ru\r\nmail.05.mchs.gov.ru\r\nmail.06.mchs.gov.ru\r\nmail.080.avito.ru\r\nmail.080.vk.com\r\nmail.09.mchs.gov.ru\r\nmail.10.mchs.gov.ru\r\nmail.11.mchs.gov.ru\r\nmail.13.mchs.gov.ru\r\nmail.14.mchs.gov.ru\r\nmail.150.mchs.gov.ru\r\nmail.16.mchs.gov.ru\r\nmail.17.mchs.gov.ru\r\nmail.18.mchs.gov.ru\r\nmail.19.mchs.gov.ru\r\nmail.1tv.ru\r\nmail.21.mchs.gov.ru\r\nmail.22.mchs.gov.ru\r\nmail.23.mchs.gov.ru\r\nmail.27.mchs.gov.ru\r\nmail.29.mchs.gov.ru\r\nmail.30.fskn.gov.ru\r\nmail.30.mchs.gov.ru\r\nmail.32.mchs.gov.ru\r\nmail.33.mchs.gov.ru\r\nmail.34.mchs.gov.ru\r\nmail.35.mchs.gov.ru\r\nmail.36.mchs.gov.ru\r\nmail.37.mchs.gov.ru\r\nmail.40.mchs.gov.ru\r\nmail.43.fskn.gov.ru\r\nmail.43.mchs.gov.ru\r\nmail.44.fskn.gov.ru\r\nmail.44.mchs.gov.ru\r\nmail.45.mchs.gov.ru\r\nmail.4geo.yandex.ru\r\nmail.50.mchs.gov.ru\r\nmail.5278.avito.ru\r\nmail.54.mchs.gov.ru\r\nmail.55.mchs.gov.ru\r\nmail.56.mchs.gov.ru\r\nmail.57.mchs.gov.ru\r\nmail.58.mchs.gov.ru\r\nmail.60.mchs.gov.ru\r\nmail.61.mchs.gov.ru\r\nmail.62.mchs.gov.ru\r\nmail.64.mchs.gov.ru\r\nmail.66.mchs.gov.ru\r\nmail.666av.avito.ru\r\nmail.666av.vk.com\r\nmail.68.mchs.gov.ru\r\nmail.69.gov.ru\r\nmail.69.mchs.gov.ru\r\nmail.70.mchs.gov.ru\r\nmail.72.mchs.gov.ru\r\nmail.72.rkn.gov.ru\r\nmail.73.mchs.gov.ru\r\nmail.73edu.yandex.ru\r\nmail.74.mchs.gov.ru\r\nmail.76.mchs.gov.ru\r\nmail.77.mchs.gov.ru\r\nmail.77p2p.avito.ru\r\nmail.78.mchs.gov.ru\r\nmail.79.mchs.gov.ru\r\nmail.83.mchs.gov.ru\r\nmail.8591.avito.ru\r\nmail.85cc.avito.ru\r\nmail.85cc.vk.com\r\nmail.85st.avito.ru\r\nmail.85st.vk.com\r\nmail.89.mchs.gov.ru\r\nmail.9111.ru\r\nmail.92.mchs.gov.ru\r\nmail.99.avito.ru\r\nmail.99.vk.com\r\nmail.ac.gov.ru\r\nmail.adm2.sakha.gov.ru\r\nmail.afisha.ru\r\nmail.afro.who.int\r\nmail.agents.sovcombank.ru\r\nmail.ako.kostroma.gov.ru\r\nmail.alfabank.ru\r\nmail.altay.2gis.ru\r\nmail.aprf.gov.ru\r\nmail.arkhangelsk.2gis.ru\r\nmail.atd.gov.ru\r\nmail.atr.gov.ru\r\nmail.av8d.avito.ru\r\nmail.avcome.avito.ru\r\nmail.avito.ru\r\nmail.b2b.mvideo.ru\r\nmail.b2bcrm.tele2.ru\r\nmail.banki.ru\r\nmail.bitools.sovcombank.ru\r\nmail.blog.avito.ru\r\nmail.bratsk.2gis.ru\r\nmail.buh.sovcombank.ru\r\nmail.bus.gov.ru\r\nmail.businessconf.sber.ru\r\nmail.calling.tele2.ru\r\nmail.catalog.1tv.ru\r\nmail.cdn.invest.sovcombank.ru\r\nmail.cea.gov.ru\r\nmail.cert.gov.ru\r\nmail.cf.wildberries.ru\r\nmail.cgu.mchs.gov.ru\r\nmail.cgu.mchs.ru\r\nmail.cheboksary.2gis.ru\r\nmail.chelobl.gov.ru\r\nmail.chita.2gis.ru\r\nmail.chr.rbc.ru\r\nmail.civti.gov.ru\r\nmail.ckarea.avito.ru\r\nmail.cloud.mail.ru\r\nmail.confluence.sovcombank.ru\r\nmail.corp.avito.ru\r\nmail.corp.wildberries.ru\r\nmail.council.gov.ru\r\nmail.crimea.gov.ru\r\nmail.css.rzd.ru\r\nmail.de.avito.ru\r\nmail.demo.avito.ru\r\nmail.dev.avito.ru\r\nmail.dev.kp.ru\r\nmail.dom.gosuslugi.ru\r\nmail.dom.test.gosuslugi.ru\r\nmail.dpo.tomsk.gov.ru\r\nmail.ecdn.sovcombank.ru\r\nmail.ecr.euro.who.int\r\nmail.edu.gov.ru\r\nmail.ekb.rbc.ru\r\nmail.elf.sovcombank.ru\r\nmail.exchange.rosbank.ru\r\nmail.eyny.avito.ru\r\nmail.factoring.rshb.ru\r\nmail.fadm.gov.ru\r\nmail.fano.gov.ru\r\nmail.fas.gov.ru\r\nmail.fc2.avito.ru\r\nmail.files.sovcombank.ru\r\nmail.fingrad.sovcombank.ru\r\nmail.fmba.gov.ru\r\nmail.fms.gov.ru\r\nmail.forum.avito.ru\r\nmail.fpi.gov.ru\r\nmail.fsa.gov.ru\r\nmail.fskn.gov.ru\r\nmail.fsvps.gov.ru\r\nmail.garant.ru\r\nmail.genesys.sovcombank.ru\r\nmail.genproc.gov.ru\r\nmail.gisp.gov.ru\r\nmail.gossluzhba.gov.ru\r\nmail.gosstroy.gov.ru\r\nmail.gosuslugi.ru\r\nmail.habasc.mchs.gov.ru\r\nmail.halvamedia.sovcombank.ru\r\nmail.hr.drom.ru\r\nmail.info.tele2.ru\r\nmail.ixbt.com\r\nmail.jpadult.avito.ru\r\nmail.kaliningrad.rbc.ru\r\nmail.kavkaz.rbc.ru\r\nmail.kazan.kommersant.ru\r\nmail.kbsh.rzd.ru\r\nmail.kchr.gov.ru\r\nmail.khabarovsk.kommersant.ru\r\nmail.kino.1tv.ru\r\nmail.kostroma.gov.ru\r\nmail.kp.ru\r\nmail.kr.kommersant.ru\r\nmail.krsk.rbc.ru\r\nmail.kuban.rbc.ru\r\nmail.kuku.avito.ru\r\nmail.lawis.sovcombank.ru\r\nmail.lenta.ru\r\nmail.lk.rosnedra.gov.ru\r\nmail.lockter.sovcombank.ru\r\nmail.magnit.ru\r\nmail.mchs.gov.ru\r\nmail.minfin.rk.gov.ru\r\nmail.minobr.saratov.gov.ru\r\nmail.minobrnauki.gov.ru\r\nmail.minsport.gov.ru\r\nmail.mintrans.gov.ru\r\nmail.mirtv.ru\r\nmail.mk.ru\r\nmail.mkb.ru\r\nmail.morflot.gov.ru\r\nmail.mse21.avito.ru\r\nmail.mse3.avito.ru\r\nmail.mse4.avito.ru\r\nmail.mse5.avito.ru\r\nmail.mts.ru\r\nmail.mvd.gov.ru\r\nmail.myoffice.sberbank.ru\r\nmail.mzhkh.rk.gov.ru\r\nmail.nac.gov.ru\r\nmail.newbsms.tele2.ru\r\nmail.news.avito.ru\r\nmail.newsletter.avito.ru\r\nmail.nn.rbc.ru\r\nmail.noc.gov.ru\r\nmail.non-tariff.gov.ru\r\nmail.nsk.kommersant.ru\r\nmail.nsk.rbc.ru\r\nmail.ntv.ru\r\nmail.oauth-buh.sovcombank.ru\r\nmail.oboroty.sovcombank.ru\r\nmail.obrnadzor.gov.ru\r\nmail.ok.ru\r\nmail.oncloud.mts.ru\r\nmail.online.sovcombank.ru\r\nmail.open.ru\r\nmail.oursogo.avito.ru\r\nmail.partners.sovcombank.ru\r\nmail.pay.gov.ru\r\nmail.pay.sovcombank.ru\r\nmail.peertube-ext.sovcombank.ru\r\nmail.people.sovcombank.ru\r\nmail.perm.rbc.ru\r\nmail.pics.avito.ru\r\nmail.pr.vtb.ru\r\nmail.premier.one\r\nmail.proc.tomsk.gov.ru\r\nmail.profi.ru\r\nmail.public-buh.sovcombank.ru\r\nmail.qrsbp.sovcombank.ru\r\nmail.rambler.ru\r\nmail.rbc.ru\r\nmail.reg.sovcombank.ru\r\nmail.restapi-buh.sovcombank.ru\r\nmail.rg.gov.ru\r\nmail.rk.gov.ru\r\nmail.rosatom.ru\r\nmail.rosbank.ru\r\nmail.roseltorg.ru\r\nmail.rosenergo.gov.ru\r\nmail.rosnedra.gov.ru\r\nmail.rossvyaz.gov.ru\r\nmail.rostelecom.ru\r\nmail.rostov.kommersant.ru\r\nmail.rostov.rbc.ru\r\nmail.rostransnadzor.gov.ru\r\nmail.rpn.gov.ru\r\nmail.rs.gov.ru\r\nmail.rt.rbc.ru\r\nmail.russianpost.ru\r\nmail.rutube.ru\r\nmail.rzd.ru\r\nmail.sakha.gov.ru\r\nmail.sakhalin.gov.ru\r\nmail.saratov.gov.ru\r\nmail.sberbank.ru\r\nmail.secure.sovcombank.ru\r\nmail.senat.gov.ru\r\nmail.sev.gov.ru\r\nmail.shop.avito.ru\r\nmail.shop.tele2.ru\r\nmail.sitrion.fas.gov.ru\r\nmail.skfo.mchs.gov.ru\r\nmail.smart.1tv.ru\r\nmail.sogox.avito.ru\r\nmail.sovcombank.ru\r\nmail.spb.kommersant.ru\r\nmail.spb.rbc.ru\r\nmail.spb.vedomosti.ru\r\nmail.spb1.kommersant.ru\r\nmail.spbprojects.kommersant.ru\r\nmail.sso-buh.sovcombank.ru\r\nmail.startup.mts.ru\r\nmail.stats-buh.sovcombank.ru\r\nmail.storage.sovcombank.ru\r\nmail.storage.sport.sovcombank.ru\r\nmail.syktyvkar.2gis.ru\r\nmail.t.rbc.ru\r\nmail.target.tele2.ru\r\nmail.tass.ru\r\nmail.teams.sovcombank.ru\r\nmail.tele2.ru\r\nmail.test-teams.sovcombank.ru\r\nmail.test.avito.ru\r\nmail.test.sovcombank.ru\r\nmail.tinkoff.ru\r\nmail.travel.rzd.ru\r\nmail.tw.avito.ru\r\nmail.ufa.rbc.ru\r\nmail.ufms.tomsk.gov.ru\r\nmail.ufo.gov.ru\r\nmail.ugp-zbx-ext-app.sovcombank.ru\r\nmail.ulanude.2gis.ru\r\nmail.umc.tomsk.gov.ru\r\nmail.ural.kommersant.ru\r\nmail.urfo.gov.ru\r\nmail.uyp-zbx-ui-ext.sovcombank.ru\r\nmail.vedomosti.ru\r\nmail.video.government.ru\r\nmail.vlk.sovcombank.ru\r\nmail.voda.gov.ru\r\nmail.volg.rbc.ru\r\nmail.volgograd.kommersant.ru\r\nmail.vpn-phd.sovcombank.ru\r\nmail.vtb.ru\r\nmail.wildberries.ru\r\nmail.xvdieos.avito.ru\r\nmail.yandex.ru\r\nmail.yougile-sec.sovcombank.ru\r\nmail.youtrack.sovcombank.ru\r\nmail.yy568.avito.ru\r\nmail.zabbix-in.sovcombank.ru\r\nmail.zabbix-out.sovcombank.ru\r\nmail.zakon.ru\r\nmail.zakupki.gov.ru\r\nmail.zspk.gov.ru\r\nmail0.avito.ru\r\nmail0.ok.ru\r\nmail01.avito.ru\r\nmail01.corp.wildberries.ru\r\nmail01.fssp.gov.ru\r\nmail01.zakupki.gov.ru\r\nmail02-m1.tinkoff.ru\r\nmail02.avito.ru\r\nmail02.corp.wildberries.ru\r\nmail03.avito.ru\r\nmail03.cf.wildberries.ru\r\nmail03.corp.wildberries.ru\r\nmail03.fssp.gov.ru\r\nmail03.youdo.com\r\nmail04.avito.ru\r\nmail04.cf.wildberries.ru\r\nmail04.fssp.gov.ru\r\nmail05.avito.ru\r\nmail05.cf.wildberries.ru\r\nmail05.fssp.gov.ru\r\nmail06.avito.ru\r\nmail06.fssp.gov.ru\r\nmail07.avito.ru\r\nmail07.fssp.gov.ru\r\nmail08.avito.ru\r\nmail08.fssp.gov.ru\r\nmail09.avito.ru\r\nmail09.fssp.gov.ru\r\nmail1.alfabank.ru\r\nmail1.avito.ru\r\nmail1.fda.gov.ru\r\nmail1.gov.ru\r\nmail1.kp.ru\r\nmail1.ok.ru\r\nmail1.spb.kommersant.ru\r\nmail10.avito.ru\r\nmail10.fssp.gov.ru\r\nmail10.vk.com\r\nmail10.vtb.ru\r\nmail11.avito.ru\r\nmail11.fssp.gov.ru\r\nmail12.avito.ru\r\nmail12.fssp.gov.ru\r\nmail13.avito.ru\r\nmail13.fssp.gov.ru\r\nmail14.avito.ru\r\nmail14.fssp.gov.ru\r\nmail15.avito.ru\r\nmail16.avito.ru\r\nmail16.fssp.gov.ru\r\nmail17.avito.ru\r\nmail17.fssp.gov.ru\r\nmail18.avito.ru\r\nmail18.fssp.gov.ru\r\nmail19.avito.ru\r\nmail2.1tv.ru\r\nmail2.avito.ru\r\nmail2.civti.gov.ru\r\nmail2.council.gov.ru\r\nmail2.garant.ru\r\nmail2.gov.ru\r\nmail2.mchs.gov.ru\r\nmail2.obrnadzor.gov.ru\r\nmail2.rambler.ru\r\nmail2.rosnedra.gov.ru\r\nmail2.urfo.gov.ru\r\nmail20.avito.ru\r\nmail20.vk.com\r\nmail21.avito.ru\r\nmail22.avito.ru\r\nmail22.fssp.gov.ru\r\nmail23.avito.ru\r\nmail24.avito.ru\r\nmail24.fssp.gov.ru\r\nmail25.avito.ru\r\nmail250.avito.ru\r\nmail26.avito.ru\r\nmail26.fssp.gov.ru\r\nmail27.avito.ru\r\nmail28.avito.ru\r\nmail28.fssp.gov.ru\r\nmail29.avito.ru\r\nmail29.fssp.gov.ru\r\nmail3.1tv.ru\r\nmail3.avito.ru\r\nmail3.kino-teatr.ru\r\nmail30.avito.ru\r\nmail30.vk.com\r\nmail31.avito.ru\r\nmail32.avito.ru\r\nmail33.avito.ru\r\nmail33.fssp.gov.ru\r\nmail34.avito.ru\r\nmail34.fssp.gov.ru\r\nmail35.avito.ru\r\nmail35.fssp.gov.ru\r\nmail36.avito.ru\r\nmail36.fssp.gov.ru\r\nmail360.yandex.ru\r\nmail37.avito.ru\r\nmail37.fssp.gov.ru\r\nmail38.avito.ru\r\nmail38.fssp.gov.ru\r\nmail39.avito.ru\r\nmail39.fssp.gov.ru\r\nmail4.avito.ru\r\nmail40.avito.ru\r\nmail40.fssp.gov.ru\r\nmail40.vk.com\r\nmail41.avito.ru\r\nmail41.fssp.gov.ru\r\nmail42.avito.ru\r\nmail43.avito.ru\r\nmail43.fssp.gov.ru\r\nmail44.avito.ru\r\nmail44.fssp.gov.ru\r\nmail45.avito.ru\r\nmail45.fssp.gov.ru\r\nmail46.avito.ru\r\nmail46.fssp.gov.ru\r\nmail47.avito.ru\r\nmail49.avito.ru\r\nmail49.fssp.gov.ru\r\nmail5.avito.ru\r\nmail50.avito.ru\r\nmail51.fssp.gov.ru\r\nmail53.fssp.gov.ru\r\nmail54.fssp.gov.ru\r\nmail56.fssp.gov.ru\r\nmail58.fssp.gov.ru\r\nmail59.fssp.gov.ru\r\nmail6.avito.ru\r\nmail61.fssp.gov.ru\r\nmail62.fssp.gov.ru\r\nmail63.fssp.gov.ru\r\nmail64.fssp.gov.ru\r\nmail66.fssp.gov.ru\r\nmail67.fssp.gov.ru\r\nmail68.fssp.gov.ru\r\nmail69.fssp.gov.ru\r\nmail7.avito.ru\r\nmail70.fssp.gov.ru\r\nmail71.fssp.gov.ru\r\nmail72.fssp.gov.ru\r\nmail74.fssp.gov.ru\r\nmail75.fssp.gov.ru\r\nmail76.fssp.gov.ru\r\nmail78.fssp.gov.ru\r\nmail8.avito.ru\r\nmail82.fssp.gov.ru\r\nmail9.1tv.ru\r\nmail9.avito.ru\r\nmail92.fssp.gov.ru\r\nmailadmin.avito.ru\r\nmailal.alfabank.ru\r\nmailb.avito.ru\r\nmailbackup.avito.ru\r\nmailblog.mail.ru\r\nmailbox.avito.ru\r\nmailboxes.avito.ru\r\nmailcheck.avito.ru\r\nmaildigital.alfabank.ru\r\nmailedg.css.rzd.ru\r\nmailel.cf.wildberries.ru\r\nmailer.apteka.ru\r\nmailer.avito.ru\r\nmailer.sports.ru\r\nmailer1.avito.ru\r\nmailer1.mail.ru\r\nmailer10.i.mail.ru\r\nmailer2.avito.ru\r\nmailer2.mail.ru\r\nmailer2mra.mail.ru\r\nmailer3exe.mail.ru\r\nmailer3mra.mail.ru\r\nmailer6.mail.ru\r\nmailer7.mail.ru\r\nmailer8.mail.ru\r\nmailer9.mail.ru\r\nmailers.avito.ru\r\nmailex.avito.ru\r\nmailex.css.rzd.ru\r\nmailexch.avito.ru\r\nmailexch2.avito.ru\r\nmailexch3.avito.ru\r\nmailexpress.mail.ru\r\nmailfilter.avito.ru\r\nmailfront4.yandex.ru\r\nmailgate.avito.ru\r\nmailgate.khabarovsk.kommersant.ru\r\nmailgate.kommersant.ru\r\nmailgate1.avito.ru\r\nmailgate2.avito.ru\r\nmailgate3.avito.ru\r\nmailgateway.avito.ru\r\nmailgateway3.avito.ru\r\nmailgw.avito.ru\r\nmailgw1.avito.ru\r\nmailgw2.avito.ru\r\nmailhost.avito.ru\r\nmailhost.zdorovie-shkolnika.spb.aif.ru\r\nmailhost2.avito.ru\r\nmailhub.avito.ru\r\nmailhub.kis.avito.ru\r\nmailhub2.avito.ru\r\nmailin.avito.ru\r\nmailin10mx.avito.ru\r\nmailin11mx.avito.ru\r\nmailin12mx.avito.ru\r\nmailin13mx.avito.ru\r\nmailin14mx.avito.ru\r\nmailin15mx.avito.ru\r\nmailin16mx.avito.ru\r\nmailing.avito.ru\r\nmailing.rbc.ru\r\nmailing2.avito.ru\r\nmailinglist.avito.ru\r\nmailings.avito.ru\r\nmailis-radar01.mail.ru\r\nmailis-radar02.mail.ru\r\nmailis-radar03.mail.ru\r\nmailis-radar04.mail.ru\r\nmailis-radar05.mail.ru\r\nmailis-radar06.mail.ru\r\nmailis-radar07.mail.ru\r\nmailis-radar08.mail.ru\r\nmailis-radar09.mail.ru\r\nmailis-radar10.mail.ru\r\nmailis-radar11.mail.ru\r\nmailis-radar12.mail.ru\r\nmailis-radar13.mail.ru\r\nmailis-radar14.mail.ru\r\nmailis-radar15.mail.ru\r\nmailis-radar16.mail.ru\r\nmailis-radar17.mail.ru\r\nmailis-radar18.mail.ru\r\nmailis-radar19.mail.ru\r\nmailis-radar20.mail.ru\r\nmailis-radar21.mail.ru\r\nmaillist.avito.ru\r\nmaillists.avito.ru\r\nmaillog3.i.mail.ru\r\nmaillog4.i.mail.ru\r\nmailman.avito.ru\r\nmailmaster.avito.ru\r\nmailmon2.rambler.ru\r\nmailmx.avito.ru\r\nmailmx1.avito.ru\r\nmailmx2.avito.ru\r\nmailns4.i.mail.ru\r\nmailold.avito.ru\r\nmailout.avito.ru\r\nmailout2.avito.ru\r\nmailr1.psbank.ru\r\nmailr12.psbank.ru\r\nmailr2.psbank.ru\r\nmailr3.psbank.ru\r\nmailr34.psbank.ru\r\nmailr4.psbank.ru\r\nmailradar1.mail.ru\r\nmailradar10.mail.ru\r\nmailradar11.mail.ru\r\nmailradar12.mail.ru\r\nmailradar13.mail.ru\r\nmailradar14.mail.ru\r\nmailradar15.mail.ru\r\nmailradar16.mail.ru\r\nmailradar17.mail.ru\r\nmailradar18.mail.ru\r\nmailradar19.mail.ru\r\nmailradar2.mail.ru\r\nmailradar20.mail.ru\r\nmailradar21.mail.ru\r\nmailradar22.mail.ru\r\nmailradar23.mail.ru\r\nmailradar24.mail.ru\r\nmailradar25.mail.ru\r\nmailradar26.mail.ru\r\nmailradar27.mail.ru\r\nmailradar28.mail.ru\r\nmailradar29.mail.ru\r\nmailradar3.mail.ru\r\nmailradar30.mail.ru\r\nmailradar31.mail.ru\r\nmailradar32.mail.ru\r\nmailradar33.mail.ru\r\nmailradar34.mail.ru\r\nmailradar35.mail.ru\r\nmailradar36.mail.ru\r\nmailradar37.mail.ru\r\nmailradar38.mail.ru\r\nmailradar39.mail.ru\r\nmailradar4.mail.ru\r\nmailradar40.mail.ru\r\nmailradar41.mail.ru\r\nmailradar42.mail.ru\r\nmailradar43.mail.ru\r\nmailradar44.mail.ru\r\nmailradar45.mail.ru\r\nmailradar46.mail.ru\r\nmailradar47.mail.ru\r\nmailradar48.mail.ru\r\nmailradar49.mail.ru\r\nmailradar5.mail.ru\r\nmailradar50.mail.ru\r\nmailradar51.mail.ru\r\nmailradar52.mail.ru\r\nmailradar53.mail.ru\r\nmailradar54.mail.ru\r\nmailradar55.mail.ru\r\nmailradar56.mail.ru\r\nmailradar57.mail.ru\r\nmailradar58.mail.ru\r\nmailradar59.mail.ru\r\nmailradar6.mail.ru\r\nmailradar60.mail.ru\r\nmailradar61.mail.ru\r\nmailradar62.mail.ru\r\nmailradar63.mail.ru\r\nmailradar64.mail.ru\r\nmailradar65.mail.ru\r\nmailradar66.mail.ru\r\nmailradar67.mail.ru\r\nmailradar68.mail.ru\r\nmailradar69.mail.ru\r\nmailradar7.mail.ru\r\nmailradar70.mail.ru\r\nmailradar71.mail.ru\r\nmailradar72.mail.ru\r\nmailradar73.mail.ru\r\nmailradar74.mail.ru\r\nmailradar8.mail.ru\r\nmailradar9.mail.ru\r\nmailrelay-02.beeline.ru\r\nmailrelay.avito.ru\r\nmailrelay1.rambler.ru\r\nmailrelay2.avito.ru\r\nmailru-checker-api.e.mail.ru\r\nmails.avito.ru\r\nmailserv.avito.ru\r\nmailserver.avito.ru\r\nmailserver1.avito.ru\r\nmailserver2.avito.ru\r\nmailserver3.avito.ru\r\nmailservers.avito.ru\r\nmailservice.avito.ru\r\nmailsrv.avito.ru\r\nmailstat.domclick.ru\r\nmailstore.avito.ru\r\nmailsv.avito.ru\r\nmailsveko.fso.gov.ru\r\nmailsvr.avito.ru\r\nmailtest.avito.ru\r\nmailtest.mkb.ru\r\nmailto.avito.ru\r\nmailtst.rshb.ru\r\nmailwbg.worldbank.org\r\nmailwbgint.worldbank.org\r\nmailweb.avito.ru\r\nmailx-test1.psbank.ru\r\nmailx-test2.psbank.ru\r\nmailx-test3.psbank.ru\r\nmailx.avito.ru\r\nmailx5.psbank.ru\r\nmailx6.psbank.ru\r\nmain-pgs01e.maps.yandex.ru\r\nmain-pgs01f.maps.yandex.ru\r\nmain.avito.ru\r\nmain.russianpost.ru\r\nmain.www.max.com\r\nmain1.avito.ru\r\nmain2.avito.ru\r\nmainday.magnit.ru\r\nmaine.avito.ru\r\nmaint.avito.ru\r\nmaintenance.avito.ru\r\nmajor-static.gosuslugi.ru\r\nmajor.avito.ru\r\nmak.avito.ru\r\nmakalu.avito.ru\r\nmake.avito.ru\r\nmakemap.2gis.ru\r\nmakemoney.avito.ru\r\nmaker.avito.ru\r\nmakeupgenius.lady.mail.ru\r\nmakhachkala.drom.ru\r\nmaki.avito.ru\r\nmako.avito.ru\r\nmakrurus1.i.mail.ru\r\nmaksim.verevkin.2004.yandex.ru\r\nmal.avito.ru\r\nmalabar.avito.ru\r\nmalaga.avito.ru\r\nmalaysia.avito.ru\r\nmalcolm.avito.ru\r\nmaldives.vprok.ru\r\nmale.avito.ru\r\nmali.avito.ru\r\nmalibu.avito.ru\r\nmalik.avito.ru\r\nmalinovka.hh.ru\r\nmalinovoe-ozero.hh.ru\r\nmall.avito.ru\r\nmall.kino-teatr.ru\r\nmall1.avito.ru\r\nmall49.avito.ru\r\nmalotedigital.avito.ru\r\nmalta.avito.ru\r\nmalykov2018.beta2.ria.ru\r\nmama.avito.ru\r\nmama.megafon.ru\r\nmamba.avito.ru\r\nmambo.avito.ru\r\nmami.avito.ru\r\nmammoth.avito.ru\r\nman.avito.ru\r\nman.yandex.ru\r\nman2.mail.ru\r\nmana.avito.ru\r\nmanado.avito.ru\r\nmanage-lpa.aissd.mos.ru\r\nmanage.avito.ru\r\nmanage.kino-teatr.ru\r\nmanage.usd-preprod.mos.ru\r\nmanage.video.mail.ru\r\nmanaged.avito.ru\r\nmanagedomain.avito.ru\r\nmanagement.avito.ru\r\nmanager.avito.ru\r\nmanager.learning.ozon.ru\r\nmanager.university.ozon.ru\r\nmanchester.avito.ru\r\nmandarin.avito.ru\r\nmandrake.avito.ru\r\nmanga.avito.ru\r\nmango.avito.ru\r\nmanhattan.avito.ru\r\nmani.avito.ru\r\nmania.avito.ru\r\nmanifest.2gis.ru\r\nmanin.9111.ru\r\nmano.avito.ru\r\nmans.avito.ru\r\nmansour.avito.ru\r\nmanta.avito.ru\r\nmantis.avito.ru\r\nmanual.avito.ru\r\nmanuals.avito.ru\r\nmanuel.avito.ru\r\nmanufacturing.avito.ru\r\nmanul2.mail.ru\r\nmao.tinkoff.ru\r\nmaoush60.gosuslugi.ru\r\nmap-settings.api.2gis.ru\r\nmap-srv01h.maps.yandex.ru\r\nmap-srv03e.maps.yandex.ru\r\nmap-srv04e.maps.yandex.ru\r\nmap-srv07e.maps.yandex.ru\r\nmap-srv08e.maps.yandex.ru\r\nmap-srv09e.maps.yandex.ru\r\nmap-srv10e.maps.yandex.ru\r\nmap-srv17e.maps.yandex.ru\r\nmap-srv19e.maps.yandex.ru\r\nmap-srv20e.maps.yandex.ru\r\nmap-srv21e.maps.yandex.ru\r\nmap-srv22e.maps.yandex.ru\r\nmap-srv23e.maps.yandex.ru\r\nmap-srv25e.maps.yandex.ru\r\nmap-srv44e.maps.yandex.ru\r\nmap.avito.ru\r\nmap.businessconf.sber.ru\r\nmap.gosuslugi.ru\r\nmap.gslb.gosuslugi.ru\r\nmap.kino-teatr.ru\r\nmap.rosavtodor.gov.ru\r\nmap.yandex.ru\r\nmapa.avito.ru\r\nmapas.avito.ru\r\nmapi-landing-autotest.ing.k8s.dev.ivi.ru\r\nmapi.dev6.kassa.rambler.ru\r\nmapi.drive.megafon.ru\r\nmapi.exchange.rosbank.ru\r\nmapi.learning.ozon.ru\r\nmapi.pking.sberbank.ru\r\nmapi.rosbank.ru\r\nmapi.roseltorg.ru\r\nmapi.university.ozon.ru\r\nmapi.uspeh.megafon.ru\r\nmapic-load-gen22.vimpelcom.ru\r\nmapic-load-gen23.vimpelcom.ru\r\nmapic-load-gen24.vimpelcom.ru\r\nmapic-load-gen25.vimpelcom.ru\r\nmapimaster.ing.k8s.dev.ivi.ru\r\nmapitest.ing.k8s.dev.ivi.ru\r\nmaple.avito.ru\r\nmaplestory.avito.ru\r\nmaplifestyle.tinkoff.ru\r\nmaporigin.avito.ru\r\nmapp2fasak-m.mos.ru\r\nmapproxy.mchs.ru\r\nmaps.2gis.ru\r\nmaps.afro.who.int\r\nmaps.api.2gis.ru\r\nmaps.avito.ru\r\nmaps.banki.ru\r\nmaps.k.avito.ru\r\nmaps.new.wiki.yandex.ru\r\nmaps.ok.ru\r\nmaps.pda.yandex.ru\r\nmaps.vk.com\r\nmaps.wiki.yandex.ru\r\nmaps.worldbank.org\r\nmaps.yandex.ru\r\nmapsorigin.avito.ru\r\nmapy.avito.ru\r\nmapz.avito.ru\r\nmar.fas.gov.ru\r\nmara.avito.ru\r\nmarathon.avito.ru\r\nmarathon.habr.com\r\nmarathon.magnit.ru\r\nmarathongifts.m24.ru\r\nmarble.avito.ru\r\nmarc.avito.ru\r\nmarcel.avito.ru\r\nmarcelo.avito.ru\r\nmarcin.avito.ru\r\nmarco.avito.ru\r\nmarcom.avito.ru\r\nmarconi.avito.ru\r\nmarcopolo.avito.ru\r\nmarcos.avito.ru\r\nmarcus.avito.ru\r\nmarek.avito.ru\r\nmarengo.alfabank.ru\r\nmargaret.avito.ru\r\nmarge.avito.ru\r\nmari-el.gov.ru\r\nmari-el.mts.ru\r\nmari.avito.ru\r\nmaria.avito.ru\r\nmarian.avito.ru\r\nmariana.avito.ru\r\nmarianne.avito.ru\r\nmarie.avito.ru\r\nmarie1.avito.ru\r\nmariel.dev.home.megafon.ru\r\nmariel.shop.megafon.ru\r\nmariel.tele2.ru\r\nmarilyn.avito.ru\r\nmarin.avito.ru\r\nmarina.avito.ru\r\nmarine.avito.ru\r\nmarine.gov.ru\r\nmarino.avito.ru\r\nmarinychev.sakha.gov.ru\r\nmario.avito.ru\r\nmarion.avito.ru\r\nmariott.webos.play.max.com\r\nmariupol.gosuslugi.ru\r\nmarius.avito.ru\r\nmark.avito.ru\r\nmarkdrive3.0.yandex.ru\r\nmarket-click2.yandex.ru\r\nmarket-exp-touch.pepelac01hp.yandex.ru\r\nmarket-exp-touch.pepelac02hp.yandex.ru\r\nmarket-exp.yandex.ru\r\nmarket-prestable.yandex.ru\r\nmarket-preview.yandex.ru\r\nmarket-turkey.yandex.ru\r\nmarket.avito.ru\r\nmarket.ixbt.com\r\nmarket.kinopoisk.ru\r\nmarket.lenta.ru\r\nmarket.net.ixbt.com\r\nmarket.open.ru\r\nmarket.pochta.ru\r\nmarket.rzd.ru\r\nmarket.tele2.ru\r\nmarket.yandex.ru\r\nmarket.youdo.com\r\nmarketdevdb-iva.yandex.ru\r\nmarketdevdb-vip.yandex.ru\r\nmarketdevdb1e-vip.yandex.ru\r\nmarketing.avito.ru\r\nmarketing.beeline.ru\r\nmarketing.euronews.com\r\nmarketing.lemanapro.ru\r\nmarketing.mts.ru\r\nmarketing.profi.tass.ru\r\nmarketing.rbc.ru\r\nmarketingservices.lemanapro.ru\r\nmarketolog.mts.ru\r\nmarketplace.avito.ru\r\nmarketplace.beeline.ru\r\nmarketplace.mts.ru\r\nmarketplace.vtb.ru\r\nmarketplace.zdorovie-shkolnika.spb.aif.ru\r\nmarkets.avito.ru\r\nmarko.avito.ru\r\nmarkov.avito.ru\r\nmarks.avito.ru\r\nmarktwain.avito.ru\r\nmarkus.avito.ru\r\nmarlboro.avito.ru\r\nmarley.avito.ru\r\nmarly.avito.ru\r\nmarmok.content.tinkoff.ru\r\nmarmok.tinkoff.ru\r\nmaroc.avito.ru\r\nmarriage.avito.ru\r\nmarriott.enseo.play.max.com\r\nmarriott.webos.play.max.com\r\nmarry.avito.ru\r\nmars.avito.ru\r\nmars.corp.mvideo.ru\r\nmars2.avito.ru\r\nmarshall.avito.ru\r\nmart.avito.ru\r\nmarta.avito.ru\r\nmarte.avito.ru\r\nmartialarts.avito.ru\r\nmartin.avito.ru\r\nmaru.avito.ru\r\nmarusia.vk.com\r\nmarvel.avito.ru\r\nmarvin.avito.ru\r\nmarvin.mts.ru\r\nmarwan.avito.ru\r\nmarx.avito.ru\r\nmary.avito.ru\r\nmaryland.avito.ru\r\nmas.avito.ru\r\nmasa.avito.ru\r\nmasaki.avito.ru\r\nmascot.avito.ru\r\nmashinist.rzd.ru\r\nmask.avito.ru\r\nmaslenica.bizconf.rbc.ru\r\nmason.avito.ru\r\nmasoud.avito.ru\r\nmasq.avito.ru\r\nmass.avito.ru\r\nmassachusetts.avito.ru\r\nmassage.avito.ru\r\nmassive.avito.ru\r\nmassmail.avito.ru\r\nmaster-www.k.avito.ru\r\nmaster-www.t.avito.ru\r\nmaster.avito.ru\r\nmaster.broker.vtb.ru\r\nmaster.yandex.ru\r\nmaster1.avito.ru\r\nmaster2.avito.ru\r\nmastercard.avito.ru\r\nmastercard.perekrestok.ru\r\nmastermind.avito.ru\r\nmasters.avito.ru\r\nmastiff.mail.ru\r\nmat.avito.ru\r\nmatador.avito.ru\r\nmatata.mail.ru\r\nmatch.avito.ru\r\nmatch.mts.ru\r\nmatch.music.yandex.ru\r\nmatchid-production.adfox.yandex.ru\r\nmatchid.adfox.yandex.ru\r\nmatematika.avito.ru\r\nmateo.avito.ru\r\nmath.avito.ru\r\nmathematics.avito.ru\r\nmathfight.edu.tinkoff.ru\r\nmaths.avito.ru\r\nmatilda.avito.ru\r\nmatomo-iac.mchs.ru\r\nmatomo.alfabank.ru\r\nmatomo.cgu.mchs.ru\r\nmatomo.csut.mchs.ru\r\nmatomo.mchs.ru\r\nmatomo.obs.mts.ru\r\nmatomo.sed.mchs.ru\r\nmatomo.t2.ru\r\nmatomotagmanager.t2.ru\r\nmatrix.avito.ru\r\nmatrix.content.tinkoff.ru\r\nmatrix.lemanapro.ru\r\nmatrix.msk.rzd.ru\r\nmatrix1.mail.ru\r\nmatrix2.avito.ru\r\nmatrix2.mail.ru\r\nmatrix3.mail.ru\r\nmatrix4.mail.ru\r\nmatrix5.mail.ru\r\nmatrix6.mail.ru\r\nmatrixstats.avito.ru\r\nmatt.avito.ru\r\nmattermost-test.avito.ru\r\nmattermost.sandbox.tech.mvideo.ru\r\nmattermost2.sandbox.tech.mvideo.ru\r\nmature.avito.ru\r\nmaurice.avito.ru\r\nmaven.avito.ru\r\nmaven.worldbank.org\r\nmaverick.avito.ru\r\nmax-dev17.test.gosuslugi.ru\r\nmax.avito.ru\r\nmax.dev.push.mk.ru\r\nmaxdevweb1.max.com\r\nmaxeremeev.16mb.yandex.ru\r\nmaxhim.2013.yandex.ru\r\nmaxi.avito.ru\r\nmaxim.avito.ru\r\nmaxime.avito.ru\r\nmaximum.avito.ru\r\nmaximus.avito.ru\r\nmaximus32.70.yandex.ru\r\nmaxoptra.open.ru\r\nmaxwell.avito.ru\r\nmaxx.avito.ru\r\nmay.avito.ru\r\nmaya.avito.ru\r\nmayak.avito.ru\r\nmaybelline.lady.mail.ru\r\nmaykop.drom.ru\r\nmaykop.lemanapro.ru\r\nmayor.avito.ru\r\nmayor.fskn.gov.ru\r\nmayrose.avito.ru\r\nmayur.avito.ru\r\nmaz.drom.ru\r\nmaza.mail.ru\r\nmazda.avito.ru\r\nmazda.drom.ru\r\nmaze.avito.ru\r\nmb-cert-api.rosbank.ru\r\nmb-cert-app.rosbank.ru\r\nmb-cert.rosbank.ru\r\nmb-dev-api.rosbank.ru\r\nmb-dev-app.rosbank.ru\r\nmb-dev.rosbank.ru\r\nmb-test-api.rosbank.ru\r\nmb-test-app.rosbank.ru\r\nmb-test-elk.rosbank.ru\r\nmb-test-log.rosbank.ru\r\nmb-test.rosbank.ru\r\nmb.avito.ru\r\nmb.gosuslugi.ru\r\nmb.net.ixbt.com\r\nmb.perevodworld.vtb.ru\r\nmb.vtb.ru\r\nmb1.avito.ru\r\nmb2.avito.ru\r\nmba.avito.ru\r\nmba.rbc.ru\r\nmbackup01h.yandex.ru\r\nmbdev.alfabank.ru\r\nmbi1ft.yandex.ru\r\nmbint.alfabank.ru\r\nmblsha-vm.yandex.ru\r\nmbo.market.yandex.ru\r\nmbo.vtb.ru\r\nmbodb1ft.yandex.ru\r\nmbox.avito.ru\r\nmbr-api.rosbank.ru\r\nmbr-app.rosbank.ru\r\nmbr-log.rosbank.ru\r\nmbr.rosbank.ru\r\nmbrb.test.vtb.ru\r\nmbro.yandex.ru\r\nmbrowser.yandex.ru\r\nmbs.avito.ru\r\nmc-cbro.online.sberbank.ru\r\nmc-idgw.beeline.ru\r\nmc-portal.mail.ru\r\nmc.avito.ru\r\nmc.kinopoisk.ru\r\nmc.kommersant.ru\r\nmc.vtb.ru\r\nmc.wildberries.ru\r\nmc.yandex.ru\r\nmc2.avito.ru\r\nmca.avito.ru\r\nmcafee-auth.tele2.ru\r\nmcafee.avito.ru\r\nmcampbell.leasing.rshb.ru\r\nmcarp1.rambler.ru\r\nmcatalog-prod.yc.mvideo.ru\r\nmcatalog-prod1.yc.mvideo.ru\r\nmcatalog.yc.mvideo.ru\r\nmcb.avito.ru\r\nmcbank.credit-registry.nalog.ru\r\nmcc.avito.ru\r\nmcc.megafon.ru\r\nmccoy.avito.ru\r\nmcd-www2.avito.ru\r\nmce.avito.ru\r\nmcgi2.rambler.ru\r\nmcgi50.rambler.ru\r\nmcgi80.rambler.ru\r\nmcgixx01.rambler.ru\r\nmcgixx02.rambler.ru\r\nmchat.beeline.ru\r\nmchs.gov.ru\r\nmchs.tomsk.gov.ru\r\nmci.avito.ru\r\nmclaren.avito.ru\r\nmclassifieds.mk.ru\r\nmcloud.psbank.ru\r\nmcm.avito.ru\r\nmco-api.magnit.ru\r\nmcom-api.tinkoff.ru\r\nmcp.avito.ru\r\nmcq-indus-01.iutnb.avito.ru\r\nmcq-media-01.iutnb.avito.ru\r\nmcq-projet-01.iutnb.avito.ru\r\nmcs.avito.ru\r\nmcstage.eldorado.ru\r\nmcu.avito.ru\r\nmcu.video.tambov.gov.ru\r\nmd.avito.ru\r\nmd.heroism.yandex.ru\r\nmd.mirtv.ru\r\nmd.zdorovie-shkolnika.spb.aif.ru\r\nmd1.avito.ru\r\nmda.kinopoisk.ru\r\nmdata.yandex.ru\r\nmdb.avito.ru\r\nmdc.avito.ru\r\nmdev.avito.ru\r\nmdm-awcmint.megafon.ru\r\nmdm-citrix.tele2.ru\r\nmdm-dev.megafon.ru\r\nmdm-gw.open.ru\r\nmdm-mobile-m.beeline.ru\r\nmdm-mobile-s.beeline.ru\r\nmdm-tunnel.megafon.ru\r\nmdm.alfabank.ru\r\nmdm.avito.ru\r\nmdm.beeline.ru\r\nmdm.mts.ru\r\nmdm.psbank.ru\r\nmdm.rosatom.ru\r\nmdm.rosbank.ru\r\nmdm.searo.who.int\r\nmdm.vtb.ru\r\nmdm.zdorovie-shkolnika.spb.aif.ru\r\nmdm101lv.vtb.ru\r\nmdm2-citrix.tele2.ru\r\nmdm201lv.vtb.ru\r\nmdm202lv.vtb.ru\r\nmdmassist.rosatom.ru\r\nmdmawens.rosatom.ru\r\nmdmawseg.rosatom.ru\r\nmdmawtun.rosatom.ru\r\nmdmds.rosatom.ru\r\nmdmm.beeline.ru\r\nmdmme.beeline.ru\r\nmdmmi101lv.vtb.ru\r\nmdmmi201lv.vtb.ru\r\nmdmrd201lv.vtb.ru\r\nmdms.beeline.ru\r\nmdmt-dev.megafon.ru\r\nmdmt-mag.megafon.ru\r\nmdmwo.beeline.ru\r\nmdo-devops-infra1.yc.mvideo.ru\r\nmdo-infra-ci-test1.yc.mvideo.ru\r\nmdo-pricing-prod1.yc.mvideo.ru\r\nmdo-pricingg-prod1.yc.mvideo.ru\r\nmdo-promo-prod1.yc.mvideo.ru\r\nmdp.garant.ru\r\nmdrive.magnit.ru\r\nmdrpz.rosbank.ru\r\nmds.avito.ru\r\nmdt.2gis.ru\r\nme-dmz-sgw01.minenergo.gov.ru\r\nme-dmz-sgw02.minenergo.gov.ru\r\nme-mr01.minenergo.gov.ru\r\nme-mr02.minenergo.gov.ru\r\nme-pub01.minenergo.gov.ru\r\nme-pub02.minenergo.gov.ru\r\nme-pub03.minenergo.gov.ru\r\nme-pub04.minenergo.gov.ru\r\nme-pub05.minenergo.gov.ru\r\nme-pub06.minenergo.gov.ru\r\nme-pub07.minenergo.gov.ru\r\nme-pub08.minenergo.gov.ru\r\nme-tmg01.minenergo.gov.ru\r\nme-tmg02.minenergo.gov.ru\r\nme.avito.ru\r\nme.cs7777.vk.com\r\nmeal-deal.t2.ru\r\nmebel.avito.ru\r\nmec.avito.ru\r\nmec.worldbank.org\r\nmech.avito.ru\r\nmechta.lady.mail.ru\r\nmechta.m24.ru\r\nmed-b-soloneshenskaya-r22.gosweb.gosuslugi.ru\r\nmed-b-usmanskaya-r42.gosweb.gosuslugi.ru\r\nmed-b3-izhevsk-r18.gosweb.gosuslugi.ru\r\nmed-cen-buzvovocozmp-vologda-r19.gosweb.gosuslugi.ru\r\nmed.avito.ru\r\nmed.kp.ru\r\nmed.mts.ru\r\nmed.vesti.ru\r\nmed.zoon.ru\r\nmedalbalancer.vimpelcom.ru\r\nmedcenter.life.ru\r\nmeddesk.profi.ru\r\nmedea.avito.ru\r\nmedi.avito.ru\r\nmedia-newportal.x5.ru\r\nmedia.1tv.ru\r\nmedia.adv.ozon.ru\r\nmedia.avito.ru\r\nmedia.b2b.beeline.ru\r\nmedia.beeline.ru\r\nmedia.corp.rbc.ru\r\nmedia.council.gov.ru\r\nmedia.dev.videoplatform.rambler.ru\r\nmedia.kino-teatr.ru\r\nmedia.kommersant.ru\r\nmedia.lk.cdn.megafon.ru\r\nmedia.mail.ru\r\nmedia.metrika.yandex.ru\r\nmedia.mobile.beeline.ru\r\nmedia.modem.beeline.ru\r\nmedia.mts.ru\r\nmedia.nalog.ru\r\nmedia.provod.beeline.ru\r\nmedia.rabota.lemanapro.ru\r\nmedia.rambler.ru\r\nmedia.rtb.beeline.ru\r\nmedia.stage.videoplatform.rambler.ru\r\nmedia.tambov.gov.ru\r\nmedia.tinkoff.ru\r\nmedia.video.duma.gov.ru\r\nmedia.wifi.beeline.ru\r\nmedia.worldbank.org\r\nmedia.yandex.ru\r\nmedia1.avito.ru\r\nmedia1.video.duma.gov.ru\r\nmedia2.avito.ru\r\nmedia2.dns-shop.ru\r\nmedia2.video.duma.gov.ru\r\nmedia3.avito.ru\r\nmedia3.video.duma.gov.ru\r\nmedia4.avito.ru\r\nmedia4.video.duma.gov.ru\r\nmedia5.video.duma.gov.ru\r\nmediacenter.avito.ru\r\nmediacentre-dev.who.int\r\nmediacentre-uat.who.int\r\nmediacodecsworld.avito.ru\r\nmediaexport.afisha.ru\r\nmediafeeds.yandex.ru\r\nmediahub-test.euronews.com\r\nmediahub.euronews.com\r\nmediakit.avito.ru\r\nmedialib.emro.who.int\r\nmediana.mail.ru\r\nmediana.yandex.ru\r\nmediaplan.yandex.ru\r\nmedias.avito.ru\r\nmediaserver.avito.ru\r\nmediasite.avito.ru\r\nmediasso.x5.ru\r\nmediastorage.afisha.ru\r\nmediatop.pepelac1ft.yandex.ru\r\nmediatop.pepelac1t.yandex.ru\r\nmediatop.yandex.ru\r\nmediator.yandex.ru\r\nmediavideo.duma.gov.ru\r\nmediawiki.avito.ru\r\nmediawiki.vedomosti.ru\r\nmedic.garant.ru\r\nmedical.avito.ru\r\nmedicina-na-peredovoj.kp.ru\r\nmedicina.avito.ru\r\nmedicine.avito.ru\r\nmedios.avito.ru\r\nmedium.avito.ru\r\nmedium.yandex.ru\r\nmedo.avito.ru\r\nmedo.sakha.gov.ru\r\nmedu.avito.ru\r\nmedusa.avito.ru\r\nmedved301.mail.ru\r\nmee.avito.ru\r\nmeet.alfabank.ru\r\nmeet.api.2gis.ru\r\nmeet.avito.ru\r\nmeet.external.t2.ru\r\nmeet.external.tele2.ru\r\nmeet.fish.gov.ru\r\nmeet.interfax.ru\r\nmeet.magnit.ru\r\nmeet.mkb.ru\r\nmeet.msk.vtb.ru\r\nmeet.mts.ru\r\nmeet.mvideo.ru\r\nmeet.ntv.ru\r\nmeet.open.ru\r\nmeet.psbank.ru\r\nmeet.rosbank.ru\r\nmeet.russianpost.ru\r\nmeet.sakha.gov.ru\r\nmeet.sberbank.ru\r\nmeet.skype.ec.mts.ru\r\nmeet.t2.ru\r\nmeet.tambov.gov.ru\r\nmeeting-test.psbank.ru\r\nmeeting.avito.ru\r\nmeeting.psbank.ru\r\nmeetingapps.open.ru\r\nmeetingplace.avito.ru\r\nmeetings.avito.ru\r\nmeetings.cms.open.ru\r\nmeetings.open.ru\r\nmeetings1.cms.open.ru\r\nmeetings2.cms.open.ru\r\nmeetingserver.rbc.ru\r\nmeetme.avito.ru\r\nmeetup.sberbank.ru\r\nmeg.avito.ru\r\nmega-wifi-kazan.mts.ru\r\nmega.avito.ru\r\nmega.cloud.mail.ru\r\nmegaall.litres.ru\r\nmegabox.megafon.ru\r\nmegadigitaldm.avito.ru\r\nmegadigitaldownloads.avito.ru\r\nmegadigitalmanager.avito.ru\r\nmegaevents.megafon.ru\r\nmegafon.fas.gov.ru\r\nmegafon.lenta.ru\r\nmegafon.litres.ru\r\nmegafon.vesti.ru\r\nmegafonpluspremium.litres.ru\r\nmegafontravel.afisha.ru\r\nmegafonvip.litres.ru\r\nmegalisten.litres.ru\r\nmegamediadm.avito.ru\r\nmegamediadownloads.avito.ru\r\nmegamediamanager.avito.ru\r\nmeganet.avito.ru\r\nmegaplan.alfabank.ru\r\nmegaplan.mk.ru\r\nmegaprodm.avito.ru\r\nmegaprodownloads.avito.ru\r\nmegapromanager.avito.ru\r\nmegara.avito.ru\r\nmegaschool.litres.ru\r\nmegasign.megafon.ru\r\nmegateam.ozon.ru\r\nmegatron.avito.ru\r\nmehdi.avito.ru\r\nmei.avito.ru\r\nmei12131.avito.ru\r\nmein.avito.ru\r\nmel.avito.ru\r\nmelbourne.avito.ru\r\nmeli.kube-dev.drom.ru\r\nmelinda.avito.ru\r\nmelissa.avito.ru\r\nmelitopol-r23.gosweb.gosuslugi.ru\r\nmelnik.tass.ru\r\nmelody.avito.ru\r\nmelon.avito.ru\r\nmelophone.yandex.ru\r\nmelpomene.avito.ru\r\nmem.avito.ru\r\nmem.megafon.ru\r\nmember.avito.ru\r\nmember1.avito.ru\r\nmember2.avito.ru\r\nmemberall.avito.ru\r\nmemberlite.avito.ru\r\nmemberold.avito.ru\r\nmemberpbp.avito.ru\r\nmembers.avito.ru\r\nmembers.mn2.lenta.ru\r\nmembers.sj5.lenta.ru\r\nmembers1.avito.ru\r\nmembers2.avito.ru\r\nmembers3.avito.ru\r\nmembership.avito.ru\r\nmeme.avito.ru\r\nmemo.avito.ru\r\nmemoria.avito.ru\r\nmemories.avito.ru\r\nmemory.avito.ru\r\nmemory.mchs.gov.ru\r\nmemory.mts.ru\r\nmemphis.avito.ru\r\nmen.avito.ru\r\nmendel.avito.ru\r\nmensa.avito.ru\r\nmenshikova.lideryrossii.tass.ru\r\nmentity.kino-teatr.ru\r\nmentor.avito.ru\r\nmenu.avito.ru\r\nmenya-sokratili.rbc.ru\r\nmeowmiles.tinkoff.ru\r\nmerak.avito.ru\r\nmercator.avito.ru\r\nmercedes.avito.ru\r\nmerch-test.rosbank.ru\r\nmerch.rbc.ru\r\nmerchandising-preview.avito.ru\r\nmerchant-api.sbp.rshb.ru\r\nmerchant.avito.ru\r\nmerchant.lemanapro.ru\r\nmerchant.money.mail.ru\r\nmerchant.new.market.pochta.ru\r\nmerchbook-ldfd.t2.ru\r\nmerci.avito.ru\r\nmercure.avito.ru\r\nmercurio.avito.ru\r\nmercury.avito.ru\r\nmerida.avito.ru\r\nmeridian.avito.ru\r\nmerit.consultant.ru\r\nmerkur.avito.ru\r\nmerlin.avito.ru\r\nmerlot.avito.ru\r\nmermaid.avito.ru\r\nmerovingian.yandex.ru\r\nmerpati.avito.ru\r\nmerry.avito.ru\r\nmert.akbulut.365.yandex.ru\r\nmes.avito.ru\r\nmes.rshb.ru\r\nmess.avito.ru\r\nmessage.alfabank.ru\r\nmessage.avito.ru\r\nmessagerie.avito.ru\r\nmessages.avito.ru\r\nmessages.megafon.ru\r\nmessages.moscow.megafon.ru\r\nmessages.ok.ru\r\nmessagex5.alfabank.ru\r\nmessaging.avito.ru\r\nmessenger-ift.sberbank.ru\r\nmessenger-si.sberbank.ru\r\nmessenger-stg.sberbank.ru\r\nmessenger-t.sberbank.ru\r\nmessenger.avito.ru\r\nmessenger.dev.videoplatform.rambler.ru\r\nmessenger.magnit.ru\r\nmessenger.online.sberbank.ru\r\nmessenger.sberbank.ru\r\nmessenger.stage.videoplatform.rambler.ru\r\nmet-test.net.ixbt.com\r\nmet.avito.ru\r\nmeta.avito.ru\r\nmeta.cloud.mail.ru\r\nmetabase.net.ixbt.com\r\nmetadb-iva-cluster.yandex.ru\r\nmetadb1e-vip.yandex.ru\r\nmetadb1e.yandex.ru\r\nmetal.avito.ru\r\nmetallexpert.15.yandex.ru\r\nmetallica.avito.ru\r\nmetalltorg.2007.yandex.ru\r\nmetamorphosis.avito.ru\r\nmetaverse.vtb.ru\r\nmetc.avito.ru\r\nmetcom.credit-registry.nalog.ru\r\nmeteo.avito.ru\r\nmeteo.iz.ru\r\nmeteor.avito.ru\r\nmetest.mkb.ru\r\nmetis.avito.ru\r\nmetr.yandex.ru\r\nmetric.yandex.ru\r\nmetrica.yandex.ru\r\nmetrics.alfabank.ru\r\nmetrics.avito.ru\r\nmetrics.mb-cert-mon.rosbank.ru\r\nmetrics.mbr-mon.rosbank.ru\r\nmetrika-api.yandex.ru\r\nmetrika-ng-ps.yandex.ru\r\nmetrika-ng1-1.yandex.ru\r\nmetrika-ng1-2.yandex.ru\r\nmetrika-ng3-1.yandex.ru\r\nmetrika-ng3-2.yandex.ru\r\nmetrika.yandex.ru\r\nmetro-moscow24.review-k8s.aif.ru\r\nmetro.avito.ru\r\nmetro.lenta.ru\r\nmetro.life.ru\r\nmetro.yandex.ru\r\nmetro.youdo.com\r\nmetronews.avito.ru\r\nmetropolis.afisha.ru\r\nmetropolis.avito.ru\r\nmetropolis.project.tinkoff.ru\r\nmetropolis19.project.tinkoff.ru\r\nmex.avito.ru\r\nmexico.avito.ru\r\nmezhdurechensk.dns-shop.ru\r\nmezhdurechenskiy.drom.ru\r\nmf-pda-vs-1.rambler.ru\r\nmf-pda-vs-2.rambler.ru\r\nmf-tr.megafon.ru\r\nmf.avito.ru\r\nmf.cdnmgf.megafon.ru\r\nmf.soz.megafon.ru\r\nmf1.avito.ru\r\nmf1.rambler.ru\r\nmf1002.rambler.ru\r\nmf1010.rambler.ru\r\nmf1011.rambler.ru\r\nmf1012.rambler.ru\r\nmf1102.rambler.ru\r\nmf2.rambler.ru\r\nmf60.i.mail.ru\r\nmfa.cloud.mts.ru\r\nmfc.avito.ru\r\nmfc.kamchatka.gov.ru\r\nmflash-online.x5.ru\r\nmflash.beeline.ru\r\nmflash.x5.ru\r\nmflashonlinetest.alfabank.ru\r\nmflashsrvtest.alfabank.ru\r\nmflashtest.alfabank.ru\r\nmfr.avito.ru\r\nmfs.avito.ru\r\nmfso.saratov.gov.ru\r\nmfv2-00.yandex.ru\r\nmg.avito.ru\r\nmg.kino-teatr.ru\r\nmg85.avito.ru\r\nmga.avito.ru\r\nmgk.avito.ru\r\nmgm-preprod-1.open.ru\r\nmgm-preprod-2.open.ru\r\nmgm-preprod.open.ru\r\nmgm-staging.open.ru\r\nmgm.avito.ru\r\nmgm.open.ru\r\nmgmg.avito.ru\r\nmgmt-ise201.vtb.ru\r\nmgmt-ise401.vtb.ru\r\nmgmt.avito.ru\r\nmgolem.yandex.ru\r\nmgr.avito.ru\r\nmgrischenko-0.ing.k8s.dev.ivi.ru\r\nmgrischenko-1.ing.k8s.dev.ivi.ru\r\nmgrischenko.ing.k8s.dev.ivi.ru\r\nmgrportal.worldbank.org\r\nmgs.avito.ru\r\nmgt.api.vtb.ru\r\nmgt.avito.ru\r\nmgt.beeline.ru\r\nmgulaya.ing.k8s.dev.ivi.ru\r\nmgw.avito.ru\r\nmh.avito.ru\r\nmh.toloka.yandex.ru\r\nmh2.avito.ru\r\nmhs.avito.ru\r\nmhubs.litres.ru\r\nmi-vpn.vtb.ru\r\nmi.avito.ru\r\nmi.vtb.ru\r\nmi.yandex.ru\r\nmi2-vpn.vtb.ru\r\nmi2.vtb.ru\r\nmi3xjz4z-rlp.ops.beeline.ru\r\nmia-nbl.latam.dev.media.max.com\r\nmia-nbl.latam.int.media.max.com\r\nmia-nbl.latam.prd.media.max.com\r\nmia-nbl.latam.stg.media.max.com\r\nmia.avito.ru\r\nmiami.avito.ru\r\nmiass.avito.ru\r\nmiass.dns-shop.ru\r\nmiass.mts.ru\r\nmibituminous.kino-teatr.ru\r\nmic.avito.ru\r\nmica.avito.ru\r\nmicco.avito.ru\r\nmichael.avito.ru\r\nmichaels.kino-teatr.ru\r\nmichal.avito.ru\r\nmichelle.avito.ru\r\nmichigan.avito.ru\r\nmichiko.avito.ru\r\nmickey.avito.ru\r\nmico.avito.ru\r\nmicos.avito.ru\r\nmicro.avito.ru\r\nmicroapps.kinopoisk.ru\r\nmicrocryptocrystalline.kino-teatr.ru\r\nmicrodata.worldbank.org\r\nmicrodatalib.worldbank.org\r\nmicros.avito.ru\r\nmicroservices.demo.megafon.ru\r\nmicrosite.avito.ru\r\nmicrosoft.avito.ru\r\nmid.avito.ru\r\nmidas.avito.ru\r\nmiddle-api.magnit.ru\r\nmiddleman.production.scw01.meduza.io\r\nmiddleman.staging.scw01.meduza.io\r\nmidgard.avito.ru\r\nmidget.avito.ru\r\nmidian.avito.ru\r\nmidnight.avito.ru\r\nmido.avito.ru\r\nmidori.avito.ru\r\nmidwest.avito.ru\r\nmie.avito.ru\r\nmiel.avito.ru\r\nmiele.lady.mail.ru\r\nmievm.kino-teatr.ru\r\nmig.avito.ru\r\nmig35.tass.ru\r\nmiga.crmsnd1.worldbank.org\r\nmiga.wbgcrm.worldbank.org\r\nmiga.wbgcrmfqa.worldbank.org\r\nmiga360poc.crmsnd1.worldbank.org\r\nmiga360poc.wbgcrmfqa.worldbank.org\r\nmigacrmcoreqa.wbgcrmfqa.worldbank.org\r\nmigairp.worldbank.org\r\nmigairpapp.worldbank.org\r\nmigairpappdev.worldbank.org\r\nmigairpappqa.worldbank.org\r\nmigairpdev.worldbank.org\r\nmigairpqa.worldbank.org\r\nmigapricingsp.worldbank.org\r\nmigapricingspdev.worldbank.org\r\nmigapricingspqa.worldbank.org\r\nmigaqa360.wbgcrmfqa.worldbank.org\r\nmighty.avito.ru\r\nmigrakvota.gov.ru\r\nmigrate-api.yandex.ru\r\nmigration.avito.ru\r\nmigrator.cgu.mchs.ru\r\nmiguel.avito.ru\r\nmii.tass.ru\r\nmijn.avito.ru\r\nmik.avito.ru\r\nmika.avito.ru\r\nmike.avito.ru\r\nmikey.avito.ru\r\nmikhalych.online.2018.yandex.ru\r\nmikhaylov.ing.k8s.dev.ivi.ru\r\nmiki.avito.ru\r\nmiko.avito.ru\r\nmikrazimtest.lady.mail.ru\r\nmiku.avito.ru\r\nmil.avito.ru\r\nmila.avito.ru\r\nmilan.avito.ru\r\nmilano.avito.ru\r\nmilitary.avito.ru\r\nmilk.avito.ru\r\nmilkbar.avito.ru\r\nmilkyway.avito.ru\r\nmillenium.avito.ru\r\nmillennium.avito.ru\r\nmiller-al.2013.yandex.ru\r\nmiller.avito.ru\r\nmillion.avito.ru\r\nmillion.vtb.ru\r\nmilo.avito.ru\r\nmilton.avito.ru\r\nmilwaukee.avito.ru\r\nmim.01.yandex.ru\r\nmime.avito.ru\r\nmimi.avito.ru\r\nmimo.avito.ru\r\nmimosa.avito.ru\r\nmin.avito.ru\r\nmina.avito.ru\r\nminagro.saratov.gov.ru\r\nminbank.credit-registry.nalog.ru\r\nmincult22.tass.ru\r\nmind.alfabank.ru\r\nmind.avito.ru\r\nmindful.tinkoff.ru\r\nmine.avito.ru\r\nmineconomic.sakha.gov.ru\r\nminecraft.avito.ru\r\nminenergo.credit-registry.nalog.ru\r\nminenergo.gov.ru\r\nmineral.avito.ru\r\nminerva.avito.ru\r\nminerva.zdorovie-shkolnika.spb.aif.ru\r\nminfin.alania.gov.ru\r\nminfin.credit-registry.nalog.ru\r\nminfin.rk.gov.ru\r\nminfin.sakha.gov.ru\r\nminforest.saratov.gov.ru\r\nming.avito.ru\r\nmingkh.alania.gov.ru\r\nmingkh.sakha.gov.ru\r\nmini.afisha.ru\r\nmini.avito.ru\r\nmini.pogoda.yandex.ru\r\nmini.weather.yandex.ru\r\nminiapps-tst.max.ru\r\nminiapps.max.ru\r\nminigames.mail.ru\r\nminilogs-test2.yandex.ru\r\nminilogs19.yandex.ru\r\nminilogs20.yandex.ru\r\nminilogs22.yandex.ru\r\nminilogs23.yandex.ru\r\nminilogs24.yandex.ru\r\nminilogs25.yandex.ru\r\nminilogs26.yandex.ru\r\nminilogs27.yandex.ru\r\nminilogs28.yandex.ru\r\nminilogs29.yandex.ru\r\nminilogs31.yandex.ru\r\nminilogs32.yandex.ru\r\nminilogs33.yandex.ru\r\nminilogs34.yandex.ru\r\nminilogs35.yandex.ru\r\nminilogs36.yandex.ru\r\nminilogs37.yandex.ru\r\nminilogs38.yandex.ru\r\nminilogs39.yandex.ru\r\nminilogs40.yandex.ru\r\nminilogs41.yandex.ru\r\nminilogs42.yandex.ru\r\nminilogs43.yandex.ru\r\nminilogs44.yandex.ru\r\nminilogs45.yandex.ru\r\nminilogs46.yandex.ru\r\nminilogs9.yandex.ru\r\nminimu.alania.gov.ru\r\nminimush.sakha.gov.ru\r\nmininnovation.sakha.gov.ru\r\nmininvest.sakha.gov.ru\r\nminio.cgu.iac.mchs.ru\r\nminio.dev.cgu.iac.mchs.ru\r\nminio.kommersant.ru\r\nminio.meduza.io\r\nminjust-prikaz.consultant.ru\r\nminjust.consultant.ru\r\nminkavkaz.gov.ru\r\nminkult.sakha.gov.ru\r\nminmin.avito.ru\r\nminmol.sakha.gov.ru\r\nminnesota.avito.ru\r\nminnie.avito.ru\r\nminobchestvo.sakha.gov.ru\r\nminobr.sakha.gov.ru\r\nminobrnauki.gov.ru\r\nminobrnauki.sakha.gov.ru\r\nminos.avito.ru\r\nminotaur.avito.ru\r\nminpred.sakha.gov.ru\r\nminpredpr.sakha.gov.ru\r\nminpriroda.sakha.gov.ru\r\nminprofobr.sakha.gov.ru\r\nminprom.sakha.gov.ru\r\nminsel.sakha.gov.ru\r\nminselhoz.credit-registry.nalog.ru\r\nminsk.avito.ru\r\nminsk.kp.ru\r\nminsotc.alania.gov.ru\r\nminsport.gov.ru\r\nminsport.sakha.gov.ru\r\nminstm.gov.ru\r\nminstroy.credit-registry.nalog.ru\r\nminstroy.sakha.gov.ru\r\nminstroy.saratov.gov.ru\r\nminsvyaz.sakha.gov.ru\r\nmint.avito.ru\r\nmintmusic.tele2.ru\r\nmintrans.credit-registry.nalog.ru\r\nmintrans.sakha.gov.ru\r\nmintrud.sakha.gov.ru\r\nminus.avito.ru\r\nminusa.gosuslugi.ru\r\nminutka8.yandex.ru\r\nminutka9.yandex.ru\r\nminvody.drom.ru\r\nminy-ukrainy.iz.ru\r\nminzdrav.alania.gov.ru\r\nminzdrav.sakha.gov.ru\r\nmio.avito.ru\r\nmipt.x5.ru\r\nmir-skidok.psbank.ru\r\nmir.afisha.ru\r\nmir.avito.ru\r\nmir.tass.ru\r\nmira.avito.ru\r\nmiraccept.tinkoff.ru\r\nmiracle-c1.yandex.ru\r\nmiracle-c2-n1.yandex.ru\r\nmiracle-c2.yandex.ru\r\nmiracle-c3.yandex.ru\r\nmiracle-c4.yandex.ru\r\nmiracle-m1-n1.yandex.ru\r\nmiracle-m1-n3.yandex.ru\r\nmiracle-m2-n3.yandex.ru\r\nmiracle-p1-n3.yandex.ru\r\nmiracle-p1.yandex.ru\r\nmiracle-p2-n3.yandex.ru\r\nmiracle-p2.yandex.ru\r\nmiracle-p3-n3.yandex.ru\r\nmiracle-p3.yandex.ru\r\nmiracle-p4.yandex.ru\r\nmiracle-p5.yandex.ru\r\nmiracle-p6.yandex.ru\r\nmiracle-u1-n3.yandex.ru\r\nmiracle-u1.yandex.ru\r\nmiracle-u2-n3.yandex.ru\r\nmiracle-u2.yandex.ru\r\nmiracle-u5.yandex.ru\r\nmiracle-u6.yandex.ru\r\nmiracle.avito.ru\r\nmirage.avito.ru\r\nmirage67.mail.ru\r\nmiramirov.gosuslugi.ru\r\nmiranda.avito.ru\r\nmirconsciousness.rambler.ru\r\nmirguide.afisha.ru\r\nmirkwood.avito.ru\r\nmirosha.555.yandex.ru\r\nmirpromo.eldorado.ru\r\nmirror.avito.ru\r\nmirror.garant.ru\r\nmirror.wildberries.ru\r\nmirror.yandex.ru\r\nmirror1.avito.ru\r\nmirror2.avito.ru\r\nmirror2.garant.ru\r\nmirror3.avito.ru\r\nmirrors.avito.ru\r\nmirrorx64.garant.ru\r\nmirsud.sakha.gov.ru\r\nmirta.backend.mts.ru\r\nmirtesen.ntv.ru\r\nmis.2gis.ru\r\nmis.avito.ru\r\nmisc.avito.ru\r\nmishina.tass.ru\r\nmishkinskij-r45.gosweb.gosuslugi.ru\r\nmiso.avito.ru\r\nmisodb.tomsk.gov.ru\r\nmiss.avito.ru\r\nmission.avito.ru\r\nmissionmanagement.worldbank.org\r\nmissionmanagementdev.worldbank.org\r\nmissionmanagementqa.worldbank.org\r\nmississippi.avito.ru\r\nmissouri.avito.ru\r\nmister.avito.ru\r\nmistral.avito.ru\r\nmisty.avito.ru\r\nmit.avito.ru\r\nmitchell.avito.ru\r\nmitrofanov.tass.ru\r\nmitsubishi.avito.ru\r\nmitsubishi.drom.ru\r\nmitsubishi.vedomosti.ru\r\nmix.avito.ru\r\nmixajlovka-r25.gosweb.gosuslugi.ru\r\nmixx-territory.t2.ru\r\nmiyabi.avito.ru\r\nmiyazaki.avito.ru\r\nmj.avito.ru\r\nmjd.med.saratov.gov.ru\r\nmjrefresh.kino-teatr.ru\r\nmk.avito.ru\r\nmk.beeline.ru\r\nmk1.mk.ru\r\nmk2.mk.ru\r\nmka-vks2.mos.ru\r\nmkala.mk.ru\r\nmkb-autoplat-t.mkb.ru\r\nmkb-factoring.mkb.ru\r\nmkb-online-test.mkb.ru\r\nmkbb-demo.mkb.ru\r\nmkbi-api-test.mkb.ru\r\nmkbo-preprod.mkb.ru\r\nmkbru-test.mkb.ru\r\nmkc.avito.ru\r\nmkg.avito.ru\r\nmking.mail.ru\r\nmkl.beeline.ru\r\nmkolygin.ing.k8s.dev.ivi.ru\r\nmks.avito.ru\r\nmks.tass.ru\r\nmkt.avito.ru\r\nmktg.avito.ru\r\nmkucuk.1991.yandex.ru\r\nmkudusov.ing.k8s.dev.ivi.ru\r\nmkuh.58.yandex.ru\r\nml.avito.ru\r\nml.mk.ru\r\nml.rosatom.ru\r\nmladm.tomsk.gov.ru\r\nmlattach.cloud.mail.ru\r\nmld.avito.ru\r\nmlesdev.worldbank.org\r\nmlesdev2.worldbank.org\r\nmlesdr.worldbank.org\r\nmlesindev.worldbank.org\r\nmlesinprd.worldbank.org\r\nmlesinqa.worldbank.org\r\nmlesprd.worldbank.org\r\nmlesqa.worldbank.org\r\nmlesrel.worldbank.org\r\nmlife2.mvideo.ru\r\nmlm.avito.ru\r\nmln.mts.ru\r\nmlogman10.mail.ru\r\nmlogman11.mail.ru\r\nmlogman12.mail.ru\r\nmlogman13.i.mail.ru\r\nmlogman15.i.mail.ru\r\nmlogman3.mail.ru\r\nmlogman4.mail.ru\r\nmlogman5.mail.ru\r\nmlogman6.mail.ru\r\nmlogman7.mail.ru\r\nmlogman9.mail.ru\r\nmlp-0402-mlp-3dc51df2c3dbf8.ml.kz.cloud.vk.com\r\nmlp-1-nos3-mlp-3d92b77ce853e6.ml.kz.cloud.vk.com\r\nmlp-1361-mlp-3d908d8f3aca44.ml.kz.cloud.vk.com\r\nmlp-2637-mlp-3d9382bb526f58.ml.kz.cloud.vk.com\r\nmlp-29-11-2-mlp-3d906058171f34.ml.kz.cloud.vk.com\r\nmlp-29-11-3-mlp-3d9063b6486abc.ml.kz.cloud.vk.com\r\nmlp-5315-mlp-3d9089dc2ddbae.ml.kz.cloud.vk.com\r\nmlp-6785-mlp-3d9073235ebda4.ml.kz.cloud.vk.com\r\nmlp-9915-mlp-3d9097feccd1b8.ml.kz.cloud.vk.com\r\nmlp-highiops-s3-mlp-3d92b95b2920e6.ml.kz.cloud.vk.com\r\nmlp-ssd-s3-mlp-3d9481100f6b7a.ml.kz.cloud.vk.com\r\nmlp.avito.ru\r\nmlr-all.avito.ru\r\nmls.avito.ru\r\nmls.worldbank.org\r\nmlsdev.worldbank.org\r\nmlsearch.worldbank.org\r\nmlsearchdev.worldbank.org\r\nmlsearchqa.worldbank.org\r\nmlsqa.worldbank.org\r\nmm.1tv.ru\r\nmm.afisha.yandex.ru\r\nmm.avito.ru\r\nmm.iz.ru\r\nmm.kommersant.ru\r\nmm.mail.ru\r\nmm.mts.ru\r\nmm.mvideo.ru\r\nmm.rshb.ru\r\nmm.tinkoff.ru\r\nmm.transport.vtb.ru\r\nmm1.unicreditbank.ru\r\nmm2.1tv.ru\r\nmm2.unicreditbank.ru\r\nmm3.1tv.ru\r\nmmail.psbank.ru\r\nmmail.rbc.ru\r\nmmail.worldbank.org\r\nmmarakov.ing.k8s.dev.ivi.ru\r\nmmc.avito.ru\r\nmmedia.avito.ru\r\nmmeta10-00.yandex.ru\r\nmmeta11-00.yandex.ru\r\nmmeta12-00.yandex.ru\r\nmmeta13-00.yandex.ru\r\nmmeta14-00.yandex.ru\r\nmmeta16-00.yandex.ru\r\nmmeta17-00.yandex.ru\r\nmmeta20-00.yandex.ru\r\nmmeta21-00.yandex.ru\r\nmmeta22-00.yandex.ru\r\nmmeta23-00.yandex.ru\r\nmmeta25-00.yandex.ru\r\nmmeta27-00.yandex.ru\r\nmmeta30-00.yandex.ru\r\nmmeta31-00.yandex.ru\r\nmmeta33-00.yandex.ru\r\nmmeta34-00.yandex.ru\r\nmmeta5-00.yandex.ru\r\nmmk.avito.ru\r\nmml.beeline.ru\r\nmmm.avito.ru\r\nmmobileimg.img.ria.ru\r\nmmoem.avito.ru\r\nmmp.avito.ru\r\nmms.avito.ru\r\nmms.beeline.ru\r\nmms2.avito.ru\r\nmn-admwg001.beeline.ru\r\nmn-admwg002.beeline.ru\r\nmn.avito.ru\r\nmn2.lenta.ru\r\nmna.vk.com\r\nmneblizko.mts.ru\r\nmnemosyne.avito.ru\r\nmnevniki3.mail.ru\r\nmnews1-00.yandex.ru\r\nmnews2-00.yandex.ru\r\nmnews3-00.yandex.ru\r\nmng.avito.ru\r\nmng.drive.megafon.ru\r\nmng.uspeh.megafon.ru\r\nmnoc.beeline.ru\r\nmnr.gov.ru\r\nmns.avito.ru\r\nmntr.avito.ru\r\nmo.avito.ru\r\nmo.fas.gov.ru\r\nmo.gis.rosenergo.gov.ru\r\nmoa.avito.ru\r\nmoatdisplay.test.euronews.com\r\nmoatjw.test.euronews.com\r\nmob.avito.ru\r\nmob.beeline.ru\r\nmob.kino-teatr.ru\r\nmob.mkb.ru\r\nmob.vtb.ru\r\nmobadv.megafon.ru\r\nmobadvert.megafon.ru\r\nmobapp-daily-stage.open.ru\r\nmobapp-daily.open.ru\r\nmobapp-daily1.open.ru\r\nmobapp-daily2.open.ru\r\nmobapp.megafon.ru\r\nmobdrm.1tv.ru\r\nmobfarm.mail.ru\r\nmobi-da.vtb.ru\r\nmobi-ift.vtb.ru\r\nmobi-rr.vtb.ru\r\nmobi-vpn-da.vtb.ru\r\nmobi-vpn-ift.vtb.ru\r\nmobi-vpn-rr.vtb.ru\r\nmobi.avito.ru\r\nmobi.dick.16.yandex.ru\r\nmobi.money.yandex.ru\r\nmobil.avito.ru\r\nmobile-ads-beta.yandex.ru\r\nmobile-api.e.mail.ru\r\nmobile-calendar.teams.infra.rbc.ru\r\nmobile-feedback.yandex.ru\r\nmobile-greenfield1.online.sberbank.ru\r\nmobile-mib.broker.vtb.ru\r\nmobile-n1-psi-pbmob.testonline.sberbank.ru\r\nmobile-n2-psi-pbmob.testonline.sberbank.ru\r\nmobile-node1-new.online.sberbank.ru\r\nmobile-node1.online.sberbank.ru\r\nmobile-node2-new.online.sberbank.ru\r\nmobile-node2.online.sberbank.ru\r\nmobile-node3-new.online.sberbank.ru\r\nmobile-node3.online.sberbank.ru\r\nmobile-node4-new.online.sberbank.ru\r\nmobile-node4.online.sberbank.ru\r\nmobile-node5-new.online.sberbank.ru\r\nmobile-node5.online.sberbank.ru\r\nmobile-node6.online.sberbank.ru\r\nmobile-node7.online.sberbank.ru\r\nmobile-partners.maps.heroism.yandex.ru\r\nmobile-partners.store.heroism.yandex.ru\r\nmobile-pilot.vtb.ru\r\nmobile-rest.avito.ru\r\nmobile-scout-demo.mdrive.magnit.ru\r\nmobile-scout-pilot.mdrive.magnit.ru\r\nmobile-scout-prod.mdrive.magnit.ru\r\nmobile-sed.mchs.ru\r\nmobile-si1-psi-pbmob.testonline.sberbank.ru\r\nmobile-sm-dmz.alfabank.ru\r\nmobile-standin1.online.sberbank.ru\r\nmobile-standin2.online.sberbank.ru\r\nmobile-suo.open.ru\r\nmobile-test.avito.ru\r\nmobile-weather.api.2gis.ru\r\nmobile-zeus.alfabank.ru\r\nmobile-zeus.auth.alfabank.ru\r\nmobile.afisha.heroism.yandex.ru\r\nmobile.afisha.ru\r\nmobile.alfabank.ru\r\nmobile.analytics.heroism.yandex.ru\r\nmobile.api.afisha.ru\r\nmobile.auth.alfabank.ru\r\nmobile.auto.heroism.yandex.ru\r\nmobile.avito.ru\r\nmobile.beeline.ru\r\nmobile.broker.vtb.ru\r\nmobile.council.gov.ru\r\nmobile.dbuilding.mts.ru\r\nmobile.dev.avito.ru\r\nmobile.dev.cgu.iac.mchs.ru\r\nmobile.direct.heroism.yandex.ru\r\nmobile.disk.heroism.yandex.ru\r\nmobile.garant.ru\r\nmobile.greenfield2.online.sberbank.ru\r\nmobile.heroism.yandex.ru\r\nmobile.ixbt.com\r\nmobile.kino-teatr.ru\r\nmobile.kinopoisk.ru\r\nmobile.magnit.ru\r\nmobile.mail.ru\r\nmobile.maps.heroism.yandex.ru\r\nmobile.market.heroism.yandex.ru\r\nmobile.metrika.heroism.yandex.ru\r\nmobile.metro.heroism.yandex.ru\r\nmobile.mkb.ru\r\nmobile.money.heroism.yandex.ru\r\nmobile.money.yandex.ru\r\nmobile.music.heroism.yandex.ru\r\nmobile.navi.heroism.yandex.ru\r\nmobile.ok.ru\r\nmobile.online.heroism.yandex.ru\r\nmobile.open.ru\r\nmobile.parlament.gov.ru\r\nmobile.parliament.gov.ru\r\nmobile.preprod-front.open.ru\r\nmobile.qa-front.open.ru\r\nmobile.rasp.heroism.yandex.ru\r\nmobile.retail.heroism.yandex.ru\r\nmobile.retail.yandex.ru\r\nmobile.rshb.ru\r\nmobile.sberbank.ru\r\nmobile.shell.heroism.yandex.ru\r\nmobile.ssp.rambler.ru\r\nmobile.store.heroism.yandex.ru\r\nmobile.taxi.heroism.yandex.ru\r\nmobile.tinkoff.ru\r\nmobile.translate.heroism.yandex.ru\r\nmobile.tv.heroism.yandex.ru\r\nmobile.unicreditbank.ru\r\nmobile.vesti.ru\r\nmobile.vgtrk.com\r\nmobile.voicecollector.heroism.yandex.ru\r\nmobile.weather.heroism.yandex.ru\r\nmobile.yamobile.heroism.yandex.ru\r\nmobile.yandex.ru\r\nmobile01e.maps.yandex.ru\r\nmobile02e.maps.yandex.ru\r\nmobile02f.maps.yandex.ru\r\nmobile03e.maps.yandex.ru\r\nmobile03f.maps.yandex.ru\r\nmobile1.avito.ru\r\nmobile1hij7cyhvnpm.tinkoff.ru\r\nmobile2.avito.ru\r\nmobile2.broker.vtb.ru\r\nmobile2.ok.ru\r\nmobile2020.garant.ru\r\nmobile3.avito.ru\r\nmobile4.avito.ru\r\nmobile4.sberbank.ru\r\nmobile6zo0xq4xdno3-2.tinkoff.ru\r\nmobile6zo0xq4xdno3.tinkoff.ru\r\nmobile9.avito.ru\r\nmobileapi.e.mail.ru\r\nmobileapi.eldorado.ru\r\nmobileapi.ria.ru\r\nmobileapp.ac.gov.ru\r\nmobileapp.avito.ru\r\nmobileapp.mchs.ru\r\nmobileapp.russianpost.ru\r\nmobileapp.worldbank.org\r\nmobileappdev.worldbank.org\r\nmobileappint.worldbank.org\r\nmobileappintdev.worldbank.org\r\nmobileappintqa.worldbank.org\r\nmobileappqa.worldbank.org\r\nmobileapps.avito.ru\r\nmobilecm.csc.sberbank.ru\r\nmobilecollection.open.ru\r\nmobilecron.worldbank.org\r\nmobilecronqa.worldbank.org\r\nmobiledcca.beeline.ru\r\nmobiledev.avito.ru\r\nmobileid.beeline.ru\r\nmobileid.megafon.ru\r\nmobileimg.img.ria.ru\r\nmobileimg.ria.ru\r\nmobileimgq.img.ria.ru\r\nmobileiron.avito.ru\r\nmobilelab.alfabank.ru\r\nmobilemail.avito.ru\r\nmobilemodel.tass.ru\r\nmobileonline.garant.ru\r\nmobilereport.yandex.ru\r\nmobiles.avito.ru\r\nmobilescanner.alfabank.ru\r\nmobileservices.worldbank.org\r\nmobileservicesdev.worldbank.org\r\nmobileservicesqa.worldbank.org\r\nmobileservicesuat.worldbank.org\r\nmobilesm.alfabank.ru\r\nmobilestatic.tinkoff.ru\r\nmobiletest.avito.ru\r\nmobilia.avito.ru\r\nmobility.avito.ru\r\nmobincash.sberbank.ru\r\nmobinfo.megafon.ru\r\nmobiron002.open.ru\r\nmobiscan.magnit.ru\r\nmobisign.megafon.ru\r\nmobiz.gosuslugi.ru\r\nmobmaps-ext01e.tst.maps.yandex.ru\r\nmobmaps-legacy-ext01e.tst.maps.yandex.ru\r\nmobmaps-novosibirsk01.maps.yandex.ru\r\nmobmaps01h.tst.maps.yandex.ru\r\nmobmetrica.yandex.ru\r\nmobmetrika.yandex.ru\r\nmobpermit.mts.ru\r\nmobreklama.megafon.ru\r\nmobs.mail.ru\r\nmobsrv.mkb.ru\r\nmobt.open.ru\r\nmobtst.rshb.ru\r\nmoby.avito.ru\r\nmoc.avito.ru\r\nmoca.avito.ru\r\nmocha.avito.ru\r\nmock.avito.ru\r\nmod.avito.ru\r\nmoda.avito.ru\r\nmodback01e.yandex.ru\r\nmodback01f.yandex.ru\r\nmodback02e.yandex.ru\r\nmodback02i.yandex.ru\r\nmodback04e.yandex.ru\r\nmode.avito.ru\r\nmodel.avito.ru\r\nmodel.rambler.ru\r\nmodels.avito.ru\r\nmodem.avito.ru\r\nmodem.beeline.ru\r\nmoderation.editor22.ria.ru\r\nmoderator.avito.ru\r\nmodern.avito.ru\r\nmodern.ed.gov.ru\r\nmodno.21.yandex.ru\r\nmodule.avito.ru\r\nmoduleloaded.kino-teatr.ru\r\nmodules.avito.ru\r\nmody.avito.ru\r\nmoe.avito.ru\r\nmoffice2.sakha.gov.ru\r\nmofos.avito.ru\r\nmoga.avito.ru\r\nmogobe.mail.ru\r\nmoha.avito.ru\r\nmohamed.avito.ru\r\nmohsen.avito.ru\r\nmoi.avito.ru\r\nmoibiz-discuss.tass.ru\r\nmoicontent.mts.ru\r\nmoigorod.mos.ru\r\nmoikrug.yandex.ru\r\nmoj.avito.ru\r\nmojo.avito.ru\r\nmoka.avito.ru\r\nmolchanovo.social.tomsk.gov.ru\r\nmoldova.avito.ru\r\nmolly.avito.ru\r\nmolprav.sakha.gov.ru\r\nmolzhaninovskiy.mos.ru\r\nmom.avito.ru\r\nmomen.avito.ru\r\nmoments.avito.ru\r\nmomo.avito.ru\r\nmomondo.afisha.ru\r\nmoms.avito.ru\r\nmon-alert-out.iac.mchs.ru\r\nmon-gcp.sovcombank.ru\r\nmon-out.dialog.mchs.ru\r\nmon-out.iac.mchs.ru\r\nmon.avito.ru\r\nmon.gov.ru\r\nmon.k8s.khv.gov.ru\r\nmon.mts.sovcombank.ru\r\nmon.rt.sovcombank.ru\r\nmon1.avito.ru\r\nmon1.rambler.ru\r\nmon2.avito.ru\r\nmon3.avito.ru\r\nmona.avito.ru\r\nmona.mail.ru\r\nmonaco.avito.ru\r\nmonalisa.avito.ru\r\nmonarch.avito.ru\r\nmonavie.avito.ru\r\nmoncompte.avito.ru\r\nmonet.avito.ru\r\nmoney.alfabank.ru\r\nmoney.avito.ru\r\nmoney.lenta.ru\r\nmoney.mail.ru\r\nmoney.megafon.ru\r\nmoney.rambler.ru\r\nmoney.tele2.ru\r\nmoney.yandex.ru\r\nmoney.zdorovie-shkolnika.spb.aif.ru\r\nmoneybox.yandex.ru\r\nmoneydev.yandex.ru\r\nmoneyfbapp.yandex.ru\r\nmoneygeobase.yandex.ru\r\nmoneysurfer.content.tinkoff.ru\r\nmoneysurfer.np.content.tinkoff.ru\r\nmoneysurfer.tinkoff.ru\r\nmoneytree.tinkoff.ru\r\nmoneyvkapp.yandex.ru\r\nmongo-dev-group03.db.rbc.ru\r\nmongo-group01-d01.db.rbc.ru\r\nmongo-group02-d01.db.rbc.ru\r\nmongo-test01.dev.rbc.ru\r\nmongo-test03.dev.rbc.ru\r\nmongo-top-node01.dv.rbc.ru\r\nmongo-top-node03.dv.rbc.ru\r\nmongo.avito.ru\r\nmongodb.avito.ru\r\nmonic.mail.ru\r\nmonica.avito.ru\r\nmonika.avito.ru\r\nmonino.beeline.ru\r\nmonit.avito.ru\r\nmonitor-iva14.yandex.ru\r\nmonitor-ng.meduza.io\r\nmonitor.avito.ru\r\nmonitor.lk.otello.2gis.ru\r\nmonitor.meduza.io\r\nmonitor.perm.rg.ru\r\nmonitor1.avito.ru\r\nmonitor2.avito.ru\r\nmonitor3.avito.ru\r\nmonitoreo.avito.ru\r\nmonitoring.2gis.ru\r\nmonitoring.app-assistent.open.ru\r\nmonitoring.avito.ru\r\nmonitoring.duma.gov.ru\r\nmonitoring.economy.gov.ru\r\nmonitoring.gpn.mchs.ru\r\nmonitoring.svc.paas.cloud.mts.ru\r\nmonitoring2.avito.ru\r\nmonk.avito.ru\r\nmonkey.avito.ru\r\nmonkey1.mail.ru\r\nmonlog1.i.mail.ru\r\nmonlog11.i.mail.ru\r\nmonlog2.i.mail.ru\r\nmonlog21.i.mail.ru\r\nmonmon.avito.ru\r\nmono.avito.ru\r\nmonoapp-test.psbank.ru\r\nmonoapp.psbank.ru\r\nmonopoly.content.tinkoff.ru\r\nmonp-1847-adm.k.avito.ru\r\nmonp-2477-www.k.avito.ru\r\nmonp-2752-www.k.avito.ru\r\nmonroe.avito.ru\r\nmonster.avito.ru\r\nmonstry.tass.ru\r\nmontana.avito.ru\r\nmontblanc.lenta.ru\r\nmontblanc.mail.ru\r\nmontenegro.dev.kp.ru\r\nmontgomery.avito.ru\r\nmonth.gismeteo.ru\r\nmontreal.avito.ru\r\nmonty.avito.ru\r\nmoo.avito.ru\r\nmoodle.avito.ru\r\nmoodle1.avito.ru\r\nmoodle2.avito.ru\r\nmoody.avito.ru\r\nmoon.avito.ru\r\nmoonlight.avito.ru\r\nmops.avito.ru\r\nmoran.avito.ru\r\nmorandi.lenta.ru\r\nmordor.avito.ru\r\nmordor.yandex.ru\r\nmordovia.dev.home.megafon.ru\r\nmordovia.mts.ru\r\nmordovia.shop.megafon.ru\r\nmordovia.tele2.ru\r\nmore.avito.ru\r\nmoremall.project.tinkoff.ru\r\nmorena.avito.ru\r\nmoretech.vtb.ru\r\nmorgan.avito.ru\r\nmorgoth.yandex.ru\r\nmoria.avito.ru\r\nmoria.yandex.ru\r\nmorigin.avito.ru\r\nmorningstar.avito.ru\r\nmorph.gpn.mchs.ru\r\nmorpheus.avito.ru\r\nmorris.avito.ru\r\nmortgage.avito.ru\r\nmortgage.vtb.ru\r\nmorton.avito.ru\r\nmorzh.spec.tass.ru\r\nmos.avito.ru\r\nmos.transport.vtb.ru\r\nmosaic.avito.ru\r\nmosapps.mos.ru\r\nmosarchive.mos.ru\r\nmoscow.avito.ru\r\nmoscow.babyblog.ru\r\nmoscow.dns-shop.ru\r\nmoscow.drom.ru\r\nmoscow.fas.gov.ru\r\nmoscow.home.megafon.ru\r\nmoscow.lemanapro.ru\r\nmoscow.mchs.gov.ru\r\nmoscow.mchs.ru\r\nmoscow.megafon.ru\r\nmoscow.rabota.mail.ru\r\nmoscow.tg.t2.ru\r\nmoscow.travel.t2.ru\r\nmoscow2030.mos.ru\r\nmoscowapp.mos.ru\r\nmoscowbooks.litres.ru\r\nmoscownews.tass.ru\r\nmoscowroutes.tass.ru\r\nmoscowsounds.life.ru\r\nmoscowstreets.tass.ru\r\nmosfactories.tass.ru\r\nmosfinforum.bizconf.rbc.ru\r\nmosgit.rosbank.ru\r\nmosglobalforum.bizconf.rbc.ru\r\nmoskalenki.drom.ru\r\nmoskva.alpha.mts.ru\r\nmoskva.avito.ru\r\nmoskva.beeline.ru\r\nmoskva.mts-ru.stage.streamdev-ip.mts.ru\r\nmoskva.mts.ru\r\nmoskva.stg-stream.mts.ru\r\nmoskvenok.mos.ru\r\nmoskvitch.drom.ru\r\nmosobl.kp.ru\r\nmosriver.api.2gis.ru\r\nmoss.avito.ru\r\nmoss.megafon.ru\r\nmosstroi.lenta.ru\r\nmosstroyinform.mos.ru\r\nmost.avito.ru\r\nmost.tass.ru\r\nmost.tele2.ru\r\nmostpp.bizconf.rbc.ru\r\nmostran.vtb.ru\r\nmostransport.iz.ru\r\nmosvelofest.mos.ru\r\nmot.avito.ru\r\nmota.avito.ru\r\nmother.avito.ru\r\nmotion.avito.ru\r\nmoto.avito.ru\r\nmoto.drom.ru\r\nmotor.avito.ru\r\nmotoryzacja.avito.ru\r\nmould01e.yandex.ru\r\nmountain.avito.ru\r\nmountainbike.avito.ru\r\nmouse.avito.ru\r\nmov.avito.ru\r\nmove.avito.ru\r\nmovie.avito.ru\r\nmovie2.avito.ru\r\nmoviehero.project.tinkoff.ru\r\nmovies.avito.ru\r\nmovil.avito.ru\r\nmowar.mail.ru\r\nmowgli.avito.ru\r\nmox.avito.ru\r\nmoy.magnit.ru\r\nmoyka.2017.yandex.ru\r\nmozart.avito.ru\r\nmozhga.drom.ru\r\nmozhnovse.rosbank.ru\r\nmozilla.avito.ru\r\nmp-gorod.mos.ru\r\nmp.avito.ru\r\nmp.kommersant.ru\r\nmp.mkb.ru\r\nmp.rzd.ru\r\nmp.vtb.ru\r\nmp1.avito.ru\r\nmp2.avito.ru\r\nmp3.avito.ru\r\nmp4.avito.ru\r\nmpa.avito.ru\r\nmpa.yc.mvideo.ru\r\nmpandroid-filin.mail.ru\r\nmpclickstream.online.sberbank.ru\r\nmpe.avito.ru\r\nmperevod.pay.mts.ru\r\nmpgs.tomsk.gov.ru\r\nmpi-test.open.ru\r\nmpi-test.openbank.ru\r\nmpi-x-test.rosbank.ru\r\nmpi.avito.ru\r\nmpi.mkb.ru\r\nmpi.open.ru\r\nmpi.rosbank.ru\r\nmpi.tinkoff.ru\r\nmpi01.stg.mironline.ru\r\nmpi1.open.ru\r\nmpi2.open.ru\r\nmplatform.worldbank.org\r\nmplatformdev.worldbank.org\r\nmplatformint.worldbank.org\r\nmplatformintdev.worldbank.org\r\nmplatformintqa.worldbank.org\r\nmplatformqa.worldbank.org\r\nmpos-app-test.mkb.ru\r\nmpos-app.mkb.ru\r\nmpos.mkb.ru\r\nmpr.alania.gov.ru\r\nmpr.avito.ru\r\nmpr1.mail.ru\r\nmpr10.mail.ru\r\nmpr2.mail.ru\r\nmpr3.mail.ru\r\nmpr4.mail.ru\r\nmpr5.mail.ru\r\nmpr6.mail.ru\r\nmpr7.mail.ru\r\nmpr8.mail.ru\r\nmpr9.mail.ru\r\nmpro-and.maps.yandex.ru\r\nmpro.maps.yandex.ru\r\nmproxy.avito.ru\r\nmps.avito.ru\r\nmpsbk.sberbank.ru\r\nmpsccm101.worldbank.org\r\nmptracker.mts.ru\r\nmpx.tele2.ru\r\nmpxauth.tele2.ru\r\nmq.avito.ru\r\nmq.net.ixbt.com\r\nmqcarp1.rambler.ru\r\nmr-allaihovskij.sakha.gov.ru\r\nmr-amginskij.sakha.gov.ru\r\nmr-anabarskij.sakha.gov.ru\r\nmr-backup02h.maps.yandex.ru\r\nmr-bulunskij.sakha.gov.ru\r\nmr-hangalasskij.sakha.gov.ru\r\nmr-jeveno-bytantajskij.sakha.gov.ru\r\nmr-lenskij.sakha.gov.ru\r\nmr-megino-kangalasskij.sakha.gov.ru\r\nmr-mirninskij.sakha.gov.ru\r\nmr-momskij.sakha.gov.ru\r\nmr-namskij.sakha.gov.ru\r\nmr-nerjungrinskij.sakha.gov.ru\r\nmr-nizhnekolymskij.sakha.gov.ru\r\nmr-njurbinskij.sakha.gov.ru\r\nmr-ojmjakonskij.sakha.gov.ru\r\nmr-olekminskij.sakha.gov.ru\r\nmr-olenekskij.sakha.gov.ru\r\nmr-srednekolymskij.sakha.gov.ru\r\nmr-suntarskij.sakha.gov.ru\r\nmr-tattinskij.sakha.gov.ru\r\nmr-ust-aldanskij.sakha.gov.ru\r\nmr-ust-majskij.sakha.gov.ru\r\nmr-verhojanskij.sakha.gov.ru\r\nmr-viljujskij.sakha.gov.ru\r\nmr-zhiganskij.sakha.gov.ru\r\nmr.avito.ru\r\nmr.searo.who.int\r\nmr32f.maps.yandex.ru\r\nmra-mail.mail.ru\r\nmra.mail.ru\r\nmraclif1.i.mail.ru\r\nmraclif2.i.mail.ru\r\nmraclif3.i.mail.ru\r\nmraclif4.i.mail.ru\r\nmradeploy1.i.mail.ru\r\nmradm.letter.avito.ru\r\nmraf1.i.mail.ru\r\nmraf2.i.mail.ru\r\nmragraph1.i.mail.ru\r\nmrah1.i.mail.ru\r\nmrah2.i.mail.ru\r\nmralogman1.i.mail.ru\r\nmralogman3.i.mail.ru\r\nmramon1.i.mail.ru\r\nmrapif1.i.mail.ru\r\nmrapif2.i.mail.ru\r\nmrapuf1.i.mail.ru\r\nmrapuf2.i.mail.ru\r\nmrapuppet1.i.mail.ru\r\nmrapush.mail.ru\r\nmrapush1.i.mail.ru\r\nmrapush2.i.mail.ru\r\nmras1.mail.ru\r\nmras2.mail.ru\r\nmras3.mail.ru\r\nmras4.mail.ru\r\nmras4old.mail.ru\r\nmrascripts1.i.mail.ru\r\nmrascripts2.i.mail.ru\r\nmrascripts3.i.mail.ru\r\nmrascripts4.i.mail.ru\r\nmrasdb4.mail.ru\r\nmrasdb5.i.mail.ru\r\nmrasdb6.mail.ru\r\nmrasfeed1.mail.ru\r\nmrasign1.i.mail.ru\r\nmrasms1.i.mail.ru\r\nmrasms2.i.mail.ru\r\nmrasms3.i.mail.ru\r\nmrastest1.mail.ru\r\nmrastest2.mail.ru\r\nmrastest3.i.mail.ru\r\nmrb.avito.ru\r\nmrc.avito.ru\r\nmrecord.mts.ru\r\nmrg25.tass.ru\r\nmrgs.mail.ru\r\nmricq1.i.mail.ru\r\nmricq2.i.mail.ru\r\nmricq2.mail.ru\r\nmrig2.i.mail.ru\r\nmrigaloc.mail.ru\r\nmrih1.mail.ru\r\nmrih11.mail.ru\r\nmrih12.mail.ru\r\nmrih2.mail.ru\r\nmrih3.mail.ru\r\nmrih4.mail.ru\r\nmrih5.mail.ru\r\nmrih7.mail.ru\r\nmrih9.mail.ru\r\nmrihtest1.i.mail.ru\r\nmril1.mail.ru\r\nmril2.mail.ru\r\nmril3.i.mail.ru\r\nmril3.mail.ru\r\nmril4.i.mail.ru\r\nmril4.mail.ru\r\nmril5.mail.ru\r\nmril6.mail.ru\r\nmrilog.mail.ru\r\nmrilog1.mail.ru\r\nmrilog12.mail.ru\r\nmrilog2.mail.ru\r\nmrilog22.mail.ru\r\nmrim10.mail.ru\r\nmrim100.i.mail.ru\r\nmrim101.i.mail.ru\r\nmrim102.i.mail.ru\r\nmrim102.mail.ru\r\nmrim103.i.mail.ru\r\nmrim103.mail.ru\r\nmrim104.i.mail.ru\r\nmrim104.mail.ru\r\nmrim105.i.mail.ru\r\nmrim11.mail.ru\r\nmrim110.i.mail.ru\r\nmrim111.i.mail.ru\r\nmrim112.i.mail.ru\r\nmrim113.i.mail.ru\r\nmrim114.i.mail.ru\r\nmrim115.i.mail.ru\r\nmrim12.mail.ru\r\nmrim120.i.mail.ru\r\nmrim121.i.mail.ru\r\nmrim122.i.mail.ru\r\nmrim123.i.mail.ru\r\nmrim124.i.mail.ru\r\nmrim125.i.mail.ru\r\nmrim13.mail.ru\r\nmrim130.i.mail.ru\r\nmrim131.i.mail.ru\r\nmrim132.i.mail.ru\r\nmrim133.i.mail.ru\r\nmrim134.i.mail.ru\r\nmrim17.mail.ru\r\nmrim20.mail.ru\r\nmrim21.mail.ru\r\nmrim22.i.mail.ru\r\nmrim22.mail.ru\r\nmrim23.mail.ru\r\nmrim24.i.mail.ru\r\nmrim25.i.mail.ru\r\nmrim25.mail.ru\r\nmrim26.mail.ru\r\nmrim27.mail.ru\r\nmrim272.mail.ru\r\nmrim28.mail.ru\r\nmrim282.mail.ru\r\nmrim29.mail.ru\r\nmrim292.mail.ru\r\nmrim30.mail.ru\r\nmrim31.i.mail.ru\r\nmrim31.mail.ru\r\nmrim312.mail.ru\r\nmrim32.i.mail.ru\r\nmrim322.mail.ru\r\nmrim33.i.mail.ru\r\nmrim34.i.mail.ru\r\nmrim35.i.mail.ru\r\nmrim37.mail.ru\r\nmrim372.mail.ru\r\nmrim38.mail.ru\r\nmrim382.mail.ru\r\nmrim39.mail.ru\r\nmrim40.i.mail.ru\r\nmrim40.mail.ru\r\nmrim402.mail.ru\r\nmrim41.i.mail.ru\r\nmrim41.mail.ru\r\nmrim42.i.mail.ru\r\nmrim42.mail.ru\r\nmrim43.i.mail.ru\r\nmrim43.mail.ru\r\nmrim44.i.mail.ru\r\nmrim44.mail.ru\r\nmrim45.i.mail.ru\r\nmrim45.mail.ru\r\nmrim46.mail.ru\r\nmrim47.mail.ru\r\nmrim48.mail.ru\r\nmrim49.mail.ru\r\nmrim50.mail.ru\r\nmrim51.mail.ru\r\nmrim52.mail.ru\r\nmrim53.mail.ru\r\nmrim54.mail.ru\r\nmrim55.mail.ru\r\nmrim56.mail.ru\r\nmrim57.mail.ru\r\nmrim58.mail.ru\r\nmrim59.mail.ru\r\nmrim60.mail.ru\r\nmrim61.mail.ru\r\nmrim62.mail.ru\r\nmrim63.mail.ru\r\nmrim64.mail.ru\r\nmrim65.mail.ru\r\nmrim66.mail.ru\r\nmrim67.mail.ru\r\nmrim68.mail.ru\r\nmrim69.mail.ru\r\nmrim70.mail.ru\r\nmrim71.mail.ru\r\nmrim72.mail.ru\r\nmrim73.mail.ru\r\nmrim74.mail.ru\r\nmrim75.mail.ru\r\nmrim76.mail.ru\r\nmrim77.mail.ru\r\nmrim78.mail.ru\r\nmrim79.mail.ru\r\nmrim80.mail.ru\r\nmrim81.mail.ru\r\nmrim82.mail.ru\r\nmrim83.mail.ru\r\nmrim84.mail.ru\r\nmrim85.mail.ru\r\nmrim86.mail.ru\r\nmrim87.mail.ru\r\nmrim88.mail.ru\r\nmrim89.mail.ru\r\nmrim9.mail.ru\r\nmrim90.mail.ru\r\nmrim91.mail.ru\r\nmrim92.mail.ru\r\nmrim93.mail.ru\r\nmrim94.mail.ru\r\nmrim95.mail.ru\r\nmrim96.mail.ru\r\nmrim97.mail.ru\r\nmrim98.mail.ru\r\nmrimas1.mail.ru\r\nmrimbal1.i.mail.ru\r\nmrimbal2.i.mail.ru\r\nmrimconsttest1.i.mail.ru\r\nmrimctlrtest1.i.mail.ru\r\nmrimempty1.i.mail.ru\r\nmrimempty2.i.mail.ru\r\nmrimempty3.i.mail.ru\r\nmrimf1.i.mail.ru\r\nmrimf2.i.mail.ru\r\nmrimf3.i.mail.ru\r\nmrimf4.i.mail.ru\r\nmrimfeed1.i.mail.ru\r\nmrimfeedtest1.i.mail.ru\r\nmrimhost1.i.mail.ru\r\nmrimhost2.i.mail.ru\r\nmrimkusttest1.i.mail.ru\r\nmrimprofsttest1.i.mail.ru\r\nmrimraker1.mail.ru\r\nmrimraker2.i.mail.ru\r\nmrimraker3.i.mail.ru\r\nmrimrakertest1.i.mail.ru\r\nmrimscribe1.i.mail.ru\r\nmrimstage1.i.mail.ru\r\nmrimstage2.i.mail.ru\r\nmrimstage3.i.mail.ru\r\nmrimstage4.i.mail.ru\r\nmrimtest1.mail.ru\r\nmrimtest2.mail.ru\r\nmrimtest3.i.mail.ru\r\nmrimtest4.i.mail.ru\r\nmrimwat1.i.mail.ru\r\nmris1.mail.ru\r\nmris2.i.mail.ru\r\nmris3.mail.ru\r\nmris4.i.mail.ru\r\nmris4.mail.ru\r\nmris5.mail.ru\r\nmriv1.i.mail.ru\r\nmriv10.mail.ru\r\nmriv102.mail.ru\r\nmriv103.mail.ru\r\nmriv104.mail.ru\r\nmriv105.mail.ru\r\nmriv106.mail.ru\r\nmriv107.mail.ru\r\nmriv108.mail.ru\r\nmriv11.i.mail.ru\r\nmriv11.mail.ru\r\nmriv112.i.mail.ru\r\nmriv112.mail.ru\r\nmriv113.i.mail.ru\r\nmriv113.mail.ru\r\nmriv114.i.mail.ru\r\nmriv114.mail.ru\r\nmriv115.i.mail.ru\r\nmriv115.mail.ru\r\nmriv116.mail.ru\r\nmriv117.mail.ru\r\nmriv118.mail.ru\r\nmriv119.mail.ru\r\nmriv12.i.mail.ru\r\nmriv12.mail.ru\r\nmriv122.mail.ru\r\nmriv123.mail.ru\r\nmriv124.mail.ru\r\nmriv125.mail.ru\r\nmriv126.mail.ru\r\nmriv127.mail.ru\r\nmriv128.mail.ru\r\nmriv129.mail.ru\r\nmriv13.i.mail.ru\r\nmriv14.i.mail.ru\r\nmriv15.i.mail.ru\r\nmriv3.i.mail.ru\r\nmriv32.i.mail.ru\r\nmriv33.i.mail.ru\r\nmriv34.i.mail.ru\r\nmriv35.i.mail.ru\r\nmriv4.i.mail.ru\r\nmriv42.i.mail.ru\r\nmriv43.i.mail.ru\r\nmriv44.i.mail.ru\r\nmriv45.i.mail.ru\r\nmriv52.i.mail.ru\r\nmriv53.i.mail.ru\r\nmriv54.i.mail.ru\r\nmriv55.i.mail.ru\r\nmriv62.i.mail.ru\r\nmriv63.i.mail.ru\r\nmriv64.i.mail.ru\r\nmriv65.i.mail.ru\r\nmriv72.i.mail.ru\r\nmriv73.i.mail.ru\r\nmriv74.i.mail.ru\r\nmriv75.i.mail.ru\r\nmriv9.mail.ru\r\nmriv92.mail.ru\r\nmriv93.mail.ru\r\nmriv94.mail.ru\r\nmriv95.mail.ru\r\nmriv96.mail.ru\r\nmriv97.mail.ru\r\nmriv98.mail.ru\r\nmriv99.mail.ru\r\nmrivf1.i.mail.ru\r\nmrivf12.i.mail.ru\r\nmrivf13.i.mail.ru\r\nmrivf2.i.mail.ru\r\nmrivf22.i.mail.ru\r\nmrivf23.i.mail.ru\r\nmrivpstnapp1.i.mail.ru\r\nmrivpstnapp2.i.mail.ru\r\nmrivpstnapptest1.i.mail.ru\r\nmrivtest1.i.mail.ru\r\nmrivtest12.i.mail.ru\r\nmrivtest13.i.mail.ru\r\nmrivtest14.i.mail.ru\r\nmrivtest15.i.mail.ru\r\nmrkt.magnit.ru\r\nmrm.avito.ru\r\nmrp.avito.ru\r\nmrr01-2.extra.rbc.ru\r\nmrr01.extra.rbc.ru\r\nmrr02.common.rbc.ru\r\nmrr03.common.rbc.ru\r\nmrr04.common.rbc.ru\r\nmrr05.common.rbc.ru\r\nmrr06.common.rbc.ru\r\nmrr07.common.rbc.ru\r\nmrr08.common.rbc.ru\r\nmrr10.common.rbc.ru\r\nmrr14.common.rbc.ru\r\nmrr18.common.rbc.ru\r\nmrr20.common.rbc.ru\r\nmrr21.common.rbc.ru\r\nmrr22.common.rbc.ru\r\nmrr23.common.rbc.ru\r\nmrr24.common.rbc.ru\r\nmrr25.common.rbc.ru\r\nmrr26.common.rbc.ru\r\nmrr27.common.rbc.ru\r\nmrr28.common.rbc.ru\r\nmrr29.common.rbc.ru\r\nmrr30.common.rbc.ru\r\nmrr31.common.rbc.ru\r\nmrr35.common.rbc.ru\r\nmrr37.common.rbc.ru\r\nmrr38.common.rbc.ru\r\nmrr39.common.rbc.ru\r\nmrs.avito.ru\r\nmrtg.avito.ru\r\nmrtg1.avito.ru\r\nmrtg2.avito.ru\r\nmrtg3.avito.ru\r\nmru1.fmba.gov.ru\r\nmru122.fmba.gov.ru\r\nmru125.fmba.gov.ru\r\nmru135.fmba.gov.ru\r\nmru141.fmba.gov.ru\r\nmru15.fmba.gov.ru\r\nmru156.fmba.gov.ru\r\nmru170.fmba.gov.ru\r\nmru172.fmba.gov.ru\r\nmru174.fmba.gov.ru\r\nmru25.fmba.gov.ru\r\nmru31.fmba.gov.ru\r\nmru32.fmba.gov.ru\r\nmru33.fmba.gov.ru\r\nmru41.fmba.gov.ru\r\nmru42.fmba.gov.ru\r\nmru50.fmba.gov.ru\r\nmru51.fmba.gov.ru\r\nmru52.fmba.gov.ru\r\nmru58.fmba.gov.ru\r\nmru59.fmba.gov.ru\r\nmru72.fmba.gov.ru\r\nmru8.fmba.gov.ru\r\nmru81.fmba.gov.ru\r\nmru92.fmba.gov.ru\r\nmru99.fmba.gov.ru\r\nms-dsp.tinkoff.ru\r\nms-gateway.tinkoff.ru\r\nms-glass-lb10.bee.vimpelcom.ru\r\nms-ishopdmz001.vimpelcom.ru\r\nms-tmsdrctr01.beeline.ru\r\nms-tmsdrctr11.beeline.ru\r\nms-ui.net.ixbt.com\r\nms.ach.gov.ru\r\nms.audit.gov.ru\r\nms.avito.ru\r\nms.cs7777.vk.com\r\nms.dit.mos.ru\r\nms.dzen.ru\r\nms.net.ixbt.com\r\nms.ok.ru\r\nms.sakha.gov.ru\r\nms.vk.com\r\nms01.lb.tinkoff.ru\r\nms1.avito.ru\r\nms2.avito.ru\r\nms3.avito.ru\r\nms4.avito.ru\r\nmsa.avito.ru\r\nmsb-lk-test.mkb.ru\r\nmsb-lk.mkb.ru\r\nmsb.psbank.ru\r\nmsb2.psbank.ru\r\nmsb3.psbank.ru\r\nmsc.avito.ru\r\nmscribe1.mail.ru\r\nmscribeh1.mail.ru\r\nmscrm2015org.wbgcrmfqa.worldbank.org\r\nmscu.ok.ru\r\nmsd.avito.ru\r\nmsd.mos.ru\r\nmsdnaa.avito.ru\r\nmse.avito.ru\r\nmse21.avito.ru\r\nmse3.avito.ru\r\nmse4.avito.ru\r\nmse5.avito.ru\r\nmsearch-nft1.yc.mvideo.ru\r\nmsearch-prod1.yc.mvideo.ru\r\nmsearch-prod2.yc.mvideo.ru\r\nmsearch-staging1.yc.mvideo.ru\r\nmservices.ria.ru\r\nmservices.worldbank.org\r\nmservices2c.ria.ru\r\nmservicesdev.worldbank.org\r\nmservicesext.worldbank.org\r\nmservicesextqa.worldbank.org\r\nmservicesqa.worldbank.org\r\nmservicesuat.worldbank.org\r\nmsf.avito.ru\r\nmsfs.kino-teatr.ru\r\nmsg.avito.ru\r\nmsg.tass.ru\r\nmsges.vtb.ru\r\nmsgestst.vtb.ru\r\nmsgrapi.tinkoff.ru\r\nmsgu.gvc.rzd.ru\r\nmsgv.gvc.rzd.ru\r\nmshad.yandex.ru\r\nmsi.avito.ru\r\nmsi.beeline.ru\r\nmsite.avito.ru\r\nmsk-1-ipmi.meduza.io\r\nmsk-azure.ec.mts.ru\r\nmsk-cggw-01.msk.rzd.ru\r\nmsk-cggw-02.msk.rzd.ru\r\nmsk-cggw-03.msk.rzd.ru\r\nmsk-dpro-expe01.x5.ru\r\nmsk-dtln-expe02.x5.ru\r\nmsk-iisarr-test.tass.ru\r\nmsk-ix-n1.noc.gov.ru\r\nmsk-ix-n2.noc.gov.ru\r\nmsk-mdm-uagr1.megafon.ru\r\nmsk-mdm-uagr2.megafon.ru\r\nmsk-s-sql01.dbaas.ec.mts.ru\r\nmsk-tac.megafon.ru\r\nmsk-tass-wbx-irp.tass.ru\r\nmsk-vcse.megafon.ru\r\nmsk-vts-expe.open.ru\r\nmsk-vts-expe01.open.ru\r\nmsk-vts-expe02.open.ru\r\nmsk.afisha.ru\r\nmsk.avito.ru\r\nmsk.beeline.ru\r\nmsk.cloud.mts.ru\r\nmsk.cloud.vk.com\r\nmsk.dev.kp.ru\r\nmsk.gov.ru\r\nmsk.hr-reserve.fas.gov.ru\r\nmsk.kp.ru\r\nmsk.live.mts.ru\r\nmsk.meduza.io\r\nmsk.promo.tele2.ru\r\nmsk.tele2.ru\r\nmsk.vtb.ru\r\nmsk.yandex.ru\r\nmsk1.companion.tele2.ru\r\nmsk2-vpn.megafon.ru\r\nmsk3-vpn.megafon.ru\r\nmsk3.companion.tele2.ru\r\nmsk4-vpn.megafon.ru\r\nmsk5-vpn.megafon.ru\r\nmska-ise-01.open.ru\r\nmska-ise-02.open.ru\r\nmskfin.yandex.ru\r\nmskmon.568.yandex.ru\r\nmskmuseum.tele2.ru\r\nmsl.avito.ru\r\nmsm-group.74.yandex.ru\r\nmsm.avito.ru\r\nmsn-smtp-out.avito.ru\r\nmsn.avito.ru\r\nmsoft3.shared.dev.lab.x5.ru\r\nmsokolov.ing.k8s.dev.ivi.ru\r\nmsp.api.2gis.ru\r\nmsp.avito.ru\r\nmsp.economy.gov.ru\r\nmsp.mts.ru\r\nmspbank.credit-registry.nalog.ru\r\nmsps-lb.beeline.ru\r\nmss-cucm-pub.css.rzd.ru\r\nmss-cucm-sub01.css.rzd.ru\r\nmss-cucm-sub02.css.rzd.ru\r\nmss-expc-01.css.rzd.ru\r\nmss-expc-02.css.rzd.ru\r\nmss-expe-01-l.css.rzd.ru\r\nmss-expe-01.css.rzd.ru\r\nmss-expe-02-l.css.rzd.ru\r\nmss-expe-02.css.rzd.ru\r\nmss-imp-01.css.rzd.ru\r\nmss-imp-02.css.rzd.ru\r\nmss.avito.ru\r\nmssql.avito.ru\r\nmssql01.avito.ru\r\nmssql1.avito.ru\r\nmssql2.avito.ru\r\nmssql3.avito.ru\r\nmssql4.avito.ru\r\nmssql5.avito.ru\r\nmssqladmin.avito.ru\r\nmst.avito.ru\r\nmst3k.avito.ru\r\nmstage.avito.ru\r\nmstarostina.ing.k8s.dev.ivi.ru\r\nmstat.gosuslugi.ru\r\nmstaticcontent.ria.ru\r\nmstera.drom.ru\r\nmstudio.avito.ru\r\nmstun.avito.ru\r\nmsu.gov.ru\r\nmsud.garant.ru\r\nmsuggest1.rambler.ru\r\nmsuperserv.avito.ru\r\nmsw.avito.ru\r\nmsx.avito.ru\r\nmt-dev.psbank.ru\r\nmt-router01e.maps.yandex.ru\r\nmt-router01f.maps.yandex.ru\r\nmt-test.yandex.ru\r\nmt.afisha.ru\r\nmt.avito.ru\r\nmt.dobroe.aif.ru\r\nmt.efir.genproc.gov.ru\r\nmt.gazeta.ru\r\nmt.kino-teatr.ru\r\nmt.kp.ru\r\nmt.net.ixbt.com\r\nmt.rosbalt.ru\r\nmt0-00.yandex.ru\r\nmt1-00.yandex.ru\r\nmt2-00.yandex.ru\r\nmt3-00.yandex.ru\r\nmt4-00.yandex.ru\r\nmt5-00.yandex.ru\r\nmt6-00.yandex.ru\r\nmta-sts.avito.ru\r\nmta-sts.kino-teatr.ru\r\nmta-sts.mail.chechnya.gov.ru\r\nmta.apteka.ru\r\nmta.avito.ru\r\nmta.e-mail.sberbank.ru\r\nmta.email.tinkoff.ru\r\nmta.sber.ru\r\nmta01-10-auultimo.avito.ru\r\nmta01-20-auultimo.avito.ru\r\nmta01-30-auultimo.avito.ru\r\nmta01-40-auultimo.avito.ru\r\nmta01-50-auultimo.avito.ru\r\nmta01-60-auultimo.avito.ru\r\nmta01-70-auultimo.avito.ru\r\nmta01-80-auultimo.avito.ru\r\nmta01-90-auultimo.avito.ru\r\nmta01-bpo-10-auultimo.avito.ru\r\nmta01-bpo-20-auultimo.avito.ru\r\nmta01-bpo-30-auultimo.avito.ru\r\nmta01-bpo-40-auultimo.avito.ru\r\nmta01-bpo-50-auultimo.avito.ru\r\nmta01-bpo-60-auultimo.avito.ru\r\nmta01-bpo-70-auultimo.avito.ru\r\nmta01-bpo-80-auultimo.avito.ru\r\nmta01-bpo-90-auultimo.avito.ru\r\nmta01.avito.ru\r\nmta02-10-auultimo.avito.ru\r\nmta02-20-auultimo.avito.ru\r\nmta02-30-auultimo.avito.ru\r\nmta02-40-auultimo.avito.ru\r\nmta02-50-auultimo.avito.ru\r\nmta02-60-auultimo.avito.ru\r\nmta02-70-auultimo.avito.ru\r\nmta02-80-auultimo.avito.ru\r\nmta02-90-auultimo.avito.ru\r\nmta02-bpo-10-auultimo.avito.ru\r\nmta02-bpo-20-auultimo.avito.ru\r\nmta02-bpo-30-auultimo.avito.ru\r\nmta02-bpo-40-auultimo.avito.ru\r\nmta02-bpo-50-auultimo.avito.ru\r\nmta02-bpo-60-auultimo.avito.ru\r\nmta02-bpo-70-auultimo.avito.ru\r\nmta02-bpo-80-auultimo.avito.ru\r\nmta02-bpo-90-auultimo.avito.ru\r\nmta1.avito.ru\r\nmta2.avito.ru\r\nmta2.email.tinkoff.ru\r\nmta3.avito.ru\r\nmta3.email.tinkoff.ru\r\nmta4.email.tinkoff.ru\r\nmtadmin.myoffice.sberbank.ru\r\nmtarakanova.ing.k8s.dev.ivi.ru\r\nmtb2000.avito.ru\r\nmtb2000.vk.com\r\nmtback01e.yandex.ru\r\nmtback01f.yandex.ru\r\nmtback01i.yandex.ru\r\nmtback02e.yandex.ru\r\nmtback02f.yandex.ru\r\nmtback02i.yandex.ru\r\nmtbmc.magnit.ru\r\nmtc.avito.ru\r\nmtclick01-2.yandex.ru\r\nmtconv.yandex.ru\r\nmtconv01et.yandex.ru\r\nmtest.avito.ru\r\nmtest.ok.ru\r\nmtexport01e.yandex.ru\r\nmtexport01i.yandex.ru\r\nmtg.avito.ru\r\nmtinthelix.magnit.ru\r\nmtm.ria.ru\r\nmtmm.ria.ru\r\nmtn.avito.ru\r\nmtp.kino-teatr.ru\r\nmtp.mos.ru\r\nmtphantom01e.yandex.ru\r\nmtphantom01i.yandex.ru\r\nmtphantom01t.yandex.ru\r\nmtppk.transport.vtb.ru\r\nmtps.kino-teatr.ru\r\nmtquality.maps.yandex.ru\r\nmtrsgr01-1.yandex.ru\r\nmtrsgr01-2.yandex.ru\r\nmts-dfs.ivi.ru\r\nmts-fixa.test.ivi.ru\r\nmts-music.yandex.ru\r\nmts-release-217.azuremsk.cloudapp.ec.mts.ru\r\nmts-ru.stage.streamdev-ip.mts.ru\r\nmts.avito.ru\r\nmts.sovcombank.ru\r\nmts.streamdev.mts.ru\r\nmts.youdo.com\r\nmts2.azuremsk.cloudapp.ec.mts.ru\r\nmtsbank.credit-registry.nalog.ru\r\nmtsensk.home.megafon.ru\r\nmtsfit.mts.ru\r\nmtsk.mos.ru\r\nmtsmoney.mts.ru\r\nmtsopros.mts.ru\r\nmtspremium.mts.ru\r\nmtsrball.litres.ru\r\nmtsrbpremium.litres.ru\r\nmtstv-recs.mts.ru\r\nmtstv.mts.ru\r\nmtv.avito.ru\r\nmu.avito.ru\r\nmuammar1.rambler.ru\r\nmud.avito.ru\r\nmuenchen.avito.ru\r\nmuffin.avito.ru\r\nmugen.avito.ru\r\nmuhen.drom.ru\r\nmuho1.i.mail.ru\r\nmulberry.avito.ru\r\nmulcaweb-qa.yandex.ru\r\nmuller.avito.ru\r\nmulti.avito.ru\r\nmultidoc.dc.cloud.mts.ru\r\nmultifon.megafon.ru\r\nmultilife.vtb.ru\r\nmultimedia.avito.ru\r\nmultimedia.e.corp.megafon.ru\r\nmultimedia.e.shop.megafon.ru\r\nmultimedia.email.garant.ru\r\nmultimedia.email.kommersant.ru\r\nmultimedia.email.open.ru\r\nmultimedia.euro.who.int\r\nmultimedia.info.megafon.ru\r\nmultimedia.r2d2.alfabank.ru\r\nmultimedia.wpro.who.int\r\nmultitest.ok.ru\r\nmumbai.avito.ru\r\nmumbai.srv.hub.litres.ru\r\nmumble.avito.ru\r\nmumu.tass.ru\r\nmundo.avito.ru\r\nmunich.rusarchives.ru\r\nmunicipal.garant.ru\r\nmunin.9111.ru\r\nmunin.avito.ru\r\nmunition.gov.ru\r\nmunserv.sakha.gov.ru\r\nmuonline.avito.ru\r\nmup.demo.megafon.ru\r\nmup.gpn.mchs.ru\r\nmur.avito.ru\r\nmur.beeline.ru\r\nmura.avito.ru\r\nmurakami.avito.ru\r\nmurat.avito.ru\r\nmurbay.sakha.gov.ru\r\nmurdoch.avito.ru\r\nmurdock.avito.ru\r\nmurino.beeline.ru\r\nmurmansk.afisha.ru\r\nmurmansk.alfabank.ru\r\nmurmansk.avito.ru\r\nmurmansk.babyblog.ru\r\nmurmansk.beeline.ru\r\nmurmansk.dev.kp.ru\r\nmurmansk.drom.ru\r\nmurmansk.home.megafon.ru\r\nmurmansk.kp.ru\r\nmurmansk.lemanapro.ru\r\nmurmansk.mk.ru\r\nmurmansk.mts.ru\r\nmurmansk.shop.megafon.ru\r\nmurmansk.tele2.ru\r\nmurmanskaya-obl.beeline.ru\r\nmurom.30sad.yandex.ru\r\nmurphy.avito.ru\r\nmurray.avito.ru\r\nmurza.mail.ru\r\nmus.avito.ru\r\nmusa.avito.ru\r\nmusculacao.kino-teatr.ru\r\nmuse.avito.ru\r\nmuseum.avito.ru\r\nmuseum.genproc.gov.ru\r\nmuseum.mchs.gov.ru\r\nmuseum.mchs.ru\r\nmuseum.t2.ru\r\nmuseum.tele2.ru\r\nmuseumnight.culture.ru\r\nmuseumnight.tele2.ru\r\nmuseumpass.afisha.ru\r\nmushroom.avito.ru\r\nmusic-int.yandex.ru\r\nmusic-partner.yandex.ru\r\nmusic-stable.qloud.yandex.ru\r\nmusic.avito.ru\r\nmusic.beeline.ru\r\nmusic.mts.ru\r\nmusic.tele2.ru\r\nmusic.vk.com\r\nmusic.yandex.ru\r\nmusic1.avito.ru\r\nmusic1.mail.ru\r\nmusic10.mail.ru\r\nmusic11.mail.ru\r\nmusic12.mail.ru\r\nmusic14.mail.ru\r\nmusic15.mail.ru\r\nmusic16.mail.ru\r\nmusic17.mail.ru\r\nmusic18.mail.ru\r\nmusic19.mail.ru\r\nmusic2.mail.ru\r\nmusic20.mail.ru\r\nmusic21.mail.ru\r\nmusic22.mail.ru\r\nmusic23.mail.ru\r\nmusic24.mail.ru\r\nmusic25.mail.ru\r\nmusic26.mail.ru\r\nmusic27.mail.ru\r\nmusic28.mail.ru\r\nmusic29.mail.ru\r\nmusic3.mail.ru\r\nmusic30.mail.ru\r\nmusic31.mail.ru\r\nmusic32.mail.ru\r\nmusic33.mail.ru\r\nmusic34.mail.ru\r\nmusic35.mail.ru\r\nmusic36.mail.ru\r\nmusic37.mail.ru\r\nmusic38.mail.ru\r\nmusic39.mail.ru\r\nmusic4.mail.ru\r\nmusic40.mail.ru\r\nmusic41.mail.ru\r\nmusic42.mail.ru\r\nmusic43.mail.ru\r\nmusic44.mail.ru\r\nmusic45.mail.ru\r\nmusic5.mail.ru\r\nmusic6.mail.ru\r\nmusic7.mail.ru\r\nmusic8.mail.ru\r\nmusic9.mail.ru\r\nmusica.avito.ru\r\nmusicbox.avito.ru\r\nmusicman.avito.ru\r\nmusicrel-fe1.i.mail.ru\r\nmusicrel-fe2.i.mail.ru\r\nmusicrel-fe3.i.mail.ru\r\nmusicvibes.mts.ru\r\nmusicworld.avito.ru\r\nmusik.avito.ru\r\nmusique.avito.ru\r\nmusornaya-reforma.tass.ru\r\nmust.avito.ru\r\nmustafa.avito.ru\r\nmustang.avito.ru\r\nmuz.megafon.ru\r\nmuzeiizobretenii.review-k8s.aif.ru\r\nmuzic.avito.ru\r\nmuzica.avito.ru\r\nmuzik.avito.ru\r\nmuzika.avito.ru\r\nmuzyka.avito.ru\r\nmv.avito.ru\r\nmvd.consultant.ru\r\nmvd.gov.ru\r\nmvideo-on-prem-test-cluster.aws.mvideo.ru\r\nmvideo.litres.ru\r\nmvno.t2.ru\r\nmvp.api.vtb.ru\r\nmvp.avito.ru\r\nmvp.stage.championat.com\r\nmvprostelecom.litres.ru\r\nmvs.sakha.gov.ru\r\nmvtbbqr.vtb.ru\r\nmw.avito.ru\r\nmw01.rambler.ru\r\nmw02.rambler.ru\r\nmweb.avito.ru\r\nmwf-dev-01.beeline.ru\r\nmwf.beeline.ru\r\nmwfu.beeline.ru\r\nmwiki.mos.ru\r\nmwiorigin.avito.ru\r\nmwp.beeline.ru\r\nmws.avito.ru\r\nmwtt.tele2.ru\r\nmx-1.avito.ru\r\nmx-2.avito.ru\r\nmx-a.rzd.ru\r\nmx-b.rzd.ru\r\nmx-corp.yandex.ru\r\nmx-front-1d.1tv.ru\r\nmx-fs2.avito.ru\r\nmx-ksmg01.tass.ru\r\nmx-msk01.avito.ru\r\nmx-nn.rostelecom.ru\r\nmx-out-wr-1.rambler.ru\r\nmx-out-wr-2.rambler.ru\r\nmx-se.avito.ru\r\nmx-se02.avito.ru\r\nmx-se03.avito.ru.avito.ru\r\nmx-se04.avito.ru\r\nmx-se05.avito.ru\r\nmx.12.mchs.gov.ru\r\nmx.adeasy.avito.ru\r\nmx.apteki.2gis.ru\r\nmx.avito.ru\r\nmx.budget.gov.ru\r\nmx.cdrp.rzd.ru\r\nmx.cea.gov.ru\r\nmx.cs.avito.ru\r\nmx.dev.1tv.ru\r\nmx.garant.ru\r\nmx.gochs.tomsk.gov.ru\r\nmx.gosuslugi.ru\r\nmx.gov.ru\r\nmx.learning.rzd.ru\r\nmx.mail.rzd.ru\r\nmx.mse21.avito.ru\r\nmx.mse3.avito.ru\r\nmx.mse4.avito.ru\r\nmx.mse5.avito.ru\r\nmx.new.avito.ru\r\nmx.rosbank.ru\r\nmx.roseltorg.ru\r\nmx.secretsanta.ozon.ru\r\nmx.send.mail.ru\r\nmx.sports.ru\r\nmx.wto.economy.gov.ru\r\nmx.yandex.ru\r\nmx0-smtp.tass.ru\r\nmx0.avito.ru\r\nmx0.gov.ru\r\nmx0.tass.ru\r\nmx00.avito.ru\r\nmx00.vk.com\r\nmx01.avito.ru\r\nmx01.rosstat.gov.ru\r\nmx02.avito.ru\r\nmx02.mirtv.ru\r\nmx02.rutube.ru\r\nmx03.avito.ru\r\nmx03.rbc.ru\r\nmx04.avito.ru\r\nmx04.rbc.ru\r\nmx05.avito.ru\r\nmx05.rbc.ru\r\nmx06.avito.ru\r\nmx06.rbc.ru\r\nmx1-smtp-a.tass.ru\r\nmx1-smtp.tass.ru\r\nmx1.avito.ru\r\nmx1.cert.gov.ru\r\nmx1.client.rostelecom.ru\r\nmx1.epk.gov.ru\r\nmx1.fas.gov.ru\r\nmx1.genproc.gov.ru\r\nmx1.gisp.gov.ru\r\nmx1.gov.ru\r\nmx1.mail.ru\r\nmx1.minobrnauki.gov.ru\r\nmx1.rgn.gov.ru\r\nmx1.rkn.gov.ru\r\nmx1.rosbank.ru\r\nmx1.rshb.ru\r\nmx1.sakha.gov.ru\r\nmx1.tass.ru\r\nmx1.ticket.rzd.ru\r\nmx1.travel.alfabank.ru\r\nmx10.avito.ru\r\nmx10.mail.ru\r\nmx10.rambler.ru\r\nmx10.rs.gov.ru\r\nmx100.mail.ru\r\nmx101.mail.ru\r\nmx101.vtb.ru\r\nmx102.mail.ru\r\nmx102.vtb.ru\r\nmx103.mail.ru\r\nmx104.mail.ru\r\nmx105.mail.ru\r\nmx106.mail.ru\r\nmx107.mail.ru\r\nmx108.mail.ru\r\nmx109.mail.ru\r\nmx11.avito.ru\r\nmx11.duma.gov.ru\r\nmx11.mail.ru\r\nmx11.rambler.ru\r\nmx11.zdorovie-shkolnika.spb.aif.ru\r\nmx110.mail.ru\r\nmx111.mail.ru\r\nmx112.mail.ru\r\nmx113.mail.ru\r\nmx114.mail.ru\r\nmx115.mail.ru\r\nmx116.mail.ru\r\nmx117.mail.ru\r\nmx118.mail.ru\r\nmx119.mail.ru\r\nmx12.avito.ru\r\nmx12.mail.ru\r\nmx12.rambler.ru\r\nmx120.mail.ru\r\nmx121.mail.ru\r\nmx122.mail.ru\r\nmx123.mail.ru\r\nmx124.mail.ru\r\nmx125.mail.ru\r\nmx126.mail.ru\r\nmx127.mail.ru\r\nmx128.mail.ru\r\nmx129.mail.ru\r\nmx13.9111.ru\r\nmx13.avito.ru\r\nmx13.mail.ru\r\nmx130.mail.ru\r\nmx131.mail.ru\r\nmx132.mail.ru\r\nmx133.mail.ru\r\nmx134.mail.ru\r\nmx135.mail.ru\r\nmx136.mail.ru\r\nmx137.mail.ru\r\nmx138.mail.ru\r\nmx139.mail.ru\r\nmx14.mail.ru\r\nmx140.mail.ru\r\nmx141.mail.ru\r\nmx142.mail.ru\r\nmx143.mail.ru\r\nmx144.mail.ru\r\nmx145.mail.ru\r\nmx146.mail.ru\r\nmx147.mail.ru\r\nmx148.mail.ru\r\nmx149.mail.ru\r\nmx15.mail.ru\r\nmx150.mail.ru\r\nmx151.mail.ru\r\nmx152.mail.ru\r\nmx153.mail.ru\r\nmx154.mail.ru\r\nmx155.mail.ru\r\nmx156.mail.ru\r\nmx157.mail.ru\r\nmx158.mail.ru\r\nmx159.mail.ru\r\nmx16.9111.ru\r\nmx16.mail.ru\r\nmx160.mail.ru\r\nmx161.mail.ru\r\nmx162.mail.ru\r\nmx163.mail.ru\r\nmx164.mail.ru\r\nmx165.mail.ru\r\nmx166.mail.ru\r\nmx167.mail.ru\r\nmx168.mail.ru\r\nmx169.mail.ru\r\nmx17.9111.ru\r\nmx17.mail.ru\r\nmx170.mail.ru\r\nmx171.mail.ru\r\nmx172.mail.ru\r\nmx173.mail.ru\r\nmx174.mail.ru\r\nmx175.mail.ru\r\nmx176.mail.ru\r\nmx177.mail.ru\r\nmx178.mail.ru\r\nmx179.mail.ru\r\nmx18.9111.ru\r\nmx18.mail.ru\r\nmx180.mail.ru\r\nmx181.mail.ru\r\nmx182.mail.ru\r\nmx183.mail.ru\r\nmx184.mail.ru\r\nmx185.mail.ru\r\nmx186.mail.ru\r\nmx187.mail.ru\r\nmx188.mail.ru\r\nmx19.9111.ru\r\nmx19.mail.ru\r\nmx190.i.mail.ru\r\nmx191.i.mail.ru\r\nmx192.i.mail.ru\r\nmx193.i.mail.ru\r\nmx194.i.mail.ru\r\nmx195.i.mail.ru\r\nmx2.9111.ru\r\nmx2.avito.ru\r\nmx2.cert.gov.ru\r\nmx2.emails2.tinkoff.ru\r\nmx2.epk.gov.ru\r\nmx2.fas.gov.ru\r\nmx2.gisp.gov.ru\r\nmx2.gov.ru\r\nmx2.minobrnauki.gov.ru\r\nmx2.rbc.ru\r\nmx2.rosguard.gov.ru\r\nmx2.rshb.ru\r\nmx2.ticket.rzd.ru\r\nmx2.travel.alfabank.ru\r\nmx2.urfo.gov.ru\r\nmx20.avito.ru\r\nmx20.mail.ru\r\nmx200.i.mail.ru\r\nmx201.i.mail.ru\r\nmx201.vtb.ru\r\nmx202.i.mail.ru\r\nmx202.vtb.ru\r\nmx203.i.mail.ru\r\nmx204.i.mail.ru\r\nmx205.i.mail.ru\r\nmx21.9111.ru\r\nmx21.mail.ru\r\nmx210.i.mail.ru\r\nmx211.i.mail.ru\r\nmx212.i.mail.ru\r\nmx213.i.mail.ru\r\nmx214.i.mail.ru\r\nmx215.i.mail.ru\r\nmx22.9111.ru\r\nmx22.mail.ru\r\nmx220.i.mail.ru\r\nmx221.i.mail.ru\r\nmx222.i.mail.ru\r\nmx223.i.mail.ru\r\nmx224.i.mail.ru\r\nmx225.i.mail.ru\r\nmx23.9111.ru\r\nmx23.mail.ru\r\nmx24.mail.ru\r\nmx25.mail.ru\r\nmx26.mail.ru\r\nmx27.mail.ru\r\nmx28.mail.ru\r\nmx29.mail.ru\r\nmx3.avito.ru\r\nmx3.gov.ru\r\nmx3.mail.ru\r\nmx3.ozon.ru\r\nmx3.rbc.ru\r\nmx3.rkn.gov.ru\r\nmx3.rosbank.ru\r\nmx3.ticket.rzd.ru\r\nmx30.mail.ru\r\nmx31.mail.ru\r\nmx31.news.ozon.ru\r\nmx32.mail.ru\r\nmx32.news.ozon.ru\r\nmx33.mail.ru\r\nmx33.news.ozon.ru\r\nmx3321198.mail.ru\r\nmx332234.mail.ru\r\nmx33789.mail.ru\r\nmx34.mail.ru\r\nmx34.news.ozon.ru\r\nmx35.mail.ru\r\nmx35.news.ozon.ru\r\nmx36.mail.ru\r\nmx36.news.ozon.ru\r\nmx37.mail.ru\r\nmx37.news.ozon.ru\r\nmx38.mail.ru\r\nmx38.news.ozon.ru\r\nmx39.mail.ru\r\nmx39.news.ozon.ru\r\nmx4.9111.ru\r\nmx4.avito.ru\r\nmx4.gov.ru\r\nmx4.mail.ru\r\nmx4.rkn.gov.ru\r\nmx4.ticket.rzd.ru\r\nmx40.mail.ru\r\nmx40.news.ozon.ru\r\nmx41.mail.ru\r\nmx41.news.ozon.ru\r\nmx42.mail.ru\r\nmx42.news.ozon.ru\r\nmx43.mail.ru\r\nmx44.mail.ru\r\nmx45.mail.ru\r\nmx46.mail.ru\r\nmx47.mail.ru\r\nmx48.mail.ru\r\nmx49.mail.ru\r\nmx5.9111.ru\r\nmx5.avito.ru\r\nmx5.gov.ru\r\nmx5.mail.ru\r\nmx50.mail.ru\r\nmx51.mail.ru\r\nmx52.mail.ru\r\nmx53.mail.ru\r\nmx54.mail.ru\r\nmx55.mail.ru\r\nmx56.mail.ru\r\nmx57.mail.ru\r\nmx58.mail.ru\r\nmx59.mail.ru\r\nmx6.9111.ru\r\nmx6.avito.ru\r\nmx6.gov.ru\r\nmx6.mail.ru\r\nmx60.mail.ru\r\nmx61.mail.ru\r\nmx62.mail.ru\r\nmx63.mail.ru\r\nmx64.mail.ru\r\nmx65.mail.ru\r\nmx66.mail.ru\r\nmx67.mail.ru\r\nmx68.gosuslugi.ru\r\nmx68.mail.ru\r\nmx69.mail.ru\r\nmx7.9111.ru\r\nmx7.avito.ru\r\nmx7.mail.ru\r\nmx70.mail.ru\r\nmx71.mail.ru\r\nmx72.mail.ru\r\nmx73.mail.ru\r\nmx74.mail.ru\r\nmx75.mail.ru\r\nmx76.mail.ru\r\nmx77.mail.ru\r\nmx7754.mail.ru\r\nmx78.mail.ru\r\nmx79.mail.ru\r\nmx8.9111.ru\r\nmx8.avito.ru\r\nmx8.mail.ru\r\nmx81.mail.ru\r\nmx82.mail.ru\r\nmx84.mail.ru\r\nmx85.mail.ru\r\nmx9.avito.ru\r\nmx9.mail.ru\r\nmx90.mail.ru\r\nmx91.mail.ru\r\nmx92.mail.ru\r\nmx93.mail.ru\r\nmx94.mail.ru\r\nmx95.mail.ru\r\nmx96.mail.ru\r\nmx97.mail.ru\r\nmx98.mail.ru\r\nmx99.mail.ru\r\nmxb1.i.mail.ru\r\nmxb2.i.mail.ru\r\nmxb3.i.mail.ru\r\nmxb4.i.mail.ru\r\nmxbackup.avito.ru\r\nmxbackup2.avito.ru\r\nmxf1.rambler.ru\r\nmxf2.rambler.ru\r\nmxfwd.mail.ru\r\nmxm.avito.ru\r\nmxmail.avito.ru\r\nmxmy1.i.mail.ru\r\nmxmy2.i.mail.ru\r\nmxmy3.i.mail.ru\r\nmxmy4.i.mail.ru\r\nmxnetworkactivityurlprotocol.kino-teatr.ru\r\nmxout.avito.ru\r\nmxout1.rambler.ru\r\nmxpdd1.i.mail.ru\r\nmxpdd10.i.mail.ru\r\nmxpdd2.i.mail.ru\r\nmxpdd3.i.mail.ru\r\nmxpdd4.i.mail.ru\r\nmxpdd5.i.mail.ru\r\nmxs.avito.ru\r\nmxs.beeline.ru\r\nmxs.duma.gov.ru\r\nmxs.gisp.gov.ru\r\nmxs2.mail.ru\r\nmxt.beeline.ru\r\nmxt.duma.gov.ru\r\nmxtech1.beeline.ru\r\nmxtech2.beeline.ru\r\nmxtest.yandex.ru\r\nmxtest1.mail.ru\r\nmxtest2.mail.ru\r\nmxu.beeline.ru\r\nmxv.duma.gov.ru\r\nmxv1.i.mail.ru\r\nmxw.duma.gov.ru\r\nmxz1s1.ozon.ru\r\nmxz20s1.ozon.ru\r\nmxz2s1.ozon.ru\r\nmy-api.e.mail.ru\r\nmy-bitrix24-01.interfax.ru\r\nmy-bitrix24-02.interfax.ru\r\nmy-bitrix24-41.interfax.ru\r\nmy-bitrix24-42.interfax.ru\r\nmy-bitrix24-51.interfax.ru\r\nmy-bitrix24-52.interfax.ru\r\nmy-bx.interfax.ru\r\nmy-carorder-test.interfax.ru\r\nmy-carorder.interfax.ru\r\nmy-digit-01.interfax.ru\r\nmy-digit-old.interfax.ru\r\nmy-digit-test.interfax.ru\r\nmy-digit.interfax.ru\r\nmy-orgstructure.interfax.ru\r\nmy.1pad.yandex.ru\r\nmy.alfabank.ru\r\nmy.avito.ru\r\nmy.dmpkit.lemanapro.ru\r\nmy.dom.gosuslugi.ru\r\nmy.drom.ru\r\nmy.ft01.dom.test.gosuslugi.ru\r\nmy.hub.megafon.ru\r\nmy.interfax.ru\r\nmy.kommersant.ru\r\nmy.kpak.dom.test.gosuslugi.ru\r\nmy.magnit.ru\r\nmy.mail.ru\r\nmy.mts.ru\r\nmy.nt01.dom.test.gosuslugi.ru\r\nmy.ntv.ru\r\nmy.perekrestok.ru\r\nmy.psi02.dom.test.gosuslugi.ru\r\nmy.rabota.sber.ru\r\nmy.russianpost.ru\r\nmy.rzd.ru\r\nmy.sit01.dom.test.gosuslugi.ru\r\nmy.sit02.dom.test.gosuslugi.ru\r\nmy.sports.ru\r\nmy.ssp.dom.test.gosuslugi.ru\r\nmy.tass.ru\r\nmy.tele2.ru\r\nmy.tiu.ru\r\nmy1.avito.ru\r\nmy10.mail.ru\r\nmy100.mail.ru\r\nmy101.mail.ru\r\nmy102.mail.ru\r\nmy103.mail.ru\r\nmy104.mail.ru\r\nmy105.mail.ru\r\nmy106.mail.ru\r\nmy107.mail.ru\r\nmy108.mail.ru\r\nmy109.mail.ru\r\nmy110.mail.ru\r\nmy111.mail.ru\r\nmy112.mail.ru\r\nmy113.mail.ru\r\nmy114.mail.ru\r\nmy115.mail.ru\r\nmy116.mail.ru\r\nmy117.mail.ru\r\nmy118.mail.ru\r\nmy119.mail.ru\r\nmy12.mail.ru\r\nmy120.mail.ru\r\nmy121.mail.ru\r\nmy122.mail.ru\r\nmy123.mail.ru\r\nmy124.mail.ru\r\nmy125.mail.ru\r\nmy126.mail.ru\r\nmy127.mail.ru\r\nmy128.mail.ru\r\nmy129.mail.ru\r\nmy13.mail.ru\r\nmy130.mail.ru\r\nmy131.mail.ru\r\nmy132.mail.ru\r\nmy133.mail.ru\r\nmy134.mail.ru\r\nmy135.mail.ru\r\nmy136.mail.ru\r\nmy137.mail.ru\r\nmy138.mail.ru\r\nmy139.mail.ru\r\nmy14.mail.ru\r\nmy140.mail.ru\r\nmy141.mail.ru\r\nmy143.mail.ru\r\nmy144.mail.ru\r\nmy145.mail.ru\r\nmy146.mail.ru\r\nmy147.mail.ru\r\nmy148.mail.ru\r\nmy149.mail.ru\r\nmy15.mail.ru\r\nmy150.mail.ru\r\nmy152.mail.ru\r\nmy155.mail.ru\r\nmy156.mail.ru\r\nmy157.mail.ru\r\nmy158.mail.ru\r\nmy159.mail.ru\r\nmy16.mail.ru\r\nmy160.mail.ru\r\nmy161.mail.ru\r\nmy162.mail.ru\r\nmy163.mail.ru\r\nmy164.mail.ru\r\nmy165.mail.ru\r\nmy166.mail.ru\r\nmy167.mail.ru\r\nmy168.mail.ru\r\nmy169.mail.ru\r\nmy17.mail.ru\r\nmy170.mail.ru\r\nmy171.mail.ru\r\nmy172.mail.ru\r\nmy18.mail.ru\r\nmy186.mail.ru\r\nmy189.mail.ru\r\nmy19.mail.ru\r\nmy190.mail.ru\r\nmy191.mail.ru\r\nmy192.mail.ru\r\nmy193.mail.ru\r\nmy194.mail.ru\r\nmy195.mail.ru\r\nmy196.mail.ru\r\nmy197.mail.ru\r\nmy198.mail.ru\r\nmy199.mail.ru\r\nmy2.avito.ru\r\nmy2.mail.ru\r\nmy20.mail.ru\r\nmy200.mail.ru\r\nmy201.mail.ru\r\nmy202.mail.ru\r\nmy203.mail.ru\r\nmy204.mail.ru\r\nmy205.mail.ru\r\nmy206.mail.ru\r\nmy207.mail.ru\r\nmy208.mail.ru\r\nmy21.mail.ru\r\nmy215.mail.ru\r\nmy216.mail.ru\r\nmy217.mail.ru\r\nmy218.mail.ru\r\nmy219.mail.ru\r\nmy22.mail.ru\r\nmy220.mail.ru\r\nmy221.mail.ru\r\nmy222.mail.ru\r\nmy223.mail.ru\r\nmy224.mail.ru\r\nmy225.mail.ru\r\nmy226.mail.ru\r\nmy227.mail.ru\r\nmy228.mail.ru\r\nmy229.mail.ru\r\nmy230.mail.ru\r\nmy231.mail.ru\r\nmy232.mail.ru\r\nmy233.mail.ru\r\nmy234.mail.ru\r\nmy235.mail.ru\r\nmy236.mail.ru\r\nmy237.mail.ru\r\nmy238.mail.ru\r\nmy239.mail.ru\r\nmy24.mail.ru\r\nmy240.mail.ru\r\nmy241.mail.ru\r\nmy242.mail.ru\r\nmy243.mail.ru\r\nmy244.mail.ru\r\nmy246.mail.ru\r\nmy247.mail.ru\r\nmy248.mail.ru\r\nmy249.mail.ru\r\nmy250.mail.ru\r\nmy251.mail.ru\r\nmy252.mail.ru\r\nmy253.mail.ru\r\nmy254.mail.ru\r\nmy255.mail.ru\r\nmy256.mail.ru\r\nmy257.mail.ru\r\nmy258.mail.ru\r\nmy271.mail.ru\r\nmy272.mail.ru\r\nmy273.mail.ru\r\nmy274.mail.ru\r\nmy275.mail.ru\r\nmy276.mail.ru\r\nmy277.mail.ru\r\nmy278.mail.ru\r\nmy279.mail.ru\r\nmy28.mail.ru\r\nmy280.mail.ru\r\nmy281.mail.ru\r\nmy282.mail.ru\r\nmy283.mail.ru\r\nmy284.mail.ru\r\nmy285.mail.ru\r\nmy286.mail.ru\r\nmy287.mail.ru\r\nmy288.mail.ru\r\nmy289.mail.ru\r\nmy29.mail.ru\r\nmy290.mail.ru\r\nmy291.mail.ru\r\nmy292.mail.ru\r\nmy293.mail.ru\r\nmy294.mail.ru\r\nmy295.mail.ru\r\nmy296.mail.ru\r\nmy297.mail.ru\r\nmy298.mail.ru\r\nmy299.mail.ru\r\nmy3.mail.ru\r\nmy30.mail.ru\r\nmy300.mail.ru\r\nmy301.mail.ru\r\nmy302.mail.ru\r\nmy31.mail.ru\r\nmy32.mail.ru\r\nmy34.mail.ru\r\nmy36.mail.ru\r\nmy37.mail.ru\r\nmy38.mail.ru\r\nmy4.mail.ru\r\nmy40.mail.ru\r\nmy41.mail.ru\r\nmy42.mail.ru\r\nmy43.mail.ru\r\nmy44.mail.ru\r\nmy45.mail.ru\r\nmy46.mail.ru\r\nmy47.mail.ru\r\nmy48.mail.ru\r\nmy49.mail.ru\r\nmy5.mail.ru\r\nmy50.mail.ru\r\nmy53.mail.ru\r\nmy55.mail.ru\r\nmy56.mail.ru\r\nmy57.mail.ru\r\nmy59.mail.ru\r\nmy6.mail.ru\r\nmy60.mail.ru\r\nmy61.mail.ru\r\nmy62.mail.ru\r\nmy63.mail.ru\r\nmy65.mail.ru\r\nmy66.mail.ru\r\nmy67.mail.ru\r\nmy68.mail.ru\r\nmy69.mail.ru\r\nmy70.mail.ru\r\nmy71.mail.ru\r\nmy74.mail.ru\r\nmy75.mail.ru\r\nmy76.mail.ru\r\nmy77.mail.ru\r\nmy78.mail.ru\r\nmy79.mail.ru\r\nmy8.mail.ru\r\nmy80.mail.ru\r\nmy81.mail.ru\r\nmy82.mail.ru\r\nmy83.mail.ru\r\nmy84.mail.ru\r\nmy85.mail.ru\r\nmy86.mail.ru\r\nmy87.mail.ru\r\nmy88.mail.ru\r\nmy89.mail.ru\r\nmy9.mail.ru\r\nmy90.mail.ru\r\nmy91.mail.ru\r\nmy92.mail.ru\r\nmy93.mail.ru\r\nmy94.mail.ru\r\nmy95.mail.ru\r\nmy96.mail.ru\r\nmy97.mail.ru\r\nmy98.mail.ru\r\nmy99.mail.ru\r\nmyaccount.avito.ru\r\nmyadmin.avito.ru\r\nmyaj1.mail.ru\r\nmyaj10.mail.ru\r\nmyaj11.mail.ru\r\nmyaj12.mail.ru\r\nmyaj13.mail.ru\r\nmyaj14.mail.ru\r\nmyaj15.mail.ru\r\nmyaj2.mail.ru\r\nmyaj3.mail.ru\r\nmyaj4.mail.ru\r\nmyaj5.mail.ru\r\nmyaj6.mail.ru\r\nmyaj7.mail.ru\r\nmyaj8.mail.ru\r\nmyaj9.mail.ru\r\nmyalpha1.i.mail.ru\r\nmyalpha1.mail.ru\r\nmyalpha10.i.mail.ru\r\nmyalpha11.i.mail.ru\r\nmyalpha12.i.mail.ru\r\nmyalpha2.mail.ru\r\nmyalpha21.i.mail.ru\r\nmyalpha24.i.mail.ru\r\nmyalpha25.i.mail.ru\r\nmyalpha3.mail.ru\r\nmyalpha31.i.mail.ru\r\nmyalpha34.i.mail.ru\r\nmyalpha35.i.mail.ru\r\nmyalpha4.mail.ru\r\nmyalpha5.mail.ru\r\nmyalpha6.mail.ru\r\nmyalpha7.mail.ru\r\nmyalpha91.i.mail.ru\r\nmyapps.avito.ru\r\nmybaby.avito.ru\r\nmybal3.i.mail.ru\r\nmybal4.i.mail.ru\r\nmybeta1.mail.ru\r\nmybeta2.mail.ru\r\nmybeta3.mail.ru\r\nmybeta4.mail.ru\r\nmybeta5.mail.ru\r\nmyblog.avito.ru\r\nmybook.avito.ru\r\nmycard.psbank.ru\r\nmycard.tele2.ru\r\nmycareer.lemanapro.ru\r\nmycargo.rzd.ru\r\nmychart.avito.ru\r\nmyclub.garant.ru\r\nmycomet.my.mail.ru\r\nmycon1.mail.ru\r\nmycon10.mail.ru\r\nmycon11.mail.ru\r\nmycon12.mail.ru\r\nmycon2.mail.ru\r\nmycon3.mail.ru\r\nmycon4.mail.ru\r\nmycon5.mail.ru\r\nmycon6.mail.ru\r\nmycon7.mail.ru\r\nmycon8.mail.ru\r\nmycon9.mail.ru\r\nmycontest1.mail.ru\r\nmycontest2.mail.ru\r\nmycron1.mail.ru\r\nmycron2.mail.ru\r\nmyd1.i.mail.ru\r\nmyd1.mail.ru\r\nmydesktop.avito.ru\r\nmydev-test.lemanapro.ru\r\nmydev.avito.ru\r\nmydev.lemanapro.ru\r\nmydev1.mail.ru\r\nmydev2.mail.ru\r\nmydev3.i.mail.ru\r\nmydevices.vtb.ru\r\nmydigitalcodecs.avito.ru\r\nmydomain.avito.ru\r\nmydrive.avito.ru\r\nmydss.psbank.ru\r\nmydssdev.psbank.ru\r\nmydsstst.psbank.ru\r\nmydwhproxy1.i.mail.ru\r\nmydwhproxy2.i.mail.ru\r\nmyernicompany.tiu.ru\r\nmyfiles.avito.ru\r\nmyfiles.yandex.ru\r\nmyforum.avito.ru\r\nmyfreecodecs.avito.ru\r\nmyftp.avito.ru\r\nmyhome.avito.ru\r\nmyhost.avito.ru\r\nmyhrscheduler.worldbank.org\r\nmyhrschedulerext.worldbank.org\r\nmyhrschedulerkiosk.worldbank.org\r\nmyhrschedulermonitor.worldbank.org\r\nmyhrss.worldbank.org\r\nmyhrss92.worldbank.org\r\nmyhrss92dev.worldbank.org\r\nmyhrss92qa.worldbank.org\r\nmyhrss92stg.worldbank.org\r\nmyhrss92tst.worldbank.org\r\nmyhrssdev.worldbank.org\r\nmyhrssqa.worldbank.org\r\nmyhrssstg.worldbank.org\r\nmyhrsstst.worldbank.org\r\nmyidealsmile.lady.mail.ru\r\nmyigrek1.mail.ru\r\nmyigrek10.mail.ru\r\nmyigrek11.mail.ru\r\nmyigrek12.mail.ru\r\nmyigrek2.mail.ru\r\nmyigrek3.mail.ru\r\nmyigrek32.mail.ru\r\nmyigrek4.mail.ru\r\nmyigrek42.mail.ru\r\nmyigrek5.mail.ru\r\nmyigrek6.mail.ru\r\nmyigrek7.mail.ru\r\nmyigrek8.mail.ru\r\nmyigrek9.mail.ru\r\nmyinfo.avito.ru\r\nmyinventory.beeline.ru\r\nmyip-magn.ural.mts.ru\r\nmyip-miass.ural.mts.ru\r\nmyip.avito.ru\r\nmyjob.avito.ru\r\nmyland.25.yandex.ru\r\nmylarch1.mail.ru\r\nmylarch2.mail.ru\r\nmylex.gov.ru\r\nmylife.avito.ru\r\nmylive.avito.ru\r\nmylivecodecs.avito.ru\r\nmylove.avito.ru\r\nmym.avito.ru\r\nmymail.avito.ru\r\nmymail.kino-teatr.ru\r\nmymanage1.i.mail.ru\r\nmymanage2.i.mail.ru\r\nmymap1.mail.ru\r\nmymap2.mail.ru\r\nmymediacodecs.avito.ru\r\nmymoney.avito.ru\r\nmymusic.avito.ru\r\nmyname.avito.ru\r\nmynanny.youdo.com\r\nmynat1.mail.ru\r\nmynat2.mail.ru\r\nmynet.avito.ru\r\nmynewcodecs.avito.ru\r\nmyoffice.avito.ru\r\nmyoffice.fas.gov.ru\r\nmyoffice.sberbank.ru\r\nmyown.avito.ru\r\nmyp.beeline.ru\r\nmypage.avito.ru\r\nmypc.alfabank.ru\r\nmypc.avito.ru\r\nmypension.worldbank.org\r\nmyphotos.avito.ru\r\nmyphp.avito.ru\r\nmypictures.avito.ru\r\nmypinger1.mail.ru\r\nmypinger2.mail.ru\r\nmypinger3.mail.ru\r\nmypinger4.mail.ru\r\nmyplace.avito.ru\r\nmyplaces.api.2gis.ru\r\nmypmtest1.i.mail.ru\r\nmyportal.avito.ru\r\nmyportal.worldbank.org\r\nmyprivet.beeline.ru\r\nmyprotected.mts.ru\r\nmyqualification.rambler.ru\r\nmyrtle.avito.ru\r\nmyschool.litres.ru\r\nmysender1.mail.ru\r\nmysender10.mail.ru\r\nmysender11.mail.ru\r\nmysender12.mail.ru\r\nmysender13.mail.ru\r\nmysender15.mail.ru\r\nmysender16.mail.ru\r\nmysender17.mail.ru\r\nmysender18.mail.ru\r\nmysender19.mail.ru\r\nmysender2.mail.ru\r\nmysender20.mail.ru\r\nmysender21.mail.ru\r\nmysender22.mail.ru\r\nmysender23.mail.ru\r\nmysender24.mail.ru\r\nmysender25.mail.ru\r\nmysender26.mail.ru\r\nmysender27.mail.ru\r\nmysender28.mail.ru\r\nmysender29.mail.ru\r\nmysender3.mail.ru\r\nmysender30.mail.ru\r\nmysender31.mail.ru\r\nmysender32.mail.ru\r\nmysender33.mail.ru\r\nmysender34.mail.ru\r\nmysender35.mail.ru\r\nmysender37.mail.ru\r\nmysender38.mail.ru\r\nmysender39.mail.ru\r\nmysender4.mail.ru\r\nmysender40.mail.ru\r\nmysender41.mail.ru\r\nmysender42.mail.ru\r\nmysender43.mail.ru\r\nmysender44.mail.ru\r\nmysender45.mail.ru\r\nmysender46.mail.ru\r\nmysender47.mail.ru\r\nmysender48.mail.ru\r\nmysender49.mail.ru\r\nmysender5.mail.ru\r\nmysender50.mail.ru\r\nmysender51.mail.ru\r\nmysender52.mail.ru\r\nmysender53.mail.ru\r\nmysender54.mail.ru\r\nmysender55.mail.ru\r\nmysender56.mail.ru\r\nmysender57.mail.ru\r\nmysender58.mail.ru\r\nmysender59.mail.ru\r\nmysender6.mail.ru\r\nmysender60.mail.ru\r\nmysender61.mail.ru\r\nmysender62.mail.ru\r\nmysender63.mail.ru\r\nmysender64.mail.ru\r\nmysender65.mail.ru\r\nmysender66.mail.ru\r\nmysender67.mail.ru\r\nmysender68.mail.ru\r\nmysender69.mail.ru\r\nmysender7.mail.ru\r\nmysender70.mail.ru\r\nmysender71.mail.ru\r\nmysender72.mail.ru\r\nmysender73.mail.ru\r\nmysender74.mail.ru\r\nmysender75.mail.ru\r\nmysender76.mail.ru\r\nmysender77.mail.ru\r\nmysender78.mail.ru\r\nmysender79.mail.ru\r\nmysender8.mail.ru\r\nmysender9.mail.ru\r\nmyshop.avito.ru\r\nmysite.avito.ru\r\nmysite.magnit.ru\r\nmysiteeqa.worldbank.org\r\nmysiteintadfs.worldbank.org\r\nmysiteintadfsqa.worldbank.org\r\nmysiteiqa.worldbank.org\r\nmysiteiqa1.worldbank.org\r\nmysiteops.worldbank.org\r\nmysiteopsdev.worldbank.org\r\nmysiteopsqa.worldbank.org\r\nmysiteopsstg.worldbank.org\r\nmysiteopstst.worldbank.org\r\nmysites.avito.ru\r\nmysmis.avito.ru\r\nmysp1.mail.ru\r\nmysp2.mail.ru\r\nmyspace.avito.ru\r\nmyspam2.mail.ru\r\nmyspam3.mail.ru\r\nmysql.avito.ru\r\nmysql.tomsk.gov.ru\r\nmysql.webinar.2gis.ru\r\nmysql01.avito.ru\r\nmysql01.dev.rbc.ru\r\nmysql01.mail.infra.rbc.ru\r\nmysql02.avito.ru\r\nmysql02.db.rbc.ru\r\nmysql02.dev.rbc.ru\r\nmysql03.avito.ru\r\nmysql1.avito.ru\r\nmysql10.avito.ru\r\nmysql10.vk.com\r\nmysql11.avito.ru\r\nmysql2.avito.ru\r\nmysql3.avito.ru\r\nmysql4.avito.ru\r\nmysql41.avito.ru\r\nmysql5.avito.ru\r\nmysql6.avito.ru\r\nmysql7.avito.ru\r\nmysql8.avito.ru\r\nmysql9.avito.ru\r\nmysqladmin.avito.ru\r\nmysqldb.avito.ru\r\nmysqltest.avito.ru\r\nmyst1.mail.ru\r\nmystatic1.i.mail.ru\r\nmystatic10.i.mail.ru\r\nmystatic2.i.mail.ru\r\nmystatic3.i.mail.ru\r\nmystatic4.i.mail.ru\r\nmystatic5.i.mail.ru\r\nmystery.avito.ru\r\nmystic.avito.ru\r\nmystique.skzd.rzd.ru\r\nmystyle.avito.ru\r\nmyt.edu.tbank.ru\r\nmyteam.mts.ru\r\nmyteam.tass.ru\r\nmyteled1.i.mail.ru\r\nmyteled2.i.mail.ru\r\nmyteled3.i.mail.ru\r\nmyteled4.i.mail.ru\r\nmyteled5.i.mail.ru\r\nmyterritory.24.yandex.ru\r\nmytest.avito.ru\r\nmyth.avito.ru\r\nmythiscodecs.avito.ru\r\nmytishi.mts.ru\r\nmytishikey.yandex.ru\r\nmytishikey2.yandex.ru\r\nmytoken.worldbank.org\r\nmytvideo21.yandex.ru\r\nmytvideo22.yandex.ru\r\nmytvideo23.yandex.ru\r\nmyway.avito.ru\r\nmyweb.avito.ru\r\nmyweb1.i.mail.ru\r\nmywebsite.avito.ru\r\nmywifi.beeline.ru\r\nmywiki1.mail.ru\r\nmywiki2.mail.ru\r\nmywiki22.mail.ru\r\nmyworld.avito.ru\r\nmyyp10.news.ozon.ru\r\nmyyp11.news.ozon.ru\r\nmyyp12.news.ozon.ru\r\nmyyp13.news.ozon.ru\r\nmyyp14.news.ozon.ru\r\nmyyp15.news.ozon.ru\r\nmyyp16.news.ozon.ru\r\nmyyp17.news.ozon.ru\r\nmyyp18.news.ozon.ru\r\nmyyp19.news.ozon.ru\r\nmyyp20.news.ozon.ru\r\nmyyp21.news.ozon.ru\r\nmyyp22.news.ozon.ru\r\nmyyp23.news.ozon.ru\r\nmyyp24.news.ozon.ru\r\nmyyp25.news.ozon.ru\r\nmyyp26.news.ozon.ru\r\nmyyp27.news.ozon.ru\r\nmyyp28.news.ozon.ru\r\nmyyp47.news.ozon.ru\r\nmyyp48.news.ozon.ru\r\nmyyp49.news.ozon.ru\r\nmz.avito.ru\r\nmzd.rzd.ru\r\nmzkadry.sakha.gov.ru\r\nmzoo01ft.yandex.ru\r\nmzoo01ht.yandex.ru\r\nn-able.kino-teatr.ru\r\nn-and.maps.yandex.ru\r\nn-central.kino-teatr.ru\r\nn-urengoy.home.megafon.ru\r\nn.avito.ru\r\nn.m24.ru\r\nn.maps.yandex.ru\r\nn1-psi-pbmob.testonline.sberbank.ru\r\nn1.avito.ru\r\nn1.eu.cdn.avito.ru\r\nn2-psi-pbmob.testonline.sberbank.ru\r\nn2.avito.ru\r\nn25.m24.ru\r\nn2dev-03f.narod.yandex.ru\r\nn2dev-04f.narod.yandex.ru\r\nn2dev-06f.narod.yandex.ru\r\nn2dev-07f.narod.yandex.ru\r\nn2dev-08f.narod.yandex.ru\r\nn2dev-09f.narod.yandex.ru\r\nn2dev-10f.narod.yandex.ru\r\nn2dev-11f.narod.yandex.ru\r\nn2dev-12f.narod.yandex.ru\r\nn2dev-13f.narod.yandex.ru\r\nn2dev-14f.narod.yandex.ru\r\nn2dev-15f.narod.yandex.ru\r\nn2stor-1e.dn.narod.yandex.ru\r\nn2stor-2e.dn.narod.yandex.ru\r\nn7pdjh4.avito.ru\r\nn8n.net.ixbt.com\r\nna.avito.ru\r\nna.pool.avito.ru\r\nna2.avito.ru\r\nnabchelny.babyblog.ru\r\nnaberezhnye-chelny.dns-shop.ru\r\nnaberezhnye-chelny.drom.ru\r\nnaberezhnye-chelny.lemanapro.ru\r\nnaboo.avito.ru\r\nnac.avito.ru\r\nnac.gov.ru\r\nnac.leasing.rshb.ru\r\nnada.avito.ru\r\nnada.searo.who.int\r\nnadia.avito.ru\r\nnadya.avito.ru\r\nnaemniki.mail.ru\r\nnag.avito.ru\r\nnagano.avito.ru\r\nnagasaki.avito.ru\r\nnagclicfg.kino-teatr.ru\r\nnageguojiadubohefa.kino-teatr.ru\r\nnagi.avito.ru\r\nnagios.avito.ru\r\nnagios.infra.tutu.ru\r\nnagios2.avito.ru\r\nnagios2.mail.ru\r\nnagoya.avito.ru\r\nnahodka1a.yandex.ru\r\nnahodka1c.yandex.ru\r\nnahodka6a.yandex.ru\r\nnahodka6c.yandex.ru\r\nnahodka7a.yandex.ru\r\nnahodka7c.yandex.ru\r\nnahodki.yandex.ru\r\nnaif.avito.ru\r\nnakamura.avito.ru\r\nnakhodka.drom.ru\r\nnalchik.drom.ru\r\nnalchik.lemanapro.ru\r\nnalog-monitor.x5.ru\r\nnalog.alfabank.ru\r\nnalog.avito.ru\r\nnalog.beeline.ru\r\nnalog.garant.ru\r\nnalog.psbank.ru\r\nnalog.vtb.ru\r\nnam.avito.ru\r\nnam.yandex.ru\r\nname.avito.ru\r\nname.mts.ru\r\nname1.avito.ru\r\nnamed.avito.ru\r\nnameless.0.yandex.ru\r\nnana.avito.ru\r\nnancy.avito.ru\r\nnanda.avito.ru\r\nnano-dev.yandex.ru\r\nnano.avito.ru\r\nnantes.avito.ru\r\nnao.avito.ru\r\nnaoki.avito.ru\r\nnaomi.avito.ru\r\nnaorbite.life.ru\r\nnap.avito.ru\r\nnap.rkn.gov.ru\r\nnape.mail.ru\r\nnaples.avito.ru\r\nnaps.avito.ru\r\nnara.avito.ru\r\nnaro-fominsk.hh.ru\r\nnaro-fominsk.lemanapro.ru\r\nnarod2-2e.dev.yandex.ru\r\nnaruto.avito.ru\r\nnaryan-mar.lemanapro.ru\r\nnaryshkino.home.megafon.ru\r\nnas.avito.ru\r\nnas.zdorovie-shkolnika.spb.aif.ru\r\nnas1.avito.ru\r\nnas1.mir.afisha.ru\r\nnas2.avito.ru\r\nnas2.council.gov.ru\r\nnas3.avito.ru\r\nnasa.avito.ru\r\nnasc.avito.ru\r\nnascar.avito.ru\r\nnash.avito.ru\r\nnashapriroda.mnr.gov.ru\r\nnashayakutia.sakha.gov.ru\r\nnashe.rbc.ru\r\nnashville.avito.ru\r\nnaslabo.project.tinkoff.ru\r\nnast5.mail.ru\r\nnastrazhe.iz.ru\r\nnasty.avito.ru\r\nnat-pool.avito.ru\r\nnat-wifi.duma.tambov.gov.ru\r\nnat.avito.ru\r\nnat.gov.ru\r\nnat1.avito.ru\r\nnat2.avito.ru\r\nnata.avito.ru\r\nnatal.avito.ru\r\nnatalia.avito.ru\r\nnataliya.sedova.85.yandex.ru\r\nnataly.avito.ru\r\nnatasha.avito.ru\r\nnatasha.k.008.yandex.ru\r\nnate.avito.ru\r\nnathan.avito.ru\r\nnational.avito.ru\r\nnationalprojects.fadm.gov.ru\r\nnato.avito.ru\r\nnats.avito.ru\r\nnatura.avito.ru\r\nnatural.avito.ru\r\nnature.avito.ru\r\nnature.content.tinkoff.ru\r\nnature.kremlin.ru\r\nnaughty.avito.ru\r\nnauka-pobezhdat.iz.ru\r\nnauka-vokrug.tass.ru\r\nnauka.avito.ru\r\nnauka.iz.ru\r\nnauka.tass.ru\r\nnaumen.avito.ru\r\nnautilus.avito.ru\r\nnav.avito.ru\r\nnav.consultant.ru\r\nnavarro.avito.ru\r\nnavi-srv01f.maps.yandex.ru\r\nnavi-srv02f.maps.yandex.ru\r\nnavi.avito.ru\r\nnavigator.2gis.ru\r\nnavigator.avito.ru\r\nnavigator.gosuslugi.ru\r\nnavigator.lemanapro.ru\r\nnavigator.megafon.ru\r\nnavigator.mkb.ru\r\nnavylet.project.tinkoff.ru\r\nnazgul.avito.ru\r\nnazran.drom.ru\r\nnazran.lemanapro.ru\r\nnb.avito.ru\r\nnba.avito.ru\r\nnbarsukov.ing.k8s.dev.ivi.ru\r\nnbdbank.credit-registry.nalog.ru\r\nnbl.latam.media.max.com\r\nnbn-dfs.ivi.ru\r\nnbn.soz.megafon.ru\r\nnbrodnikov.ing.k8s.dev.ivi.ru\r\nnc.avito.ru\r\nnc.k.avito.ru\r\nncc.avito.ru\r\nncentral.kino-teatr.ru\r\nncp.avito.ru\r\nncs.avito.ru\r\nncuks.mchs.ru\r\nnd.avito.ru\r\nndbo-auth.mkb.ru\r\nndbo.open.ru\r\nndd.rostelecom.ru\r\nndd.worldbank.org\r\nndddev.worldbank.org\r\nndddevapp.worldbank.org\r\nndnd.yandex.ru\r\nnds.avito.ru\r\nnds20.garant.ru\r\nne.avito.ru\r\nnebo.avito.ru\r\nnebogame.mail.ru\r\nneboskrebi.life.ru\r\nnebraska.avito.ru\r\nnebula.avito.ru\r\nnec.avito.ru\r\nneck1.i.mail.ru\r\nneck2.mail.ru\r\nneck3.mail.ru\r\nneck4.mail.ru\r\nneck5.mail.ru\r\nneck6.mail.ru\r\nnecktest1.i.mail.ru\r\nnecro.avito.ru\r\nned.avito.ru\r\nnedoma.mos.ru\r\nnedra.rosatom.ru\r\nneftekamsk.dns-shop.ru\r\nnefteyugansk.dns-shop.ru\r\nnefteyugansk.home.megafon.ru\r\nneim-tub.yandex.ru\r\nneko.avito.ru\r\nnekrasovka.drom.ru\r\nnelemnoye.sakha.gov.ru\r\nnelly.avito.ru\r\nnelson.avito.ru\r\nnemesis.avito.ru\r\nnemezida.mail.ru\r\nnemo.avito.ru\r\nnemo5678.tele2.ru\r\nnene.avito.ru\r\nneo.avito.ru\r\nneocase.worldbank.org\r\nneocasedev.worldbank.org\r\nneocaseqa.worldbank.org\r\nneocasess.worldbank.org\r\nneocasessdev.worldbank.org\r\nneocasessqa.worldbank.org\r\nneocasessstg.worldbank.org\r\nneocasessuat.worldbank.org\r\nneocasestg.worldbank.org\r\nneocaseuat.worldbank.org\r\nneon.avito.ru\r\nneonix2.0b.yandex.ru\r\nneotelecom.tomsk.gov.ru\r\nnep.tass.ru\r\nnepal.avito.ru\r\nnepcbsds.searo.who.int\r\nnepobedimye.aif.ru\r\nnepoladkisladki.avito.ru\r\nneproblema.open.ru\r\nneptun.avito.ru\r\nneptune.avito.ru\r\nnero.avito.ru\r\nnerpa.mail.ru\r\nnerungri.sakha.gov.ru\r\nnerv1.mail.ru\r\nnerv10.mail.ru\r\nnerv11.mail.ru\r\nnerv12.mail.ru\r\nnerv13.i.mail.ru\r\nnerv15.mail.ru\r\nnerv1old.mail.ru\r\nnerv2.mail.ru\r\nnerv3.mail.ru\r\nnerv6.mail.ru\r\nnerv7.mail.ru\r\nnerv8.mail.ru\r\nnesquik.lady.mail.ru\r\nness.avito.ru\r\nnessus.avito.ru\r\nnest.avito.ru\r\nnesterov.hh.ru\r\nnestor-tester.ing.k8s.dev.ivi.ru\r\nnestor.avito.ru\r\nnet-192.minprom.gov.ru\r\nnet-oa.ohx.avito.ru\r\nnet-xa.ohx.avito.ru\r\nnet-xb.ohx.avito.ru\r\nnet.avito.ru\r\nnet.beeline.ru\r\nnet1.avito.ru\r\nnet2.avito.ru\r\nnetali.2013.yandex.ru\r\nnetbackup.avito.ru\r\nnetbox.wildberries.ru\r\nnetcharts.worldbank.org\r\nnetdata.rs.premier.one\r\nnetdata.rs2.premier.one\r\nnetdoc.infra.tutu.ru\r\nnetflow.avito.ru\r\nnetinvestor.mkb.ru\r\nnetlab.avito.ru\r\nnetman.avito.ru\r\nnetmon.avito.ru\r\nnetmon2.rambler.ru\r\nnetpensiontax.worldbank.org\r\nnetpentionsiontax.worldbank.org\r\nnetra.avito.ru\r\nnets.avito.ru\r\nnetscape.avito.ru\r\nnetserv1.avito.ru\r\nnetsomneniy.pochtabank.vesti.ru\r\nnetstorage.avito.ru\r\nnetsys.avito.ru\r\nnetwork.avito.ru\r\nnetwork.mts.ru\r\nnetwork.rshb.ru\r\nnetworking.avito.ru\r\nnetworks.avito.ru\r\nnetworld.avito.ru\r\nneu.avito.ru\r\nneumann.avito.ru\r\nneuro.avito.ru\r\nneuron.avito.ru\r\nneutron.avito.ru\r\nnevada.avito.ru\r\nnevis.avito.ru\r\nnevskiy.70.yandex.ru\r\nnew-cashback.mts.ru\r\nnew-cdn.domclick.ru\r\nnew-dimension.lady.mail.ru\r\nnew-ecosystem.dns-shop.ru\r\nnew-eng.rzd.ru\r\nnew-krakend-mdrive.demo.mdrive.magnit.ru\r\nnew-lk-developer.vtb.ru\r\nnew-people.avito.ru\r\nnew-to-bank.delivery.alfabank.ru\r\nnew-top100.rambler.ru\r\nnew-vorwands.api.2gis.ru\r\nnew-wiki.sports.ru\r\nnew-www.rzd.ru\r\nnew-year-with-friends.tinkoff.ru\r\nnew.ac.gov.ru\r\nnew.alfabank.ru\r\nnew.autopay.tele2.ru\r\nnew.console.cloud.mts.ru\r\nnew.dev.videoplatform.rambler.ru\r\nnew.drom.ru\r\nnew.fas.gov.ru\r\nnew.fsa.gov.ru\r\nnew.gazeta.ru\r\nnew.gosuslugi.ru\r\nnew.kino-teatr.ru\r\nnew.ksv.rpn.gov.ru\r\nnew.lk.psbank.ru\r\nnew.lk.rpn.gov.ru\r\nnew.market.pochta.ru\r\nnew.mediastorage.afisha.ru\r\nnew.mirtv.ru\r\nnew.mkb.ru\r\nnew.moy.magnit.ru\r\nnew.my.tele2.ru\r\nnew.pikabu.ru\r\nnew.rasp.yandex.ru\r\nnew.rosbank.ru\r\nnew.rshb.ru\r\nnew.sdo.rzd.ru\r\nnew.stage.videoplatform.rambler.ru\r\nnew.startup.mts.ru\r\nnew.tass.ru\r\nnew.tr.ria.ru\r\nnew.tv.rambler.ru\r\nnew.uoit.rpn.gov.ru\r\nnew.voda.gov.ru\r\nnew.wf.mail.ru\r\nnew.yandex.ru\r\nnew1.avito.ru\r\nnew1151710.mkb.ru\r\nnew2.avito.ru\r\nnew3.avito.ru\r\nnewadvertisingsalest.test.euronews.com\r\nnewage.avito.ru\r\nnewapp.profi.ru\r\nnewbie.sberbank.ru\r\nnewbsms.tele2.ru\r\nnewbusiness-mail.tinkoff.ru\r\nnewbusiness.psbank.ru\r\nnewbusiness.tinkoff.ru\r\nnewchat.avito.ru\r\nnewcheb.home.megafon.ru\r\nnewcom.avito.ru\r\nnewdemo.avito.ru\r\nnewdesign.avito.ru\r\nnewdev.avito.ru\r\nnewdigitalcodecs.avito.ru\r\nnewdigitaldm.avito.ru\r\nnewdigitaldownloads.avito.ru\r\nnewdigitalmanager.avito.ru\r\nnewe-trust.gosuslugi.ru\r\nneweconomy.rbc.ru\r\nnewfocus.afisha.mail.ru\r\nnewforum.avito.ru\r\nnewhainan.tass.ru\r\nnewhaven.avito.ru\r\nnewhdcodecs.avito.ru\r\nnewheroes.t2.ru\r\nnewhire01e.cs-minitools01e.yandex.ru\r\nnewhire01f.cs-minitools01f.yandex.ru\r\nnewhire01h.cs-minitools01h.yandex.ru\r\nnewhire01ht.cs-minitools01ht.yandex.ru\r\nnewhost.avito.ru\r\nnewid.afisha.ru\r\nnewintranet.worldbank.org\r\nnewlife.avito.ru\r\nnewlivechat.worldbank.org\r\nnewlook.avito.ru\r\nnewmacan.afisha.ru\r\nnewmail.avito.ru\r\nnewman.avito.ru\r\nnewmedia.avito.ru\r\nnewmediacodecs.avito.ru\r\nnewmediadm.avito.ru\r\nnewmediadownloads.avito.ru\r\nnewmediamanager.avito.ru\r\nnewmoon.avito.ru\r\nneworleans.avito.ru\r\nnewpoisk.beeline.ru\r\nnewport.avito.ru\r\nnewportal.x5.ru\r\nnewprocodecs.avito.ru\r\nnewprodm.avito.ru\r\nnewprodownloads.avito.ru\r\nnewpromanager.avito.ru\r\nnews-board.roads.mos.ru\r\nnews-clck.yandex.ru\r\nnews.alfabank.ru\r\nnews.avito.ru\r\nnews.drom.ru\r\nnews.esp.tomsk.gov.ru\r\nnews.gismeteo.ru\r\nnews.gosuslugi.ru\r\nnews.kommersant.ru\r\nnews.kremlin.ru\r\nnews.m24.ru\r\nnews.magnit.ru\r\nnews.mail.ru\r\nnews.mironline.ru\r\nnews.ozon.ru\r\nnews.rambler.ru\r\nnews.sportbox.ru\r\nnews.yandex.ru\r\nnews01.avito.ru\r\nnews1.avito.ru\r\nnews2.avito.ru\r\nnews24.dev.kp.ru\r\nnews3.avito.ru\r\nnewsdo.rzd.ru\r\nnewserver.avito.ru\r\nnewsfeed.avito.ru\r\nnewsfeed.m24.ru\r\nnewsfeed2.m24.ru\r\nnewshop.avito.ru\r\nnewsite.avito.ru\r\nnewsite.fas.gov.ru\r\nnewsite.freecom-app-test.mts.ru\r\nnewsletter-redir.euronews.com\r\nnewsletter.avito.ru\r\nnewsletter.eldorado.ru\r\nnewsletter2.avito.ru\r\nnewsletters.avito.ru\r\nnewsletters.consultant.ru\r\nnewsml2.dmz.tass.ru\r\nnewsml4.dmz.tass.ru\r\nnewspaper.avito.ru\r\nnewsphotoawards2021.tass.ru\r\nnewsroom.avito.ru\r\nnewstest.avito.ru\r\nnewt.avito.ru\r\nnewtech.avito.ru\r\nnewton.avito.ru\r\nnewunse.avito.ru\r\nnewver.garant.ru\r\nnewweb.avito.ru\r\nnewwebmail.avito.ru\r\nnewworld.avito.ru\r\nnewww.avito.ru\r\nnewwww.avito.ru\r\nnewyear.avito.ru\r\nnewyear.magnit.ru\r\nnewyear2020.mts.ru\r\nnewyear2021.mvideo.ru\r\nnewyearlook.lady.mail.ru\r\nnewyork.avito.ru\r\nnexgen.avito.ru\r\nnexsus.cgu.iac.mchs.ru\r\nnexsus.dev.cgu.iac.mchs.ru\r\nnext-talk.mchs.ru\r\nnext.afisha.ru\r\nnext.avito.ru\r\nnext.mts.ru\r\nnext.rshb.ru\r\nnext01-stun.mts.ru\r\nnext1.rshb.ru\r\nnextcloud.alfabank.ru\r\nnextcloudtst.beeline.ru\r\nnextjs.kino-teatr.ru\r\nnexus-05e2f128.xaas.kz.cloud.vk.com\r\nnexus-251a2c0a.xaas.kz.cloud.vk.com\r\nnexus-57019632.xaas.kz.cloud.vk.com\r\nnexus-5ad59b85.xaas.kz.cloud.vk.com\r\nnexus-ed817d85.xaas.kz.cloud.vk.com\r\nnexus.avito.ru\r\nnexus.cgu.iac.mchs.ru\r\nnexus.cgu.mchs.ru\r\nnexus.dev.cgu.iac.mchs.ru\r\nnexus.infra.rbc.ru\r\nnexus.interfax.ru\r\nnexus.kino-teatr.ru\r\nnexus.officeapps.live.comes.euronews.com\r\nnezabudka1-00.yandex.ru\r\nnezabudka3-00.yandex.ru\r\nnezhinka.drom.ru\r\nneznayka.mail.ru\r\nnf.avito.ru\r\nnfap-portal1.test.gosuslugi.ru\r\nnfc.avito.ru\r\nnfrolkin.ing.k8s.dev.ivi.ru\r\nnfs.avito.ru\r\nnfs01.jc.avito.ru\r\nnft.static.yc.mvideo.ru\r\nng-tst.open.ru\r\nng.avito.ru\r\nngc.mchs.gov.ru\r\nngc.mchs.ru\r\nngc.organizations.mchs.gov.ru\r\nngg.22.yandex.ru\r\nnginx-newest.avito.ru\r\nnginx-newest1.avito.ru\r\nnginx-s3-auth-prod.mdrive.magnit.ru\r\nnginx-s3-image-prod.mdrive.magnit.ru\r\nnginx-s3-prod.mdrive.magnit.ru\r\nnginx.avito.ru\r\nnginx01f.cs-minitools01f.yandex.ru\r\nnginx01h.cs-minitools01h.yandex.ru\r\nngo.avito.ru\r\nngrok.avito.ru\r\nngs.avito.ru\r\nnguyen.avito.ru\r\nngw.avito.ru\r\nnh.avito.ru\r\nnh.open.ru\r\nnh1.open.ru\r\nnh2.open.ru\r\nnhac.avito.ru\r\nnhac1.avito.ru\r\nnhce.avito.ru\r\nnhds.open.ru\r\nnhds2.open.ru\r\nnhko1111.avito.ru\r\nnhrdp.open.ru\r\nnht.home.megafon.ru\r\nni.avito.ru\r\nni05swoa-rlp.ops.beeline.ru\r\nniaep.feedback.rosatom.ru\r\nniagara.avito.ru\r\nnian.9111.ru\r\nnic.avito.ru\r\nnic.gov.ru\r\nnicaragua.avito.ru\r\nnice.avito.ru\r\nniche.avito.ru\r\nnick.avito.ru\r\nnick2.avito.ru\r\nnickel.avito.ru\r\nnickel.gosuslugi.ru\r\nnico.avito.ru\r\nnicobank.credit-registry.nalog.ru\r\nnicolas.avito.ru\r\nnicole.avito.ru\r\nnida.avito.ru\r\nnieruchomosci.avito.ru\r\nnieuwsbrief.avito.ru\r\nnifincuks.mchs.ru\r\nnigeria.avito.ru\r\nnight.avito.ru\r\nnight.m24.ru\r\nnightlife.avito.ru\r\nnightmare.avito.ru\r\nnights.avito.ru\r\nnightwing.avito.ru\r\nnijnevartovsk.dns-shop.ru\r\nnijyansk.sakha.gov.ru\r\nnik.beeline.ru\r\nnika.avito.ru\r\nnika.mail.ru\r\nnike.avito.ru\r\nniki-987.ver-2.0.yandex.ru\r\nniki.avito.ru\r\nnikiforov.sakha.gov.ru\r\nnikita.avito.ru\r\nnikita.mitin.2012.yandex.ru\r\nniko.avito.ru\r\nnikolaev.16.yandex.ru\r\nnil.avito.ru\r\nnils.avito.ru\r\nnimble.avito.ru\r\nnimbus.avito.ru\r\nnina.avito.ru\r\nnine.avito.ru\r\nnini.avito.ru\r\nninja.avito.ru\r\nninjawars.mail.ru\r\nnino.avito.ru\r\nniobe.avito.ru\r\nnippon.avito.ru\r\nnir.avito.ru\r\nnirvana.avito.ru\r\nnis.avito.ru\r\nnishi.avito.ru\r\nnissan.avito.ru\r\nnit.avito.ru\r\nnit.dom.test.gosuslugi.ru\r\nnita.avito.ru\r\nnitro.avito.ru\r\nnitro3.mail.ru\r\nnitrogen.avito.ru\r\nnivskoe-r52.gosweb.gosuslugi.ru\r\nnix.avito.ru\r\nnixon.avito.ru\r\nniza.mail.ru\r\nnizhnekamsk.babyblog.ru\r\nnizhnekamsk.dns-shop.ru\r\nnizhnekamsk.lemanapro.ru\r\nnizhninovgorod.alfabank.ru\r\nnizhniy-novgorod.beeline.ru\r\nnizhniy-novgorod.dns-shop.ru\r\nnizhniy-novgorod.drom.ru\r\nnizhniy-novgorod.lemanapro.ru\r\nnizhniy-tagil.lemanapro.ru\r\nnizhniy.babyblog.ru\r\nnj.avito.ru\r\nnjs.services.livejournal.com\r\nnk.avito.ru\r\nnko.iz.ru\r\nnkudryavtseva.ing.k8s.dev.ivi.ru\r\nnkz.shop.megafon.ru\r\nnl.avito.ru\r\nnlb-clickstream.sberbank.ru\r\nnlb-finsov.sberbank.ru\r\nnlb-ig-lb1-ift.sberbank.ru\r\nnlb-ig-lb4.sberbank.ru\r\nnlb-ig-lb5-test.sberbank.ru\r\nnlb-nt-opros-sberbank-ru.sberbank.ru\r\nnlb.avito.ru\r\nnlc.beeline.ru\r\nnlh.avito.ru\r\nnlp.avito.ru\r\nnlp2vps.online.sberbank.ru\r\nnlp2vpsift.online.sberbank.ru\r\nnlp2vpspsi.online.sberbank.ru\r\nnm.avito.ru\r\nnm.ural.mts.ru\r\nnm2.avito.ru\r\nnmagnit.magnit.ru\r\nnmail.avito.ru\r\nnmar.tele2.ru\r\nnmarchenko.ing.k8s.dev.ivi.ru\r\nnmc.avito.ru\r\nnmddos.profi.ru\r\nnmp.digital.ac.gov.ru\r\nnms.avito.ru\r\nnms2.avito.ru\r\nnn.avito.ru\r\nnn.demo.megafon.ru\r\nnn.dev.home.megafon.ru\r\nnn.hh.ru\r\nnn.mk.ru\r\nnn.shop.megafon.ru\r\nnn.tele2.ru\r\nnnb-api.rosatom.ru\r\nnnb.rosatom.ru\r\nnnck.gov.ru\r\nnnm.avito.ru\r\nnnmuseum.t2.ru\r\nnnmuseum.tele2.ru\r\nnnn.avito.ru\r\nnnov.52.mchs.gov.ru\r\nnnov.avito.ru\r\nnnov.beeline.ru\r\nnnov.dev.kp.ru\r\nnnov.kommersant.ru\r\nnnov.kp.ru\r\nnnov.mts.ru\r\nnnov.tele2.ru\r\nnnov1.companion.tele2.ru\r\nnnov3.companion.tele2.ru\r\nnnovgorod.afisha.ru\r\nnnst1.gismeteo.ru\r\nnntp.priv.avito.ru\r\nnnv.beeline.ru\r\nno.avito.ru\r\nno1.avito.ru\r\nnoadblock.championat.com\r\nnoadblock.gazeta.ru\r\nnoadblock.lenta.ru\r\nnoadblock.services.livejournal.com\r\nnoah.avito.ru\r\nnobel.avito.ru\r\nnobl.avito.ru\r\nnoc.avito.ru\r\nnoc.forums.drom.ru\r\nnoc.rbc.ru\r\nnoc2.avito.ru\r\nnoco.net.ixbt.com\r\nnod.avito.ru\r\nnod32.avito.ru\r\nnoda.avito.ru\r\nnoda.yandex.ru\r\nnode-typograf.meduza.io\r\nnode.avito.ru\r\nnode0.online.sberbank.ru\r\nnode01.avito.ru\r\nnode01.db.rbc.ru\r\nnode03.common.rbc.ru\r\nnode03.db.rbc.ru\r\nnode04.common.rbc.ru\r\nnode04.infra.rbc.ru\r\nnode05.common.rbc.ru\r\nnode05.db.rbc.ru\r\nnode05.infra.rbc.ru\r\nnode06.common.rbc.ru\r\nnode06.infra.rbc.ru\r\nnode07.db.rbc.ru\r\nnode08.common.rbc.ru\r\nnode09.common.rbc.ru\r\nnode09.db.rbc.ru\r\nnode1.avito.ru\r\nnode1.online.sberbank.ru\r\nnode10.db.rbc.ru\r\nnode13.common.rbc.ru\r\nnode14.common.rbc.ru\r\nnode16.common.rbc.ru\r\nnode199-72.2gis.ru\r\nnode199-73.2gis.ru\r\nnode2.avito.ru\r\nnode2.online.sberbank.ru\r\nnode20.common.rbc.ru\r\nnode21.common.rbc.ru\r\nnode22.common.rbc.ru\r\nnode23.common.rbc.ru\r\nnode25.common.rbc.ru\r\nnode26.common.rbc.ru\r\nnode3.avito.ru\r\nnode3.online.sberbank.ru\r\nnode4.online.sberbank.ru\r\nnode5.ift.ufs-superapp.sberbank.ru\r\nnode5.online.sberbank.ru\r\nnode6.online.sberbank.ru\r\nnode7.online.sberbank.ru\r\nnode9.mail.ru\r\nnodejs-dev.avito.ru\r\nnodejs.avito.ru\r\nnoe.avito.ru\r\nnoel.avito.ru\r\nnoginsk.babyblog.ru\r\nnoginsk.drom.ru\r\nnoginsk.lemanapro.ru\r\nnoginsky-sc.organizations.mchs.gov.ru\r\nnoguchiprize.afro.who.int\r\nnoir.avito.ru\r\nnoise.avito.ru\r\nnoise.mail.ru\r\nnok.minzdrav.gov.ru\r\nnokia-rss.gazeta.ru\r\nnokia-x.avito.ru\r\nnokia.avito.ru\r\nnolinskij-r43.gosweb.gosuslugi.ru\r\nnolsomneniy.pochtabank.vesti.ru\r\nnomad.avito.ru\r\nnon-prod.avito.ru\r\nnona.avito.ru\r\nnoname.avito.ru\r\nnone.avito.ru\r\nnonexistent.fonbet.ru\r\nnono.avito.ru\r\nnonstop.mts.ru\r\nnoob.avito.ru\r\nnoor.avito.ru\r\nnoproxy.avito.ru\r\nnor.avito.ru\r\nnora.avito.ru\r\nnora.mail.ru\r\nnord.4m.yandex.ru\r\nnord.avito.ru\r\nnordeurope.kp.ru\r\nnore.avito.ru\r\nnorilsk.mail.ru\r\nnorilsk.mts.ru\r\nnorilsk.rtp.sbc.sip.beeline.ru\r\nnorilsk.sig.sbc.sip.beeline.ru\r\nnorilsk.tele2.ru\r\nnorma.mts.ru\r\nnorman.avito.ru\r\nnorth.avito.ru\r\nnorthstar.avito.ru\r\nnorthwest.kp.ru\r\nnorton.avito.ru\r\nnorway.avito.ru\r\nnos-edu.iz.ru\r\nnos.avito.ru\r\nnoshopping.project.tinkoff.ru\r\nnosoc.wildberries.ru\r\nnospam.avito.ru\r\nnossik.lenta.ru\r\nnost1.gismeteo.ru\r\nnostromo.avito.ru\r\nnota.avito.ru\r\nnotanymore.yandex.ru\r\nnotariat.mkb.ru\r\nnote.avito.ru\r\nnotebook.avito.ru\r\nnotes.avito.ru\r\nnotes.icdc.rosbank.ru\r\nnotes1.avito.ru\r\nnotexistsdemo.kino-teatr.ru\r\nnothing.avito.ru\r\nnotice.avito.ru\r\nnoticias.avito.ru\r\nnotification-api-demo.mdrive.magnit.ru\r\nnotification-demo.demo.mdrive.magnit.ru\r\nnotification-demo.mdrive.magnit.ru\r\nnotification.mdrive.magnit.ru\r\nnotification1.mdrive.magnit.ru\r\nnotifications.avito.ru\r\nnotifications.sps.rosatom.ru\r\nnotifications.yandex.ru\r\nnotifier.domofon.mts.ru\r\nnotiftest.test.euronews.com\r\nnotify.app-assistent.open.ru\r\nnotify.avito.ru\r\nnotify.dzen.ru\r\nnotify.wildberries.ru\r\nnour.avito.ru\r\nnourkrin.gazeta.ru\r\nnouveaucentre.iarc.who.int\r\nnov.mts.ru\r\nnov.vm.culture.ru\r\nnova.avito.ru\r\nnova.rambler.ru\r\nnovaya-igirma.hh.ru\r\nnovelty.avito.ru\r\nnovgorod.avito.ru\r\nnovgorod.dev.home.megafon.ru\r\nnovgorod.hh.ru\r\nnovgorod.shop.megafon.ru\r\nnovgorod.tele2.ru\r\nnovi.avito.ru\r\nnovo.avito.ru\r\nnovoaltaysk.dns-shop.ru\r\nnovoaltaysk.drom.ru\r\nnovoaltaysk.gosuslugi.ru\r\nnovocheboksarsk.dns-shop.ru\r\nnovocherkassk.dns-shop.ru\r\nnovokuzneck.dns-shop.ru\r\nnovokuznetsk.avito.ru\r\nnovokuznetsk.beeline.ru\r\nnovokuznetsk.club.dns-shop.ru\r\nnovokuznetsk.dns-shop.ru\r\nnovokuznetsk.dns-shop.ruvostok.dns-shop.ru\r\nnovokuznetsk.drom.ru\r\nnovokuznetsk.lemanapro.ru\r\nnovokuznetsk.mts.ru\r\nnovokuznetsk.rtp.sbc.sip.beeline.ru\r\nnovokuznetsk.sig.sbc.sip.beeline.ru\r\nnovomoskovsk.dns-shop.ru\r\nnovonukutskiy.drom.ru\r\nnovorossia.iz.ru\r\nnovorossiya.gosuslugi.ru\r\nnovorossiysk.avito.ru\r\nnovorossiysk.hh.ru\r\nnovorossiysk.lemanapro.ru\r\nnovos.mk.ru\r\nnovoselov.ing.k8s.dev.ivi.ru\r\nnovosib.babyblog.ru\r\nnovosib.dns-shop.ru\r\nnovosibirsk.afisha.ru\r\nnovosibirsk.alfabank.ru\r\nnovosibirsk.avito.ru\r\nnovosibirsk.beeline.ru\r\nnovosibirsk.club.dns-shop.ru\r\nnovosibirsk.dns-shop.ru\r\nnovosibirsk.drom.ru\r\nnovosibirsk.fas.gov.ru\r\nnovosibirsk.hh.ru\r\nnovosibirsk.lemanapro.ru\r\nnovosibirsk.tele2.ru\r\nnovosibirsk1.companion.tele2.ru\r\nnovosibmgf01.regionproxy.yandex.ru\r\nnovostroyki.banki.ru\r\nnovotroitsk.dns-shop.ru\r\nnovoulyanovsk-r73.gosweb.gosuslugi.ru\r\nnovovoronezh.dns-shop.ru\r\nnovoy-dorogoy.life.ru\r\nnovyj-urengoy.hh.ru\r\nnow.avito.ru\r\nnowa.avito.ru\r\nnowhere.avito.ru\r\nnowickova.0lha.yandex.ru\r\nnowosibirsk.dns-shop.ru\r\nnowy.avito.ru\r\nnox.avito.ru\r\nnoyabrsk.mts.ru\r\nnozaki.avito.ru\r\nnp.avito.ru\r\nnp.content.tinkoff.ru\r\nnp.digital.gov.ru\r\nnp.project.tinkoff.ru\r\nnp.rnd.tinkoff.ru\r\nnpc.avito.ru\r\nnpc33vladimir.gosuslugi.ru\r\nnpd.nalog.ru\r\nnpoluch.feedback.rosatom.ru\r\nnpro.maps.yandex.ru\r\nnps-bam.tass.ru\r\nnps.avito.ru\r\nnps.megafon.ru\r\nnpsfmc.megafon.ru\r\nnqzwec0eohzuxit7.rostelecom.oren.aif.ru\r\nnr.avito.ru\r\nnrg.avito.ru\r\nnrg.gov.ru\r\nnri-test.beeline.ru\r\nns-1.avito.ru\r\nns-2.avito.ru\r\nns-a.msk.rzd.ru\r\nns-a.rzd.ru\r\nns-b.msk.rzd.ru\r\nns-b.rzd.ru\r\nns-c.rzd.ru\r\nns-d.rzd.ru\r\nns-e.rzd.ru\r\nns-f.rzd.ru\r\nns-q1.1tv.ru\r\nns.1tv.ru\r\nns.2gis.ru\r\nns.72ts.yandex.ru\r\nns.avito.ru\r\nns.blog.avito.ru\r\nns.cea.gov.ru\r\nns.council.gov.ru\r\nns.demo.avito.ru\r\nns.e.avito.ru\r\nns.economy.gov.ru\r\nns.email.avito.ru\r\nns.euronews.com\r\nns.forum.avito.ru\r\nns.gov.ru\r\nns.ipaccess.gov.ru\r\nns.kommersant.ru\r\nns.kzn.beeline.ru\r\nns.math.avito.ru\r\nns.mchs.gov.ru\r\nns.minprom.gov.ru\r\nns.mirtv.ru\r\nns.obrnadzor.gov.ru\r\nns.prioritet.2.yandex.ru\r\nns.prioritet.3.yandex.ru\r\nns.sakha.gov.ru\r\nns.sakhalin.gov.ru\r\nns.tambov.gov.ru\r\nns.test.avito.ru\r\nns.ugs.kostroma.gov.ru\r\nns0.avito.ru\r\nns0.dns-shop.ru\r\nns00.avito.ru\r\nns00.vk.com\r\nns01.avito.ru\r\nns01.khv.gov.ru\r\nns01.mironline.ru\r\nns02.avito.ru\r\nns02.khv.gov.ru\r\nns02.mironline.ru\r\nns03.avito.ru\r\nns03.mironline.ru\r\nns04.avito.ru\r\nns04.mironline.ru\r\nns05.avito.ru\r\nns1.1tv.ru\r\nns1.3802200.mail.ru\r\nns1.avito.ru\r\nns1.banki.ru\r\nns1.beeline.ru\r\nns1.dns-shop.ru\r\nns1.duma.gov.ru\r\nns1.garant.ru\r\nns1.gosuslugi.ru\r\nns1.gov.ru\r\nns1.gslb.gosuslugi.ru\r\nns1.ha.avito.ru\r\nns1.hosting.avito.ru\r\nns1.iaas.beeline.ru\r\nns1.ixbt.com\r\nns1.kostroma.gov.ru\r\nns1.mail.ru\r\nns1.mk.ru\r\nns1.mnr.gov.ru\r\nns1.ok.ru\r\nns1.rambler.ru\r\nns1.sakha.gov.ru\r\nns1.saratov.gov.ru\r\nns1.tass.ru\r\nns1.tele2.ru\r\nns1.tinkoff.ru\r\nns1.tomsk.gov.ru\r\nns1.ufo.gov.ru\r\nns1.ugs.kostroma.gov.ru\r\nns10.avito.ru\r\nns10.vk.com\r\nns100.avito.ru\r\nns100.vk.com\r\nns101.avito.ru\r\nns102.avito.ru\r\nns103.avito.ru\r\nns104.avito.ru\r\nns105.avito.ru\r\nns106.avito.ru\r\nns107.avito.ru\r\nns108.avito.ru\r\nns109.avito.ru\r\nns11.avito.ru\r\nns110.avito.ru\r\nns110.vk.com\r\nns111.avito.ru\r\nns112.avito.ru\r\nns113.avito.ru\r\nns114.avito.ru\r\nns115.avito.ru\r\nns116.avito.ru\r\nns117.avito.ru\r\nns118.avito.ru\r\nns119.avito.ru\r\nns12.avito.ru\r\nns120.avito.ru\r\nns120.vk.com\r\nns121.avito.ru\r\nns122.avito.ru\r\nns123.avito.ru\r\nns124.avito.ru\r\nns125.avito.ru\r\nns126.avito.ru\r\nns128.avito.ru\r\nns129.avito.ru\r\nns13.avito.ru\r\nns131.avito.ru\r\nns14.avito.ru\r\nns140.avito.ru\r\nns140.vk.com\r\nns141.avito.ru\r\nns15.avito.ru\r\nns150.avito.ru\r\nns16.avito.ru\r\nns161.avito.ru\r\nns17.avito.ru\r\nns17.gismeteo.ru\r\nns17.zdorovie-shkolnika.spb.aif.ru\r\nns18.avito.ru\r\nns19.avito.ru\r\nns1a.avito.ru\r\nns1kazah.mail.ru\r\nns2.2gis.ru\r\nns2.3802200.mail.ru\r\nns2.avito.ru\r\nns2.banki.ru\r\nns2.beeline.ru\r\nns2.dns-shop.ru\r\nns2.duma.gov.ru\r\nns2.economy.gov.ru\r\nns2.euronews.com\r\nns2.fas.gov.ru\r\nns2.garant.ru\r\nns2.gosuslugi.ru\r\nns2.gov.ru\r\nns2.gprs.tele2.ru\r\nns2.gslb.gosuslugi.ru\r\nns2.ha.avito.ru\r\nns2.hosting.avito.ru\r\nns2.iaas.beeline.ru\r\nns2.kostroma.gov.ru\r\nns2.kzn.beeline.ru\r\nns2.mail.ru\r\nns2.mirtv.ru\r\nns2.ok.ru\r\nns2.ozon.ru\r\nns2.prod.banki.ru\r\nns2.sakha.gov.ru\r\nns2.sakhalin.gov.ru\r\nns2.tambov.gov.ru\r\nns2.tass.ru\r\nns2.tele2.ru\r\nns2.tinkoff.ru\r\nns2.tomsk.gov.ru\r\nns2.ufo.gov.ru\r\nns2.urfo.gov.ru\r\nns20.avito.ru\r\nns20.vk.com\r\nns201.avito.ru\r\nns21.avito.ru\r\nns22.avito.ru\r\nns23.avito.ru\r\nns24.avito.ru\r\nns25.avito.ru\r\nns26.avito.ru\r\nns27.avito.ru\r\nns28.avito.ru\r\nns29.avito.ru\r\nns2a.avito.ru\r\nns2b.avito.ru\r\nns3.2gis.ru\r\nns3.avito.ru\r\nns3.banki.ru\r\nns3.garant.ru\r\nns3.iaas.beeline.ru\r\nns3.kostroma.gov.ru\r\nns3.mail.ru\r\nns3.mchs.gov.ru\r\nns3.mirtv.ru\r\nns3.mk.ru\r\nns3.ok.ru\r\nns3.tambov.gov.ru\r\nns3.urfo.gov.ru\r\nns3.yandex.ru\r\nns30.avito.ru\r\nns30.vk.com\r\nns31.avito.ru\r\nns32.avito.ru\r\nns33.avito.ru\r\nns34.avito.ru\r\nns35.avito.ru\r\nns36.avito.ru\r\nns37.avito.ru\r\nns38.avito.ru\r\nns39.avito.ru\r\nns4.avito.ru\r\nns4.garant.ru\r\nns4.kostroma.gov.ru\r\nns4.mail.ru\r\nns4.mk.ru\r\nns4.urfo.gov.ru\r\nns4.yandex.ru\r\nns40.avito.ru\r\nns40.vk.com\r\nns41.avito.ru\r\nns42.avito.ru\r\nns43.avito.ru\r\nns44.avito.ru\r\nns45.avito.ru\r\nns46.avito.ru\r\nns47.avito.ru\r\nns48.avito.ru\r\nns49.avito.ru\r\nns5.avito.ru\r\nns5.kommersant.ru\r\nns5.mail.ru\r\nns5.yandex.ru\r\nns50.avito.ru\r\nns51.avito.ru\r\nns52.avito.ru\r\nns53.avito.ru\r\nns54.avito.ru\r\nns55.avito.ru\r\nns56.avito.ru\r\nns57.avito.ru\r\nns58.avito.ru\r\nns59.avito.ru\r\nns6.avito.ru\r\nns60.avito.ru\r\nns61.avito.ru\r\nns62.avito.ru\r\nns63.avito.ru\r\nns64.avito.ru\r\nns65.avito.ru\r\nns66.avito.ru\r\nns67.avito.ru\r\nns68.avito.ru\r\nns69.avito.ru\r\nns7.avito.ru\r\nns70.avito.ru\r\nns71.avito.ru\r\nns72.avito.ru\r\nns73.avito.ru\r\nns74.avito.ru\r\nns75.avito.ru\r\nns76.avito.ru\r\nns77.avito.ru\r\nns78.avito.ru\r\nns79.avito.ru\r\nns8.avito.ru\r\nns80.avito.ru\r\nns81.avito.ru\r\nns82.avito.ru\r\nns83.avito.ru\r\nns84.avito.ru\r\nns85.avito.ru\r\nns86.avito.ru\r\nns87.avito.ru\r\nns88.avito.ru\r\nns89.avito.ru\r\nns9.avito.ru\r\nns90.avito.ru\r\nns91.avito.ru\r\nns92.avito.ru\r\nns93.avito.ru\r\nns94.avito.ru\r\nns95.avito.ru\r\nns96.avito.ru\r\nns97.avito.ru\r\nns98.avito.ru\r\nns99.avito.ru\r\nnsa.avito.ru\r\nnsb.avito.ru\r\nnsc.avito.ru\r\nnscarp1-2.rambler.ru\r\nnscarp1.rambler.ru\r\nnscarp2-2.rambler.ru\r\nnsd.avito.ru\r\nnseu1.mail.ru\r\nnseu2.mail.ru\r\nnsgate.open.ru\r\nnsi.avito.ru\r\nnsi.minfin.rk.gov.ru\r\nnsi.sev.gov.ru\r\nnsinitsyna.ing.k8s.dev.ivi.ru\r\nnsk.aif.ru\r\nnsk.avito.ru\r\nnsk.beeline.ru\r\nnsk.cloud.mts.ru\r\nnsk.dev.kp.ru\r\nnsk.home.megafon.ru\r\nnsk.kommersant.ru\r\nnsk.kp.ru\r\nnsk.mts.ru\r\nnsk.openbank.ru\r\nnsk.rtp.sbc.sip.beeline.ru\r\nnsk.sig-ipsec.sbc.sip.beeline.ru\r\nnsk.sig.sbc.sip.beeline.ru\r\nnsk.sip.beeline.ru\r\nnsk.tinkoff.ru\r\nnskbl.credit-registry.nalog.ru\r\nnsm.avito.ru\r\nnsmaster.avito.ru\r\nnsmdmtest.mts.ru\r\nnsp.avito.ru\r\nnsq.avito.ru\r\nnsr.rosatom.ru\r\nnsr1.rambler.ru\r\nnsr2-2.rambler.ru\r\nnsr2.avito.ru\r\nnsrpub.mail.ru\r\nnss.avito.ru\r\nnst1.gismeteo.ru\r\nnst10.gismeteo.ru\r\nnst11.gismeteo.ru\r\nnst12.gismeteo.ru\r\nnst13.gismeteo.ru\r\nnst14.gismeteo.ru\r\nnst15.gismeteo.ru\r\nnst16.gismeteo.ru\r\nnst17.gismeteo.ru\r\nnst18.gismeteo.ru\r\nnst19.gismeteo.ru\r\nnst2.gismeteo.ru\r\nnst20.gismeteo.ru\r\nnst4.gismeteo.ru\r\nnst5.gismeteo.ru\r\nnst6.gismeteo.ru\r\nnst7.gismeteo.ru\r\nnst8.gismeteo.ru\r\nnst9.gismeteo.ru\r\nnstest.avito.ru\r\nnstri.avito.ru\r\nnsx.banki.ru\r\nnsz1s1.news.ozon.ru\r\nnsz1s1.ozon.ru\r\nnsz20s1.ozon.ru\r\nnsz23s1.ozon.ru\r\nnsz2s1.news.ozon.ru\r\nnsz2s1.ozon.ru\r\nnsz501s1.ozon.ru\r\nnsz502s1.ozon.ru\r\nnsz503s1.ozon.ru\r\nnt.avito.ru\r\nnt01.dom.test.gosuslugi.ru\r\nntc.avito.ru\r\nntc.duma.gov.ru\r\nntcpmsg.kino-teatr.ru\r\nntd.afro.who.int\r\nnti.rosatom.ru\r\nnti.tass.ru\r\nntp.avito.ru\r\nntp.tass.ru\r\nntp0.avito.ru\r\nntp1.avito.ru\r\nntp1.mail.ru\r\nntp2.avito.ru\r\nntp2.mail.ru\r\nntp3.avito.ru\r\nnts.avito.ru\r\nntt.avito.ru\r\nntv.avito.ru\r\nntvmir.ntv.ru\r\nnu.avito.ru\r\nnucleus.avito.ru\r\nnueva.avito.ru\r\nnuevo.avito.ru\r\nnuke.avito.ru\r\nnull.avito.ru\r\nnumb.park.01.yandex.ru\r\nnumber.megafon.ru\r\nnumbers.avito.ru\r\nnuovo.avito.ru\r\nnuri.avito.ru\r\nnurse.avito.ru\r\nnursing.avito.ru\r\nnut.avito.ru\r\nnutraeffects-oil.lady.mail.ru\r\nnutri.avito.ru\r\nnutrition.avito.ru\r\nnuts.avito.ru\r\nnuya.sakha.gov.ru\r\nnv.avito.ru\r\nnv.babyblog.ru\r\nnvartovsk.mts.ru\r\nnvbo.mkb.ru\r\nnvg.beeline.ru\r\nnvpgk.avito.ru\r\nnvpgk1.avito.ru\r\nnw.avito.ru\r\nnw.life.ru\r\nnw.net.mail.ru\r\nnw.tg.t2.ru\r\nnw.travel.t2.ru\r\nnw1.avito.ru\r\nnwp.worldbank.org\r\nnwq.worldbank.org\r\nnws.avito.ru\r\nnws.worldbank.org\r\nnwt.worldbank.org\r\nnwww.avito.ru\r\nnx.avito.ru\r\nnxs-alertmanager.lk.otello.2gis.ru\r\nnxs-monitor.lk.otello.2gis.ru\r\nnxs-prometheus.lk.otello.2gis.ru\r\nny.avito.ru\r\nny.magnit.ru\r\nny2017.stage.championat.com\r\nny2019.garant.ru\r\nny2022.beeline.ru\r\nny2023.rutube.ru\r\nny2025.happy.x5.ru\r\nny23.m24.ru\r\nny25.m24.ru\r\nnyagan.drom.ru\r\nnyagan.home.megafon.ru\r\nnyagan.mts.ru\r\nnyc.avito.ru\r\nnyceov.life.ru\r\nnysong.magnit.ru\r\nnyx.avito.ru\r\nnz.avito.ru\r\nnzhk.feedback.rosatom.ru\r\no-admin-b2b.lemanapro.ru\r\no-b2b.lemanapro.ru\r\no.avito.ru\r\no.dns-shop.ru\r\no.proza.ru\r\no.stihi.ru\r\no.tinkoff.ru\r\no1.10ip.avito.ru\r\no1.avito.ru\r\no1.email.avito.ru\r\no1.sendgrid.avito.ru\r\no2.avito.ru\r\no2.email.avito.ru\r\no2.es9.avito.ru\r\no2.mail.ru\r\no2.openbank.ru\r\no3.email.avito.ru\r\no4.email.avito.ru\r\no5.email.avito.ru\r\no6.email.avito.ru\r\no7.email.avito.ru\r\no8.email.avito.ru\r\no807.account.euronews.com\r\no9.email.avito.ru\r\noa.avito.ru\r\noa.exchange.rosbank.ru\r\noa.rosbank.ru\r\noab.exchange.rosbank.ru\r\noab.rosbank.ru\r\noak.avito.ru\r\noam.avito.ru\r\noas.avito.ru\r\noasis.avito.ru\r\noauth-buh.sovcombank.ru\r\noauth-ift.sber.ru\r\noauth-internal.yandex.ru\r\noauth-openshift.hw1-platform.tutu.ru\r\noauth-openshift.hw2-prod-platform.tutu.ru\r\noauth-openshift.hw3-prod-platform.tutu.ru\r\noauth-openshift.platform.tutu.ru\r\noauth-openshift.testing1-platform.tutu.ru\r\noauth-pl.alfabank.ru\r\noauth-rc-internal.yandex.ru\r\noauth-rc.yandex.ru\r\noauth-test.yandex.ru\r\noauth.admin.life.ru\r\noauth.avito.ru\r\noauth.beeline.ru\r\noauth.businessconf.sber.ru\r\noauth.cs7777.vk.com\r\noauth.mts.ru\r\noauth.sber.ru\r\noauth.tau.vk.com\r\noauth.test.ivi.ru\r\noauth.wifi.beeline.ru\r\noauth.yandex.ru\r\noauth1.mail.ru\r\noauth2.cs7777.vk.com\r\noauth2.i.mail.ru\r\noauth2.mts.ru\r\noauthap.alfabank.ru\r\noauthas.alfabank.ru\r\nob.avito.ru\r\nob.sev.gov.ru\r\nob17-kn1000.rambler.ru\r\noban.avito.ru\r\nobelix.avito.ru\r\noberon.avito.ru\r\nobiwan.avito.ru\r\nobject.avito.ru\r\noblivion.avito.ru\r\noblomoffcard.tinkoff.ru\r\nobluo.tomsk.gov.ru\r\noblzem-nat.tomsk.gov.ru\r\nobmen-preprod-1.open.ru\r\nobmen-preprod-2.open.ru\r\nobmen-preprod.open.ru\r\nobmen-staging.open.ru\r\nobmen.avito.ru\r\nobmen.open.ru\r\nobmen.vtb.ru\r\nobninsk.avito.ru\r\nobninsk.dns-shop.ru\r\noboroty.sovcombank.ru\r\noboyan-gorod.gosuslugi.ru\r\nobrnadzor.gov.ru\r\nobs-server3.rbc.ru\r\nobs.avito.ru\r\nobservatorio.avito.ru\r\nobserver.avito.ru\r\nobserver.mos.ru\r\nobservium.avito.ru\r\nobsidian.avito.ru\r\nobzor.74.yandex.ru\r\nobzor.mvideo.ru\r\noc.avito.ru\r\noc.pool.avito.ru\r\nocadmin.avito.ru\r\nocc.avito.ru\r\nocean.avito.ru\r\noceans8.afisha.ru\r\noceanus.avito.ru\r\noceg.mail.ru\r\nocelot.avito.ru\r\nocenaida.mail.ru\r\nocharikov.dv.rbc.ru\r\nocs.avito.ru\r\nocs.garant.ru\r\nocserv-vpn81.film.ru\r\nocsp.avito.ru\r\nocsp.rzd.ru\r\nocsp1.beeline.ru\r\nocsp2.beeline.ru\r\nocsweb.avito.ru\r\noctans.avito.ru\r\nocto.rambler.ru\r\noctober.tomsk.gov.ru\r\noctopus.avito.ru\r\noctouber.tomsk.gov.ru\r\nocw.avito.ru\r\nod-dev.sberbank.ru\r\nod-ift.sberbank.ru\r\nod-nt.sberbank.ru\r\nod-psi.sberbank.ru\r\nod.avito.ru\r\nod.minzdrav.gov.ru\r\nodb.tambov.gov.ru\r\nodc.avito.ru\r\noddbanner.avito.ru\r\nodds.avito.ru\r\nodessa.avito.ru\r\nodessa.babyblog.ru\r\nodie.avito.ru\r\nodin.avito.ru\r\nodintsovo.dns-shop.ru\r\nodintsovo.mts.ru\r\nodp.avito.ru\r\nods.avito.ru\r\noduithreadguardframework.kino-teatr.ru\r\nodyssey.avito.ru\r\noe.avito.ru\r\noem.avito.ru\r\noewp-cms-demo.gosuslugi.ru\r\noewp-demo.gosuslugi.ru\r\noex-istio-ns.yc.mvideo.ru\r\nof.avito.ru\r\nofd.beeline.ru\r\nofd.yandex.ru\r\nofertamc.beeline.ru\r\nofertas.avito.ru\r\noff.avito.ru\r\noffcampus.avito.ru\r\noffcarp1.rambler.ru\r\noffer-api.tinkoff.ru\r\noffer.avito.ru\r\noffer.tinkoff.ru\r\noffers.avito.ru\r\noffers.babyblog.ru\r\noffers.magnit.ru\r\noffice-demo.mkb.ru\r\noffice.avito.ru\r\noffice.beeline.ru\r\noffice.kino-teatr.ru\r\noffice.kostroma.gov.ru\r\noffice.mkb.ru\r\noffice.ozon.ru\r\noffice.psbank.ru\r\noffice.rusarchives.ru\r\noffice.sberbank.ru\r\noffice.tutu.ru\r\noffice1.avito.ru\r\noffice2.avito.ru\r\nofficewapps-nsk.beeline.ru\r\nofficewapps-rnd.beeline.ru\r\nofficewapps.beeline.ru\r\nofficewebapp.mvideo.ru\r\nofficial.avito.ru\r\nofficial.contest.yandex.ru\r\noffline.avito.ru\r\noffline.tinkoff.ru\r\nofflinestat.consultant.ru\r\noffsite.avito.ru\r\noffwebapp.euronews.com\r\noficina.avito.ru\r\nogame.avito.ru\r\noglasi.avito.ru\r\nogloszenia.avito.ru\r\nogoniok.kommersant.ru\r\nogre.avito.ru\r\noh.avito.ru\r\nohio.avito.ru\r\nohr-stage.lemanapro.ru\r\nohr.lemanapro.ru\r\nohrana-truda.garant.ru\r\nohx.avito.ru\r\nohyes.avito.ru\r\noil-ai.demo.megafon.ru\r\noil.avito.ru\r\noj.avito.ru\r\nojms.sakha.gov.ru\r\nojs.avito.ru\r\nok-bar.love.mail.ru\r\nok-portal.mail.ru\r\nok.avito.ru\r\nok.culture.ru\r\nok.go.mail.ru\r\nok.mk.ru\r\nok.sberbank.ru\r\nok.tinkoff.ru\r\nokapi.megafon.ru\r\nokb-55.gosuslugi.ru\r\nokbar.love.mail.ru\r\nokbm.feedback.rosatom.ru\r\nokey.rosbank.ru\r\nokinawa.avito.ru\r\noklahoma.avito.ru\r\nokolo.youdo.com\r\nokon.27.yandex.ru\r\nokop.tass.ru\r\noks.avito.ru\r\nokta.avito.ru\r\nokta.kino-teatr.ru\r\noktopus1.mail.ru\r\noktopus2.mail.ru\r\noktopus3.mail.ru\r\noktopus4.mail.ru\r\noktyabrsk.drom.ru\r\nokulnev.ing.k8s.dev.ivi.ru\r\nokz.garant.ru\r\nol.sberbank.ru\r\nol2005.05.yandex.ru\r\nolap.avito.ru\r\nolbdemo.vtb.ru\r\nolc.worldbank.org\r\nolcdev.worldbank.org\r\nolcprd.worldbank.org\r\nolcqa.worldbank.org\r\nolcstage.worldbank.org\r\nolcuat.worldbank.org\r\nold-centralcampaign.tele2.ru\r\nold-www.avito.ru\r\nold.01.mchs.gov.ru\r\nold.01.mchs.ru\r\nold.02.mchs.gov.ru\r\nold.02.mchs.ru\r\nold.03.mchs.gov.ru\r\nold.03.mchs.ru\r\nold.04.mchs.gov.ru\r\nold.04.mchs.ru\r\nold.05.mchs.gov.ru\r\nold.05.mchs.ru\r\nold.06.mchs.gov.ru\r\nold.06.mchs.ru\r\nold.07.mchs.gov.ru\r\nold.07.mchs.ru\r\nold.08.mchs.gov.ru\r\nold.08.mchs.ru\r\nold.11.mchs.gov.ru\r\nold.11.mchs.ru\r\nold.13.mchs.gov.ru\r\nold.13.mchs.ru\r\nold.18.mchs.gov.ru\r\nold.18.mchs.ru\r\nold.20.mchs.ru\r\nold.21.mchs.gov.ru\r\nold.21.mchs.ru\r\nold.22.mchs.gov.ru\r\nold.22.mchs.ru\r\nold.23.mchs.gov.ru\r\nold.23.mchs.ru\r\nold.24.mchs.gov.ru\r\nold.24.mchs.ru\r\nold.25.mchs.gov.ru\r\nold.25.mchs.ru\r\nold.26.mchs.gov.ru\r\nold.26.mchs.ru\r\nold.27.mchs.gov.ru\r\nold.27.mchs.ru\r\nold.28.mchs.gov.ru\r\nold.28.mchs.ru\r\nold.29.mchs.gov.ru\r\nold.29.mchs.ru\r\nold.30.mchs.gov.ru\r\nold.30.mchs.ru\r\nold.32.mchs.gov.ru\r\nold.32.mchs.ru\r\nold.33.mchs.gov.ru\r\nold.33.mchs.ru\r\nold.34.mchs.gov.ru\r\nold.34.mchs.ru\r\nold.35.mchs.gov.ru\r\nold.35.mchs.ru\r\nold.36.mchs.gov.ru\r\nold.36.mchs.ru\r\nold.37.mchs.gov.ru\r\nold.37.mchs.ru\r\nold.38.mchs.gov.ru\r\nold.38.mchs.ru\r\nold.39.mchs.gov.ru\r\nold.39.mchs.ru\r\nold.40.mchs.gov.ru\r\nold.40.mchs.ru\r\nold.41.mchs.gov.ru\r\nold.41.mchs.ru\r\nold.42.mchs.gov.ru\r\nold.42.mchs.ru\r\nold.43.mchs.gov.ru\r\nold.43.mchs.ru\r\nold.44.mchs.gov.ru\r\nold.44.mchs.ru\r\nold.45.mchs.gov.ru\r\nold.45.mchs.ru\r\nold.46.mchs.gov.ru\r\nold.46.mchs.ru\r\nold.47.mchs.gov.ru\r\nold.47.mchs.ru\r\nold.48.mchs.gov.ru\r\nold.48.mchs.ru\r\nold.49.mchs.gov.ru\r\nold.49.mchs.ru\r\nold.50.mchs.gov.ru\r\nold.50.mchs.ru\r\nold.51.mchs.gov.ru\r\nold.51.mchs.ru\r\nold.52.mchs.gov.ru\r\nold.52.mchs.ru\r\nold.53.mchs.gov.ru\r\nold.53.mchs.ru\r\nold.54.mchs.gov.ru\r\nold.54.mchs.ru\r\nold.55.mchs.gov.ru\r\nold.55.mchs.ru\r\nold.56.mchs.gov.ru\r\nold.56.mchs.ru\r\nold.58.mchs.gov.ru\r\nold.58.mchs.ru\r\nold.59.mchs.gov.ru\r\nold.59.mchs.ru\r\nold.60.mchs.gov.ru\r\nold.60.mchs.ru\r\nold.61.mchs.gov.ru\r\nold.61.mchs.ru\r\nold.62.mchs.gov.ru\r\nold.62.mchs.ru\r\nold.63.mchs.gov.ru\r\nold.63.mchs.ru\r\nold.67.mchs.gov.ru\r\nold.67.mchs.ru\r\nold.69.mchs.gov.ru\r\nold.69.mchs.ru\r\nold.70.mchs.gov.ru\r\nold.70.mchs.ru\r\nold.71.mchs.gov.ru\r\nold.71.mchs.ru\r\nold.72.mchs.gov.ru\r\nold.72.mchs.ru\r\nold.73.mchs.gov.ru\r\nold.73.mchs.ru\r\nold.74.mchs.gov.ru\r\nold.74.mchs.ru\r\nold.75.mchs.gov.ru\r\nold.75.mchs.ru\r\nold.76.mchs.gov.ru\r\nold.76.mchs.ru\r\nold.77.mchs.ru\r\nold.78.mchs.gov.ru\r\nold.78.mchs.ru\r\nold.79.mchs.gov.ru\r\nold.79.mchs.ru\r\nold.82.mchs.gov.ru\r\nold.82.mchs.ru\r\nold.83.mchs.gov.ru\r\nold.83.mchs.ru\r\nold.86.mchs.gov.ru\r\nold.86.mchs.ru\r\nold.87.mchs.gov.ru\r\nold.87.mchs.ru\r\nold.89.mchs.gov.ru\r\nold.89.mchs.ru\r\nold.9111.ru\r\nold.92.mchs.gov.ru\r\nold.92.mchs.ru\r\nold.95.mchs.gov.ru\r\nold.95.mchs.ru\r\nold.996sc.mchs.ru\r\nold.afisha.yandex.ru\r\nold.alfabank.ru\r\nold.apteka.ru\r\nold.arcsar.mchs.ru\r\nold.asc-ug.mchs.ru\r\nold.autopay.tele2.ru\r\nold.avito.ru\r\nold.company.yandex.ru\r\nold.csk.mchs.ru\r\nold.csoor.mchs.ru\r\nold.culture.ru\r\nold.duma.gov.ru\r\nold.film.ru\r\nold.gudok.tele2.ru\r\nold.kino-teatr.ru\r\nold.kp.vedomosti.ru\r\nold.lenta.ru\r\nold.m.afisha.yandex.ru\r\nold.m24.ru\r\nold.mail.ru\r\nold.maps.yandex.ru\r\nold.mchs.ru\r\nold.metrica.yandex.ru\r\nold.metrika.yandex.ru\r\nold.mir.afisha.ru\r\nold.mkb.ru\r\nold.moscow.mchs.ru\r\nold.my.tele2.ru\r\nold.n.maps.yandex.ru\r\nold.ngc.mchs.ru\r\nold.pikabu.ru\r\nold.room.beeline.ru\r\nold.rosbalt.ru\r\nold.rosbank.ru\r\nold.rshb.ru\r\nold.ruzpu.mchs.ru\r\nold.rzd.ru\r\nold.sakha.gov.ru\r\nold.stihi.ru\r\nold.sufps70.mchs.ru\r\nold.tr.ria.ru\r\nold.ucfps23.mchs.ru\r\nold.uvgsch.mchs.ru\r\nold.vgsch.mchs.ru\r\nold.voda.gov.ru\r\nold.webmaster.yandex.ru\r\nold.yandex.ru\r\nold1.avito.ru\r\nold2.avito.ru\r\nold2.m24.ru\r\nold3.avito.ru\r\noldadmin.avito.ru\r\noldboy.film.ru\r\noldforum.avito.ru\r\noldftp.avito.ru\r\noldmail.avito.ru\r\noldman.avito.ru\r\noldrc.mchs.ru\r\noldsite.avito.ru\r\noldsite.fas.gov.ru\r\noldtransport.mos.ru\r\noldweb.avito.ru\r\noldwebmail.avito.ru\r\noldwww.avito.ru\r\noldwww.duma.gov.ru\r\nole.avito.ru\r\noleg.avito.ru\r\noleg.malyshev.1991.yandex.ru\r\noleg.minkin.1982.yandex.ru\r\noleg.tinkoff.ru\r\nolejnik.85.yandex.ru\r\nolga.avito.ru\r\nolimp.022013.yandex.ru\r\nolimp.avito.ru\r\nolive.avito.ru\r\noliver.avito.ru\r\nolivia.avito.ru\r\nolivier.avito.ru\r\nolm.avito.ru\r\nolsztyn.avito.ru\r\noltours.tutu.ru\r\nolya.avito.ru\r\nolymp.avito.ru\r\nolymp.mos.ru\r\nolymp2010.rambler.ru\r\nolymp2012.rambler.ru\r\nolympia.avito.ru\r\nolympic.avito.ru\r\nolympic2008.lenta.ru\r\nolympic2012.lenta.ru\r\nolympichistory.lenta.ru\r\nolympics.1tv.ru\r\nolympics80.life.ru\r\nolympus.avito.ru\r\nom.avito.ru\r\nom2asmey-rlp.ops.beeline.ru\r\noma.avito.ru\r\nomada.kino-teatr.ru\r\nomail.avito.ru\r\nomail.yandex.ru\r\noman.avito.ru\r\nomar.avito.ru\r\nomb.wbgcrm2.worldbank.org\r\nomb.wbgcrm2dev.worldbank.org\r\nomb.wbgcrm2qa.worldbank.org\r\nomb.wbgcrm2stg.worldbank.org\r\nomb.wbgcrm2trn.worldbank.org\r\nomb.wbgcrm2tst.worldbank.org\r\nombudsman.gov.ru\r\nombudsman.mos.ru\r\nombudsman.wbgcrm2dev.worldbank.org\r\nomc-test.beeline.ru\r\nomc.beeline.ru\r\nomega.avito.ru\r\nomega.mail.ru\r\nomega.mkb.ru\r\nomega.zen-test.yandex.ru\r\nomegau-cloud.mail.ru\r\nomer.avito.ru\r\nomg.avito.ru\r\nomg.tinkoff.ru\r\nomi.avito.ru\r\nomicron.avito.ru\r\nomid.avito.ru\r\nomievm.kino-teatr.ru\r\nomkar.avito.ru\r\nomni-appd.magnit.ru\r\nomni-sentry.magnit.ru\r\nomni.avito.ru\r\nomni.magnit.ru\r\nomni.rosbank.ru\r\nomni2.rosbank.ru\r\nomnibot.chat.psbank.ru\r\nomnipgstst.magnit.ru\r\nomoda.drom.ru\r\noms.avito.ru\r\noms.beeline.ru\r\nomsk.aif.ru\r\nomsk.alfabank.ru\r\nomsk.avito.ru\r\nomsk.beeline.ru\r\nomsk.dev.home.megafon.ru\r\nomsk.dev.kp.ru\r\nomsk.dns-shop.ru\r\nomsk.drom.ru\r\nomsk.fas.gov.ru\r\nomsk.hh.ru\r\nomsk.kp.ru\r\nomsk.lemanapro.ru\r\nomsk.megafon.ru\r\nomsk.mk.ru\r\nomsk.mts.ru\r\nomsk.shop.megafon.ru\r\nomsk.sig.sbc.sip.beeline.ru\r\nomsk.tele2.ru\r\nomsp.worldbank.org\r\nomukov.sakha.gov.ru\r\nomutninskoe-r43.gosweb.gosuslugi.ru\r\nomv-dev-grafana.demo.megafon.ru\r\non-air.tinkoff.ru\r\non-ice.tinkoff.ru\r\non.avito.ru\r\non.lenta.ru\r\non.max.com\r\nonb-dmz.fgw.db.vtb.ru\r\nonboarding.vtb.ru\r\noncloud.mts.ru\r\noncs-if.vtb.ru\r\noncs-rr.vtb.ru\r\nondb.consultant.ru\r\none-rc.net.ixbt.com\r\none.avito.ru\r\none.net.ixbt.com\r\noneclick-payment.kinopoisk.ru\r\noneclick.avito.ru\r\noneclick.russianpost.ru\r\nonelink.2gis.ru\r\nonelove.avito.ru\r\noneman.avito.ru\r\nonepiece.avito.ru\r\nonesignal.mobileapi.ria.ru\r\nonespace.worldbank.org\r\nonespace3.worldbank.org\r\nonespaceapi.worldbank.org\r\nonespaceapp.worldbank.org\r\nonespacec.worldbank.org\r\nonespacedevapi.worldbank.org\r\nonespacedevapi2.worldbank.org\r\nonespacedevapp.worldbank.org\r\nonespacedevapp2.worldbank.org\r\nonespacedevintapi.worldbank.org\r\nonespacedevintapp.worldbank.org\r\nonespacedevintmyapps.worldbank.org\r\nonespacedevms.worldbank.org\r\nonespacedevmsapi.worldbank.org\r\nonespacedevmyapps.worldbank.org\r\nonespacedevmyapps2.worldbank.org\r\nonespacemyapps.worldbank.org\r\nonespaceqaapi.worldbank.org\r\nonespaceqaapp.worldbank.org\r\nonespaceqamyapps.worldbank.org\r\nonespacetstapi.worldbank.org\r\nonespacetstapp.worldbank.org\r\nonespacetstmyapps.worldbank.org\r\nonetimepassword.beeline.ru\r\nonetwotrip.mts.ru\r\noneway.avito.ru\r\nonion.avito.ru\r\nonivd-callback.open.ru\r\nonivd.open.ru\r\nonix.avito.ru\r\nonlc.alfabank.ru\r\nonline-alpha.vtb.ru\r\nonline-anketa.alfabank.ru\r\nonline-beta.vtb.ru\r\nonline-beta2.vtb.ru\r\nonline-controller-dev.k8s.rg.ru\r\nonline-controller-develop.k8s.rg.ru\r\nonline-controller-development.k8s.rg.ru\r\nonline-controller-stage.k8s.rg.ru\r\nonline-controller.k8s.rg.ru\r\nonline-old.vtb.ru\r\nonline-pro.vtb.ru\r\nonline-square.tele2.ru\r\nonline.alfabank.ru\r\nonline.avito.ru\r\nonline.consultant.ru\r\nonline.factoring.rosbank.ru\r\nonline.games.mail.ru\r\nonline.if.test.vtb.ru\r\nonline.if.vtb.ru\r\nonline.m24.ru\r\nonline.minzdrav.gov.ru\r\nonline.mkb.ru\r\nonline.mts.ru\r\nonline.open.ru\r\nonline.openbank.ru\r\nonline.rosbank.ru\r\nonline.rshb.ru\r\nonline.sberbank.ru\r\nonline.sovcombank.ru\r\nonline.test.vtb.ru\r\nonline.vtb.ru\r\nonline1.avito.ru\r\nonline11.consultant.ru\r\nonline2.avito.ru\r\nonline3.consultant.ru\r\nonline31.consultant.ru\r\nonlinefest.megafon.ru\r\nonlinegames.avito.ru\r\nonlinekassa.mts.ru\r\nonlineoffice.sberbank.ru\r\nonlinepark.tele2.ru\r\nonlinesales.vtb.ru\r\nonlineshop.avito.ru\r\nonlinetest.avito.ru\r\nonlinetradein.t2.ru\r\nonlineworld.avito.ru\r\nonly.avito.ru\r\nonlyoffice.alfabank.ru\r\nonlyoffice.oxion.mchs.ru\r\nonlyone.avito.ru\r\nonlyyou.avito.ru\r\nons.avito.ru\r\nontario.avito.ru\r\nontheway.2gis.ru\r\nontime.avito.ru\r\nonvos.rpn.gov.ru\r\nonyx.avito.ru\r\noo.cgu.mchs.ru\r\noo.iac.mchs.ru\r\noo.mos.ru\r\noodd.livejournal.com\r\nooo.21ctg.yandex.ru\r\nooo.avito.ru\r\noops.avito.ru\r\noopt.174.yandex.ru\r\noos.magnit.ru\r\noos.open.ru\r\noos.rosbank.ru\r\noos.rtk-holding.ru\r\noos.sberbank.ru\r\noos.t2.ru\r\noosbm-trust-tst1.open.ru\r\noosbm-trust.open.ru\r\noossp.magnit.ru\r\nop.avito.ru\r\nop.kommersant.ru\r\nop.mos.ru\r\nop.yandex.ru\r\nopa.avito.ru\r\nopaas.who.int\r\nopac.avito.ru\r\nopal.avito.ru\r\nopcollabd.worldbank.org\r\nopds.litres.ru\r\nope.worldbank.org\r\nopel.avito.ru\r\nopel.drom.ru\r\nopen-dpo.obrnadzor.gov.ru\r\nopen-exhtca01.open.ru\r\nopen-exhtca02.open.ru\r\nopen.api.sberbank.ru\r\nopen.api.vtb.ru\r\nopen.avito.ru\r\nopen.credit-registry.nalog.ru\r\nopen.edu.gov.ru\r\nopen.gov.ru\r\nopen.mir.afisha.ru\r\nopen.sakha.gov.ru\r\nopen.vesti.ru\r\nopenapi-pro.nalog.gov.ru\r\nopenapi.kino-teatr.ru\r\nopenapi.megafon.ru\r\nopenapi.psbank.ru\r\nopenapi.rosbank.ru\r\nopencart.avito.ru\r\nopendata.avito.ru\r\nopendata.economy.gov.ru\r\nopendata.edu.gov.ru\r\nopendata.gov.ru\r\nopendata.mos.ru\r\nopendata.open.gov.ru\r\nopenemm.avito.ru\r\nopenerp.avito.ru\r\nopenfights.open.ru\r\nopenfire.avito.ru\r\nopenid.avito.ru\r\nopenid.mail.ru\r\nopenid.yandex.ru\r\nopeninnovations.bizconf.rbc.ru\r\nopenknowledge.worldbank.org\r\nopenlife-test.open.ru\r\nopenlife.open.ru\r\nopenline.openbank.ru\r\nopenmeetings.avito.ru\r\nopenrussia.iz.ru\r\nopensource.avito.ru\r\nopensource.mail.ru\r\nopensource.tbank.ru\r\nopensource.tinkoff.ru\r\nopenstack.cloud.russianpost.ru\r\nopentrade-ca.open.ru\r\nopenvpn-admin.k8s.rg.ru\r\nopenvpn.avito.ru\r\nopenvpn.tambov.gov.ru\r\nopenvz.avito.ru\r\nopenwith.kino-teatr.ru\r\nopenx.avito.ru\r\noper.avito.ru\r\nopera.avito.ru\r\nopera.yandex.ru\r\noperations.avito.ru\r\noperations.leasing.rshb.ru\r\noperations2.worldbank.org\r\noperationscoding.worldbank.org\r\noperationscodingdev.worldbank.org\r\noperationscodingdr.worldbank.org\r\noperationscodingdrqa.worldbank.org\r\noperationscodingqa.worldbank.org\r\noperationscodingstg.worldbank.org\r\noperationsportal.worldbank.org\r\noperationsportalcollab.worldbank.org\r\noperationsportalcollabdev.worldbank.org\r\noperationsportalcollabqa.worldbank.org\r\noperationsportaldev.worldbank.org\r\noperationsportaldevws.worldbank.org\r\noperationsportalpq.worldbank.org\r\noperationsportalqa.worldbank.org\r\noperationsportalqaws.worldbank.org\r\noperationsportalstg.worldbank.org\r\noperationsportalstgws.worldbank.org\r\noperationsportaluat.worldbank.org\r\noperationsportaluatws.worldbank.org\r\noperationsportalws.worldbank.org\r\noperator.avito.ru\r\noperator.mail.ru\r\noperator.new.market.pochta.ru\r\nophelia.avito.ru\r\nophomec.worldbank.org\r\nopinion.avito.ru\r\nopk.km.duma.gov.ru\r\noplata.avito.ru\r\noplata.beeline.ru\r\noplata.mts.ru\r\noplata.open.ru\r\noplata.t2.ru\r\noplata.tele2.ru\r\noplata.tinkoff.ru\r\noplata.vtb.ru\r\noplata.yandex.ru\r\noplivechat.worldbank.org\r\nopmanager.avito.ru\r\nopolchenie.m24.ru\r\noponlinepha.worldbank.org\r\noponlinerer.worldbank.org\r\noponlineservices.worldbank.org\r\nopp.alfabank.ru\r\nopportunity.avito.ru\r\nopros.avito.ru\r\nopros.gosuslugi.ru\r\nopros.megafon.ru\r\nopros.rosatom.ru\r\nopros.rostelecom.ru\r\nopros.sakha.gov.ru\r\nopros.sberbank.ru\r\nopros.vtb.ru\r\noprosot.beeline.ru\r\noprosso.sberbank.ru\r\noprs.sakha.gov.ru\r\nops-api.magnit.ru\r\nops.avito.ru\r\nops.beeline.ru\r\nopsapp.worldbank.org\r\nopsappqa.worldbank.org\r\nopsapps.worldbank.org\r\nopsappsdev.worldbank.org\r\nopsappsqa.worldbank.org\r\nopsappsstg.worldbank.org\r\nopscdn.worldbank.org\r\nopscdndev.worldbank.org\r\nopscdnqa.worldbank.org\r\nopscdnqa2.worldbank.org\r\nopscdnstg.worldbank.org\r\nopscdntrn.worldbank.org\r\nopsonline.worldbank.org\r\nopsonlineappsqa.worldbank.org\r\nopsonlineqa.worldbank.org\r\nopsonlinewinqa.worldbank.org\r\nopssp.worldbank.org\r\nopsspdev.worldbank.org\r\nopsspqa.worldbank.org\r\nopsspstg.worldbank.org\r\nopssptst.worldbank.org\r\nopsspwin.worldbank.org\r\nopsspwindev.worldbank.org\r\nopsspwinqa.worldbank.org\r\nopsspwinstg.worldbank.org\r\nopsspwintst.worldbank.org\r\nopssvcqa.worldbank.org\r\nopsview.avito.ru\r\nopswcf.worldbank.org\r\nopswcfdev.worldbank.org\r\nopswcfqa.worldbank.org\r\nopswcfstg.worldbank.org\r\nopswcftrn.worldbank.org\r\nopswcftst.worldbank.org\r\nopt.avito.ru\r\nopt.dns-shop.ru\r\nopt.magnit.ru\r\nopt.perekrestok.ru\r\nopt.vprok.ru\r\noptics.avito.ru\r\noptima.avito.ru\r\noptimus.avito.ru\r\noption-for-life.t2.ru\r\noption.avito.ru\r\nopus.avito.ru\r\nor.avito.ru\r\nor.factoring.rshb.ru\r\nora-placeholder-ps-db.srv.avito.ru\r\nora.avito.ru\r\norac.avito.ru\r\noracle.avito.ru\r\noral.avito.ru\r\noralhistory.worldbank.org\r\norange-noc.worldbank.org\r\norange.avito.ru\r\norange.play.max.com\r\norange.www.max.com\r\norangecounty.avito.ru\r\norb.avito.ru\r\norbank.credit-registry.nalog.ru\r\norbit.avito.ru\r\norbital.avito.ru\r\norc.avito.ru\r\norca.avito.ru\r\norchid.avito.ru\r\nord.beeline.ru\r\nord.vk.com\r\norder-execution-dev.yc.mvideo.ru\r\norder-execution-istio-nsg.yc.mvideo.ru\r\norder-execution-istio-prod-nsg.yc.mvideo.ru\r\norder-execution-istio-prod.yc.mvideo.ru\r\norder-execution-istio.yc.mvideo.ru\r\norder-execution-nft.yc.mvideo.ru\r\norder-execution.yc.mvideo.ru\r\norder-placement.yc.mvideo.ru\r\norder.avito.ru\r\norder.ixbt.com\r\norder.lemanapro.ru\r\norder.megafon.ru\r\norders.avito.ru\r\noregon.avito.ru\r\norehovo.social.tomsk.gov.ru\r\norekhovo-zuevo.beeline.ru\r\norekhovo-zuevo.dns-shop.ru\r\norel.avito.ru\r\norel.beeline.ru\r\norel.dev.kp.ru\r\norel.dns-shop.ru\r\norel.fas.gov.ru\r\norel.hh.ru\r\norel.kp.ru\r\norel.lemanapro.ru\r\norel.mts.ru\r\norel.tele2.ru\r\norel.tutu.ru\r\norel1.icn.gov.ru\r\noren.aif.ru\r\noren.avito.ru\r\noren.mk.ru\r\norenburg.avito.ru\r\norenburg.babyblog.ru\r\norenburg.demo.megafon.ru\r\norenburg.dev.home.megafon.ru\r\norenburg.dns-shop.ru\r\norenburg.drom.ru\r\norenburg.hh.ru\r\norenburg.kp.ru\r\norenburg.lemanapro.ru\r\norenburg.mts.ru\r\norenburg.shop.megafon.ru\r\norenburg.tele2.ru\r\norg-www.avito.ru\r\norg.avito.ru\r\norg.rambler.ru\r\norganic.avito.ru\r\norganizations.geop.mchs.ru\r\norganizations.mchs.gov.ru\r\norganizations.mchs.ru\r\norgdiv.adm.gov.ru\r\nori.avito.ru\r\norient.avito.ru\r\norientation.avito.ru\r\noriflame.avito.ru\r\norigami.avito.ru\r\norigen-www.avito.ru\r\norigin-againstfake.life.ru\r\norigin-api.avito.ru\r\norigin-blog.avito.ru\r\norigin-cdn.avito.ru\r\norigin-elka-dobra.life.ru\r\norigin-geroi-z.life.ru\r\norigin-images.avito.ru\r\norigin-kto-kuda.life.ru\r\norigin-lyudi-rzd.life.ru\r\norigin-nuans.life.ru\r\norigin-nw.life.ru\r\norigin-podvig.life.ru\r\norigin-postroi-svoi-bam.life.ru\r\norigin-proizvoditeli.life.ru\r\norigin-projects.life.ru\r\norigin-spec.life.ru\r\norigin-special.life.ru\r\norigin-static.avito.ru\r\norigin-stroika-narodov-bam.life.ru\r\norigin-stub.staging.meduza.io\r\norigin-taxihistory.life.ru\r\norigin-www.avito.ru\r\norigin.asia.dev.media.max.com\r\norigin.asia.int.media.max.com\r\norigin.asia.prd.media.max.com\r\norigin.asia.stg.media.max.com\r\norigin.avito.ru\r\norigin.cdn.gk.rosatom.ru\r\norigin.eu.dev.media.max.com\r\norigin.eu.int.media.max.com\r\norigin.eu.prd.media.max.com\r\norigin.eu.stg.media.max.com\r\norigin.fhg.avito.ru\r\norigin.fhg2.avito.ru\r\norigin.fhg3.avito.ru\r\norigin.latam.dev.media.max.com\r\norigin.latam.int.media.max.com\r\norigin.latam.prd.media.max.com\r\norigin.latam.stg.media.max.com\r\norigin.olympics.dev.media.max.com\r\norigin.olympics.int.media.max.com\r\norigin.olympics.prd.media.max.com\r\norigin.olympics.stg.media.max.com\r\noriginal-1.nfrolkin.ing.k8s.dev.ivi.ru\r\noriginal-1.svolkov.ing.k8s.dev.ivi.ru\r\noriginal-2.nfrolkin.ing.k8s.dev.ivi.ru\r\noriginal-2.svolkov.ing.k8s.dev.ivi.ru\r\noriginal.avito.ru\r\norigincdn.rosatom.ru\r\norinoco.avito.ru\r\norion.avito.ru\r\norion.duma.gov.ru\r\norion.youdo.com\r\norion1.avito.ru\r\norion2.avito.ru\r\norionvod.youdo.com\r\nork.avito.ru\r\norl.avito.ru\r\norl.beeline.ru\r\norl.home.megafon.ru\r\norl.shop.megafon.ru\r\norlando.avito.ru\r\norsk.alfabank.ru\r\norsk.dns-shop.ru\r\norsotenslimselfie.lady.mail.ru\r\nort.12018.yandex.ru\r\northo.avito.ru\r\nortonahara.sakha.gov.ru\r\norv.gov.ru\r\norw-cggw-02.orw.rzd.ru\r\norz.avito.ru\r\nos-pub.x5.ru\r\nos.avito.ru\r\nos.avntg-02.cloud.mts.ru\r\nos.avntg-03.cloud.mts.ru\r\nos.avntg-04.cloud.mts.ru\r\nos.economy.gov.ru\r\nos.rutube.ru\r\nos2.avito.ru\r\nosago.sberbank.ru\r\nosago.t2.ru\r\nosago.vtb.ru\r\nosago.yandex.ru\r\nosaka.avito.ru\r\nosama.avito.ru\r\nosc.avito.ru\r\noscar.avito.ru\r\noscommerce.avito.ru\r\nosd.avito.ru\r\noshevelev.test.ivi.ru\r\noshna.9111.ru\r\nosi.avito.ru\r\nosiam-test.avito.ru\r\nosiam.avito.ru\r\nosiiaci.iac.mchs.ru\r\nosipova.lideryrossii.tass.ru\r\nosiris.avito.ru\r\nosk.home.megafon.ru\r\noskar-rabin.tass.ru\r\noskolregion.gosuslugi.ru\r\noslo.avito.ru\r\nosm.avito.ru\r\nosm.gov.ru\r\nosmentity.kino-teatr.ru\r\nosp-webagregator.tass.ru\r\nosprey.avito.ru\r\noss.avito.ru\r\noss.economy.gov.ru\r\nossa2.yandex.ru\r\nost.avito.ru\r\nost.life.ru\r\nost1.gismeteo.ru\r\nostrogozhsk-r20.gosweb.gosuslugi.ru\r\nostrov.beeline.ru\r\nostrova.x5.ru\r\noswald.avito.ru\r\not.avito.ru\r\not.gov.ru\r\nota.avito.ru\r\nota.travel.yandex.ru\r\notaku.avito.ru\r\notc.avito.ru\r\notdel.06.yandex.ru\r\notdohni.tutu.ru\r\noteko.tass.ru\r\notello-admin.2gis.ru\r\notello.2gis.ru\r\nother.avito.ru\r\nothers.avito.ru\r\notkrytka.sberbank.ru\r\notp.avito.ru\r\notp.sberbank.ru\r\notpravka.pochta.ru\r\notpusk-rzd.life.ru\r\notr.avito.ru\r\notradnaya.hh.ru\r\notrs-meta01mht.yandex.ru\r\notrs-meta01sht.yandex.ru\r\notrs-shard01mht.yandex.ru\r\notrs-shard01sht.yandex.ru\r\notrs-shard02mht.yandex.ru\r\notrs-shard02sht.yandex.ru\r\notrs.avito.ru\r\notrs.open.ru\r\notrs.park.rambler.ru\r\notrs.zb.2gis.ru\r\notrs1.int.gosuslugi.ru\r\notrtop.mkb.ru\r\nots.avito.ru\r\nott-api.ott-backend.prestable.kinopoisk.ru\r\nott-timing.ott-backend.prestable.kinopoisk.ru\r\nott-widget.kinopoisk.ru\r\nott-widget.yandex.ru\r\nott-x5club-prev.x5.ru\r\nott.avito.ru\r\nottawa.avito.ru\r\notter.avito.ru\r\notto.avito.ru\r\notvet.mail.ru\r\noud.avito.ru\r\nour.mts.ru\r\nour2019.mts.ru\r\noursogo.avito.ru\r\nout-mail.t2.ru\r\nout.avito.ru\r\nout1.avito.ru\r\noutage.avito.ru\r\noutbound.avito.ru\r\noutbound1.avito.ru\r\noutdoor.avito.ru\r\noutgoing.avito.ru\r\noutlet.avito.ru\r\noutline.net.ixbt.com\r\noutlook.afro.who.int\r\noutlook.avito.ru\r\noutlook.beeline.ru\r\noutlook.extst.beeline.ru\r\noutlook.kino-teatr.ru\r\noutlook.open.ru\r\noutlook.sberbank.ru\r\noutlook.tz.afro.who.int\r\noutlook.wkc.who.int\r\noutlook.zw.afro.who.int\r\noutside.avito.ru\r\noutsource.megafon.ru\r\novcharka.mail.ru\r\noverflow.avito.ru\r\novh.avito.ru\r\novmf2.consultant.ru\r\novn.avito.ru\r\novod0.i.mail.ru\r\novod1.i.mail.ru\r\novod2.i.mail.ru\r\novod3.i.mail.ru\r\novod4.i.mail.ru\r\novod5.i.mail.ru\r\novpn.avito.ru\r\novpn.mon.gov.ru\r\novs.avito.ru\r\novz.edu.gov.ru\r\nowa-vip.alfabank.ru\r\nowa-vips.alfabank.ru\r\nowa.agents.sovcombank.ru\r\nowa.alfabank.ru\r\nowa.avito.ru\r\nowa.beeline.ru\r\nowa.bitools.sovcombank.ru\r\nowa.buh.sovcombank.ru\r\nowa.catalog.1tv.ru\r\nowa.cdn.invest.sovcombank.ru\r\nowa.confluence.sovcombank.ru\r\nowa.ecdn.sovcombank.ru\r\nowa.elf.sovcombank.ru\r\nowa.euro.who.int\r\nowa.files.sovcombank.ru\r\nowa.fingrad.sovcombank.ru\r\nowa.genesys.sovcombank.ru\r\nowa.halvamedia.sovcombank.ru\r\nowa.kino-teatr.ru\r\nowa.kino.1tv.ru\r\nowa.lawis.sovcombank.ru\r\nowa.lemanapro.ru\r\nowa.lk.rosnedra.gov.ru\r\nowa.lockter.sovcombank.ru\r\nowa.magnit.ru\r\nowa.mos.ru\r\nowa.mts.ru\r\nowa.oauth-buh.sovcombank.ru\r\nowa.oboroty.sovcombank.ru\r\nowa.online.sovcombank.ru\r\nowa.ozon.ru\r\nowa.partners.sovcombank.ru\r\nowa.pay.gov.ru\r\nowa.pay.sovcombank.ru\r\nowa.peertube-ext.sovcombank.ru\r\nowa.people.sovcombank.ru\r\nowa.premier.one\r\nowa.profi.ru\r\nowa.public-buh.sovcombank.ru\r\nowa.qrsbp.sovcombank.ru\r\nowa.reg.sovcombank.ru\r\nowa.restapi-buh.sovcombank.ru\r\nowa.rosbank.ru\r\nowa.roseltorg.ru\r\nowa.rutube.ru\r\nowa.sakhalin.gov.ru\r\nowa.secure.sovcombank.ru\r\nowa.smart.1tv.ru\r\nowa.sovcombank.ru\r\nowa.spb.kommersant.ru\r\nowa.spbprojects.kommersant.ru\r\nowa.sso-buh.sovcombank.ru\r\nowa.stats-buh.sovcombank.ru\r\nowa.storage.sovcombank.ru\r\nowa.storage.sport.sovcombank.ru\r\nowa.teams.sovcombank.ru\r\nowa.test-teams.sovcombank.ru\r\nowa.test.sovcombank.ru\r\nowa.travel.rzd.ru\r\nowa.ugp-zbx-ext-app.sovcombank.ru\r\nowa.uyp-zbx-ui-ext.sovcombank.ru\r\nowa.vgtrk.com\r\nowa.vimpelcom.ru\r\nowa.vlk.sovcombank.ru\r\nowa.vpn-phd.sovcombank.ru\r\nowa.who.int\r\nowa.yougile-sec.sovcombank.ru\r\nowa.youtrack.sovcombank.ru\r\nowa.zabbix-in.sovcombank.ru\r\nowa.zabbix-out.sovcombank.ru\r\nowa.zakon.ru\r\nowa2.avito.ru\r\nowapp.sberbank.ru\r\nowas.alfabank.ru\r\nowatst.beeline.ru\r\nowebe.worldbank.org\r\nowebeqa.worldbank.org\r\nowebi.worldbank.org\r\nowebidev.worldbank.org\r\nowebigp.worldbank.org\r\nowebigpdev.worldbank.org\r\nowebigpqa.worldbank.org\r\nowebigptst.worldbank.org\r\nowebiqa.worldbank.org\r\nowebitst.worldbank.org\r\nowen.avito.ru\r\nowl.avito.ru\r\nowl.lenta.ru\r\nowncloud.avito.ru\r\nowner.avito.ru\r\nownpage.euronews.com\r\nows.ozon.ru\r\nowww.kino-teatr.ru\r\nox.avito.ru\r\noxford.avito.ru\r\noxygen.avito.ru\r\noyster.avito.ru\r\noyun.avito.ru\r\noz.avito.ru\r\nozd.rzd.ru\r\nozersk-chelyabinsk.hh.ru\r\nozon-card-landing.ozon.ru\r\nozon.s3.litres.ru\r\nozone.avito.ru\r\nozonexpress.youdo.com\r\nozonsccmcmg.ozon.ru\r\nozontravel.mts.ru\r\nozorstvo.video.rambler.ru\r\nozzy.avito.ru\r\np-5-00.yandex.ru\r\np.afisha.ru\r\np.avito.ru\r\np.egorov.8.yandex.ru\r\np.premier.one\r\np.psb.ru\r\np.psbank.ru\r\np.sberbank.ru\r\np.test.ivi.ru\r\np.v.z.88.yandex.ru\r\np.video.net.ixbt.com\r\np0.dev.zoon.ru\r\np0wifi-ap2001xp.vtb.ru\r\np0wifi-ap2002xp.vtb.ru\r\np0wifi-ap2003xp.vtb.ru\r\np0wifi-ap5001xp.vtb.ru\r\np0wifi-ap5002xp.vtb.ru\r\np0wifi-ap5003xp.vtb.ru\r\np1.avito.ru\r\np1.dev.zoon.ru\r\np2.72.yandex.ru\r\np2.avito.ru\r\np2.dev.zoon.ru\r\np2p.avito.ru\r\np2p.open.ru\r\np3.avito.ru\r\np3.dev.zoon.ru\r\np4.avito.ru\r\np4.dev.zoon.ru\r\np5.avito.ru\r\np5.dev.zoon.ru\r\np6.avito.ru\r\np6.dev.zoon.ru\r\np7.avito.ru\r\np7.dev.zoon.ru\r\np7d.worldbank.org\r\np7n.worldbank.org\r\np7n2.worldbank.org\r\np7nqa.worldbank.org\r\np7p.worldbank.org\r\np7q.worldbank.org\r\np7s.worldbank.org\r\np7t.worldbank.org\r\np7t2.worldbank.org\r\np8.avito.ru\r\np8.dev.zoon.ru\r\np80.pool.avito.ru\r\np9.dev.zoon.ru\r\npa.avito.ru\r\npaas.cloud.mts.ru\r\npablo.avito.ru\r\npac.avito.ru\r\npacific.avito.ru\r\npack.avito.ru\r\npackages.avito.ru\r\npacman.avito.ru\r\npaco.avito.ru\r\npacs.avito.ru\r\npacs.lemanapro.ru\r\npacupdate.kino-teatr.ru\r\npad.avito.ru\r\npadma.avito.ru\r\npaf.avito.ru\r\npage.avito.ru\r\npagerank.avito.ru\r\npages.avito.ru\r\npages.dev.ivi.ru\r\npages.rutube.ru\r\npages.sps.rosatom.ru\r\npages.staging.tech.mvideo.ru\r\npages.tech.mvideo.ru\r\npaginasamarillas.avito.ru\r\npagos.avito.ru\r\npai.avito.ru\r\npaidmodel.ing.k8s.dev.ivi.ru\r\npaiement.avito.ru\r\npain.avito.ru\r\npainel.avito.ru\r\npainelstats.avito.ru\r\npaint.avito.ru\r\npaintball.avito.ru\r\npairs.2gis.ru\r\npakfa.tass.ru\r\npal.avito.ru\r\npalacesquare.rambler.ru\r\npalate.mail.ru\r\npalatka.drom.ru\r\npalembang.avito.ru\r\npalermo.avito.ru\r\npallas.avito.ru\r\npalm.avito.ru\r\npalmsprings.avito.ru\r\npamela.avito.ru\r\npami1.i.mail.ru\r\npami10.mail.ru\r\npami11.mail.ru\r\npami12.mail.ru\r\npami2.i.mail.ru\r\npami20.i.mail.ru\r\npami21.i.mail.ru\r\npami22.i.mail.ru\r\npami23.i.mail.ru\r\npami24.i.mail.ru\r\npami25.i.mail.ru\r\npami3.i.mail.ru\r\npami30.i.mail.ru\r\npami31.i.mail.ru\r\npami32.i.mail.ru\r\npami33.i.mail.ru\r\npami34.i.mail.ru\r\npami35.i.mail.ru\r\npami4.i.mail.ru\r\npami40.i.mail.ru\r\npami41.i.mail.ru\r\npami42.i.mail.ru\r\npami43.i.mail.ru\r\npami44.i.mail.ru\r\npami45.i.mail.ru\r\npami7.mail.ru\r\npami8.mail.ru\r\npami9.mail.ru\r\npampers.magnit.ru\r\npampers64.yandex.ru\r\npan.avito.ru\r\npana.avito.ru\r\npanama.avito.ru\r\npanasonic.avito.ru\r\npancho.avito.ru\r\npanda.avito.ru\r\npandemichub.who.int\r\npandora.avito.ru\r\npaneb.mail.ru\r\npanel-b2x.megafon.ru\r\npanel.atlas.dev.cgu.mchs.ru\r\npanel.atlas.mchs.gov.ru\r\npanel.avito.ru\r\npanel.dev.videoplatform.rambler.ru\r\npanel.kino-teatr.ru\r\npanel.net.ixbt.com\r\npanel.stage.videoplatform.rambler.ru\r\npanel2.avito.ru\r\npanelstats.avito.ru\r\npanelstatsmail.avito.ru\r\npanfs2-nfs.esc.avito.ru\r\npanic.avito.ru\r\npano.img.ria.ru\r\npanorama.avito.ru\r\npanoramas.api-maps.yandex.ru\r\npantera.avito.ru\r\npantera.mail.ru\r\npanther.avito.ru\r\npanzar.mail.ru\r\npanzer.avito.ru\r\npaola.avito.ru\r\npaolo.avito.ru\r\npap.avito.ru\r\npapa.avito.ru\r\npapaya.avito.ru\r\npaper.avito.ru\r\npapercut.avito.ru\r\npapi.banki.ru\r\npapillon.avito.ru\r\npaprika.avito.ru\r\npapyrus.avito.ru\r\npara.avito.ru\r\nparabel.social.tomsk.gov.ru\r\nparacesquare.rambler.ru\r\nparade2018.tass.ru\r\nparadise.avito.ru\r\nparadm.tomsk.gov.ru\r\nparadox.avito.ru\r\nparagon.avito.ru\r\nparaguay.avito.ru\r\nparanoia.avito.ru\r\nparanormal.avito.ru\r\nparapa.mail.ru\r\nparasochi.lenta.ru\r\nparasol.yandex.ru\r\nparbig.social.tomsk.gov.ru\r\nparents.avito.ru\r\nparfum.avito.ru\r\nparfum.film.ru\r\npari.avito.ru\r\nparis.avito.ru\r\npark.avito.ru\r\npark.magnit.ru\r\npark.mail.ru\r\npark.rambler.ru\r\npark.tele2.ru\r\npark1.avito.ru\r\npark2.avito.ru\r\nparked.avito.ru\r\nparker.avito.ru\r\nparket73.73.yandex.ru\r\nparking.avito.ru\r\nparkour.avito.ru\r\nparliament.bel.gov.ru\r\nparliament.gov.ru\r\nparlib-search.duma.gov.ru\r\nparlib.duma.gov.ru\r\nparma.instrument.59.yandex.ru\r\nparomonline.sakha.gov.ru\r\nparrot.avito.ru\r\nparser.avito.ru\r\nparshin2018.beta2.ria.ru\r\nparsi.euronews.com\r\npart.avito.ru\r\npart.psbank.ru\r\npartenaires.avito.ru\r\npartner-code01f.ppc.yandex.ru\r\npartner-code01i.ppc.yandex.ru\r\npartner-ext.news.yandex.ru\r\npartner-logos.cdn.dev.api.max.com\r\npartner-logos.cdn.int.api.max.com\r\npartner-logos.cdn.prd.api.max.com\r\npartner-logos.cdn.stg.api.max.com\r\npartner-standby02i.yandex.ru\r\npartner-test-precise.yandex.ru\r\npartner.alfabank.ru\r\npartner.api.2gis.ru\r\npartner.auto.yandex.ru\r\npartner.avito.ru\r\npartner.dev.api.max.com\r\npartner.gkh.hab.aif.ru\r\npartner.int.api.max.com\r\npartner.kp.ru\r\npartner.lemanapro.ru\r\npartner.maps.yandex.ru\r\npartner.market.yandex.ru\r\npartner.master.yandex.ru\r\npartner.mkb.ru\r\npartner.news.yandex.ru\r\npartner.oplata.t2.ru\r\npartner.ozon.ru\r\npartner.prd.api.max.com\r\npartner.profi.ru\r\npartner.rasp.yandex.ru\r\npartner.realty.yandex.ru\r\npartner.stg.api.max.com\r\npartner.taxi.pepelac1ft.yandex.ru\r\npartner.taxi.pepelac1t.yandex.ru\r\npartner.taxi.yandex.ru\r\npartner.travel.yandex.ru\r\npartner.vmeste.vtb.ru\r\npartner.yandex.ru\r\npartner1.avito.ru\r\npartner2-balancer-preprod-for-assessors.partner.yandex.ru\r\npartner2-balancer-prod.partner.yandex.ru\r\npartner2-test.yandex.ru\r\npartner2.avito.ru\r\npartner2.yandex.ru\r\npartnerapi.avito.ru\r\npartnerdb-test.yandex.ru\r\npartnerint.alfabank.ru\r\npartnerka.beeline.ru\r\npartneronline.sberbank.ru\r\npartners-bus.tutu.ru\r\npartners-test-cabinet.mobile.yandex.ru\r\npartners-wiki.sf.mail.ru\r\npartners.avia.yandex.ru\r\npartners.avito.ru\r\npartners.banki.ru\r\npartners.beeline.ru\r\npartners.gosuslugi.ru\r\npartners.kinopoisk.ru\r\npartners.lbs.heroism.yandex.ru\r\npartners.lemanapro.ru\r\npartners.megafon.ru\r\npartners.mts.ru\r\npartners.mvideo.ru\r\npartners.otello.2gis.ru\r\npartners.profi.ru\r\npartners.rutube.ru\r\npartners.sber.ru\r\npartners.shop.kp.ru\r\npartners.sovcombank.ru\r\npartners.test.ivi.ru\r\npartners.tinkoff.ru\r\npartners.tutu.ru\r\npartners.vprok.ru\r\npartners.yandex.ru\r\npartnersdnld.litres.ru\r\npartnership-new.alfabank.ru\r\npartnership.alfabank.ru\r\npartnership.garant.ru\r\npartnership.who.int\r\npartnershipcontentstagingproxy.who.int\r\npartnershipproductionproxy.who.int\r\npartnershipstagingproxy.who.int\r\npartnersshipstagingproxy.who.int\r\npartnerweb.beeline.ru\r\nparto.avito.ru\r\nparts.avito.ru\r\nparty.avito.ru\r\nparty.gosuslugi.ru\r\nparty.megafon.ru\r\nparus.life.ru\r\nparusa.life.ru\r\nparusa2020.iz.ru\r\nparusa2022.iz.ru\r\nparusa2023.iz.ru\r\npas.avito.ru\r\npasca.avito.ru\r\npascal.avito.ru\r\npass-rc.kinopoisk.ru\r\npass-rc.yandex.ru\r\npass-test.kinopoisk.ru\r\npass-test.yandex.ru\r\npass.avito.ru\r\npass.beeline.ru\r\npass.infra.rbc.ru\r\npass.kinopoisk.ru\r\npass.net.ixbt.com\r\npass.rbc.ru\r\npass.rzd.ru\r\npass.yandex.ru\r\npassendo.euronews.com\r\npassion.avito.ru\r\npassport-ckicheck.yandex.ru\r\npassport-internal.yandex.ru\r\npassport-rc-ckicheck.yandex.ru\r\npassport-rc-internal.yandex.ru\r\npassport-rc.yandex.ru\r\npassport-test-ckicheck.yandex.ru\r\npassport-test-internal.yandex.ru\r\npassport-test.dzen.ru\r\npassport-test.yandex.ru\r\npassport.api.vtb.ru\r\npassport.avito.ru\r\npassport.cgu.mchs.ru\r\npassport.dev.cgu.iac.mchs.ru\r\npassport.dzen.ru\r\npassport.kp.ru\r\npassport.open.ru\r\npassport.pg.cgu.mchs.ru\r\npassport.pochta.ru\r\npassport.russianpost.ru\r\npassport.yandex.ru\r\npassreset.rosbank.ru\r\npasswd.max.ru\r\npassword.avito.ru\r\npasswork.devel.tutu.ru\r\npasswork.tutu.ru\r\npaste.avito.ru\r\npaste01e.cs-minitools01e.yandex.ru\r\npaste01f.cs-minitools01f.yandex.ru\r\npaste01h.cs-minitools01h.yandex.ru\r\npaste01ht.cs-minitools01ht.yandex.ru\r\npastebin.avito.ru\r\npasteur.avito.ru\r\npat.avito.ru\r\npatch.avito.ru\r\npatel.avito.ru\r\npatent.nalog.ru\r\npath.avito.ru\r\npathfinder.avito.ru\r\npations.avito.ru\r\npatricia.avito.ru\r\npatrick.avito.ru\r\npatriot.avito.ru\r\npatty.avito.ru\r\npaul.avito.ru\r\npaula.avito.ru\r\npaunch.mail.ru\r\npavel.avito.ru\r\npavel.che.2017.yandex.ru\r\npavlov.avito.ru\r\npavlovka.gosuslugi.ru\r\npavlovskij-r22.gosweb.gosuslugi.ru\r\npavo.avito.ru\r\npavt1.mail.ru\r\npavt10.mail.ru\r\npavt11.i.mail.ru\r\npavt12.i.mail.ru\r\npavt13.i.mail.ru\r\npavt14.i.mail.ru\r\npavt15.i.mail.ru\r\npavt2.mail.ru\r\npavt20.i.mail.ru\r\npavt21.i.mail.ru\r\npavt22.i.mail.ru\r\npavt3.mail.ru\r\npavt4.mail.ru\r\npavt5.mail.ru\r\npavt6.mail.ru\r\npavt7.mail.ru\r\npavt8.mail.ru\r\npavt9.mail.ru\r\npaw.avito.ru\r\npax.avito.ru\r\npay-cert.rosbank.ru\r\npay-games.vtb.ru\r\npay-google.tele2.ru\r\npay-history.mts.ru\r\npay-test.rosbank.ru\r\npay-test2.rosbank.ru\r\npay-test3.rosbank.ru\r\npay.alfabank.ru\r\npay.avito.ru\r\npay.beeline.ru\r\npay.gosuslugi.ru\r\npay.gov.ru\r\npay.ivi.ru\r\npay.kino-teatr.ru\r\npay.lemanapro.ru\r\npay.life.ru\r\npay.mail.ru\r\npay.megafon.ru\r\npay.mironline.ru\r\npay.mkb.ru\r\npay.mts.ru\r\npay.ozon.ru\r\npay.rambler.ru\r\npay.rosbank.ru\r\npay.secure.avito.ru\r\npay.sovcombank.ru\r\npay.stg.mironline.ru\r\npay.stg2.mironline.ru\r\npay.transport.vtb.ru\r\npay.tutu.ru\r\npay.vtb.ru\r\npay2.alfabank.ru\r\npay2.avito.ru\r\npayapi.beeline.ru\r\npayapytest.beeline.ru\r\npaybacklms.avito.ru\r\npaybypay.vtb.ru\r\npaycard.beeline.ru\r\npaycontrol-test.open.ru\r\npaycontrol.alfabank.ru\r\npaycontrol.open.ru\r\npaygate.avito.ru\r\npaygate.megafon.ru\r\npayinfo.life.ru\r\npaykeeper.alfabank.ru\r\npaylogic.beeline.ru\r\npayment-widget-smarttv.plus.kinopoisk.ru\r\npayment-widget-smarttv.plus.prestable.kinopoisk.ru\r\npayment-widget-smarttv.plus.tst.kinopoisk.ru\r\npayment-widget.kinopoisk.ru\r\npayment-widget.plus.kinopoisk.ru\r\npayment.alfabank.ru\r\npayment.avito.ru\r\npayment.beeline.ru\r\npayment.gosuslugi.ru\r\npayment.megafon.ru\r\npayment.mts.ru\r\npayment.ok.ru\r\npayment.rambler.ru\r\npayment.tutu.ru\r\npaymentnew.ok.ru\r\npayments-staging.k.avito.ru\r\npayments.avito.ru\r\npayments.sberbank.ru\r\npayments.vtb.ru\r\npaymvno-espp.tele2.ru\r\npaymvno-espptest.tele2.ru\r\npaymvno-osmp.tele2.ru\r\npaymvno-osmptest.tele2.ru\r\npaymvno.tele2.ru\r\npaynow.avito.ru\r\npaypal.avito.ru\r\npayroll.avito.ru\r\npays.megafon.ru\r\npaz.avito.ru\r\npb.avito.ru\r\npb.open.ru\r\npb.preprod-front.open.ru\r\npb.qa-front.open.ru\r\npb1.i.mail.ru\r\npb2.i.mail.ru\r\npb3.i.mail.ru\r\npb4.i.mail.ru\r\npba.avito.ru\r\npba.rosatom.ru\r\npbi.rutube.ru\r\npbox.ixbt.com\r\npbs.avito.ru\r\npbx.avito.ru\r\npbx.crm.blizko.ru\r\npbx.crm.pulscen.ru\r\npbx.megafon.ru\r\npc-cat4900-gw.avito.ru\r\npc.avito.ru\r\npc.iz.ru\r\npc.jura-gw1.avito.ru\r\npc.t2.ru\r\npc1.avito.ru\r\npc11.avito.ru\r\npc2.avito.ru\r\npcb.avito.ru\r\npcc.avito.ru\r\npccustomer.corp.t2.ru\r\npcdn.lenta.ru\r\npcgames.avito.ru\r\npcgk.avito.ru\r\npchukhnina.ing.k8s.dev.ivi.ru\r\npci-zap.ing.k8s.dev.ivi.ru\r\npci.avito.ru\r\npci.smarttv.notkube.dev.ivi.ru\r\npci.ybolotnikov.ing.k8s.dev.ivi.ru\r\npclab.avito.ru\r\npcm.mts.ru\r\npcms.worldbank.org\r\npcmstst.worldbank.org\r\npcontent1.mail.ru\r\npcontent2.mail.ru\r\npcontent3.mail.ru\r\npcontest1.mail.ru\r\npcontest2.i.mail.ru\r\npcs.avito.ru\r\npcscf.ims.tele2.ru\r\npcstun.avito.ru\r\npcsupport.bnsc.avito.ru\r\npct.avito.ru\r\npcworld.avito.ru\r\npd.avito.ru\r\npd.tele2.ru\r\npda-al.litres.ru\r\npda-biblio.litres.ru\r\npda-megaschool.litres.ru\r\npda-myschool.litres.ru\r\npda-passport-rc.yandex.ru\r\npda-passport-test.yandex.ru\r\npda-passport.yandex.ru\r\npda-pl.litres.ru\r\npda-pro.litres.ru\r\npda-ro.litres.ru\r\npda-sauth.yandex.ru\r\npda-sch.litres.ru\r\npda-student-biblio.litres.ru\r\npda-univer.litres.ru\r\npda.9111.ru\r\npda.abakan.dev.kp.ru\r\npda.abakan.kp.ru\r\npda.afisha.ru\r\npda.afisha.yandex.ru\r\npda.aleksandrova.dev.kp.ru\r\npda.alfabank.ru\r\npda.alt.dev.kp.ru\r\npda.alt.kp.ru\r\npda.amur.dev.kp.ru\r\npda.amur.kp.ru\r\npda.arh.dev.kp.ru\r\npda.arh.kp.ru\r\npda.astrakhan.dev.kp.ru\r\npda.astrakhan.kp.ru\r\npda.auto.kp.ru\r\npda.auto.yandex.ru\r\npda.avito.ru\r\npda.balkans.dev.kp.ru\r\npda.balkans.kp.ru\r\npda.bel.dev.kp.ru\r\npda.bel.kp.ru\r\npda.belarus.kp.ru\r\npda.beta.kp.ru\r\npda.blogs.yandex.ru\r\npda.bryansk.dev.kp.ru\r\npda.bryansk.kp.ru\r\npda.calendar.yandex.ru\r\npda.canada.dev.kp.ru\r\npda.chel.dev.kp.ru\r\npda.chel.kp.ru\r\npda.chita.dev.kp.ru\r\npda.chita.kp.ru\r\npda.chukotka.kp.ru\r\npda.crimea.dev.kp.ru\r\npda.crimea.kp.ru\r\npda.cyprus.dev.kp.ru\r\npda.cyprus.kp.ru\r\npda.czech.dev.kp.ru\r\npda.dag.kp.ru\r\npda.dev.kp.ru\r\npda.dom.kp.ru\r\npda.donetsk.kp.ru\r\npda.duma.gov.ru\r\npda.dv.dev.kp.ru\r\npda.dv.kp.ru\r\npda.eao.kp.ru\r\npda.egypt.dev.kp.ru\r\npda.euro.dev.kp.ru\r\npda.gazeta.ru\r\npda.gismeteo.ru\r\npda.hab.dev.kp.ru\r\npda.hab.kp.ru\r\npda.herson.kp.ru\r\npda.iam.duma.gov.ru\r\npda.il.kp.ru\r\npda.irk.dev.kp.ru\r\npda.irk.kp.ru\r\npda.ivanovo.dev.kp.ru\r\npda.izh.dev.kp.ru\r\npda.izh.kp.ru\r\npda.kaliningrad.dev.kp.ru\r\npda.kaliningrad.kp.ru\r\npda.kaluga.kp.ru\r\npda.kamchatka.kp.ru\r\npda.kazan.dev.kp.ru\r\npda.kazan.kp.ru\r\npda.kem.dev.kp.ru\r\npda.kem.kp.ru\r\npda.kirov.dev.kp.ru\r\npda.kirov.kp.ru\r\npda.komi.dev.kp.ru\r\npda.komi.kp.ru\r\npda.kostroma.kp.ru\r\npda.kp.ru\r\npda.krsk.dev.kp.ru\r\npda.krsk.kp.ru\r\npda.kuban.dev.kp.ru\r\npda.kuban.kp.ru\r\npda.kursk.dev.kp.ru\r\npda.kursk.kp.ru\r\npda.lenta.ru\r\npda.lenta.yandex.ru\r\npda.lepetsk.kp.ru\r\npda.lipetsk.dev.kp.ru\r\npda.lipetsk.kp.ru\r\npda.litres.ru\r\npda.lugansk.kp.ru\r\npda.magadan.kp.ru\r\npda.mail.ru\r\npda.mail.yandex.ru\r\npda.maps.yandex.ru\r\npda.mchs.ru\r\npda.med.kp.ru\r\npda.metro.yandex.ru\r\npda.mk.ru\r\npda.money.yandex.ru\r\npda.montenegro.dev.kp.ru\r\npda.mosobl.kp.ru\r\npda.msk.dev.kp.ru\r\npda.msk.kp.ru\r\npda.murmansk.dev.kp.ru\r\npda.murmansk.kp.ru\r\npda.news.yandex.ru\r\npda.news24.dev.kp.ru\r\npda.nnov.dev.kp.ru\r\npda.nnov.kp.ru\r\npda.nsk.dev.kp.ru\r\npda.nsk.kp.ru\r\npda.omsk.dev.kp.ru\r\npda.omsk.kp.ru\r\npda.orel.dev.kp.ru\r\npda.orel.kp.ru\r\npda.orenburg.kp.ru\r\npda.passport.yandex.ru\r\npda.penza.dev.kp.ru\r\npda.penza.kp.ru\r\npda.perm.dev.kp.ru\r\npda.perm.kp.ru\r\npda.popov.dev.kp.ru\r\npda.probki.yandex.ru\r\npda.pskov.dev.kp.ru\r\npda.pskov.kp.ru\r\npda.rostov.dev.kp.ru\r\npda.rostov.kp.ru\r\npda.ryazan.dev.kp.ru\r\npda.ryazan.kp.ru\r\npda.sakhalin.kp.ru\r\npda.samara.dev.kp.ru\r\npda.samara.kp.ru\r\npda.saratov.dev.kp.ru\r\npda.saratov.kp.ru\r\npda.sauth.yandex.ru\r\npda.service.kp.ru\r\npda.sevastopol.kp.ru\r\npda.smol.dev.kp.ru\r\npda.smol.kp.ru\r\npda.sp-money.yandex.ru\r\npda.spb.dev.kp.ru\r\npda.spb.kp.ru\r\npda.sports.ru\r\npda.stav.dev.kp.ru\r\npda.stav.kp.ru\r\npda.tambov.dev.kp.ru\r\npda.tambov.kp.ru\r\npda.tomsk.dev.kp.ru\r\npda.tomsk.kp.ru\r\npda.traffic.yandex.ru\r\npda.transcript.duma.gov.ru\r\npda.tula.dev.kp.ru\r\npda.tula.kp.ru\r\npda.tumen.dev.kp.ru\r\npda.tumen.kp.ru\r\npda.tv.yandex.ru\r\npda.tver.dev.kp.ru\r\npda.tver.kp.ru\r\npda.ufa.dev.kp.ru\r\npda.ufa.kp.ru\r\npda.ugra.dev.kp.ru\r\npda.ugra.kp.ru\r\npda.ul.dev.kp.ru\r\npda.ul.kp.ru\r\npda.ulan.kp.ru\r\npda.unicreditbank.ru\r\npda.ural.dev.kp.ru\r\npda.ural.kp.ru\r\npda.vladimir.dev.kp.ru\r\npda.vladimir.kp.ru\r\npda.vnov.dev.kp.ru\r\npda.vnov.kp.ru\r\npda.volgograd.dev.kp.ru\r\npda.volgograd.kp.ru\r\npda.vologda.dev.kp.ru\r\npda.vologda.kp.ru\r\npda.vrn.dev.kp.ru\r\npda.vrn.kp.ru\r\npda.weather.yandex.ru\r\npda.webcal.yandex.ru\r\npda.yaca.yandex.ru\r\npda.yakutia.dev.kp.ru\r\npda.yakutia.kp.ru\r\npda.yamal.dev.kp.ru\r\npda.yamal.kp.ru\r\npda.yandex.ru\r\npda.yar.dev.kp.ru\r\npda.yar.kp.ru\r\npda.zap.kp.ru\r\npdaall.litres.ru\r\npdabeelinerusall.litres.ru\r\npdabeelineruslisten.litres.ru\r\npdabeelineruspremium.litres.ru\r\npdabeelinerusread.litres.ru\r\npdabeltelecomall.litres.ru\r\npdadomruall.litres.ru\r\npdamegafon.litres.ru\r\npdapremium.litres.ru\r\npdaread.litres.ru\r\npdatele2rusread.litres.ru\r\npdb.avito.ru\r\npdb.yandex.ru\r\npdb2.avito.ru\r\npdc.avito.ru\r\npdd.yandex.ru\r\npddimp.yandex.ru\r\npdf-download-rewrite.staging.meduza.io\r\npdf-download.production.meduza.io\r\npdf-download.staging.meduza.io\r\npdf.avito.ru\r\npdf.kino-teatr.ru\r\npdfs.avito.ru\r\npdi.avito.ru\r\npdm.avito.ru\r\npdns.avito.ru\r\npdp.beeline.ru\r\npdp.demo.megafon.ru\r\npdpdatamart.demo.megafon.ru\r\npds.avito.ru\r\npds.rosatom.ru\r\npdu.worldbank.org\r\npdu1.avito.ru\r\npdu2.avito.ru\r\npe.avito.ru\r\npeace.avito.ru\r\npeach.avito.ru\r\npeacock.vedomosti.ru\r\npeanuts.avito.ru\r\npear.avito.ru\r\npearl.avito.ru\r\npearson.avito.ru\r\npebbles.avito.ru\r\npec.avito.ru\r\npec.kino-teatr.ru\r\npechatniki.mos.ru\r\npedro.avito.ru\r\npeek.avito.ru\r\npeertube-ext.sovcombank.ru\r\npegas.avito.ru\r\npegasma.worldbank.org\r\npegasmadev.worldbank.org\r\npegasmaqa.worldbank.org\r\npegasmastg.worldbank.org\r\npegasmatest.worldbank.org\r\npegasmatre.worldbank.org\r\npegasmatrn.worldbank.org\r\npegasmatst.worldbank.org\r\npegasus.avito.ru\r\npeggy.avito.ru\r\npele.avito.ru\r\npeledui.sakha.gov.ru\r\npelican.avito.ru\r\npenapi.kino-teatr.ru\r\npenarth.cit.avito.ru\r\npenelope.avito.ru\r\npenguin.avito.ru\r\npenny.avito.ru\r\npension.avito.ru\r\npension.worldbank.org\r\npentest.megafon.ru\r\npenwith.kino-teatr.ru\r\npenza.aif.ru\r\npenza.avito.ru\r\npenza.beeline.ru\r\npenza.dev.home.megafon.ru\r\npenza.dev.kp.ru\r\npenza.dns-shop.ru\r\npenza.drom.ru\r\npenza.hh.ru\r\npenza.kp.ru\r\npenza.lemanapro.ru\r\npenza.mts.ru\r\npenza.openbank.ru\r\npenza.shop.megafon.ru\r\npenza.tele2.ru\r\npenza.views.t2.ru\r\npeople-api.avito.ru\r\npeople.avito.ru\r\npeople.culture.ru\r\npeople.open.ru\r\npeople.sber.ru\r\npeople.sovcombank.ru\r\npeople.yandex.ru\r\npeoplelrs.open.ru\r\npeoplesafety.mchs.ru\r\npeoplesearch.yandex.ru\r\npeoplesoft.worldbank.org\r\npeoplesoft8.worldbank.org\r\npeoplesoft92.worldbank.org\r\npeoplesoft92dev.worldbank.org\r\npeoplesoft92qa.worldbank.org\r\npeoplesoft92stg.worldbank.org\r\npeoplesoft92tst.worldbank.org\r\npeoplesoftdev.worldbank.org\r\npeoplesoftqa.worldbank.org\r\npeoplesoftstg.worldbank.org\r\npepe.avito.ru\r\npepelac1ft.yandex.ru\r\npepelac2ft.yandex.ru\r\npepito.avito.ru\r\npepper.avito.ru\r\npeppermint.avito.ru\r\npepsi.avito.ru\r\nper.avito.ru\r\nper.euronews.com\r\npera.avito.ru\r\nperek.x5.ru\r\nperekrestok.happy.x5.ru\r\nperemena.open.ru\r\nperemena.openbank.ru\r\nperenos.beeline.ru\r\npereplavka.tele2.ru\r\nperepoloh.afisha.ru\r\nperevod.beeline.ru\r\nperevod.mts.ru\r\nperevod.tele2.ru\r\nperevod.yandex.ru\r\nperevodworld.vtb.ru\r\nperezimui.1tv.ru\r\nperfect.avito.ru\r\nperfil.avito.ru\r\nperformance.avito.ru\r\nperfume.avito.ru\r\npergamum.avito.ru\r\nperidot.avito.ru\r\nperiodismo.avito.ru\r\nperl.avito.ru\r\nperm.aif.ru\r\nperm.avito.ru\r\nperm.babyblog.ru\r\nperm.beeline.ru\r\nperm.dev.home.megafon.ru\r\nperm.dev.kp.ru\r\nperm.dns-shop.ru\r\nperm.fas.gov.ru\r\nperm.hh.ru\r\nperm.kommersant.ru\r\nperm.kp.ru\r\nperm.lemanapro.ru\r\nperm.mk.ru\r\nperm.mts.ru\r\nperm.shop.megafon.ru\r\nperm.tele2.ru\r\npermits.avito.ru\r\npernatsk.mail.ru\r\nperovo.mos.ru\r\nperpustakaan.avito.ru\r\npersephone.avito.ru\r\nperseus.avito.ru\r\npersia.avito.ru\r\npersian.euronews.com\r\nperso.avito.ru\r\nperson.avito.ru\r\npersona.avito.ru\r\npersona20.vedomosti.ru\r\npersona2017.vedomosti.ru\r\npersona2018.vedomosti.ru\r\npersonal.avito.ru\r\npersonals.avito.ru\r\npersonel.avito.ru\r\npersonnelportal.unicreditbank.ru\r\npersontest.sber.ru\r\nperu.avito.ru\r\npervbank.credit-registry.nalog.ru\r\npervomaika.social.tomsk.gov.ru\r\npervomayskoe-barnaul.drom.ru\r\npervouralsk.dns-shop.ru\r\npesnipobedy.tass.ru\r\npeso.avito.ru\r\npesquisa.avito.ru\r\npet-project.habr.com\r\npet.avito.ru\r\npetbot.m24.ru\r\npete.avito.ru\r\npeter.avito.ru\r\npeterburg.alfabank.ru\r\npetra.avito.ru\r\npetropavlovsk-kamchatskiy.drom.ru\r\npetropavlovsk-kamchatskiy.lemanapro.ru\r\npetrovax.spec.tass.ru\r\npetrovskaya.9111.ru\r\npetrozavodsk.avito.ru\r\npetrozavodsk.dns-shop.ru\r\npetrozavodsk.drom.ru\r\npetrozavodsk.lemanapro.ru\r\npetruha.kp.ru\r\npets.avito.ru\r\npets.gazeta.ru\r\npets.mail.ru\r\npetyr.meduza.io\r\npeugeot.drom.ru\r\npexip-teamsconn-eu.teams.magnit.ru\r\npf-infra.lb.tinkoff.ru\r\npf.avito.ru\r\npf1.avito.ru\r\npf1.mail.ru\r\npf10.i.mail.ru\r\npf10.mail.ru\r\npf11.mail.ru\r\npf12.mail.ru\r\npf13.mail.ru\r\npf14.mail.ru\r\npf15.mail.ru\r\npf16.mail.ru\r\npf17.mail.ru\r\npf18.mail.ru\r\npf19.mail.ru\r\npf2.mail.ru\r\npf20.i.mail.ru\r\npf20.mail.ru\r\npf23.i.mail.ru\r\npf23.mail.ru\r\npf24.mail.ru\r\npf26.mail.ru\r\npf27.mail.ru\r\npf28.mail.ru\r\npf29.mail.ru\r\npf3.i.mail.ru\r\npf3.mail.ru\r\npf30.i.mail.ru\r\npf30.mail.ru\r\npf31.i.mail.ru\r\npf31.mail.ru\r\npf33.i.mail.ru\r\npf33.mail.ru\r\npf34.i.mail.ru\r\npf34.mail.ru\r\npf35.i.mail.ru\r\npf35.mail.ru\r\npf36.mail.ru\r\npf37.mail.ru\r\npf38.mail.ru\r\npf39.mail.ru\r\npf4.i.mail.ru\r\npf4.mail.ru\r\npf40.i.mail.ru\r\npf40.mail.ru\r\npf41.i.mail.ru\r\npf41.mail.ru\r\npf42.i.mail.ru\r\npf42.mail.ru\r\npf43.i.mail.ru\r\npf43.mail.ru\r\npf44.i.mail.ru\r\npf44.mail.ru\r\npf45.i.mail.ru\r\npf45.mail.ru\r\npf46.mail.ru\r\npf47.mail.ru\r\npf48.mail.ru\r\npf49.mail.ru\r\npf5.mail.ru\r\npf50.i.mail.ru\r\npf50.mail.ru\r\npf51.i.mail.ru\r\npf51.mail.ru\r\npf52.i.mail.ru\r\npf52.mail.ru\r\npf53.i.mail.ru\r\npf53.mail.ru\r\npf54.i.mail.ru\r\npf54.mail.ru\r\npf55.i.mail.ru\r\npf55.mail.ru\r\npf56.mail.ru\r\npf6.mail.ru\r\npf7.mail.ru\r\npf8.mail.ru\r\npf9.mail.ru\r\npfhd.minzdrav.gov.ru\r\npfm-stat.online.sberbank.ru\r\npfm.greenfield1.online.sberbank.ru\r\npfm.node0.online.sberbank.ru\r\npfm.node1.online.sberbank.ru\r\npfm.node2.online.sberbank.ru\r\npfm.node3.online.sberbank.ru\r\npfm.stat.online.sberbank.ru\r\npfm.vtb.ru\r\npg.avito.ru\r\npg.cgu.mchs.ru\r\npg.dc.cloud.mts.ru\r\npg.gazeta.ru\r\npg.net.ixbt.com\r\npg.tomsk.gov.ru\r\npga.task.ixbt.com\r\npgadmin-990d8818.xaas.kz.cloud.vk.com\r\npgadmin-acc9b76b.xaas.kz.cloud.vk.com\r\npgadmin.avito.ru\r\npgadmin.svc.paas.cloud.mts.ru\r\npgames.avito.ru\r\npgapi.mir.afisha.ru\r\npgb01.db.rbc.ru\r\npgb04.db.rbc.ru\r\npgb06.db.rbc.ru\r\npgc.rambler.ru\r\npgp.avito.ru\r\npgs.tomsk.gov.ru\r\npgsql.avito.ru\r\npgsql1.avito.ru\r\npgsql2.avito.ru\r\npgsql3.avito.ru\r\npgss3.gosuslugi.ru\r\npgu-devsf.test.gosuslugi.ru\r\npgu-fdemo.gosuslugi.ru\r\npgu-uat-fed.test.gosuslugi.ru\r\npgu.kamchatka.gov.ru\r\npgu.mos.ru\r\npgu2-dev.test.gosuslugi.ru\r\npgu2-pub.test.gosuslugi.ru\r\npgu2-test.test.gosuslugi.ru\r\npgu41.gov.ru\r\nph-wb-prod.beeline.ru\r\nph.avito.ru\r\nph.tass.ru\r\nphaim22.avito.ru\r\nphakt.k.avito.ru\r\nphantom.avito.ru\r\npharm.avito.ru\r\npharma.avito.ru\r\npharmacy.avito.ru\r\npharmapi.apteka.ru\r\npharos.avito.ru\r\nphd.avito.ru\r\nphenix.avito.ru\r\nphi.avito.ru\r\nphil.avito.ru\r\nphiladelphia.avito.ru\r\nphilip.avito.ru\r\nphilippe.avito.ru\r\nphilippines.avito.ru\r\nphilips.avito.ru\r\nphilips.lenta.ru\r\nphilips9000.hitech.mail.ru\r\nphillip.avito.ru\r\nphilosophy.avito.ru\r\nphim.avito.ru\r\nphish.http.yandex.ru\r\nphish01e.cs-minitools01e.yandex.ru\r\nphish01f.cs-minitools01f.yandex.ru\r\nphish01h.cs-minitools01h.yandex.ru\r\nphish01ht.cs-minitools01ht.yandex.ru\r\nphlebodia.lady.mail.ru\r\nphobos.avito.ru\r\nphoebe.avito.ru\r\nphoenix.avito.ru\r\nphone-passport-test.yandex.ru\r\nphone-passport.yandex.ru\r\nphone-protect.t2.ru\r\nphone.avito.ru\r\nphone.money.yandex.ru\r\nphonebook.avito.ru\r\nphones.avito.ru\r\nphonesetup.beeline.ru\r\nphoto-russia.tass.ru\r\nphoto.avito.ru\r\nphoto.championat.com\r\nphoto.kommersant.ru\r\nphoto.rg.ru\r\nphoto.upload.maps.yandex.ru\r\nphoto.yandex.ru\r\nphoto1.avito.ru\r\nphoto1.mail.ru\r\nphoto10.mail.ru\r\nphoto100.mail.ru\r\nphoto101.mail.ru\r\nphoto102.mail.ru\r\nphoto105.mail.ru\r\nphoto106.mail.ru\r\nphoto107.mail.ru\r\nphoto108.mail.ru\r\nphoto109.mail.ru\r\nphoto11.mail.ru\r\nphoto110.mail.ru\r\nphoto111.mail.ru\r\nphoto112.mail.ru\r\nphoto113.mail.ru\r\nphoto114.mail.ru\r\nphoto115.mail.ru\r\nphoto116.mail.ru\r\nphoto126.mail.ru\r\nphoto127.mail.ru\r\nphoto128.mail.ru\r\nphoto129.mail.ru\r\nphoto13.mail.ru\r\nphoto130.mail.ru\r\nphoto131.mail.ru\r\nphoto132.mail.ru\r\nphoto133.mail.ru\r\nphoto134.mail.ru\r\nphoto135.mail.ru\r\nphoto136.mail.ru\r\nphoto137.mail.ru\r\nphoto138.mail.ru\r\nphoto139.mail.ru\r\nphoto14.mail.ru\r\nphoto140.mail.ru\r\nphoto141.mail.ru\r\nphoto142.mail.ru\r\nphoto143.mail.ru\r\nphoto144.mail.ru\r\nphoto145.mail.ru\r\nphoto15.mail.ru\r\nphoto2.avito.ru\r\nphoto23.mail.ru\r\nphoto232.mail.ru\r\nphoto26.mail.ru\r\nphoto32.mail.ru\r\nphoto34.mail.ru\r\nphoto35.mail.ru\r\nphoto36.mail.ru\r\nphoto37.mail.ru\r\nphoto38.mail.ru\r\nphoto39.mail.ru\r\nphoto4.mail.ru\r\nphoto40.mail.ru\r\nphoto41.mail.ru\r\nphoto42.mail.ru\r\nphoto43.mail.ru\r\nphoto44.mail.ru\r\nphoto45.mail.ru\r\nphoto46.mail.ru\r\nphoto47.mail.ru\r\nphoto48.mail.ru\r\nphoto49.mail.ru\r\nphoto5.mail.ru\r\nphoto50.mail.ru\r\nphoto51.mail.ru\r\nphoto52.mail.ru\r\nphoto53.mail.ru\r\nphoto54.mail.ru\r\nphoto55.mail.ru\r\nphoto56.mail.ru\r\nphoto57.mail.ru\r\nphoto59.mail.ru\r\nphoto6.mail.ru\r\nphoto60.mail.ru\r\nphoto61.mail.ru\r\nphoto63.mail.ru\r\nphoto64.mail.ru\r\nphoto7.mail.ru\r\nphoto70.mail.ru\r\nphoto71.mail.ru\r\nphoto79.mail.ru\r\nphoto8.mail.ru\r\nphoto80.mail.ru\r\nphoto81.mail.ru\r\nphoto82.mail.ru\r\nphoto83.mail.ru\r\nphoto84.mail.ru\r\nphoto86.mail.ru\r\nphoto87.mail.ru\r\nphoto88.mail.ru\r\nphoto89.mail.ru\r\nphoto9.mail.ru\r\nphoto90.mail.ru\r\nphoto93.mail.ru\r\nphoto94.mail.ru\r\nphoto95.mail.ru\r\nphoto96.mail.ru\r\nphoto97.mail.ru\r\nphoto98.mail.ru\r\nphoto99.mail.ru\r\nphotoarchive.mk.ru\r\nphotobal1.mail.ru\r\nphotobal2.mail.ru\r\nphotobank.iz.ru\r\nphotobin1.mail.ru\r\nphotobin2.mail.ru\r\nphotobin3.mail.ru\r\nphotobook.avito.ru\r\nphotogallery.avito.ru\r\nphotography.avito.ru\r\nphoton.avito.ru\r\nphotos.afro.who.int\r\nphotos.avito.ru\r\nphotos.emro.who.int\r\nphotos.euro.who.int\r\nphotos.hq.who.int\r\nphotos2016-1.tass.ru\r\nphotos2016-2.tass.ru\r\nphotos2016-3.tass.ru\r\nphotos2016-4.tass.ru\r\nphotos2018.tass.ru\r\nphotoshop.avito.ru\r\nphp.avito.ru\r\nphp5.avito.ru\r\nphp54.avito.ru\r\nphpadmin.avito.ru\r\nphpbb.avito.ru\r\nphplist.avito.ru\r\nphpmyadmin.aif-city.spb.aif.ru\r\nphpmyadmin.avito.ru\r\nphpmyadmin.busines-lady-spb.aif.ru\r\nphpmyadmin.gkh.hab.aif.ru\r\nphpmyadmin2.avito.ru\r\nphptest.avito.ru\r\nphs.avito.ru\r\nphy.avito.ru\r\nphys.avito.ru\r\nphysics.avito.ru\r\npi-aas.mvideo.ru\r\npi-qas.mvideo.ru\r\npi-stash.yandex.ru\r\npi-xas.mvideo.ru\r\npi.avito.ru\r\npi.mvideo.ru\r\npia.avito.ru\r\npiano.avito.ru\r\npic.avito.ru\r\npic.rutube.ru\r\npic1.avito.ru\r\npic2.avito.ru\r\npic3.avito.ru\r\npicard.avito.ru\r\npicasso.avito.ru\r\npicasso.iarc.who.int\r\npick-point.cs-order-execution.yc.mvideo.ru\r\npicker1.i.mail.ru\r\npicker2.i.mail.ru\r\npicker3.i.mail.ru\r\npicker4.i.mail.ru\r\npickremit.worldbank.org\r\npickup-service.mvideo.ru\r\npicnic.afisha.ru\r\npicnic.avito.ru\r\npicnic2012.afisha.ru\r\npicnic2013.afisha.ru\r\npico.avito.ru\r\npics-mrr01.common.rbc.ru\r\npics-mrr02.common.rbc.ru\r\npics-mrr03.common.rbc.ru\r\npics-mrr04.common.rbc.ru\r\npics-mrr06.common.rbc.ru\r\npics-mrr07.common.rbc.ru\r\npics-mrr09.common.rbc.ru\r\npics-mrr10.common.rbc.ru\r\npics-mrr11.common.rbc.ru\r\npics-mrr12.common.rbc.ru\r\npics-mrr13.common.rbc.ru\r\npics-mrr14.common.rbc.ru\r\npics-mrr15.common.rbc.ru\r\npics-mrr18.common.rbc.ru\r\npics-mrr19.common.rbc.ru\r\npics-mrr20.common.rbc.ru\r\npics-mrr21.common.rbc.ru\r\npics-mrr25.common.rbc.ru\r\npics-mrr26.common.rbc.ru\r\npics-mrr27.common.rbc.ru\r\npics-mrr28.common.rbc.ru\r\npics-mrr29.common.rbc.ru\r\npics-mrr30.common.rbc.ru\r\npics-mrr31.common.rbc.ru\r\npics-mrr32.common.rbc.ru\r\npics-mrr34.common.rbc.ru\r\npics-mrr35.common.rbc.ru\r\npics-mrr36.common.rbc.ru\r\npics-mrr37.common.rbc.ru\r\npics-mrr38.common.rbc.ru\r\npics.avito.ru\r\npics.emitbase.rbc.ru\r\npics.livejournal.com\r\npics.market.yandex.ru\r\npicture.avito.ru\r\npictureinequality.worldbank.org\r\npictures.avito.ru\r\npictures.cyber.sports.ru\r\npidlabelling.users.avito.ru\r\npie.avito.ru\r\npier14.kino-teatr.ru\r\npierre.avito.ru\r\npif.avito.ru\r\npifagent.updates.rosbank.ru\r\npig.avito.ru\r\npigeon.avito.ru\r\npiggybank.yandex.ru\r\npiglet.avito.ru\r\npikachu.avito.ru\r\npil.avito.ru\r\npilot-drona-yuliana.liza-alert.tass.ru\r\npilot.avito.ru\r\npilot.tinkoff.ru\r\npilots.alfabank.ru\r\npilottaxmon.psbank.ru\r\npilsnet.avito.ru\r\npim.avito.ru\r\npimp.avito.ru\r\npin.avito.ru\r\npine.avito.ru\r\npineapple.avito.ru\r\npinetree.avito.ru\r\nping.avito.ru\r\nping.blogs.yandex.ru\r\npinger.avito.ru\r\npingpong.avito.ru\r\npingu.avito.ru\r\npink.avito.ru\r\npinky.avito.ru\r\npinnacle.avito.ru\r\npio.tender.mos.ru\r\npioneer.avito.ru\r\npiotosm.megafon.ru\r\npip.avito.ru\r\npipe.avito.ru\r\npipeline.avito.ru\r\npipeline.worldbank.org\r\npipelinedev.worldbank.org\r\npipelinedevapp.worldbank.org\r\npir.innovation.gov.ru\r\npiranha.avito.ru\r\npirate.avito.ru\r\npirates.avito.ru\r\npirates.film.ru\r\npirates.mail.ru\r\npisces.avito.ru\r\npisma.council.gov.ru\r\npismo-dedu-morozu-2024.iz.ru\r\npitbull.avito.ru\r\npitch-kids.ivi.ru\r\npitch.habr.com\r\npitch.ivi.ru\r\npiter.avito.ru\r\npiter.babyblog.ru\r\npittsburgh.avito.ru\r\npivot.avito.ru\r\npiwik-gosbar.gosuslugi.ru\r\npiwik.avito.ru\r\npiwik.vtb.ru\r\npix.avito.ru\r\npixel.avito.ru\r\npixel.gslb.gosuslugi.ru\r\npixel.id.x5.ru\r\npixels.avito.ru\r\npixie.avito.ru\r\npixso.beeline.ru\r\npizhma.drom.ru\r\npizza.avito.ru\r\npizzahut.avito.ru\r\npj.avito.ru\r\npje.avito.ru\r\npk.avito.ru\r\npkd.avito.ru\r\npkg.avito.ru\r\npkg.dl.mail.ru\r\npki.avito.ru\r\npki.mkb.ru\r\npki.mts.ru\r\npki.sberbank.ru\r\npkica.beeline.ru\r\npking.sberbank.ru\r\npkm.avito.ru\r\npkms7.62-tyagach.yandex.ru\r\npl-res.online.sberbank.ru\r\npl-si-res.online.sberbank.ru\r\npl.avito.ru\r\npl.ets01.rosatom.ru\r\npl.euronews.com\r\npl.tets01.rosatom.ru\r\npla.avito.ru\r\nplace.avito.ru\r\nplaceholder.avito.ru\r\nplacement.avito.ru\r\nplan.avito.ru\r\nplan.fas.gov.ru\r\nplan.genproc.gov.ru\r\nplan.minfin.rk.gov.ru\r\nplanb.avito.ru\r\nplanb.rbc.ru\r\nplanck.avito.ru\r\nplaner.megafon.ru\r\nplanet.avito.ru\r\nplaneta.2gis.ru\r\nplaneta.avito.ru\r\nplanetarium.avito.ru\r\nplanner.avito.ru\r\nplanning.avito.ru\r\nplant.avito.ru\r\nplasma.avito.ru\r\nplastics.avito.ru\r\nplatform.2gis.ru\r\nplatform.avito.ru\r\nplatform.dev.cloud.mts.ru\r\nplatform.tutu.ru\r\nplatform.who.int\r\nplatforma-api.psbank.ru\r\nplatforma.psbank.ru\r\nplatformcontentstagingproxy.who.int\r\nplatformproductionproxy.who.int\r\nplatformstagingproxy.who.int\r\nplatformv.sber.ru\r\nplatinum.avito.ru\r\nplatinum.tinkoff.ru\r\nplato-gitlab.msk.avito.ru\r\nplato.avito.ru\r\nplaton.avito.ru\r\nplatypus.avito.ru\r\nplau.net.ixbt.com\r\nplay.avito.ru\r\nplay.fifa18.championat.com\r\nplay.max.com\r\nplay.megafon.ru\r\nplay.ok.ru\r\nplay.sports.ru\r\nplay.tele2.ru\r\nplay1.avito.ru\r\nplayboy.avito.ru\r\nplayer.1tv.ru\r\nplayer.avito.ru\r\nplayer.test.ivi.ru\r\nplayercdn.rosatom.ru\r\nplayers.avito.ru\r\nplayground.avito.ru\r\nplaza.avito.ru\r\nplazmabox.rutube.ru\r\nplc-croc.sbud.rshb.ru\r\nplc-var.sbud.rshb.ru\r\nplc.rshb.ru\r\nplc.sbud.rshb.ru\r\nplctest.rshb.ru\r\nple.beeline.ru\r\npleiades.avito.ru\r\nplejoff.chempionat.tass.ru\r\nplescrb.gosuslugi.ru\r\nplesk.avito.ru\r\nplesk1.avito.ru\r\nplesk2.avito.ru\r\nplgto.edu.avito.ru\r\nplib-bat.tomsk.gov.ru\r\npliki.avito.ru\r\npljussa.gosuslugi.ru\r\nplm.avito.ru\r\nplm.x5.ru\r\nplm5.x5.ru\r\nplone.avito.ru\r\nplotnikovo.drom.ru\r\nplp-s.minzdrav.gov.ru\r\nplp.minzdrav.gov.ru\r\nplug.avito.ru\r\nplugin.avito.ru\r\nplugin.gosuslugi.ru\r\nplugins.avito.ru\r\nplum.avito.ru\r\nplus-one.vedomosti.ru\r\nplus.avito.ru\r\nplus.kinopoisk.ru\r\nplus.rambler.ru\r\nplus.rbc.ru\r\nplus.tele2.ru\r\npluslatex.users.avito.ru\r\nplusone.avito.ru\r\npluto.avito.ru\r\npluton.avito.ru\r\npm-callback.open.ru\r\npm-callback.openbank.ru\r\npm.avito.ru\r\npm.gov.ru\r\npm.open.ru\r\npm.openbank.ru\r\npm1.avito.ru\r\npm2.ural.mts.ru\r\npma.aif-city.spb.aif.ru\r\npma.avito.ru\r\npma.dostoevskiy-spb.aif.ru\r\npma.gkh.hab.aif.ru\r\npma.webinar.2gis.ru\r\npma2.avito.ru\r\npmadm.tomsk.gov.ru\r\npmb.avito.ru\r\npmc.avito.ru\r\npmcloud.sberbank.ru\r\npmd.avito.ru\r\npmef-2024.rosbalt.ru\r\npmef-2025.rosbalt.ru\r\npmi.avito.ru\r\npmm.avito.ru\r\npmnch.who.int\r\npmnh.open.ru\r\npmnh.openbank.ru\r\npmnhds.open.ru\r\npmnhds.openbank.ru\r\npmo.avito.ru\r\npmp.avito.ru\r\npms.avito.ru\r\npmsaml.open.ru\r\npmsaml.openbank.ru\r\npmt.avito.ru\r\npmx.avito.ru\r\npmx1.rambler.ru\r\npn.avito.ru\r\npnd.avito.ru\r\npnk.demo.megafon.ru\r\npnm-test.vtb.ru\r\npnm.open.ru\r\npnm.vtb.ru\r\npnp-dev-rec01-echd.mos.ru\r\npnp-istio-new.yc.mvideo.ru\r\npnp-istio-nft.yc.mvideo.ru\r\npnp-istio-ns-nft.yc.mvideo.ru\r\npnp-istio-ns-prod.yc.mvideo.ru\r\npnp-istio-ns-stage.yc.mvideo.ru\r\npnp-istio-nsg.yc.mvideo.ru\r\npnp-istio-prod.yc.mvideo.ru\r\npnp-istio-stage.yc.mvideo.ru\r\npnp-istio-test-north-south.yc.mvideo.ru\r\npnp-istio-test.yc.mvideo.ru\r\npnp-istio.yc.mvideo.ru\r\npnp-nft.yc.mvideo.ru\r\npnp-rec02-echd.mos.ru\r\npnp-rec03-echd.mos.ru\r\npnp-rec06-echd.mos.ru\r\npnp.yc.mvideo.ru\r\npnr-stage.lemanapro.ru\r\npnr.lemanapro.ru\r\npnr.stdu.sberbank.ru\r\npns.avito.ru\r\npo.avito.ru\r\npo.psbank.ru\r\npo.zdorovie-shkolnika.spb.aif.ru\r\npo2.avito.ru\r\npobeda.avito.ru\r\npobeda.iz.ru\r\npobeda.rutube.ru\r\npobeda75.iz.ru\r\npobeda75.lenta.ru\r\npobeda80.iz.ru\r\npobraz1.mail.ru\r\npobraz10.mail.ru\r\npobraz15.mail.ru\r\npobraz16.mail.ru\r\npobraz2.mail.ru\r\npobraz3.mail.ru\r\npobraz4.mail.ru\r\npobraz5.mail.ru\r\npobraz6.mail.ru\r\npobraz7.mail.ru\r\npobraz8.mail.ru\r\npobraz9.mail.ru\r\npoc.avito.ru\r\npochta.mos.ru\r\npochta.ria.ru\r\npocket.avito.ru\r\npoczta.avito.ru\r\npod.avito.ru\r\npodarki.beeline.ru\r\npodarki.eldorado.ru\r\npodarki.life.ru\r\npodarki.magnit.ru\r\npodarki.mts.ru\r\npodarok.avito.ru\r\npodarok.beeline.ru\r\npodcast.avito.ru\r\npodcast.megafon.ru\r\npodcasts.avito.ru\r\npodcasts.euronews.com\r\npodcasts.rbc.ru\r\npodem.2015.yandex.ru\r\npodgotovka.chempionat.tass.ru\r\npodlodka-yasen.tass.ru\r\npodolsk.avito.ru\r\npodolsk.drom.ru\r\npodolsk.hh.ru\r\npodpis.sber.ru\r\npodpiska.pochta.ru\r\npodpiski.megafon.ru\r\npodstat.prod.meduza.io\r\npodvig.life.ru\r\npoekhali.m24.ru\r\npoems.avito.ru\r\npoet.yandex.ru\r\npoetry.avito.ru\r\npoezdnadezhdy.life.ru\r\npoezdpushkin.rzd.ru\r\npogashenie.vtb.ru\r\npogoda.avito.ru\r\npogoda.mail.ru\r\npogoda.rambler.ru\r\npogoda.yandex.ru\r\npogodin.01.yandex.ru\r\npoint.2gis.ru\r\npoint.avito.ru\r\npoint.worldbank.org\r\npoint1.mail.ru\r\npoint2.mail.ru\r\npoints.avito.ru\r\npoints.maps.yandex.ru\r\npoisk.avito.ru\r\npoisk.beeline.ru\r\npoisk.megafon.ru\r\npoisk.mts.ru\r\npoiskmap.beeline.ru\r\npoiskovik-margarita.liza-alert.tass.ru\r\npoka2021.life.ru\r\npokachi.home.megafon.ru\r\npokemon.avito.ru\r\npoker.avito.ru\r\npoker.mail.ru\r\npokerist.mail.ru\r\npokolenie.mts.ru\r\npokrov-streshnevo.mos.ru\r\npol.avito.ru\r\npola.avito.ru\r\npoland.avito.ru\r\npolar.avito.ru\r\npolaris.avito.ru\r\npole.magnit.ru\r\npolhn.wpro.who.int\r\npolice.avito.ru\r\npolicies.worldbank.org\r\npoliciesadmin.worldbank.org\r\npoliciesadmindev.worldbank.org\r\npoliciesadminqa.worldbank.org\r\npoliciesdev.worldbank.org\r\npoliciesentlm.worldbank.org\r\npoliciesqa.worldbank.org\r\npolicy.avito.ru\r\npolicymobile.mchs.ru\r\npoligon.avito.ru\r\npolis.mail.ru\r\npolish.avito.ru\r\npolit.avito.ru\r\npolite.yandex.ru\r\npolitics.avito.ru\r\npolitik.avito.ru\r\npolka-media-test.x5.ru\r\npolka2-media-test.x5.ru\r\npoll.avito.ru\r\npoll.mchs.ru\r\npoll.mts.ru\r\npoll.open.ru\r\npoll2.mail.ru\r\npolladmin.avito.ru\r\npolls.avito.ru\r\npolls.euronews.com\r\npolls.ida.mts.ru\r\npolls.nalog.gov.ru\r\npolls.socialidea.mts.ru\r\npolls.sps.rosatom.ru\r\npollux.avito.ru\r\npolly.avito.ru\r\npolo.avito.ru\r\npoltava.tass.ru\r\npoly.avito.ru\r\npolyana.174.yandex.ru\r\npolychrome.avito.ru\r\npolycom.avito.ru\r\npolycom1.avito.ru\r\npolyphone.yandex.ru\r\npomaho.86.yandex.ru\r\npomoc.avito.ru\r\npong.avito.ru\r\nponizovka-apart.fas.gov.ru\r\nponizovka.fas.gov.ru\r\npontus.avito.ru\r\npony.avito.ru\r\npooh.avito.ru\r\npooky.avito.ru\r\npool.avito.ru\r\npoooltestbranch.test.euronews.com\r\npop.avito.ru\r\npop.film.ru\r\npop.kino-teatr.ru\r\npop.kp.ru\r\npop.lemanapro.ru\r\npop.mirtv.ru\r\npop.rambler.ru\r\npop.tass.ru\r\npop.yandex.ru\r\npop1.avito.ru\r\npop2.avito.ru\r\npop3.atd.gov.ru\r\npop3.atr.gov.ru\r\npop3.avito.ru\r\npop3.cloudmail.mts.ru\r\npop3.exchange.rosbank.ru\r\npop3.kino-teatr.ru\r\npop3.rambler.ru\r\npop3.rosbank.ru\r\npop3.yandex.ru\r\npop3pump1.rambler.ru\r\npop3s.avito.ru\r\npopcorn.avito.ru\r\npopeye.avito.ru\r\npopgate.avito.ru\r\npopmail.avito.ru\r\npopo.avito.ru\r\npopov.dev.kp.ru\r\npoppy1.i.mail.ru\r\npoppy2.i.mail.ru\r\npoppy3.i.mail.ru\r\npopsa.lenta.ru\r\npopular.avito.ru\r\npopup.avito.ru\r\npor.avito.ru\r\npora.sber.ru\r\nporaukrashat.magnit.ru\r\nporky.avito.ru\r\nporn.avito.ru\r\nporno.avito.ru\r\npornopoly.lenta.ru\r\nporsche.avito.ru\r\nport.avito.ru\r\nport.net.ixbt.com\r\nporta.avito.ru\r\nportail.avito.ru\r\nportainer.net.ixbt.com\r\nportal-asoz.rzd.ru\r\nportal-citep.minzdrav.gov.ru\r\nportal-dev.platform.md.magnit.ru\r\nportal-vpbx.mts.ru\r\nportal.1link.mail.ru\r\nportal.2gis.ru\r\nportal.avito.ru\r\nportal.beeline.ru\r\nportal.cloud.mts.ru\r\nportal.connectra.alfabank.ru\r\nportal.connectra.ssl.rosbank.ru\r\nportal.dpo.tomsk.gov.ru\r\nportal.duma.gov.ru\r\nportal.ec.mts.ru\r\nportal.euro.who.int\r\nportal.fsin.gov.ru\r\nportal.go-croc.sbud.rshb.ru\r\nportal.go-var.sbud.rshb.ru\r\nportal.iarc.who.int\r\nportal.mail.ru\r\nportal.mdm.psbank.ru\r\nportal.mfc.smev.tambov.gov.ru\r\nportal.minzdrav.gov.ru\r\nportal.mon.gov.ru\r\nportal.ncnd.t2.ru\r\nportal.pfr.gov.ru\r\nportal.platform.md.magnit.ru\r\nportal.rosenergo.gov.ru\r\nportal.saratov.gov.ru\r\nportal.sbud.rshb.ru\r\nportal.sdo.rzd.ru\r\nportal.sppvp.genproc.gov.ru\r\nportal.test.russianpost.ru\r\nportal.who.int\r\nportal1.avito.ru\r\nportal2.avito.ru\r\nportal2.beeline.ru\r\nportal2.zdorovie-shkolnika.spb.aif.ru\r\nportal27.mail.ru\r\nportal3.avito.ru\r\nportal3.beeline.ru\r\nportal4.beeline.ru\r\nportal5.beeline.ru\r\nportal5.sbud.rshb.ru\r\nportal6.beeline.ru\r\nportalcontentstagingproxy.who.int\r\nportalcr.minzdrav.gov.ru\r\nportale.avito.ru\r\nportalpi.rzd.ru\r\nportalproductionproxy.who.int\r\nportals.avito.ru\r\nportalsd.mts.ru\r\nportalstagingproxy.who.int\r\nportaltest.avito.ru\r\nportalweb.avito.ru\r\nporter.avito.ru\r\nportfolio.avito.ru\r\nportfolio.tinkoff.ru\r\nporthos.avito.ru\r\nportland.avito.ru\r\nporto.avito.ru\r\nportugal.avito.ru\r\nporzdnevskogo-r24.gosweb.gosuslugi.ru\r\npos-dev.test.gosuslugi.ru\r\npos.avito.ru\r\npos.gosuslugi.ru\r\npos.gslb.gosuslugi.ru\r\npos.open.ru\r\npos.rshb.ru\r\npos1.open.ru\r\npos2.gosuslugi.ru\r\npos2.test.gosuslugi.ru\r\nposcommunicator.mkb.ru\r\nposeidon.avito.ru\r\nposelokoktyabrskij-r31.gosweb.gosuslugi.ru\r\nposobie16.gosuslugi.ru\r\nposobie2020.gosuslugi.ru\r\nposobie2021.gosuslugi.ru\r\npost-mx01.fsrar.gov.ru\r\npost-mx02.fsrar.gov.ru\r\npost.3sv.yandex.ru\r\npost.avito.ru\r\npost.gosuslugi.ru\r\npost.lenta.ru\r\npost.magnit.ru\r\npost.open.ru\r\npost.sberbank.ru\r\npost.vtb.ru\r\npost1.vtb.ru\r\npost2.interfax.ru\r\npost2.vtb.ru\r\npost3.vtb.ru\r\npost4.vtb.ru\r\nposta.avito.ru\r\npostal.avito.ru\r\npostal.otzovik.com\r\npostback.t2.ru\r\npostbox.avito.ru\r\npostcard.alfabank.ru\r\npostcard.mvideo.ru\r\npostf1.i.mail.ru\r\npostf2.i.mail.ru\r\npostfix-1.avm.rutube.ru\r\npostfix-1.mts.rutube.ru\r\npostfix.avito.ru\r\npostfixadmin.avito.ru\r\npostgre.avito.ru\r\npostgres02.db.rbc.ru\r\npostgres03.db.rbc.ru\r\npostgres04.db.rbc.ru\r\npostgres06.db.rbc.ru\r\npostgres07.db.rbc.ru\r\npostgres10.db.rbc.ru\r\npostgres11.db.rbc.ru\r\npostgres14.db.rbc.ru\r\npostgres15.db.rbc.ru\r\npostgres17.db.rbc.ru\r\npostgresql06.infra.rbc.ru\r\npostimg.otzovik.com\r\npostimgtemp.otzovik.com\r\nposting.mobile.mail.ru\r\npostit.avito.ru\r\npostix.otzovik.com\r\npostman.avito.ru\r\npostmaster.avito.ru\r\npostmaster.yandex.ru\r\npostoffice.avito.ru\r\npostoffice.yandex.ru\r\npostpredspb.sakha.gov.ru\r\npostpredstvo.sakha.gov.ru\r\npostroi-svoi-bam.life.ru\r\npotato.avito.ru\r\npotok.alfabank.ru\r\npotok.rambler.ru\r\npovestka.sakha.gov.ru\r\npovezet.magnit.ru\r\npow.avito.ru\r\npower.avito.ru\r\npower1.avito.ru\r\npower2.avito.ru\r\npower4.avito.ru\r\npowerday.tele2.ru\r\npowershell.exchange.rosbank.ru\r\npowershell.rosbank.ru\r\npoykovsky.home.megafon.ru\r\npoze.avito.ru\r\npozhar.yandex.ru\r\npoznan.avito.ru\r\npozycjonowanie.avito.ru\r\npp-alis.vacr.vtb.ru\r\npp-dfo.sakha.gov.ru\r\npp-eosk.rosatom.ru\r\npp-mic001.open.ru\r\npp-recog.vacr.vtb.ru\r\npp-rf.sakha.gov.ru\r\npp-synt.vacr.vtb.ru\r\npp.avito.ru\r\npp.disk.mts.ru\r\npp.sovcombank.ru\r\npp.unicreditbank.ru\r\npp.userapi.com\r\npp5d.avito.ru\r\nppa.avito.ru\r\nppc.avito.ru\r\nppcbackup03i.yandex.ru\r\nppcdata3-01i.yandex.ru\r\nppcdev02e.yandex.ru\r\nppcdev4.yandex.ru\r\nppcdev5.yandex.ru\r\nppcdev6.yandex.ru\r\nppcgraphite.yandex.ru\r\nppclogs01e.yandex.ru\r\nppcmod01e.yandex.ru\r\nppcmod01i.yandex.ru\r\nppcmod02e.yandex.ru\r\nppcmod02i.yandex.ru\r\nppcmoddev1.yandex.ru\r\nppcmoddev2.yandex.ru\r\nppcmonitor01e.yandex.ru\r\nppcmonitor01i.yandex.ru\r\nppcsandbox-mysql01e.yandex.ru\r\nppcscripts01e.yandex.ru\r\nppcscripts02e.yandex.ru\r\nppcscripts02i.yandex.ru\r\nppcsoap01e.yandex.ru\r\nppcsoap03e.yandex.ru\r\nppcsoap04e.yandex.ru\r\nppcsoap05e.yandex.ru\r\nppcsoap06e.yandex.ru\r\nppcsoap07e.yandex.ru\r\nppcstandby02e.yandex.ru\r\nppcstandby04i.yandex.ru\r\nppcstandby08i.yandex.ru\r\nppcstat01i.yandex.ru\r\nppcstat02i.yandex.ru\r\nppcstat03i.yandex.ru\r\nppctest-handles.ppc.yandex.ru\r\nppctest-load-front.ppc.yandex.ru\r\nppctest-sandbox2-front.ppc.yandex.ru\r\nppctest-ts-mysql.ppc.yandex.ru\r\nppctest-ts1-front.yandex.ru\r\nppdmtsenaza.litres.ru\r\nppgho.feedback.rosatom.ru\r\nppi.avito.ru\r\nppi.worldbank.org\r\nppk-law.garant.ru\r\nppl.rosatom.ru\r\nppm-lm.lemanapro.ru\r\nppm.avito.ru\r\nppm.lemanapro.ru\r\nppm.t2.ru\r\nppp.avito.ru\r\nppp.sakha.gov.ru\r\nppp.worldbank.org\r\npppirc.worldbank.org\r\npps.avito.ru\r\npps00.avito.ru\r\npps00.vk.com\r\nppt.avito.ru\r\npptest.userapi.com\r\npptp.avito.ru\r\npptp01.avito.ru\r\nppv.gosuslugi.ru\r\nppvftp.gosuslugi.ru\r\npr-dwh-adrive-336ec4ac.adriver-export.avito.ru\r\npr-q.lb.tinkoff.ru\r\npr.avito.ru\r\npr.lb.tinkoff.ru\r\npr.wto.economy.gov.ru\r\npr0.dev.zoon.ru\r\npr0metheus24718.mk.ru\r\npr1.avito.ru\r\npr1.dev.zoon.ru\r\npr2.avito.ru\r\npr2.dev.zoon.ru\r\npr3.dev.zoon.ru\r\npr4.dev.zoon.ru\r\npr5.dev.zoon.ru\r\npr6.dev.zoon.ru\r\npr7.dev.zoon.ru\r\npr8.dev.zoon.ru\r\npr9.dev.zoon.ru\r\npra.avito.ru\r\npra.rosbank.ru\r\npraca.avito.ru\r\npractice.avito.ru\r\nprada.avito.ru\r\npradeep.avito.ru\r\nprado.avito.ru\r\npraha.avito.ru\r\npraktika.content.tinkoff.ru\r\npraktika.tinkoff.ru\r\npraline.mail.ru\r\nprashant.avito.ru\r\nprav.sakha.gov.ru\r\npravda.m24.ru\r\npravda.mts.ru\r\npravila.m24.ru\r\npravo23.gov.ru\r\npravo25.gov.ru\r\npravo32.gov.ru\r\npravosudie-api.staging.meduza.io\r\npravosudie.staging.meduza.io\r\nprazdnik-na-vahte.life.ru\r\nprazdnik.mvideo.ru\r\nprct.esm.apteka.ru\r\nprd.api.max.com\r\nprd.avito.ru\r\nprd.ext.max.com\r\nprd.max.com\r\nprd.www.max.com\r\npre-bp.open.ru\r\npre-cb.open.ru\r\npre-opros.vtb.ru\r\npre-prod.avito.ru\r\npre-test.1tv.ru\r\npre.avito.ru\r\npre.bs.yandex.ru\r\npre.cloud.mail.ru\r\npreboard-intech.rshb.ru\r\nprecious.avito.ru\r\npred.sakha.gov.ru\r\npredator.avito.ru\r\npredictor.sports.ru\r\npredictor.yandex.ru\r\npredoplata-absolyutmed.zoon.ru\r\npredoplata-burokrasoty.zoon.ru\r\npredpr-nat.tomsk.gov.ru\r\npredprod.pay-click.ssl.mts.ru\r\npredprod.smssubscriptions.ssl.mts.ru\r\npredstav.sakha.gov.ru\r\nprefetch-maps.yandex.ru\r\nprefs.vip.avito.ru\r\nprelive.alfabank.ru\r\nprelive.avito.ru\r\nprelive.trade.alfabank.ru\r\npremier.avito.ru\r\npremiera.tele2.ru\r\npremium.avito.ru\r\npremium.litres.ru\r\npremium.magnit.ru\r\npremium.mts.ru\r\npremiumoffer.mts.ru\r\nprensa.avito.ru\r\npreobrazhenie.hh.ru\r\nprep.avito.ru\r\nprep.profi.ru\r\nprepaid.avito.ru\r\npreprod-admin.open.ru\r\npreprod-estate.x5.ru\r\npreprod-front.open.ru\r\npreprod-ios.vacr.vtb.ru\r\npreprod-khmb.open.ru\r\npreprod-peremena.open.ru\r\npreprod.admin.class.rambler.ru\r\npreprod.avito.ru\r\npreprod.class.rambler.ru\r\npreprod.klass.rambler.ru\r\npreprod.openbank.ru\r\npreprod.priemnaya.parliament.gov.ru\r\npreprodrusnano2023.tass.ru\r\npreproduccion.avito.ru\r\npres.avito.ru\r\nprescript.kommersant.ru\r\nprescript03.kommersant.ru\r\nprescript03vr.kommersant.ru\r\npresctipt2.kommersant.ru\r\npresence.avito.ru\r\npresent.avito.ru\r\npresentation.avito.ru\r\npresentation.open.ru\r\npresentation.rbc.ru\r\npresentation.vtb.ru\r\npresident.avito.ru\r\npresident.kremlin.ru\r\npresident.life.ru\r\npresident.yandex.ru\r\npresnya.mos.ru\r\npress.avito.ru\r\npress.magnit.ru\r\npress.rzd.ru\r\npress.sber.ru\r\npressa.megafon.ru\r\npressa.mts.ru\r\npresscentr.rbc.ru\r\npresse.avito.ru\r\npressevent.afisha.yandex.ru\r\npressroom.avito.ru\r\npresta.avito.ru\r\nprestable-m.afisha.yandex.ru\r\nprestable-pogoda.yandex.ru\r\nprestable-weekend.afisha.yandex.ru\r\nprestable-widget.books.yandex.ru\r\nprestable.kinopoisk.ru\r\nprestable.payment-widget-smarttv.kinopoisk.ru\r\nprestable.payment-widget.kinopoisk.ru\r\nprestable01g-widget.tickets.yandex.ru\r\nprestable01g.api.tickets.yandex.ru\r\nprestashop.avito.ru\r\nprestdcsradioble.kinopoisk.ru\r\nprestige.avito.ru\r\npresto.avito.ru\r\npreston.avito.ru\r\npretty.avito.ru\r\npretty.yandex.ru\r\npreview.avito.ru\r\npreview.kino-teatr.ru\r\npreview.meduza.io\r\npreview.rutube.ru\r\npreview1.avito.ru\r\npreview2.avito.ru\r\nprezenty.avito.ru\r\nprezident.garant.ru\r\nprg.stihi.ru\r\npri.avito.ru\r\npri.datacollect.iarc.who.int\r\nprice.avito.ru\r\npricelabs.yandex.ru\r\nprices.2gis.ru\r\npricing-engine-dev.pnp.cs-aws.mvideo.ru\r\npricing-engine-dev.test.cs-aws.mvideo.ru\r\npricing-engine-prod.pnp.cs-aws.mvideo.ru\r\npride.avito.ru\r\npriem.avito.ru\r\npriemnaya.duma.gov.ru\r\nprim.home.megafon.ru\r\nprim.kommersant.ru\r\nprim.shop.megafon.ru\r\nprima.avito.ru\r\nprimadm29.gosuslugi.ru\r\nprimary.answer.is.42.yandex.ru\r\nprimary.avito.ru\r\nprimavera.avito.ru\r\nprime.avito.ru\r\nprime.open.ru\r\nprimer.avito.ru\r\nprimeworld.mail.ru\r\nprimore.drom.ru\r\nprimorie.fas.gov.ru\r\nprimorskiy-kr.beeline.ru\r\nprimorye.mts.ru\r\nprimrose.avito.ru\r\nprimula.avito.ru\r\nprimus.avito.ru\r\nprince.avito.ru\r\nprincess.avito.ru\r\npring.kino-teatr.ru\r\npringboot.kino-teatr.ru\r\nprint-server.office.tutu.ru\r\nprint.662015.yandex.ru\r\nprint.avito.ru\r\nprinted.film.ru\r\nprinter.avito.ru\r\nprinter2.avito.ru\r\nprinting.avito.ru\r\nprintserver.avito.ru\r\nprism-central.open.ru\r\nprism.avito.ru\r\nprisma.avito.ru\r\npriv.avito.ru\r\npriv.mts.ru\r\nprivacy.avito.ru\r\nprivat.avito.ru\r\nprivate-banking.rshb.ru\r\nprivate-vpce.euc1.prd.api.max.com\r\nprivate-vpce.euc1.stg.api.max.com\r\nprivate-vpce.eun1.prd.api.max.com\r\nprivate-vpce.euw1.prd.api.max.com\r\nprivate-vpce.euw1.stg.api.max.com\r\nprivate-vpce.use1.dev.api.max.com\r\nprivate-vpce.use1.int.api.max.com\r\nprivate-vpce.use1.prd.api.max.com\r\nprivate-vpce.use1.stg.api.max.com\r\nprivate-vpce.use2.prd.api.max.com\r\nprivate-vpce.use2.stg.api.max.com\r\nprivate-vpce.usw2.int.api.max.com\r\nprivate-vpce.usw2.prd.api.max.com\r\nprivate-vpce.usw2.stg.api.max.com\r\nprivate.auth.alfabank.ru\r\nprivate.auth.alphabank.ru\r\nprivate.avito.ru\r\nprivate.eu.dev.api.max.com\r\nprivate.eu.int.api.max.com\r\nprivate.eu.prd.api.max.com\r\nprivate.eu.stg.api.max.com\r\nprivate.euc1.prd.api.max.com\r\nprivate.euc1.stg.api.max.com\r\nprivate.eun1.prd.api.max.com\r\nprivate.euw1.prd.api.max.com\r\nprivate.euw1.stg.api.max.com\r\nprivate.mkb.ru\r\nprivate.open.ru\r\nprivate.proverki.gov.ru\r\nprivate.us.dev.api.max.com\r\nprivate.us.int.api.max.com\r\nprivate.us.prd.api.max.com\r\nprivate.us.stg.api.max.com\r\nprivate.use1.dev.api.max.com\r\nprivate.use1.int.api.max.com\r\nprivate.use1.prd.api.max.com\r\nprivate.use1.stg.api.max.com\r\nprivate.use2.prd.api.max.com\r\nprivate.use2.stg.api.max.com\r\nprivate.usw2.int.api.max.com\r\nprivate.usw2.prd.api.max.com\r\nprivate.usw2.stg.api.max.com\r\nprivate.vtb.ru\r\nprivet-dev.sber.ru\r\nprivet-dev.sberbank.ru\r\nprivet-draft.sber.ru\r\nprivet-draft.sberbank.ru\r\nprivet-ift.sber.ru\r\nprivet-ift.sberbank.ru\r\nprivet-qa.sber.ru\r\nprivet-qa.sberbank.ru\r\nprivet-uat.sber.ru\r\nprivet-uat.sberbank.ru\r\nprivet.beeline.ru\r\nprivet.sber.ru\r\nprivet.sberbank.ru\r\nprivet.youdo.com\r\nprivetbilet.life.ru\r\nprivilegy.garant.ru\r\nprivzd.rzd.ru\r\npriya.avito.ru\r\nprize.avito.ru\r\nprkb.ntv.ru\r\nprm-ext.lb.tinkoff.ru\r\nprm.avito.ru\r\nprm.sber.ru\r\nprmpsi.sber.ru\r\npro-api.avito.ru\r\npro-firpo.tass.ru\r\npro-ky.avito.ru\r\npro-oh.avito.ru\r\npro-stories.tass.ru\r\npro-vision.vedomosti.ru\r\npro.402.yandex.ru\r\npro.avito.ru\r\npro.beeline.ru\r\npro.culture.ru\r\npro.lenta.ru\r\npro.litres.ru\r\npro.megafon.ru\r\npro.rosbank.ru\r\npro.zoon.ru\r\npro2.avito.ru\r\nproactive.avito.ru\r\nproagent.rosbank.ru\r\nproba.avito.ru\r\nprobe.avito.ru\r\nprobe.beeline.ru\r\nprobki.pda.yandex.ru\r\nprobki.yandex.ru\r\nproblem.avito.ru\r\nproblems.mb-cert-mon.rosbank.ru\r\nproblems.mbr-mon.rosbank.ru\r\nprobpalata.gov.ru\r\nproc.avito.ru\r\nprocert.rosbank.ru\r\nprocess.avito.ru\r\nprocesses.tinkoff.ru\r\nprocessing-widgets.jump.tinkoff.ru\r\nprod-adm.k.avito.ru\r\nprod-avito----c-eu6-visual-force-com.ccg-prod.avito.ru\r\nprod-avito-my-salesforce-com.ccg-prod.avito.ru\r\nprod-avito-secure-force-com.ccg-prod.avito.ru\r\nprod-esum.x5.ru\r\nprod-eu6-salesforce-com.ccg-prod.avito.ru\r\nprod-hzeu-rnd-sentry-1.rnd.tinkoff.ru\r\nprod-login-salesforce-com.ccg-prod.avito.ru\r\nprod-sberops.tinkoff.ru\r\nprod-test.demo.megafon.ru\r\nprod.avito.ru\r\nprod.azure.magnit.ru\r\nprod.euronews.com\r\nprod.gkh.hab.aif.ru\r\nprod.pay.yandex.ru\r\nprod.platform.md.magnit.ru\r\nprod.tools.avito.ru\r\nprod.ya.magnit.ru\r\nprod.ya.mvideo.ru\r\nprod1.avito.ru\r\nprod2.avito.ru\r\nprodano.meduza.io\r\nprodesign.rbc.ru\r\nprodrapidalukoilonline.open.ru\r\nproduct.avito.ru\r\nproduction-cms.experience.who.int\r\nproduction-cms.partnership.who.int\r\nproduction-cms.platform.who.int\r\nproduction-cms.who.int\r\nproduction.avito.ru\r\nproduction.meduza.io\r\nproductionproxy.who.int\r\nproducts.avito.ru\r\nproducts.dns-shop.ru\r\nproducts.rutube.ru\r\nproducty24conf.tbank.ru\r\nprodvizhenie.rzd.ru\r\nprodvkadre.m24.ru\r\nproekta.youdo.com\r\nproestatelive.bizconf.rbc.ru\r\nproevent.rbc.ru\r\nprof.avito.ru\r\nprof.consultant.ru\r\nprof.mos.ru\r\nprof1.mail.ru\r\nprof2.mail.ru\r\nprofesionales.avito.ru\r\nprofessional.avito.ru\r\nprofi.avito.ru\r\nprofi.tass.ru\r\nprofil.avito.ru\r\nprofil.mos.ru\r\nprofile.api.2gis.ru\r\nprofile.avito.ru\r\nprofile.dns-shop.ru\r\nprofile.kino-teatr.ru\r\nprofile.megafon.ru\r\nprofile.mts.ru\r\nprofile.net.ixbt.com\r\nprofile.rtb.beeline.ru\r\nprofile.sber.ru\r\nprofile.sps.rosatom.ru\r\nprofile.ssp.rambler.ru\r\nprofiler.avito.ru\r\nprofiles.avito.ru\r\nprofiles.dmpkit.lemanapro.ru\r\nprofimonsters.youdo.com\r\nprofit.69.yandex.ru\r\nprofit.avito.ru\r\nprofit.learning.ozon.ru\r\nprofit.megafon.ru\r\nprofit.ozon.ru\r\nprofit.rbc.ru\r\nprofit.x5.ru\r\nprofnews.garant.ru\r\nprofportal.sakha.gov.ru\r\nproftest.minzdrav.gov.ru\r\nprog.avito.ru\r\nprogamers.avito.ru\r\nprognoz.tomsk.gov.ru\r\nprognozi.championat.com\r\nprogram.avito.ru\r\nprogram.m24.ru\r\nprogram.startup.mts.ru\r\nprogramas.avito.ru\r\nprogrammes.putin.kremlin.ru\r\nprogramming.avito.ru\r\nprograms.avito.ru\r\nprograms.gov.ru\r\nprogress.avito.ru\r\nprogressity.life.ru\r\nprogulkirossiya.ren.tv\r\nprohome.avito.ru\r\nproizvoditeli.life.ru\r\nproj.avito.ru\r\nproje.avito.ru\r\nproject.avito.ru\r\nproject.rosatom.ru\r\nproject.tinkoff.ru\r\nproject2.avito.ru\r\nprojectfeedback.worldbank.org\r\nprojectfeedbackdev.worldbank.org\r\nprojectfeedbackqa.worldbank.org\r\nprojects.avito.ru\r\nprojects.gov.ru\r\nprojects.life.ru\r\nprojects.rbc.ru\r\nprojects.sakha.gov.ru\r\nprojekt.avito.ru\r\nprojekty.avito.ru\r\nprojet.avito.ru\r\nprojetos.avito.ru\r\nprojets.avito.ru\r\nprojportalext.worldbank.org\r\nprom-moscow.tass.ru\r\nprom.net.ixbt.com\r\npromanagement.rbc.ru\r\npromanagement2021.rbc.ru\r\nprometheus-dev.k.avito.ru\r\nprometheus.avito.ru\r\nprometheus.city.mts.ru\r\nprometheus.k8s.rg.ru\r\nprometheus.learning.ozon.ru\r\nprometheus.lk.otello.2gis.ru\r\nprometheus.mk.ru\r\nprometheus.net.ixbt.com\r\nprometheus.paas.cloud.mts.ru\r\nprometheus.pnp.cs-aws.mvideo.ru\r\nprometheus.test.cs-aws.mvideo.ru\r\npromo-configurator-dev.pnp.cs-aws.mvideo.ru\r\npromo-configurator-dev.test.cs-aws.mvideo.ru\r\npromo-configurator-prod.pnp.cs-aws.mvideo.ru\r\npromo-dostavka.x5.ru\r\npromo.auto.yandex.ru\r\npromo.avito.ru\r\npromo.babyblog.ru\r\npromo.citilink.ru\r\npromo.cloud.mts.ru\r\npromo.dns-shop.ru\r\npromo.domclick.ru\r\npromo.gov.ru\r\npromo.habr.com\r\npromo.m24.ru\r\npromo.magnit.ru\r\npromo.market.yandex.ru\r\npromo.megafon.ru\r\npromo.openbank.ru\r\npromo.pochta.ru\r\npromo.psbank.ru\r\npromo.pulscen.ru\r\npromo.rosbank.ru\r\npromo.rshb.ru\r\npromo.sber.ru\r\npromo.tele2.ru\r\npromo.ticket.yandex.ru\r\npromo.tickets.yandex.ru\r\npromo.tutu.ru\r\npromo.vprok.ru\r\npromo.yandex.ru\r\npromo1tb.tele2.ru\r\npromo4.2gis.ru\r\npromo5.2gis.ru\r\npromo7.2gis.ru\r\npromo8.2gis.ru\r\npromo9.2gis.ru\r\npromociones.avito.ru\r\npromodv.megafon.ru\r\npromogame.t2.ru\r\npromokod.magnit.ru\r\npromokod.sports.ru\r\npromomed.tass.ru\r\npromos.avito.ru\r\npromote.avito.ru\r\npromotion.avito.ru\r\npromotion.rosbank.ru\r\npromotions-dev.pnp.cs-aws.mvideo.ru\r\npromotions-dev.test.cs-aws.mvideo.ru\r\npromotions-prod.pnp.cs-aws.mvideo.ru\r\npromotions.avito.ru\r\npromotv.mts.ru\r\npronto.avito.ru\r\npronto.yandex.ru\r\npronto1.yandex.ru\r\npronto3a.yandex.ru\r\npronto4.yandex.ru\r\npronto6.yandex.ru\r\nproof.avito.ru\r\nproperties.avito.ru\r\nproperty.avito.ru\r\nproperty.rzd.ru\r\nprophan.lab.x5.ru\r\nprophet.avito.ru\r\nproposal.avito.ru\r\npropusk.gosuslugi.ru\r\npropusk.megafon.ru\r\nprosfores.avito.ru\r\nprosound.ixbt.com\r\nprospect.avito.ru\r\nprosper.avito.ru\r\nprosto.megafon.ru\r\nprot-9524-www.k.avito.ru\r\nprotech.avito.ru\r\nprotect.avito.ru\r\nprotect.megafon.ru\r\nprotected.mts.ru\r\nprotectedcloud.mts.ru\r\nprotector.avito.ru\r\nprotest.minzdrav.gov.ru\r\nproteus.avito.ru\r\nproto.avito.ru\r\nprotocol.adm.gov.ru\r\nprotocolo.avito.ru\r\nproton.avito.ru\r\nprototype.avito.ru\r\nprov.avito.ru\r\nprov1.avito.ru\r\nprov2.avito.ru\r\nprova.avito.ru\r\nprove.avito.ru\r\nproverki.gov.ru\r\nprovision.avito.ru\r\nprovisioning.avito.ru\r\nprovod.beeline.ru\r\nproxorovka-r31.gosweb.gosuslugi.ru\r\nproxy-function.staging.meduza.io\r\nproxy-ts.open.ru\r\nproxy.avito.ru\r\nproxy.cgu.mchs.ru\r\nproxy.constructor.maps.yandex.ru\r\nproxy.csut.mchs.ru\r\nproxy.family.tomsk.gov.ru\r\nproxy.miac.tambov.gov.ru\r\nproxy.saratov.gov.ru\r\nproxy.sp.mvideo.ru\r\nproxy.tp.mvideo.ru\r\nproxy.yc.mvideo.ru\r\nproxy01.avito.ru\r\nproxy02.avito.ru\r\nproxy1.avito.ru\r\nproxy2.avito.ru\r\nproxy3.avito.ru\r\nproxy4.avito.ru\r\nproxy5.avito.ru\r\nproxyregistrar.worldbank.org\r\nproyectos.avito.ru\r\nprp-open.open.ru\r\nprs.avito.ru\r\nprsmetadata.worldbank.org\r\nprsmetadatadev.worldbank.org\r\nprsmetadataqa.worldbank.org\r\nprsmetadatauat.worldbank.org\r\nprsportal.worldbank.org\r\nprt.mail.ru\r\nprtg.avito.ru\r\nprueba.avito.ru\r\nprueba.zdorovie-shkolnika.spb.aif.ru\r\npruebas.avito.ru\r\npruner1.mail.ru\r\npruner12.i.mail.ru\r\npruner2.mail.ru\r\npruner22.i.mail.ru\r\nprx-dmz-cdn-staging01.msk.avito.ru\r\nprx-dmz-cdn-staging02.msk.avito.ru\r\nprx-dmz-cdn-staging03.msk.avito.ru\r\nprx-jitsi.msk.avito.ru\r\nps-tarb03.gosuslugi.ru\r\nps.avito.ru\r\nps.sq2.yandex.ru\r\nps.userapi.com\r\nps.zdorovie-shkolnika.spb.aif.ru\r\nps1.avito.ru\r\nps3.avito.ru\r\nps4.play-hbo.max.com\r\nps4.play.max.com\r\nps5.play-hbo.max.com\r\nps5.play.max.com\r\npsa.avito.ru\r\npsbank.credit-registry.nalog.ru\r\npsbfarm.avito.ru\r\npsbid-auth-facade-tst.psbank.ru\r\npsbid-bff-lkfl-tst.psbank.ru\r\npsbid-lk-tst.psbank.ru\r\npsbol-bus-pre.psbank.ru\r\npsc.avito.ru\r\npsd.avito.ru\r\npse.avito.ru\r\npsearch-maps.yandex.ru\r\npserec.worldbank.org\r\npserecdev.worldbank.org\r\npserecqa.worldbank.org\r\npserecstg.worldbank.org\r\npserectst.worldbank.org\r\npset.yandex.ru\r\npsextweb.worldbank.org\r\npsextwebdev.worldbank.org\r\npsextwebqa.worldbank.org\r\npsextwebstg.worldbank.org\r\npsg.avito.ru\r\npsi-beta-sberbank-ru.sberbank.ru\r\npsi-chat-sharing.vtb.ru\r\npsi-chat-turn.vtb.ru\r\npsi-chat.vtb.ru\r\npsi-id-sberbank-ru.sberbank.ru\r\npsi-new-sberbank-ru.sberbank.ru\r\npsi-opros-sberbank-ru.sberbank.ru\r\npsi-pbmob-efs.testonline.sberbank.ru\r\npsi-realty-price-predictor.domclick.ru\r\npsi-s-sberbank-ru.sberbank.ru\r\npsi-salute.devicestest.sberbank.ru\r\npsi-sberbank-com.sberbank.ru\r\npsi-sberbank-ru.sberbank.ru\r\npsi-sberbank1-ru.sberbank.ru\r\npsi-spkk-api.sberbank.ru\r\npsi-spkk-api.testonline.sberbank.ru\r\npsi-spkk-static.sberbank.ru\r\npsi-spkk-static.testonline.sberbank.ru\r\npsi-www-sberbank-com.sberbank.ru\r\npsi-www-sberbank-ru.sberbank.ru\r\npsi-www-sberbank1-ru.sberbank.ru\r\npsi.avito.ru\r\npsi.es.sber.ru\r\npsi.es.sberbank.ru\r\npsi.mchs.gov.ru\r\npsi.mchs.ru\r\npsi.oprosso.sberbank.ru\r\npsi.promo.sber.ru\r\npsi.salute.online.sberbank.ru\r\npsi.sar.auth.sber.ru\r\npsi.sar.developer.sber.ru\r\npsi.sber.ru\r\npsi.sberdisk.sberbank.ru\r\npsi.sberprime.sber.ru\r\npsi.static.superapp.sberbank.ru\r\npsi.teamid.sber.ru\r\npsi.ufs-superapp.sberbank.ru\r\npsi.userid.sber.ru\r\npsi01.dom.test.gosuslugi.ru\r\npsi01.investorday.sber.ru\r\npsi01.russia.sber.ru\r\npsi02.dom.test.gosuslugi.ru\r\npsiclickstream.testonline.sberbank.ru\r\npsionline.sberbank.ru\r\npsk.beeline.ru\r\npskarial2-0.yandex.ru\r\npskov.aif.ru\r\npskov.avito.ru\r\npskov.dev.kp.ru\r\npskov.dns-shop.ru\r\npskov.fas.gov.ru\r\npskov.home.megafon.ru\r\npskov.kp.ru\r\npskov.lemanapro.ru\r\npskov.mts.ru\r\npskov.shop.megafon.ru\r\npskov.tele2.ru\r\npskritskiy.ing.k8s.dev.ivi.ru\r\npsm.avito.ru\r\npsms.avito.ru\r\npsn.avito.ru\r\npsn.rk.gov.ru\r\npsnapi.myoffice.sberbank.ru\r\npsp.avito.ru\r\npspdfkit.hh.ru\r\npspdfkitbm-trust.open.ru\r\npss.avito.ru\r\npstest.alfabank.ru\r\npstest.avito.ru\r\npsv4.userapi.com\r\npsw.rutube.ru\r\npswar.rusarchives.ru\r\npsy.avito.ru\r\npsycho.avito.ru\r\npsychologie.avito.ru\r\npsychology.avito.ru\r\npt.avito.ru\r\npt.euronews.com\r\npt.minzdrav.gov.ru\r\npt.mos.ru\r\npt.mts.ru\r\npt.vk.com\r\npta.avito.ru\r\nptaf4-training.megafon.ru\r\nptah.avito.ru\r\nptc.avito.ru\r\nptest.avito.ru\r\npti.avito.ru\r\nptn.avito.ru\r\nptr.avito.ru\r\nptrmedia.avito.ru\r\npts.2014.yandex.ru\r\npts.avito.ru\r\npts.sf.mail.ru\r\nptt.avito.ru\r\npty11165b.avito.ru\r\npty13213b.avito.ru\r\npub.avito.ru\r\npub2.avito.ru\r\npubg.mail.ru\r\npublic-api.docs.tiu.ru\r\npublic-buh.sovcombank.ru\r\npublic-yva-r-2-1-7.azuremsk.cloudapp.ec.mts.ru\r\npublic-yva-r-2-2-1.azuremsk.cloudapp.ec.mts.ru\r\npublic-yva-r-3-0-0.azuremsk.cloudapp.ec.mts.ru\r\npublic.avito.ru\r\npublic.backend.vimpelcom.ru\r\npublic.kino-teatr.ru\r\npublic.oplata.t2.ru\r\npublic.oplata.tele2.ru\r\npublic.oprosso.sberbank.ru\r\npublic.psi.oprosso.sberbank.ru\r\npublic.rosnedra.gov.ru\r\npublica.avito.ru\r\npublicapi.avito.ru\r\npublications.avito.ru\r\npublications.worldbank.org\r\npublicidad.avito.ru\r\npublicofficialsfinancialdisclosure.worldbank.org\r\npublictalk.rbc.ru\r\npubliker.avito.ru\r\npublish.avito.ru\r\npublisher.avito.ru\r\npublisher.vk.com\r\npublishing-catalog.avito.ru\r\npublishing-preview.avito.ru\r\npublishing.avito.ru\r\npublishing.interfax.ru\r\npublishing.litres.ru\r\npubs.avito.ru\r\npubsys.worldbank.org\r\npubsystst.worldbank.org\r\npubv1.mail.ru\r\npuck.avito.ru\r\npuertorico.avito.ru\r\npuffin.avito.ru\r\npug.max.com\r\npugachev-adm.gosuslugi.ru\r\npuh.yandex.ru\r\npull.avito.ru\r\npuls-dev.sber.ru\r\npuls-uat.sber.ru\r\npuls.m24.ru\r\npuls.sber.ru\r\npulsar.avito.ru\r\npulsar100.gazeta.ru\r\npulse-ad.mail.ru\r\npulse-dev.sber.ru\r\npulse-dev.sberbank.ru\r\npulse-draft.sber.ru\r\npulse-draft.sberbank.ru\r\npulse-ift.sber.ru\r\npulse-ift.sberbank.ru\r\npulse-qa.sber.ru\r\npulse-qa.sberbank.ru\r\npulse-uat.sber.ru\r\npulse-uat.sberbank.ru\r\npulse.avito.ru\r\npulse.binupdate.mail.ru\r\npulse.mail.ru\r\npulse.mp.rzd.ru\r\npulse.sber.ru\r\npulse.sberbank.ru\r\npulsead.mail.ru\r\npulsem.magnit.ru\r\npuma.avito.ru\r\npuma.worldbank.org\r\npumpkin.avito.ru\r\npunjabi.avito.ru\r\npunk.avito.ru\r\npunpun.ing.k8s.dev.ivi.ru\r\npunto.avito.ru\r\npunto.yandex.ru\r\npuos2.mos.ru\r\npuppet-mirror.rbc.ru\r\npuppet.avito.ru\r\npuppet01.infra.rbc.ru\r\npuppet02.infra.rbc.ru\r\npuppet03.infra.rbc.ru\r\npuppet04.infra.rbc.ru\r\npuppet05.infra.rbc.ru\r\npuppetmaster.avito.ru\r\npupreoccupation.rambler.ru\r\npurchasing.avito.ru\r\npurdue-maxwell.leasing.rshb.ru\r\npure.avito.ru\r\npure.prod.meduza.io\r\npure.staging.scw01.meduza.io\r\npurgatory.avito.ru\r\npurge.srvc.prod.monitor.meduza.io\r\npurple.avito.ru\r\npush-ismg-pre.psbank.ru\r\npush-ismg-preprod.psbank.ru\r\npush-ismg-prod.psbank.ru\r\npush-ismg.psbank.ru\r\npush-me.mail.ru\r\npush-online.if.test.vtb.ru\r\npush-online.rr.test.vtb.ru\r\npush-online.vtb.ru\r\npush-server.vtb.ru\r\npush-stat.meduza.io\r\npush-t.sberbank.ru\r\npush-worker.academy.mchs.ru\r\npush.academy.mchs.ru\r\npush.afisha.ru\r\npush.alfabank.ru\r\npush.avito.ru\r\npush.banki.ru\r\npush.beeline.ru\r\npush.blizko.ru\r\npush.devices.online.sberbank.ru\r\npush.eldorado.ru\r\npush.mail.ru\r\npush.mchs.gov.ru\r\npush.mchs.ru\r\npush.megafon.ru\r\npush.mk.ru\r\npush.mvideo.ru\r\npush.myoffice.sberbank.ru\r\npush.ozon.ru\r\npush.perekrestok.ru\r\npush.preprod.tass.ru\r\npush.rests.afisha.ru\r\npush.roseltorg.ru\r\npush.sberbank.ru\r\npush.shop.mts.ru\r\npush.srvc.prod.monitor.meduza.io\r\npush.tele2.ru\r\npush.tiu.ru\r\npush.tutu.ru\r\npush.vk.com\r\npush.yandex.ru\r\npushchino.beeline.ru\r\npushchino.drom.ru\r\npusher.api.2gis.ru\r\npusher.avito.ru\r\npusher.habr.com\r\npushing-mdz-srvc.meduza.io\r\npushka.gosuslugi.ru\r\npushkin.life.ru\r\npushkin.tass.ru\r\npushkino.beeline.ru\r\npushkino.mts.ru\r\npushkinskoe-r64.gosweb.gosuslugi.ru\r\npushme.mail.ru\r\npuskom.avito.ru\r\npussy.avito.ru\r\npustaka.avito.ru\r\nput.cards2.yandex.ru\r\nput.consultant.ru\r\nput2.cards.yandex.ru\r\nputin.kremlin.ru\r\nputin.tass.ru\r\nputin15.tass.ru\r\nputin2020.tass.ru\r\nputin65.tass.ru\r\npuzzle.avito.ru\r\npuzzle.beeline.ru\r\npuzzle2021.life.ru\r\npv.avito.ru\r\npv.mts.ru\r\npv.vtb.ru\r\npvg.mk.ru\r\npvp.mail.ru\r\npvrr-cggw-01.pvrr.rzd.ru\r\npvz-admin.magnit.ru\r\npw.avito.ru\r\npw.mail.ru\r\npw.openvpn.avito.ru\r\npwa.avito.ru\r\npwa.hr.sberbank.ru\r\npwa.lenta.ru\r\npwc.avito.ru\r\npwc.kino-teatr.ru\r\npwd.economy.gov.ru\r\npwd.sber.ru\r\npwd.tass.ru\r\npwd.wto.economy.gov.ru\r\npweryb.mail.ru\r\npws.avito.ru\r\npx.avito.ru\r\npx1.beeline.ru\r\npx2.beeline.ru\r\npx3.beeline.ru\r\npx4.beeline.ru\r\npx5.beeline.ru\r\npx6.beeline.ru\r\npx7.beeline.ru\r\npxe.avito.ru\r\npy.avito.ru\r\npyatigorsk.avito.ru\r\npyatigorsk.babyblog.ru\r\npyatigorsk.beeline.ru\r\npyatigorsk.dns-shop.ru\r\npyatigorsk.drom.ru\r\npyatigorsk.gosuslugi.ru\r\npyatigorsk.lemanapro.ru\r\npyatigorsk30.gosuslugi.ru\r\npycrement.smarttv.notkube.dev.ivi.ru\r\npylon.avito.ru\r\npypi01f.cs-minitools01f.yandex.ru\r\npypi01h.cs-minitools01h.yandex.ru\r\npypi01ht.cs-minitools01ht.yandex.ru\r\npyramid.avito.ru\r\npyramid.dalet.euronews.com\r\npyramid.stg.dalet.euronews.com\r\npyramiddev.stg.dalet.euronews.com\r\npyrus.sovcombank.ru\r\npytest.dv.rbc.ru\r\npythagoras.avito.ru\r\npython.avito.ru\r\npythonlbp-s.yandex.ru\r\nq.avito.ru\r\nq.minprom.gov.ru\r\nq.tele2.ru\r\nq10.avito.ru\r\nq10.vk.com\r\nq2.avito.ru\r\nq3.avito.ru\r\nqa-7349-www.k.avito.ru\r\nqa-admin.open.ru\r\nqa-challenge.yandex.ru\r\nqa-front.open.ru\r\nqa-job.2gis.ru\r\nqa-jobs.2gis.ru\r\nqa-k8s.cyber.sports.ru\r\nqa-k8s.sports.ru\r\nqa-offer.2gis.ru\r\nqa-partner-portal.avito.ru\r\nqa-verio-portal.avito.ru\r\nqa-welcome.2gis.ru\r\nqa.avito.ru\r\nqa.company.tutu.ru\r\nqa.geoapi.sberbank.ru\r\nqa.k.avito.ru\r\nqa.kino-teatr.ru\r\nqa.legacy.avito.ru\r\nqa.max.com\r\nqa.remittanceprices.worldbank.org\r\nqa.secure.avito.ru\r\nqa.sports.ru\r\nqa.tinkoff.ru\r\nqa02.instamedia.rambler.ru\r\nqa1.avito.ru\r\nqagatekeeper.avito.ru\r\nqalrp-a1.tinkoff.ru\r\nqanbl.latam.media.max.com\r\nqarvip.avito.ru\r\nqas.yandex.ru\r\nqas2.yandex.ru\r\nqat.euronews.com\r\nqatar.avito.ru\r\nqatar.tass.ru\r\nqavgatekeeper.avito.ru\r\nqavmgk.avito.ru\r\nqaweb1.avito.ru\r\nqaweb2.avito.ru\r\nqazwsx.avito.ru\r\nqb.avito.ru\r\nqb.interfax.ru\r\nqc.avito.ru\r\nqcarp11.rambler.ru\r\nqcarp21.rambler.ru\r\nqcms.lemanapro.ru\r\nqh.avito.ru\r\nqi500.i.mail.ru\r\nqlean.youdo.com\r\nqlik.beeline.ru\r\nqm.avito.ru\r\nqmail.avito.ru\r\nqms.avito.ru\r\nqna.habr.com\r\nqp.avito.ru\r\nqq.avito.ru\r\nqr-test.auth.alfabank.ru\r\nqr-test.mkb.ru\r\nqr.avito.ru\r\nqr.domofon.mts.ru\r\nqr.vrpark.tele2.ru\r\nqr.vtb.ru\r\nqr2.yandex.ru\r\nqratorout.wildberries.ru\r\nqrpay.tinkoff.ru\r\nqrsbp.sovcombank.ru\r\nqs.avito.ru\r\nqsappse.worldbank.org\r\nqscapps.worldbank.org\r\nqscappsqa.worldbank.org\r\nqsupport.mts.ru\r\nqt.avito.ru\r\nquack.avito.ru\r\nquad.avito.ru\r\nquake.avito.ru\r\nquality.avito.ru\r\nquantum.avito.ru\r\nquarantine.avito.ru\r\nquark.avito.ru\r\nquartz.avito.ru\r\nquasar.avito.ru\r\nquattro.avito.ru\r\nquebec.avito.ru\r\nqueen.avito.ru\r\nqueens.avito.ru\r\nquentin.avito.ru\r\nquery.avito.ru\r\nquest.avito.ru\r\nquest.megafon.ru\r\nquest.project.tinkoff.ru\r\nquest.vtb.ru\r\nquestionnaire.avito.ru\r\nquestions.avito.ru\r\nquetzal.avito.ru\r\nqueue.avito.ru\r\nqueue.azuremsk.ec.mts.ru\r\nqueue.msk-azure.ec.mts.ru\r\nquick.avito.ru\r\nquickpulse.avito.ru\r\nquicktime.avito.ru\r\nquigon.yandex.ru\r\nquik.mkb.ru\r\nquik.open.ru\r\nquik.psbank.ru\r\nquik.rshb.ru\r\nquik1.rshb.ru\r\nquik2.open.ru\r\nquik2.rshb.ru\r\nquikdev.mkb.ru\r\nquikm.vtb.ru\r\nquit.avito.ru\r\nquiz.2gis.ru\r\nquiz.avito.ru\r\nquiz.domclick.ru\r\nquiz.kinopoisk.ru\r\nquiz.m24.ru\r\nquiz.megafon.ru\r\nquiz.rambler.ru\r\nquiz.t2.ru\r\nquiz.vprok.ru\r\nquiz.worldbank.org\r\nquizadmin.avito.ru\r\nquote.avito.ru\r\nquotes-rewrite.meduza.io\r\nquotes-rewrite.staging.meduza.io\r\nquotes.avito.ru\r\nquotes.euronews.com\r\nquotes.production.meduza.io\r\nquotes.staging.meduza.io\r\nquran.avito.ru\r\nqv.avito.ru\r\nqwe.avito.ru\r\nqweasd.avito.ru\r\nqwendy.ixbt.com\r\nqwerty.avito.ru\r\nqwertyuiop.avito.ru\r\nqz.habr.com\r\nr-img.fotki.yandex.ru\r\nr.avito.ru\r\nr.gismeteo.ru\r\nr.mail-orbit.afisha.ru\r\nr.mail.ru\r\nr.maps.yandex.ru\r\nr.minprom.gov.ru\r\nr.mvideo.ru\r\nr.rutube.ru\r\nr.vtb.ru\r\nr0.avito.ru\r\nr0.mail.ru\r\nr00.openbank.ru\r\nr001cfilts01.main.russianpost.ru\r\nr01.afisha.ru\r\nr01.openbank.ru\r\nr1.avito.ru\r\nr2-test.vtb.ru\r\nr2.avito.ru\r\nr2.mail.ru\r\nr2.vtb.ru\r\nr23.fssp.gov.ru\r\nr230.i50.avito.ru\r\nr230.i59.avito.ru\r\nr230.i69.avito.ru\r\nr230.i80.avito.ru\r\nr230.i90.avito.ru\r\nr25.avito.ru\r\nr2d2.alfabank.ru\r\nr2d2.avito.ru\r\nr3.avito.ru\r\nr3.mail.ru\r\nr33evwnnqcncovaodlzidrb2gni.sdc.beeline.ru\r\nr3ncovh5pvbhavp26e5o6dafbcy.sdc.beeline.ru\r\nr57.fssp.gov.ru\r\nr5gfn5rompbbuxp3t5ytgncov3u.sdc.beeline.ru\r\nr5iq2h7mxdncovfkamij55lhf4i.sdc.beeline.ru\r\nr62sh70.gosuslugi.ru\r\nr7-office.fas.gov.ru\r\nr7.avito.ru\r\nr7.khv.gov.ru\r\nr9.mail.ru\r\nra.3vld.yandex.ru\r\nra.avito.ru\r\nra.interfax.ru\r\nra.rosbank.ru\r\nrabbit.avito.ru\r\nrabbit.net.ixbt.com\r\nrabota-api.lemanapro.ru\r\nrabota-click2.yandex.ru\r\nrabota-cms.lemanapro.ru\r\nrabota.alfabank.ru\r\nrabota.avito.ru\r\nrabota.drom.ru\r\nrabota.lemanapro.ru\r\nrabota.magnit.ru\r\nrabota.mail.ru\r\nrabota.perekrestok.ru\r\nrabota.sakhalin.gov.ru\r\nrabota.sber.ru\r\nrabota.tinkoff.ru\r\nrabota.vk.com\r\nrabota.vtb.ru\r\nrabota.yandex.ru\r\nrabota2.yandex.ru\r\nrabotagoda2010.mail.ru\r\nrac.avito.ru\r\nrac2.avito.ru\r\nrace.avito.ru\r\nracer.avito.ru\r\nrachel.avito.ru\r\nracine.avito.ru\r\nrack10u24.avito.ru\r\nracks.avito.ru\r\nracktables.avito.ru\r\nracoon.avito.ru\r\nrad.avito.ru\r\nrad1.avito.ru\r\nradar.avito.ru\r\nradar.megafon.ru\r\nradar.tinkoff.ru\r\nradar.vedomosti.ru\r\nradar1.mail.ru\r\nradar10.mail.ru\r\nradar11.mail.ru\r\nradar12.mail.ru\r\nradar13.mail.ru\r\nradar14.mail.ru\r\nradar15.mail.ru\r\nradar16.mail.ru\r\nradar17.mail.ru\r\nradar18.mail.ru\r\nradar19.mail.ru\r\nradar1wa.mail.ru\r\nradar2.mail.ru\r\nradar20.mail.ru\r\nradar2wa.mail.ru\r\nradar3.mail.ru\r\nradar32.i.mail.ru\r\nradar33.i.mail.ru\r\nradar34.i.mail.ru\r\nradar35.i.mail.ru\r\nradar3wa.mail.ru\r\nradar4.mail.ru\r\nradar40.i.mail.ru\r\nradar41.i.mail.ru\r\nradar42.i.mail.ru\r\nradar43.i.mail.ru\r\nradar44.i.mail.ru\r\nradar45.i.mail.ru\r\nradar4wa.mail.ru\r\nradar5.mail.ru\r\nradar50.i.mail.ru\r\nradar51.i.mail.ru\r\nradar52.i.mail.ru\r\nradar53.i.mail.ru\r\nradar54.i.mail.ru\r\nradar55.i.mail.ru\r\nradar6.mail.ru\r\nradar7.mail.ru\r\nradar8.mail.ru\r\nradar9.mail.ru\r\nraddo.afro.who.int\r\nradikal.avito.ru\r\nradio.avito.ru\r\nradio.yandex.ru\r\nradio1.avito.ru\r\nradio2.avito.ru\r\nradiojam-dbs01f.maps.yandex.ru\r\nradiojazz89.1.yandex.ru\r\nradioprobki.maps.yandex.ru\r\nradioprobki.yandex.ru\r\nradioprobki2.maps.yandex.ru\r\nradioprobki2.yandex.ru\r\nradios.avito.ru\r\nradioweb.avito.ru\r\nradium.avito.ru\r\nradius.2gis.ru\r\nradius.auth.avito.ru\r\nradius.avito.ru\r\nradius1.avito.ru\r\nradius2.avito.ru\r\nradius3.avito.ru\r\nradius4.avito.ru\r\nradon.avito.ru\r\nradon.feedback.rosatom.ru\r\nraduga1.mail.ru\r\nraduga3.mail.ru\r\nraduga4.mail.ru\r\nraduga5.mail.ru\r\nraduzhn.mts.ru\r\nradyo.avito.ru\r\nrafael.avito.ru\r\nrafael.lenta.ru\r\nrage.avito.ru\r\nrage.kino-teatr.ru\r\nragnarok.avito.ru\r\nrahul.avito.ru\r\nrai.avito.ru\r\nraid.avito.ru\r\nraiffeisen.credit-registry.nalog.ru\r\nrail.avito.ru\r\nrail.consultant.ru\r\nrails.avito.ru\r\nrailway.avito.ru\r\nrain.avito.ru\r\nrainbow.avito.ru\r\nrainbow2.avito.ru\r\nrainbow3.avito.ru\r\nraja.avito.ru\r\nrajesh.avito.ru\r\nrajf1.i.mail.ru\r\nrajf11.i.mail.ru\r\nrajf2.i.mail.ru\r\nrajf21.i.mail.ru\r\nrajf3.i.mail.ru\r\nrajf31.i.mail.ru\r\nrajf4.i.mail.ru\r\nrajf41.i.mail.ru\r\nraketa-yars.tass.ru\r\nraki.avito.ru\r\nralph.avito.ru\r\nram.avito.ru\r\nram.drom.ru\r\nrama.avito.ru\r\nraman.avito.ru\r\nramazan.avito.ru\r\nrambler.avito.ru\r\nrambler.lenta.ru\r\nrambo.avito.ru\r\nramenki.mos.ru\r\nramensk.home.megafon.ru\r\nramenskoe.dns-shop.ru\r\nramenskoe.mts.ru\r\nramenskoye.babyblog.ru\r\nrami.avito.ru\r\nramon.avito.ru\r\nrampnet.worldbank.org\r\nrams.avito.ru\r\nramses.avito.ru\r\nran.avito.ru\r\nrana.avito.ru\r\nrancher.rt.sovcombank.ru\r\nrancher.srv.hub.litres.ru\r\nrancher.srv.litres.ru\r\nrancid.avito.ru\r\nrandall.avito.ru\r\nrandom.avito.ru\r\nrandy.avito.ru\r\nranger.avito.ru\r\nrank.avito.ru\r\nranking.avito.ru\r\nraovat.avito.ru\r\nrap.avito.ru\r\nrape.avito.ru\r\nraphael.avito.ru\r\nrapid.avito.ru\r\nrapid.drom.ru\r\nrapid1.yandex.ru\r\nrapid3.yandex.ru\r\nrapid6.yandex.ru\r\nrapidleech.avito.ru\r\nrapids.avito.ru\r\nrapira11.mail.ru\r\nrapira25.mail.ru\r\nrapira9.mail.ru\r\nrappoport-restaurants.vedomosti.ru\r\nraptor.avito.ru\r\nraritety.rusarchives.ru\r\nras.avito.ru\r\nras2.avito.ru\r\nrascal.avito.ru\r\nraselfenrollment.rosbank.ru\r\nrasp.api.yandex.ru\r\nrasp.kp.ru\r\nrasp.yandex.ru\r\nraspberry.avito.ru\r\nrassrochka.zoon.ru\r\nrasta.avito.ru\r\nrat.avito.ru\r\nrate.mail.ru\r\nrates.avito.ru\r\nrating.avito.ru\r\nrating.kinopoisk.ru\r\nraven.avito.ru\r\nravi.avito.ru\r\nraw.avito.ru\r\nrawan.avito.ru\r\nray.avito.ru\r\nray.ydf.yandex.ru\r\nraymond.avito.ru\r\nrays.avito.ru\r\nrazbudilnik.tele2.ru\r\nrazor.avito.ru\r\nrazvitieuga.south.vedomosti.ru\r\nrb-bgp.tambov.gov.ru\r\nrb-dep.tambov.gov.ru\r\nrb.avito.ru\r\nrb.mail.ru\r\nrb.zdorovie-shkolnika.spb.aif.ru\r\nrbapi.rosbank.ru\r\nrbapitest.rosbank.ru\r\nrbc.cs5270.userapi.com\r\nrbgwapi.rosbank.ru\r\nrbgwapitest.rosbank.ru\r\nrbint.cloud.mail.ru\r\nrbl.avito.ru\r\nrblib.litres.ru\r\nrbmem51reklama.mail.ru\r\nrbmem52reklama.mail.ru\r\nrbmem53reklama.mail.ru\r\nrbmem54reklama.mail.ru\r\nrbmq02.db.rbc.ru\r\nrbmq03.db.rbc.ru\r\nrbs-mq.open.ru\r\nrbs.avito.ru\r\nrbs2esprm.sberbank.ru\r\nrbs2esprmpsi.sberbank.ru\r\nrbs2sprm.sberbank.ru\r\nrbs2sprmift.sberbank.ru\r\nrbs2sprmpsi.sberbank.ru\r\nrbt.avito.ru\r\nrc-201811091519-www.k.avito.ru\r\nrc-201904091631-www.k.avito.ru\r\nrc-201904091801-www.k.avito.ru\r\nrc-201904101030-www.k.avito.ru\r\nrc-201904101216-www.k.avito.ru\r\nrc-201904101331-www.k.avito.ru\r\nrc-201904101511-www.k.avito.ru\r\nrc-201904101631-www.k.avito.ru\r\nrc-201904101800-www.k.avito.ru\r\nrc-201904111031-www.k.avito.ru\r\nrc-201904111210-www.k.avito.ru\r\nrc-201904111331-www.k.avito.ru\r\nrc-201904111511-www.k.avito.ru\r\nrc-201904111631-www.k.avito.ru\r\nrc-201904111801-www.k.avito.ru\r\nrc-201904121031-www.k.avito.ru\r\nrc-201904121210-www.k.avito.ru\r\nrc-201904151030-k.avito.ru\r\nrc-201904151030-www.k.avito.ru\r\nrc-201904151336-www.k.avito.ru\r\nrc-201904151510-www.k.avito.ru\r\nrc-201904151635-www.k.avito.ru\r\nrc-201904151801-www.k.avito.ru\r\nrc-201904161030-www.k.avito.ru\r\nrc-201904161210-www.k.avito.ru\r\nrc-201904161330-www.k.avito.ru\r\nrc-201904161511-www.k.avito.ru\r\nrc-201904161631-www.k.avito.ru\r\nrc-201904161800-www.k.avito.ru\r\nrc-201904171031-www.k.avito.ru\r\nrc-201904171211-www.k.avito.ru\r\nrc-201904171331-www.k.avito.ru\r\nrc-201904171511-www.k.avito.ru\r\nrc-201904171631-www.k.avito.ru\r\nrc-201904171801-www.k.avito.ru\r\nrc-201904181030-www.k.avito.ru\r\nrc-201904181211-www.k.avito.ru\r\nrc-201904181330-www.k.avito.ru\r\nrc-201904181630-www.k.avito.ru\r\nrc-201904181801-www.k.avito.ru\r\nrc-201904191036-www.k.avito.ru\r\nrc-201904191210-www.k.avito.ru\r\nrc-201904221035-www.k.avito.ru\r\nrc-201904221210-www.k.avito.ru\r\nrc-201904221331-www.k.avito.ru\r\nrc-201904221510-www.k.avito.ru\r\nrc-201904221630-www.k.avito.ru\r\nrc-201904221801-www.k.avito.ru\r\nrc-201904231035-www.k.avito.ru\r\nrc-201904231331-www.k.avito.ru\r\nrc-201904231520-www.k.avito.ru\r\nrc-201904231631-www.k.avito.ru\r\nrc-201904231751-www.k.avito.ru\r\nrc-201904241031-www.k.avito.ru\r\nrc-201904241215-www.k.avito.ru\r\nrc-201904241330-www.k.avito.ru\r\nrc-201904241515-www.k.avito.ru\r\nrc-201904241631-www.k.avito.ru\r\nrc-201904241802-www.k.avito.ru\r\nrc-201904251035-www.k.avito.ru\r\nrc-201904251211-www.k.avito.ru\r\nrc-201904251330-www.k.avito.ru\r\nrc-201904251511-www.k.avito.ru\r\nrc-201904251631-www.k.avito.ru\r\nrc-201904251802-www.k.avito.ru\r\nrc-201904261031-www.k.avito.ru\r\nrc-201904261210-www.k.avito.ru\r\nrc-201904291031-www.k.avito.ru\r\nrc-201904291212-www.k.avito.ru\r\nrc-201904291331-www.k.avito.ru\r\nrc-201904291511-www.k.avito.ru\r\nrc-201904291630-www.k.avito.ru\r\nrc-201904291800-www.k.avito.ru\r\nrc-201904301039-www.k.avito.ru\r\nrc.afisha.ru\r\nrc.avito.ru\r\nrc.ixbt.com\r\nrc.mobile.heroism.yandex.ru\r\nrc.ot.gov.ru\r\nrc.rests.afisha.ru\r\nrc.senat.sberbank.ru\r\nrc.vtb.ru\r\nrc68.emro.who.int\r\nrc69.emro.who.int\r\nrcc.avito.ru\r\nrchat.beeline.ru\r\nrchat.iac.mchs.ru\r\nrci.tinkoff.ru\r\nrck.vtb.ru\r\nrck1.vtb.ru\r\nrck2.vtb.ru\r\nrcm.avito.ru\r\nrcm.mmobile.magnit.ru\r\nrcm.rambler.ru\r\nrcmdbtlt5sncovlesb4vzconave.sdc.beeline.ru\r\nrcmjs.rambler.ru\r\nrcmjs.um.rambler.ru\r\nrcmnd.mts.ru\r\nrcp.avito.ru\r\nrcs.avito.ru\r\nrcvolgateplosnab.megafon.ru\r\nrcws.net.ixbt.com\r\nrd.avito.ru\r\nrd.emails.tinkoff.ru\r\nrdb.avito.ru\r\nrdb.tele2.ru\r\nrdc.avito.ru\r\nrdealer.nnov.mts.ru\r\nrdealer.nw.mts.ru\r\nrdealer.ug.mts.ru\r\nrdealerca.mts.ru\r\nrdg.avito.ru\r\nrdg.mkb.ru\r\nrdg.ntv.ru\r\nrdk2.kommersant.ru\r\nrdm.avito.ru\r\nrdm.worldbank.org\r\nrdmapi.worldbank.org\r\nrdmd.worldbank.org\r\nrdmp.worldbank.org\r\nrdms.worldbank.org\r\nrdmt.worldbank.org\r\nrdmuat.worldbank.org\r\nrdns.avito.ru\r\nrdns1.avito.ru\r\nrdns2.avito.ru\r\nrdns3.avito.ru\r\nrdp.avito.ru\r\nrdp.hh.ru\r\nrdpress.kino-teatr.ru\r\nrdr.rosatom.ru\r\nrdr.um.maps.yandex.ru\r\nrdr.vtb.ru\r\nrdr01e.tst.maps.yandex.ru\r\nrdrproxy.mpro.maps.yandex.ru\r\nrds.avito.ru\r\nrdvznvirusfhaxjf4imc7pawz5a.sdc.beeline.ru\r\nrdweb.avito.ru\r\nre.avito.ru\r\nre.vedomosti.ru\r\nrea.avito.ru\r\nreach.avito.ru\r\nreact-front.demo.megafon.ru\r\nread.avito.ru\r\nread.businesseducation.tinkoff.ru\r\nread.crmtd.mts.ru\r\nread.debt.open.ru\r\nread.e.corp.megafon.ru\r\nread.e.shop.megafon.ru\r\nread.email.domclick.ru\r\nread.email.rosbank.ru\r\nread.email2.kommersant.ru\r\nread.emails.tbank.ru\r\nread.hello.mneblizko.mts.ru\r\nread.litres.ru\r\nread.mail.gosuslugi.ru\r\nread.promo.citilink.ru\r\nread.service.citilink.ru\r\nreader.avito.ru\r\nreader.litres.ru\r\nreader.rbc.ru\r\nreading.avito.ru\r\nreal-estate.avito.ru\r\nreal.avito.ru\r\nrealestate.avito.ru\r\nrealestate.vedomosti.ru\r\nrealestate2.avito.ru\r\nrealestateforum.bizconf.rbc.ru\r\nrealiste.banki.ru\r\nreality.avito.ru\r\nrealitykings.avito.ru\r\nrealmadrid.avito.ru\r\nrealmedia.avito.ru\r\nrealspam01.yandex.ru\r\nrealspam03.yandex.ru\r\nrealspam04.yandex.ru\r\nrealspam05.yandex.ru\r\nrealtime.avito.ru\r\nrealty-price-predictor.domclick.ru\r\nrealty.avito.ru\r\nrealty.lenta.ru\r\nrealty.magnit.ru\r\nrealty.mail.ru\r\nrealty.open.ru\r\nrealty.rambler.ru\r\nrealty.rostelecom.ru\r\nrealty.spec.kp.ru\r\nrealty.vesti.ru\r\nrealty.vtb.ru\r\nrealty.yandex.ru\r\nrealtyload.avito.ru\r\nreb.avito.ru\r\nrebecca.users.avito.ru\r\nrebel.avito.ru\r\nreboot.avito.ru\r\nreborn.avito.ru\r\nrebsd.mail.ru\r\nrebus.e.mail.ru\r\nrec.avito.ru\r\nrec.mos.ru\r\nrec.ydf.yandex.ru\r\nreceipt.tinkoff.ru\r\nreceiver.gov.ru\r\nrecette.avito.ru\r\nrecherche.avito.ru\r\nrecim.avito.ru\r\nrecipe.avito.ru\r\nrecipes.avito.ru\r\nrecommender.um.rambler.ru\r\nrecon.avito.ru\r\nrecord.2gis.ru\r\nrecord.avito.ru\r\nrecordercdn.rosatom.ru\r\nrecords.avito.ru\r\nrecovery.avito.ru\r\nrecovery.rosbank.ru\r\nrecreation.avito.ru\r\nrecruit.avito.ru\r\nrecruiter.avito.ru\r\nrecruitment.avito.ru\r\nrecrutica.megafon.ru\r\nrector.avito.ru\r\nrecycle.avito.ru\r\nrecycle.mos.ru\r\nred.avito.ru\r\nred.rosnedra.gov.ru\r\nred5.avito.ru\r\nreda.avito.ru\r\nredaccion.avito.ru\r\nredaktion.avito.ru\r\nredash-1ad7a4ba.xaas.kz.cloud.vk.com\r\nredash.brilliant.kommersant.ru\r\nredash.vedomosti.ru\r\nredberry.yandex.ru\r\nredbox.avito.ru\r\nredbull.avito.ru\r\nredcross.avito.ru\r\nreddot.avito.ru\r\nredes.avito.ru\r\nredesign-02.meduza.io\r\nredesign-proto.staging.meduza.io\r\nredesign.avito.ru\r\nredesign.kommersant.ru\r\nredesign.meduza.io\r\nredesign.profi.ru\r\nredhat.avito.ru\r\nredir.avito.ru\r\nredirect-partners.appmetrica.yandex.ru\r\nredirect.1tv.ru\r\nredirect.appmetrica.yandex.ru\r\nredirect.appmetrika.yandex.ru\r\nredirect.avito.ru\r\nredirect.dns-shop.ru\r\nredirect.taxi.yandex.ru\r\nredirector.avito.ru\r\nredis-01.tech.boards.mchs.ru\r\nredisign.mk.ru\r\nredkin.d.2000.yandex.ru\r\nredline.avito.ru\r\nredmine.9111.ru\r\nredmine.avito.ru\r\nredmine.garant.ru\r\nredmine.iac.mchs.ru\r\nredmine.life.ru\r\nredmine.litres.ru\r\nredmine.m24.ru\r\nredmine.sportbox.ru\r\nredmine.tomsk.gov.ru\r\nredmine.wildberries.ru\r\nredondo.avito.ru\r\nredrose.avito.ru\r\nredsquare.rambler.ru\r\nredstone.avito.ru\r\nredsun.avito.ru\r\nredtube.avito.ru\r\nredwing.avito.ru\r\nredwood.avito.ru\r\nreed.avito.ru\r\nreef.avito.ru\r\nreestr-gis.sakha.gov.ru\r\nreestr.digital.gov.ru\r\nreestr.fas.gov.ru\r\nreestr442.sakha.gov.ru\r\nref.avito.ru\r\nref.gismeteo.ru\r\nref.mail.ru\r\nreferat.avito.ru\r\nreferat.yandex.ru\r\nreferats.yandex.ru\r\nreference.avito.ru\r\nreferral.avito.ru\r\nreform.avito.ru\r\nrefresh.avito.ru\r\nrefund-agregator.wildberries.ru\r\nrefund.ticket.yandex.ru\r\nrefund.tickets.yandex.ru\r\nreg.alfabank.ru\r\nreg.avito.ru\r\nreg.kinopoisk.ru\r\nreg.meduza.io\r\nreg.open.ru\r\nreg.rosbank.ru\r\nreg.rshb.ru\r\nreg.sovcombank.ru\r\nreg.vtb.ru\r\nregatta-test.vedomosti.ru\r\nregatta.vedomosti.ru\r\nregbusiness.gosuslugi.ru\r\nregdemo-gateway.gosuslugi.ru\r\nregdemo-special.gosuslugi.ru\r\nregdemo1.gosuslugi.ru\r\nregdemo2.gosuslugi.ru\r\nregina.avito.ru\r\nregion.avito.ru\r\nregion.beeline.ru\r\nregion.gosuslugi.ru\r\nregion.kommersant.ru\r\nregion.rzd.ru\r\nregional.avito.ru\r\nregioncourier.pochta.ru\r\nregions.avito.ru\r\nregions.beeline.ru\r\nregions.fas.gov.ru\r\nregions.kommersant.ru\r\nregions.kp.ru\r\nregions.shop.megafon.ru\r\nregis.avito.ru\r\nregist.avito.ru\r\nregister.avito.ru\r\nregistrar.avito.ru\r\nregistrarwifi.beeline.ru\r\nregistration.avito.ru\r\nregistration.rosatom.ru\r\nregistration.spec.tass.ru\r\nregistration.worldbank.org\r\nregistrator.mobile.heroism.yandex.ru\r\nregistro.avito.ru\r\nregistry-platform.tutu.ru\r\nregistry-public.ci.tutu.ru\r\nregistry.avito.ru\r\nregistry.cgu.mchs.ru\r\nregistry.ci.tutu.ru\r\nregistry.dev.cgu.iac.mchs.ru\r\nregistry.k.avito.ru\r\nregistry.kino-teatr.ru\r\nregistry.meduza.io\r\nregistry.net.ixbt.com\r\nregistry.pg.cgu.mchs.ru\r\nregistry.resources.cloud.mts.ru\r\nregistry.tbank.ru\r\nregistry.test.ivi.ru\r\nregistry.tinkoff.ru\r\nregistry.vedomosti.ru\r\nregistry1.meduza.io\r\nregpd.tele2.ru\r\nregul-0.yandex.ru\r\nregulation.gov.ru\r\nregulation.tomsk.gov.ru\r\nregulus.avito.ru\r\nregus.vedomosti.ru\r\nrehab.avito.ru\r\nrehub1.mail.ru\r\nrehubfe1.mail.ru\r\nrehubfe14.i.mail.ru\r\nrehubfe15.i.mail.ru\r\nrehubfe2.mail.ru\r\nrehubfe3.i.mail.ru\r\nrehubfe4.i.mail.ru\r\nrehubfe5.i.mail.ru\r\nrehubsrv1.mail.ru\r\nreichspost.lenta.ru\r\nreiki.avito.ru\r\nreisen.avito.ru\r\nrejestracja.avito.ru\r\nreka.avito.ru\r\nreklam.avito.ru\r\nreklama.2gis.ru\r\nreklama.avito.ru\r\nreklama.magnit.ru\r\nreklama.mail.ru\r\nreklama.mb.vesti.ru\r\nreklama.mts.ru\r\nreklama.pochta.ru\r\nreklama.yandex.ru\r\nrekrutacja.avito.ru\r\nrelais.avito.ru\r\nrelatorio.avito.ru\r\nrelaunch.avito.ru\r\nrelax.avito.ru\r\nrelax.tinkoff.ru\r\nrelay-ext.psbank.ru\r\nrelay.avito.ru\r\nrelay.gis.rosenergo.gov.ru\r\nrelay.kt.tambov.gov.ru\r\nrelay.lipetsk.gov.ru\r\nrelay.m1.2gis.ru\r\nrelay.minprom.gov.ru\r\nrelay.n1.2gis.ru\r\nrelay.n3.2gis.ru\r\nrelay.rosenergo.gov.ru\r\nrelay.rostelecom.ru\r\nrelay.tambov.gov.ru\r\nrelay.yandex.ru\r\nrelay01.avito.ru\r\nrelay02.avito.ru\r\nrelay1.avito.ru\r\nrelay1.mail.ru\r\nrelay2.avito.ru\r\nrelay2.i.mail.ru\r\nrelay2.minprom.gov.ru\r\nrelay2.rosenergo.gov.ru\r\nrelay3.avito.ru\r\nrelay4.avito.ru\r\nrelaymy1.i.mail.ru\r\nrelaymy2.i.mail.ru\r\nrelease-www.k.avito.ru\r\nrelease-www.t.avito.ru\r\nrelease.avito.ru\r\nrelevancer.s3.litres.ru\r\nreligion.avito.ru\r\nreload.avito.ru\r\nrelocation.avito.ru\r\nrem.avito.ru\r\nremax.avito.ru\r\nremcomsc.beeline.ru\r\nremedy.avito.ru\r\nremedypresidio.worldbank.org\r\nremedypresidiodev.worldbank.org\r\nremedypresidioqa.worldbank.org\r\nremedypresidiostg.worldbank.org\r\nremedyservicenow.worldbank.org\r\nremedyservicenowqa.worldbank.org\r\nremedysita.worldbank.org\r\nremedysso.worldbank.org\r\nremedyssodev.worldbank.org\r\nremedyssoqa.worldbank.org\r\nremedyssostg.worldbank.org\r\nremedyssotest.worldbank.org\r\nremedyssotst.worldbank.org\r\nremedyweb2.worldbank.org\r\nremedywebdev2.worldbank.org\r\nremedywebqa2.worldbank.org\r\nremedywebstg2.worldbank.org\r\nremittanceprices.worldbank.org\r\nremix.avito.ru\r\nremnantofgiants.kino-teatr.ru\r\nremont.avito.ru\r\nremote-crafttalk.magnit.ru\r\nremote.avito.ru\r\nremote.iarc.who.int\r\nremote.kino-teatr.ru\r\nremote.vtb.ru\r\nremote1.avito.ru\r\nremote2.avito.ru\r\nremoteaccess.avito.ru\r\nremotestorage600.nfrolkin.ing.k8s.dev.ivi.ru\r\nremotesupport.avito.ru\r\nremoto.avito.ru\r\nremove.avito.ru\r\nremus.avito.ru\r\nren.avito.ru\r\nrenaissance.lenta.ru\r\nrenault.drom.ru\r\nrenew.avito.ru\r\nrenewal.avito.ru\r\nrenoir.avito.ru\r\nrent.avito.ru\r\nrental.avito.ru\r\nrentals.avito.ru\r\nrentstories.tinkoff.ru\r\nrep.avito.ru\r\nrep.minfin.rk.gov.ru\r\nrepair.avito.ru\r\nrepair.vtb.ru\r\nrepetitor.yandex.ru\r\nreplay.avito.ru\r\nreplica.avito.ru\r\nrepo.avito.ru\r\nrepo.freebsd.infra.rbc.ru\r\nrepo.tass.ru\r\nrepo.yandex.ru\r\nreport-vypiska.sberbank.ru\r\nreport.avito.ru\r\nreport.open.gov.ru\r\nreport.rosatom.ru\r\nreport1.avito.ru\r\nreporter.avito.ru\r\nreportes.avito.ru\r\nreporting.avito.ru\r\nreporting.msp.economy.gov.ru\r\nreports.apteka.ru\r\nreports.avito.ru\r\nreports.crm.yandex.ru\r\nreports.sps.rosatom.ru\r\nreports19.mchs.ru\r\nreports2.avito.ru\r\nreportstv-dealer.mts.ru\r\nrepos.avito.ru\r\nrepositorio.avito.ru\r\nrepositorio.kino-teatr.ru\r\nrepository.avito.ru\r\nrepository.kino-teatr.ru\r\nreps.avito.ru\r\nreps.searo.who.int\r\nrepublic.avito.ru\r\nreputation.zoon.ru\r\nreputationalrisk.worldbank.org\r\nreputationalriskdev.worldbank.org\r\nreputationalriskqa.worldbank.org\r\nreputationalriskstg.worldbank.org\r\nrequest.avito.ru\r\nrequest.mkb.ru\r\nrequest.pernatsk.mail.ru\r\nrequestfilter.sberbank.ru\r\nrequestfilterpsi.sberbank.ru\r\nres-investor-psi.sberbank.ru\r\nres-investor.sberbank.ru\r\nres.avito.ru\r\nres.online.sberbank.ru\r\nres.tele2.ru\r\nres1.avito.ru\r\nres2.avito.ru\r\nres2.tele2.ru\r\nrescue.avito.ru\r\nresearch.alfabank.ru\r\nresearch.avito.ru\r\nresearch.rutube.ru\r\nresearch.sber.ru\r\nresearch.sberbank.ru\r\nresearch.yandex.ru\r\nresearch.zakon.ru\r\nresearch1.avito.ru\r\nresearcher.avito.ru\r\nresearchportal.searo.who.int\r\nreseller.avito.ru\r\nreseller2.avito.ru\r\nresellers.avito.ru\r\nreserv-croc.sbud.rshb.ru\r\nreserv-var.sbud.rshb.ru\r\nreserv.sakha.gov.ru\r\nreserv.sbud.rshb.ru\r\nreservas.avito.ru\r\nreservation.avito.ru\r\nreservations.avito.ru\r\nreserve-qa.tinkoff.ru\r\nreserve.avito.ru\r\nreserve.mb.vtb.ru\r\nreserve.mbrb.test.vtb.ru\r\nreserve.tinkoff.ru\r\nreserved.avito.ru\r\nreset.avito.ru\r\nresident.3452.yandex.ru\r\nresim.avito.ru\r\nresimler.avito.ru\r\nresinfod.yandex.ru\r\nresolve.avito.ru\r\nresolver.avito.ru\r\nresolver.staging.meduza.io\r\nresolver1.avito.ru\r\nresolver2.avito.ru\r\nresolving.rtb.beeline.ru\r\nresort.avito.ru\r\nresource.avito.ru\r\nresources.avito.ru\r\nrespect.avito.ru\r\nresponse.avito.ru\r\nresponsive.avito.ru\r\nressources.avito.ru\r\nrest-api-test.tinkoff.ru\r\nrest-domains.hh.ru\r\nrest.afisha.ru\r\nrest.atlas.dev.cgu.mchs.ru\r\nrest.atlas.mchs.gov.ru\r\nrest.atlas.mchs.ru\r\nrest.avito.ru\r\nrest.drive.megafon.ru\r\nrest.learning.ozon.ru\r\nrest.test.ivi.ru\r\nrest.university.ozon.ru\r\nrest.uspeh.megafon.ru\r\nrestapi-buh.sovcombank.ru\r\nrestapi.factoring.rshb.ru\r\nrestaurant.7mehmet.yandex.ru\r\nrestaurant.afisha.ru\r\nrestaurant.avito.ru\r\nrestaurants.afisha.ru\r\nrestoran.afisha.ru\r\nrestore.avito.ru\r\nrestricted.kino-teatr.ru\r\nrests.afisha.ru\r\nresult.avito.ru\r\nresultbox19.20.yandex.ru\r\nresults.avito.ru\r\nresume.avito.ru\r\nretail-api.ozon.ru\r\nretail.avito.ru\r\nretail.rshb.ru\r\nretailer.avito.ru\r\nretailers.avito.ru\r\nretailonline.vedomosti.ru\r\nretailtech.magnit.ru\r\nretete.avito.ru\r\nretracker.avito.ru\r\nretro.avito.ru\r\nretrotechno.2gis.ru\r\nreturn.avito.ru\r\nreunion.avito.ru\r\nreutov.mts.ru\r\nrev.avito.ru\r\nrev.mail.ru\r\nreva.mail.ru\r\nrevelation.avito.ru\r\nreverse.avito.ru\r\nreverse.zdorovie-shkolnika.spb.aif.ru\r\nreverseproxy.avito.ru\r\nrevertphp83.test.euronews.com\r\nreview-admin.yandex.ru\r\nreview.avito.ru\r\nreview.gosuslugi.ru\r\nreview.ivi.ru\r\nreview.k.avito.ru\r\nreview.s1.citilink.ru\r\nreview01e.cs-minitools01e.yandex.ru\r\nreview01f.cs-minitools01f.yandex.ru\r\nreview01h.cs-minitools01h.yandex.ru\r\nreview01ht.cs-minitools01ht.yandex.ru\r\nreviewdb01e-iva.yandex.ru\r\nreviewdb01e-vip.yandex.ru\r\nreviewdb01e.yandex.ru\r\nreviews.avito.ru\r\nreviews.project.tinkoff.ru\r\nreviews.yandex.ru\r\nrevista.avito.ru\r\nrevistas.avito.ru\r\nrevolution.avito.ru\r\nrevolution.lenta.ru\r\nrewards.avito.ru\r\nrews.avito.ru\r\nrex.avito.ru\r\nreyes.avito.ru\r\nreza.avito.ru\r\nrf-dev-noauth.kommersant.ru\r\nrf.avito.ru\r\nrf.gosuslugi.ru\r\nrf.minprom.gov.ru\r\nrf100reklama.mail.ru\r\nrf101reklama.mail.ru\r\nrf102reklama.mail.ru\r\nrf103reklama.mail.ru\r\nrf104reklama.mail.ru\r\nrf105reklama.mail.ru\r\nrf106reklama.mail.ru\r\nrf107reklama.mail.ru\r\nrf108reklama.mail.ru\r\nrf109reklama.mail.ru\r\nrf10reklama.mail.ru\r\nrf110reklama.mail.ru\r\nrf111reklama.mail.ru\r\nrf11reklama.mail.ru\r\nrf12reklama.mail.ru\r\nrf13reklama.mail.ru\r\nrf14reklama.mail.ru\r\nrf17reklama.mail.ru\r\nrf18reklama.mail.ru\r\nrf19reklama.mail.ru\r\nrf1reklama.mail.ru\r\nrf20reklama.mail.ru\r\nrf21reklama.mail.ru\r\nrf22reklama.mail.ru\r\nrf23reklama.mail.ru\r\nrf24reklama.mail.ru\r\nrf25reklama.mail.ru\r\nrf26reklama.mail.ru\r\nrf27reklama.mail.ru\r\nrf28reklama.mail.ru\r\nrf29reklama.mail.ru\r\nrf2reklama.mail.ru\r\nrf30reklama.mail.ru\r\nrf31reklama.mail.ru\r\nrf32reklama.mail.ru\r\nrf33reklama.mail.ru\r\nrf34reklama.mail.ru\r\nrf35reklama.mail.ru\r\nrf36reklama.mail.ru\r\nrf37reklama.mail.ru\r\nrf38reklama.mail.ru\r\nrf39reklama.mail.ru\r\nrf3reklama.mail.ru\r\nrf40reklama.mail.ru\r\nrf41reklama.mail.ru\r\nrf42reklama.mail.ru\r\nrf43reklama.mail.ru\r\nrf44reklama.mail.ru\r\nrf45reklama.mail.ru\r\nrf46reklama.mail.ru\r\nrf47reklama.mail.ru\r\nrf48reklama.mail.ru\r\nrf49reklama.mail.ru\r\nrf4reklama.mail.ru\r\nrf50reklama.mail.ru\r\nrf51reklama.mail.ru\r\nrf52reklama.mail.ru\r\nrf53reklama.mail.ru\r\nrf54reklama.mail.ru\r\nrf55reklama.mail.ru\r\nrf56reklama.mail.ru\r\nrf57reklama.mail.ru\r\nrf58reklama.mail.ru\r\nrf59reklama.mail.ru\r\nrf5reklama.mail.ru\r\nrf60reklama.mail.ru\r\nrf61reklama.mail.ru\r\nrf62reklama.mail.ru\r\nrf63reklama.mail.ru\r\nrf64reklama.mail.ru\r\nrf66reklama.mail.ru\r\nrf67reklama.mail.ru\r\nrf68reklama.mail.ru\r\nrf69reklama.mail.ru\r\nrf6reklama.mail.ru\r\nrf70reklama.mail.ru\r\nrf71reklama.mail.ru\r\nrf72reklama.mail.ru\r\nrf73reklama.mail.ru\r\nrf74reklama.mail.ru\r\nrf75reklama.mail.ru\r\nrf76reklama.mail.ru\r\nrf77reklama.mail.ru\r\nrf78reklama.mail.ru\r\nrf79reklama.mail.ru\r\nrf7reklama.mail.ru\r\nrf80reklama.mail.ru\r\nrf81reklama.mail.ru\r\nrf82reklama.mail.ru\r\nrf83reklama.mail.ru\r\nrf84reklama.mail.ru\r\nrf85reklama.mail.ru\r\nrf86reklama.mail.ru\r\nrf87reklama.mail.ru\r\nrf88reklama.mail.ru\r\nrf89reklama.mail.ru\r\nrf8reklama.mail.ru\r\nrf90reklama.mail.ru\r\nrf91reklama.mail.ru\r\nrf92reklama.mail.ru\r\nrf93reklama.mail.ru\r\nrf94reklama.mail.ru\r\nrf95reklama.mail.ru\r\nrf96reklama.mail.ru\r\nrf97reklama.mail.ru\r\nrf98reklama.mail.ru\r\nrf99reklama.mail.ru\r\nrf9reklama.mail.ru\r\nrfb-admin.rosbank.ru\r\nrfb-api.rosbank.ru\r\nrfb-new.rosbank.ru\r\nrfb-vote.gosuslugi.ru\r\nrfbo2reklama.mail.ru\r\nrfboreklama.mail.ru\r\nrfkoreklama.mail.ru\r\nrfr.agent.mail.ru\r\nrfs.stage.championat.com\r\nrg.avito.ru\r\nrg.gov.ru\r\nrgis.rk.gov.ru\r\nrgistest.rk.gov.ru\r\nrgn.gov.ru\r\nrgu.test.gosuslugi.ru\r\nrh.avito.ru\r\nrhea.avito.ru\r\nrhel5-tst1j.yandex.ru\r\nrhermod.open.ru\r\nrhino.avito.ru\r\nrhodes.avito.ru\r\nrhythm.avito.ru\r\nri.avito.ru\r\nri.meduza.io\r\nri4ikec56incovlwsrssynbaxk4.sdc.beeline.ru\r\nria.avito.ru\r\nriad.avito.ru\r\nrib.mail.ru\r\nribka.37.yandex.ru\r\nric.avito.ru\r\nric.consultant.ru\r\nricardo.avito.ru\r\nrice.avito.ru\r\nricette.avito.ru\r\nrich-newsletter.staging.meduza.io\r\nrich.avito.ru\r\nrichard.avito.ru\r\nrichmond.avito.ru\r\nrick.avito.ru\r\nricky.avito.ru\r\nriczv.consultant.ru\r\nrid.bplan.sev.gov.ru\r\nrid.minfin.rk.gov.ru\r\nrideofthemonth.avito.ru\r\nrides.avito.ru\r\nrief.sber.ru\r\nries.kino-teatr.ru\r\nriga.avito.ru\r\nrigel.avito.ru\r\nright.avito.ru\r\nriker.avito.ru\r\nrimap1.mail.ru\r\nrimap10.i.mail.ru\r\nrimap11.i.mail.ru\r\nrimap12.i.mail.ru\r\nrimap14.i.mail.ru\r\nrimap15.i.mail.ru\r\nrimap2.i.mail.ru\r\nrimap20.i.mail.ru\r\nrimap21.i.mail.ru\r\nrimap22.i.mail.ru\r\nrimap23.i.mail.ru\r\nrimap24.i.mail.ru\r\nrimap25.i.mail.ru\r\nrimap3.i.mail.ru\r\nrimap4.i.mail.ru\r\nrina.avito.ru\r\nrinfofish.mail.ru\r\nring.avito.ru\r\nringo.avito.ru\r\nringtones.avito.ru\r\nrinrin.avito.ru\r\nrio.avito.ru\r\nriot.avito.ru\r\nriot.mail.ru\r\nripe.avito.ru\r\nripley.avito.ru\r\nripley.film.ru\r\nrir.rosatom.ru\r\nris.avito.ru\r\nris.sakha.gov.ru\r\nrise-1437-www.k.avito.ru\r\nrise-1795-www.k.avito.ru\r\nrise.avito.ru\r\nrisingsun.avito.ru\r\nrisk.avito.ru\r\nrita.avito.ru\r\nritual.mos.ru\r\nritz.avito.ru\r\nriva.ixbt.com\r\nrival.avito.ru\r\nrive.avito.ru\r\nriver-3-301.rutube.ru\r\nriver-3-304.rutube.ru\r\nriver-5-513.rutube.ru\r\nriver-7-701.rutube.ru\r\nriver-7-702.rutube.ru\r\nriver.avito.ru\r\nriverside.avito.ru\r\nriza.avito.ru\r\nrizzo.avito.ru\r\nrk.avito.ru\r\nrk.gov.ru\r\nrk.megafon.ru\r\nrkka.lenta.ru\r\nrkm.rosatom.ru\r\nrkn.gov.ru\r\nrkn2019.rkn.gov.ru\r\nrko.alfabank.ru\r\nrkostyukov.ing.k8s.dev.ivi.ru\r\nrl.avito.ru\r\nrl.mail.ru\r\nrlc-rm.gosuslugi.ru\r\nrli.consultant.ru\r\nrltsmvdkgsvgevffjnfoqvirusu.sdc.beeline.ru\r\nrm.avito.ru\r\nrm.dm.alfabank.ru\r\nrm.kino-teatr.ru\r\nrm.mail.ru\r\nrm.sberbank.ru\r\nrma.avito.ru\r\nrma.beeline.ru\r\nrmail.avito.ru\r\nrmastat.beeline.ru\r\nrmc.avito.ru\r\nrmmorn.kino-teatr.ru\r\nrmq-dev.k8s.rg.ru\r\nrmq-stage.k8s.rg.ru\r\nrmq.k8s.rg.ru\r\nrmr-rating-prod.mdrive.magnit.ru\r\nrmr.mos.ru\r\nrmr1.avito.ru\r\nrms.avito.ru\r\nrms.beeline.ru\r\nrms.lenta.ru\r\nrms.mts.ru\r\nrms.sberbank.ru\r\nrms.tass.ru\r\nrms.tele2.ru\r\nrms2.avito.ru\r\nrmso.sberbank.ru\r\nrmspam1.mail.ru\r\nrmt.avito.ru\r\nrn.kino-teatr.ru\r\nrncb.credit-registry.nalog.ru\r\nrnd.avito.ru\r\nrnd.beeline.ru\r\nrnd.kommersant.ru\r\nrnd.mts.ru\r\nrnd.tinkoff.ru\r\nrnews.kp.ru\r\nrnh.open.ru\r\nrnh1.open.ru\r\nrnh2.open.ru\r\nrnh3.open.ru\r\nrnh4.open.ru\r\nrnh5.open.ru\r\nrnh6.open.ru\r\nrnhds.open.ru\r\nrnp.fas.gov.ru\r\nrns1.avito.ru\r\nrns2.avito.ru\r\nrnybul.gismeteo.ru\r\nro.avito.ru\r\nro.factoring.rshb.ru\r\nro.litres.ru\r\nro.mail.ru\r\nroa.avito.ru\r\nroad.sakha.gov.ru\r\nroadrunner.avito.ru\r\nroadtolima.worldbank.org\r\nroamer.avito.ru\r\nrob.avito.ru\r\nrobby.avito.ru\r\nrobert-sandbox.mtrs.yandex.ru\r\nrobert.avito.ru\r\nroberto.avito.ru\r\nrobin.avito.ru\r\nrobin.exseed.avito.ru\r\nrobo.avito.ru\r\nrobot.avito.ru\r\nrobot.litres.ru\r\nrobot.mos.ru\r\nrobotics.avito.ru\r\nrobotmon-ii.yandex.ru\r\nrobotmon.yandex.ru\r\nrobotmon3.yandex.ru\r\nrobots.vedomosti.ru\r\nroccoforte.vedomosti.ru\r\nroche.avito.ru\r\nrochester.avito.ru\r\nrock.avito.ru\r\nrocker.avito.ru\r\nrocket-chat.tutu.ru\r\nrocket.avito.ru\r\nrocket.ozon.ru\r\nrocket.youdo.com\r\nrocketchat-test.avito.ru\r\nrockon.avito.ru\r\nrocks.avito.ru\r\nrocky-mirror.rbc.ru\r\nrocky.avito.ru\r\nrod.avito.ru\r\nrodeo.avito.ru\r\nrodina.frontend-stage.k8s.rg.ru\r\nrodina.iz.ru\r\nrodina.kino-teatr.ru\r\nrodniki.kp.ru\r\nrodos-v.kommersant.ru\r\nrodrigo.avito.ru\r\nroeder.avito.ru\r\nroger.avito.ru\r\nrogers.avito.ru\r\nrogue.avito.ru\r\nrohan.avito.ru\r\nrohit.avito.ru\r\nroku.avito.ru\r\nroku.partner.dev.api.max.com\r\nroku.partner.int.api.max.com\r\nroku.partner.prd.api.max.com\r\nroku.partner.stg.api.max.com\r\nrol.avito.ru\r\nroland.avito.ru\r\nrolando.avito.ru\r\nroles.gosuslugi.ru\r\nroles.gslb.gosuslugi.ru\r\nrom.lemanapro.ru\r\nroma.avito.ru\r\nroman.avito.ru\r\nromance.avito.ru\r\nromania.avito.ru\r\nromanovy.tass.ru\r\nromans.avito.ru\r\nromantic.avito.ru\r\nrome.avito.ru\r\nromeo.avito.ru\r\nromi.avito.ru\r\nromu.test.euronews.com\r\nromulus.avito.ru\r\nron.avito.ru\r\nron.gosuslugi.ru\r\nronaldo.avito.ru\r\nrondo.avito.ru\r\nronny.avito.ru\r\nroo.avito.ru\r\nroom.avito.ru\r\nroom.beeline.ru\r\nroom.yandex.ru\r\nrooms.avito.ru\r\nrooster.avito.ru\r\nroot-ya1.yandex.ru\r\nroot-ya2.yandex.ru\r\nroot-ya3.yandex.ru\r\nroot.avito.ru\r\nroot.yandex.ru\r\nrootktv.rosatom.ru\r\nrootservers.avito.ru\r\nrosa.avito.ru\r\nrosafest.tele2.ru\r\nrosatom-trip.hh.ru\r\nrosavtodor.gov.ru\r\nrosbank.credit-registry.nalog.ru\r\nrose.avito.ru\r\nrose.ixbt.com\r\nrosebud.avito.ru\r\nrosemary.avito.ru\r\nrosenergo.feedback.rosatom.ru\r\nrosenergoatom.feedback.rosatom.ru\r\nrosetta.avito.ru\r\nrosgvard.consultant.ru\r\nrosie.avito.ru\r\nroskachestvo.gov.ru\r\nroskazna.consultant.ru\r\nrosleshoz.gov.ru\r\nrosneft-social.tass.ru\r\nrosneft.review-k8s.aif.ru\r\nrospatent.gov.ru\r\nrospo.garant.ru\r\nrosprofzhel.rzd.ru\r\nrosresurs.1.yandex.ru\r\nross.avito.ru\r\nrossi.avito.ru\r\nrossvyaz.gov.ru\r\nrostelecom.interfax.ru\r\nrostki-kviz2024.tass.ru\r\nrostokino.mos.ru\r\nrostov-na-donu.beeline.ru\r\nrostov-na-donu.club.dns-shop.ru\r\nrostov-na-donu.dns-shop.ru\r\nrostov-on-don.openbank.ru\r\nrostov.aif.ru\r\nrostov.alfabank.ru\r\nrostov.avito.ru\r\nrostov.beeline.ru\r\nrostov.dev.kp.ru\r\nrostov.drom.ru\r\nrostov.fas.gov.ru\r\nrostov.hh.ru\r\nrostov.home.megafon.ru\r\nrostov.kommersant.ru\r\nrostov.kp.ru\r\nrostov.lemanapro.ru\r\nrostov.mk.ru\r\nrostov.shop.megafon.ru\r\nrostov.tele2.ru\r\nrostov.views.tele2.ru\r\nrostov1.companion.tele2.ru\r\nrostovnadonu.babyblog.ru\r\nrostrade.rosbank.ru\r\nrotor.avito.ru\r\nrouble2.yandex.ru\r\nrougepurcouture.afisha.ru\r\nroundcube.avito.ru\r\nroute-maps.yandex.ru\r\nrouter-b.avito.ru\r\nrouter-h.avito.ru\r\nrouter-quality.maps.yandex.ru\r\nrouter.api-maps.yandex.ru\r\nrouter.avito.ru\r\nrouter.economy.gov.ru\r\nrouter1.avito.ru\r\nrouter11v06.zdv.avito.ru\r\nrouter2.avito.ru\r\nrouternet.avito.ru\r\nroutingcompilerpass.test.euronews.com\r\nrovenkiadm.gosuslugi.ru\r\nrover.avito.ru\r\nrow.net.ixbt.com\r\nroxy.avito.ru\r\nroy.avito.ru\r\nroyal.avito.ru\r\nroza.avito.ru\r\nrp-demo.mts.ru\r\nrp.avito.ru\r\nrp.businessconf.sber.ru\r\nrp.kino-teatr.ru\r\nrp.rshb.ru\r\nrp1ci30.worldbank.org\r\nrp2ci30.worldbank.org\r\nrpc.avito.ru\r\nrpc.citilink.ru\r\nrpf1.mail.ru\r\nrpf2.mail.ru\r\nrpf3.mail.ru\r\nrpf4.mail.ru\r\nrpf5.mail.ru\r\nrpg.avito.ru\r\nrpl.project.tinkoff.ru\r\nrpm.avito.ru\r\nrpmfusion-mirror.rbc.ru\r\nrpmfusion-mirror01.rbc.ru\r\nrpn.72.yandex.ru\r\nrpn.gov.ru\r\nrpncov3pgbjhbdmdo6twxfbaasy.sdc.beeline.ru\r\nrpo.tomsk.gov.ru\r\nrpp.mos.ru\r\nrproxy.avito.ru\r\nrps.avito.ru\r\nrq.avito.ru\r\nrqponmlkjihgfedcbastash-3.avito.ru\r\nrr-appweb.broker.vtb.ru\r\nrr-ibrb.test.vtb.ru\r\nrr-invest.vtb.ru\r\nrr-mbrb.test.vtb.ru\r\nrr-online.test.vtb.ru\r\nrr-pay-test.vtb.ru\r\nrr.app.vtb.ru\r\nrr.avito.ru\r\nrr.db-test.vtb.ru\r\nrr1.avito.ru\r\nrrd.avito.ru\r\nrrdg.factoring.rshb.ru\r\nrrhh.avito.ru\r\nrrr.avito.ru\r\nrrt23.mail.ru\r\nrru.worldbank.org\r\nrs.avito.ru\r\nrs.gov.ru\r\nrs.mail.ru\r\nrs.premier.one\r\nrs1.avito.ru\r\nrs2.avito.ru\r\nrs2.premier.one\r\nrs3.avito.ru\r\nrsa.avito.ru\r\nrsa.gosuslugi.ru\r\nrsaservice.beeline.ru\r\nrsass.beeline.ru\r\nrsb.openbank.ru\r\nrsc.avito.ru\r\nrsf1.mail.ru\r\nrshb.credit-registry.nalog.ru\r\nrsi.beeline.ru\r\nrsis.afro.who.int\r\nrsl.vtb.ru\r\nrsm-dcs.mos.ru\r\nrsm.avito.ru\r\nrsp.tele2.ru\r\nrss-tr.prod.scw01.meduza.io\r\nrss.avito.ru\r\nrss.prod.scw01.meduza.io\r\nrss.zdorovie-shkolnika.spb.aif.ru\r\nrss0.avito.ru\r\nrss2.avito.ru\r\nrsso.magnit.ru\r\nrst.avito.ru\r\nrst.gov.ru\r\nrstatic.citilink.ru\r\nrsupport.corp.mail.ru\r\nrsvp.avito.ru\r\nrsync.avito.ru\r\nrsync1.avito.ru\r\nrsync2.avito.ru\r\nrt-upload0.tass.ru\r\nrt-upload1.tass.ru\r\nrt.avito.ru\r\nrt.banki.ru\r\nrt.council.gov.ru\r\nrt1.avito.ru\r\nrt2c.megafon.ru\r\nrt677387hhd8.meduza.io\r\nrta.avito.ru\r\nrtb.beeline.ru\r\nrtb.mts.ru\r\nrtc.avito.ru\r\nrtcm.corp.t2.ru\r\nrtg.avito.ru\r\nrti.avito.ru\r\nrtkchild.litres.ru\r\nrtmp.avito.ru\r\nrtp.avito.ru\r\nrtpclientim.avito.ru\r\nrtpete.avito.ru\r\nrtpeteim.avito.ru\r\nrtpim.avito.ru\r\nrtpqa.avito.ru\r\nrtpqaim.avito.ru\r\nrtr-oa.ohx.avito.ru\r\nrtr-xa.ohx.avito.ru\r\nrtr-xb.ohx.avito.ru\r\nrtr.avito.ru\r\nrts.avito.ru\r\nrtu.spb.mts.ru\r\nrtwt1.mail.ru\r\nrtwt2.mail.ru\r\nrtx.avito.ru\r\nru-cheladm-0.yandex.ru\r\nru-magmfc-0.yandex.ru\r\nru-msk-dtl-cmse1.openbank.ru\r\nru-msk-dtl-expe.open.ru\r\nru-msk-dtl-expe1.open.ru\r\nru-msk-dtl-expe2.open.ru\r\nru.1a-b.yandex.ru\r\nru.38gr.yandex.ru\r\nru.60500.yandex.ru\r\nru.avito.ru\r\nru.euronews.com\r\nru.kino-teatr.ru\r\nru.livingit.euronews.com\r\nru.tele2.ru\r\nru.www.babyblog.ru\r\nruanda.mail.ru\r\nruawww.avito.ru\r\nruben.avito.ru\r\nrubtsovsk.dns-shop.ru\r\nruby.avito.ru\r\nruby.m24.ru\r\nrucert.open.ru\r\nrudolf.avito.ru\r\nrudy.avito.ru\r\nrugby.avito.ru\r\nrugby.sport.mos.ru\r\nrugrad.eu.2012.yandex.ru\r\nrum.dzen.ru\r\nrumba.avito.ru\r\nrumba.mail.ru\r\nrumskapp000.open.ru\r\nrumskapp01.open.ru\r\nrumskapt241.open.ru\r\nrumskapt273.open.ru\r\nrumskapt526.open.ru\r\nrumskdct000.open.ru\r\nrumskdct002.open.ru\r\nrumskxcp001.open.ru\r\nrumskxcp002.open.ru\r\nrumskxcp003.open.ru\r\nrumskxcp004.open.ru\r\nrun-domain.kino-teatr.ru\r\nrun.avito.ru\r\nrune.avito.ru\r\nrunet-25.tass.ru\r\nrunet.metrika.yandex.ru\r\nrunner.avito.ru\r\nrunning.avito.ru\r\nrunswf.kino-teatr.ru\r\nruntime-digital-automation.t2.ru\r\nrur.beeline.ru\r\nruru.avito.ru\r\nrus.avito.ru\r\nrusal.life.ru\r\nruscorpora.yandex.ru\r\nrusel.24.yandex.ru\r\nrusfond.kommersant.ru\r\nrush.avito.ru\r\nrush.vtb.ru\r\nrusinvestforum.bizconf.rbc.ru\r\nrusnarbank.credit-registry.nalog.ru\r\nrussia.avito.ru\r\nrussia.mail.ru\r\nrussia.sber.ru\r\nrussia2016.tass.ru\r\nrussiachanges.lenta.ru\r\nrussian-divorce.9111.ru\r\nrussian.avito.ru\r\nrussian.iz.ru\r\nrussianpost.consultant.ru\r\nrusskoe-more.iz.ru\r\nrustone.1.yandex.ru\r\nrustories.sber.ru\r\nrustowers.demo.megafon.ru\r\nrusty.avito.ru\r\nruwwwi.irecommend.ru\r\nruwwwi.irecommend.ruruwwwi.irecommend.ru\r\nruzpu.mchs.gov.ru\r\nruzpu.mchs.ru\r\nruzpu.organizations.mchs.gov.ru\r\nrv.avito.ru\r\nrver.kino-teatr.ru\r\nrvice.kino-teatr.ru\r\nrvices.kino-teatr.ru\r\nrw.avito.ru\r\nrwhois.avito.ru\r\nrwpbb.ixbt.com\r\nrwxy.avito.ru\r\nrx.avito.ru\r\nryan.avito.ru\r\nryazan.avito.ru\r\nryazan.beeline.ru\r\nryazan.dev.kp.ru\r\nryazan.dns-shop.ru\r\nryazan.hh.ru\r\nryazan.kp.ru\r\nryazan.lemanapro.ru\r\nryazan.mts.ru\r\nryazan.tele2.ru\r\nryazan.tutu.ru\r\nryder.avito.ru\r\nryerson.kino-teatr.ru\r\nryzen-promo.eldorado.ru\r\nrz.avito.ru\r\nrzd-cggw.asis.rzd.ru\r\nrzd-cms.css.rzd.ru\r\nrzd-cmsplus-m01.css.rzd.ru\r\nrzd-expe-m01.css.rzd.ru\r\nrzd-expe-m02.css.rzd.ru\r\nrzd-expe-m03.css.rzd.ru\r\nrzd-expe-m04.css.rzd.ru\r\nrzd-expe-m05.css.rzd.ru\r\nrzd-expe-m06.css.rzd.ru\r\nrzd-expe-m07.css.rzd.ru\r\nrzd-expe-m08.css.rzd.ru\r\nrzd-expe-m09.css.rzd.ru\r\nrzd-expe-m10.css.rzd.ru\r\nrzd-expe-m11.css.rzd.ru\r\nrzd-expe-m12.css.rzd.ru\r\nrzd-mail-test.rzd.ru\r\nrzd.expe-cl01.css.rzd.ru\r\nrzd.expe-cl02.css.rzd.ru\r\nrzd.rosbank.ru\r\nrzdhistory.tass.ru\r\nrzn.dev.home.megafon.ru\r\nrzn.mk.ru\r\nrzn.shop.megafon.ru\r\ns-a.vtb.ru\r\ns-a2.vtb.ru\r\ns-agami.vedomosti.ru\r\ns-corporate.mkb.ru\r\ns-invest.mkb.ru\r\ns-ir.mkb.ru\r\ns-novim-godom-2022.tass.ru\r\ns-posad.mts.ru\r\ns.2009.yandex.ru\r\ns.8899.yandex.ru\r\ns.9111.ru\r\ns.afisha.ru\r\ns.amigo.mail.ru\r\ns.auto.drom.ru\r\ns.avito.ru\r\ns.beeline.ru\r\ns.bo-test.vtb.ru\r\ns.dns-shop.ru\r\ns.esm.apteka.ru\r\ns.front.lenta.ru\r\ns.h.02.yandex.ru\r\ns.icdn.lenta.ru\r\ns.ivi.ru\r\ns.kino-teatr.ru\r\ns.kinopoisk.ru\r\ns.lenta.ru\r\ns.m24.ru\r\ns.mdm.beeline.ru\r\ns.mts.ru\r\ns.mvideo.ru\r\ns.online-alpha.vtb.ru\r\ns.online-beta.vtb.ru\r\ns.online.if.vtb.ru\r\ns.online.vtb.ru\r\ns.rambler.ru\r\ns.sber.ru\r\ns.sberbank-ru.os-prom.sberbank.ru\r\ns.sberbank-ru.os-psi.sberbank.ru\r\ns.sberbank.ru\r\ns.sputnik.mail.ru\r\ns.teams.infra.rbc.ru\r\ns.tele2.ru\r\ns.travel.megafon.ru\r\ns.tutu.ru\r\ns.vtb.ru\r\ns.youdo.com\r\ns0.avito.ru\r\ns01.avito.ru\r\ns01.ns-split.infra.rbc.ru\r\ns01.test2.data.finance.rbc.ru\r\ns02.avito.ru\r\ns02.ldap.infra.rbc.ru\r\ns02.pics.v6.bo.rbc.ru\r\ns03.avito.ru\r\ns03.ldap.infra.rbc.ru\r\ns04.avito.ru\r\ns05.avito.ru\r\ns06.avito.ru\r\ns08.ldap.infra.rbc.ru\r\ns1.afisha.ru\r\ns1.age.lenta.ru\r\ns1.api.lenta.ru\r\ns1.assets.lenta.ru\r\ns1.auto.drom.ru\r\ns1.avito.ru\r\ns1.cdn.lenta.ru\r\ns1.citilink.ru\r\ns1.cloud.lenta.ru\r\ns1.dom.lenta.ru\r\ns1.dove.lenta.ru\r\ns1.ed.lenta.ru\r\ns1.icdn.lenta.ru\r\ns1.img.lenta.ru\r\ns1.m.lenta.ru\r\ns1.yandex.ru\r\ns10.avito.ru\r\ns10.vk.com\r\ns100.avito.ru\r\ns100.vk.com\r\ns101.avito.ru\r\ns1012.avito.ru\r\ns102.avito.ru\r\ns103.avito.ru\r\ns104.avito.ru\r\ns105.avito.ru\r\ns106.avito.ru\r\ns107.avito.ru\r\ns108.avito.ru\r\ns109.avito.ru\r\ns11.avito.ru\r\ns110.avito.ru\r\ns110.vk.com\r\ns1103.avito.ru\r\ns111.avito.ru\r\ns112.avito.ru\r\ns113.avito.ru\r\ns114.avito.ru\r\ns115.avito.ru\r\ns116.avito.ru\r\ns117.avito.ru\r\ns118.avito.ru\r\ns119.avito.ru\r\ns12.avito.ru\r\ns12.ldap.infra.rbc.ru\r\ns120.avito.ru\r\ns120.vk.com\r\ns121.avito.ru\r\ns122.avito.ru\r\ns123.avito.ru\r\ns124.avito.ru\r\ns125.avito.ru\r\ns126.avito.ru\r\ns127.avito.ru\r\ns128.avito.ru\r\ns129.avito.ru\r\ns13.avito.ru\r\ns13.ldap.infra.rbc.ru\r\ns130.avito.ru\r\ns130.vk.com\r\ns131.avito.ru\r\ns132.avito.ru\r\ns133.avito.ru\r\ns134.avito.ru\r\ns135.avito.ru\r\ns136.avito.ru\r\ns137.avito.ru\r\ns138.avito.ru\r\ns139.avito.ru\r\ns14.avito.ru\r\ns140.avito.ru\r\ns140.vk.com\r\ns141.avito.ru\r\ns142.avito.ru\r\ns143.avito.ru\r\ns144.avito.ru\r\ns15.avito.ru\r\ns153.avito.ru\r\ns155.avito.ru\r\ns156.avito.ru\r\ns157.avito.ru\r\ns158.avito.ru\r\ns159.avito.ru\r\ns16.avito.ru\r\ns167.avito.ru\r\ns169.avito.ru\r\ns17.avito.ru\r\ns173.avito.ru\r\ns175.avito.ru\r\ns176.avito.ru\r\ns18.avito.ru\r\ns185.avito.ru\r\ns186.avito.ru\r\ns19.avito.ru\r\ns190.avito.ru\r\ns2.afisha.ru\r\ns2.age.lenta.ru\r\ns2.api.lenta.ru\r\ns2.assets.lenta.ru\r\ns2.auto.drom.ru\r\ns2.avito.ru\r\ns2.cdn.lenta.ru\r\ns2.citilink.ru\r\ns2.cloud.lenta.ru\r\ns2.dns-shop.ru\r\ns2.dom.lenta.ru\r\ns2.dove.lenta.ru\r\ns2.ed.lenta.ru\r\ns2.icdn.lenta.ru\r\ns2.images.drive2.ru\r\ns2.img.lenta.ru\r\ns2.m.lenta.ru\r\ns2.online-alpha.vtb.ru\r\ns2.online.if.vtb.ru\r\ns2.online.vtb.ru\r\ns2.vtb.ru\r\ns2.zvuk.rambler.ru\r\ns20.avito.ru\r\ns20.vk.com\r\ns200.avito.ru\r\ns200.vk.com\r\ns201.avito.ru\r\ns202.avito.ru\r\ns203.avito.ru\r\ns204.avito.ru\r\ns205.avito.ru\r\ns206.avito.ru\r\ns207.avito.ru\r\ns208.avito.ru\r\ns209.avito.ru\r\ns21.avito.ru\r\ns210.avito.ru\r\ns210.vk.com\r\ns211.avito.ru\r\ns212.avito.ru\r\ns213.avito.ru\r\ns214.avito.ru\r\ns215.avito.ru\r\ns216.avito.ru\r\ns217.avito.ru\r\ns218.avito.ru\r\ns219.avito.ru\r\ns22.avito.ru\r\ns220.avito.ru\r\ns220.vk.com\r\ns221.avito.ru\r\ns222.avito.ru\r\ns223.avito.ru\r\ns224.avito.ru\r\ns225.avito.ru\r\ns226.avito.ru\r\ns227.avito.ru\r\ns228.avito.ru\r\ns229.avito.ru\r\ns23.avito.ru\r\ns230.avito.ru\r\ns231.avito.ru\r\ns232.avito.ru\r\ns233.avito.ru\r\ns234.avito.ru\r\ns235.avito.ru\r\ns236.avito.ru\r\ns237.avito.ru\r\ns238.avito.ru\r\ns239.avito.ru\r\ns24.avito.ru\r\ns240.avito.ru\r\ns240.vk.com\r\ns241.avito.ru\r\ns242.avito.ru\r\ns25.avito.ru\r\ns253.avito.ru\r\ns26.avito.ru\r\ns27.avito.ru\r\ns28.avito.ru\r\ns29.avito.ru\r\ns3-2.net.ixbt.com\r\ns3-3.net.ixbt.com\r\ns3-cdn.net.ixbt.com\r\ns3-console.net.ixbt.com\r\ns3-endpoint.sss-msk1.x5.ru\r\ns3-endpoint.sss-msk2.x5.ru\r\ns3-endpoint.sss-spb1.x5.ru\r\ns3-endpoint.sss2-msk2.x5.ru\r\ns3-msk.tinkoff.ru\r\ns3-mvp.ec.mts.ru\r\ns3-new.net.ixbt.com\r\ns3-region1.sss.x5.ru\r\ns3-website-msk.tinkoff.ru\r\ns3-website.tinkoff.ru\r\ns3.afisha.ru\r\ns3.api.lenta.ru\r\ns3.auto.drom.ru\r\ns3.avito.ru\r\ns3.avntg-02.cloud.mts.ru\r\ns3.avntg-03.cloud.mts.ru\r\ns3.avntg-04.cloud.mts.ru\r\ns3.cloud.mts.ru\r\ns3.cs.ixbt.com\r\ns3.dns-shop.ru\r\ns3.domofon.mts.ru\r\ns3.ec.mts.ru\r\ns3.images.drive2.ru\r\ns3.ipoteka.alfabank.ru\r\ns3.mail.ru\r\ns3.net.ixbt.com\r\ns3.online.if.vtb.ru\r\ns3.push.mail.ru\r\ns3.sberhelp.sber.ru\r\ns3.t2.ru\r\ns3.tech.vk.com\r\ns3.tele2.ru\r\ns3.tinkoff.ru\r\ns30.avito.ru\r\ns30.vk.com\r\ns31.avito.ru\r\ns32.avito.ru\r\ns33.avito.ru\r\ns34.avito.ru\r\ns35.avito.ru\r\ns3506004.gosuslugi.ru\r\ns3511027.gosuslugi.ru\r\ns36.avito.ru\r\ns36mur.gosuslugi.ru\r\ns37.avito.ru\r\ns38.avito.ru\r\ns39.avito.ru\r\ns3c.net.ixbt.com\r\ns3console.net.ixbt.com\r\ns3d.t2.ru\r\ns3dc3.t2.ru\r\ns3dc4.t2.ru\r\ns3push.mail.ru\r\ns3r9.1van0v.yandex.ru\r\ns4.afisha.ru\r\ns4.api.lenta.ru\r\ns4.auto.drom.ru\r\ns4.avito.ru\r\ns4.images.drive2.ru\r\ns40.avito.ru\r\ns40.vk.com\r\ns41.avito.ru\r\ns42.avito.ru\r\ns4242.avito.ru\r\ns43.avito.ru\r\ns4357.avito.ru\r\ns44.avito.ru\r\ns45.avito.ru\r\ns46.avito.ru\r\ns47.avito.ru\r\ns48.avito.ru\r\ns49.avito.ru\r\ns5.afisha.ru\r\ns5.auto.drom.ru\r\ns5.avito.ru\r\ns50.avito.ru\r\ns51.avito.ru\r\ns52.avito.ru\r\ns53.avito.ru\r\ns54.avito.ru\r\ns55.avito.ru\r\ns56.avito.ru\r\ns57.avito.ru\r\ns58.avito.ru\r\ns59.avito.ru\r\ns5o.sports.ru\r\ns6.auto.drom.ru\r\ns6.avito.ru\r\ns62.avito.ru\r\ns63.avito.ru\r\ns64.avito.ru\r\ns65.avito.ru\r\ns66.avito.ru\r\ns67.avito.ru\r\ns68.avito.ru\r\ns7.auto.drom.ru\r\ns7.avito.ru\r\ns72.avito.ru\r\ns73.avito.ru\r\ns74.avito.ru\r\ns76.avito.ru\r\ns77.avito.ru\r\ns78.avito.ru\r\ns7rkk3eplqkngly.nqzwec0eohzuxit7.www.rostelecom.oren.aif.ru\r\ns8.auto.drom.ru\r\ns8.avito.ru\r\ns9.auto.drom.ru\r\ns9.avito.ru\r\nsa.avito.ru\r\nsa.khv.gov.ru\r\nsa.online.sberbank.ru\r\nsa01.cts01.rosatom.ru\r\nsa01.cts02.rosatom.ru\r\nsa01.cts03.rosatom.ru\r\nsa01.cts05.rosatom.ru\r\nsa01.cts08.rosatom.ru\r\nsa01.cts09.rosatom.ru\r\nsa01.cts10.rosatom.ru\r\nsa01.dcts03.rosatom.ru\r\nsa01.tcts01.rosatom.ru\r\nsa01.tcts02.rosatom.ru\r\nsa02.cts01.rosatom.ru\r\nsa02.cts02.rosatom.ru\r\nsa02.cts03.rosatom.ru\r\nsa02.cts05.rosatom.ru\r\nsa02.cts08.rosatom.ru\r\nsa02.cts09.rosatom.ru\r\nsa02.cts10.rosatom.ru\r\nsa02.dcts03.rosatom.ru\r\nsa02.tcts01.rosatom.ru\r\nsa02.tcts02.rosatom.ru\r\nsa03.cts01.rosatom.ru\r\nsa03.cts02.rosatom.ru\r\nsa03.cts03.rosatom.ru\r\nsa03.cts05.rosatom.ru\r\nsa03.cts08.rosatom.ru\r\nsa03.cts09.rosatom.ru\r\nsa03.cts10.rosatom.ru\r\nsa03.dcts03.rosatom.ru\r\nsa03.tcts01.rosatom.ru\r\nsa03.tcts02.rosatom.ru\r\nsa04.cts01.rosatom.ru\r\nsa04.cts02.rosatom.ru\r\nsa04.cts03.rosatom.ru\r\nsa04.cts05.rosatom.ru\r\nsa04.cts08.rosatom.ru\r\nsa04.cts09.rosatom.ru\r\nsa04.cts10.rosatom.ru\r\nsa04.dcts03.rosatom.ru\r\nsa04.tcts01.rosatom.ru\r\nsa04.tcts02.rosatom.ru\r\nsa05.cts01.rosatom.ru\r\nsa05.cts02.rosatom.ru\r\nsa05.cts03.rosatom.ru\r\nsa05.cts05.rosatom.ru\r\nsa05.cts08.rosatom.ru\r\nsa05.cts09.rosatom.ru\r\nsa05.cts10.rosatom.ru\r\nsa05.dcts03.rosatom.ru\r\nsa05.tcts01.rosatom.ru\r\nsa05.tcts02.rosatom.ru\r\nsa06.cts01.rosatom.ru\r\nsa06.cts02.rosatom.ru\r\nsa06.cts03.rosatom.ru\r\nsa06.cts05.rosatom.ru\r\nsa06.cts08.rosatom.ru\r\nsa06.cts09.rosatom.ru\r\nsa06.cts10.rosatom.ru\r\nsa06.tcts01.rosatom.ru\r\nsa07.cts01.rosatom.ru\r\nsa07.cts02.rosatom.ru\r\nsa07.cts03.rosatom.ru\r\nsa07.cts05.rosatom.ru\r\nsa07.cts08.rosatom.ru\r\nsa07.cts09.rosatom.ru\r\nsa07.cts10.rosatom.ru\r\nsa07.tcts01.rosatom.ru\r\nsa08.cts01.rosatom.ru\r\nsa08.cts02.rosatom.ru\r\nsa08.cts03.rosatom.ru\r\nsa08.cts05.rosatom.ru\r\nsa08.cts08.rosatom.ru\r\nsa08.cts09.rosatom.ru\r\nsa08.cts10.rosatom.ru\r\nsa08.tcts01.rosatom.ru\r\nsa09.cts01.rosatom.ru\r\nsa09.cts02.rosatom.ru\r\nsa09.cts03.rosatom.ru\r\nsa09.cts05.rosatom.ru\r\nsa09.cts08.rosatom.ru\r\nsa09.cts09.rosatom.ru\r\nsa09.cts10.rosatom.ru\r\nsa09.tcts01.rosatom.ru\r\nsa1.avito.ru\r\nsa10.cts01.rosatom.ru\r\nsa10.cts02.rosatom.ru\r\nsa10.cts03.rosatom.ru\r\nsa10.cts05.rosatom.ru\r\nsa10.cts08.rosatom.ru\r\nsa10.cts09.rosatom.ru\r\nsa10.cts10.rosatom.ru\r\nsa10.tcts01.rosatom.ru\r\nsa2.avito.ru\r\nsa6a.1980.yandex.ru\r\nsaa.avito.ru\r\nsaas.avito.ru\r\nsaas2.azuremsk.cloudapp.ec.mts.ru\r\nsab.avito.ru\r\nsaba.avito.ru\r\nsaber.avito.ru\r\nsable.avito.ru\r\nsabrina.avito.ru\r\nsac.avito.ru\r\nsachin.avito.ru\r\nsacramento.avito.ru\r\nsacs.avito.ru\r\nsad.avito.ru\r\nsadanbekov.9111.ru\r\nsae.avito.ru\r\nsaeguide.worldbank.org\r\nsafa.avito.ru\r\nsafari.avito.ru\r\nsafari.magnit.ru\r\nsafe-mode.t2.ru\r\nsafe-mode.tele2.ru\r\nsafe.avito.ru\r\nsafe.dns.yandex.ru\r\nsafe.mts.ru\r\nsafe.yandex.ru\r\nsafe1.yandex.ru\r\nsafe2.yandex.ru\r\nsafebd.megafon.ru\r\nsafeclick.alfabank.ru\r\nsafedns-test-common.yandex.ru\r\nsafein.avito.ru\r\nsafemobile.tbank.ru\r\nsafemobile.tinkoff.ru\r\nsafephone.tass.ru\r\nsafer.avito.ru\r\nsafety.avito.ru\r\nsafety.tinkoff.ru\r\nsafety.yandex.ru\r\nsaffron.avito.ru\r\nsafronov.vysotsky.tass.ru\r\nsag.21.yandex.ru\r\nsaga.avito.ru\r\nsagan.avito.ru\r\nsagar.avito.ru\r\nsage.avito.ru\r\nsage2.mail.ru\r\nsagitta.avito.ru\r\nsagittarius.1977.yandex.ru\r\nsagittarius.avito.ru\r\nsahalin.fas.gov.ru\r\nsahara.avito.ru\r\nsahil.avito.ru\r\nsaid.avito.ru\r\nsaigon.avito.ru\r\nsailing.avito.ru\r\nsailor.avito.ru\r\nsails.iz.ru\r\nsaint.avito.ru\r\nsajan.avito.ru\r\nsakai.avito.ru\r\nsakh.mts.ru\r\nsakha.dev.home.megafon.ru\r\nsakha.fas.gov.ru\r\nsakha.gov.ru\r\nsakha.mts.ru\r\nsakha.shop.megafon.ru\r\nsakhalin.aif.ru\r\nsakhalin.gov.ru\r\nsakhalin.kp.ru\r\nsakhalin.tele2.ru\r\nsakhokb.gosuslugi.ru\r\nsakura.avito.ru\r\nsal.avito.ru\r\nsala.avito.ru\r\nsalad.avito.ru\r\nsaladbattle.daily.afisha.ru\r\nsalah.avito.ru\r\nsalam-2-9.rutube.ru\r\nsalam.avito.ru\r\nsalama.avito.ru\r\nsalary.avito.ru\r\nsalavat.dns-shop.ru\r\nsalavat.timerbaev.84.yandex.ru\r\nsaldykel.sakha.gov.ru\r\nsale.avito.ru\r\nsale.megafon.ru\r\nsalekhard.lemanapro.ru\r\nsalem.avito.ru\r\nsales.avito.ru\r\nsales.vgtrk.com\r\nsales.yandex.ru\r\nsalesforce.avito.ru\r\nsalim.avito.ru\r\nsalina.avito.ru\r\nsalix.avito.ru\r\nsally.avito.ru\r\nsalman.avito.ru\r\nsalon.avito.ru\r\nsalon.megafon.ru\r\nsalsa.avito.ru\r\nsalsa.mail.ru\r\nsalsk.home.megafon.ru\r\nsalt.avito.ru\r\nsalt.ren.tv\r\nsalt.x5.ru\r\nsalud.avito.ru\r\nsalute.online.sberbank.ru\r\nsalute.sber.ru\r\nsalvadorschoolsurvey.worldbank.org\r\nsam.avito.ru\r\nsama.avito.ru\r\nsaman.avito.ru\r\nsamar.avito.ru\r\nsamara.afisha.ru\r\nsamara.aif.ru\r\nsamara.avito.ru\r\nsamara.babyblog.ru\r\nsamara.dev.kp.ru\r\nsamara.dns-shop.ru\r\nsamara.drom.ru\r\nsamara.fas.gov.ru\r\nsamara.hh.ru\r\nsamara.home.megafon.ru\r\nsamara.kp.ru\r\nsamara.lemanapro.ru\r\nsamara.m.dns-shop.ru\r\nsamara.mk.ru\r\nsamara.mts.ru\r\nsamara.openbank.ru\r\nsamara.tele2.ru\r\nsamba.avito.ru\r\nsamba.mail.ru\r\nsamer.avito.ru\r\nsametime.avito.ru\r\nsamho.avito.ru\r\nsami.avito.ru\r\nsamizdat.production.meduza.io\r\nsamizdat.staging.meduza.io\r\nsammy.avito.ru\r\nsamokat.youdo.com\r\nsamopogruzchik.74.yandex.ru\r\nsamp.avito.ru\r\nsample.avito.ru\r\nsamples.avito.ru\r\nsamson.avito.ru\r\nsamsonov.ing.k8s.dev.ivi.ru\r\nsamsung.avito.ru\r\nsamsungvideo.afisha.ru\r\nsamuel.avito.ru\r\nsamurai.avito.ru\r\nsan-sebastyan.kinofestivali.tass.ru\r\nsan.avito.ru\r\nsana.avito.ru\r\nsanantonio.avito.ru\r\nsanat.avito.ru\r\nsanatate.avito.ru\r\nsancho.avito.ru\r\nsanctions.lenta.ru\r\nsanctuary.avito.ru\r\nsand.avito.ru\r\nsand.yandex.ru\r\nsandbox-api.games.rambler.ru\r\nsandbox-emp-office.sberbank.ru\r\nsandbox-istio.yc.mvideo.ru\r\nsandbox-office.sberbank.ru\r\nsandbox.alfabank.ru\r\nsandbox.api.maps.yandex.ru\r\nsandbox.avito.ru\r\nsandbox.bluedata.ec.mts.ru\r\nsandbox.display.yandex.ru\r\nsandbox.games.rambler.ru\r\nsandbox.ivi.ru\r\nsandbox.kino-teatr.ru\r\nsandbox.megafon.ru\r\nsandbox.pay.yandex.ru\r\nsandbox.ssp.rambler.ru\r\nsandbox.tech.mvideo.ru\r\nsandbox.toloka.yandex.ru\r\nsandbox.vtb.ru\r\nsandbox.weather.rambler.ru\r\nsandbox.ya.mvideo.ru\r\nsandbox1.avito.ru\r\nsandbox2.avito.ru\r\nsandboxtest.beeline.ru\r\nsandiego.avito.ru\r\nsandra.avito.ru\r\nsandy.avito.ru\r\nsanfrancisco.avito.ru\r\nsangels.mail.ru\r\nsangsang.avito.ru\r\nsanta.avito.ru\r\nsanta.tele2.ru\r\nsantabarbara.avito.ru\r\nsantafe.avito.ru\r\nsantander.avito.ru\r\nsante.avito.ru\r\nsantiago.avito.ru\r\nsantosh.avito.ru\r\nsanya.1998.74rus.yandex.ru\r\nsao.avito.ru\r\nsao.dsmp.mos.ru\r\nsap-learning.tele2.ru\r\nsap.alfabank.ru\r\nsap.avito.ru\r\nsap.vedomosti.ru\r\nsap.worldbank.org\r\nsaphrq.open.ru\r\nsapi.avito.ru\r\nsapphire.avito.ru\r\nsapphire.pet-project.habr.com\r\nsapporo.avito.ru\r\nsaprouter.avito.ru\r\nsapsan.tutu.ru\r\nsapsso.worldbank.org\r\nsapssoext.worldbank.org\r\nsapssoexttrn.worldbank.org\r\nsar.auth.sber.ru\r\nsar.avito.ru\r\nsar.developer.sber.ru\r\nsara.avito.ru\r\nsarah.avito.ru\r\nsaransk.avito.ru\r\nsaransk.lemanapro.ru\r\nsarapul.dns-shop.ru\r\nsaratov.alfabank.ru\r\nsaratov.avito.ru\r\nsaratov.babyblog.ru\r\nsaratov.beeline.ru\r\nsaratov.demo.megafon.ru\r\nsaratov.dev.home.megafon.ru\r\nsaratov.dev.kp.ru\r\nsaratov.dns-shop.ru\r\nsaratov.drom.ru\r\nsaratov.fas.gov.ru\r\nsaratov.gov.ru\r\nsaratov.hh.ru\r\nsaratov.kp.ru\r\nsaratov.lemanapro.ru\r\nsaratov.mts.ru\r\nsaratov.shop.megafon.ru\r\nsaratov.tele2.ru\r\nsaratov.views.t2.ru\r\nsari.avito.ru\r\nsarov.mts.ru\r\nsaruman.avito.ru\r\nsas-prnt01-mg01.ld.yandex.ru\r\nsas.avito.ru\r\nsasa.avito.ru\r\nsasha.avito.ru\r\nsasovo.drom.ru\r\nsasuke.avito.ru\r\nsasvpn04-emea.avito.ru\r\nsat-src-store01e.maps.yandex.ru\r\nsat-store02h.maps.yandex.ru\r\nsat-store03h.maps.yandex.ru\r\nsat-store04h.maps.yandex.ru\r\nsat.avito.ru\r\nsat01f.maps.yandex.ru\r\nsat01h.maps.yandex.ru\r\nsat02e.maps.yandex.ru\r\nsat02f.maps.yandex.ru\r\nsat02h.maps.yandex.ru\r\nsat03e.maps.yandex.ru\r\nsat04e.maps.yandex.ru\r\nsatan.avito.ru\r\nsatellite.avito.ru\r\nsatellite.iiot.gov.ru\r\nsati.yandex.ru\r\nsaturn.avito.ru\r\nsaturne.avito.ru\r\nsaturno.avito.ru\r\nsauron.avito.ru\r\nsauth.yandex.ru\r\nsav.avito.ru\r\nsava.avito.ru\r\nsavannah.avito.ru\r\nsave-baikal.tass.ru\r\nsave.avito.ru\r\nsave.meduza.io\r\nsave.staging.meduza.io\r\nsavebig.avito.ru\r\nsavemart.kino-teatr.ru\r\nsavemoney.alfabank.ru\r\nsavemytime.mvideo.ru\r\nsavenow.avito.ru\r\nsaving-challenge.tinkoff.ru\r\nsavings.avito.ru\r\nsawyer.avito.ru\r\nsayac.avito.ru\r\nsb.avito.ru\r\nsb.rambler.ru\r\nsb1.avito.ru\r\nsb1.i.mail.ru\r\nsb2.i.mail.ru\r\nsba.yandex.ru\r\nsbapi1-00.yandex.ru\r\nsbapi2-00.yandex.ru\r\nsbb.avito.ru\r\nsbbank.credit-registry.nalog.ru\r\nsbbauto.sberbank.ru\r\nsbbe.evo-cert.rosbank.ru\r\nsbbe.evo-test.rosbank.ru\r\nsbbe.evo.rosbank.ru\r\nsbbolmobile.sberbank.ru\r\nsbbolmobiletest.sberbank.ru\r\nsbc-pr-a.vtb.ru\r\nsbc-pr-b.vtb.ru\r\nsbc-proxy.vtb.ru\r\nsbc-st-a.vtb.ru\r\nsbc-st-b.vtb.ru\r\nsbc.avito.ru\r\nsbc.sberbank.ru\r\nsbc.tambov.gov.ru\r\nsbc01.sbercontact.sberbank.ru\r\nsbc38.msteams.megafon.ru\r\nsbcast01d.maps.yandex.ru\r\nsbcast01e.maps.yandex.ru\r\nsbcast01h.maps.yandex.ru\r\nsbcast02d.maps.yandex.ru\r\nsbcast02e.maps.yandex.ru\r\nsbcast02h.maps.yandex.ru\r\nsbcast03d.maps.yandex.ru\r\nsbcast03e.maps.yandex.ru\r\nsbcast03h.maps.yandex.ru\r\nsbcast04d.maps.yandex.ru\r\nsbcast04e.maps.yandex.ru\r\nsbcast04h.maps.yandex.ru\r\nsbdataexchange.2gis.ru\r\nsbe.avito.ru\r\nsber-greentech.tass.ru\r\nsber.2gis.ru\r\nsber.pay.pay.u6mod1v0hsu9l7ii.farmet.kuban.aif.ru\r\nsber180.lenta.ru\r\nsber2020.sberbank.ru\r\nsber247.sbercontact.sberbank.ru\r\nsber911-test.sberbank.ru\r\nsber911.sberbank.ru\r\nsberalisa.sberbank.ru\r\nsberapi.sbercontact.sberbank.ru\r\nsberapps.sber.ru\r\nsberbank-com.os-prom.sberbank.ru\r\nsberbank-com.os-psi.sberbank.ru\r\nsberbank-ru.os-prom.sberbank.ru\r\nsberbank-ru.os-psi.sberbank.ru\r\nsberbank1-ru.os-prom.sberbank.ru\r\nsberbank1-ru.os-psi.sberbank.ru\r\nsberbank175.afisha.ru\r\nsberbanktheatre.afisha.ru\r\nsberchat.sberbank.ru\r\nsberclub.sberbank.ru\r\nsbercrm.sber.ru\r\nsberdisk.sberbank.ru\r\nsberdocs.sberbank.ru\r\nsbereapteka.youdo.com\r\nsberfriend.2gis.ru\r\nsbergiletalks.sber.ru\r\nsberhelp.sber.ru\r\nsberkids-t.sberbank.ru\r\nsberkids.sberbank.ru\r\nsberlogistics.youdo.com\r\nsbermail-cloud.sber.ru\r\nsbermail.sberbank.ru\r\nsbermarket.youdo.com\r\nsbermenu.sberbank.ru\r\nsbermomentum.sber.ru\r\nsberopros.sber.ru\r\nsberopros.sberbank.ru\r\nsberprime.sber.ru\r\nsberrrr911.sberbank.ru\r\nsberrrr9111.sberbank.ru\r\nsbersmartcabinet.sber.ru\r\nsberstore.sberbank.ru\r\nsbervideo.sberbank.ru\r\nsbi.sberbank.ru\r\nsbibz.sberbank.ru\r\nsbirmm.1tv.ru\r\nsbm.sberbank.ru\r\nsbmift.sberbank.ru\r\nsbmn.2015.yandex.ru\r\nsbmpsi.sberbank.ru\r\nsbor.mts.ru\r\nsbp-c2b-cert.rosbank.ru\r\nsbp-c2b-test.rosbank.ru\r\nsbp-c2b.rosbank.ru\r\nsbp-c2c-cert.rosbank.ru\r\nsbp-c2c-test.rosbank.ru\r\nsbp-c2c.rosbank.ru\r\nsbp-pay.tass.ru\r\nsbp-test.mkb.ru\r\nsbp.magnit.ru\r\nsbp.rosbank.ru\r\nsbpay-cert.rosbank.ru\r\nsbpay-test.rosbank.ru\r\nsbpay.rosbank.ru\r\nsbpay.test-sbp.openbank.ru\r\nsbrvd.tinkoff.ru\r\nsbs.avito.ru\r\nsbud.rshb.ru\r\nsc.avito.ru\r\nsc.gosuslugi.ru\r\nsc.mnr.gov.ru\r\nsc.open.ru\r\nsc.sakha.gov.ru\r\nsc.tng.mail.ru\r\nsc2.avito.ru\r\nsc24-surgut.gosuslugi.ru\r\nsc31-surgut.gosuslugi.ru\r\nsc44-surgut.gosuslugi.ru\r\nsca.avito.ru\r\nscan.alfabank.ru\r\nscan.avito.ru\r\nscania.interfax.ru\r\nscanner.avito.ru\r\nscanner1ksmg.alfabank.ru\r\nscanner2ksmg.alfabank.ru\r\nscanner3ksmg.alfabank.ru\r\nscanner4ksmg.alfabank.ru\r\nscarlet.avito.ru\r\nscc.avito.ru\r\nsccmm.alfabank.ru\r\nscd.avito.ru\r\nscdriveoos.magnit.ru\r\nsce.avito.ru\r\nscep.ift.mdm.sber.ru\r\nscetest.alfabank.ru\r\nscf.alfabank.ru\r\nscfb.tng.mail.ru\r\nscfbp.tng.mail.ru\r\nsch.avito.ru\r\nsch.beeline.ru\r\nsch.litres.ru\r\nsch32-norilsk.gosuslugi.ru\r\nsch40-nv.gosuslugi.ru\r\nsch40-syktyvkar.gosuslugi.ru\r\nsch76krsk.gosuslugi.ru\r\nschaporin.music.mos.ru\r\nschedule-api-demo.mdrive.magnit.ru\r\nschedule.avito.ru\r\nscheduler.avito.ru\r\nscheduler.skype.ec.mts.ru\r\nscherbinka.hh.ru\r\nschetnaja-palata.sakha.gov.ru\r\nschfree.litres.ru\r\nschi.yandex.ru\r\nschneider.m24.ru\r\nschneider.vesti.ru\r\nscholar.avito.ru\r\nscholarship.avito.ru\r\nscholarships.avito.ru\r\nschool-media.rbc.ru\r\nschool-wiki.new.yandex.ru\r\nschool-wiki.yandex.ru\r\nschool.avito.ru\r\nschool.kp.ru\r\nschool.megafon.ru\r\nschool.mos.ru\r\nschool.rbc.ru\r\nschool.sports.ru\r\nschool.vprok.ru\r\nschool.vtb.ru\r\nschool.x5.ru\r\nschool.yandex.ru\r\nschool158-krsk.gosuslugi.ru\r\nschool21-nvrsk.gosuslugi.ru\r\nschool22u-ude.gosuslugi.ru\r\nschool28bel.gosuslugi.ru\r\nschool3-shush.gosuslugi.ru\r\nschool3elizovo.gosuslugi.ru\r\nschool4-26.gosuslugi.ru\r\nschool42bel.gosuslugi.ru\r\nschool74.gosuslugi.ru\r\nschools.avito.ru\r\nschoolseoul.gosuslugi.ru\r\nschubert.avito.ru\r\nschulen.avito.ru\r\nschwarzkopf.lady.mail.ru\r\nsci.avito.ru\r\nscience.avito.ru\r\nscience.yandex.ru\r\nscience2021.review-k8s.aif.ru\r\nscienceday.rosatom.ru\r\nscion.drom.ru\r\nscitylana.apteka.ru\r\nscl.avito.ru\r\nscloclo1-2.i.mail.ru\r\nscloclo1-3.i.mail.ru\r\nscloclo1.i.mail.ru\r\nsclof1.i.mail.ru\r\nscloud.mts.ru\r\nscm.appservice.azuremsk.ec.mts.ru\r\nscm.avito.ru\r\nsco.avito.ru\r\nscok.tng.mail.ru\r\nscom.avito.ru\r\nscooby.avito.ru\r\nscooter.avito.ru\r\nscope.avito.ru\r\nscopia.fas.gov.ru\r\nscore.avito.ru\r\nscore.tools.who.int\r\nscoreboard.avito.ru\r\nscorpio.avito.ru\r\nscorpion.avito.ru\r\nscott.avito.ru\r\nscotty.avito.ru\r\nscounter.rambler.ru\r\nscout.avito.ru\r\nscp.avito.ru\r\nscr.avito.ru\r\nscr.datacollect.iarc.who.int\r\nscr.online.sberbank.ru\r\nscrap.avito.ru\r\nscrapbook.avito.ru\r\nscrapbooking.avito.ru\r\nscratchy.avito.ru\r\nscream.avito.ru\r\nscream3.film.ru\r\nscreen.avito.ru\r\nscreen.meduza.io\r\nscreenkey.kino-teatr.ru\r\nscreenshot.avito.ru\r\nscribe1.mail.ru\r\nscript.avito.ru\r\nscripts.avito.ru\r\nscrm.tinkoff.ru\r\nscrollingtext8x8.kino-teatr.ru\r\nscrubs.avito.ru\r\nscs.avito.ru\r\nsct.avito.ru\r\nscully.avito.ru\r\nscvk.tng.mail.ru\r\nscylla.avito.ru\r\nsd.avito.ru\r\nsd.citilink.ru\r\nsd.magnit.ru\r\nsd1.avito.ru\r\nsda.avito.ru\r\nsdc.avito.ru\r\nsdc.beeline.ru\r\nsdclassic.magnit.ru\r\nsdelal.project.tinkoff.ru\r\nsdesk-stage-1.salt.x5.ru\r\nsdf.avito.ru\r\nsdi.avito.ru\r\nsdint01.magnit.ru\r\nsdint02.magnit.ru\r\nsdm.avito.ru\r\nsdm.credit-registry.nalog.ru\r\nsdn.minprom.gov.ru\r\nsdns.avito.ru\r\nsdo.avito.ru\r\nsdo.open.ru\r\nsdo.openbank.ru\r\nsdo.rzd.ru\r\nsdoato.tomsk.gov.ru\r\nsdp.avito.ru\r\nsdr.avito.ru\r\nsdreport.magnit.ru\r\nsds.avito.ru\r\nsds.mts.ru\r\nsdu.soctech.mos.ru\r\nsdvmd1.worldbank.org\r\nsdweb.worldbank.org\r\nsdz02ex001.rostelecom.ru\r\nse.avito.ru\r\nse.net.ixbt.com\r\nse1.avito.ru\r\nse2.avito.ru\r\nse3.avito.ru\r\nsea.avito.ru\r\nsea.net.ixbt.com\r\nseabird.avito.ru\r\nseaextranet.searo.who.int\r\nseafile.kp.ru\r\nseagull.avito.ru\r\nseal.avito.ru\r\nsean.avito.ru\r\nsearch-maps.yandex.ru\r\nsearch-photobank.iz.ru\r\nsearch-portal1.test.gosuslugi.ru\r\nsearch-proxy.sps.rosatom.ru\r\nsearch-ruscorpora.yandex.ru\r\nsearch.avia.tutu.ru\r\nsearch.avito.ru\r\nsearch.dev.cgu.iac.mchs.ru\r\nsearch.gismeteo.ru\r\nsearch.gosuslugi.ru\r\nsearch.government.ru\r\nsearch.net.ixbt.com\r\nsearch.rambler.ru\r\nsearch.ren.tv\r\nsearch.rg.ru\r\nsearch.sps.rosatom.ru\r\nsearch.vk.com\r\nsearch.worldbank.org\r\nsearch.yaca.yandex.ru\r\nsearch1.avito.ru\r\nsearch2.avito.ru\r\nsearchdigitalcodecs.avito.ru\r\nsearcher-new.prod.meduza.io\r\nsearcher-new.staging.meduza.io\r\nsearcher.prod.meduza.io\r\nsearcher.staging.meduza.io\r\nsearcher103.mail.ru\r\nsearcher151.mail.ru\r\nsearcher163.mail.ru\r\nsearcher242.mail.ru\r\nsearcher25.mail.ru\r\nsearcher27.mail.ru\r\nsearcher27vm1.mail.ru\r\nsearcher27vm10.mail.ru\r\nsearcher27vm11.mail.ru\r\nsearcher27vm12.mail.ru\r\nsearcher27vm13.mail.ru\r\nsearcher27vm14.mail.ru\r\nsearcher27vm15.mail.ru\r\nsearcher27vm16.mail.ru\r\nsearcher27vm2.mail.ru\r\nsearcher27vm3.mail.ru\r\nsearcher27vm4.mail.ru\r\nsearcher27vm5.mail.ru\r\nsearcher27vm6.mail.ru\r\nsearcher27vm7.mail.ru\r\nsearcher27vm8.mail.ru\r\nsearcher27vm9.mail.ru\r\nsearcher28.mail.ru\r\nsearchfreecodecs.avito.ru\r\nsearchlivecodecs.avito.ru\r\nsearchmediacodecs.avito.ru\r\nsearchmediafile.avito.ru\r\nsearchmediafileinc.avito.ru\r\nsearchmediafiles.avito.ru\r\nsearchmediafilesinc.avito.ru\r\nsearchnewcodecs.avito.ru\r\nsearchportal-dev.avito.ru\r\nsearchportal-qa.avito.ru\r\nsearchportal.avito.ru\r\nsearchthiscodecs.avito.ru\r\nsearo.who.int\r\nseas.avito.ru\r\nseason.avito.ru\r\nseasons.afisha.ru\r\nseat.avito.ru\r\nseattle.avito.ru\r\nseba.avito.ru\r\nsebastian.avito.ru\r\nsebi.searo.who.int\r\nsebidev.searo.who.int\r\nsec-email.mkb.ru\r\nsec-external.mkb.ru\r\nsec.api.browser.yandex.ru\r\nsec.api.sberbank.ru\r\nsec.avito.ru\r\nsec.dev.vedomosti.ru\r\nsec.rosbank.ru\r\nsec1.avito.ru\r\nsecaskit.worldbank.org\r\nsecaskitdev.worldbank.org\r\nsecaskitqa.worldbank.org\r\nsecdns.avito.ru\r\nsecinv.k.avito.ru\r\nsecmail.avito.ru\r\nseco.avito.ru\r\nsecond-cg-entry.meduza.io\r\nsecond.avito.ru\r\nsecond.meduza.io\r\nsecond2.meduza.io\r\nsecond3.meduza.io\r\nsecondary.avito.ru\r\nsecondary.dns.yandex.ru\r\nsecondary.family.dns.yandex.ru\r\nsecondary.safe.dns.yandex.ru\r\nsecret.avito.ru\r\nsecret.kino-teatr.ru\r\nsecret.magnit.ru\r\nsecretgoda.lenta.ru\r\nsecrets.avito.ru\r\nsecrets.tbank.ru\r\nsecrets.tinkoff.ru\r\nsecretsanta.ozon.ru\r\nsecrt-ui.meduza.io\r\nsecrt.meduza.io\r\nsecure-cloud.rzd.ru\r\nsecure-test-acs1.rosbank.ru\r\nsecure-test-acs2.rosbank.ru\r\nsecure-test.rosbank.ru\r\nsecure.avito.ru\r\nsecure.dev.avito.ru\r\nsecure.gkh.hab.aif.ru\r\nsecure.intranet.rbc.ru\r\nsecure.kino-teatr.ru\r\nsecure.openbank.ru\r\nsecure.rbc.ru\r\nsecure.rosbank.ru\r\nsecure.rzd.ru\r\nsecure.sovcombank.ru\r\nsecure.worldbank.org\r\nsecure1.avito.ru\r\nsecure10.avito.ru\r\nsecure10.vk.com\r\nsecure11.avito.ru\r\nsecure2.avito.ru\r\nsecure3.avito.ru\r\nsecure4.avito.ru\r\nsecure5.avito.ru\r\nsecure6.avito.ru\r\nsecure7.avito.ru\r\nsecureauth.avito.ru\r\nsecurecode.tinkoff.ru\r\nsecured-openapi.business.tinkoff.ru\r\nsecured.avito.ru\r\nsecureftp.avito.ru\r\nsecurelogin.avito.ru\r\nsecuremail.avito.ru\r\nsecurepay.ozon.ru\r\nsecurepayments.sberbank.ru\r\nsecurepayments.tinkoff.ru\r\nsecuretest.openbank.ru\r\nsecureweb.avito.ru\r\nsecurewebapps.worldbank.org\r\nsecurewebappsqa.worldbank.org\r\nsecurity-api-demo.mdrive.magnit.ru\r\nsecurity.avito.ru\r\nsecurity.beeline.ru\r\nsecurity.megafon.ru\r\nsecurity.profi.tass.ru\r\nsecurity.yandex.ru\r\nsecurity2.avito.ru\r\nsed-region.tomsk.gov.ru\r\nsed.avito.ru\r\nsed.dev.cgu.iac.mchs.ru\r\nsed.kostroma.gov.ru\r\nsed.mchs.ru\r\nsed.saratov.gov.ru\r\nsed.tomsk.gov.ru\r\nsede.avito.ru\r\nsedkp.edu.gov.ru\r\nsee.avito.ru\r\nseed.avito.ru\r\nseeker.avito.ru\r\nseema.avito.ru\r\nseer.avito.ru\r\nseeyou.roseltorg.ru\r\nseg.avito.ru\r\nseg.rosbank.ru\r\nsegalovich.yandex.ru\r\nsegmento.mts.ru\r\nseguro.avito.ru\r\nsei.avito.ru\r\nseis.avito.ru\r\nsel-3194-www.k.avito.ru\r\nsel-3300-www.k.avito.ru\r\nsel1.dev.vedomosti.ru\r\nsel2.dev.vedomosti.ru\r\nsela.avito.ru\r\nselect.avito.ru\r\nselectum.tass.ru\r\nselena.avito.ru\r\nselena.mail.ru\r\nselene.avito.ru\r\nselene.zdorovie-shkolnika.spb.aif.ru\r\nselenium.avito.ru\r\nseleznev-test-app.io.2gis.ru\r\nseleznev-test-app10.io.2gis.ru\r\nself.avito.ru\r\nself.sber.ru\r\nselfcare.avito.ru\r\nselfcare.botplatform.rcs.ims.tele2.ru\r\nselfcare.tele2.ru\r\nselfie.alfabank.ru\r\nselfieline.alfabank.ru\r\nselfpub.litres.ru\r\nselfreg.ozon.ru\r\nselfservice.avito.ru\r\nselfservice.beeline.ru\r\nselfservice.worldbank.org\r\nselfserviceint.worldbank.org\r\nselfserviceintdev.worldbank.org\r\nselfserviceintqa.worldbank.org\r\nselfservicestg.worldbank.org\r\nsell.avito.ru\r\nseller-admin.ozon.ru\r\nseller-info.magnit.ru\r\nseller.alfabank.ru\r\nseller.avito.ru\r\nseller.learning.ozon.ru\r\nseller.ozon.ru\r\nseller.university.ozon.ru\r\nsellerstage.learning.ozon.ru\r\nsellerstage.university.ozon.ru\r\nselly.avito.ru\r\nselo.sakha.gov.ru\r\nselta.magnit.ru\r\nselweb-2265-www.k.avito.ru\r\nsem.avito.ru\r\nsemibituminous.kino-teatr.ru\r\nsemiluki-r36.gosuslugi.ru\r\nseminar.avito.ru\r\nseminar.garant.ru\r\nseminars.avito.ru\r\nsemp.alfabank.ru\r\nsen.avito.ru\r\nsenat.sberbank.ru\r\nsenator.avito.ru\r\nsend.avito.ru\r\nsend.mail.ru\r\nsend.net.ixbt.com\r\nsender.academy.mchs.ru\r\nsender.avito.ru\r\nsender.council.gov.ru\r\nsender.premier.one\r\nsender1.government.ru\r\nsender1.mail.ru\r\nsender2.government.ru\r\nsender3.mail.ru\r\nsender4.mail.ru\r\nsender5.government.ru\r\nsender5.mail.ru\r\nsender6.mail.ru\r\nsender7.mail.ru\r\nsender8.mail.ru\r\nsender9.mail.ru\r\nsenders.premier.one\r\nsenders.rutube.ru\r\nsendgrid.avito.ru\r\nsendmail.avito.ru\r\nsendmms.megafon.ru\r\nsendmoneyafrica.worldbank.org\r\nseneca.avito.ru\r\nsenior.avito.ru\r\nsenl-surgut.gosuslugi.ru\r\nsense.alfabank.ru\r\nsensor.avito.ru\r\nsenterpriseregistry5.avito.ru\r\nsentinel.avito.ru\r\nsentinelle.avito.ru\r\nsentry-dev.1tv.ru\r\nsentry-mobile.alfabank.ru\r\nsentry-mobile.prod.ya.magnit.ru\r\nsentry-relay.beeline.ru\r\nsentry-test-mobile.alfabank.ru\r\nsentry.avito.ru\r\nsentry.cgu.mchs.ru\r\nsentry.dev.cgu.iac.mchs.ru\r\nsentry.hh.ru\r\nsentry.itc.fas.gov.ru\r\nsentry.magnit.ru\r\nsentry.mdrive.magnit.ru\r\nsentry.msk.avito.ru\r\nsentry.sports.ru\r\nsentry.tech.mvideo.ru\r\nsentry.tutu.ru\r\nsentry.web.prod.ya.mvideo.ru\r\nsentry02.common.rbc.ru\r\nseo.avito.ru\r\nseodoarm.sberbank.ru\r\nseodostore.sberbank.ru\r\nseodostoretest.sberbank.ru\r\nseoul.avito.ru\r\nsep.avito.ru\r\nseptember.avito.ru\r\nsequoia.avito.ru\r\nser.avito.ru\r\nseraph.avito.ru\r\nserdar.avito.ru\r\nserebro-bor.sakha.gov.ru\r\nserena.avito.ru\r\nserendipity.avito.ru\r\nserene.avito.ru\r\nserenity.avito.ru\r\nseres.drom.ru\r\nserg.avito.ru\r\nsergey.161rus.yandex.ru\r\nsergey.77mebel77.yandex.ru\r\nsergey.avito.ru\r\nsergey.k.m.116km.yandex.ru\r\nsergiev-posad.drom.ru\r\nsergievposad.hh.ru\r\nsergio.avito.ru\r\nserial.avito.ru\r\nserialws.cloud.yandex.ru\r\nserp.mk.ru\r\nserpuhov.dns-shop.ru\r\nserpuhov.drom.ru\r\nserpuhov.home.megafon.ru\r\nsert-c2b-sbp.openbank.ru\r\nsert-r-sbp.openbank.ru\r\nserv.adm.sakha.gov.ru\r\nserv.avito.ru\r\nserv00.gismeteo.ru\r\nserv04.gismeteo.ru\r\nserv1.avito.ru\r\nserv1468.svr.gov.ru\r\nserv1869.svr.gov.ru\r\nserv2.avito.ru\r\nserv3.avito.ru\r\nserv4.avito.ru\r\nserv83.avito.ru\r\nservachok.ivi.ru\r\nserve.avito.ru\r\nserver.avito.ru\r\nserver.kino-teatr.ru\r\nserver01.avito.ru\r\nserver02.avito.ru\r\nserver03.avito.ru\r\nserver06.avito.ru\r\nserver07.avito.ru\r\nserver08.avito.ru\r\nserver1.avito.ru\r\nserver1.fpi.gov.ru\r\nserver1.mail.ru\r\nserver10.avito.ru\r\nserver10.vk.com\r\nserver11.avito.ru\r\nserver12.avito.ru\r\nserver13.avito.ru\r\nserver14.avito.ru\r\nserver15.avito.ru\r\nserver16.avito.ru\r\nserver17.avito.ru\r\nserver18.avito.ru\r\nserver19.avito.ru\r\nserver2.avito.ru\r\nserver20.avito.ru\r\nserver20.vk.com\r\nserver21.avito.ru\r\nserver22.avito.ru\r\nserver23.avito.ru\r\nserver24.avito.ru\r\nserver25.avito.ru\r\nserver26.avito.ru\r\nserver27.avito.ru\r\nserver28.avito.ru\r\nserver29.avito.ru\r\nserver3.avito.ru\r\nserver3.fpi.gov.ru\r\nserver30.avito.ru\r\nserver30.vk.com\r\nserver31.avito.ru\r\nserver32.avito.ru\r\nserver33.avito.ru\r\nserver35.avito.ru\r\nserver38.avito.ru\r\nserver4.avito.ru\r\nserver40.avito.ru\r\nserver40.vk.com\r\nserver41.avito.ru\r\nserver42.avito.ru\r\nserver43.avito.ru\r\nserver44.avito.ru\r\nserver45.avito.ru\r\nserver46.avito.ru\r\nserver47.avito.ru\r\nserver48.avito.ru\r\nserver49.avito.ru\r\nserver5.avito.ru\r\nserver51.avito.ru\r\nserver6.avito.ru\r\nserver7.avito.ru\r\nserver8.avito.ru\r\nserver9.avito.ru\r\nservergraph.worldbank.org\r\nservers.avito.ru\r\nserversideapi.e.mail.ru\r\nservice-salesforce-integration.avito.ru\r\nservice.ag.mos.ru\r\nservice.amigo.mail.ru\r\nservice.ar.culture.ru\r\nservice.avito.ru\r\nservice.banki.ru\r\nservice.citilink.ru\r\nservice.garant.ru\r\nservice.kino-teatr.ru\r\nservice.lemanapro.ru\r\nservice.magnit.ru\r\nservice.magnitogorsk.2gis.ru\r\nservice.nalog.ru\r\nservice.onlinetrade.ru\r\nservice.rzd.ru\r\nservice.sakha.gov.ru\r\nservice.spb.kommersant.ru\r\nservice.tax.gov.ru\r\nservice1.avito.ru\r\nservice1.lkbo.vtb.ru\r\nservice2.avito.ru\r\nservice2.lkbo.vtb.ru\r\nservice3.avito.ru\r\nservice3.lkbo.vtb.ru\r\nservice4.avito.ru\r\nservice4.lkbo.vtb.ru\r\nservice5.lkbo.vtb.ru\r\nservicebus.avito.ru\r\nservicecenter.avito.ru\r\nservicecurers.open.ru\r\nservicedata.avito.ru\r\nservicedesk.avito.ru\r\nservicedesk.magnit.ru\r\nservicenet.avito.ru\r\nservices-gambit-beta.test.ivi.ru\r\nservices-gambit-master.test.ivi.ru\r\nservices-gambit.test.ivi.ru\r\nservices-gambit10.test.ivi.ru\r\nservices-gambit11.test.ivi.ru\r\nservices-gambit12.test.ivi.ru\r\nservices-gambit13.test.ivi.ru\r\nservices-gambit14.test.ivi.ru\r\nservices-gambit15.test.ivi.ru\r\nservices-gambit16.test.ivi.ru\r\nservices-gambit17.test.ivi.ru\r\nservices-gambit2.test.ivi.ru\r\nservices-gambit3.test.ivi.ru\r\nservices-gambit4.test.ivi.ru\r\nservices-gambit5.test.ivi.ru\r\nservices-gambit6.test.ivi.ru\r\nservices-gambit7.test.ivi.ru\r\nservices-gambit8.test.ivi.ru\r\nservices-gambit9.test.ivi.ru\r\nservices-preprod-1.open.ru\r\nservices-preprod-2.open.ru\r\nservices-preprod.open.ru\r\nservices-staging.open.ru\r\nservices-test.open.ru\r\nservices.avito.ru\r\nservices.blizko.ru\r\nservices.cloud.mts.ru\r\nservices.council.gov.ru\r\nservices.euronews.com\r\nservices.fgis.economy.gov.ru\r\nservices.gismeteo.ru\r\nservices.government.ru\r\nservices.kino-teatr.ru\r\nservices.lab.x5.ru\r\nservices.livejournal.com\r\nservices.mchs.ru\r\nservices.open.ru\r\nservices.openbank.ru\r\nservices.perekrestok.ru\r\nservices.projects.avito.ru\r\nservices.vld.cloud.mts.ru\r\nservices.vprok.ru\r\nservices152.msk.cloud.mts.ru\r\nservices2.avito.ru\r\nservices223.roseltorg.ru\r\nservices44.roseltorg.ru\r\nservicetest.avito.ru\r\nservicios.avito.ru\r\nservicos.avito.ru\r\nservidor.avito.ru\r\nservis.avito.ru\r\nservizi.avito.ru\r\nserwis.avito.ru\r\nses.avito.ru\r\nsestroretsk.beeline.ru\r\nset.avito.ru\r\nset.yandex.ru\r\nseth.avito.ru\r\nseti.avito.ru\r\nsettings.alfabank.ru\r\nsetup.avito.ru\r\nsev.gov.ru\r\nsevastopol.dns-shop.ru\r\nsevastopol.drom.ru\r\nsevastopol.gov.ru\r\nsevastopol.kp.ru\r\nsevcableport-friends.2gis.ru\r\nseven.avito.ru\r\nsever.avito.ru\r\nsevergazbank.credit-registry.nalog.ru\r\nseverodvinsk.dns-shop.ru\r\nseversk.dns-shop.ru\r\nsew-uat.yc.mvideo.ru\r\nsex.avito.ru\r\nsexo.avito.ru\r\nsexshop.avito.ru\r\nsexuality.avito.ru\r\nsexy.avito.ru\r\nseynovawww.kino-teatr.ru\r\nsf.avito.ru\r\nsf.mail.ru\r\nsf0.mail.ru\r\nsf1.mail.ru\r\nsf10.mail.ru\r\nsf11.mail.ru\r\nsf12.mail.ru\r\nsf13.mail.ru\r\nsf14.mail.ru\r\nsf15.mail.ru\r\nsf16.mail.ru\r\nsf17.mail.ru\r\nsf18.mail.ru\r\nsf19.mail.ru\r\nsf2.avito.ru\r\nsf2.mail.ru\r\nsf20.mail.ru\r\nsf21.mail.ru\r\nsf22.mail.ru\r\nsf23.mail.ru\r\nsf24.mail.ru\r\nsf25.mail.ru\r\nsf26.mail.ru\r\nsf27.mail.ru\r\nsf28.mail.ru\r\nsf29.mail.ru\r\nsf3.economy.gov.ru\r\nsf3.mail.ru\r\nsf30.mail.ru\r\nsf31.mail.ru\r\nsf32.i.mail.ru\r\nsf33.i.mail.ru\r\nsf4.mail.ru\r\nsf5.mail.ru\r\nsf6.mail.ru\r\nsf7.mail.ru\r\nsf8.mail.ru\r\nsf9.mail.ru\r\nsfa.avito.ru\r\nsfb-edge.megafon.ru\r\nsfb-edge01.megafon.ru\r\nsfb-rp.mkb.ru\r\nsfb.avito.ru\r\nsfbaccess.russianpost.ru\r\nsfbaccess2.magnit.ru\r\nsfbacess2.magnit.ru\r\nsfbav.russianpost.ru\r\nsfbdirpool2.magnit.ru\r\nsfboos2.magnit.ru\r\nsfbwapp.magnit.ru\r\nsfbwas.magnit.ru\r\nsfbweb-ext.rosbank.ru\r\nsfbweb-extdr.rosbank.ru\r\nsfbweb.magnit.ru\r\nsfbweb.rosbank.ru\r\nsfbwebcon.russianpost.ru\r\nsfbwebpool.magnit.ru\r\nsfbwebpool2.magnit.ru\r\nsfbws.open.ru\r\nsfd.gosuslugi.ru\r\nsfera.x5.ru\r\nsfk.alania.gov.ru\r\nsfr.avito.ru\r\nsfs.avito.ru\r\nsft.avito.ru\r\nsftbee.alfabank.ru\r\nsftp.avito.ru\r\nsftp3.avito.ru\r\nsfx.avito.ru\r\nsg-store.rosbank.ru\r\nsg.avito.ru\r\nsg1-00.yandex.ru\r\nsg1.avito.ru\r\nsg1.garant.ru\r\nsg5-00.yandex.ru\r\nsga.avito.ru\r\nsgateway.ozon.ru\r\nsgb.avito.ru\r\nsgcheck.rosbank.ru\r\nsgd.avito.ru\r\nsgk-epgu.test.gosuslugi.ru\r\nsgk-esia.test.gosuslugi.ru\r\nsgm.avito.ru\r\nsgo-b2b1.vks.rshb.ru\r\nsgo-uc-expc.rshb.ru\r\nsgo-uc-expc11.rshb.ru\r\nsgo-uc-expc21.rshb.ru\r\nsgo-uc-expe.intech.rshb.ru\r\nsgo-uc-expe.rshb.ru\r\nsgo-uc-expe11.rshb.ru\r\nsgo-uc-expe12.rshb.ru\r\nsgo-uc-expe21.rshb.ru\r\nsgo-uc-expe22.rshb.ru\r\nsgp.avito.ru\r\nsgr.avito.ru\r\nsgs.avito.ru\r\nsgt.avito.ru\r\nsgtm.ixbt.com\r\nsgw.avito.ru\r\nsh-2-ppristen-pristen-r38.gosweb.gosuslugi.ru\r\nsh-73rzn.gosuslugi.ru\r\nsh-80-lastochkino-saratov-r64.gosweb.gosuslugi.ru\r\nsh-allaberdinskaya-r56.gosweb.gosuslugi.ru\r\nsh-balaxanskaya-r82.gosweb.gosuslugi.ru\r\nsh-beloyarskaya-r52.gosweb.gosuslugi.ru\r\nsh-blagodatnovskaya-r897.gosweb.gosuslugi.ru\r\nsh-donskoe-r27.gosweb.gosuslugi.ru\r\nsh-erxirikskaya-r81.gosweb.gosuslugi.ru\r\nsh-gamiyaxskaya-2-sgamiyax-r82.gosweb.gosuslugi.ru\r\nsh-int-novotroickaya-r56.gosweb.gosuslugi.ru\r\nsh-int1-krasnoyarsk-r04.gosweb.gosuslugi.ru\r\nsh-kml-r27.gosweb.gosuslugi.ru\r\nsh-krutoyarskaya-r62.gosweb.gosuslugi.ru\r\nsh-malinishhinskaya-r62.gosweb.gosuslugi.ru\r\nsh-manilskaya-r30.gosweb.gosuslugi.ru\r\nsh-mkou-shtulskaya-oosh-shtul-r82.gosweb.gosuslugi.ru\r\nsh-morozovskaya-sosh-r19.gosweb.gosuslugi.ru\r\nsh-novaya-era-tulun-r138.gosweb.gosuslugi.ru\r\nsh-novosergievskaya3-r56.gosweb.gosuslugi.ru\r\nsh-okino-klyuchevskaya-r81.gosweb.gosuslugi.ru\r\nsh-orexovno-r49.gosweb.gosuslugi.ru\r\nsh-palimovskaya-r56.gosweb.gosuslugi.ru\r\nsh-pecherskaya-r66.gosweb.gosuslugi.ru\r\nsh-polevskoj-r38.gosweb.gosuslugi.ru\r\nsh-portovskaya-r897.gosweb.gosuslugi.ru\r\nsh-prigorodnenskaya-r38.gosweb.gosuslugi.ru\r\nsh-sajginskaya-r69.gosweb.gosuslugi.ru\r\nsh-salbinskaya-r04.gosweb.gosuslugi.ru\r\nsh-shongujskaya-r47.gosweb.gosuslugi.ru\r\nsh-spc-int24-gorlovka-r897.gosweb.gosuslugi.ru\r\nsh-sulxarinskaya-r81.gosweb.gosuslugi.ru\r\nsh-tverdilovskaya-r56.gosweb.gosuslugi.ru\r\nsh-vasilkovo-r27.gosweb.gosuslugi.ru\r\nsh-yamnikskaya-r49.gosweb.gosuslugi.ru\r\nsh.avito.ru\r\nsh.mts.ru\r\nsh1-anash-r04.gosweb.gosuslugi.ru\r\nsh1-desnogorsk-r66.gosweb.gosuslugi.ru\r\nsh1-kasimov-r62.gosweb.gosuslugi.ru\r\nsh1-ryazan-r62.gosweb.gosuslugi.ru\r\nsh1.avito.ru\r\nsh10krs.gosuslugi.ru\r\nsh11-cherkessk-r91.gosweb.gosuslugi.ru\r\nsh12-sharypovo-r04.gosweb.gosuslugi.ru\r\nsh13-buzuluk-r56.gosweb.gosuslugi.ru\r\nsh13-vysokij-r47.gosweb.gosuslugi.ru\r\nsh137-krasnoyarsk-r04.gosweb.gosuslugi.ru\r\nsh138-doneck-r897.gosweb.gosuslugi.ru\r\nsh16-krasnoyarsk-r04.gosweb.gosuslugi.ru\r\nsh18-stavropol.gosuslugi.ru\r\nsh1925-ryazan-r62.gosweb.gosuslugi.ru\r\nsh2-cherepovec-r19.gosweb.gosuslugi.ru\r\nsh2-onoxoj-r81.gosweb.gosuslugi.ru\r\nsh2-selenginsk-r81.gosweb.gosuslugi.ru\r\nsh2-ulkan-r138.gosweb.gosuslugi.ru\r\nsh2.avito.ru\r\nsh21-cherepovec-r19.gosweb.gosuslugi.ru\r\nsh23-novotroick-r56.gosweb.gosuslugi.ru\r\nsh26-irkutsk-r138.gosweb.gosuslugi.ru\r\nsh29-pyatigorsk-r07.gosweb.gosuslugi.ru\r\nsh2desnogors.gosuslugi.ru\r\nsh2ekagevo.gosuslugi.ru\r\nsh2shajkovka-40.gosuslugi.ru\r\nsh3-cheremxovo-r138.gosweb.gosuslugi.ru\r\nsh3-ejsk-r03.gosweb.gosuslugi.ru\r\nsh3-izobilnyj-r07.gosweb.gosuslugi.ru\r\nsh3-kovdor-r47.gosweb.gosuslugi.ru\r\nsh3-kuragino-r04.gosweb.gosuslugi.ru\r\nsh3.avito.ru\r\nsh31-cherepovec-r19.gosweb.gosuslugi.ru\r\nsh31-irkutsk-r138.gosweb.gosuslugi.ru\r\nsh31-orenburg-r56.gosweb.gosuslugi.ru\r\nsh33-kursk-r38.gosweb.gosuslugi.ru\r\nsh36-velikij-novgorod-r49.gosweb.gosuslugi.ru\r\nsh39-vologda-r19.gosweb.gosuslugi.ru\r\nsh4-baltijsk-r27.gosweb.gosuslugi.ru\r\nsh4.avito.ru\r\nsh40-cherepovec-r19.gosweb.gosuslugi.ru\r\nsh43-ulan-ude-r81.gosweb.gosuslugi.ru\r\nsh46-stavropol-r07.gosweb.gosuslugi.ru\r\nsh47-zbor-r04.gosweb.gosuslugi.ru\r\nsh48-lipeck-r42.gosweb.gosuslugi.ru\r\nsh48-makeevka-r897.gosweb.gosuslugi.ru\r\nsh49-ulan-ude-r81.gosweb.gosuslugi.ru\r\nsh5-irkutsk-r138.gosweb.gosuslugi.ru\r\nsh5-lugansk-r181.gosweb.gosuslugi.ru\r\nsh5-rylsk-r38.gosweb.gosuslugi.ru\r\nsh52-ryazan-r62.gosweb.gosuslugi.ru\r\nsh53-kursk-r38.gosweb.gosuslugi.ru\r\nsh53-orenburg-r56.gosweb.gosuslugi.ru\r\nsh57-kursk-r38.gosweb.gosuslugi.ru\r\nsh58-orenburg-r56.gosweb.gosuslugi.ru\r\nsh6-buzuluk-r56.gosweb.gosuslugi.ru\r\nsh65-ulan-ude-r81.gosweb.gosuslugi.ru\r\nsh7.avito.ru\r\nsh75-ryazan-r62.gosweb.gosuslugi.ru\r\nsh8-essentuki-r07.gosweb.gosuslugi.ru\r\nsh8-vasilevskij-r07.gosweb.gosuslugi.ru\r\nsh88-orenburg-r56.gosweb.gosuslugi.ru\r\nsh89-makeevka-r897.gosweb.gosuslugi.ru\r\nsh9-roslavl-r66.gosweb.gosuslugi.ru\r\nsh9-zima-r138.gosweb.gosuslugi.ru\r\nsh97-omsk-r52.gosweb.gosuslugi.ru\r\nsha-256.yandex.ru\r\nsha.avito.ru\r\nshad.contest.yandex.ru\r\nshad.yandex.ru\r\nshad0.yandex.ru\r\nshad1.yandex.ru\r\nshad2.yandex.ru\r\nshadow.avito.ru\r\nshadowbound.mail.ru\r\nshadows.avito.ru\r\nshady.avito.ru\r\nshaggy.avito.ru\r\nshaka.avito.ru\r\nshakhty.dns-shop.ru\r\nshakira.avito.ru\r\nshaman.avito.ru\r\nshampoo.avito.ru\r\nshamrock.avito.ru\r\nshams.avito.ru\r\nshane.avito.ru\r\nshanghai.avito.ru\r\nshanti.avito.ru\r\nshara.avito.ru\r\nshare.api.2gis.ru\r\nshare.avito.ru\r\nshare.magnit.ru\r\nshare.tele2.ru\r\nshare.tinkoff.ru\r\nshare.wto.economy.gov.ru\r\nshare.yandex.ru\r\nshared.avito.ru\r\nshared.mail.ru\r\nsharefile.avito.ru\r\nsharefile.openbank.ru\r\nshareholder-guide.vtb.ru\r\nshareholder.sberbank.ru\r\nsharepoint.avito.ru\r\nsharepoint.euro.who.int\r\nsharing.avito.ru\r\nsharing.vtb.ru\r\nshark.avito.ru\r\nshark.vedomosti.ru\r\nshark11.sberbank.ru\r\nshark12.sberbank.ru\r\nshark13.sberbank.ru\r\nshark14.sberbank.ru\r\nsharkwater.avito.ru\r\nsharon.avito.ru\r\nsharp.avito.ru\r\nshaurma.2gis.ru\r\nshawarma.2gis.ru\r\nshckola.49.yandex.ru\r\nshcola-kezhma.gosuslugi.ru\r\nshe.avito.ru\r\nshegarka.social.tomsk.gov.ru\r\nshelabolixinskoe-r22.gosweb.gosuslugi.ru\r\nsheldon.avito.ru\r\nshell.avito.ru\r\nshell.yandex.ru\r\nshelly.avito.ru\r\nshelter.avito.ru\r\nshemale.avito.ru\r\nshepherd.avito.ru\r\nsher.76.yandex.ru\r\nsherlock.avito.ru\r\nsherwood.yandex.ru\r\nshgadm.tomsk.gov.ru\r\nshh.avito.ru\r\nshi.avito.ru\r\nshib.avito.ru\r\nshibboleth.avito.ru\r\nshield.avito.ru\r\nshield.hr.mts.ru\r\nshin.avito.ru\r\nshinbus.avito.ru\r\nshine.avito.ru\r\nshingler-reputation.yandex.ru\r\nshingler.yandex.ru\r\nshining.avito.ru\r\nshinnik.2016.yandex.ru\r\nshino.avito.ru\r\nshipper.academy.mchs.ru\r\nshipping.avito.ru\r\nshira.drom.ru\r\nshire.avito.ru\r\nshishkin1.rambler.ru\r\nshishkin2.rambler.ru\r\nshiva.avito.ru\r\nshiza.mail.ru\r\nshk.feedback.rosatom.ru\r\nshk11-sar.gosuslugi.ru\r\nshk18-sar.gosuslugi.ru\r\nshk73-sar.gosuslugi.ru\r\nshkola.kp.ru\r\nshkola10uxta-r11.gosweb.gosuslugi.ru\r\nshkola11staryjoskol-r31.gosweb.gosuslugi.ru\r\nshkola13shhekino-r71.gosweb.gosuslugi.ru\r\nshkola13vorkuta-r11.gosweb.gosuslugi.ru\r\nshkola14gubkin-r31.gosweb.gosuslugi.ru\r\nshkola15novoaltajsk-r22.gosweb.gosuslugi.ru\r\nshkola18izhevsk-r18.gosweb.gosuslugi.ru\r\nshkola19dimitrovgrad-r73.gosweb.gosuslugi.ru\r\nshkola1langepas-r86.gosweb.gosuslugi.ru\r\nshkola1salym-r86.gosweb.gosuslugi.ru\r\nshkola1uva-r18.gosweb.gosuslugi.ru\r\nshkola1vvedenskoe-r45.gosweb.gosuslugi.ru\r\nshkola26engels-r64.gosweb.gosuslugi.ru\r\nshkola26vorkuta-r11.gosweb.gosuslugi.ru\r\nshkola2nesterovskoe-r26.gosweb.gosuslugi.ru\r\nshkola2proletarskij-r31.gosweb.gosuslugi.ru\r\nshkola30staryjoskol-r31.gosweb.gosuslugi.ru\r\nshkola31izhevsk-r18.gosweb.gosuslugi.ru\r\nshkola39ulyanovsk-r73.gosweb.gosuslugi.ru\r\nshkola43inta-r11.gosweb.gosuslugi.ru\r\nshkola4sovetskij-r86.gosweb.gosuslugi.ru\r\nshkola52izhevsk-r18.gosweb.gosuslugi.ru\r\nshkola5efremov-r71.gosweb.gosuslugi.ru\r\nshkola5lyantor-r86.gosweb.gosuslugi.ru\r\nshkola5staryjoskol-r31.gosweb.gosuslugi.ru\r\nshkola5surgut-r86.gosweb.gosuslugi.ru\r\nshkola6efremov-r71.gosweb.gosuslugi.ru\r\nshkola6megion-r86.gosweb.gosuslugi.ru\r\nshkola70ulyanovsk-r73.gosweb.gosuslugi.ru\r\nshkola72ulyanovsk-r73.gosweb.gosuslugi.ru\r\nshkola7kogalym-r86.gosweb.gosuslugi.ru\r\nshkola86ulyanovsk-r73.gosweb.gosuslugi.ru\r\nshkola8izhevsk-r18.gosweb.gosuslugi.ru\r\nshkola91groznyj-r95.gosweb.gosuslugi.ru\r\nshkolabobkovakorolenko-r18.gosweb.gosuslugi.ru\r\nshkolaborkovskaya-r18.gosweb.gosuslugi.ru\r\nshkolaboyarskaya-r18.gosweb.gosuslugi.ru\r\nshkolabuchalskaya-r71.gosweb.gosuslugi.ru\r\nshkolaburaninskaya-r08.gosweb.gosuslugi.ru\r\nshkoladubkisaratov-r64.gosweb.gosuslugi.ru\r\nshkoladzhalykovskaya-r08.gosweb.gosuslugi.ru\r\nshkolaelaurskaya-r73.gosweb.gosuslugi.ru\r\nshkolagolubinskaya-r31.gosweb.gosuslugi.ru\r\nshkolagorkovskaya-r31.gosweb.gosuslugi.ru\r\nshkolagrishenskaya-r22.gosweb.gosuslugi.ru\r\nshkolaigrimskaya-r86.gosweb.gosuslugi.ru\r\nshkolainternat91ulyanovsk-r73.gosweb.gosuslugi.ru\r\nshkolaiyulskaya-r18.gosweb.gosuslugi.ru\r\nshkolakemlyanskaya-r13.gosweb.gosuslugi.ru\r\nshkolakimovskaya-r71.gosweb.gosuslugi.ru\r\nshkolakochetovskaya-r68.gosweb.gosuslugi.ru\r\nshkolakolesnikovskaya-r45.gosweb.gosuslugi.ru\r\nshkolakujbyshevskaya-r22.gosweb.gosuslugi.ru\r\nshkolalojno-r43.gosweb.gosuslugi.ru\r\nshkolamaslyanskaya-r45.gosweb.gosuslugi.ru\r\nshkolamirnenskaya-r22.gosweb.gosuslugi.ru\r\nshkolamolochnodvorskaya-r71.gosweb.gosuslugi.ru\r\nshkolamulymskaya-r86.gosweb.gosuslugi.ru\r\nshkolanikolskaya-r31.gosweb.gosuslugi.ru\r\nshkolanizhnevskaya-r45.gosweb.gosuslugi.ru\r\nshkolapeschanskaya-r45.gosweb.gosuslugi.ru\r\nshkolapionerskaya-r86.gosweb.gosuslugi.ru\r\nshkolapodrezchixa-r43.gosweb.gosuslugi.ru\r\nshkolapristenskayapristenrovenskij-r31.gosweb.gosuslugi.ru\r\nshkolaseliyarovo-r86.gosweb.gosuslugi.ru\r\nshkolasevernyj-r18.gosweb.gosuslugi.ru\r\nshkolaseverskaya-r22.gosweb.gosuslugi.ru\r\nshkolashirinskaya-r71.gosweb.gosuslugi.ru\r\nshkolasinenkiesaratov-r64.gosweb.gosuslugi.ru\r\nshkolasosnovskaya-r22.gosweb.gosuslugi.ru\r\nshkolatalovskaya-r22.gosweb.gosuslugi.ru\r\nshkolateginskaya-r86.gosweb.gosuslugi.ru\r\nshkolaurozhajnenskaya-r22.gosweb.gosuslugi.ru\r\nshkolavejdelevskaya-r31.gosweb.gosuslugi.ru\r\nshkolaverxneigrinskaya-r18.gosweb.gosuslugi.ru\r\nshkolayakovlevskaya-r31.gosweb.gosuslugi.ru\r\nshms1.avito.ru\r\nshms2.avito.ru\r\nshok.35.yandex.ru\r\nshooter.avito.ru\r\nshop.2gis.ru\r\nshop.afisha.ru\r\nshop.avito.ru\r\nshop.beeline.ru\r\nshop.drive2.ru\r\nshop.ixbt.com\r\nshop.kino-teatr.ru\r\nshop.kp.ru\r\nshop.megafon.ru\r\nshop.mts.ru\r\nshop.online.sberbank.ru\r\nshop.perekrestok.ru\r\nshop.pochta.ru\r\nshop.proza.ru\r\nshop.stihi.ru\r\nshop.tbank.ru\r\nshop.tele2.ru\r\nshop.tinkoff.ru\r\nshop.vprok.ru\r\nshop.vtb.ru\r\nshop.zdorovie-shkolnika.spb.aif.ru\r\nshop1.avito.ru\r\nshop2.avito.ru\r\nshop3.avito.ru\r\nshopping.avito.ru\r\nshopping.ok.ru\r\nshops.avito.ru\r\nshoptenko.lideryrossii.tass.ru\r\nshoptest.avito.ru\r\nshort-mortgage.mkb.ru\r\nshort.avito.ru\r\nshort.learning.ozon.ru\r\nshort.sovcombank.ru\r\nshort.university.ozon.ru\r\nshortcuts.avito.ru\r\nshortdb.kino-teatr.ru\r\nshorturl.avito.ru\r\nshouji.avito.ru\r\nshout.avito.ru\r\nshoutcast.avito.ru\r\nshow.afisha.ru\r\nshow.avito.ru\r\nshow.mvideo.ru\r\nshow.tutu.ru\r\nshowcase.avito.ru\r\nshowcase.demo.megafon.ru\r\nshowroom.avito.ru\r\nshowroom.m24.ru\r\nshp.avito.ru\r\nshpi.social.tomsk.gov.ru\r\nshprota.production.meduza.io\r\nshprota.staging.meduza.io\r\nshredder.avito.ru\r\nshrek.avito.ru\r\nshrpt.mkb.ru\r\nshrt.uspeh.megafon.ru\r\nshs.avito.ru\r\nshu.avito.ru\r\nshumerlya.home.megafon.ru\r\nshuttle.avito.ru\r\nshuzai.avito.ru\r\nsi.avito.ru\r\nsi.beeline.ru\r\nsi1-psi-pbmob.testonline.sberbank.ru\r\nsi1.online.sberbank.ru\r\nsi1d.avito.ru\r\nsi2.online.sberbank.ru\r\nsia-demo1.gosuslugi.ru\r\nsia-fdemo.gosuslugi.ru\r\nsia.avito.ru\r\nsia.gosuslugi.ru\r\nsiademo1.gosuslugi.ru\r\nsiademo2.gosuslugi.ru\r\nsiam.avito.ru\r\nsib-seg.megafon.ru\r\nsib-tac.megafon.ru\r\nsib-vpn.megafon.ru\r\nsib.avito.ru\r\nsib.b2blk.megafon.ru\r\nsiberia.kp.ru\r\nsiberia.tg.t2.ru\r\nsiberia.travel.t2.ru\r\nsibir-pro.kommersant.ru\r\nsibir.kommersant.ru\r\nsibs-test.mkb.ru\r\nsibsoc.credit-registry.nalog.ru\r\nsibur.dc.cloud.mts.ru\r\nsibur.hh.ru\r\nsic.avito.ru\r\nsid-mmobile.magnit.ru\r\nsid.avito.ru\r\nside1.ld.yandex.ru\r\nside2.ld.yandex.ru\r\nsiding.101.yandex.ru\r\nsidious.avito.ru\r\nsidon.avito.ru\r\nsie.avito.ru\r\nsiemens.avito.ru\r\nsiemens.vedomosti.ru\r\nsiena.avito.ru\r\nsierra-db.avito.ru\r\nsierra.avito.ru\r\nsierracharlie.users.avito.ru\r\nsif.avito.ru\r\nsifa.avito.ru\r\nsig.avito.ru\r\nsiga.avito.ru\r\nsigadmin.avito.ru\r\nsigam.avito.ru\r\nsight-ca.open.ru\r\nsight.avito.ru\r\nsigma.avito.ru\r\nsigma.mail.ru\r\nsign-rosreestr.rshb.ru\r\nsign.alfabank.ru\r\nsign.avito.ru\r\nsign.beeline.ru\r\nsignal.avito.ru\r\nsignalmaster.iac.mchs.ru\r\nsignin.avito.ru\r\nsignin.kino-teatr.ru\r\nsignin.mts.ru\r\nsignup.avito.ru\r\nsignup.beeline.ru\r\nsignup.rosatom.ru\r\nsigrh.avito.ru\r\nsiktiah.sakha.gov.ru\r\nsila.frontend-dev.k8s.rg.ru\r\nsila.frontend-stage.k8s.rg.ru\r\nsilence.avito.ru\r\nsilence.mail.ru\r\nsilent.avito.ru\r\nsilica.avito.ru\r\nsilicon.avito.ru\r\nsilino.mos.ru\r\nsilk.avito.ru\r\nsilkina.lideryrossii.tass.ru\r\nsilkway.life.ru\r\nsilva.avito.ru\r\nsilver.avito.ru\r\nsilver.open.ru\r\nsilverstar.avito.ru\r\nsilvia.avito.ru\r\nsim.avito.ru\r\nsimach.m24.ru\r\nsimba.avito.ru\r\nsimf.balancer.serp.yandex.ru\r\nsimferopol.babyblog.ru\r\nsimferopol.drom.ru\r\nsimferopol.hh.ru\r\nsimferopol.lemanapro.ru\r\nsimg.avito.ru\r\nsimilars.consultant.ru\r\nsimix.avito.ru\r\nsimon.avito.ru\r\nsimorgh.avito.ru\r\nsimple.avito.ru\r\nsimpletest.avito.ru\r\nsimplex.avito.ru\r\nsimply.avito.ru\r\nsimpsons.avito.ru\r\nsimreport.tele2.ru\r\nsims.avito.ru\r\nsina.avito.ru\r\nsingapore.avito.ru\r\nsingapore.vedomosti.ru\r\nsinger.avito.ru\r\nsingh.avito.ru\r\nsinitsa.mail.ru\r\nsinope.avito.ru\r\nsinsei.avito.ru\r\nsion.avito.ru\r\nsip-ipayunseus.avito.ru\r\nsip.ac.gov.ru\r\nsip.alfabank.ru\r\nsip.avito.ru\r\nsip.beeline.ru\r\nsip.cea.gov.ru\r\nsip.consultant.ru\r\nsip.corp.tele2.ru\r\nsip.euronews.com\r\nsip.ext.euronews.com\r\nsip.external.t2.ru\r\nsip.external.tele2.ru\r\nsip.fas.gov.ru\r\nsip.interfax.ru\r\nsip.lync.ntv.ru\r\nsip.magnit.ru\r\nsip.main.russianpost.ru\r\nsip.msk.vtb.ru\r\nsip.mvideo.ru\r\nsip.ntv.ru\r\nsip.open.ru\r\nsip.ozon.ru\r\nsip.psbank.ru\r\nsip.ria.ru\r\nsip.rosatom.ru\r\nsip.rosbank.ru\r\nsip.russianpost.ru\r\nsip.sakha.gov.ru\r\nsip.skype.ec.mts.ru\r\nsip.spb.beeline.ru\r\nsip.t2.ru\r\nsip.tele2.ru\r\nsip.x5.ru\r\nsip1.avito.ru\r\nsip2.avito.ru\r\nsip2.consultant.ru\r\nsip2.sakha.gov.ru\r\nsip3.avito.ru\r\nsipac.avito.ru\r\nsipexternal.avito.ru\r\nsipexternal.beeline.ru\r\nsipexternal.magnit.ru\r\nsipexternal.mkb.ru\r\nsipexternal.skype.ec.mts.ru\r\nsipinternal.avito.ru\r\nsipuha.mail.ru\r\nsir.avito.ru\r\nsire.avito.ru\r\nsirena.avito.ru\r\nsiri.avito.ru\r\nsirius-a.yandex.ru\r\nsirius-b.yandex.ru\r\nsirius.avito.ru\r\nsirius.gov.ru\r\nsirsi.avito.ru\r\nsis.avito.ru\r\nsisa.avito.ru\r\nsisko.avito.ru\r\nsistema.avito.ru\r\nsistemas.avito.ru\r\nsisters.film.ru\r\nsit.avito.ru\r\nsit01.dom.test.gosuslugi.ru\r\nsit02.dom.test.gosuslugi.ru\r\nsita.avito.ru\r\nsite-stage.freecom-app-test.mts.ru\r\nsite.2gis.ru\r\nsite.avito.ru\r\nsite.beeline.ru\r\nsite.dev.iac.mchs.ru\r\nsite.freecom-app-test.mts.ru\r\nsite.wmc-admin.yandex.ru\r\nsite.yandex.ru\r\nsite1.avito.ru\r\nsite1utm1.ufo.gov.ru\r\nsite2.avito.ru\r\nsite3.avito.ru\r\nsite4.avito.ru\r\nsite5.avito.ru\r\nsiteadmin.avito.ru\r\nsiteapi.vtb.ru\r\nsitebuilder.avito.ru\r\nsitecore.avito.ru\r\nsitedefender.avito.ru\r\nsiteed.m24.ru\r\nsitelife.avito.ru\r\nsitelinker.prod.ya.magnit.ru\r\nsitemanager.avito.ru\r\nsitemap.avito.ru\r\nsitemap.kino-teatr.ru\r\nsitemaps.apteka.ru\r\nsiteresources.worldbank.org\r\nsiteresourcesqa.worldbank.org\r\nsites.avito.ru\r\nsites.tinkoff.ru\r\nsitescope.worldbank.org\r\nsitescope11.worldbank.org\r\nsitescope12.worldbank.org\r\nsitesearch-suggest.yandex.ru\r\nsitesearch.avito.ru\r\nsitesuggest.yandex.ru\r\nsitetestrn5dfg8m3crudmer.ach.gov.ru\r\nsith.yandex.ru\r\nsitrion.fas.gov.ru\r\nsiva.avito.ru\r\nsix.avito.ru\r\nsj.avito.ru\r\nsj2.lenta.ru\r\nsj3.lenta.ru\r\nsj4.lenta.ru\r\nsj5.lenta.ru\r\nsj6.lenta.ru\r\nsjc.avito.ru\r\nsjyskm.litres.ru\r\nsk.avito.ru\r\nska.mchs.ru\r\nskala.avito.ru\r\nskazka.rostelecom.ru\r\nskazka1.yandex.ru\r\nskazki.mts.ru\r\nskazki.vtb.ru\r\nskb.rosatom.ru\r\nskc.avito.ru\r\nskfo.kommersant.ru\r\nskh.beeline.ru\r\nskh.dev.home.megafon.ru\r\nski.avito.ru\r\nskidka.mts.ru\r\nskidki.irecommend.ru\r\nskill.tele2.ru\r\nskills.avito.ru\r\nskin.avito.ru\r\nskinner.avito.ru\r\nskins.avito.ru\r\nskipper.avito.ru\r\nskk.tass.ru\r\nskl.avito.ru\r\nsklad.avito.ru\r\nsklep.avito.ru\r\nsklep2.avito.ru\r\nsklif.mos.ru\r\nsko-wifi-nginx5901.sberbank.ru\r\nsko-wifi-nginx5902.sberbank.ru\r\nskoda.avito.ru\r\nskoda.drom.ru\r\nskopidom2.mail.ru\r\nskripnichenko.lideryrossii.tass.ru\r\nsks-kk-preprod.mkb.ru\r\nsks-kk-test.mkb.ru\r\nsks.avito.ru\r\nskssrc.mchs.ru\r\nskuf-portal.gosuslugi.ru\r\nskuf.gosuslugi.ru\r\nskunk.avito.ru\r\nskuzmitskiy.ing.k8s.dev.ivi.ru\r\nskver.2gis.ru\r\nsky.avito.ru\r\nsky.parade2018.tass.ru\r\nskyeng.youdo.com\r\nskylight.avito.ru\r\nskyline.avito.ru\r\nskynet.avito.ru\r\nskypark-test.meduza.io\r\nskype.avito.ru\r\nskype.beeline.ru\r\nskype.magnit.ru\r\nskype.yandex.ru\r\nskype2.magnit.ru\r\nskypeweb.t2.ru\r\nskypewebext1.x5.ru\r\nskypewebext2.x5.ru\r\nskypews.open.ru\r\nskywalker.avito.ru\r\nskzd-cggw-01.skzd.rzd.ru\r\nskzd-cggw-02.skzd.rzd.ru\r\nskzd.rzd.ru\r\nsl.avito.ru\r\nsl1.api.lenta.ru\r\nsl1.assets.lenta.ru\r\nsl1.avito.ru\r\nsl1.cdn.lenta.ru\r\nsl1.cloud.lenta.ru\r\nsl1.dove.lenta.ru\r\nsl1.ed.lenta.ru\r\nsl1.icdn.lenta.ru\r\nsl1.img.lenta.ru\r\nsl1.m.lenta.ru\r\nsl2.api.lenta.ru\r\nsl2.assets.lenta.ru\r\nsl2.cdn.lenta.ru\r\nsl2.cloud.lenta.ru\r\nsl2.dove.lenta.ru\r\nsl2.ed.lenta.ru\r\nsl2.icdn.lenta.ru\r\nsl2.img.lenta.ru\r\nsl2.m.lenta.ru\r\nsla.avito.ru\r\nslang.life.ru\r\nslash.avito.ru\r\nslava.0008.yandex.ru\r\nslava.mchs.gov.ru\r\nslave.avito.ru\r\nslave1.avito.ru\r\nslayberry.yandex.ru\r\nslayer.yandex.ru\r\nslb.ft.narod.yandex.ru\r\nslc.avito.ru\r\nsledgeroya.iz.ru\r\nsleep.avito.ru\r\nsleepy.avito.ru\r\nslf.avito.ru\r\nslg.lenta.ru\r\nslice.avito.ru\r\nslide-build.kino-teatr.ru\r\nslide.avito.ru\r\nslides.avito.ru\r\nslim-or-not.lady.mail.ru\r\nslim.avito.ru\r\nslim.beeline.ru\r\nslimautumn.lady.mail.ru\r\nslimberry.yandex.ru\r\nslipknot.avito.ru\r\nslisin.ing.k8s.dev.ivi.ru\r\nslk.avito.ru\r\nslk.kino-teatr.ru\r\nsll-0.yandex.ru\r\nslm.avito.ru\r\nsloe.worldbank.org\r\nsloeqa.worldbank.org\r\nslolpcf.alfabank.ru\r\nslot.avito.ru\r\nslot.mail.ru\r\nsloth.avito.ru\r\nslototerra.mail.ru\r\nslovar.yandex.ru\r\nslovari.yandex.ru\r\nslovary.yandex.ru\r\nslovopolis.beeline.ru\r\nslpda.avito.ru\r\nsls.avito.ru\r\nslx.avito.ru\r\nsly.avito.ru\r\nsm-register.tinkoff.ru\r\nsm-tomiac.miac.tambov.gov.ru\r\nsm-zdrav.miac.tambov.gov.ru\r\nsm.alfabank.ru\r\nsm.avito.ru\r\nsm.fadn.gov.ru\r\nsm.magnit.ru\r\nsm.sakha.gov.ru\r\nsm01.avito.ru\r\nsm1.avito.ru\r\nsm2.avito.ru\r\nsm3.avito.ru\r\nsm4.avito.ru\r\nsma.avito.ru\r\nsmail.avito.ru\r\nsmail.worldbank.org\r\nsmall.avito.ru\r\nsmallbusiness.avito.ru\r\nsmart-jkh.megafon.ru\r\nsmart-light-admin.demo.megafon.ru\r\nsmart-light.demo.megafon.ru\r\nsmart.1tv.ru\r\nsmart.avito.ru\r\nsmart.beeline.ru\r\nsmart.garant.ru\r\nsmart.lady.mail.ru\r\nsmart.zakupki.rostelecom.ru\r\nsmart1.avito.ru\r\nsmart2.avito.ru\r\nsmartagent24.t2.ru\r\nsmartapptest.online.sberbank.ru\r\nsmartcopper.tass.ru\r\nsmartcopper2.tass.ru\r\nsmartcopper3.tass.ru\r\nsmartereducation.worldbank.org\r\nsmartgis-test.corp.t2.ru\r\nsmarthome.mts.ru\r\nsmarthost.avito.ru\r\nsmartitbmc.magnit.ru\r\nsmartmarket.online.sberbank.ru\r\nsmartmarket.sber.ru\r\nsmartmarkettestift.online.sberbank.ru\r\nsmartmarkettestpsi.online.sberbank.ru\r\nsmartoffice.sberbank.ru\r\nsmartpet.mts.ru\r\nsmartphone.avito.ru\r\nsmartrepbmc.magnit.ru\r\nsmartreserve.stage.app01.afisha.ru\r\nsmartreserve.stage.app02.afisha.ru\r\nsmartretail.mts.ru\r\nsmartspeech-ift.sber.ru\r\nsmartspeech-psi.sber.ru\r\nsmartspeech-test.sber.ru\r\nsmartspeech.sber.ru\r\nsmarttv.ing.k8s.dev.ivi.ru\r\nsmartu.mts.ru\r\nsmartwatch.mts.ru\r\nsmartway.geoapi.sberbank.ru\r\nsmarty.avito.ru\r\nsmartzakupki.bizconf.rbc.ru\r\nsmash.avito.ru\r\nsmb-stage.ixbt.com\r\nsmb.avito.ru\r\nsmb.ixbt.com\r\nsmb.net.ixbt.com\r\nsmbc.avito.ru\r\nsmc.avito.ru\r\nsmcrm.sber.ru\r\nsme.avito.ru\r\nsme.tinkoff.ru\r\nsmev-demo1.gosuslugi.ru\r\nsmev-gos.max.ru\r\nsmev-mvf.test.gosuslugi.ru\r\nsmev-test.tambov.gov.ru\r\nsmev.gosuslugi.ru\r\nsmev01.gosuslugi.ru\r\nsmev02.gosuslugi.ru\r\nsmev03.gosuslugi.ru\r\nsmev04.gosuslugi.ru\r\nsmev05.gosuslugi.ru\r\nsmev06.gosuslugi.ru\r\nsmev07.gosuslugi.ru\r\nsmev08.gosuslugi.ru\r\nsmev09.gosuslugi.ru\r\nsmev10.gosuslugi.ru\r\nsmev11.gosuslugi.ru\r\nsmev12.gosuslugi.ru\r\nsmev13.gosuslugi.ru\r\nsmev14.gosuslugi.ru\r\nsmev15.gosuslugi.ru\r\nsmev16.gosuslugi.ru\r\nsmev17.gosuslugi.ru\r\nsmev18.gosuslugi.ru\r\nsmev19.gosuslugi.ru\r\nsmev20.gosuslugi.ru\r\nsmev21.gosuslugi.ru\r\nsmev22.gosuslugi.ru\r\nsmev23.gosuslugi.ru\r\nsmev24.gosuslugi.ru\r\nsmev25.gosuslugi.ru\r\nsmev26.gosuslugi.ru\r\nsmev27.gosuslugi.ru\r\nsmev28.gosuslugi.ru\r\nsmev29.gosuslugi.ru\r\nsmev3-n0.test.gosuslugi.ru\r\nsmev3.gosuslugi.ru\r\nsmev30.gosuslugi.ru\r\nsmev31.gosuslugi.ru\r\nsmev32.gosuslugi.ru\r\nsmev33.gosuslugi.ru\r\nsmev34.gosuslugi.ru\r\nsmev35.gosuslugi.ru\r\nsmev36.gosuslugi.ru\r\nsmev37.gosuslugi.ru\r\nsmev38.gosuslugi.ru\r\nsmev39.gosuslugi.ru\r\nsmev40.gosuslugi.ru\r\nsmev41.gosuslugi.ru\r\nsmev42.gosuslugi.ru\r\nsmev43.gosuslugi.ru\r\nsmev44.gosuslugi.ru\r\nsmev45.gosuslugi.ru\r\nsmev46.gosuslugi.ru\r\nsmev47.gosuslugi.ru\r\nsmev48.gosuslugi.ru\r\nsmev49.gosuslugi.ru\r\nsmev50.gosuslugi.ru\r\nsmev51.gosuslugi.ru\r\nsmev52.gosuslugi.ru\r\nsmev53.gosuslugi.ru\r\nsmev54.gosuslugi.ru\r\nsmev55.gosuslugi.ru\r\nsmev56.gosuslugi.ru\r\nsmev57.gosuslugi.ru\r\nsmev58.gosuslugi.ru\r\nsmev59.gosuslugi.ru\r\nsmev60.gosuslugi.ru\r\nsmev61.gosuslugi.ru\r\nsmev62.gosuslugi.ru\r\nsmev63.gosuslugi.ru\r\nsmev64.gosuslugi.ru\r\nsmev65.gosuslugi.ru\r\nsmev66.gosuslugi.ru\r\nsmev67.gosuslugi.ru\r\nsmev68.gosuslugi.ru\r\nsmev69.gosuslugi.ru\r\nsmev70.gosuslugi.ru\r\nsmev71.gosuslugi.ru\r\nsmev72.gosuslugi.ru\r\nsmev73.gosuslugi.ru\r\nsmev74.gosuslugi.ru\r\nsmev75.gosuslugi.ru\r\nsmev76.gosuslugi.ru\r\nsmev77.gosuslugi.ru\r\nsmev78.gosuslugi.ru\r\nsmev79.gosuslugi.ru\r\nsmev80.gosuslugi.ru\r\nsmev82.gosuslugi.ru\r\nsmev83.gosuslugi.ru\r\nsmev84.gosuslugi.ru\r\nsmev85.gosuslugi.ru\r\nsmev86.gosuslugi.ru\r\nsmev87.gosuslugi.ru\r\nsmev88.gosuslugi.ru\r\nsmev89.gosuslugi.ru\r\nsmf-test.tinkoff.ru\r\nsmf.avito.ru\r\nsmfed.worldbank.org\r\nsmfeddev.worldbank.org\r\nsmfedprod.worldbank.org\r\nsmfedqa.worldbank.org\r\nsmft.rosbank.ru\r\nsmg.avito.ru\r\nsmhecpsc01-v60.ok.avito.ru\r\nsmi.avito.ru\r\nsmile.avito.ru\r\nsmiles.avito.ru\r\nsmiley.avito.ru\r\nsmirnov.13-th.yandex.ru\r\nsmirnov.iz.ru\r\nsmith.avito.ru\r\nsmith.yandex.ru\r\nsmithers.avito.ru\r\nsmk.minzdrav.gov.ru\r\nsml.avito.ru\r\nsml.dev.home.megafon.ru\r\nsml.shop.megafon.ru\r\nsmm.avito.ru\r\nsmm.zoon.ru\r\nsmob.rosbank.ru\r\nsmog.avito.ru\r\nsmoke-mini.k8s.rg.ru\r\nsmoke-web.ing.k8s.dev.ivi.ru\r\nsmoke.avito.ru\r\nsmokeping.avito.ru\r\nsmol.dev.kp.ru\r\nsmol.kp.ru\r\nsmolatom.feedback.rosatom.ru\r\nsmolensk.avito.ru\r\nsmolensk.babyblog.ru\r\nsmolensk.beeline.ru\r\nsmolensk.dns-shop.ru\r\nsmolensk.drom.ru\r\nsmolensk.fas.gov.ru\r\nsmolensk.lemanapro.ru\r\nsmolensk.mts.ru\r\nsmolensk.tele2.ru\r\nsmolensk.tutu.ru\r\nsmorodina.mail.ru\r\nsmp.avito.ru\r\nsmp.t2.ru\r\nsmp.tele2.ru\r\nsmpapi.alfabank.ru\r\nsmpcc.alfabank.ru\r\nsmpig.mts.ru\r\nsmpig02.mts.ru\r\nsmpp.avito.ru\r\nsmpp1.avito.ru\r\nsmpp2.avito.ru\r\nsmpt.avito.ru\r\nsmr.avito.ru\r\nsmr.beeline.ru\r\nsms-filter.megafon.ru\r\nsms-gate-gw-ext.x5.ru\r\nsms-inform.megafon.ru\r\nsms-inform.moscow.megafon.ru\r\nsms.avito.ru\r\nsms.dev.cgu.iac.mchs.ru\r\nsms.megafon.ru\r\nsms.passport.yandex.ru\r\nsms1.avito.ru\r\nsms2.avito.ru\r\nsmsc.avito.ru\r\nsmsgame.beeline.ru\r\nsmsgw.avito.ru\r\nsmsgw.tele2.ru\r\nsmshelper.primorye.mts.ru\r\nsmsonline.ok.ru\r\nsmspking.sberbank.ru\r\nsmstest.avito.ru\r\nsmstest.ok.ru\r\nsmt.avito.ru\r\nsmtp-01.rk.gov.ru\r\nsmtp-02.rk.gov.ru\r\nsmtp-03.rk.gov.ru\r\nsmtp-ext.open.ru\r\nsmtp-fallback.avito.ru\r\nsmtp-gw.avito.ru\r\nsmtp-ha.avito.ru\r\nsmtp-in-01.mx-fs2.avito.ru\r\nsmtp-in-02.mx-fs2.avito.ru\r\nsmtp-in-03.mx-fs2.avito.ru\r\nsmtp-in.avito.ru\r\nsmtp-massmail.open.ru\r\nsmtp-massmail2.open.ru\r\nsmtp-notifications.ozon.ru\r\nsmtp-out-01.avito.ru\r\nsmtp-out-02.avito.ru\r\nsmtp-out.avito.ru\r\nsmtp-relay.avito.ru\r\nsmtp-relays.ozon.ru\r\nsmtp.atd.gov.ru\r\nsmtp.atr.gov.ru\r\nsmtp.avito.ru\r\nsmtp.beeline.ru\r\nsmtp.cloudmail.mts.ru\r\nsmtp.e-mail.sberbank.ru\r\nsmtp.economy.gov.ru\r\nsmtp.exchange.rosbank.ru\r\nsmtp.film.ru\r\nsmtp.gosuslugi.ru\r\nsmtp.gov.ru\r\nsmtp.interfax.ru\r\nsmtp.kino-teatr.ru\r\nsmtp.kp.ru\r\nsmtp.lemanapro.ru\r\nsmtp.livejournal.com\r\nsmtp.magnit.ru\r\nsmtp.mirtv.ru\r\nsmtp.mse21.avito.ru\r\nsmtp.myoffice.sberbank.ru\r\nsmtp.open.ru\r\nsmtp.out.avito.ru\r\nsmtp.rambler.ru\r\nsmtp.rosbank.ru\r\nsmtp.roseltorg.ru\r\nsmtp.rutube.ru\r\nsmtp.sber.ru\r\nsmtp.tomsk.gov.ru\r\nsmtp.yandex.ru\r\nsmtp0.avito.ru\r\nsmtp01.avito.ru\r\nsmtp01.email.rk.gov.ru\r\nsmtp01.gosuslugi.ru\r\nsmtp01.gov.ru\r\nsmtp02.avito.ru\r\nsmtp02.email.rk.gov.ru\r\nsmtp02.gov.ru\r\nsmtp03.avito.ru\r\nsmtp04.avito.ru\r\nsmtp05.avito.ru\r\nsmtp09.open.ru\r\nsmtp1.avito.ru\r\nsmtp1.deti.tele2.ru\r\nsmtp1.geoplus.tele2.ru\r\nsmtp1.mail.ru\r\nsmtp1.open.ru\r\nsmtp10.avito.ru\r\nsmtp10.mail.ru\r\nsmtp10.open.ru\r\nsmtp10.senders.rutube.ru\r\nsmtp10.vk.com\r\nsmtp11.avito.ru\r\nsmtp11.mail.ru\r\nsmtp11.open.ru\r\nsmtp11.senders.rutube.ru\r\nsmtp12.avito.ru\r\nsmtp12.mail.ru\r\nsmtp12.open.ru\r\nsmtp12.senders.rutube.ru\r\nsmtp13.avito.ru\r\nsmtp13.mail.ru\r\nsmtp13.open.ru\r\nsmtp14.avito.ru\r\nsmtp14.mail.ru\r\nsmtp14.open.ru\r\nsmtp14.senders.rutube.ru\r\nsmtp15.avito.ru\r\nsmtp15.mail.ru\r\nsmtp15.open.ru\r\nsmtp16.avito.ru\r\nsmtp16.mail.ru\r\nsmtp16.open.ru\r\nsmtp17.mail.ru\r\nsmtp17.open.ru\r\nsmtp18.mail.ru\r\nsmtp18.open.ru\r\nsmtp19.mail.ru\r\nsmtp2.avito.ru\r\nsmtp2.deti.tele2.ru\r\nsmtp2.economy.gov.ru\r\nsmtp2.mail.ru\r\nsmtp2.open.ru\r\nsmtp2.tinkoff.ru\r\nsmtp2.zdorovie-shkolnika.spb.aif.ru\r\nsmtp20.mail.ru\r\nsmtp21.mail.ru\r\nsmtp22.mail.ru\r\nsmtp23.mail.ru\r\nsmtp24.mail.ru\r\nsmtp25.mail.ru\r\nsmtp26.mail.ru\r\nsmtp27.mail.ru\r\nsmtp28.mail.ru\r\nsmtp3.avito.ru\r\nsmtp3.economy.gov.ru\r\nsmtp3.gov.ru\r\nsmtp3.mail.ru\r\nsmtp3.open.ru\r\nsmtp30.i.mail.ru\r\nsmtp31.i.mail.ru\r\nsmtp32.i.mail.ru\r\nsmtp33.i.mail.ru\r\nsmtp34.i.mail.ru\r\nsmtp35.i.mail.ru\r\nsmtp4.avito.ru\r\nsmtp4.gov.ru\r\nsmtp4.mail.ru\r\nsmtp4.open.ru\r\nsmtp40.i.mail.ru\r\nsmtp41.i.mail.ru\r\nsmtp42.i.mail.ru\r\nsmtp43.i.mail.ru\r\nsmtp44.i.mail.ru\r\nsmtp45.i.mail.ru\r\nsmtp5.avito.ru\r\nsmtp5.mail.ru\r\nsmtp5.open.ru\r\nsmtp50.i.mail.ru\r\nsmtp51.i.mail.ru\r\nsmtp52.i.mail.ru\r\nsmtp53.i.mail.ru\r\nsmtp54.i.mail.ru\r\nsmtp55.i.mail.ru\r\nsmtp6.avito.ru\r\nsmtp6.open.ru\r\nsmtp60.i.mail.ru\r\nsmtp61.i.mail.ru\r\nsmtp62.i.mail.ru\r\nsmtp63.i.mail.ru\r\nsmtp68.gosuslugi.ru\r\nsmtp7.avito.ru\r\nsmtp7.open.ru\r\nsmtp8.avito.ru\r\nsmtp8.mail.ru\r\nsmtp8.open.ru\r\nsmtp9.avito.ru\r\nsmtp9.mail.ru\r\nsmtpgw.avito.ru\r\nsmtpng1.mail.ru\r\nsmtpout.avito.ru\r\nsmtpout2.avito.ru\r\nsmtprelayout.avito.ru\r\nsmtps.avito.ru\r\nsmtps.kino-teatr.ru\r\nsmtptest.avito.ru\r\nsmtptest1.mail.ru\r\nsmtptest2.mail.ru\r\nsmtpz1s1.ozon.ru\r\nsmtpz1s2.ozon.ru\r\nsmtpz1s4.ozon.ru\r\nsmtpz1s5.ozon.ru\r\nsmtpz1s6.ozon.ru\r\nsmtpz20s1.ozon.ru\r\nsmtpz20s2.ozon.ru\r\nsmtpz20s3.ozon.ru\r\nsmtpz20s4.ozon.ru\r\nsmtpz20s5.ozon.ru\r\nsmtpz20s6.ozon.ru\r\nsmtpz23s3.ozon.ru\r\nsmtpz23s4.ozon.ru\r\nsmtpz23s5.ozon.ru\r\nsmtpz23s6.ozon.ru\r\nsmtpz2s1.ozon.ru\r\nsmtpz2s2.ozon.ru\r\nsmtpz501s4.ozon.ru\r\nsmtpz501s5.ozon.ru\r\nsmtpz501s52.ozon.ru\r\nsmtpz501s53.ozon.ru\r\nsmtpz501s56.ozon.ru\r\nsmtpz501s57.ozon.ru\r\nsmtpz501s59.ozon.ru\r\nsmtpz501s6.ozon.ru\r\nsmtpz502s4.ozon.ru\r\nsmtpz502s5.ozon.ru\r\nsmtpz502s51.ozon.ru\r\nsmtpz502s52.ozon.ru\r\nsmtpz502s53.ozon.ru\r\nsmtpz502s56.ozon.ru\r\nsmtpz502s57.ozon.ru\r\nsmtpz502s58.ozon.ru\r\nsmtpz502s59.ozon.ru\r\nsmtpz502s6.ozon.ru\r\nsmtpz503s4.ozon.ru\r\nsmtpz503s5.ozon.ru\r\nsmtpz503s6.ozon.ru\r\nsmtpz504s6.ozon.ru\r\nsmurf.avito.ru\r\nsmx.avito.ru\r\nsmx.rshb.ru\r\nsmz.youdo.com\r\nsmzbot.youdo.com\r\nsn.avito.ru\r\nsnake.avito.ru\r\nsnake.t2.ru\r\nsnap.avito.ru\r\nsnap.deti.mts.ru\r\nsnap.lkb2b.mts.ru\r\nsnapshot.avito.ru\r\nsnbank.credit-registry.nalog.ru\r\nsndk.tinkoff.ru\r\nsng-steam-pay.megafon.ru\r\nsniper.avito.ru\r\nsniplink.otvet.mail.ru\r\nsnippet-admin.market.yandex.ru\r\nsnippetter01h.maps.yandex.ru\r\nsnippetter02f.maps.yandex.ru\r\nsnippetter02h.maps.yandex.ru\r\nsnmp.avito.ru\r\nsnooper1.mail.ru\r\nsnooper2.mail.ru\r\nsnooper3.mail.ru\r\nsnooper4.mail.ru\r\nsnoopy.avito.ru\r\nsnort.avito.ru\r\nsnout.balance.yandex.ru\r\nsnow.avito.ru\r\nsnowball.avito.ru\r\nsnowflake.avito.ru\r\nsnowidr.worldbank.org\r\nsnowidrqa.worldbank.org\r\nsnowy.avito.ru\r\nsnp.who.int\r\nsnr.avito.ru\r\nsns.avito.ru\r\nsns1.mail.ru\r\nsns2.mail.ru\r\nsns3.mail.ru\r\nsns4.mail.ru\r\nsns5.mail.ru\r\nsntr.avito.ru\r\nsntrm.tass.ru\r\nsnu.nalog.ru\r\nso-alania.fas.gov.ru\r\nso.avito.ru\r\nso.yandex.ru\r\nso01-iva-vlan640.yandex.ru\r\nso02-iva-vlan640.yandex.ru\r\nso03-iva-vlan640.yandex.ru\r\nso04-iva-vlan640.yandex.ru\r\nso05-iva-vlan640.yandex.ru\r\nso06-iva-vlan640.yandex.ru\r\nso08-iva-vlan640.yandex.ru\r\nso42-iva-vlan640.yandex.ru\r\nso43-iva-vlan640.yandex.ru\r\nso44-iva-vlan640.yandex.ru\r\nso45-iva-vlan640.yandex.ru\r\nsoa.avito.ru\r\nsoap-sandbox.direct.yandex.ru\r\nsoap.avito.ru\r\nsoap.direct.yandex.ru\r\nsoap.nmic-test.mchs.ru\r\nsobachka.mail.ru\r\nsobek.avito.ru\r\nsoberem.vmeste.yandex.ru\r\nsobitia.yandex.ru\r\nsoc-forum.bizconf.rbc.ru\r\nsoc.avito.ru\r\nsoccer.avito.ru\r\nsocdwar.mail.ru\r\nsochi.avito.ru\r\nsochi.beeline.ru\r\nsochi.ct51.dev.zoon.ru\r\nsochi.dns-shop.ru\r\nsochi.drom.ru\r\nsochi.hh.ru\r\nsochi.home.megafon.ru\r\nsochi.lemanapro.ru\r\nsochi.lenta.ru\r\nsochi.shop.megafon.ru\r\nsochi.tutu.ru\r\nsochi.views.tele2.ru\r\nsochi2019.itc.fas.gov.ru\r\nsochi2020.itc.fas.gov.ru\r\nsochi2021.itc.fas.gov.ru\r\nsochi2022.itc.fas.gov.ru\r\nsochi2023.itc.fas.gov.ru\r\nsocial-aggregator.api.2gis.ru\r\nsocial-helper.t2.ru\r\nsocial-rc.yandex.ru\r\nsocial-test.yandex.ru\r\nsocial-test1.msk.mts.ru\r\nsocial.avito.ru\r\nsocial.council.gov.ru\r\nsocial.iz.ru\r\nsocial.journal.tinkoff.ru\r\nsocial.m24.ru\r\nsocial.mk.ru\r\nsocial.pink.rbc.ru\r\nsocial.ren.tv\r\nsocial.rzd.ru\r\nsocial.saratov.gov.ru\r\nsocial.tele2.ru\r\nsocial.yandex.ru\r\nsocialcast.fas.gov.ru\r\nsocialmedia.avito.ru\r\nsocialwork.avito.ru\r\nsociety.avito.ru\r\nsociology.avito.ru\r\nsocket-test.moscowapp.mos.ru\r\nsocket-test2-test.moscowapp.mos.ru\r\nsocket.avito.ru\r\nsocket.moscowapp.mos.ru\r\nsocket2.avito.ru\r\nsocketi.net.ixbt.com\r\nsocrate.avito.ru\r\nsocrates.avito.ru\r\nsocuslugy.sev.gov.ru\r\nsod.avito.ru\r\nsod.mos.ru\r\nsof.avito.ru\r\nsofa.avito.ru\r\nsofia.avito.ru\r\nsoft.avito.ru\r\nsoft.dns-shop.ru\r\nsoft.export.yandex.ru\r\nsoft.nalog.ru\r\nsoft.rambler.ru\r\nsoft.yandex.ru\r\nsoftware.avito.ru\r\nsoftware.rzd.ru\r\nsogo.avito.ru\r\nsogox.avito.ru\r\nsohbet.avito.ru\r\nsoho.avito.ru\r\nsoi.avito.ru\r\nsoika.mail.ru\r\nsoj.consultant.ru\r\nsojchain.consultant.ru\r\nsok.avito.ru\r\nsokol.avito.ru\r\nsokol.sberbank.ru\r\nsokolskij-r19.gosweb.gosuslugi.ru\r\nsol.avito.ru\r\nsola.avito.ru\r\nsolar-mpi.mkb.ru\r\nsolar.avito.ru\r\nsolaria.avito.ru\r\nsolaris.avito.ru\r\nsolarwinds.avito.ru\r\nsole.avito.ru\r\nsoledad.avito.ru\r\nsoleil.avito.ru\r\nsolid.avito.ru\r\nsolnechnogorsk.home.megafon.ru\r\nsolnechnogorsk.mts.ru\r\nsolo.avito.ru\r\nsolo.kino-teatr.ru\r\nsoloma.m24.ru\r\nsolomon.avito.ru\r\nsolovjev.sakha.gov.ru\r\nsolr.avito.ru\r\nsolr.srvc.prod.monitor.meduza.io\r\nsolr.srvc.prod.prodano.meduza.io\r\nsolr.srvc.second.prodano.meduza.io\r\nsoltlake.openbank.ru\r\nsoluciones.avito.ru\r\nsolus.avito.ru\r\nsolusvm.avito.ru\r\nsolution.avito.ru\r\nsolutions.avito.ru\r\nsolutions.fas.gov.ru\r\nsolutions.magnit.ru\r\nsolutions.worldbank.org\r\nsolutions.zdorovie-shkolnika.spb.aif.ru\r\nsolzhenitsyn.tass.ru\r\nsom.avito.ru\r\nsom.x5.ru\r\nsoma.avito.ru\r\nsomali2.mail.ru\r\nsomeone.avito.ru\r\nsomething.avito.ru\r\nsomik.vtb.ru\r\nsona.avito.ru\r\nsonar.avito.ru\r\nsonata.avito.ru\r\nsondage.avito.ru\r\nsonet.avito.ru\r\nsong.avito.ru\r\nsong.iz.ru\r\nsongs.avito.ru\r\nsonia.avito.ru\r\nsonic.avito.ru\r\nsonicwall.avito.ru\r\nsonny.avito.ru\r\nsony.avito.ru\r\nsonystory.mvideo.ru\r\nsoon.avito.ru\r\nsooreh.avito.ru\r\nsophia.avito.ru\r\nsophie.avito.ru\r\nsophos.avito.ru\r\nsopka.tambov.gov.ru\r\nsoplo1.mail.ru\r\nsoplo2.mail.ru\r\nsoplo3.mail.ru\r\nsoplo4.mail.ru\r\nsoporte.avito.ru\r\nsora.avito.ru\r\nsorbete.avito.ru\r\nsorigin.avito.ru\r\nsoroka.mail.ru\r\nsorry.avito.ru\r\nsos.avito.ru\r\nsosedi.vtb.ru\r\nsoso.avito.ru\r\nsot.89043147239.yandex.ru\r\nsot.avito.ru\r\nsota.avito.ru\r\nsota.beeline.ru\r\nsote.avito.ru\r\nsoto.avito.ru\r\nsotrudniki-beta.hh.ru\r\nsou.avito.ru\r\nsoul.avito.ru\r\nsoulmate.avito.ru\r\nsound.avito.ru\r\nsounds.avito.ru\r\nsource.avito.ru\r\nsourcing.beeline.ru\r\nsourcing.mts.ru\r\nsourcing.vimpelcom.ru\r\nsouth.avito.ru\r\nsouth.kp.ru\r\nsouth.tg.t2.ru\r\nsouth.travel.t2.ru\r\nsouth.tutu.ru\r\nsouthpark.avito.ru\r\nsouz-spaseniya.1tv.ru\r\nsouz.mail.ru\r\nsouz1.mail.ru\r\nsouz12.mail.ru\r\nsouz2.mail.ru\r\nsouz22.mail.ru\r\nsouz3.mail.ru\r\nsouz4.mail.ru\r\nsouz5.mail.ru\r\nsouz6.mail.ru\r\nsouzadmin.mail.ru\r\nsouzbal2.mail.ru\r\nsouzvs3.mail.ru\r\nsova.mail.ru\r\nsovcombank.credit-registry.nalog.ru\r\nsovdoc.rusarchives.ru\r\nsovetmo.sakha.gov.ru\r\nsovetnik.consultant.ru\r\nsovetnik.garant.ru\r\nsovetnik.market.http.yandex.ru\r\nsovetnik.market.yandex.ru\r\nsovetnik.yandex.ru\r\nsovetsky.home.megafon.ru\r\nsovety.duma.gov.ru\r\nsow.avito.ru\r\nsoz-cash.openbank.ru\r\nsoz.megafon.ru\r\nsozclient.openbank.ru\r\nsozd.duma.gov.ru\r\nsozonbaev.07.yandex.ru\r\nsp-money.yandex.ru\r\nsp-norm.minenergo.gov.ru\r\nsp.angius.yandex.ru\r\nsp.arden.yandex.ru\r\nsp.avis.yandex.ru\r\nsp.avito.ru\r\nsp.babyblog.ru\r\nsp.baku.yandex.ru\r\nsp.boulogne.yandex.ru\r\nsp.byakko.yandex.ru\r\nsp.content.tinkoff.ru\r\nsp.corniglia.yandex.ru\r\nsp.corp.mvideo.ru\r\nsp.demomoney.yandex.ru\r\nsp.demomoney2.yandex.ru\r\nsp.elbrus.yandex.ru\r\nsp.felis.yandex.ru\r\nsp.funai.yandex.ru\r\nsp.gaki.yandex.ru\r\nsp.globus.yandex.ru\r\nsp.golbat.yandex.ru\r\nsp.hakutaku.yandex.ru\r\nsp.hida.yandex.ru\r\nsp.hotaru.yandex.ru\r\nsp.isla.yandex.ru\r\nsp.kani.yandex.ru\r\nsp.kappa.yandex.ru\r\nsp.kirin.yandex.ru\r\nsp.kita.yandex.ru\r\nsp.kitsune.yandex.ru\r\nsp.kobe.yandex.ru\r\nsp.koga.yandex.ru\r\nsp.kommersant.ru\r\nsp.kuse.yandex.ru\r\nsp.lemanapro.ru\r\nsp.lenta.ru\r\nsp.life.ru\r\nsp.litres.ru\r\nsp.mvideo.ru\r\nsp.tinkoff.ru\r\nsp1.avito.ru\r\nsp2.avito.ru\r\nsp2re.habr.com\r\nsp4.avito.ru\r\nsp53.mos.ru\r\nsp61.mos.ru\r\nsp66.mos.ru\r\nspa.avito.ru\r\nspa.worldbank.org\r\nspace-av01.rosatom.ru\r\nspace-av02.rosatom.ru\r\nspace-av03.rosatom.ru\r\nspace-av04.rosatom.ru\r\nspace-av05.rosatom.ru\r\nspace-av06.rosatom.ru\r\nspace-av07.rosatom.ru\r\nspace-av08.rosatom.ru\r\nspace-link.rosatom.ru\r\nspace-rec01.rosatom.ru\r\nspace-rec02.rosatom.ru\r\nspace-rec03.rosatom.ru\r\nspace-rec04.rosatom.ru\r\nspace-rec05.rosatom.ru\r\nspace-rec06.rosatom.ru\r\nspace-rec07.rosatom.ru\r\nspace-rec08.rosatom.ru\r\nspace.avito.ru\r\nspace.dns-shop.ru\r\nspace.rosatom.ru\r\nspace.vtb.ru\r\nspace1000.content.tinkoff.ru\r\nspacecard.tinkoff.ru\r\nspacemarathon.life.ru\r\nspacemen.tass.ru\r\nspaces.avito.ru\r\nspaces1.mail.ru\r\nspacetech.tass.ru\r\nspacewalk.avito.ru\r\nspadfsiqa.worldbank.org\r\nspain.avito.ru\r\nspam.avito.ru\r\nspam.yandex.ru\r\nspam1.avito.ru\r\nspam2.avito.ru\r\nspam22.rambler.ru\r\nspambox.avito.ru\r\nspamd.avito.ru\r\nspamfeed1.mail.ru\r\nspamfilter.avito.ru\r\nspamooborona.yandex.ru\r\nspanish.avito.ru\r\nspantlm.worldbank.org\r\nspantlmqa.worldbank.org\r\nspapps.who.int\r\nspappscsec.worldbank.org\r\nspappscsec2.worldbank.org\r\nspappscsecdev.worldbank.org\r\nspappscsecqa.worldbank.org\r\nspappscsecstg.worldbank.org\r\nspappssecext.worldbank.org\r\nspappssecou.worldbank.org\r\nspappssecoudev.worldbank.org\r\nspappssecouqa.worldbank.org\r\nspappssecoustg.worldbank.org\r\nspappssecoutst.worldbank.org\r\nspaqa.worldbank.org\r\nspar.youdo.com\r\nsparc.avito.ru\r\nspare.avito.ru\r\nspark.avito.ru\r\nspark.worldbank.org\r\nspark2.worldbank.org\r\nspark2api.worldbank.org\r\nspark2apidev.worldbank.org\r\nspark2apiqa.worldbank.org\r\nspark2dev.worldbank.org\r\nspark2devapp.worldbank.org\r\nspark2mysite.worldbank.org\r\nspark2profile.worldbank.org\r\nspark2profiledev.worldbank.org\r\nspark2profileqa.worldbank.org\r\nspark2qa.worldbank.org\r\nspark2spprofile.worldbank.org\r\nspark2spprofiledev.worldbank.org\r\nspark2spprofileqa.worldbank.org\r\nspark2win.worldbank.org\r\nspark2windev.worldbank.org\r\nspark2winqa.worldbank.org\r\nsparkdev.worldbank.org\r\nsparkdevapp.worldbank.org\r\nsparkgatetest.interfax.ru\r\nsparkle.avito.ru\r\nsparkprd.worldbank.org\r\nsparkqa.worldbank.org\r\nsparkstg.worldbank.org\r\nsparktrng.worldbank.org\r\nsparktst.worldbank.org\r\nsparky.avito.ru\r\nsparrow.avito.ru\r\nsparta.avito.ru\r\nsparta.mail.ru\r\nspartacus.avito.ru\r\nspartak.open.ru\r\nspartak.openbank.ru\r\nspartakiada.consultant.ru\r\nspartan.avito.ru\r\nspas-extreme.mchs.gov.ru\r\nspas-extreme.mchs.ru\r\nspasdemensk-r40.gosweb.gosuslugi.ru\r\nspasibo.mchs.gov.ru\r\nspasibo.mchs.ru\r\nspasibo.megafon.ru\r\nspavlov.test.ivi.ru\r\nspawin.worldbank.org\r\nspawinqa.worldbank.org\r\nspawn.avito.ru\r\nspb-bc.rbc.ru\r\nspb-cucm-sub-01.lemanapro.ru\r\nspb-cucm-sub-02.lemanapro.ru\r\nspb-cucm-sub-03.lemanapro.ru\r\nspb-heroes.rbc.ru\r\nspb.afisha.ru\r\nspb.aif.ru\r\nspb.avito.ru\r\nspb.beeline.ru\r\nspb.cloud.mts.ru\r\nspb.ct12.dev.zoon.ru\r\nspb.ct16.dev.zoon.ru\r\nspb.ct27.dev.zoon.ru\r\nspb.ct32.dev.zoon.ru\r\nspb.ct39.dev.zoon.ru\r\nspb.ct48.dev.zoon.ru\r\nspb.ct51.dev.zoon.ru\r\nspb.ct63.dev.zoon.ru\r\nspb.dev.kp.ru\r\nspb.dns-shop.ru\r\nspb.drom.ru\r\nspb.fas.gov.ru\r\nspb.hh.ru\r\nspb.home.megafon.ru\r\nspb.kommersant.ru\r\nspb.kp.ru\r\nspb.lemanapro.ru\r\nspb.mk.ru\r\nspb.mts.ru\r\nspb.piter-ix.tele2.ru\r\nspb.piter-ix.yandex.ru\r\nspb.shop.megafon.ru\r\nspb.shop.tele2.ru\r\nspb.tele2.ru\r\nspb1.companion.tele2.ru\r\nspb2.companion.tele2.ru\r\nspbeconomicforum.bizconf.rbc.ru\r\nspbkey4old.yandex.ru\r\nspbmuseum.t2.ru\r\nspbmuseum.tele2.ru\r\nspbprojects.kommersant.ru\r\nspbtv.vimpelcom.ru\r\nspc.avito.ru\r\nspc.content.tinkoff.ru\r\nspc.tinkoff.ru\r\nspdl.cgu.mchs.ru\r\nspdl.dev.cgu.iac.mchs.ru\r\nspdpmsdev.worldbank.org\r\nspeak.avito.ru\r\nspec.643.yandex.ru\r\nspec.afisha.ru\r\nspec.avito.ru\r\nspec.championat.com\r\nspec.drom.ru\r\nspec.gazeta.ru\r\nspec.iz.ru\r\nspec.kino-teatr.ru\r\nspec.lenta.ru\r\nspec.psi.mchs.gov.ru\r\nspec.psi.mchs.ru\r\nspec.rbc.ru\r\nspec.tass.ru\r\nspecial-megafon.kp.ru\r\nspecial.alfabank.ru\r\nspecial.avito.ru\r\nspecial.council.gov.ru\r\nspecial.fsvts.gov.ru\r\nspecial.garant.ru\r\nspecial.gismeteo.ru\r\nspecial.gosuslugi.ru\r\nspecial.government.ru\r\nspecial.ixbt.com\r\nspecial.kommersant.ru\r\nspecial.kremlin.ru\r\nspecial.letters.kremlin.ru\r\nspecial.life.ru\r\nspecial.meduza.io\r\nspecial.megafon.ru\r\nspecial.nnov.kommersant.ru\r\nspecial.open.ru\r\nspecial.preprod-front.open.ru\r\nspecial.qa-front.open.ru\r\nspecials.avito.ru\r\nspecials.sports.ru\r\nspecproject.mail.ru\r\nspecto.yandex.ru\r\nspectra.avito.ru\r\nspectre.avito.ru\r\nspectro.avito.ru\r\nspectrum.avito.ru\r\nspeech-qa.tinkoff.ru\r\nspeech.avito.ru\r\nspeechka.tele2.ru\r\nspeechkit.yandex.ru\r\nspeed.avito.ru\r\nspeedcheck1.chk.beeline.ru\r\nspeedcheck1.kvd.beeline.ru\r\nspeedcheck1.mvd.beeline.ru\r\nspeedcheck1.nlk.beeline.ru\r\nspeedcheck1.nsk.beeline.ru\r\nspeedcheck1.ptg.beeline.ru\r\nspeedcheck1.vdk.beeline.ru\r\nspeedcheck1.zvd.beeline.ru\r\nspeedtest-irkutsk.fttb.beeline.ru\r\nspeedtest-vladivostok.fttb.beeline.ru\r\nspeedtest.avito.ru\r\nspeedtest.beeline.ru\r\nspeedtest.tass.ru\r\nspeedtest.tbank.ru\r\nspeedtest.tinkoff.ru\r\nspeedtest.ural.mts.ru\r\nspeedtest1.avito.ru\r\nspeedtest1.chelyabinsk.beeline.ru\r\nspeedtest1.izhevsk.beeline.ru\r\nspeedtest1.kirov.beeline.ru\r\nspeedtest1.kurgan.beeline.ru\r\nspeedtest1.nnovgorod.beeline.ru\r\nspeedtest1.orel.beeline.ru\r\nspeedtest1.smr.beeline.ru\r\nspeedtest1.surgut.beeline.ru\r\nspeedtest1.syktyvkar.beeline.ru\r\nspeedtest1.tlt.beeline.ru\r\nspeedtest2.avito.ru\r\nspeedy.avito.ru\r\nspending.ach.gov.ru\r\nspending.gov.ru\r\nspesrd.worldbank.org\r\nspesrddev.worldbank.org\r\nspesrdqa.worldbank.org\r\nspesrdstg.worldbank.org\r\nspf.avito.ru\r\nspf1.i.mail.ru\r\nspf10.i.mail.ru\r\nspf11.i.mail.ru\r\nspf12.i.mail.ru\r\nspf13.i.mail.ru\r\nspf14.i.mail.ru\r\nspf15.i.mail.ru\r\nspf2.i.mail.ru\r\nspf20.i.mail.ru\r\nspf21.i.mail.ru\r\nspf22.i.mail.ru\r\nspf23.i.mail.ru\r\nspf24.i.mail.ru\r\nspf25.i.mail.ru\r\nspf3.i.mail.ru\r\nspf30.i.mail.ru\r\nspf31.i.mail.ru\r\nspf32.i.mail.ru\r\nspf33.i.mail.ru\r\nspf34.i.mail.ru\r\nspf35.i.mail.ru\r\nspf4.i.mail.ru\r\nspf40.i.mail.ru\r\nsph.avito.ru\r\nsphere.avito.ru\r\nsphere.mail.ru\r\nsphinx.avito.ru\r\nspi.avito.ru\r\nspi.mchs.ru\r\nspica.avito.ru\r\nspice.avito.ru\r\nspider.avito.ru\r\nspider.it.hh.ru\r\nspider01.rambler.ru\r\nspider02.rambler.ru\r\nspider1.mail.ru\r\nspider10.mail.ru\r\nspider11.mail.ru\r\nspider12.mail.ru\r\nspider13.mail.ru\r\nspider14.mail.ru\r\nspider15.mail.ru\r\nspider16.mail.ru\r\nspider17.mail.ru\r\nspider18.mail.ru\r\nspider19.mail.ru\r\nspider20.mail.ru\r\nspider21.mail.ru\r\nspider22.mail.ru\r\nspider23.mail.ru\r\nspider3.mail.ru\r\nspider4.mail.ru\r\nspider5.mail.ru\r\nspider6.mail.ru\r\nspider7.mail.ru\r\nspider9.mail.ru\r\nspiderman.avito.ru\r\nspike.avito.ru\r\nspike.yandex.ru\r\nspiker.avito.ru\r\nspin.avito.ru\r\nspiral.avito.ru\r\nspirit.avito.ru\r\nspiritvks.rosatom.ru\r\nspisat-ne-poluchitsya.rbc.ru\r\nspitfire.avito.ru\r\nspkk-api.online.sberbank.ru\r\nspkk-api.sberbank.ru\r\nspkk-static-web.online.sberbank.ru\r\nspkk-static.online.sberbank.ru\r\nspkk-static.sberbank.ru\r\nspl.avito.ru\r\nsplash.avito.ru\r\nsplash.zdorovie-shkolnika.spb.aif.ru\r\nsplayer.avito.ru\r\nsplunk.avito.ru\r\nsplunk01.infra.rbc.ru\r\nsplunk02.infra.rbc.ru\r\nsplunk03.infra.rbc.ru\r\nsplunk05.infra.rbc.ru\r\nsplunk115.worldbank.org\r\nsplunk118.worldbank.org\r\nsplunkc03.worldbank.org\r\nspm.avito.ru\r\nspms.searo.who.int\r\nspo.avito.ru\r\nspock.avito.ru\r\nspoilers.project.tinkoff.ru\r\nspokes.avito.ru\r\nspoktrack.megafon.ru\r\nsponsor.avito.ru\r\nsponsor.championat.com\r\nsponsor.gazeta.ru\r\nsponsor.vedomosti.ru\r\nsponsorship.afisha.ru\r\nspooky.avito.ru\r\nspoon.avito.ru\r\nspor.avito.ru\r\nsport-frontend-dev.k8s.rg.ru\r\nsport-frontend-stage.k8s.rg.ru\r\nsport-frontend.k8s.rg.ru\r\nsport.avito.ru\r\nsport.gazeta.ru\r\nsport.m.vkvideo.cs7777.vk.com\r\nsport.m.vkvideo.tau.vk.com\r\nsport.mail.ru\r\nsport.megafon.ru\r\nsport.mos.ru\r\nsport.rambler.ru\r\nsport.rutube.ru\r\nsport.tele2.ru\r\nsport.utf.mail.ru\r\nsport.vkvideo.cs7777.vk.com\r\nsport.vkvideo.tau.vk.com\r\nsportal.avito.ru\r\nsportbars.stage.championat.com\r\nsportforum.rbc.ru\r\nsportmaster.youdo.com\r\nsportmastermono.youdo.com\r\nsports.avito.ru\r\nsportsweekend.sport.mos.ru\r\nspost.sberbank.ru\r\nspot-rc.ixbt.com\r\nspot.avito.ru\r\nspot.ixbt.com\r\nspot.t2.ru\r\nspotlight.avito.ru\r\nspp.alfabank.ru\r\nspp.avito.ru\r\nsppocopscollab.worldbank.org\r\nsppocurlintredirect.worldbank.org\r\nsppocurlredirect.worldbank.org\r\nsppocwbdocs.worldbank.org\r\nsppocwbproxy.worldbank.org\r\nsppt.alfabank.ru\r\nsppvp.genproc.gov.ru\r\nspqscapps.worldbank.org\r\nspqscappsdev.worldbank.org\r\nspqscappsqa.worldbank.org\r\nspqscappsstg.worldbank.org\r\nspqscwapps.worldbank.org\r\nspqscwappsdev.worldbank.org\r\nspqscwappsqa.worldbank.org\r\nspr.avito.ru\r\nspr381.mail.ru\r\nspractic.garant.ru\r\nsprav.yandex.ru\r\nspravka.avito.ru\r\nspravochnik.yandex.ru\r\nspring.avito.ru\r\nspring.kino-teatr.ru\r\nspringboot.kino-teatr.ru\r\nsprint.avito.ru\r\nsprite.avito.ru\r\nsproxy01d.maps.yandex.ru\r\nsproxy01e.maps.yandex.ru\r\nsproxy01h.maps.yandex.ru\r\nsproxy02d.maps.yandex.ru\r\nsproxy02e.maps.yandex.ru\r\nsproxy02h.maps.yandex.ru\r\nsproxy03d.maps.yandex.ru\r\nsproxy03e.maps.yandex.ru\r\nsproxy03h.maps.yandex.ru\r\nsproxy04d.maps.yandex.ru\r\nsproxy04e.maps.yandex.ru\r\nsproxy04h.maps.yandex.ru\r\nspruce.avito.ru\r\nsps.avito.ru\r\nsps.rosatom.ru\r\nspspsmart.consultant.ru\r\nspss.avito.ru\r\nspsz.consultant.ru\r\nsputnik.avito.ru\r\nsputnik.iz.ru\r\nsputnik.mts.ru\r\nsputnik.tass.ru\r\nspy.avito.ru\r\nspy.revizorro.p.rkn.gov.ru\r\nspyalerta.meduza.io\r\nspyglass.meduza.io\r\nspylogsster.yandex.ru\r\nspyprom.meduza.io\r\nsq.avito.ru\r\nsq2-api-test.yandex.ru\r\nsq2-api.yandex.ru\r\nsq2.yandex.ru\r\nsql-logs.yandex.ru\r\nsql-logs3.yandex.ru\r\nsql-logs4.yandex.ru\r\nsql-logs6.yandex.ru\r\nsql-olap.yandex.ru\r\nsql-olap5.yandex.ru\r\nsql-olapmng1.yandex.ru\r\nsql-olapmng3a.yandex.ru\r\nsql-olapmng4.yandex.ru\r\nsql-olapmng6.yandex.ru\r\nsql-olapmng7.yandex.ru\r\nsql-pile3a.yandex.ru\r\nsql-pile6a.yandex.ru\r\nsql-profiles.yandex.ru\r\nsql-profiles4.yandex.ru\r\nsql-query-v.yandex.ru\r\nsql-report.yandex.ru\r\nsql.avito.ru\r\nsql01.avito.ru\r\nsql02.avito.ru\r\nsql1.avito.ru\r\nsql2.avito.ru\r\nsql3.avito.ru\r\nsql4.avito.ru\r\nsql5.avito.ru\r\nsqladmin.avito.ru\r\nsqlserver.avito.ru\r\nsquare.avito.ru\r\nsqueeze.avito.ru\r\nsquid.avito.ru\r\nsquirrel.avito.ru\r\nsr.avito.ru\r\nsr1.avito.ru\r\nsr2.avito.ru\r\nsr2019.mkb.ru\r\nsr2020.mkb.ru\r\nsr2021.rzd.ru\r\nsr2022.nornickel.com\r\nsr2022.rzd.ru\r\nsr2023.nornickel.com\r\nsr2023.rzd.ru\r\nsr2024.nornickel.com\r\nsr3.avito.ru\r\nsra.avito.ru\r\nsrapiproxy.worldbank.org\r\nsravniru.fa.apim.psbank.ru\r\nsrc.avito.ru\r\nsrchkafka1.mail.ru\r\nsrchkafka2.mail.ru\r\nsrchkafka3.mail.ru\r\nsrd.avito.ru\r\nsre.x5.ru\r\nsre24718.mk.ru\r\nsreda.dom.gosuslugi.ru\r\nsreda.ft01.dom.test.gosuslugi.ru\r\nsreda.vtc.dom.test.gosuslugi.ru\r\nsrednyaya-ahtuba.drom.ru\r\nsrg.open.ru\r\nsrhrproductionproxy.who.int\r\nsrhrproxyfallback.who.int\r\nsrhrstagingproxy.who.int\r\nsrilanka.avito.ru\r\nsrl.avito.ru\r\nsrm-atlas-2.gridpp.avito.ru\r\nsrm-atlas.gridpp.avito.ru\r\nsrm-deals.x5.ru\r\nsrm.avito.ru\r\nsrm.magnit.ru\r\nsrm.megafon.ru\r\nsrm.x5.ru\r\nsrm1.megafon.ru\r\nsrm2.magnit.ru\r\nsrmportal.worldbank.org\r\nsrmportaldev.worldbank.org\r\nsrmportalqa.worldbank.org\r\nsrmportaltst.worldbank.org\r\nsrmportaluat.worldbank.org\r\nsrn.beeline.ru\r\nsro.avito.ru\r\nsrp-s15.gosuslugi.ru\r\nsrp.avito.ru\r\nsrs.avito.ru\r\nsrt.avito.ru\r\nsrt.beeline.ru\r\nsrv-demo.mmobile.magnit.ru\r\nsrv-goszakupki.gosuslugi.ru\r\nsrv-rcm.mmobile.magnit.ru\r\nsrv.avito.ru\r\nsrv.fas.gov.ru\r\nsrv.film.ru\r\nsrv.habr.com\r\nsrv.hub.litres.ru\r\nsrv0.avito.ru\r\nsrv000cas01.sakha.gov.ru\r\nsrv000cas02.sakha.gov.ru\r\nsrv000lnc01.sakha.gov.ru\r\nsrv000mbx01.sakha.gov.ru\r\nsrv000mbx02.sakha.gov.ru\r\nsrv000mbx03.sakha.gov.ru\r\nsrv000mbx04.sakha.gov.ru\r\nsrv000mbx05.sakha.gov.ru\r\nsrv000mbx06.sakha.gov.ru\r\nsrv01.avito.ru\r\nsrv01.infra.rbc.ru\r\nsrv01.mail.infra.rbc.ru\r\nsrv01.mailnfm.rbc.ru\r\nsrv01.mailrelay.rbc.ru\r\nsrv01.test.builder.rbc.ru\r\nsrv01.trap.infra.rbc.ru\r\nsrv02.avito.ru\r\nsrv02.mailnfm.rbc.ru\r\nsrv02.mailrelay.rbc.ru\r\nsrv03.avito.ru\r\nsrv03.mailrelay.rbc.ru\r\nsrv04.infra.rbc.ru\r\nsrv05.infra.rbc.ru\r\nsrv05.mailrelay.rbc.ru\r\nsrv06.infra.rbc.ru\r\nsrv07.mailrelay.rbc.ru\r\nsrv08.infra.rbc.ru\r\nsrv08.mailrelay.rbc.ru\r\nsrv1.avito.ru\r\nsrv10.avito.ru\r\nsrv10.vk.com\r\nsrv11.avito.ru\r\nsrv115inv01.sakha.gov.ru\r\nsrv12.avito.ru\r\nsrv13.avito.ru\r\nsrv14.avito.ru\r\nsrv15.avito.ru\r\nsrv16.avito.ru\r\nsrv17.avito.ru\r\nsrv18.avito.ru\r\nsrv19.avito.ru\r\nsrv2.avito.ru\r\nsrv20.avito.ru\r\nsrv20.vk.com\r\nsrv21.avito.ru\r\nsrv22.avito.ru\r\nsrv23.avito.ru\r\nsrv24.avito.ru\r\nsrv3.avito.ru\r\nsrv4.avito.ru\r\nsrv5.avito.ru\r\nsrv6.avito.ru\r\nsrv7.avito.ru\r\nsrv8.avito.ru\r\nsrv9.avito.ru\r\nsrvc.prod.monitor.meduza.io\r\nsrvc42.avito.ru\r\nsrvc47.avito.ru\r\nsrvc52.avito.ru\r\nsrvc57.avito.ru\r\nsrvc62.avito.ru\r\nsrvc67.avito.ru\r\nss-599-www.k.avito.ru\r\nss-fns.mchs.ru\r\nss.atlas.mchs.ru\r\nss.avito.ru\r\nss.dev.firenotification.mchs.ru\r\nss.firenotification.mchs.gov.ru\r\nss.firenotification.mchs.ru\r\nss.fl.firenotification.mchs.ru\r\nss.kino-teatr.ru\r\nss.mail.ru\r\nss.tech.cgu.mchs.ru\r\nss1.avito.ru\r\nss2.avito.ru\r\nss4.avito.ru\r\nssb.avito.ru\r\nssc.avito.ru\r\nssc.rosatom.ru\r\nssd.avito.ru\r\nsse.avito.ru\r\nssh.avito.ru\r\nssh.zdorovie-shkolnika.spb.aif.ru\r\nssh1.avito.ru\r\nssh2.avito.ru\r\nsshiovz.gosuslugi.ru\r\nssi.avito.ru\r\nssi.demo.megafon.ru\r\nssl-vpn.avito.ru\r\nssl.avito.ru\r\nssl.mnr.gov.ru\r\nssl.mts.ru\r\nssl.rshb.ru\r\nssl1.avito.ru\r\nssl2.avito.ru\r\nssl3.avito.ru\r\nssl4.avito.ru\r\nssl7.avito.ru\r\nsslorigin.avito.ru\r\nssltest.avito.ru\r\nsslvpn.avito.ru\r\nsslvpn.lemanapro.ru\r\nsslvpn.rbc.ru\r\nsslvpna.lemanapro.ru\r\nsslvpnb.lemanapro.ru\r\nsslvpnt.lemanapro.ru\r\nsso-app.vtb.ru\r\nsso-app2.vtb.ru\r\nsso-app3.vtb.ru\r\nsso-app4.vtb.ru\r\nsso-app5.vtb.ru\r\nsso-app6.vtb.ru\r\nsso-auth.mchs.gov.ru\r\nsso-buh.sovcombank.ru\r\nsso-fmc.beeline.ru\r\nsso-fmtn.beeline.ru\r\nsso-ib.vtb.ru\r\nsso-inv-disc.x5.ru\r\nsso-rbt.beeline.ru\r\nsso-uss.beeline.ru\r\nsso.appservice.azuremsk.ec.mts.ru\r\nsso.avito.ru\r\nsso.babyblog.ru\r\nsso.beeline.ru\r\nsso.cgu.mchs.ru\r\nsso.dev.iac.mchs.ru\r\nsso.dzen.ru\r\nsso.if.test.vtb.ru\r\nsso.kinopoisk.ru\r\nsso.magnit.ru\r\nsso.mts.ru\r\nsso.office.tutu.ru\r\nsso.open.ru\r\nsso.partners.megafon.ru\r\nsso.pixso.beeline.ru\r\nsso.tass.ru\r\nsso.testing.kinopoisk.ru\r\nsso.tinkoff.ru\r\nsso.x5.ru\r\nssobmc.magnit.ru\r\nssoextapm.worldbank.org\r\nssoextapmdev.worldbank.org\r\nssoextapmqa.worldbank.org\r\nssoextapmstg.worldbank.org\r\nssotest.avito.ru\r\nssp-admin.demo.megafon.ru\r\nssp.avito.ru\r\nssp.demo.megafon.ru\r\nssp.dom.test.gosuslugi.ru\r\nssp.gosuslugi.ru\r\nssp.rambler.ru\r\nssp.tass.ru\r\nssp1.rtb.beeline.ru\r\nssp3.rtb.beeline.ru\r\nssp4.rtb.beeline.ru\r\nssr.avito.ru\r\nssr.mos.ru\r\nssrs.avito.ru\r\nssrs.searo.who.int\r\nsss.avito.ru\r\nsss.kino-teatr.ru\r\nsss.worldbank.org\r\nsss2.avito.ru\r\nsssd.worldbank.org\r\nsssp.worldbank.org\r\nsssq.worldbank.org\r\nssss.avito.ru\r\nsssss.avito.ru\r\nsssttt.avito.ru\r\nssswww.kino-teatr.ru\r\nsst.avito.ru\r\nsst.tinkoff.ru\r\nssu.1980.yandex.ru\r\nssun587ip.avito.ru\r\nsswww.kino-teatr.ru\r\nst-01.meduza.io\r\nst-chat-sharing.vtb.ru\r\nst-chat-turn.vtb.ru\r\nst-chat.vtb.ru\r\nst-im.kinopoisk.ru\r\nst-krukovo.mos.ru\r\nst.app.vtb.ru\r\nst.avito.ru\r\nst.babyblog.ru\r\nst.championat.com\r\nst.kinopoisk.ru\r\nst.stage.championat.com\r\nst.yandex.ru\r\nst01.avito.ru\r\nst1-opros-sberbank-ru.sberbank.ru\r\nst1.avito.ru\r\nst1.esm.apteka.ru\r\nst1.gismeteo.ru\r\nst1.kinopoisk.ru\r\nst2.avito.ru\r\nst2.esm.apteka.ru\r\nst3.avito.ru\r\nst3.gismeteo.ru\r\nst3.kinopoisk.ru\r\nst4.avito.ru\r\nst4.gismeteo.ru\r\nst5.gismeteo.ru\r\nst6.avito.ru\r\nst6.gismeteo.ru\r\nst7.gismeteo.ru\r\nst8.gismeteo.ru\r\nsta.avito.ru\r\nstable.avito.ru\r\nstable.tvh.mts.ru\r\nstack.avito.ru\r\nstadiony.chempionat.tass.ru\r\nstaf.avito.ru\r\nstaff-acquisition.magnit.ru\r\nstaff-lite-awacs-balancer.yandex.ru\r\nstaff.avito.ru\r\nstaff.m24.ru\r\nstaff.mos.ru\r\nstaff.yandex.ru\r\nstaffs.avito.ru\r\nstage-aw.mts.ru\r\nstage-beauty.max.com\r\nstage-k8s.cyber.sports.ru\r\nstage-k8s.sports.ru\r\nstage-mic.mts.ru\r\nstage-mis.mts.ru\r\nstage-premium.mts.ru\r\nstage-special.srv.hub.litres.ru\r\nstage-test.moscowapp.mos.ru\r\nstage-xm-mam.mts.ru\r\nstage-xm-mdm.mts.ru\r\nstage-xm-storage.mts.ru\r\nstage.1tv.ru\r\nstage.2022.1tv.ru\r\nstage.admin.horos.rambler.ru\r\nstage.aggregator.rambler.ru\r\nstage.aisubp.mos.ru\r\nstage.api-marketolog.mts.ru\r\nstage.auth.ssl.mts.ru\r\nstage.avatar.online.sberbank.ru\r\nstage.avito.ru\r\nstage.baikal.tg.t2.ru\r\nstage.baikal.travel.t2.ru\r\nstage.cashback.mts.ru\r\nstage.cashback.ssl.mts.ru\r\nstage.center.tg.t2.ru\r\nstage.center.travel.t2.ru\r\nstage.championat.com\r\nstage.chat.ssl.mts.ru\r\nstage.chernozem.tg.t2.ru\r\nstage.chernozem.travel.t2.ru\r\nstage.citilink.ru\r\nstage.city.mts.ru\r\nstage.cloud.mts.ru\r\nstage.cloud.vk.com\r\nstage.daily.afisha.ru\r\nstage.deti.mts.ru\r\nstage.dev.lab.x5.ru\r\nstage.domofon.mts.ru\r\nstage.front.node1.online.sberbank.ru\r\nstage.front.node2.online.sberbank.ru\r\nstage.fun.rambler.ru\r\nstage.games.rambler.ru\r\nstage.garnet.pet-project.habr.com\r\nstage.gkh.hab.aif.ru\r\nstage.head.rambler.ru\r\nstage.hell.rambler.ru\r\nstage.help.rambler.ru\r\nstage.horos.rambler.ru\r\nstage.kommersant.ru\r\nstage.lk.mts.ru\r\nstage.lkb2b.mts.ru\r\nstage.m.mts.ru\r\nstage.marketing.mts.ru\r\nstage.marketolog.mts.ru\r\nstage.moscow.tg.t2.ru\r\nstage.moscow.travel.t2.ru\r\nstage.node1.online.sberbank.ru\r\nstage.node2.online.sberbank.ru\r\nstage.ntv.ru\r\nstage.nw.tg.t2.ru\r\nstage.nw.travel.t2.ru\r\nstage.online.sberbank.ru\r\nstage.perekrestok.ru\r\nstage.pfm.stat.online.sberbank.ru\r\nstage.prct.esm.apteka.ru\r\nstage.sapphire.pet-project.habr.com\r\nstage.shop.mts.ru\r\nstage.siberia.tg.t2.ru\r\nstage.siberia.travel.t2.ru\r\nstage.skidka.mts.ru\r\nstage.soft.rambler.ru\r\nstage.south.tg.t2.ru\r\nstage.south.travel.t2.ru\r\nstage.sport.rambler.ru\r\nstage.sports.ru\r\nstage.stat.online.sberbank.ru\r\nstage.static-marketolog.mts.ru\r\nstage.streamlk.mts.ru\r\nstage.streamua.mts.ru\r\nstage.tg.t2.ru\r\nstage.travel.t2.ru\r\nstage.ural.tg.t2.ru\r\nstage.ural.travel.t2.ru\r\nstage.vedomosti.ru\r\nstage.videoplatform.rambler.ru\r\nstage.virtualsec.beeline.ru\r\nstage.volga.tg.t2.ru\r\nstage.volga.travel.t2.ru\r\nstage.weather.rambler.ru\r\nstage04.comments.rambler.ru\r\nstage1.aggregator.rambler.ru\r\nstage1.avito.ru\r\nstage1.kommersant.ru\r\nstage1.lenta.ru\r\nstage1.livejournal.com\r\nstage1.vibe.rambler.ru\r\nstage1.volna.rambler.ru\r\nstage1.w.rambler.ru\r\nstage2.1tv.ru\r\nstage2.aggregator.rambler.ru\r\nstage2.avito.ru\r\nstage2.horos.rambler.ru\r\nstage2.lenta.ru\r\nstage2.vibe.rambler.ru\r\nstage2.volna.rambler.ru\r\nstage2.w.rambler.ru\r\nstage3.aggregator.rambler.ru\r\nstage3.vibe.rambler.ru\r\nstage3.w.rambler.ru\r\nstage4.aggregator.rambler.ru\r\nstage4.cloud.vk.com\r\nstage4.kommersant.ru\r\nstage5.aggregator.rambler.ru\r\nstage5.kommersant.ru\r\nstage6.aggregator.rambler.ru\r\nstage6.kommersant.ru\r\nstage7.kommersant.ru\r\nstageadmin.games.rambler.ru\r\nstageapi.games.rambler.ru\r\nstages.avito.ru\r\nstaging-718506.culture.ru\r\nstaging-lms.avito.ru\r\nstaging.admin.class.rambler.ru\r\nstaging.afro.who.int\r\nstaging.allure.tinkoff.ru\r\nstaging.apigw.rbc.ru\r\nstaging.apteka.ru\r\nstaging.auth.rbc.ru\r\nstaging.avito.ru\r\nstaging.cash.rbc.ru\r\nstaging.class.rambler.ru\r\nstaging.crm.2gis.ru\r\nstaging.euronews.com\r\nstaging.ivi.ru\r\nstaging.k.avito.ru\r\nstaging.kino-teatr.ru\r\nstaging.meduza.io\r\nstaging.megafon.ru\r\nstaging.prodano.meduza.io\r\nstaging.secure.avito.ru\r\nstaging.shop.avito.ru\r\nstaging.static.yc.mvideo.ru\r\nstaging.tech.mvideo.ru\r\nstaging.v1.apigw.rbc.ru\r\nstaging.v2.auth.rbc.ru\r\nstaging1.avito.ru\r\nstaging1.meduza.io\r\nstaging2.admin.class.rambler.ru\r\nstaging2.auth.rbc.ru\r\nstaging2.avito.ru\r\nstaging2.class.rambler.ru\r\nstakeholdersurvey2021.rzd.ru\r\nstakeholdersurvey2022.rzd.ru\r\nstalingrad.tass.ru\r\nstalker.avito.ru\r\nstamp.avito.ru\r\nstamps.avito.ru\r\nstan.avito.ru\r\nstandard.avito.ru\r\nstandardreportsc.worldbank.org\r\nstandart.minzdrav.gov.ru\r\nstandby.avito.ru\r\nstandin2.online.sberbank.ru\r\nstansmith.p.afisha.ru\r\nstapprove.worldbank.org\r\nstapprovedev.worldbank.org\r\nstapproveqa.worldbank.org\r\nstapprovestg.worldbank.org\r\nstapprovetst.worldbank.org\r\nstar.avito.ru\r\nstar.garant.ru\r\nstar.megafon.ru\r\nstar.worldbank.org\r\nstar2.avito.ru\r\nstar3.avito.ru\r\nstar4.avito.ru\r\nstar7.avito.ru\r\nstar9.avito.ru\r\nstardust.avito.ru\r\nstargate.avito.ru\r\nstargazer.avito.ru\r\nstark.avito.ru\r\nstarlife.avito.ru\r\nstarlight.avito.ru\r\nstarlook.lady.mail.ru\r\nstarnet.avito.ru\r\nstars.avito.ru\r\nstart-bo-test.vtb.ru\r\nstart-test.mkb.ru\r\nstart-wifi.spb.mts.ru\r\nstart.avito.ru\r\nstart.feedback.rosatom.ru\r\nstart.megafon.ru\r\nstart.mkb.ru\r\nstart.money.yandex.ru\r\nstart.open.ru\r\nstart.rosbank.ru\r\nstart.ru.avito.ru\r\nstart.tinkoff.ru\r\nstart.vtb.ru\r\nstart2.avito.ru\r\nstart30.2016.yandex.ru\r\nstartap.mts.ru\r\nstartrek-back01e.yandex.ru\r\nstartrek-search01e.yandex.ru\r\nstartrek.avito.ru\r\nstartrek.mail.ru\r\nstartup.avito.ru\r\nstartup.mts.ru\r\nstartup.pochta.ru\r\nstartup.rosbank.ru\r\nstartup.vtb.ru\r\nstartups.rostelecom.ru\r\nstartups.yandex.ru\r\nstartwifi.beeline.ru\r\nstarwars.avito.ru\r\nstarweb.avito.ru\r\nstash.2gis.ru\r\nstash.avito.ru\r\nstash.msk.avito.ru\r\nstat-lk.rpn.gov.ru\r\nstat-news.ixbt.com\r\nstat-old.net.ixbt.com\r\nstat-put-stub.production.meduza.io\r\nstat.api.2gis.ru\r\nstat.avito.ru\r\nstat.dev.videoplatform.rambler.ru\r\nstat.esr.sberbank.ru\r\nstat.fadn.gov.ru\r\nstat.lab.x5.ru\r\nstat.mkb.ru\r\nstat.mobile.mail.ru\r\nstat.net.ixbt.com\r\nstat.online.sberbank.ru\r\nstat.openbank.ru\r\nstat.sbi.sberbank.ru\r\nstat.sports.ru\r\nstat.stage.videoplatform.rambler.ru\r\nstat.tiu.ru\r\nstat.top100.rambler.ru\r\nstat.yandex.ru\r\nstat1.avito.ru\r\nstat2.avito.ru\r\nstat202307.net.ixbt.com\r\nstat4.avito.ru\r\nstatbox2.i.mail.ru\r\nstatd.mail.ru\r\nstatdb1.mail.ru\r\nstate.kremlin.ru\r\nstatface.yandex.ru\r\nstatic-cache.ru.tiu.ru\r\nstatic-cache.tiu.ru\r\nstatic-cert.evo.rosbank.ru\r\nstatic-dev.test.gosuslugi.ru\r\nstatic-hbb.1tv.ru\r\nstatic-mal-g-in-g01-s.avito.ru\r\nstatic-maps.yandex.ru\r\nstatic-marketolog.mts.ru\r\nstatic-n1-psi-pbmob.testonline.sberbank.ru\r\nstatic-n2-psi-pbmob.testonline.sberbank.ru\r\nstatic-pano.maps.yandex.ru\r\nstatic-portal1.test.gosuslugi.ru\r\nstatic-r2.meduza.io\r\nstatic-si1-psi-pbmob.testonline.sberbank.ru\r\nstatic-test.evo.rosbank.ru\r\nstatic-webdav.banki.ru\r\nstatic.1tv.ru\r\nstatic.30.megafon.ru\r\nstatic.apteka.ru\r\nstatic.avito.ru\r\nstatic.baza.drom.ru\r\nstatic.beeline.ru\r\nstatic.citilink.ru\r\nstatic.consultant.ru\r\nstatic.data.tinkoff.ru\r\nstatic.devices.online.sberbank.ru\r\nstatic.dl.mail.ru\r\nstatic.dmpkit.lemanapro.ru\r\nstatic.dsp.rambler.ru\r\nstatic.eldorado.ru\r\nstatic.euronews.com\r\nstatic.evo.rosbank.ru\r\nstatic.gazeta.ru\r\nstatic.gmrk.mail.ru\r\nstatic.gosuslugi.ru\r\nstatic.gosweb.gosuslugi.ru\r\nstatic.government.ru\r\nstatic.it.hh.ru\r\nstatic.kino-teatr.ru\r\nstatic.kino.1tv.ru\r\nstatic.kremlin.ru\r\nstatic.lemanapro.ru\r\nstatic.maps.api.2gis.ru\r\nstatic.mchs.ru\r\nstatic.mk.ru\r\nstatic.mobapp-daily-stage.open.ru\r\nstatic.mobapp-daily-test.open.ru\r\nstatic.mobapp-daily.open.ru\r\nstatic.mobapp-daily1.open.ru\r\nstatic.mobapp-daily2.open.ru\r\nstatic.mtp.mos.ru\r\nstatic.mts.ru\r\nstatic.new.market.pochta.ru\r\nstatic.onlinetrade.ru\r\nstatic.operator.mail.ru\r\nstatic.origin.avito.ru\r\nstatic.pochta.ru\r\nstatic.reader.litres.ru\r\nstatic.rosbalt.ru\r\nstatic.rutube.ru\r\nstatic.sbi.sberbank.ru\r\nstatic.staging.euronews.com\r\nstatic.tinkoff.ru\r\nstatic.video.yandex.ru\r\nstatic.yc.mvideo.ru\r\nstatic0.avito.ru\r\nstatic00.perekrestok.ru\r\nstatic01.perekrestok.ru\r\nstatic02.perekrestok.ru\r\nstatic03.perekrestok.ru\r\nstatic04.perekrestok.ru\r\nstatic05.perekrestok.ru\r\nstatic06.perekrestok.ru\r\nstatic07.perekrestok.ru\r\nstatic08.perekrestok.ru\r\nstatic09.perekrestok.ru\r\nstatic1-repo.aif.ru\r\nstatic1.1tv.ru\r\nstatic1.avito.ru\r\nstatic1.banki.ru\r\nstatic1.megafon.ru\r\nstatic1.repo.aif.ru\r\nstatic2.1tv.ru\r\nstatic2.aif.ru\r\nstatic2.avito.ru\r\nstatic2.banki.ru\r\nstatic2.megafon.ru\r\nstatic2.tinkoff.ru\r\nstatic3.1tv.ru\r\nstatic3.avito.ru\r\nstatic3.banki.ru\r\nstatic3.megafon.ru\r\nstatic3.mos.ru\r\nstatic3.zdorovie-shkolnika.spb.aif.ru\r\nstatic4.avito.ru\r\nstatic4.banki.ru\r\nstatic4.megafon.ru\r\nstatic5.avito.ru\r\nstatic5.megafon.ru\r\nstatic6.megafon.ru\r\nstatic7.megafon.ru\r\nstatic8.megafon.ru\r\nstatic9.megafon.ru\r\nstaticcyl.euronews.com\r\nstaticdevicestestift.online.sberbank.ru\r\nstatics.avito.ru\r\nstation.avito.ru\r\nstatistic.avito.ru\r\nstatistiche.avito.ru\r\nstatistics.avito.ru\r\nstatistik.avito.ru\r\nstats-buh.sovcombank.ru\r\nstats.alfabank.ru\r\nstats.avito.ru\r\nstats.mos.ru\r\nstats.tass.ru\r\nstats1.avito.ru\r\nstats2.avito.ru\r\nstatus.avito.ru\r\nstatus.cloud.yandex.ru\r\nstatus.gkh.hab.aif.ru\r\nstatus.k8s.rg.ru\r\nstatus.megafon.ru\r\nstatus.roseltorg.ru\r\nstatus.voicekit.tinkoff.ru\r\nstatus2.mail.ru\r\nstatuspage1.mail.ru\r\nstatuspage2.mail.ru\r\nstatystyki.avito.ru\r\nstav.aif.ru\r\nstav.dev.kp.ru\r\nstav.kp.ru\r\nstavropol-r07.gosweb.gosuslugi.ru\r\nstavropol.afisha.ru\r\nstavropol.aif.ru\r\nstavropol.avito.ru\r\nstavropol.beeline.ru\r\nstavropol.dns-shop.ru\r\nstavropol.drom.ru\r\nstavropol.fas.gov.ru\r\nstavropol.hh.ru\r\nstavropol.home.megafon.ru\r\nstavropol.lemanapro.ru\r\nstavropol.mts.ru\r\nstavropol.shop.megafon.ru\r\nstavropol10.tass.ru\r\nstavropolye.tass.ru\r\nstavsad4.gosuslugi.ru\r\nstayathome.open.ru\r\nstayhome.profi.ru\r\nstb.avito.ru\r\nstbackup2.i.mail.ru\r\nstbapi.kinopoisk.ru\r\nstbx-webface01e.yandex.ru\r\nstc.avito.ru\r\nstcwebservice.worldbank.org\r\nstcwebserviceqa.worldbank.org\r\nstd.avito.ru\r\nstd.minzdrav.gov.ru\r\nstd.msk-ix.cloud.yandex.ru\r\nstd2.mail.ru\r\nstd5.i.mail.ru\r\nstdu.sberbank.ru\r\nsteady.yandex.ru\r\nstealth.avito.ru\r\nsteam.avito.ru\r\nsteel.avito.ru\r\nsteel.tass.ru\r\nstella.avito.ru\r\nstellar.avito.ru\r\nstemasskoe-r73.gosweb.gosuslugi.ru\r\nstend.apparat.gov.ru\r\nstenly.87.yandex.ru\r\nstep.avito.ru\r\nstep.worldbank.org\r\nstepan-fe.go.mail.ru\r\nstepan.meshkov.69.yandex.ru\r\nstepapiqa.worldbank.org\r\nstephane.avito.ru\r\nstephanie.avito.ru\r\nstephen.avito.ru\r\nstepqa.worldbank.org\r\nstepuat.worldbank.org\r\nstepuiqa.worldbank.org\r\nsterling.avito.ru\r\nsterlitamak.babyblog.ru\r\nsterlitamak.dns-shop.ru\r\nsterlitamak.lemanapro.ru\r\nsterra.mfc.tambov.gov.ru\r\nsterra.tambov.gov.ru\r\nstest.iz.ru\r\nsteve.avito.ru\r\nsteven.avito.ru\r\nsteven.zdorovie-shkolnika.spb.aif.ru\r\nstg-careers.who.int\r\nstg.api.max.com\r\nstg.avito.ru\r\nstg.ext.max.com\r\nstg.kino-teatr.ru\r\nstg.ok.ru\r\nstg.www.max.com\r\nstghyx.citilink.ru\r\nstgimn12.gosuslugi.ru\r\nstgraphite3.i.mail.ru\r\nstgraphite4.i.mail.ru\r\nsti.avito.ru\r\nstick.avito.ru\r\nsticker00.yandex.ru\r\nsticker01.yandex.ru\r\nsticker02.yandex.ru\r\nsticker04.yandex.ru\r\nstickermania.megafon.ru\r\nsting.avito.ru\r\nstingray.avito.ru\r\nstiri.avito.ru\r\nstirka.magnit.ru\r\nstirlitz.iz.ru\r\nstitch.avito.ru\r\nstk.2gis.ru\r\nstk.avito.ru\r\nstk.beeline.ru\r\nstk2.2gis.ru\r\nstk3.2gis.ru\r\nstl.avito.ru\r\nstlog11.i.mail.ru\r\nstlouis.avito.ru\r\nstm-service.mts.ru\r\nstm.avito.ru\r\nstm.sovcombank.ru\r\nstns1.i.mail.ru\r\nstns1.mail.ru\r\nstns2.mail.ru\r\nstock-exchange.tele2.ru\r\nstock.alfabank.ru\r\nstock.avito.ru\r\nstockholm.lady.mail.ru\r\nstockoptions.x5.ru\r\nstocks.avito.ru\r\nstoloto.life.ru\r\nstone.avito.ru\r\nstop-reklama.megafon.ru\r\nstop.avito.ru\r\nstop.mts.ru\r\nstopads.mts.ru\r\nstopcovid19.sakha.gov.ru\r\nstophiv.daily.afisha.ru\r\nstopspam.mts.ru\r\nstopvirus.m24.ru\r\nstor1.avito.ru\r\nstorage-nsk.beeline.ru\r\nstorage-rnd.beeline.ru\r\nstorage-service-demo.mdrive.magnit.ru\r\nstorage-service-prod.mdrive.magnit.ru\r\nstorage-service.demo.mdrive.magnit.ru\r\nstorage.avito.ru\r\nstorage.beeline.ru\r\nstorage.consultant.ru\r\nstorage.ixbt.com\r\nstorage.kino-teatr.ru\r\nstorage.lk.cdn.megafon.ru\r\nstorage.madeinrussia.gov.ru\r\nstorage.mts.ru\r\nstorage.music.yandex.ru\r\nstorage.net.ixbt.com\r\nstorage.sovcombank.ru\r\nstorage.sport.sovcombank.ru\r\nstorage1.avito.ru\r\nstorage2.avito.ru\r\nstorage600.abesekerskij.ing.k8s.dev.ivi.ru\r\nstorage600.advstand.ing.k8s.dev.ivi.ru\r\nstorage600.agrozniy.ing.k8s.dev.ivi.ru\r\nstorage600.akazachev.ing.k8s.dev.ivi.ru\r\nstorage600.akhlebnikov.ing.k8s.dev.ivi.ru\r\nstorage600.alapshin.ing.k8s.dev.ivi.ru\r\nstorage600.android-autotest-2.ing.k8s.dev.ivi.ru\r\nstorage600.android-autotest-smoke.ing.k8s.dev.ivi.ru\r\nstorage600.android-autotest.ing.k8s.dev.ivi.ru\r\nstorage600.android-mobile.ing.k8s.dev.ivi.ru\r\nstorage600.android.ing.k8s.dev.ivi.ru\r\nstorage600.apetrushishin.ing.k8s.dev.ivi.ru\r\nstorage600.asmirnov.ing.k8s.dev.ivi.ru\r\nstorage600.astarostin.ing.k8s.dev.ivi.ru\r\nstorage600.atitova.ing.k8s.dev.ivi.ru\r\nstorage600.davramenko.ing.k8s.dev.ivi.ru\r\nstorage600.dbondarenko.ing.k8s.dev.ivi.ru\r\nstorage600.dpronin.ing.k8s.dev.ivi.ru\r\nstorage600.dshaymardanova.ing.k8s.dev.ivi.ru\r\nstorage600.dshebordaev.ing.k8s.dev.ivi.ru\r\nstorage600.dsmirnov.ing.k8s.dev.ivi.ru\r\nstorage600.eryabets.ing.k8s.dev.ivi.ru\r\nstorage600.esosulin.ing.k8s.dev.ivi.ru\r\nstorage600.etcd-autotest.ing.k8s.dev.ivi.ru\r\nstorage600.gambit-autotest-1.ing.k8s.dev.ivi.ru\r\nstorage600.gambit-autotest-2.ing.k8s.dev.ivi.ru\r\nstorage600.gambit-qa.ing.k8s.dev.ivi.ru\r\nstorage600.gambit-smoke.ing.k8s.dev.ivi.ru\r\nstorage600.hydra-autotest.ing.k8s.dev.ivi.ru\r\nstorage600.ialekhin.ing.k8s.dev.ivi.ru\r\nstorage600.ikrylov.ing.k8s.dev.ivi.ru\r\nstorage600.ios-primo.ing.k8s.dev.ivi.ru\r\nstorage600.ios-smoke.ing.k8s.dev.ivi.ru\r\nstorage600.ios.ing.k8s.dev.ivi.ru\r\nstorage600.isizov-2.ing.k8s.dev.ivi.ru\r\nstorage600.kmartyashkov.ing.k8s.dev.ivi.ru\r\nstorage600.mgrischenko-1.ing.k8s.dev.ivi.ru\r\nstorage600.mgrischenko.ing.k8s.dev.ivi.ru\r\nstorage600.mkudusov.ing.k8s.dev.ivi.ru\r\nstorage600.nbarsukov.ing.k8s.dev.ivi.ru\r\nstorage600.nbrodnikov.ing.k8s.dev.ivi.ru\r\nstorage600.nfrolkin.ing.k8s.dev.ivi.ru\r\nstorage600.ngoncharov.ing.k8s.dev.ivi.ru\r\nstorage600.nkudryavtseva.ing.k8s.dev.ivi.ru\r\nstorage600.nmarchenko.ing.k8s.dev.ivi.ru\r\nstorage600.paidmodel.ing.k8s.dev.ivi.ru\r\nstorage600.pchukhnina.ing.k8s.dev.ivi.ru\r\nstorage600.punpun.ing.k8s.dev.ivi.ru\r\nstorage600.sivanov.ing.k8s.dev.ivi.ru\r\nstorage600.smarttv.ing.k8s.dev.ivi.ru\r\nstorage600.smoke-web.ing.k8s.dev.ivi.ru\r\nstorage600.streamux.ing.k8s.dev.ivi.ru\r\nstorage600.svolkov.ing.k8s.dev.ivi.ru\r\nstorage600.takimova.ing.k8s.dev.ivi.ru\r\nstorage600.ttsvetkova.ing.k8s.dev.ivi.ru\r\nstorage600.vanikin.ing.k8s.dev.ivi.ru\r\nstorage600.vishchuk.ing.k8s.dev.ivi.ru\r\nstorage600.vision-autotest-2.ing.k8s.dev.ivi.ru\r\nstorage600.vision-autotest.ing.k8s.dev.ivi.ru\r\nstorage600.vision-smoke.ing.k8s.dev.ivi.ru\r\nstorage600.vision.ing.k8s.dev.ivi.ru\r\nstorage600.vklimentev.ing.k8s.dev.ivi.ru\r\nstorage600.vkutskaylis.ing.k8s.dev.ivi.ru\r\nstorage600.vrylov.ing.k8s.dev.ivi.ru\r\nstorage600.vstreltsov.ing.k8s.dev.ivi.ru\r\nstorage600.vzhilkin.ing.k8s.dev.ivi.ru\r\nstorage600.waaagh-autotests.ing.k8s.dev.ivi.ru\r\nstorage600.web.ing.k8s.dev.ivi.ru\r\nstorage600.yapavlov.ing.k8s.dev.ivi.ru\r\nstorage600.ymakovskaya.ing.k8s.dev.ivi.ru\r\nstorage600.ysimonov.ing.k8s.dev.ivi.ru\r\nstorage620.nfrolkin.ing.k8s.dev.ivi.ru\r\nstorage620.ngoncharov.ing.k8s.dev.ivi.ru\r\nstorage620.svolkov.ing.k8s.dev.ivi.ru\r\nstoragektv.rosatom.ru\r\nstoragezone01.mts.ru\r\nstore-backup.rambler.ru\r\nstore-cert.rosbank.ru\r\nstore-dev.rambler.ru\r\nstore-dev2.rambler.ru\r\nstore-infra.rambler.ru\r\nstore-internal.rambler.ru\r\nstore-ms5.yandex.ru\r\nstore-ms7.yandex.ru\r\nstore-stage.rambler.ru\r\nstore-test.rosbank.ru\r\nstore.alfabank.ru\r\nstore.avito.ru\r\nstore.heroism.yandex.ru\r\nstore.net.ixbt.com\r\nstore.psbank.ru\r\nstore.rambler.ru\r\nstore.rosbank.ru\r\nstore.rutube.ru\r\nstore.sber.ru\r\nstore.second.meduza.io\r\nstore.sports.ru\r\nstore.staging.meduza.io\r\nstore.tinkoff.ru\r\nstore.yandex.ru\r\nstore01.elastic-dp.infra.rbc.ru\r\nstore02.elastic-dp.infra.rbc.ru\r\nstore1.avito.ru\r\nstore2.avito.ru\r\nstorefront.avito.ru\r\nstores.avito.ru\r\nstorex.avito.ru\r\nstories-res.online.sberbank.ru\r\nstories-stat.online.sberbank.ru\r\nstories.2gis.ru\r\nstories.api.2gis.ru\r\nstories.avito.ru\r\nstories.kino-teatr.ru\r\nstories.livejournal.com\r\nstork.2015.yandex.ru\r\nstorm.avito.ru\r\nstorm2.avito.ru\r\nstormfall.mail.ru\r\nstormriders.mail.ru\r\nstory.avito.ru\r\nstory.tutu.ru\r\nstoryboard.abesekerskij.ing.k8s.dev.ivi.ru\r\nstoryboard.advstand.ing.k8s.dev.ivi.ru\r\nstoryboard.agrozniy.ing.k8s.dev.ivi.ru\r\nstoryboard.akazachev.ing.k8s.dev.ivi.ru\r\nstoryboard.akhlebnikov.ing.k8s.dev.ivi.ru\r\nstoryboard.alapshin.ing.k8s.dev.ivi.ru\r\nstoryboard.android-autotest-2.ing.k8s.dev.ivi.ru\r\nstoryboard.android-autotest-smoke.ing.k8s.dev.ivi.ru\r\nstoryboard.android-autotest.ing.k8s.dev.ivi.ru\r\nstoryboard.android-mobile.ing.k8s.dev.ivi.ru\r\nstoryboard.android.ing.k8s.dev.ivi.ru\r\nstoryboard.apetrushishin.ing.k8s.dev.ivi.ru\r\nstoryboard.asmirnov.ing.k8s.dev.ivi.ru\r\nstoryboard.astarostin.ing.k8s.dev.ivi.ru\r\nstoryboard.atitova.ing.k8s.dev.ivi.ru\r\nstoryboard.davramenko.ing.k8s.dev.ivi.ru\r\nstoryboard.dbondarenko.ing.k8s.dev.ivi.ru\r\nstoryboard.dpronin.ing.k8s.dev.ivi.ru\r\nstoryboard.dshaymardanova.ing.k8s.dev.ivi.ru\r\nstoryboard.dshebordaev.ing.k8s.dev.ivi.ru\r\nstoryboard.dsmirnov.ing.k8s.dev.ivi.ru\r\nstoryboard.eryabets.ing.k8s.dev.ivi.ru\r\nstoryboard.esosulin.ing.k8s.dev.ivi.ru\r\nstoryboard.etcd-autotest.ing.k8s.dev.ivi.ru\r\nstoryboard.gambit-autotest-1.ing.k8s.dev.ivi.ru\r\nstoryboard.gambit-autotest-2.ing.k8s.dev.ivi.ru\r\nstoryboard.gambit-qa.ing.k8s.dev.ivi.ru\r\nstoryboard.gambit-smoke.ing.k8s.dev.ivi.ru\r\nstoryboard.hydra-autotest.ing.k8s.dev.ivi.ru\r\nstoryboard.ialekhin.ing.k8s.dev.ivi.ru\r\nstoryboard.ikrylov.ing.k8s.dev.ivi.ru\r\nstoryboard.ios-primo.ing.k8s.dev.ivi.ru\r\nstoryboard.ios-smoke.ing.k8s.dev.ivi.ru\r\nstoryboard.ios.ing.k8s.dev.ivi.ru\r\nstoryboard.isizov-2.ing.k8s.dev.ivi.ru\r\nstoryboard.kmartyashkov.ing.k8s.dev.ivi.ru\r\nstoryboard.mgrischenko-1.ing.k8s.dev.ivi.ru\r\nstoryboard.mgrischenko.ing.k8s.dev.ivi.ru\r\nstoryboard.mkudusov.ing.k8s.dev.ivi.ru\r\nstoryboard.nbarsukov.ing.k8s.dev.ivi.ru\r\nstoryboard.nbrodnikov.ing.k8s.dev.ivi.ru\r\nstoryboard.nfrolkin.ing.k8s.dev.ivi.ru\r\nstoryboard.ngoncharov.ing.k8s.dev.ivi.ru\r\nstoryboard.nkudryavtseva.ing.k8s.dev.ivi.ru\r\nstoryboard.nmarchenko.ing.k8s.dev.ivi.ru\r\nstoryboard.paidmodel.ing.k8s.dev.ivi.ru\r\nstoryboard.pchukhnina.ing.k8s.dev.ivi.ru\r\nstoryboard.punpun.ing.k8s.dev.ivi.ru\r\nstoryboard.sivanov.ing.k8s.dev.ivi.ru\r\nstoryboard.smarttv.ing.k8s.dev.ivi.ru\r\nstoryboard.smoke-web.ing.k8s.dev.ivi.ru\r\nstoryboard.streamux.ing.k8s.dev.ivi.ru\r\nstoryboard.svolkov.ing.k8s.dev.ivi.ru\r\nstoryboard.takimova.ing.k8s.dev.ivi.ru\r\nstoryboard.ttsvetkova.ing.k8s.dev.ivi.ru\r\nstoryboard.vanikin.ing.k8s.dev.ivi.ru\r\nstoryboard.vishchuk.ing.k8s.dev.ivi.ru\r\nstoryboard.vision-autotest-2.ing.k8s.dev.ivi.ru\r\nstoryboard.vision-autotest.ing.k8s.dev.ivi.ru\r\nstoryboard.vision-smoke.ing.k8s.dev.ivi.ru\r\nstoryboard.vision.ing.k8s.dev.ivi.ru\r\nstoryboard.vklimentev.ing.k8s.dev.ivi.ru\r\nstoryboard.vkutskaylis.ing.k8s.dev.ivi.ru\r\nstoryboard.vrylov.ing.k8s.dev.ivi.ru\r\nstoryboard.vstreltsov.ing.k8s.dev.ivi.ru\r\nstoryboard.vzhilkin.ing.k8s.dev.ivi.ru\r\nstoryboard.waaagh-autotests.ing.k8s.dev.ivi.ru\r\nstoryboard.web.ing.k8s.dev.ivi.ru\r\nstoryboard.yapavlov.ing.k8s.dev.ivi.ru\r\nstoryboard.ymakovskaya.ing.k8s.dev.ivi.ru\r\nstoryboard.ysimonov.ing.k8s.dev.ivi.ru\r\nstorybook.avito.ru\r\nstp.avito.ru\r\nstr-511-www.k.avito.ru\r\nstr.avito.ru\r\nstr.open.ru\r\nstrana.lenta.ru\r\nstranger.avito.ru\r\nstrategy.rk.gov.ru\r\nstrategy2017.rk.gov.ru\r\nstrategy2020.tinkoff.ru\r\nstrauss.avito.ru\r\nstrawberry.avito.ru\r\nstream-lb.tass.ru\r\nstream.1tv.ru\r\nstream.avito.ru\r\nstream.beeline.ru\r\nstream.jazz.sberbank.ru\r\nstream.mail.ru\r\nstream.music.beeline.ru\r\nstream.open.ru\r\nstream.origin.avito.ru\r\nstream.origin.zdorovie-shkolnika.spb.aif.ru\r\nstream.video.mts.ru\r\nstream0.tass.ru\r\nstream1.avito.ru\r\nstream1.tass.ru\r\nstream2.avito.ru\r\nstream2.tass.ru\r\nstream3.avito.ru\r\nstream3.music.beeline.ru\r\nstream4.avito.ru\r\nstreamer.avito.ru\r\nstreaming.avito.ru\r\nstreaming.dev.videoplatform.rambler.ru\r\nstreaming.stage.videoplatform.rambler.ru\r\nstreaming.video.yandex.ru\r\nstreaming1.avito.ru\r\nstreaming2.avito.ru\r\nstreams.avito.ru\r\nstreams.mail.ru\r\nstreamstandup.afisha.ru\r\nstreamux.ing.k8s.dev.ivi.ru\r\nstreet-art.life.ru\r\nstreet-combats.mail.ru\r\nstreet.avito.ru\r\nstreet.sports.ru\r\nstreetart.lenta.ru\r\nstrejevoi.social.tomsk.gov.ru\r\nstrelavkoleno.project.tinkoff.ru\r\nstrequest.worldbank.org\r\nstrider.avito.ru\r\nstrife.mail.ru\r\nstrike.avito.ru\r\nstriker.avito.ru\r\nstrikerscards.tinkoff.ru\r\nstrikingpoverty.worldbank.org\r\nstrikingpovertyqa.worldbank.org\r\nstring.avito.ru\r\nstrizh.mail.ru\r\nstrjadm.tomsk.gov.ru\r\nstrm.yandex.ru\r\nstroi.gov.ru\r\nstroika-narodov-bam.life.ru\r\nstroimprosto.mos.ru\r\nstrong.avito.ru\r\nsts.avito.ru\r\nsts.beeline.ru\r\nstservice.worldbank.org\r\nstserviceqa.worldbank.org\r\nstt.avito.ru\r\nstt.tinkoff.ru\r\nsttest.yandex.ru\r\nstu.avito.ru\r\nstuart.avito.ru\r\nstud.avito.ru\r\nstudent-biblio.litres.ru\r\nstudent.2gis.ru\r\nstudent.avito.ru\r\nstudent.t2.ru\r\nstudent.tele2.ru\r\nstudent1.avito.ru\r\nstudent2.avito.ru\r\nstudent2.consultant.ru\r\nstudent3.avito.ru\r\nstudent4.avito.ru\r\nstudent5.avito.ru\r\nstudentmail.avito.ru\r\nstudents.avito.ru\r\nstudents.megafon.ru\r\nstudio.avito.ru\r\nstudio.vk.com\r\nstudios.avito.ru\r\nstudy.2gis.ru\r\nstudy.avito.ru\r\nstudy.garant.ru\r\nstudyabroad.avito.ru\r\nstuff.avito.ru\r\nstun.avito.ru\r\nstuttgart.avito.ru\r\nstuv.dv.rbc.ru\r\nstv-dealer.mts.ru\r\nstv-eshop.mts.ru\r\nstv-src-store02h.maps.yandex.ru\r\nstv.1372.yandex.ru\r\nstvznode1.i.mail.ru\r\nstyle.alphabank.ru\r\nstyle.avito.ru\r\nstyle.rbc.ru\r\nstyle.vesti.ru\r\nstyleguides.2gis.ru\r\nstyles.avito.ru\r\nstyx.avito.ru\r\nstz-zabbix.minzdrav.gov.ru\r\nsu-checkmate.tass.ru\r\nsu.avito.ru\r\nsub.avito.ru\r\nsubaru.drom.ru\r\nsubmarine.mail.ru\r\nsubmit.avito.ru\r\nsubmitimages.avito.ru\r\nsubo-sec-usit.vtb.ru\r\nsubs-api.yandex.ru\r\nsubs.avito.ru\r\nsubs.megafon.ru\r\nsubs.yandex.ru\r\nsubscr.1tv.ru\r\nsubscribe.1tv.ru\r\nsubscribe.avito.ru\r\nsubscribe.gosuslugi.ru\r\nsubscribe.info.sberbank.ru\r\nsubscribe.iz.ru\r\nsubscribe.megafon.ru\r\nsubscribe.sports.ru\r\nsubscribe.vedomosti.ru\r\nsubscriber.avito.ru\r\nsubscriber.max.com\r\nsubscribers3.consultant.ru\r\nsubscriptions.avito.ru\r\nsubscriptions.ott.kinopoisk.ru\r\nsubset.pool.avito.ru\r\nsuburban-widget.rasp.yandex.ru\r\nsubversion.avito.ru\r\nsuccess.avito.ru\r\nsuche.avito.ru\r\nsucre.avito.ru\r\nsud.avito.ru\r\nsudan.avito.ru\r\nsudan2.mail.ru\r\nsudmedexpertiza55.gosuslugi.ru\r\nsudoku.avito.ru\r\nsuek.review-k8s.aif.ru\r\nsuez.cgu.mchs.ru\r\nsuez.dev.cgu.iac.mchs.ru\r\nsufps37.mchs.ru\r\nsufps70.mchs.gov.ru\r\nsufps70.mchs.ru\r\nsufps70.organizations.mchs.gov.ru\r\nsug.avito.ru\r\nsugar.avito.ru\r\nsugarcrm.avito.ru\r\nsuggest-blogs.yandex.ru\r\nsuggest-images.yandex.ru\r\nsuggest-internal.yandex.ru\r\nsuggest-kinopoisk.yandex.ru\r\nsuggest-maps.yandex.ru\r\nsuggest-market.yandex.ru\r\nsuggest-music.yandex.ru\r\nsuggest-people.yandex.ru\r\nsuggest-slovari.yandex.ru\r\nsuggest-video.yandex.ru\r\nsuggest.dzen.ru\r\nsuggest.sso.dzen.ru\r\nsuggest.tiu.ru\r\nsuggest.yandex.ru\r\nsuggests.avia.yandex.ru\r\nsuggests.go.mail.ru\r\nsuggests.rasp.yandex.ru\r\nsuhareva-center.mos.ru\r\nsulak.drom.ru\r\nsulu.avito.ru\r\nsumire.avito.ru\r\nsummary.avito.ru\r\nsummer.avito.ru\r\nsummer.premier.one\r\nsummer.tinkoff.ru\r\nsummit.avito.ru\r\nsumsub.open.ru\r\nsumy.avito.ru\r\nsun-9.80.userapi.com\r\nsun-cons.3582.yandex.ru\r\nsun.avito.ru\r\nsun1-11.userapi.com\r\nsun1-13.userapi.com\r\nsun1-2.userapi.com\r\nsun1-4.userapi.com\r\nsun1-47.userapi.com\r\nsun1-54.userapi.com\r\nsun1-55.userapi.com\r\nsun1-56.userapi.com\r\nsun1-57.userapi.com\r\nsun1-95.userapi.com\r\nsun1-96.userapi.com\r\nsun1-99.userapi.com\r\nsun1.41039.userapi.com\r\nsun1.43222.userapi.com\r\nsun1.44539.userapi.com\r\nsun1.48276.userapi.com\r\nsun1.57354.userapi.com\r\nsun1.6789.userapi.com\r\nsun1.avito.ru\r\nsun1.beeline-irkutsk.userapi.com\r\nsun1.beeline-kz.userapi.com\r\nsun1.beeline-sahalinsk.userapi.com\r\nsun1.beeline-sochi.userapi.com\r\nsun1.beeline-yaroslavl.userapi.com\r\nsun1.beltelecom-by-minsk.userapi.com\r\nsun1.cosmostv-by-minsk.userapi.com\r\nsun1.dataix-by-minsk.userapi.com\r\nsun1.dataix-kz-akkol.userapi.com\r\nsun1.gcore-br-sanpaolo.userapi.com\r\nsun1.indigo-tj-dushanbe.userapi.com\r\nsun1.informsvyaz.userapi.com\r\nsun1.is74.userapi.com\r\nsun1.itiix-uz-tashkent.userapi.com\r\nsun1.jastel-th-chiangrai.userapi.com\r\nsun1.kcell-kz-almaty.userapi.com\r\nsun1.kcell-kz-astana.userapi.com\r\nsun1.megafon-irkutsk.userapi.com\r\nsun1.megafon-nn.userapi.com\r\nsun1.mts-by-minsk.userapi.com\r\nsun1.mts-irkutsk.userapi.com\r\nsun1.ncot-by-minsk.userapi.com\r\nsun1.norilsk.userapi.com\r\nsun1.ntks.userapi.com\r\nsun1.petrokam.userapi.com\r\nsun1.sc-tj-dushanbe.userapi.com\r\nsun1.sibirix.userapi.com\r\nsun1.snsix-uz-tashkent.userapi.com\r\nsun1.tattelecom-nbc.userapi.com\r\nsun1.tele2-kz-aktobe.userapi.com\r\nsun1.tele2-kz-almaty.userapi.com\r\nsun1.tele2-kz-astana.userapi.com\r\nsun1.tele2-kz-atyrau.userapi.com\r\nsun1.tele2-kz-kyzylorda.userapi.com\r\nsun1.tele2-kz-oskemen.userapi.com\r\nsun1.tele2-kz-pavlodar.userapi.com\r\nsun1.tele2-kz-qaraghandy.userapi.com\r\nsun1.tele2-kz-semey.userapi.com\r\nsun1.tele2-kz-shymkent.userapi.com\r\nsun1.tele2-kz-taraz.userapi.com\r\nsun1.tele2-kz-uralsk.userapi.com\r\nsun1.tele2-nn.userapi.com\r\nsun1.true-th-bangkok.userapi.com\r\nsun1.ufanet-orenburg.userapi.com\r\nsun1.ufanet.userapi.com\r\nsun1.userapi.com\r\nsun1.velcom-by-minsk.userapi.com\r\nsun10-1.userapi.com\r\nsun11-2.userapi.com\r\nsun110-1.userapi.com\r\nsun125-1.userapi.com\r\nsun125-2.userapi.com\r\nsun130-1.userapi.com\r\nsun130-2.userapi.com\r\nsun133-1.userapi.com\r\nsun138-1.userapi.com\r\nsun150-1.userapi.com\r\nsun157-1.userapi.com\r\nsun157-2.userapi.com\r\nsun2-10.userapi.com\r\nsun2-11.userapi.com\r\nsun2-12.userapi.com\r\nsun2-17.userapi.com\r\nsun2-18.userapi.com\r\nsun2-19.userapi.com\r\nsun2-21.userapi.com\r\nsun2-22.userapi.com\r\nsun2-3.userapi.com\r\nsun2-4.userapi.com\r\nsun2-9.userapi.com\r\nsun2.41039.userapi.com\r\nsun2.43222.userapi.com\r\nsun2.44539.userapi.com\r\nsun2.48276.userapi.com\r\nsun2.57354.userapi.com\r\nsun2.6789.userapi.com\r\nsun2.avito.ru\r\nsun2.beeline-irkutsk.userapi.com\r\nsun2.beeline-kz.userapi.com\r\nsun2.beeline-sahalinsk.userapi.com\r\nsun2.beeline-sochi.userapi.com\r\nsun2.beeline-yaroslavl.userapi.com\r\nsun2.beltelecom-by-minsk.userapi.com\r\nsun2.cosmostv-by-minsk.userapi.com\r\nsun2.dataix-by-minsk.userapi.com\r\nsun2.dataix-kz-akkol.userapi.com\r\nsun2.gcore-br-sanpaolo.userapi.com\r\nsun2.indigo-tj-dushanbe.userapi.com\r\nsun2.informsvyaz.userapi.com\r\nsun2.is74.userapi.com\r\nsun2.itiix-uz-tashkent.userapi.com\r\nsun2.jastel-th-chiangrai.userapi.com\r\nsun2.kcell-kz-almaty.userapi.com\r\nsun2.kcell-kz-astana.userapi.com\r\nsun2.megafon-irkutsk.userapi.com\r\nsun2.megafon-nn.userapi.com\r\nsun2.mts-by-minsk.userapi.com\r\nsun2.mts-irkutsk.userapi.com\r\nsun2.ncot-by-minsk.userapi.com\r\nsun2.norilsk.userapi.com\r\nsun2.ntks.userapi.com\r\nsun2.petrokam.userapi.com\r\nsun2.sc-tj-dushanbe.userapi.com\r\nsun2.sibirix.userapi.com\r\nsun2.snsix-uz-tashkent.userapi.com\r\nsun2.tattelecom-nbc.userapi.com\r\nsun2.tele2-kz-aktobe.userapi.com\r\nsun2.tele2-kz-almaty.userapi.com\r\nsun2.tele2-kz-astana.userapi.com\r\nsun2.tele2-kz-atyrau.userapi.com\r\nsun2.tele2-kz-kyzylorda.userapi.com\r\nsun2.tele2-kz-oskemen.userapi.com\r\nsun2.tele2-kz-pavlodar.userapi.com\r\nsun2.tele2-kz-qaraghandy.userapi.com\r\nsun2.tele2-kz-semey.userapi.com\r\nsun2.tele2-kz-shymkent.userapi.com\r\nsun2.tele2-kz-taraz.userapi.com\r\nsun2.tele2-kz-uralsk.userapi.com\r\nsun2.tele2-nn.userapi.com\r\nsun2.true-th-bangkok.userapi.com\r\nsun2.ufanet-orenburg.userapi.com\r\nsun2.ufanet.userapi.com\r\nsun2.velcom-by-minsk.userapi.com\r\nsun21-1.userapi.com\r\nsun21-2.userapi.com\r\nsun23-1.userapi.com\r\nsun3-10.userapi.com\r\nsun3-11.userapi.com\r\nsun3-12.userapi.com\r\nsun3-13.userapi.com\r\nsun3-16.userapi.com\r\nsun3-17.userapi.com\r\nsun3-18.userapi.com\r\nsun3-20.userapi.com\r\nsun3-22.userapi.com\r\nsun3-23.userapi.com\r\nsun3-24.userapi.com\r\nsun3-4.userapi.com\r\nsun3-5.userapi.com\r\nsun3-8.userapi.com\r\nsun3-9.userapi.com\r\nsun3.dataix-kz-akkol.userapi.com\r\nsun3.tele2-nn.userapi.com\r\nsun3.ufanet-orenburg.userapi.com\r\nsun3.userapi.com\r\nsun32-1.userapi.com\r\nsun36-1.userapi.com\r\nsun36-2.userapi.com\r\nsun4-10.userapi.com\r\nsun4-11.userapi.com\r\nsun4-12.userapi.com\r\nsun4-15.userapi.com\r\nsun4-16.userapi.com\r\nsun4-17.userapi.com\r\nsun4-18.userapi.com\r\nsun4-19.userapi.com\r\nsun4-2.userapi.com\r\nsun4-20.userapi.com\r\nsun4-21.userapi.com\r\nsun4-22.userapi.com\r\nsun4.dataix-kz-akkol.userapi.com\r\nsun4.userapi.com\r\nsun5-3.userapi.com\r\nsun5-7.userapi.com\r\nsun5-8.userapi.com\r\nsun5.userapi.com\r\nsun6-1.userapi.com\r\nsun6-13.userapi.com\r\nsun6-14.userapi.com\r\nsun6-16.userapi.com\r\nsun6-19.userapi.com\r\nsun6-2.userapi.com\r\nsun6-20.userapi.com\r\nsun6-21.userapi.com\r\nsun6-22.userapi.com\r\nsun6-23.userapi.com\r\nsun6-3.userapi.com\r\nsun6-4.userapi.com\r\nsun6-5.userapi.com\r\nsun6-6.userapi.com\r\nsun6.userapi.com\r\nsun62-2.userapi.com\r\nsun66-2.userapi.com\r\nsun7-13.userapi.com\r\nsun7-14.userapi.com\r\nsun7-15.userapi.com\r\nsun7-16.userapi.com\r\nsun7-17.userapi.com\r\nsun7-18.userapi.com\r\nsun7-19.userapi.com\r\nsun7-20.userapi.com\r\nsun7-21.userapi.com\r\nsun7-22.userapi.com\r\nsun7-23.userapi.com\r\nsun7-24.userapi.com\r\nsun7-7.userapi.com\r\nsun7-9.userapi.com\r\nsun7.userapi.com\r\nsun72-1.userapi.com\r\nsun77-1.userapi.com\r\nsun77-2.userapi.com\r\nsun9-1.userapi.com\r\nsun9-127.userapi.com\r\nsun9-2.userapi.com\r\nsun9-3.userapi.com\r\nsun9-4.userapi.com\r\nsun9-73.userapi.com\r\nsun9-74.userapi.com\r\nsun9-75.userapi.com\r\nsun9-76.userapi.com\r\nsun9-77.userapi.com\r\nsun9-78.userapi.com\r\nsun9-79.userapi.com\r\nsun9-80.userapi.com\r\nsun9-81.userapi.com\r\nsun9-82.userapi.com\r\nsun9-83.userapi.com\r\nsun9-84.userapi.com\r\nsun9-85.userapi.com\r\nsun9-86.userapi.com\r\nsun9-87.userapi.com\r\nsun9-88.userapi.com\r\nsun9-east.userapi.com\r\nsun9-north.userapi.com\r\nsun9-west.userapi.com\r\nsun923.userapi.com\r\nsundance.avito.ru\r\nsunday.avito.ru\r\nsunflower.avito.ru\r\nsunil.avito.ru\r\nsunlight.avito.ru\r\nsunny.avito.ru\r\nsunny.itc.fas.gov.ru\r\nsunpower.avito.ru\r\nsunrise.avito.ru\r\nsunset.avito.ru\r\nsunshine.avito.ru\r\nsunshine.zdorovie-shkolnika.spb.aif.ru\r\nsunshine2.yandex.ru\r\nsuny.avito.ru\r\nsuo-consultant.open.ru\r\nsuo-test.open.ru\r\nsuoext.alfabank.ru\r\nsup-preprod.mkb.ru\r\nsup.avito.ru\r\nsuper-test-cert.tech.mvideo.ru\r\nsuper.1001butilka.yandex.ru\r\nsuper.avito.ru\r\nsuper.mironline.ru\r\nsuper.oleg.3000.yandex.ru\r\nsuperabonent.tele2.ru\r\nsuperapp.sberbank.ru\r\nsuperdesk.dev.kp.ru\r\nsuperdigitaldm.avito.ru\r\nsuperdigitaldownloads.avito.ru\r\nsuperdigitalmanager.avito.ru\r\nsuperhero.avito.ru\r\nsuperman.avito.ru\r\nsupermarket.2gis.ru\r\nsupermediadm.avito.ru\r\nsupermediadownloads.avito.ru\r\nsupermediamanager.avito.ru\r\nsupernatural.avito.ru\r\nsupernova.avito.ru\r\nsuperprodm.avito.ru\r\nsuperprodownloads.avito.ru\r\nsuperpromanager.avito.ru\r\nsuperset-a.net.ixbt.com\r\nsuperset-b.net.ixbt.com\r\nsuperset-c.net.ixbt.com\r\nsuperset-dialog-messenger-ift.online.sberbank.ru\r\nsuperset-dialog-messenger-psi.online.sberbank.ru\r\nsuperset-dialog-messenger.online.sberbank.ru\r\nsuperset-weban.megafon.ru\r\nsuperset.csut.mchs.ru\r\nsuperset.firenotification.mchs.ru\r\nsuperset.net.ixbt.com\r\nsuperset.swarm.cgu.mchs.ru\r\nsuperset.swarm.iac.mchs.ru\r\nsupersite.avito.ru\r\nsupersonic.avito.ru\r\nsuperstar.avito.ru\r\nsupertariff.tele2.ru\r\nsupervision.avito.ru\r\nsupervisor.avito.ru\r\nsuport.avito.ru\r\nsuporte.avito.ru\r\nsupplier.avito.ru\r\nsupplier.megafon.ru\r\nsuppliers.avito.ru\r\nsuppliers.mos.ru\r\nsupply-chain2022.nornickel.com\r\nsupply-chain2023.nornickel.com\r\nsupply-chain2024.nornickel.com\r\nsupply.avito.ru\r\nsupport.avito.ru\r\nsupport.dns-shop.ru\r\nsupport.drive2.ru\r\nsupport.ec.mts.ru\r\nsupport.gismeteo.ru\r\nsupport.gkh.hab.aif.ru\r\nsupport.kino-teatr.ru\r\nsupport.litres.ru\r\nsupport.meduza.io\r\nsupport.mkb.ru\r\nsupport.mvideo.ru\r\nsupport.ozon.ru\r\nsupport.platform.2gis.ru\r\nsupport.sakha.gov.ru\r\nsupport.second.meduza.io\r\nsupport.staging.meduza.io\r\nsupport.tech.vk.com\r\nsupport.tiu.ru\r\nsupport.yandex.ru\r\nsupport.zdorovie-shkolnika.spb.aif.ru\r\nsupport1.avito.ru\r\nsupport2.avito.ru\r\nsupporter.avito.ru\r\nsupra.avito.ru\r\nsupreme.avito.ru\r\nsur.avito.ru\r\nsurabaya.avito.ru\r\nsurarus.24.yandex.ru\r\nsurat.avito.ru\r\nsurf.avito.ru\r\nsurge.lenta.ru\r\nsurgery.avito.ru\r\nsurgut.avito.ru\r\nsurgut.dns-shop.ru\r\nsurgut.hh.ru\r\nsurgut.home.megafon.ru\r\nsurgut.lemanapro.ru\r\nsurgut.mts.ru\r\nsuri.avito.ru\r\nsurrey.avito.ru\r\nsurvey.avito.ru\r\nsurvey.lemanapro.ru\r\nsurvey.magnit.ru\r\nsurvey.maxlatamresearch.max.com\r\nsurvey.maxlatamsurveys.max.com\r\nsurvey.mkb.ru\r\nsurvey.mts.ru\r\nsurvey.rosbank.ru\r\nsurvey1.avito.ru\r\nsurvey2.avito.ru\r\nsurveyadm.mkb.ru\r\nsurveyfeedback.worldbank.org\r\nsurveys.avito.ru\r\nsurveys.yandex.ru\r\nsurvivors.avito.ru\r\nsurw-cggw-01.surw.rzd.ru\r\nsurw-cggw-02.surw.rzd.ru\r\nsurya.avito.ru\r\nsus.avito.ru\r\nsus.sberbank.ru\r\nsusan.avito.ru\r\nsusanin2.mail.ru\r\nsusanin3.mail.ru\r\nsusanin4.mail.ru\r\nsusanin5.mail.ru\r\nsusanin6.mail.ru\r\nsusanin7.mail.ru\r\nsushi.avito.ru\r\nsushiwok.youdo.com\r\nsuslik.2.000.yandex.ru\r\nsuspended.avito.ru\r\nsusumanskoe-r44.gosweb.gosuslugi.ru\r\nsutyazhnik.garant.ru\r\nsuumu.mos.ru\r\nsuvd-akb-dev.mkb.ru\r\nsuvd-akb-esb-cft.mkb.ru\r\nsuvd-akb-esb-dev.mkb.ru\r\nsuvd-akb-esb-test-cft.mkb.ru\r\nsuvd-akb-esb.mkb.ru\r\nsuvd-akb-test.mkb.ru\r\nsuvd-akb.mkb.ru\r\nsuvorov.igor.2010.yandex.ru\r\nsuzuki.avito.ru\r\nsuzuki.drom.ru\r\nsv.avito.ru\r\nsv01.avito.ru\r\nsv1.avito.ru\r\nsv10.avito.ru\r\nsv10.vk.com\r\nsv2.avito.ru\r\nsv3.avito.ru\r\nsv4.avito.ru\r\nsv5.avito.ru\r\nsv6.avito.ru\r\nsv7.avito.ru\r\nsv8.avito.ru\r\nsv9.avito.ru\r\nsvao.mos.ru\r\nsvavideocall.alfabank.ru\r\nsvb.alfabank.ru\r\nsvc.alfabank.ru\r\nsvc.avito.ru\r\nsvc1.mir.afisha.ru\r\nsvc2.mir.afisha.ru\r\nsvcdev-pgu.test.gosuslugi.ru\r\nsvcdev-sia.test.gosuslugi.ru\r\nsvcdev-svoks.test.gosuslugi.ru\r\nsvcdev-voxel.test.gosuslugi.ru\r\nsve.online.sberbank.ru\r\nsven.avito.ru\r\nsverdlovsksrv.sverdlovsk.rshb.ru\r\nsvi.online.sberbank.ru\r\nsviaz-expo.bizconf.rbc.ru\r\nsvm.avito.ru\r\nsvm.psbank.ru\r\nsvn.avito.ru\r\nsvn.consultant.ru\r\nsvn.kino-teatr.ru\r\nsvn.opensource.yandex.ru\r\nsvn.yandex.ru\r\nsvn2.avito.ru\r\nsvobodniy.drom.ru\r\nsvod.agro.tambov.gov.ru\r\nsvod.zdrav.tambov.gov.ru\r\nsvodka1.tass.ru\r\nsvodsmart.saratov.gov.ru\r\nsvody.mis.zdrav.tomsk.gov.ru\r\nsvoedelo.kp.ru\r\nsvoehome.rshb.ru\r\nsvolkov.ing.k8s.dev.ivi.ru\r\nsvoy.alfabank.ru\r\nsvpd.reestr.digital.gov.ru\r\nsvpn.avito.ru\r\nsvr.dev.home.megafon.ru\r\nsvr.gov.ru\r\nsvr.shop.megafon.ru\r\nsvs.avito.ru\r\nsvti.duma.gov.ru\r\nsvyaznoy-mkb-preprod.mkb.ru\r\nsvyaznoy-mkb-prod.mkb.ru\r\nsvyaznoy-mkb-test.mkb.ru\r\nsvyaznoy.youdo.com\r\nsvzd.rzd.ru\r\nsw.avito.ru\r\nsw.mts.ru\r\nsw1.avito.ru\r\nsw2.avito.ru\r\nsw3.avito.ru\r\nsw4.avito.ru\r\nsw5.avito.ru\r\nswa.mail.ru\r\nswallow.avito.ru\r\nswamp.avito.ru\r\nswan.avito.ru\r\nswansea.cit.avito.ru\r\nswanson.avito.ru\r\nswap.avito.ru\r\nswarm.cgu.mchs.ru\r\nswarm.iac.mchs.ru\r\nswat-1222-www.k.avito.ru\r\nswat-367-www.k.avito.ru\r\nswat-843-www.k.avito.ru\r\nswati.avito.ru\r\nsweden.avito.ru\r\nsweet.avito.ru\r\nsweet.yandex.ru\r\nsweets.avito.ru\r\nswf.avito.ru\r\nswftmsg.worldbank.org\r\nswid.avito.ru\r\nswift.avito.ru\r\nswift.avntg-02.cloud.mts.ru\r\nswift.avntg-03.cloud.mts.ru\r\nswift.avntg-04.cloud.mts.ru\r\nswift.worldbank.org\r\nswiftqa.worldbank.org\r\nswim.avito.ru\r\nswiss.avito.ru\r\nswiss.vedomosti.ru\r\nswitch.avito.ru\r\nswitch1.avito.ru\r\nswitch2.avito.ru\r\nswitch3.avito.ru\r\nsword.avito.ru\r\nswordfish.avito.ru\r\nsws.avito.ru\r\nswww.avito.ru\r\nsx.avito.ru\r\nsy.avito.ru\r\nsyd.avito.ru\r\nsydney.avito.ru\r\nsyktyvkar.avito.ru\r\nsyktyvkar.beeline.ru\r\nsyktyvkar.dns-shop.ru\r\nsyktyvkar.hh.ru\r\nsyktyvkar.lemanapro.ru\r\nsylar.avito.ru\r\nsylvester.avito.ru\r\nsymfony-flex.cgu.iac.mchs.ru\r\nsymfony-flex.dev.cgu.iac.mchs.ru\r\nsympa.avito.ru\r\nsymphony.avito.ru\r\nsynapse.avito.ru\r\nsync-rmr.ach.gov.ru\r\nsync.avito.ru\r\nsync.beeline.ru\r\nsync.rambler.ru\r\nsync.rtb.beeline.ru\r\nsync.t2.ru\r\nsync1.avito.ru\r\nsync2.avito.ru\r\nsyncplay.online.sberbank.ru\r\nsynd.avito.ru\r\nsynergy.avito.ru\r\nsyria.avito.ru\r\nsys.avito.ru\r\nsys1.int.gosuslugi.ru\r\nsysadmin.avito.ru\r\nsysadmin.kino-teatr.ru\r\nsyslog.avito.ru\r\nsysmon.avito.ru\r\nsystane.lady.mail.ru\r\nsystem.0.yandex.ru\r\nsystem.avito.ru\r\nsystem.kino-teatr.ru\r\nsystems.avito.ru\r\nsyzran.shop.megafon.ru\r\nsyzx.avito.ru\r\nsz.avito.ru\r\nszat.13.yandex.ru\r\nszb.avito.ru\r\nszd.rzd.ru\r\nszf.b2blk.megafon.ru\r\nszfo.gov.ru\r\nszkolenia.avito.ru\r\nsznu.social.tomsk.gov.ru\r\nszrf.km.duma.gov.ru\r\nt-corporate.mkb.ru\r\nt-mail.mkb.ru\r\nt-men.tinkoff.ru\r\nt-one.beeline.ru\r\nt-win.vtb.ru\r\nt.avito.ru\r\nt.championat.com\r\nt.duma.gov.ru\r\nt.kino-teatr.ru\r\nt.mail.ru\r\nt.mchs.ru\r\nt.minprom.gov.ru\r\nt.mos.ru\r\nt.news.ozon.ru\r\nt.psb.ru\r\nt.rasp.yandex.ru\r\nt.stage.championat.com\r\nt.travel.megafon.ru\r\nt.vtb.ru\r\nt1.avito.ru\r\nt1.news.ozon.ru\r\nt10.avito.ru\r\nt10.news.ozon.ru\r\nt10.vk.com\r\nt11.news.ozon.ru\r\nt12.news.ozon.ru\r\nt13.news.ozon.ru\r\nt14.news.ozon.ru\r\nt15.news.ozon.ru\r\nt16.news.ozon.ru\r\nt17.news.ozon.ru\r\nt178.gosuslugi.ru\r\nt18.news.ozon.ru\r\nt19.news.ozon.ru\r\nt2.avito.ru\r\nt2.news.ozon.ru\r\nt2.zdorovie-shkolnika.spb.aif.ru\r\nt20.news.ozon.ru\r\nt21.news.ozon.ru\r\nt26.gosuslugi.ru\r\nt2klg.tele2.ru\r\nt2pay-backoffice.corp.t2.ru\r\nt2rusall.litres.ru\r\nt2ruspremium.litres.ru\r\nt2rusread.litres.ru\r\nt2wd.t2.ru\r\nt3.avito.ru\r\nt3.news.ozon.ru\r\nt4.avito.ru\r\nt4.news.ozon.ru\r\nt5.avito.ru\r\nt5.news.ozon.ru\r\nt6.news.ozon.ru\r\nt7.news.ozon.ru\r\nt70x50.mb.vesti.ru\r\nt8.news.ozon.ru\r\nt8hs2.08e.3ergpx.yandex.ru\r\nt9.news.ozon.ru\r\nta.avito.ru\r\ntab.worldbank.org\r\ntabdev.worldbank.org\r\ntabix.net.ixbt.com\r\ntable.avito.ru\r\ntable.azuremsk.ec.mts.ru\r\ntable.msk-azure.ec.mts.ru\r\ntableau-trust.open.ru\r\ntableau.afro.who.int\r\ntableau.aho.afro.who.int\r\ntableau.avito.ru\r\ntableau.lemanapro.ru\r\ntableau.mkb.ru\r\ntableau.open.ru\r\ntableau.x5.ru\r\ntableaunew.mkb.ru\r\ntablet.avito.ru\r\ntablet.booking-test.mkb.ru\r\ntabletennis.avito.ru\r\ntablo.ivi.ru\r\ntabqa.worldbank.org\r\ntac.avito.ru\r\ntachibana.avito.ru\r\ntact-sm.tbank.ru\r\ntad.avito.ru\r\ntag.avito.ru\r\ntaganrog.avito.ru\r\ntaganrog.babyblog.ru\r\ntaganrog.dns-shop.ru\r\ntagmanager.megafon.ru\r\ntagmanager1.megafon.ru\r\ntags.avito.ru\r\ntaha.avito.ru\r\ntaichi.avito.ru\r\ntaiga.net.ixbt.com\r\ntailor.tass.ru\r\ntaiwan.avito.ru\r\ntajmyr-r04.gosweb.gosuslugi.ru\r\ntaka.avito.ru\r\ntakaki.avito.ru\r\ntake.avito.ru\r\ntakeoff.avito.ru\r\ntakimova.ing.k8s.dev.ivi.ru\r\ntaksa.api.2gis.ru\r\ntaksi.yandex.ru\r\ntakumi.avito.ru\r\ntal.avito.ru\r\ntalent.alfabank.ru\r\ntalent.avito.ru\r\ntalent.mos.ru\r\ntalent.open.ru\r\ntalent.openbank.ru\r\ntales.avito.ru\r\ntalia.mail.ru\r\ntalk.1tv.ru\r\ntalk.avito.ru\r\ntalk.tbank.ru\r\ntalk.tinkoff.ru\r\ntalkbot-factory.tinkoff.ru\r\ntalks.rbc.ru\r\ntallahassee.avito.ru\r\ntallow.cit.avito.ru\r\ntalos.avito.ru\r\ntam.avito.ru\r\ntama.avito.ru\r\ntamagochi1.mail.ru\r\ntamagochi2.mail.ru\r\ntamara.avito.ru\r\ntambov.aif.ru\r\ntambov.avito.ru\r\ntambov.babyblog.ru\r\ntambov.dev.kp.ru\r\ntambov.dns-shop.ru\r\ntambov.drom.ru\r\ntambov.fas.gov.ru\r\ntambov.gov.ru\r\ntambov.kp.ru\r\ntambov.lemanapro.ru\r\ntambov.mts.ru\r\ntambov.tele2.ru\r\ntambov.tutu.ru\r\ntambovpromo.mts.ru\r\ntamer.avito.ru\r\ntamer1.mail.ru\r\ntamer2.mail.ru\r\ntamil.avito.ru\r\ntampa.avito.ru\r\ntamtam.ok.ru\r\ntamtamtg.ok.ru\r\ntan.avito.ru\r\ntandem.avito.ru\r\ntang.avito.ru\r\ntangmarg.mail.ru\r\ntango.avito.ru\r\ntania.avito.ru\r\ntank.avito.ru\r\ntank.inventori-rtb.yandex.ru\r\ntank72.tass.ru\r\ntanker.yandex.ru\r\ntanki.mail.ru\r\ntanks.mail.ru\r\ntanya.avito.ru\r\ntao.avito.ru\r\ntaobao.avito.ru\r\ntaos.avito.ru\r\ntap-tst.yandex.ru\r\ntap.avito.ru\r\ntap.yandex.ru\r\ntap2pay.ewt.mts.ru\r\ntapety.avito.ru\r\ntapi-vmtest.beeline.ru\r\ntapi.beeline.ru\r\ntapi.tinkoff.ru\r\ntara.103.avito.ru\r\ntara.avito.ru\r\ntaras.yandex.ru\r\ntarbaby.avito.ru\r\ntardis.avito.ru\r\ntardis.tiu.ru\r\ntarget-bh.sber.ru\r\ntarget-partner.tinkoff.ru\r\ntarget-segmenter.t2.ru\r\ntarget-segmenter.tele2.ru\r\ntarget.avito.ru\r\ntarget.beeline.ru\r\ntarget.magnit.ru\r\ntarget.megafon.ru\r\ntarget.sber.ru\r\ntarget.sberbank.ru\r\ntarget.t2.ru\r\ntarget.tele2.ru\r\ntarget.tinkoff.ru\r\ntarget10.mail.ru\r\ntarget3.mail.ru\r\ntarget4.mail.ru\r\ntarget5.mail.ru\r\ntarget6.mail.ru\r\ntarget7.mail.ru\r\ntarget8.mail.ru\r\ntarget9.mail.ru\r\ntarif.tomsk.gov.ru\r\ntarif2021.itc.fas.gov.ru\r\ntarif2022.itc.fas.gov.ru\r\ntarif2023.itc.fas.gov.ru\r\ntariff.russianpost.ru\r\ntarifishe.mts.ru\r\ntarik.avito.ru\r\ntarot.avito.ru\r\ntarussiopatch1.test.euronews.com\r\ntas.avito.ru\r\ntask-avpm-50271-www.t.avito.ru\r\ntask-prot-3821-agent.t.avito.ru\r\ntask-selweb-1160-www.t.avito.ru\r\ntask-selweb-1212-www.t.avito.ru\r\ntask-tracker.sps.rosatom.ru\r\ntask.avito.ru\r\ntask.beeline.ru\r\ntask.corp.mail.ru\r\ntask.gpn.mchs.ru\r\ntask.ixbt.com\r\ntask.mchs.ru\r\ntask.net.ixbt.com\r\ntask11.kino-teatr.ru\r\ntasks.avito.ru\r\ntasks.mchs.gov.ru\r\ntasks.mchs.ru\r\ntasks.sps.rosatom.ru\r\ntass-audio.dmz.tass.ru\r\ntassist.rosatom.ru\r\ntat.resp.2010.yandex.ru\r\ntata.avito.ru\r\ntatar1.mail.ru\r\ntatar2.mail.ru\r\ntatar3.i.mail.ru\r\ntatarstan.dev.home.megafon.ru\r\ntatarstan.mts.ru\r\ntatarstan.shop.megafon.ru\r\ntatiana.avito.ru\r\ntatooine.avito.ru\r\ntatsumi.avito.ru\r\ntattoo.avito.ru\r\ntau.avito.ru\r\ntau.vk.com\r\ntaurus.avito.ru\r\ntax.avito.ru\r\ntax.nalog.ru\r\ntaxclient01-v.yandex.ru\r\ntaxclient02-v.yandex.ru\r\ntaxi-cabinet.mobile.yandex.ru\r\ntaxi-exam.yandex.ru\r\ntaxi-exams.mobile.yandex.ru\r\ntaxi-terminal.yandex.ru\r\ntaxi.api.2gis.ru\r\ntaxi.avito.ru\r\ntaxi.megafon.ru\r\ntaxi.mts.ru\r\ntaxi.sakha.gov.ru\r\ntaxi.yandex.ru\r\ntaxihistory.life.ru\r\ntaximeter.yandex.ru\r\ntaxmon.2gis.ru\r\ntaxmon.lemanapro.ru\r\ntaxmon.nalog.gov.ru\r\ntaxmon.psbank.ru\r\ntaxmon.vimpelcom.ru\r\ntaylor.avito.ru\r\ntayshet.drom.ru\r\ntaz.avito.ru\r\ntb-beta.mts.ru\r\ntb-dev.mts.ru\r\ntb.avito.ru\r\ntb.beeline.ru\r\ntb.mchs.ru\r\ntb.mts.ru\r\ntb.open.ru\r\ntbc.avito.ru\r\ntbp.open.ru\r\ntbrgopen.afisha.ru\r\ntbs.avito.ru\r\ntbt.open.ru\r\ntbusiness.auth.alfabank.ru\r\ntbx.net.ixbt.com\r\ntc.avito.ru\r\ntc.beeline.ru\r\ntc.t2.ru\r\ntcb-learning.tbank.ru\r\ntcb-learning.tinkoff.ru\r\ntcc.avito.ru\r\ntcc.worldbank.org\r\ntccgalleries.avito.ru\r\ntcctest.worldbank.org\r\ntcdata360-backend.worldbank.org\r\ntcdata360.worldbank.org\r\ntcgd.persons.parliament.gov.ru\r\ntchaikovsky.lenta.ru\r\ntcl.avito.ru\r\ntcm.avito.ru\r\ntcon.rosbank.ru\r\ntconf.rosatom.ru\r\ntconfapp01.rosbank.ru\r\ntconfapp02.rosbank.ru\r\ntconfapp03.rosbank.ru\r\ntconfapp04.rosbank.ru\r\ntconfapp05.rosbank.ru\r\ntconfapp06.rosbank.ru\r\ntconfapp07.rosbank.ru\r\ntconfapp08.rosbank.ru\r\ntconfapp09.rosbank.ru\r\ntconfapp10.rosbank.ru\r\ntconfbr01.rosbank.ru\r\ntcrm.lb.tinkoff.ru\r\ntcs.avito.ru\r\ntcts01.rosatom.ru\r\ntcts02.rosatom.ru\r\ntd.avito.ru\r\ntdb.avito.ru\r\ntdb.sakha.gov.ru\r\ntdc.avito.ru\r\ntdp.corp.t2.ru\r\ntdp.corp.tele2.ru\r\ntdr.avito.ru\r\ntdr.who.int\r\ntds.avito.ru\r\ntds.vtb.ru\r\ntds1.vtb.ru\r\ntds2.vtb.ru\r\nte.avito.ru\r\ntea.avito.ru\r\nteach.2gis.ru\r\nteach.avito.ru\r\nteacher.2gis.ru\r\nteacher.avito.ru\r\nteachers.avito.ru\r\nteaching.avito.ru\r\nteal.avito.ru\r\nteam-m.pilot.t2.ru\r\nteam-m02.pilot.t2.ru\r\nteam.10lns.yandex.ru\r\nteam.avito.ru\r\nteam.mail.ru\r\nteam.rzd.ru\r\nteam.sberbank.ru\r\nteam.vk.com\r\nteam.vtb.ru\r\nteamcity.yandex.ru\r\nteamo.avito.ru\r\nteamroom.worldbank.org\r\nteams.avito.ru\r\nteams.infra.rbc.ru\r\nteams.magnit.ru\r\nteams.sovcombank.ru\r\nteams.vk.com\r\nteamsac.rosbank.ru\r\nteamsconn.pexip.megafon.ru\r\nteamspeak.avito.ru\r\nteamwork.avito.ru\r\nteamwork.dev.kp.ru\r\nteatry.tass.ru\r\ntec.avito.ru\r\ntech-gitlab.wildberries.ru\r\ntech.avito.ru\r\ntech.cgu.mchs.ru\r\ntech.csut.mchs.ru\r\ntech.dev.cgu.iac.mchs.ru\r\ntech.duma.gov.ru\r\ntech.hh.ru\r\ntech.mvideo.ru\r\ntech.ok.ru\r\ntech.rbc.ru\r\ntech.vk.com\r\ntech.yandex.ru\r\ntech1.avito.ru\r\ntech2.avito.ru\r\ntechblog.avito.ru\r\ntechcrew.start.x5.ru\r\ntechinfo.avito.ru\r\ntechnadzor.sakha.gov.ru\r\ntechnet.avito.ru\r\ntechnicaltags.test.euronews.com\r\ntechno.2gis.ru\r\ntechno.avito.ru\r\ntechnocup.mail.ru\r\ntechnologies.company.tutu.ru\r\ntechnologies.yandex.ru\r\ntechnology.avito.ru\r\ntechnosoft.rbc.ru\r\ntechnotext.habr.com\r\ntechportal.gosuslugi.ru\r\ntechradar.avito.ru\r\ntechsupport.avito.ru\r\ntechtop.vedomosti.ru\r\ntechweb.avito.ru\r\nteck.avito.ru\r\ntecnica.avito.ru\r\ntecnologia.avito.ru\r\nted.avito.ru\r\nteddy.avito.ru\r\nteen.avito.ru\r\nteens.avito.ru\r\ntees.avito.ru\r\nteguldet.social.tomsk.gov.ru\r\ntehran.avito.ru\r\nteknik.avito.ru\r\ntel.2592272.yandex.ru\r\ntel.6484889.yandex.ru\r\ntel.773669.yandex.ru\r\ntel.avito.ru\r\ntel.lady.mail.ru\r\ntel.money.yandex.ru\r\ntele.avito.ru\r\ntele.m24.ru\r\ntele2-dfs.ivi.ru\r\ntele2.afisha.ru\r\ntele2day.tele2.ru\r\ntele2rusall.litres.ru\r\ntele2rusread.litres.ru\r\ntelecom.avito.ru\r\ntelecom.khv.gov.ru\r\ntelecom.kommersant.ru\r\ntelecom2.kommersant.ru\r\nteledoctor24.t2.ru\r\ntelefe1.i.mail.ru\r\ntelefe2.i.mail.ru\r\ntelefon.avito.ru\r\ntelefon.beeline.ru\r\ntelega.mail.ru\r\ntelegate-test.open.ru\r\ntelegateapp.open.ru\r\ntelegatedb.open.ru\r\ntelegatein.open.ru\r\ntelegram.beeline.ru\r\ntelegram.rests.afisha.ru\r\ntelegrambot.etrain.tutu.ru\r\ntelegrambot.megafon.ru\r\ntelegramma.pochta.ru\r\ntelemed-v2.demo.megafon.ru\r\ntelemed.demo.megafon.ru\r\ntelemeter1.mail.ru\r\ntelemeter2.mail.ru\r\ntelemeter3.mail.ru\r\ntelemeter4.mail.ru\r\ntelemetry.dzen.ru\r\ntelenet.play-hbo.max.com\r\ntelenet.play.max.com\r\ntelenor.play.max.com\r\nteleopti.beeline.ru\r\ntelepat.beeline.ru\r\ntelephony.yandex.ru\r\nteleport.meduza.io\r\nteleport.staging.tech.mvideo.ru\r\nteleport.tech.mvideo.ru\r\nteleservices.avito.ru\r\ntelework.alfabank.ru\r\ntelework2.alfabank.ru\r\nteleworker.avito.ru\r\ntelia.play.max.com\r\ntelnet.avito.ru\r\ntelvib.megafon.ru\r\ntema.t2.ru\r\ntema.tele2.ru\r\ntemp.apteka.ru\r\ntemp.avito.ru\r\ntemp.busines-lady-spb.aif.ru\r\ntemp.dostoevskiy-spb.aif.ru\r\ntemp01.avito.ru\r\ntemp1.avito.ru\r\ntemp2.avito.ru\r\ntempest.avito.ru\r\ntemplate.avito.ru\r\ntemplate.cgu.mchs.ru\r\ntemplates.avito.ru\r\ntemple.avito.ru\r\ntemple.mail.ru\r\ntempo.avito.ru\r\ntempo.euronews.com\r\ntemporal.avito.ru\r\ntempus.avito.ru\r\nten.avito.ru\r\ntender-preprod.mkb.ru\r\ntender.avito.ru\r\ntender.mkb.ru\r\ntender.x5.ru\r\ntenders.avito.ru\r\ntenders.lemanapro.ru\r\ntenders.mts.ru\r\ntennessee.avito.ru\r\ntennis.avito.ru\r\ntennis.sport.mos.ru\r\ntera.avito.ru\r\ntera.mail.ru\r\nteremok.ru.youdo.com\r\nterence.avito.ru\r\nterm.avito.ru\r\ntermin.avito.ru\r\nterminal.avito.ru\r\nterminal.beeline.ru\r\nterminal.mts.ru\r\nterminal.office.mkb.ru\r\nterminal.oplata.t2.ru\r\nterminal.oplata.tele2.ru\r\nterminal.tass.ru\r\nterminal.yandex.ru\r\nterminalservices.avito.ru\r\nterminator.avito.ru\r\nterminus.avito.ru\r\nterms.avito.ru\r\nternejskoe-r25.gosweb.gosuslugi.ru\r\nternii.film.ru\r\nterorg.sakha.gov.ru\r\nterra.avito.ru\r\nterra.mail.ru\r\nterrance-dev.who.int\r\nterrance-uat.who.int\r\nterrance.who.int\r\nterranova.avito.ru\r\nterre.avito.ru\r\nterri.avito.ru\r\nterror.avito.ru\r\nterry.avito.ru\r\ntes-teams.sovcombank.ru\r\ntes.avito.ru\r\ntesco.avito.ru\r\ntesla.avito.ru\r\ntesla.content.tinkoff.ru\r\ntesoreria.avito.ru\r\ntesp.rosatom.ru\r\ntest-01.interfax.ru\r\ntest-03.interfax.ru\r\ntest-100.tambov.gov.ru\r\ntest-101.tambov.gov.ru\r\ntest-102.tambov.gov.ru\r\ntest-98.tambov.gov.ru\r\ntest-99.tambov.gov.ru\r\ntest-acme-ssl-01.mvideo.ru\r\ntest-acme-ssl-02.mvideo.ru\r\ntest-acme-ssl.mvideo.ru\r\ntest-agent.openbank.ru\r\ntest-akol.alfabank.ru\r\ntest-alfa-mobile.alfabank.ru\r\ntest-anketa.alfabank.ru\r\ntest-api.banki.ru\r\ntest-api.kino-teatr.ru\r\ntest-apps.who.int\r\ntest-appweb.broker.vtb.ru\r\ntest-art.ixbt.com\r\ntest-bqr.vtb.ru\r\ntest-c2b-sbp.openbank.ru\r\ntest-cdn-img.perekrestok.ru\r\ntest-cdnv-img.perekrestok.ru\r\ntest-cert-manager.ing.k8s.dev.ivi.ru\r\ntest-chatbot.sberbank.ru\r\ntest-cms.experience.who.int\r\ntest-cms.partnership.who.int\r\ntest-cms.platform.who.int\r\ntest-cms.who.int\r\ntest-company.rzd.ru\r\ntest-deg.gosuslugi.ru\r\ntest-deploy.mdrive.magnit.ru\r\ntest-efrta.tourism.gov.ru\r\ntest-emro.who.int\r\ntest-front-react-dzr.demo.megafon.ru\r\ntest-front-react-klgd.demo.megafon.ru\r\ntest-front-react-one-copy.demo.megafon.ru\r\ntest-front-react-pdp.demo.megafon.ru\r\ntest-front-react-tula.demo.megafon.ru\r\ntest-front-react-two-copy.demo.megafon.ru\r\ntest-front-react.demo.megafon.ru\r\ntest-groupib-alfaid.alfabank.ru\r\ntest-host-builder.k.avito.ru\r\ntest-ift-office-emp.sberbank.ru\r\ntest-ift-office.sberbank.ru\r\ntest-invest.vtb.ru\r\ntest-jazz.sberbank.ru\r\ntest-le.demo.megafon.ru\r\ntest-lk-ecomm.psbank.ru\r\ntest-lkc.beeline.ru\r\ntest-lkportal.uslugi.tambov.gov.ru\r\ntest-m.avito.ru\r\ntest-mail.mkb.ru\r\ntest-mdo-pricingg-prod1.yc.mvideo.ru\r\ntest-middle-api.magnit.ru\r\ntest-mkb.mkb.ru\r\ntest-mobile.alfabank.ru\r\ntest-mobile.broker.vtb.ru\r\ntest-mobile2.broker.vtb.ru\r\ntest-my.perekrestok.ru\r\ntest-openapi.psbank.ru\r\ntest-opros.vtb.ru\r\ntest-osjd.rzd.ru\r\ntest-pay.vtb.ru\r\ntest-prod-cert.demo.megafon.ru\r\ntest-prod.demo.megafon.ru\r\ntest-promo.psbank.ru\r\ntest-proxy.yc.mvideo.ru\r\ntest-psi-office-emp.sberbank.ru\r\ntest-psi-office.sberbank.ru\r\ntest-publishing.interfax.ru\r\ntest-qp8.psbank.ru\r\ntest-service.rzd.ru\r\ntest-site.tourism.gov.ru\r\ntest-standards.rzd.ru\r\ntest-teams.sovcombank.ru\r\ntest-terrance.who.int\r\ntest-vm-russia.azuremsk.cloudapp.ec.mts.ru\r\ntest-weblab.megafon.ru\r\ntest-www.avito.ru\r\ntest-www.rzd.ru\r\ntest.9111.ru\r\ntest.996sc.mchs.ru\r\ntest.acdn.tbank.ru\r\ntest.acdn.tinkoff.ru\r\ntest.aif-city.spb.aif.ru\r\ntest.aisubp.mos.ru\r\ntest.alfabank.ru\r\ntest.arcsar.mchs.ru\r\ntest.asc-ug.mchs.ru\r\ntest.atlas.mchs.ru\r\ntest.auth.mail.ru\r\ntest.avito.ru\r\ntest.billing.ag.mos.ru\r\ntest.busines-lady-spb.aif.ru\r\ntest.crm.2gis.ru\r\ntest.crmsnd4.worldbank.org\r\ntest.cs-aws.mvideo.ru\r\ntest.csk.mchs.ru\r\ntest.csoor.mchs.ru\r\ntest.denisenko.shared.dev.lab.x5.ru\r\ntest.dev.media.max.com\r\ntest.dom.gosuslugi.ru\r\ntest.domofon.mts.ru\r\ntest.drive.megafon.ru\r\ntest.drive2.ru\r\ntest.education.megafon.ru\r\ntest.eduib.rosatom.ru\r\ntest.esia.mchs.ru\r\ntest.euronews.com\r\ntest.feedback.rosatom.ru\r\ntest.film.ru\r\ntest.fpi.gov.ru\r\ntest.gasu.gov.ru\r\ntest.glory.mchs.ru\r\ntest.gosuslugi.ru\r\ntest.gov.ru\r\ntest.government.ru\r\ntest.help.rambler.ru\r\ntest.hr.drom.ru\r\ntest.iot.beeline.ru\r\ntest.ivi.ru\r\ntest.kino-teatr.ru\r\ntest.lab.x5.ru\r\ntest.lady.mail.ru\r\ntest.longread.altai.aif.ru\r\ntest.m.front99.gazeta.ru\r\ntest.m.gazeta.ru\r\ntest.m24.ru\r\ntest.mail.ru\r\ntest.mail.rzd.ru\r\ntest.mchs.ru\r\ntest.mediastorage.afisha.ru\r\ntest.mmgift.mvideo.ru\r\ntest.mobile.broker.vtb.ru\r\ntest.ngc.mchs.ru\r\ntest.obmen.open.ru\r\ntest.ok.ru\r\ntest.opendata.mchs.ru\r\ntest.organizations.mchs.ru\r\ntest.ozon.ru\r\ntest.pamyat.mchs.ru\r\ntest.perekrestok.ru\r\ntest.promo.openbank.ru\r\ntest.psi.mchs.ru\r\ntest.rc.rg.gov.ru\r\ntest.rosbank.ru\r\ntest.rpn.gov.ru\r\ntest.russianpost.ru\r\ntest.ruzpu.mchs.ru\r\ntest.sber.ops.tinkoff.ru\r\ntest.secure.avito.ru\r\ntest.services.openbank.ru\r\ntest.shop.avito.ru\r\ntest.sm.fadn.gov.ru\r\ntest.sovcombank.ru\r\ntest.spas.mchs.ru\r\ntest.sso-test.kinopoisk.ru\r\ntest.stash.msk.avito.ru\r\ntest.stat.online.sberbank.ru\r\ntest.sufps70.mchs.ru\r\ntest.talent.openbank.ru\r\ntest.tass.ru\r\ntest.test.euronews.com\r\ntest.test.magnit.ru\r\ntest.tg.mk.ru\r\ntest.tinkoff.ru\r\ntest.ucfps23.mchs.ru\r\ntest.uvgsch.mchs.ru\r\ntest.v1.corp-events.rbc.ru\r\ntest.v2.auth.rbc.ru\r\ntest.vgsch.mchs.ru\r\ntest.vtb.ru\r\ntest.vzhukov.ing.k8s.dev.ivi.ru\r\ntest.ya.tp.mvideo.ru\r\ntest.yachtclub.vedomosti.ru\r\ntest001.avito.ru\r\ntest002.avito.ru\r\ntest007.avito.ru\r\ntest01.avito.ru\r\ntest01.interfax.ru\r\ntest01.rshb.ru\r\ntest02.avito.ru\r\ntest02.interfax.ru\r\ntest02.rshb.ru\r\ntest02mobile.rshb.ru\r\ntest03.avito.ru\r\ntest03.interfax.ru\r\ntest03.rshb.ru\r\ntest03mobile.rshb.ru\r\ntest04.avito.ru\r\ntest04.rshb.ru\r\ntest04mobile.rshb.ru\r\ntest05.rshb.ru\r\ntest07.avito.ru\r\ntest07.rshb.ru\r\ntest1-bio.rshb.ru\r\ntest1.avito.ru\r\ntest1.interfax.ru\r\ntest1.nft.ya.tp.mvideo.ru\r\ntest1.stash.msk.avito.ru\r\ntest1.vzhukov.ing.k8s.dev.ivi.ru\r\ntest1.worldbank.org\r\ntest10.avito.ru\r\ntest10.vk.com\r\ntest10.zdorovie-shkolnika.spb.aif.ru\r\ntest11.avito.ru\r\ntest111.avito.ru\r\ntest12.avito.ru\r\ntest123.avito.ru\r\ntest1234.avito.ru\r\ntest13.avito.ru\r\ntest14.avito.ru\r\ntest15.avito.ru\r\ntest16.avito.ru\r\ntest17.avito.ru\r\ntest18.avito.ru\r\ntest19.avito.ru\r\ntest2.9111.ru\r\ntest2.avito.ru\r\ntest2.ok.ru\r\ntest2.stash.msk.avito.ru\r\ntest2.users.avito.ru\r\ntest2.worldbank.org\r\ntest2.zdorovie-shkolnika.spb.aif.ru\r\ntest20.avito.ru\r\ntest20.vk.com\r\ntest2048.vtb.ru\r\ntest22.avito.ru\r\ntest23.avito.ru\r\ntest3.9111.ru\r\ntest3.avito.ru\r\ntest3.ok.ru\r\ntest333.avito.ru\r\ntest4.avito.ru\r\ntest4.ok.ru\r\ntest4096.vtb.ru\r\ntest5.avito.ru\r\ntest5.ok.ru\r\ntest55.avito.ru\r\ntest6.9111.ru\r\ntest6.avito.ru\r\ntest7.9111.ru\r\ntest7.avito.ru\r\ntest8.avito.ru\r\ntest82.atlas.mchs.ru\r\ntest85.atlas.mchs.ru\r\ntest9.avito.ru\r\ntesta.avito.ru\r\ntestaccount.avito.ru\r\ntestacme.mvideo.ru\r\ntestadmin.avito.ru\r\ntestamcalls.alfabank.ru\r\ntestapi.avito.ru\r\ntestapi.megafon.ru\r\ntestapp.avito.ru\r\ntestappauth-dev.who.int\r\ntestappbeat.alfabank.ru\r\ntestbal1.i.mail.ru\r\ntestbed.avito.ru\r\ntestbl.avito.ru\r\ntestblog.avito.ru\r\ntestblog.zdorovie-shkolnika.spb.aif.ru\r\ntestbrvps.avito.ru\r\ntestbud.sev.gov.ru\r\ntestci.dev.rbc.ru\r\ntestcicd.test.euronews.com\r\ntestcms.avito.ru\r\ntestdb.avito.ru\r\ntestdg.worldbank.org\r\ntestdiv.feedback.rosatom.ru\r\ntestdns.avito.ru\r\ntestdomain.avito.ru\r\ntestdrive.avito.ru\r\nteste.avito.ru\r\nteste1.avito.ru\r\ntester.avito.ru\r\ntesters.corp.vk.com\r\ntestes.avito.ru\r\ntestev.worldbank.org\r\ntestfluence.uk.2gis.ru\r\ntestforms.mchs.ru\r\ntestforum.avito.ru\r\ntesting-platform.tutu.ru\r\ntesting.allure.tinkoff.ru\r\ntesting.avito.ru\r\ntesting.aws.mvideo.ru\r\ntesting.cgu.mchs.ru\r\ntesting.dev.cgu.iac.mchs.ru\r\ntesting.kinopoisk.ru\r\ntesting.ott.kinopoisk.ru\r\ntesting.payment-widget-smarttv.kinopoisk.ru\r\ntesting.payment-widget.kinopoisk.ru\r\ntesting.pg.cgu.mchs.ru\r\ntesting.startup.mts.ru\r\ntesting01-m.afisha.yandex.ru\r\ntesting01-weekend.afisha.yandex.ru\r\ntesting02-m.afisha.yandex.ru\r\ntesting02-weekend.afisha.yandex.ru\r\ntesting1-platform.tutu.ru\r\ntesting1.avito.ru\r\ntesting123.avito.ru\r\ntesting2-platform.tutu.ru\r\ntesting2.avito.ru\r\ntesting3-platform.tutu.ru\r\ntesting4-platform.tutu.ru\r\ntestingjira.mail.ru\r\ntestint2.rshb.ru\r\ntestjmb.alfabank.ru\r\ntestjw.tass.ru\r\ntestkomisson.vtb.ru\r\ntestlegaci.learning.ozon.ru\r\ntestlink.alfabank.ru\r\ntestlink.avito.ru\r\ntestm.avito.ru\r\ntestmail-edge.mkb.ru\r\ntestmail.avito.ru\r\ntestmdrpz.rosbank.ru\r\ntestmetrics.alfabank.ru\r\ntestmobile.avito.ru\r\ntestnewkk.megafon.ru\r\ntestonline.avito.ru\r\ntestonline.sberbank.ru\r\ntestonly.avito.ru\r\ntestpage.avito.ru\r\ntestpay.alfabank.ru\r\ntestphp.avito.ru\r\ntestplan.minfin.rk.gov.ru\r\ntestplan.sev.gov.ru\r\ntestportal.avito.ru\r\ntestproxy.who.int\r\ntestrail.dev.rambler.ru\r\ntestriso.sev.gov.ru\r\ntests.avito.ru\r\ntests.banki.ru\r\ntestsbermomentum.sber.ru\r\ntestsbi.sberbank.ru\r\ntestseg.rosatom.ru\r\ntestsense.alfabank.ru\r\ntestserver.avito.ru\r\ntestshop.avito.ru\r\ntestsite.avito.ru\r\ntestssl.alfabank.ru\r\ntesttest.avito.ru\r\ntestuser.avito.ru\r\ntestvb.avito.ru\r\ntestvpn.avito.ru\r\ntestvps.avito.ru\r\ntestwd.tele2.ru\r\ntestweb.avito.ru\r\ntestwebmail.t2.ru\r\ntestwiki.mts.ru\r\ntestwww.avito.ru\r\ntesty.avito.ru\r\nteszt.avito.ru\r\nteszt.zdorovie-shkolnika.spb.aif.ru\r\ntet.avito.ru\r\nteta.zen-test.yandex.ru\r\ntetra.avito.ru\r\ntetris.avito.ru\r\ntets01.rosatom.ru\r\ntewbac.cn.www.sports.ru\r\ntexas.avito.ru\r\ntexpress.rosatom.ru\r\ntext.avito.ru\r\ntext.document.kremlin.ru\r\ntext.m24.ru\r\ntextile.avito.ru\r\ntf.avito.ru\r\ntf1.avito.ru\r\ntf1.i.mail.ru\r\ntf12.i.mail.ru\r\ntf2.avito.ru\r\ntfa-gw-ext.x5.ru\r\ntff.worldbank.org\r\ntfs-ext.open.ru\r\ntfs-test.open.ru\r\ntfs.avito.ru\r\ntfs.tele2.ru\r\ntfs.worldbank.org\r\ntfsearch.worldbank.org\r\ntfsearchdev.worldbank.org\r\ntfsearchqa.worldbank.org\r\ntfsqa.worldbank.org\r\ntfstest.tele2.ru\r\ntftp.avito.ru\r\ntg.avito.ru\r\ntg.life.ru\r\ntg.mk.ru\r\ntg.t2.ru\r\ntg10.mail.ru\r\ntg102.mail.ru\r\ntgbcb.babyblog.ru\r\ntgbot-cb.x5.ru\r\ntgbot-trust.open.ru\r\ntgbot.dialog.mchs.ru\r\ntgdadm.tomsk.gov.ru\r\ntgfcb.babyblog.ru\r\ntgn.avito.ru\r\ntgp.avito.ru\r\nth.avito.ru\r\nthai.avito.ru\r\nthailand.avito.ru\r\nthalassa.avito.ru\r\nthales.avito.ru\r\nthalia.avito.ru\r\nthanatos.avito.ru\r\nthanh.avito.ru\r\nthanksgiving.avito.ru\r\nthankyou.avito.ru\r\nthayer.avito.ru\r\nthc.avito.ru\r\nthe.10kor.yandex.ru\r\nthe.avito.ru\r\ntheater.avito.ru\r\ntheatre.life.ru\r\ntheatreday.culture.ru\r\nthebe.avito.ru\r\nthebest.avito.ru\r\nthecity.m24.ru\r\nthecitybot.m24.ru\r\nthedigitalcodecs.avito.ru\r\nthefastest.megafon.ru\r\nthefreecodecs.avito.ru\r\nthegallery.avito.ru\r\nthegame.avito.ru\r\nthehouse.avito.ru\r\nthehub.avito.ru\r\ntheia.avito.ru\r\ntheia.rs.premier.one\r\ntheia.rs2.premier.one\r\nthekey.avito.ru\r\nthelivecodecs.avito.ru\r\ntheme.avito.ru\r\ntheme.reader.litres.ru\r\nthemediacodecs.avito.ru\r\nthemes.avito.ru\r\nthemis.avito.ru\r\nthenewcodecs.avito.ru\r\ntheone.avito.ru\r\ntheothers.film.ru\r\nthera.avito.ru\r\ntherapists.avito.ru\r\ntherock.avito.ru\r\ntheronix.123t.yandex.ru\r\nthesetwo.mts.ru\r\ntheseus.avito.ru\r\nthesis.avito.ru\r\ntheta.avito.ru\r\nthethiscodecs.avito.ru\r\nthetis.avito.ru\r\nthewall.avito.ru\r\ntheworld.avito.ru\r\nthezone.avito.ru\r\nthink.avito.ru\r\nthird.meduza.io\r\nthomas.avito.ru\r\nthor.avito.ru\r\nthot.avito.ru\r\nthreads.avito.ru\r\nthreat-intelligence.demo.megafon.ru\r\nthree.avito.ru\r\nthu.avito.ru\r\nthulium.avito.ru\r\nthumb.avito.ru\r\nthumb.net.ixbt.com\r\nthumb.stage.championat.com\r\nthumbnail.hh.ru\r\nthumbnails.avito.ru\r\nthumbor.net.ixbt.com\r\nthumbs.abesekerskij.ing.k8s.dev.ivi.ru\r\nthumbs.advstand.ing.k8s.dev.ivi.ru\r\nthumbs.agrozniy.ing.k8s.dev.ivi.ru\r\nthumbs.akazachev.ing.k8s.dev.ivi.ru\r\nthumbs.akhlebnikov.ing.k8s.dev.ivi.ru\r\nthumbs.alapshin.ing.k8s.dev.ivi.ru\r\nthumbs.android-autotest-2.ing.k8s.dev.ivi.ru\r\nthumbs.android-autotest-smoke.ing.k8s.dev.ivi.ru\r\nthumbs.android-autotest.ing.k8s.dev.ivi.ru\r\nthumbs.android-mobile.ing.k8s.dev.ivi.ru\r\nthumbs.android.ing.k8s.dev.ivi.ru\r\nthumbs.apetrushishin.ing.k8s.dev.ivi.ru\r\nthumbs.asmirnov.ing.k8s.dev.ivi.ru\r\nthumbs.astarostin.ing.k8s.dev.ivi.ru\r\nthumbs.atitova.ing.k8s.dev.ivi.ru\r\nthumbs.avito.ru\r\nthumbs.davramenko.ing.k8s.dev.ivi.ru\r\nthumbs.dbondarenko.ing.k8s.dev.ivi.ru\r\nthumbs.dpronin.ing.k8s.dev.ivi.ru\r\nthumbs.dshaymardanova.ing.k8s.dev.ivi.ru\r\nthumbs.dshebordaev.ing.k8s.dev.ivi.ru\r\nthumbs.dsmirnov.ing.k8s.dev.ivi.ru\r\nthumbs.eryabets.ing.k8s.dev.ivi.ru\r\nthumbs.esosulin.ing.k8s.dev.ivi.ru\r\nthumbs.etcd-autotest.ing.k8s.dev.ivi.ru\r\nthumbs.gambit-autotest-1.ing.k8s.dev.ivi.ru\r\nthumbs.gambit-autotest-2.ing.k8s.dev.ivi.ru\r\nthumbs.gambit-qa.ing.k8s.dev.ivi.ru\r\nthumbs.gambit-smoke.ing.k8s.dev.ivi.ru\r\nthumbs.hydra-autotest.ing.k8s.dev.ivi.ru\r\nthumbs.ialekhin.ing.k8s.dev.ivi.ru\r\nthumbs.ikrylov.ing.k8s.dev.ivi.ru\r\nthumbs.ios-primo.ing.k8s.dev.ivi.ru\r\nthumbs.ios-smoke.ing.k8s.dev.ivi.ru\r\nthumbs.ios.ing.k8s.dev.ivi.ru\r\nthumbs.isizov-2.ing.k8s.dev.ivi.ru\r\nthumbs.kmartyashkov.ing.k8s.dev.ivi.ru\r\nthumbs.mgrischenko-1.ing.k8s.dev.ivi.ru\r\nthumbs.mgrischenko.ing.k8s.dev.ivi.ru\r\nthumbs.mkudusov.ing.k8s.dev.ivi.ru\r\nthumbs.nbarsukov.ing.k8s.dev.ivi.ru\r\nthumbs.nbrodnikov.ing.k8s.dev.ivi.ru\r\nthumbs.nfrolkin.ing.k8s.dev.ivi.ru\r\nthumbs.ngoncharov.ing.k8s.dev.ivi.ru\r\nthumbs.nkudryavtseva.ing.k8s.dev.ivi.ru\r\nthumbs.nmarchenko.ing.k8s.dev.ivi.ru\r\nthumbs.origin.avito.ru\r\nthumbs.paidmodel.ing.k8s.dev.ivi.ru\r\nthumbs.pchukhnina.ing.k8s.dev.ivi.ru\r\nthumbs.punpun.ing.k8s.dev.ivi.ru\r\nthumbs.sivanov.ing.k8s.dev.ivi.ru\r\nthumbs.smarttv.ing.k8s.dev.ivi.ru\r\nthumbs.smoke-web.ing.k8s.dev.ivi.ru\r\nthumbs.ssp.rambler.ru\r\nthumbs.streamux.ing.k8s.dev.ivi.ru\r\nthumbs.svolkov.ing.k8s.dev.ivi.ru\r\nthumbs.takimova.ing.k8s.dev.ivi.ru\r\nthumbs.ttsvetkova.ing.k8s.dev.ivi.ru\r\nthumbs.vanikin.ing.k8s.dev.ivi.ru\r\nthumbs.vishchuk.ing.k8s.dev.ivi.ru\r\nthumbs.vision-autotest-2.ing.k8s.dev.ivi.ru\r\nthumbs.vision-autotest.ing.k8s.dev.ivi.ru\r\nthumbs.vision-smoke.ing.k8s.dev.ivi.ru\r\nthumbs.vision.ing.k8s.dev.ivi.ru\r\nthumbs.vklimentev.ing.k8s.dev.ivi.ru\r\nthumbs.vkutskaylis.ing.k8s.dev.ivi.ru\r\nthumbs.vrylov.ing.k8s.dev.ivi.ru\r\nthumbs.vstreltsov.ing.k8s.dev.ivi.ru\r\nthumbs.vzhilkin.ing.k8s.dev.ivi.ru\r\nthumbs.waaagh-autotests.ing.k8s.dev.ivi.ru\r\nthumbs.web.ing.k8s.dev.ivi.ru\r\nthumbs.yapavlov.ing.k8s.dev.ivi.ru\r\nthumbs.ymakovskaya.ing.k8s.dev.ivi.ru\r\nthumbs.ysimonov.ing.k8s.dev.ivi.ru\r\nthunder.avito.ru\r\nti.avito.ru\r\ntiaadm.tomsk.gov.ru\r\ntiago.avito.ru\r\ntiamat.avito.ru\r\ntiamo.avito.ru\r\ntibia.avito.ru\r\ntibtest.t2.ru\r\ntic.avito.ru\r\ntick.avito.ru\r\ntick.babyblog.ru\r\nticker.avito.ru\r\nticket.avito.ru\r\nticket.rzd.ru\r\nticket.yandex.ru\r\nticketing.avito.ru\r\ntickets.afisha.ru\r\ntickets.avito.ru\r\ntickets.mirtv.ru\r\ntickets.ozon.ru\r\ntickets.stage.championat.com\r\ntickets.vk.com\r\ntickets.widget.kinopoisk.ru\r\ntickets.yandex.ru\r\ntickets1.afisha.ru\r\ntickets2.afisha.ru\r\ntickets3.afisha.ru\r\ntictac.afisha.ru\r\ntidaltrek.mail.ru\r\ntienda.avito.ru\r\ntiens.avito.ru\r\ntierra.avito.ru\r\ntif.avito.ru\r\ntiga.avito.ru\r\ntiger.avito.ru\r\ntigers.avito.ru\r\ntigger.avito.ru\r\ntigris.yandex.ru\r\ntikhonov.03.yandex.ru\r\ntikhvin.home.megafon.ru\r\ntiki.avito.ru\r\ntilda.rg.ru\r\ntildatest.tass.ru\r\ntiles.afro.who.int\r\ntiles.atlas.mchs.gov.ru\r\ntiles.atlas.mchs.ru\r\ntiles.maps.vk.com\r\ntiles.mchs.ru\r\ntim.avito.ru\r\ntimashevsk.hh.ru\r\ntime-demo.tinkoff.ru\r\ntime-ops.tbank.ru\r\ntime-ops.tinkoff.ru\r\ntime-sentry.tinkoff.ru\r\ntime.avito.ru\r\ntime.intranet.rbc.ru\r\ntime.tbank.ru\r\ntime.tinkoff.ru\r\ntime.yandex.ru\r\ntime1.avito.ru\r\ntime2.avito.ru\r\ntimeclock.avito.ru\r\ntimeline.avito.ru\r\ntimemachine.avito.ru\r\ntimer.avito.ru\r\ntimes.avito.ru\r\ntimeseries.avito.ru\r\ntimesheet.avito.ru\r\ntimetable.avito.ru\r\ntimetolive.project.tinkoff.ru\r\ntimiryazevskiy.mos.ru\r\ntimmy.avito.ru\r\ntimon.avito.ru\r\ntimothy.avito.ru\r\ntin.83.yandex.ru\r\ntin.avito.ru\r\ntina.avito.ru\r\ntinder.megafon.ru\r\nting.avito.ru\r\ntinker.avito.ru\r\ntinkerbell.avito.ru\r\ntinkoff-research.tass.ru\r\ntinkoff.youdo.com\r\ntino.avito.ru\r\ntintin.avito.ru\r\ntintuc.avito.ru\r\ntinvest.auth.alfabank.ru\r\ntiny.avito.ru\r\ntinymce.avito.ru\r\ntip.avito.ru\r\ntipkb.rosatom.ru\r\ntipkc.rosatom.ru\r\ntipklib.rosatom.ru\r\ntipkm.rosatom.ru\r\ntips.api.2gis.ru\r\ntips.avito.ru\r\ntips.vtb.ru\r\ntires.avito.ru\r\ntis.avito.ru\r\ntitan.avito.ru\r\ntitan.nft.ya.tp.mvideo.ru\r\ntitan.prod.ya.tp.mvideo.ru\r\ntitan.staging.ya.tp.mvideo.ru\r\ntitania.avito.ru\r\ntitanic.avito.ru\r\ntitanium.avito.ru\r\ntitans.avito.ru\r\ntito.avito.ru\r\ntitus.avito.ru\r\ntivavks.rosatom.ru\r\ntivi.avito.ru\r\ntizen.play-hbo.max.com\r\ntizen.play.max.com\r\ntj.avito.ru\r\ntjam.mis.2gis.ru\r\ntk.avito.ru\r\ntk.crypta.yandex.ru\r\ntkbel.2015.yandex.ru\r\ntkmv.gov.ru\r\ntko.tass.ru\r\ntl.avito.ru\r\ntlansen.test.ivi.ru\r\ntlc.avito.ru\r\ntld.avito.ru\r\ntld.proza.ru\r\ntld.stihi.ru\r\ntlgpost.m24.ru\r\ntls-android.open.ru\r\ntls-ios.open.ru\r\ntls-pc.open.ru\r\ntls-tablet.open.ru\r\ntls.api.litres.ru\r\ntls.avito.ru\r\ntlt.avito.ru\r\ntlt.shop.megafon.ru\r\ntlxmob.1tv.ru\r\ntlxweb01.1tv.ru\r\ntm.avito.ru\r\ntm.open.ru\r\ntm.sportbox.ru\r\ntma.avito.ru\r\ntmb.avito.ru\r\ntmb.beeline.ru\r\ntmb.dev.home.megafon.ru\r\ntmb.shop.megafon.ru\r\ntmc.avito.ru\r\ntmct.avito.ru\r\ntmg.avito.ru\r\ntmgame.mail.ru\r\ntmk-pacs-viewer.minzdrav.gov.ru\r\ntmk-pacs.minzdrav.gov.ru\r\ntmk.minzdrav.gov.ru\r\ntmm.avito.ru\r\ntmn.avito.ru\r\ntmobile-zeus.alfabank.ru\r\ntmobile-zeus.auth.alfabank.ru\r\ntmobile.auth.alfabank.ru\r\ntmp.avito.ru\r\ntmp7.avito.ru\r\ntms.avito.ru\r\ntms.beeline.ru\r\ntms.sberbank.ru\r\ntmsg-p2p.tbank.ru\r\ntmsg-p2p.tinkoff.ru\r\ntmsg.lb.tinkoff.ru\r\ntmsg.tinkoff.ru\r\ntn.avito.ru\r\ntn.vedomosti.ru\r\ntnd.magnit.ru\r\ntns-2161-www.k.avito.ru\r\ntns.avito.ru\r\ntnt.avito.ru\r\nto.avito.ru\r\nto.nalog.gov.ru\r\ntoad.avito.ru\r\ntoast.avito.ru\r\ntoaster.avito.ru\r\ntobacco.lenta.ru\r\ntobi.avito.ru\r\ntobolsk.dns-shop.ru\r\ntoday.avito.ru\r\ntoday.ntv.ru\r\ntodo.avito.ru\r\ntogliatti.drom.ru\r\ntogliatti.hh.ru\r\ntoken.avito.ru\r\ntoken.sber.ru\r\ntokenrbapitest.rosbank.ru\r\ntokens.avito.ru\r\ntoko.avito.ru\r\ntokyo.avito.ru\r\ntoledo.avito.ru\r\ntoliatti.babyblog.ru\r\ntolkien.avito.ru\r\ntoloka-instructions.yandex.ru\r\ntoloka.crypta.yandex.ru\r\ntoloka.yandex.ru\r\ntolstoy.yandex.ru\r\ntolyatti.avito.ru\r\ntolyatti.beeline.ru\r\ntolyatti.dns-shop.ru\r\ntolyatti.lemanapro.ru\r\ntom.avito.ru\r\ntom.dev.home.megafon.ru\r\ntom.shop.megafon.ru\r\ntom.social.tomsk.gov.ru\r\ntomahawk.avito.ru\r\ntomas.avito.ru\r\ntomate.avito.ru\r\ntomato.avito.ru\r\ntomcat.avito.ru\r\ntomita.avito.ru\r\ntommy.avito.ru\r\ntomni.rosbank.ru\r\ntomni2.rosbank.ru\r\ntomo.avito.ru\r\ntomsk-nat0.tric.tomsk.gov.ru\r\ntomsk.alfabank.ru\r\ntomsk.avito.ru\r\ntomsk.beeline.ru\r\ntomsk.dev.kp.ru\r\ntomsk.fas.gov.ru\r\ntomsk.gov.ru\r\ntomsk.kp.ru\r\ntomsk.lemanapro.ru\r\ntomsk.mk.ru\r\ntomsk.mts.ru\r\ntomsk.sig.sbc.sip.beeline.ru\r\ntomsk.tele2.ru\r\ntomtom.avito.ru\r\ntomy.avito.ru\r\ntoni.avito.ru\r\ntonic.mail.ru\r\ntonight.1tv.ru\r\ntony.avito.ru\r\ntool.avito.ru\r\ntool.net.ixbt.com\r\ntoolbar.avito.ru\r\ntoolbox.avito.ru\r\ntooljet.net.ixbt.com\r\ntools.alfabank.ru\r\ntools.avito.ru\r\ntools.dsp.rambler.ru\r\ntools.russianpost.ru\r\ntootoo.avito.ru\r\ntop-fwz1.mail.ru\r\ntop-school2.gosuslugi.ru\r\ntop.avito.ru\r\ntop1.avito.ru\r\ntop10.avito.ru\r\ntop10.vk.com\r\ntop100.mail.ru\r\ntop100.rambler.ru\r\ntop14.mail.ru\r\ntop7.mail.ru\r\ntop8.mail.ru\r\ntop9.mail.ru\r\ntopaz.avito.ru\r\ntopchiha.drom.ru\r\ntopdog.avito.ru\r\ntopfvz1.mail.ru\r\ntopfwz1.mail.ru\r\ntopgun.avito.ru\r\ntopic.avito.ru\r\ntopics.avito.ru\r\ntops.avito.ru\r\ntopsite.avito.ru\r\ntopsites.avito.ru\r\ntopstar.avito.ru\r\ntopup.megafon.ru\r\ntopup.t2.ru\r\ntopup.tele2.ru\r\ntor.avito.ru\r\ntorg.gov.ru\r\ntorg.mail.ru\r\ntorg.mts.ru\r\ntorgi-demo1.gosuslugi.ru\r\ntorgi.fas.gov.ru\r\ntorgi.gov.ru\r\ntorgi.teleport.mts.ru\r\ntori.avito.ru\r\ntori.magnit.ru\r\ntorigin.avito.ru\r\ntormoza.mail.ru\r\ntornado.avito.ru\r\ntoro.avito.ru\r\ntoronto.avito.ru\r\ntorpedo-test.mkb.ru\r\ntorrent.avito.ru\r\ntorrent.fas.gov.ru\r\ntorrents.avito.ru\r\ntorro.yandex.ru\r\ntortuga.avito.ru\r\ntortuga.sberbank.ru\r\ntorun.avito.ru\r\ntoshiba.avito.ru\r\ntot.avito.ru\r\ntotal.avito.ru\r\ntotem.avito.ru\r\ntoto.avito.ru\r\ntoto.zdorovie-shkolnika.spb.aif.ru\r\ntottori.avito.ru\r\ntouch.avito.ru\r\ntouch.forum.deti.mail.ru\r\ntouch.kinopoisk.ru\r\ntouch.lady.mail.ru\r\ntouch.mail.ru\r\ntouch.market.pepelac01hp.yandex.ru\r\ntouch.market.pepelac02hp.yandex.ru\r\ntouch.market.secret.yandex.ru\r\ntoulouse.avito.ru\r\ntour.avito.ru\r\ntourism.alania.gov.ru\r\ntourism.avito.ru\r\ntourism.gov.ru\r\ntourism.tele2.ru\r\ntournament.avito.ru\r\ntourruspass.life.ru\r\ntourrusspass.life.ru\r\ntours.avito.ru\r\ntours.kremlin.ru\r\ntours.travel.rambler.ru\r\ntours.tutu.ru\r\ntours.yandex.ru\r\ntowa.avito.ru\r\ntower.avito.ru\r\ntown.avito.ru\r\ntownwars.mail.ru\r\ntoy.avito.ru\r\ntoyota.avito.ru\r\ntoys.avito.ru\r\ntp-dev.aws.mvideo.ru\r\ntp-infra-ci-form25.yc.mvideo.ru\r\ntp-infra-ci-form26.yc.mvideo.ru\r\ntp-infra-ci-form3.yc.mvideo.ru\r\ntp-infra-ci-form601.yc.mvideo.ru\r\ntp-infra-ci-form705.yc.mvideo.ru\r\ntp-infra-ci-form725.yc.mvideo.ru\r\ntp-infra-ci-test1.yc.mvideo.ru\r\ntp-infra-ci-test2.yc.mvideo.ru\r\ntp-infra-ci-test3.yc.mvideo.ru\r\ntp-infra-ci-test628.yc.mvideo.ru\r\ntp-infra-ci-test630.yc.mvideo.ru\r\ntp-onboarding-sre2.yc.mvideo.ru\r\ntp-staging1.tech.mvideo.ru\r\ntp-test-kyverno1.yc.mvideo.ru\r\ntp-test-migrate1.yc.mvideo.ru\r\ntp-test-migrate2.yc.mvideo.ru\r\ntp-web.aws.mvideo.ru\r\ntp-web.staging.ya.mvideo.ru\r\ntp.avito.ru\r\ntp.gosuslugi.ru\r\ntp.interfax.ru\r\ntp.mvideo.ru\r\ntp.prod.tech.mvideo.ru\r\ntp.staging.tech.mvideo.ru\r\ntp.yc.mvideo.ru\r\ntp1.avito.ru\r\ntpaycontrol.alfabank.ru\r\ntpc.avito.ru\r\ntpe.avito.ru\r\ntpi.avito.ru\r\ntpl.avito.ru\r\ntpm.avito.ru\r\ntpm.wishmaster.666.yandex.ru\r\ntpmsqr01.avito.ru\r\ntpp.avito.ru\r\ntppmo.rbc.ru\r\ntprivate.auth.alfabank.ru\r\ntps.avito.ru\r\ntpvcsedc2.worldbank.org\r\ntqm-media.tinkoff.ru\r\ntqm.tinkoff.ru\r\ntr.avito.ru\r\ntr.email.garant.ru\r\ntr.euronews.com\r\ntr.fas.gov.ru\r\ntr.kinopoisk.ru\r\ntrac.avito.ru\r\ntrace.avito.ru\r\ntrace.evo.rosbank.ru\r\ntracing.svc.paas.cloud.mts.ru\r\ntrack-fns-bot.mchs.ru\r\ntrack-fns.mchs.ru\r\ntrack-guard.mchs.ru\r\ntrack.avito.ru\r\ntrack.habr.com\r\ntrack.magnit.ru\r\ntrack.mail.ru\r\ntracker-fns.iac.mchs.ru\r\ntracker.avito.ru\r\ntracker.cups.mail.ru\r\ntracker.tiu.ru\r\ntracker1.avito.ru\r\ntracker2.avito.ru\r\ntracking.avito.ru\r\ntracking.banki.ru\r\ntracking.pochta.ru\r\ntracking.russianpost.ru\r\ntracking.top100.rambler.ru\r\ntrackit.avito.ru\r\ntrackpos.gosuslugi.ru\r\ntracks.avito.ru\r\ntrade.alfabank.ru\r\ntrade.avito.ru\r\ntradefinance.rosbank.ru\r\ntrader.avito.ru\r\ntrader.garant.ru\r\ntraders.avito.ru\r\ntrading.alfabank.ru\r\ntrading.avito.ru\r\ntrading.sberbank.ru\r\ntraefik.net.ixbt.com\r\ntraefik.swarm.cgu.mchs.ru\r\ntraefik.swarm.iac.mchs.ru\r\ntraf.avito.ru\r\ntraffic-layer-test.moscowapp.mos.ru\r\ntraffic-layer.moscowapp.mos.ru\r\ntraffic-maps.yandex.ru\r\ntraffic.avito.ru\r\ntraffic.jos.2gis.ru\r\ntraffic.pda.yandex.ru\r\ntraffic2.avito.ru\r\ntrafic.avito.ru\r\ntraider888bkru.webagent.mail.ru\r\ntrailer.avito.ru\r\ntrailers.avito.ru\r\ntrailers.kinopoisk.ru\r\ntrain-api.tutu.ru\r\ntrain.avito.ru\r\ntraining.avito.ru\r\ntraining.datacollect.iarc.who.int\r\ntraining.garant.ru\r\ntraining1.avito.ru\r\ntraining2.avito.ru\r\ntrance.avito.ru\r\ntrans.avito.ru\r\ntranscript.duma.gov.ru\r\ntransfer.avito.ru\r\ntransformation.megafon.ru\r\ntransformers.dns-shop.ru\r\ntransit.avito.ru\r\ntranslate.avito.ru\r\ntranslate.worldbank.org\r\ntranslate.yandex.ru\r\ntranslation.avito.ru\r\ntranslations-tariffs.t2.ru\r\ntranslator.avito.ru\r\ntranslon.youdo.com\r\ntransparencia.avito.ru\r\ntransport-test.mironline.ru\r\ntransport-tppintegration.mironline.ru\r\ntransport-tppuat.mironline.ru\r\ntransport.avito.ru\r\ntransport.gis.rosenergo.gov.ru\r\ntransport.mironline.ru\r\ntransport.mos.ru\r\ntransport.sber.ru\r\ntransport.vtb.ru\r\ntransport.yandex.ru\r\ntransporter.web-staging.2gis.ru\r\ntranzit.alfabank.ru\r\ntrash.avito.ru\r\ntrassa.09.yandex.ru\r\ntrauma.avito.ru\r\ntravel-trends.euronews.com\r\ntravel.1001.yandex.ru\r\ntravel.1tv.ru\r\ntravel.alfabank.ru\r\ntravel.avito.ru\r\ntravel.dev.1tv.ru\r\ntravel.drom.ru\r\ntravel.megafon.ru\r\ntravel.moscow.megafon.ru\r\ntravel.mts.ru\r\ntravel.open.ru\r\ntravel.openbank.ru\r\ntravel.rambler.ru\r\ntravel.ria.ru\r\ntravel.rzd.ru\r\ntravel.spec.kp.ru\r\ntravel.t2.ru\r\ntravel.tele2.ru\r\ntravel.tinkoff.ru\r\ntravel.vtb.ru\r\ntravel.worldbank.org\r\ntravel.yandex.ru\r\ntraveler.alfabank.ru\r\ntraveler.avito.ru\r\ntraveler.beeline.ru\r\ntraveler.intech.rshb.ru\r\ntraveler.mrdv.mts.ru\r\ntraveler.mts.ru\r\ntraveler.rshb.ru\r\ntraveler.sib.mts.ru\r\ntraveler.tele2.ru\r\ntraveler1.mts.ru\r\ntraveler2.alfabank.ru\r\ntraveler2.mts.ru\r\ntraveler3.mts.ru\r\ntravelergo.rshb.ru\r\ntravelernext.alfabank.ru\r\ntravelerrf.rshb.ru\r\ntravelertest.alfabank.ru\r\ntravelervip.alfabank.ru\r\ntravelguides.afisha.ru\r\ntravelhelper.t2.ru\r\ntraveling-routes.vtb.ru\r\ntraveller.avito.ru\r\ntravelnew.spec.kp.ru\r\ntravelrusspass.life.ru\r\ntravelstory.content.tinkoff.ru\r\ntravian.avito.ru\r\ntravis.avito.ru\r\ntrc.avito.ru\r\ntrcont.rzd.ru\r\ntreapp.worldbank.org\r\ntreappdev.worldbank.org\r\ntreappprod.worldbank.org\r\ntreappsdev.worldbank.org\r\ntreappsprod.worldbank.org\r\ntreappstest.worldbank.org\r\ntreappstst.worldbank.org\r\ntreapptest.worldbank.org\r\ntreapptst.worldbank.org\r\ntreatwork.worldbank.org\r\ntreatworkdev.worldbank.org\r\ntreatworkqa.worldbank.org\r\ntrebi.worldbank.org\r\ntrebiqa.worldbank.org\r\ntrebo.worldbank.org\r\ntrebodev.worldbank.org\r\ntreboprod.worldbank.org\r\ntreboqa.worldbank.org\r\ntrebotest.worldbank.org\r\ntrebotst.worldbank.org\r\ntrebpm.worldbank.org\r\ntrebpmdev.worldbank.org\r\ntrebpmqa.worldbank.org\r\ntrebpmstg.worldbank.org\r\ntrebpmtest.worldbank.org\r\ntrebpmtrn.worldbank.org\r\ntreda.profi.ru\r\ntredc1dev.worldbank.org\r\ntredc1dev6alb.worldbank.org\r\ntredc1dev6ald.worldbank.org\r\ntredc1dev6alh.worldbank.org\r\ntredc1dev6alq.worldbank.org\r\ntredc1dev6cmd.worldbank.org\r\ntredc1dev6imb.worldbank.org\r\ntredc1dev6imm.worldbank.org\r\ntredc1dev6imq.worldbank.org\r\ntredc1devjboss1.worldbank.org\r\ntredc1devweb.worldbank.org\r\ntredc1prdjboss1.worldbank.org\r\ntredc1prdjboss2.worldbank.org\r\ntredc1qajboss1.worldbank.org\r\ntredc1tstimh.worldbank.org\r\ntredc1tstjboss1.worldbank.org\r\ntredc1tstjboss2.worldbank.org\r\ntredc3devjboss1.worldbank.org\r\ntredc3prdjboss1.worldbank.org\r\ntredc3prdjboss2.worldbank.org\r\ntredc3qajboss1.worldbank.org\r\ntredc3tst2imx.worldbank.org\r\ntredc3tst6alr.worldbank.org\r\ntredc3tst6alx.worldbank.org\r\ntredc3tst6cfr.worldbank.org\r\ntredc3tst6cfs.worldbank.org\r\ntredc3tst6ctr.worldbank.org\r\ntredc3tst6imh.worldbank.org\r\ntredc3tstjboss1.worldbank.org\r\ntredevweb.worldbank.org\r\ntredevweb2.worldbank.org\r\ntredrcsg.worldbank.org\r\ntree.avito.ru\r\ntreehouse.avito.ru\r\ntreinamento.avito.ru\r\ntrek.avito.ru\r\ntremobile.worldbank.org\r\ntremobile2.worldbank.org\r\ntremscshwd.worldbank.org\r\ntremscshwp.worldbank.org\r\ntremscshwp101.worldbank.org\r\ntremscshwp102.worldbank.org\r\ntremscshwp301.worldbank.org\r\ntremscshwp302.worldbank.org\r\ntremscshwq.worldbank.org\r\ntremscshws.worldbank.org\r\ntremscshwt.worldbank.org\r\ntremsfaolab102.worldbank.org\r\ntremsinvsutp101.worldbank.org\r\ntremsinvsutt101.worldbank.org\r\ntrenazher.avito.ru\r\ntrend.avito.ru\r\ntrends.avito.ru\r\ntrendy.lady.mail.ru\r\ntrent.avito.ru\r\ntreomsp.worldbank.org\r\ntreprodweb.worldbank.org\r\ntreprodweb2.worldbank.org\r\ntreqaweb.worldbank.org\r\ntreqaweb2.worldbank.org\r\ntrera01.worldbank.org\r\ntrera02.worldbank.org\r\ntres.avito.ru\r\ntretestweb.worldbank.org\r\ntretestweb2.worldbank.org\r\ntretyakovka.tinkoff.ru\r\ntrevor.avito.ru\r\ntreweb.worldbank.org\r\ntreweb2.worldbank.org\r\ntrex.avito.ru\r\ntrex.premier.one\r\ntri.avito.ru\r\ntrial.avito.ru\r\ntrialjump.project.tinkoff.ru\r\ntrialjump.tinkoff.ru\r\ntrials.avito.ru\r\ntribuna.avito.ru\r\ntribuna.sports.ru\r\ntricolor.iz.ru\r\ntricolor.life.ru\r\ntrict.tomsk.gov.ru\r\ntrident.avito.ru\r\ntrigger.avito.ru\r\ntriggers.z38.zoon.ru\r\ntriggers2.z38.zoon.ru\r\ntrillian.avito.ru\r\ntrinidad.avito.ru\r\ntrinity.avito.ru\r\ntrino.z38.zoon.ru\r\ntrio.avito.ru\r\ntrip.avito.ru\r\ntriple.avito.ru\r\ntriplex.avito.ru\r\ntristan.avito.ru\r\ntriton.avito.ru\r\ntriumph.avito.ru\r\ntrix.avito.ru\r\ntrixbox.avito.ru\r\ntriz.tass.ru\r\ntrk.avito.ru\r\ntrmm.rosatom.ru\r\ntrmm1.rosatom.ru\r\ntrmm10.rosatom.ru\r\ntrmm11.rosatom.ru\r\ntrmm12.rosatom.ru\r\ntrmm13.rosatom.ru\r\ntrmm14.rosatom.ru\r\ntrmm15.rosatom.ru\r\ntrmm16.rosatom.ru\r\ntrmm17.rosatom.ru\r\ntrmm18.rosatom.ru\r\ntrmm19.rosatom.ru\r\ntrmm2.rosatom.ru\r\ntrmm20.rosatom.ru\r\ntrmm3.rosatom.ru\r\ntrmm4.rosatom.ru\r\ntrmm5.rosatom.ru\r\ntrmm6.rosatom.ru\r\ntrmm7.rosatom.ru\r\ntrmm8.rosatom.ru\r\ntrmm9.rosatom.ru\r\ntrn.euronews.com\r\ntroika.mos.ru\r\ntroll.avito.ru\r\ntron.avito.ru\r\ntroy.avito.ru\r\ntrs.app-assistent.open.ru\r\ntrs.avito.ru\r\ntrtest.alfabank.ru\r\ntruba.avito.ru\r\ntruck.2gis.ru\r\ntruck.avito.ru\r\ntrue.1tv.ru\r\ntrue.avito.ru\r\ntrueconf.fas.gov.ru\r\ntrueconf.fsrar.gov.ru\r\ntrueconf.minzdrav.gov.ru\r\ntrueconf.mos.ru\r\ntrueconf.mts.ru\r\ntrueconf.tass.ru\r\ntrunk.avito.ru\r\ntrust-ipv6.yandex.ru\r\ntrust.avito.ru\r\ntrust.beeline.ru\r\ntrust.yandex.ru\r\ntrust1e.yandex.ru\r\ntrust1f.yandex.ru\r\ntrust1g.yandex.ru\r\ntrustsoft.s3.cloud.mts.ru\r\ntrutableau.lemanapro.ru\r\ntruyen.avito.ru\r\ntrvl31.worldbank.org\r\ntrvl32.worldbank.org\r\ntrvl33.worldbank.org\r\ntrvl41.worldbank.org\r\ntrvl42.worldbank.org\r\ntry.avito.ru\r\ntry.mts.ru\r\nts-ecomweb-test.mkb.ru\r\nts-portal-front.yandex.ru\r\nts.avito.ru\r\nts.beeline.ru\r\nts.fef.avito.ru\r\nts.kmf.avito.ru\r\nts.magnit.ru\r\nts.rosenergo.gov.ru\r\nts.vedomosti.ru\r\nts.vpk.gov.ru\r\nts.ydyo.avito.ru\r\nts.zb.2gis.ru\r\nts01.avito.ru\r\nts1.avito.ru\r\nts17.avito.ru\r\nts2.avito.ru\r\nts3.avito.ru\r\ntsa.alfabank.ru\r\ntsa.avito.ru\r\ntsb.avito.ru\r\ntsc.avito.ru\r\ntserv.beeline.ru\r\ntsg.avito.ru\r\ntsgateway.avito.ru\r\ntsgw.avito.ru\r\ntsh-tech.beeline.ru\r\ntsi.avito.ru\r\ntsiolkovsky.tass.ru\r\ntsm-test.x5.ru\r\ntsm.avito.ru\r\ntsom.lab.x5.ru\r\ntsp.174.yandex.ru\r\ntsp.avito.ru\r\ntsp1.beeline.ru\r\ntsp2.beeline.ru\r\ntspace-av01.rosatom.ru\r\ntspace-av02.rosatom.ru\r\ntspace-av03.rosatom.ru\r\ntspace-av04.rosatom.ru\r\ntspace-av05.rosatom.ru\r\ntspace-link.rosatom.ru\r\ntspace-rec01.rosatom.ru\r\ntspace-rec02.rosatom.ru\r\ntspace-rec03.rosatom.ru\r\ntspace-rec04.rosatom.ru\r\ntspace-rec05.rosatom.ru\r\ntspace.rosatom.ru\r\ntsps.rosatom.ru\r\ntsrz4.delivery-c2c-api-orders-staging.k.avito.ru\r\ntss.avito.ru\r\ntst-alad-a2fa1.dmz.open.ru\r\ntst-alad-a2fa2.dmz.open.ru\r\ntst-careers.who.int\r\ntst-ctx-mam.open.ru\r\ntst-ctx-mdm.open.ru\r\ntst-ctx-mdm01.open.ru\r\ntst-ecredit.openbank.ru\r\ntst-exp-ctsb01.open.ru\r\ntst-exp-ctsf01.open.ru\r\ntst-gen-wa-edna-rgsb.open.ru\r\ntst-gen-wa-edna.open.ru\r\ntst-m.mdm.beeline.ru\r\ntst-mdmmob001.open.ru\r\ntst-merchantsbp.rshb.ru\r\ntst-msb03.open.ru\r\ntst-msb04.open.ru\r\ntst-msb09.open.ru\r\ntst-msb10.open.ru\r\ntst-msb14.open.ru\r\ntst-msb16.open.ru\r\ntst-nt-eks-ngnx.open.ru\r\ntst-opencon001.open.ru\r\ntst-prime.open.ru\r\ntst-roschat.open.ru\r\ntst-s.mdm.beeline.ru\r\ntst-sfn.open.ru\r\ntst-suocont001.open.ru\r\ntst-table001.open.ru\r\ntst.avito.ru\r\ntst.beta2.ria.ru\r\ntst.dmp.magnit.ru\r\ntst.factoring.rshb.ru\r\ntst.magnit.ru\r\ntst.mdrive.magnit.ru\r\ntst.mobile.heroism.yandex.ru\r\ntstapi.factoring.rshb.ru\r\ntsubasa.avito.ru\r\ntsunami.avito.ru\r\ntsune.mail.ru\r\ntsweb.avito.ru\r\ntszhgranatniy.6.yandex.ru\r\ntt.avito.ru\r\nttalk.avito.ru\r\nttbench.mail.ru\r\nttbh.mail.ru\r\nttc.avito.ru\r\nttinfo.beeline.ru\r\nttk.avito.ru\r\nttl.avito.ru\r\nttms-api-pl.beeline.ru\r\nttms-api-test.beeline.ru\r\nttms-api.beeline.ru\r\nttms-feedback-prodlike.beeline.ru\r\nttms-feedback-test.beeline.ru\r\nttms-feedback.beeline.ru\r\ntts.avito.ru\r\ntts.consultant.ru\r\ntts.tinkoff.ru\r\nttsvetkova.ing.k8s.dev.ivi.ru\r\nttt.avito.ru\r\ntttt.avito.ru\r\nttvel.rosatom.ru\r\ntu.avito.ru\r\ntu160.tass.ru\r\ntuan.avito.ru\r\ntuanwei.avito.ru\r\ntub.rutube.ru\r\ntube.avito.ru\r\ntubus.mts.ru\r\ntucker.avito.ru\r\ntucson.avito.ru\r\ntui.avito.ru\r\ntuktuk.avito.ru\r\ntula-r71.gosweb.gosuslugi.ru\r\ntula.avito.ru\r\ntula.babyblog.ru\r\ntula.beeline.ru\r\ntula.demo.megafon.ru\r\ntula.dev.home.megafon.ru\r\ntula.dev.kp.ru\r\ntula.dns-shop.ru\r\ntula.hh.ru\r\ntula.kp.ru\r\ntula.lemanapro.ru\r\ntula.mk.ru\r\ntula.mts.ru\r\ntula.shop.megafon.ru\r\ntula.tele2.ru\r\ntula.tutu.ru\r\ntulacity.gosuslugi.ru\r\ntulip.avito.ru\r\ntum.beeline.ru\r\ntumblr.avito.ru\r\ntumen.avito.ru\r\ntumen.dev.kp.ru\r\ntumen.dns-shop.ru\r\ntumen.kp.ru\r\ntumen.mk.ru\r\ntumet.sakha.gov.ru\r\ntumorclassification.iarc.who.int\r\ntumourclassification.iarc.who.int\r\ntuna.avito.ru\r\ntune.yandex.ru\r\ntunguska.tass.ru\r\ntuning.avito.ru\r\ntuningtime.content.tinkoff.ru\r\ntunis.avito.ru\r\ntunisia.avito.ru\r\ntunisie.avito.ru\r\ntunnel.avito.ru\r\ntur.www.dns-shop.ru\r\nturan.avito.ru\r\nturbo.avito.ru\r\nturbo.gazeta.ru\r\nturbo.lenta.ru\r\nturbo.ria.ru\r\nturf.avito.ru\r\nturin.gazeta.ru\r\nturing.avito.ru\r\nturinsk.drom.ru\r\nturism.avito.ru\r\nturismo.avito.ru\r\nturizm-lenoblast-spb.review-k8s.aif.ru\r\nturizm.avito.ru\r\nturizm.yandex.ru\r\nturkey.avito.ru\r\nturn.conf.citilink.ru\r\nturn.jazz.sberbank.ru\r\nturn1.drom.ru\r\nturner.avito.ru\r\nturtle.avito.ru\r\ntury.yandex.ru\r\nturystyka.avito.ru\r\ntutor.avito.ru\r\ntutor.yandex.ru\r\ntutoria.vk.com\r\ntutorial.avito.ru\r\ntutorials-mts-books.litres.ru\r\ntutorials.avito.ru\r\ntutorials.zdorovie-shkolnika.spb.aif.ru\r\ntutos.avito.ru\r\ntuva.new.fas.gov.ru\r\ntux.avito.ru\r\ntv.avito.ru\r\ntv.kino-teatr.ru\r\ntv.m24.ru\r\ntv.mail.ru\r\ntv.mk.ru\r\ntv.mts.ru\r\ntv.ok.ru\r\ntv.rambler.ru\r\ntv.sakhalin.gov.ru\r\ntv.sports.ru\r\ntv.tele2.ru\r\ntv.yandex.ru\r\ntv1.avito.ru\r\ntv2.avito.ru\r\ntv3.lady.mail.ru\r\ntva.avito.ru\r\ntvbattle.rutube.ru\r\ntve.beeline.ru\r\ntvel.feedback.rosatom.ru\r\ntvel.rosatom.ru\r\ntvel.tass.ru\r\ntver.aif.ru\r\ntver.avito.ru\r\ntver.babyblog.ru\r\ntver.beeline.ru\r\ntver.dev.kp.ru\r\ntver.dns-shop.ru\r\ntver.drom.ru\r\ntver.fas.gov.ru\r\ntver.garant.ru\r\ntver.hh.ru\r\ntver.home.megafon.ru\r\ntver.kp.ru\r\ntver.lemanapro.ru\r\ntver.mk.ru\r\ntver.mts.ru\r\ntver.shop.megafon.ru\r\ntver.tele2.ru\r\ntver.tutu.ru\r\ntveruprava.mos.ru\r\ntvh.mts.ru\r\ntvildanov.ing.k8s.dev.ivi.ru\r\ntvildanov.test.ivi.ru\r\ntvm.m24.ru\r\ntvoigorod.tele2.ru\r\ntvonline.avito.ru\r\ntvoy.magnit.ru\r\ntvpaysys.mts.ru\r\ntvpromo.beeline.ru\r\ntvr.avito.ru\r\ntvroom.1tv.ru\r\ntw.avito.ru\r\ntw.blog.avito.ru\r\ntwc.avito.ru\r\ntweb.avito.ru\r\ntwebinars-message.rosatom.ru\r\ntwebinars-mgw.rosatom.ru\r\ntwebinars-webrtc.rosatom.ru\r\ntwebinars-wowza.rosatom.ru\r\ntwebinars.rosatom.ru\r\ntweety.avito.ru\r\ntwex.rosatom.ru\r\ntwiki.avito.ru\r\ntwilight.avito.ru\r\ntwin.avito.ru\r\ntwink.111.yandex.ru\r\ntwinkle.avito.ru\r\ntwins.avito.ru\r\ntwist.avito.ru\r\ntwister.avito.ru\r\ntwitter.avito.ru\r\ntwo.avito.ru\r\ntwofactor2.open.ru\r\ntwork.edu.tbank.ru\r\ntwpg.mkb.ru\r\ntwr1.avito.ru\r\ntx.avito.ru\r\ntxt.avito.ru\r\nty.avito.ru\r\ntyb.avito.ru\r\ntyler.avito.ru\r\ntyphoon.avito.ru\r\ntypo.avito.ru\r\ntypo3.avito.ru\r\ntyr.avito.ru\r\ntyumen.alfabank.ru\r\ntyumen.avito.ru\r\ntyumen.dev.home.megafon.ru\r\ntyumen.hh.ru\r\ntyumen.lemanapro.ru\r\ntyumen.mts.ru\r\ntyumen.shop.megafon.ru\r\ntyumen.tele2.ru\r\ntyumentsevo.drom.ru\r\ntyva.dev.home.megafon.ru\r\ntyva.mts.ru\r\ntyva.shop.megafon.ru\r\ntz.avito.ru\r\ntz.mail.ru\r\ntza.avito.ru\r\ntzb.avito.ru\r\nu-orda4.gosuslugi.ru\r\nu-test.cloud.mail.ru\r\nu.002018.yandex.ru\r\nu.avito.ru\r\nu.cloud.mail.ru\r\nu.corp.vk.com\r\nu.habr.com\r\nu.msg.tass.ru\r\nu.mts.ru\r\nu.myteam.tass.ru\r\nu.pikabu.ru\r\nu.premier.one\r\nu.rutube.ru\r\nu.teams.infra.rbc.ru\r\nu.tinkoff.ru\r\nu1.avito.ru\r\nu2.avito.ru\r\nu3rm.kino-teatr.ru\r\nua.avito.ru\r\nua.euronews.com\r\nua.kommersant.ru\r\nua.sports.ru\r\nua.zdorovie-shkolnika.spb.aif.ru\r\nuag.avito.ru\r\nuag.rosbank.ru\r\nuak6-snm1.ug.ip.rostelecom.ru\r\nuapi.alfabank.ru\r\nuapi.beeline.ru\r\nuaproxy-bs.yandex.ru\r\nuat-01.corp.t2.ru\r\nuat-01.corp.tele2.ru\r\nuat-02.corp.t2.ru\r\nuat-04.corp.tele2.ru\r\nuat-07.corp.t2.ru\r\nuat-08.corp.tele2.ru\r\nuat-11.corp.t2.ru\r\nuat-12.corp.tele2.ru\r\nuat-21.corp.t2.ru\r\nuat-27.corp.t2.ru\r\nuat-29.corp.t2.ru\r\nuat-static.gosuslugi.ru\r\nuat.avito.ru\r\nuat.daily.afisha.ru\r\nuat.emp.mos.ru\r\nuat.kino-teatr.ru\r\nuat.platform.md.magnit.ru\r\nuat.rests.afisha.ru\r\nuat.ya.magnit.ru\r\nuatsyncplay.online.sberbank.ru\r\nuavpdevv01.sberbank.ru\r\nuazher.leasing.rshb.ru\r\nub-events.sberbank.ru\r\nub.avito.ru\r\nub.k8s.sports.ru\r\nub.msg.tass.ru\r\nub.mts.ru\r\nub.myteam.tass.ru\r\nub.teams.infra.rbc.ru\r\nubezpieczenia.avito.ru\r\nubio-digt-fgw.vtb.ru\r\nubs.avito.ru\r\nubu.redash.vedomosti.ru\r\nubuntu.avito.ru\r\nubutovo.mos.ru\r\nuc-iskratel.css.rzd.ru\r\nuc-rzd.css.rzd.ru\r\nuc.avito.ru\r\nuc.magnit.ru\r\nuc.openbank.ru\r\nucaads1.mnr.gov.ru\r\nucamm.mnr.gov.ru\r\nucasm1.mnr.gov.ru\r\nucenter.avito.ru\r\nucexpress01.rosatom.ru\r\nucexpress02.rosatom.ru\r\nucexpress03.rosatom.ru\r\nucfps23.mchs.gov.ru\r\nucfps23.mchs.ru\r\nucfps23.organizations.mchs.gov.ru\r\nuchebnik.mos.ru\r\nuchgod.edu.gov.ru\r\nuclients.cloud.mail.ru\r\nucodfc06-rlp.ops.beeline.ru\r\nucp-superset-ext.magnit.ru\r\nuctrader.unicreditbank.ru\r\nud.avito.ru\r\nud.tinkoff.ru\r\nudalenka.garant.ru\r\nudev1.rambler.ru\r\nudm.dev.home.megafon.ru\r\nudm.mts.ru\r\nudm.shop.megafon.ru\r\nudmpro.kommersant.ru\r\nudmurtia.fas.gov.ru\r\nudod.mail.ru\r\nudp.sakha.gov.ru\r\nudprf.gov.ru\r\nuds.avito.ru\r\nuehk.feedback.rosatom.ru\r\nuesgh2x.avito.ru\r\nuf.dns-shop.ru\r\nufa.afisha.ru\r\nufa.aif.ru\r\nufa.avito.ru\r\nufa.beeline.ru\r\nufa.dev.kp.ru\r\nufa.dns-shop.ru\r\nufa.hh.ru\r\nufa.kommersant.ru\r\nufa.kp.ru\r\nufa.lemanapro.ru\r\nufaprojects.kommersant.ru\r\nufo.avito.ru\r\nufo.dev.yandex.ru\r\nufo.mail.ru\r\nufs5.mail.ru\r\nufs6.mail.ru\r\nufs7.mail.ru\r\nufs8.mail.ru\r\nufscs.psi.sberbank.ru\r\nufscs.sberbank.ru\r\nug.avito.ru\r\nuganda.mail.ru\r\nuganda2.mail.ru\r\nugbwg2fk-rlp.ops.beeline.ru\r\nugp-zbx-ext-app.sovcombank.ru\r\nugpk.sakha.gov.ru\r\nugra.aif.ru\r\nugra.dev.kp.ru\r\nugra.kp.ru\r\nugra.mk.ru\r\nugrum-reka.1tv.ru\r\nugs.kostroma.gov.ru\r\nugsk.fms.gov.ru\r\nugwcscan0c270e07df9ef4a983c4b713c04d6d56.aif-city.spb.aif.ru\r\nugwcscan24fe3c405e63d6d8bcad11adbbe80281.git.status-spb.aif.ru\r\nugwcscan3ceb24fa855df5e92639b19f0db99277.com.life.kuzbass.aif.ru\r\nugwcscan4ccac2ea7aeeee6e7246499b53eaa602.project.kazan.aif.ru\r\nugwcscan53b9aaf7c8e58bea37fec4719fc91be8.kino-teatr.ru\r\nugwcscan57121e00cf0d07d0e6fd324f5284abbd.stalingrad.vlg.aif.ru\r\nugwcscanbbc0b7783e1250c1cea04436d518629c.gitlab.gkh.hab.aif.ru\r\nugwcscancb631fc51ee35e91a64dc018e76a1eaf.pochta.aif.ru\r\nugwcscand4dd410b142c8e033846514d0d1341fd.a.gorod.bryansk.aif.ru\r\nugwcscanf56b54ec7916ca8aceaec8b1bd3a5f8e.com.life.kuzbass.aif.ru\r\nuhc-compendium.who.int\r\nuhspo.avito.ru\r\nui-kit.rambler.ru\r\nui.avito.ru\r\nui.cs7777.vk.com\r\nui.megafon.ru\r\nui.rtb.beeline.ru\r\nui.tau.vk.com\r\nuk-mail.2gis.ru\r\nuk-webapp.2gis.ru\r\nuk.avito.ru\r\nuk1.avito.ru\r\nuk2.avito.ru\r\nukagir.sakha.gov.ru\r\nukep.avito.ru\r\nukr.avito.ru\r\nukr.zdorovie-shkolnika.spb.aif.ru\r\nukraina.avito.ru\r\nukss.rosatom.ru\r\nul-asa5520-vpn-fw.avito.ru\r\nul-cat6506-gw.avito.ru\r\nul.aif.ru\r\nul.avito.ru\r\nul.dev.kp.ru\r\nul.kp.ru\r\nulan-ude.club.dns-shop.ru\r\nulan-ude.lemanapro.ru\r\nulan.kp.ru\r\nulan.mk.ru\r\nulises.avito.ru\r\nulk-tech.mos.ru\r\nulkm.spec.tass.ru\r\nulmeria.gosuslugi.ru\r\nuln.beeline.ru\r\nuln.mts.ru\r\nuln.tele2.ru\r\nultima.avito.ru\r\nultimate.avito.ru\r\nultra.avito.ru\r\nultra1.avito.ru\r\nultra2.avito.ru\r\nulyanovsk-r73.gosweb.gosuslugi.ru\r\nulyanovsk.avito.ru\r\nulyanovsk.dns-shop.ru\r\nulyanovsk.fas.gov.ru\r\nulyanovsk.hh.ru\r\nulyanovsk.home.megafon.ru\r\nulyanovsk.lemanapro.ru\r\nulyanovsk.shop.megafon.ru\r\nulyanovskaya-obl.beeline.ru\r\nulyanovskij-r73.gosweb.gosuslugi.ru\r\nulysse.avito.ru\r\num-predprod.mos.ru\r\num.avito.ru\r\num.rambler.ru\r\numa-0.yandex.ru\r\numa.avito.ru\r\numa.beeline.ru\r\numahanov.council.gov.ru\r\number.yandex.ru\r\numbrella.avito.ru\r\numbrella.yandex.ru\r\numbriel.avito.ru\r\numcs.beeline.ru\r\numet.esm.apteka.ru\r\numfrage.avito.ru\r\numnoejkh.megafon.ru\r\nums.avito.ru\r\numt.esm.apteka.ru\r\numwelt.avito.ru\r\nun.avito.ru\r\nun121101224723.avito.ru\r\nun121101225938.avito.ru\r\nunavailable.avito.ru\r\nunderdog.avito.ru\r\nunderground.avito.ru\r\nunderwear.avito.ru\r\nunderworld.avito.ru\r\nuni.avito.ru\r\nuni.habr.com\r\nuni.roseltorg.ru\r\nuni.tutu.ru\r\nunico.avito.ru\r\nunicorn.avito.ru\r\nunifi.avito.ru\r\nuniform.avito.ru\r\nunikdoc.rusarchives.ru\r\nuninews.avito.ru\r\nunion.avito.ru\r\nunique.avito.ru\r\nunited.avito.ru\r\nunited.sports.ru\r\nunity.avito.ru\r\nuniv.avito.ru\r\nuniver.avito.ru\r\nuniver5.mail.ru\r\nuniversal-search-feed.dev.ext.max.com\r\nuniversal-search-feed.int.ext.max.com\r\nuniversal-search-feed.prd.ext.max.com\r\nuniversal-search-feed.stg.ext.max.com\r\nuniversal.avito.ru\r\nuniverse.avito.ru\r\nuniverse.project.tinkoff.ru\r\nuniversity.avito.ru\r\nuniversity.kommersant.ru\r\nuniversity.ozon.ru\r\nuniversum.avito.ru\r\nunix.avito.ru\r\nunknown.avito.ru\r\nunlimited.avito.ru\r\nuno.avito.ru\r\nunplugged.avito.ru\r\nunpo.tomsk.gov.ru\r\nunreal.avito.ru\r\nunregistered.zmc.avito.ru\r\nunsecret.rusarchives.ru\r\nunsee.net.ixbt.com\r\nunstable.heroism.yandex.ru\r\nunstable.mobile.maps.heroism.yandex.ru\r\nunstable.ott.kinopoisk.ru\r\nunstable.payment-widget-smarttv.kinopoisk.ru\r\nunstable.payment-widget-smarttv.plus.tst.kinopoisk.ru\r\nunstable.payment-widget.kinopoisk.ru\r\nunsub.emails.tinkoff.ru\r\nunsub.info.sberbank.ru\r\nunsubscribe.avito.ru\r\nunsubscribe.gosuslugi.ru\r\nunsubscribe.yandex.ru\r\nuntitled.avito.ru\r\nunused.aa2.avito.ru\r\nuoervagclicfg.kino-teatr.ru\r\nuonvos.rpn.gov.ru\r\nup-fotki.pd.yandex.ru\r\nup.avito.ru\r\nup.beeline.ru\r\nup.garant.ru\r\nup.minfin.rk.gov.ru\r\nup.pics.livejournal.com\r\nup01e.video.yandex.ru\r\nup01f.video.yandex.ru\r\nup01h.video.yandex.ru\r\nup02e.video.yandex.ru\r\nup02h.video.yandex.ru\r\nup1-filestore-samara.narod.yandex.ru\r\nup1-filestore-vvostok-narod.yandex.ru\r\nup1.avito.ru\r\nup1e-ft-narod.yandex.ru\r\nup1s-filestore-samara.narod.yandex.ru\r\nup1s-filestore-vvostok-narod.yandex.ru\r\nup2.avito.ru\r\nupay.megafon.ru\r\nupc.avito.ru\r\nupch.alania.gov.ru\r\nupd.avito.ru\r\nupdate.avito.ru\r\nupdate.mail.ru\r\nupdate.megafon.ru\r\nupdate1.avito.ru\r\nupdate2.avito.ru\r\nupdater.app-assistent.open.ru\r\nupdates.avito.ru\r\nupgrade.avito.ru\r\nupgsbi.sberbank.ru\r\nupics.yandex.ru\r\nupl.avito.ru\r\nupload-mobile.garant.ru\r\nupload-www.drive2.ru\r\nupload.1tv.ru\r\nupload.avito.ru\r\nupload.qa.photo.yandex.ru\r\nupload.rutube.ru\r\nupload1.mail.ru\r\nupload10.mail.ru\r\nupload135.mail.ru\r\nupload136.mail.ru\r\nupload137.mail.ru\r\nupload138.mail.ru\r\nupload139.mail.ru\r\nupload140.mail.ru\r\nupload141.mail.ru\r\nupload142.mail.ru\r\nupload143.mail.ru\r\nupload144.mail.ru\r\nupload145.mail.ru\r\nupload146.mail.ru\r\nupload147.mail.ru\r\nupload148.mail.ru\r\nupload149.mail.ru\r\nupload150.mail.ru\r\nupload151.mail.ru\r\nupload152.mail.ru\r\nupload153.mail.ru\r\nupload154.mail.ru\r\nupload155.mail.ru\r\nupload156.mail.ru\r\nupload157.mail.ru\r\nupload158.mail.ru\r\nupload159.mail.ru\r\nupload160.mail.ru\r\nupload161.mail.ru\r\nupload162.mail.ru\r\nupload163.mail.ru\r\nupload164.mail.ru\r\nupload165.mail.ru\r\nupload166.mail.ru\r\nupload167.mail.ru\r\nupload168.mail.ru\r\nupload169.mail.ru\r\nupload17.mail.ru\r\nupload170.mail.ru\r\nupload171.mail.ru\r\nupload172.mail.ru\r\nupload173.mail.ru\r\nupload174.mail.ru\r\nupload175.mail.ru\r\nupload176.mail.ru\r\nupload177.mail.ru\r\nupload179.mail.ru\r\nupload180.mail.ru\r\nupload181.mail.ru\r\nupload182.mail.ru\r\nupload183.mail.ru\r\nupload184.mail.ru\r\nupload185.mail.ru\r\nupload188.mail.ru\r\nupload189.mail.ru\r\nupload193.mail.ru\r\nupload194.mail.ru\r\nupload195.mail.ru\r\nupload196.mail.ru\r\nupload197.mail.ru\r\nupload198.mail.ru\r\nupload199.mail.ru\r\nupload2.avito.ru\r\nupload200.mail.ru\r\nupload201.mail.ru\r\nupload202.mail.ru\r\nupload203.mail.ru\r\nupload204.mail.ru\r\nupload205.mail.ru\r\nupload206.mail.ru\r\nupload207.mail.ru\r\nupload208.mail.ru\r\nupload209.mail.ru\r\nupload21.mail.ru\r\nupload210.mail.ru\r\nupload211.mail.ru\r\nupload212.mail.ru\r\nupload213.mail.ru\r\nupload214.mail.ru\r\nupload215.mail.ru\r\nupload216.mail.ru\r\nupload218.mail.ru\r\nupload219.mail.ru\r\nupload22.mail.ru\r\nupload220.mail.ru\r\nupload23.mail.ru\r\nupload28.mail.ru\r\nupload33.mail.ru\r\nupload51.mail.ru\r\nupload52.mail.ru\r\nupload6.mail.ru\r\nupload63.mail.ru\r\nupload69.mail.ru\r\nupload7.mail.ru\r\nupload70.mail.ru\r\nupload71.mail.ru\r\nupload72.mail.ru\r\nupload73.mail.ru\r\nupload74.mail.ru\r\nupload75.mail.ru\r\nupload76.mail.ru\r\nupload77.mail.ru\r\nupload78.mail.ru\r\nupload79.mail.ru\r\nupload80.mail.ru\r\nupload81.mail.ru\r\nupload82.mail.ru\r\nupload84.mail.ru\r\nupload9.mail.ru\r\nupload95.mail.ru\r\nuploadapi.m24.ru\r\nuploader.avito.ru\r\nuploader1.e.mail.ru\r\nuploader2.e.mail.ru\r\nuploader3.e.mail.ru\r\nuploader31.e.mail.ru\r\nuploader32.e.mail.ru\r\nuploader33.e.mail.ru\r\nuploader34.e.mail.ru\r\nuploader36.e.mail.ru\r\nuploads.apteka.ru\r\nuploads.avito.ru\r\nupmeter.k8s.rg.ru\r\nuport.avito.ru\r\nupos.sberbank.ru\r\nupport.kino-teatr.ru\r\nuppy.net.ixbt.com\r\nupr-akhodgp.sakha.gov.ru\r\nupr-gszgn.sakha.gov.ru\r\nuprava-kapotnya.mos.ru\r\nuprzags.sakha.gov.ru\r\nups.avito.ru\r\nuptime.avito.ru\r\nuptime.net.ixbt.com\r\nuptimerobot.habr.com\r\nural-lka1.ural.mts.ru\r\nural-lka2.ural.mts.ru\r\nural-lka3.ural.mts.ru\r\nural-referral.dns-shop.ru\r\nural-vacancy.dns-shop.ru\r\nural.avito.ru\r\nural.b2blk.megafon.ru\r\nural.dev.kp.ru\r\nural.kommersant.ru\r\nural.kp.ru\r\nural.mchs.ru\r\nural.tg.t2.ru\r\nural.travel.t2.ru\r\nuralian.kp.ru\r\nuran.avito.ru\r\nurania.avito.ru\r\nuranium.avito.ru\r\nurano.avito.ru\r\nuranus.avito.ru\r\nurban-regeneration.worldbank.org\r\nurban.avito.ru\r\nurbanforum.m24.ru\r\nurbanhealth-repository.who.int\r\nurc.ac.ru.avito.ru\r\nurchin.avito.ru\r\nurist10118.9111.ru\r\nurist10700.9111.ru\r\nurist11224.9111.ru\r\nurist1125028.9111.ru\r\nurist11343.9111.ru\r\nurist11441.9111.ru\r\nurist11501.9111.ru\r\nurist1159404.9111.ru\r\nurist11599.9111.ru\r\nurist1160337.9111.ru\r\nurist1175530.9111.ru\r\nurist11940.9111.ru\r\nurist11940.test.9111.ru\r\nurist11940.test2.9111.ru\r\nurist1208189.9111.ru\r\nurist1211422.9111.ru\r\nurist12243.9111.ru\r\nurist1226402.9111.ru\r\nurist12479.9111.ru\r\nurist1250.9111.ru\r\nurist12524.9111.ru\r\nurist12554.9111.ru\r\nurist12554.test.9111.ru\r\nurist1263123.9111.ru\r\nurist1271618.9111.ru\r\nurist12736.9111.ru\r\nurist12746.9111.ru\r\nurist1280465.9111.ru\r\nurist1286482.9111.ru\r\nurist1286577.9111.ru\r\nurist1289294.9111.ru\r\nurist12909.9111.ru\r\nurist1294324.9111.ru\r\nurist12960.9111.ru\r\nurist1298720.9111.ru\r\nurist1301363.9111.ru\r\nurist13038.9111.ru\r\nurist13045.9111.ru\r\nurist13186.9111.ru\r\nurist1322029.9111.ru\r\nurist1323487.9111.ru\r\nurist13269.9111.ru\r\nurist1336148.9111.ru\r\nurist13365.9111.ru\r\nurist1337913.9111.ru\r\nurist1344561.9111.ru\r\nurist13594.9111.ru\r\nurist13708.9111.ru\r\nurist1382921.9111.ru\r\nurist13865.9111.ru\r\nurist13977.9111.ru\r\nurist14409.9111.ru\r\nurist14443.9111.ru\r\nurist14517.9111.ru\r\nurist14756.9111.ru\r\nurist14794.9111.ru\r\nurist14794.9111.ruurist14794.9111.ru\r\nurist14929.9111.ru\r\nurist15188.9111.ru\r\nurist15642.9111.ru\r\nurist15651.9111.ru\r\nurist15803.9111.ru\r\nurist15857.9111.ru\r\nurist16098.9111.ru\r\nurist16152.9111.ru\r\nurist16361.9111.ru\r\nurist16369.9111.ru\r\nurist16437.9111.ru\r\nurist16742.9111.ru\r\nurist16778.9111.ru\r\nurist16808.9111.ru\r\nurist16812.9111.ru\r\nurist17044.9111.ru\r\nurist17066.9111.ru\r\nurist17187.9111.ru\r\nurist17467.9111.ru\r\nurist17489.9111.ru\r\nurist17511.9111.ru\r\nurist1758254.9111.ru\r\nurist17645.9111.ru\r\nurist17718.9111.ru\r\nurist17836.9111.ru\r\nurist17906.9111.ru\r\nurist1791445.9111.ru\r\nurist17915.9111.ru\r\nurist18129.9111.ru\r\nurist18232.9111.ru\r\nurist18297.9111.ru\r\nurist18301.9111.ru\r\nurist18324.9111.ru\r\nurist18399.9111.ru\r\nurist1841848.9111.ru\r\nurist18459.9111.ru\r\nurist18466.9111.ru\r\nurist18478.9111.ru\r\nurist18525.9111.ru\r\nurist18663.test.9111.ru\r\nurist19023.9111.ru\r\nurist19168.9111.ru\r\nurist19236.9111.ru\r\nurist19355.9111.ru\r\nurist19400.9111.ru\r\nurist19546.9111.ru\r\nurist1964.9111.ru\r\nurist19855.9111.ru\r\nurist19892.9111.ru\r\nurist19952.9111.ru\r\nurist2.9111.ru\r\nurist20066.9111.ru\r\nurist20101.9111.ru\r\nurist20146.9111.ru\r\nurist20241.9111.ru\r\nurist20459.9111.ru\r\nurist20517.9111.ru\r\nurist21052.9111.ru\r\nurist21074.9111.ru\r\nurist21096.9111.ru\r\nurist21306.9111.ru\r\nurist21698.9111.ru\r\nurist21765.9111.ru\r\nurist21774.9111.ru\r\nurist21910.9111.ru\r\nurist22070.9111.ru\r\nurist22090.9111.ru\r\nurist2286288.9111.ru\r\nurist243.9111.ru\r\nurist2634.9111.ru\r\nurist2705415.9111.ru\r\nurist3529.9111.ru\r\nurist3928.9111.ru\r\nurist4018.9111.ru\r\nurist4154.9111.ru\r\nurist4185.9111.ru\r\nurist5486.9111.ru\r\nurist5571.9111.ru\r\nurist5817.9111.ru\r\nurist5866.9111.ru\r\nurist5891.9111.ru\r\nurist5970.9111.ru\r\nurist6160.9111.ru\r\nurist6374.9111.ru\r\nurist644041.9111.ru\r\nurist6475.9111.ru\r\nurist6620.9111.ru\r\nurist676.9111.ru\r\nurist6984.9111.ru\r\nurist7168.9111.ru\r\nurist7673.9111.ru\r\nurist7790.9111.ru\r\nurist791.9111.ru\r\nurist8310.9111.ru\r\nurist8402.9111.ru\r\nurist8847.9111.ru\r\nurist9246.9111.ru\r\nurist9249.9111.ru\r\nurist9414.9111.ru\r\nurist9735.9111.ru\r\nurist9951.9111.ru\r\nurist9953.9111.ru\r\nurl.avito.ru\r\nurozhai.rshb.ru\r\nursula.yandex.ru\r\nuruguay.avito.ru\r\nurv.magnit.ru\r\nus-east-1.avito.ru\r\nus-east.avito.ru\r\nus.apps.yandex.ru\r\nus.avito.ru\r\nus.kino-teatr.ru\r\nus.lemanapro.ru\r\nus1.avito.ru\r\nus2.avito.ru\r\nusa.avito.ru\r\nusa.babyblog.ru\r\nusa.dev.kp.ru\r\nusa.lenta.ru\r\nusability-api.alfabank.ru\r\nusability.alfabank.ru\r\nuse.dev.api.max.com\r\nuse.int.api.max.com\r\nuse.prd.api.max.com\r\nuse.stg.api.max.com\r\nuse1.dev.api.max.com\r\nuse1.int.api.max.com\r\nuse1.prd.api.max.com\r\nuse1.stg.api.max.com\r\nuse2.prd.api.max.com\r\nuse2.stg.api.max.com\r\nuseast.avito.ru\r\nused.avito.ru\r\nusedcars.avito.ru\r\nuselab.alfabank.ru\r\nuser-account.ozon.ru\r\nuser-api.tutu.ru\r\nuser-items.s1.citilink.ru\r\nuser.avito.ru\r\nuser.kino-teatr.ru\r\nuser.sberbank.ru\r\nuser.sberhelp.sber.ru\r\nuser1.avito.ru\r\nuser1044508.9111.ru\r\nuser1094688.9111.ru\r\nuser1096596.9111.ru\r\nuser1096883.9111.ru\r\nuser1097376.9111.ru\r\nuser1098462.9111.ru\r\nuser1098901.9111.ru\r\nuser1103068.9111.ru\r\nuser1103734.9111.ru\r\nuser1103758.9111.ru\r\nuser1104563.9111.ru\r\nuser1104849.9111.ru\r\nuser1105635.9111.ru\r\nuser1105712.9111.ru\r\nuser1105932.9111.ru\r\nuser1108768.9111.ru\r\nuser1109753.9111.ru\r\nuser1109757.9111.ru\r\nuser1117545.9111.ru\r\nuser1119451.9111.ru\r\nuser1120992.9111.ru\r\nuser1121353.9111.ru\r\nuser1122162.9111.ru\r\nuser1122728.9111.ru\r\nuser1123095.9111.ru\r\nuser1124329.9111.ru\r\nuser1126872.9111.ru\r\nuser1129697.9111.ru\r\nuser1137633.9111.ru\r\nuser1141931.9111.ru\r\nuser1143906.9111.ru\r\nuser1145277.9111.ru\r\nuser1145425.9111.ru\r\nuser1147295.9111.ru\r\nuser1147608.9111.ru\r\nuser1153765.9111.ru\r\nuser1154288.9111.ru\r\nuser1155413.9111.ru\r\nuser1155520.9111.ru\r\nuser1156169.9111.ru\r\nuser1156863.9111.ru\r\nuser1157002.9111.ru\r\nuser1157721.9111.ru\r\nuser1158647.9111.ru\r\nuser1159113.9111.ru\r\nuser1160780.9111.ru\r\nuser1161650.9111.ru\r\nuser1162281.9111.ru\r\nuser1164535.9111.ru\r\nuser1165523.9111.ru\r\nuser1166071.9111.ru\r\nuser1167869.9111.ru\r\nuser1169887.9111.ru\r\nuser1169963.9111.ru\r\nuser1170102.9111.ru\r\nuser1171008.9111.ru\r\nuser1171399.9111.ru\r\nuser1172962.9111.ru\r\nuser1174659.9111.ru\r\nuser1174907.9111.ru\r\nuser1177357.9111.ru\r\nuser1179017.9111.ru\r\nuser1179151.9111.ru\r\nuser1179312.9111.ru\r\nuser1180124.9111.ru\r\nuser1181171.9111.ru\r\nuser1181191.9111.ru\r\nuser1181461.9111.ru\r\nuser1182310.9111.ru\r\nuser1187044.9111.ru\r\nuser1187494.9111.ru\r\nuser1190761.9111.ru\r\nuser1190841.9111.ru\r\nuser1191660.9111.ru\r\nuser119215.9111.ru\r\nuser1192935.9111.ru\r\nuser1194558.9111.ru\r\nuser1196173.9111.ru\r\nuser1197614.9111.ru\r\nuser1198492.9111.ru\r\nuser1198935.9111.ru\r\nuser1199139.9111.ru\r\nuser1199194.9111.ru\r\nuser1202517.9111.ru\r\nuser1203327.9111.ru\r\nuser1204264.9111.ru\r\nuser1204378.9111.ru\r\nuser1204826.9111.ru\r\nuser1213198.9111.ru\r\nuser1213555.9111.ru\r\nuser1215039.9111.ru\r\nuser1215757.9111.ru\r\nuser1216424.9111.ru\r\nuser1216473.9111.ru\r\nuser1216715.9111.ru\r\nuser1217099.9111.ru\r\nuser1227006.9111.ru\r\nuser1229889.9111.ru\r\nuser1231564.9111.ru\r\nuser1232038.9111.ru\r\nuser1233868.9111.ru\r\nuser123482.9111.ru\r\nuser1236886.9111.ru\r\nuser1238392.9111.ru\r\nuser1239155.9111.ru\r\nuser1242640.9111.ru\r\nuser1253122.9111.ru\r\nuser1253685.9111.ru\r\nuser1257566.9111.ru\r\nuser1259571.9111.ru\r\nuser1262066.9111.ru\r\nuser1265962.9111.ru\r\nuser1270167.9111.ru\r\nuser1270241.9111.ru\r\nuser1270373.9111.ru\r\nuser1270727.9111.ru\r\nuser1272774.9111.ru\r\nuser1273425.9111.ru\r\nuser1273981.9111.ru\r\nuser1274816.9111.ru\r\nuser1275121.9111.ru\r\nuser1275175.9111.ru\r\nuser1276268.9111.ru\r\nuser1277740.9111.ru\r\nuser1278967.9111.ru\r\nuser1279382.9111.ru\r\nuser1283222.9111.ru\r\nuser1285094.9111.ru\r\nuser1286564.9111.ru\r\nuser1287561.9111.ru\r\nuser1288482.9111.ru\r\nuser1288970.9111.ru\r\nuser1289048.9111.ru\r\nuser1289931.9111.ru\r\nuser1298705.9111.ru\r\nuser1298932.9111.ru\r\nuser1298935.9111.ru\r\nuser1299309.9111.ru\r\nuser1300840.9111.ru\r\nuser1301642.9111.ru\r\nuser1302615.9111.ru\r\nuser1303859.9111.ru\r\nuser1305663.9111.ru\r\nuser1305696.9111.ru\r\nuser1306468.9111.ru\r\nuser1307275.9111.ru\r\nuser1308790.9111.ru\r\nuser1308837.9111.ru\r\nuser1309772.9111.ru\r\nuser1314994.9111.ru\r\nuser1319163.9111.ru\r\nuser1320022.9111.ru\r\nuser1320423.9111.ru\r\nuser1321151.9111.ru\r\nuser1322714.9111.ru\r\nuser1322912.9111.ru\r\nuser1324187.9111.ru\r\nuser1324626.9111.ru\r\nuser1327094.9111.ru\r\nuser1329537.9111.ru\r\nuser1330007.9111.ru\r\nuser1339958.9111.ru\r\nuser1340481.9111.ru\r\nuser1340581.9111.ru\r\nuser1341973.9111.ru\r\nuser1343508.9111.ru\r\nuser1344257.9111.ru\r\nuser1346158.9111.ru\r\nuser1347562.9111.ru\r\nuser1347876.9111.ru\r\nuser1348403.9111.ru\r\nuser1348826.9111.ru\r\nuser1350186.9111.ru\r\nuser1350668.9111.ru\r\nuser1352403.9111.ru\r\nuser1353930.9111.ru\r\nuser1354151.9111.ru\r\nuser1354404.9111.ru\r\nuser1357498.9111.ru\r\nuser1357954.9111.ru\r\nuser1364437.9111.ru\r\nuser1364777.9111.ru\r\nuser1373866.9111.ru\r\nuser1377143.9111.ru\r\nuser1377550.9111.ru\r\nuser1378499.9111.ru\r\nuser1379607.9111.ru\r\nuser1381369.9111.ru\r\nuser1382092.9111.ru\r\nuser1382122.9111.ru\r\nuser1383315.9111.ru\r\nuser1384725.9111.ru\r\nuser1387445.9111.ru\r\nuser1388927.9111.ru\r\nuser1389806.9111.ru\r\nuser1390968.9111.ru\r\nuser1393329.9111.ru\r\nuser1393410.9111.ru\r\nuser1393636.9111.ru\r\nuser1394059.9111.ru\r\nuser1402591.9111.ru\r\nuser1467387.9111.ru\r\nuser1557751.9111.ru\r\nuser1596444.9111.ru\r\nuser2.avito.ru\r\nuser218192.9111.ru\r\nuser221094.9111.ru\r\nuser2235706.9111.ru\r\nuser224674.9111.ru\r\nuser231088.9111.ru\r\nuser233097.9111.ru\r\nuser2353054.9111.ru\r\nuser238364.9111.ru\r\nuser253501.9111.ru\r\nuser258756.9111.ru\r\nuser26.leasing.rshb.ru\r\nuser261518.9111.ru\r\nuser271353.9111.ru\r\nuser281277.9111.ru\r\nuser288640.9111.ru\r\nuser304126.9111.ru\r\nuser305517.9111.ru\r\nuser317233.9111.ru\r\nuser323386.9111.ru\r\nuser328911.9111.ru\r\nuser333674.9111.ru\r\nuser334317.9111.ru\r\nuser339463.9111.ru\r\nuser348091.9111.ru\r\nuser350829.9111.ru\r\nuser35249.9111.ru\r\nuser353146.9111.ru\r\nuser370834.9111.ru\r\nuser374356.9111.ru\r\nuser374886.9111.ru\r\nuser376947.9111.ru\r\nuser391136.9111.ru\r\nuser395243.9111.ru\r\nuser406970.9111.ru\r\nuser438943.9111.ru\r\nuser446945.9111.ru\r\nuser452061.9111.ru\r\nuser460795.9111.ru\r\nuser463581.9111.ru\r\nuser465558.9111.ru\r\nuser477690.9111.ru\r\nuser478624.9111.ru\r\nuser479492.9111.ru\r\nuser492388.9111.ru\r\nuser513649.9111.ru\r\nuser522807.9111.ru\r\nuser536528.9111.ru\r\nuser537092.9111.ru\r\nuser540822.9111.ru\r\nuser543640.9111.ru\r\nuser545671.9111.ru\r\nuser557170.9111.ru\r\nuser562389.9111.ru\r\nuser564416.9111.ru\r\nuser566541.9111.ru\r\nuser566638.9111.ru\r\nuser569300.9111.ru\r\nuser576357.9111.ru\r\nuser576428.9111.ru\r\nuser584931.9111.ru\r\nuser591403.9111.ru\r\nuser609213.9111.ru\r\nuser610248.9111.ru\r\nuser618568.9111.ru\r\nuser622572.9111.ru\r\nuser625760.9111.ru\r\nuser626877.9111.ru\r\nuser632526.9111.ru\r\nuser636081.9111.ru\r\nuser636915.9111.ru\r\nuser642705.9111.ru\r\nuser643724.9111.ru\r\nuser645935.9111.ru\r\nuser646021.9111.ru\r\nuser646862.9111.ru\r\nuser655963.9111.ru\r\nuser666960.9111.ru\r\nuser70413.9111.ru\r\nuser749181.9111.ru\r\nuser78655.9111.ru\r\nuser804931.9111.ru\r\nuser865304.9111.ru\r\nuser867179.9111.ru\r\nuser878958.9111.ru\r\nuser91397.9111.ru\r\nuser977169.9111.ru\r\nuser977498.9111.ru\r\nuser98159.9111.ru\r\nuserid.sber.ru\r\nusername.avito.ru\r\nusers.1tv.ru\r\nusers.avito.ru\r\nusers.m24.ru\r\nusertest.avito.ru\r\nusigmacloud.mail.ru\r\nusim.mts.ru\r\nusimlogistapp01.msk.mts.ru\r\nusinsk.gosuslugi.ru\r\nuslugi-cargo.rzd.ru\r\nuslugi.avito.ru\r\nuslugi.lemanapro.ru\r\nuslugi.rk.gov.ru\r\nuslugi.tambov.gov.ru\r\nuslugi.yandex.ru\r\nusn-online.nalog.ru\r\nuspeh.megafon.ru\r\nuss.avito.ru\r\nussd.russianpost.ru\r\nussuriisk.drom.ru\r\nust-abakan.drom.ru\r\nusta.61.yandex.ru\r\nustkubinskij-r19.gosweb.gosuslugi.ru\r\nustkuiga.sakha.gov.ru\r\nustmaia.sakha.gov.ru\r\nusuarios.avito.ru\r\nusub.avito.ru\r\nusw2.int.api.max.com\r\nusw2.prd.api.max.com\r\nusw2.stg.api.max.com\r\nusznvao.mos.ru\r\nut.avito.ru\r\nutag.megafon.ru\r\nutah.avito.ru\r\nutcs.leasing.rshb.ru\r\nutf.mail.ru\r\nutg.mkb.ru\r\nutil.avito.ru\r\nutil.minprom.gov.ru\r\nutil01.avito.ru\r\nutility.avito.ru\r\nutils.avito.ru\r\nutils.meduza.io\r\nutki.kino-teatr.ru\r\nutlook.kino-teatr.ru\r\nutm.avito.ru\r\nutopia.avito.ru\r\nutraty2017.tass.ru\r\nutraty2018.tass.ru\r\nutraty2019.tass.ru\r\nutraty2020.tass.ru\r\nutrobot.m24.ru\r\nuvgkbfz.avito.ru\r\nuvgsch.mchs.gov.ru\r\nuvgsch.mchs.ru\r\nuvgsch.organizations.mchs.gov.ru\r\nuviri.gosuslugi.ru\r\nuvs.garant.ru\r\nuvzd.rzd.ru\r\nuwet.esm.apteka.ru\r\nuws.avito.ru\r\nux-lab.dc.cloud.mts.ru\r\nuxr3.avito.ru\r\nuxr4.avito.ru\r\nuxs1r.avito.ru\r\nuxs2r.avito.ru\r\nuy.avito.ru\r\nuyp-zbx-ui-ext.sovcombank.ru\r\nuzao.mos.ru\r\nuzhnoport.mos.ru\r\nv-kuhni.ru.2018.yandex.ru\r\nv.avito.ru\r\nv.k.avito.ru\r\nv.kino-teatr.ru\r\nv.ok.ru\r\nv.tinkoff.ru\r\nv.v.s.70inbox.yandex.ru\r\nv00bmcarsint001.magnit.ru\r\nv00bmcarsint002.magnit.ru\r\nv00eway-srvapp.uc.magnit.ru\r\nv1.avito.ru\r\nv1.mail.ru\r\nv10.csngok.ok.avito.ru\r\nv2-who.iz.ru\r\nv2.argus.sev.gov.ru\r\nv2.auth.rbc.ru\r\nv2.avito.ru\r\nv2.mail.ru\r\nv28.avito.ru\r\nv3.avito.ru\r\nv3.disk.mts.ru\r\nv3.syn.1tv.ru\r\nv4.avito.ru\r\nv4.syn.1tv.ru\r\nv5.avito.ru\r\nv5.cash.rbc.ru\r\nv6.avito.ru\r\nv6.staging.avito.ru\r\nva-audio.t2.ru\r\nva-greenfield1.online.sberbank.ru\r\nva-node1.online.sberbank.ru\r\nva-node2.online.sberbank.ru\r\nva-node3.online.sberbank.ru\r\nva-node4.online.sberbank.ru\r\nva-node5.online.sberbank.ru\r\nva-node6.online.sberbank.ru\r\nva-node7.online.sberbank.ru\r\nva-res.online.sberbank.ru\r\nva-standin1.online.sberbank.ru\r\nva-standin2.online.sberbank.ru\r\nva.avito.ru\r\nvacancy.magnit.ru\r\nvader.avito.ru\r\nvader.zdorovie-shkolnika.spb.aif.ru\r\nvadim.avito.ru\r\nvag.70.yandex.ru\r\nvahe.1989.yandex.ru\r\nvaio.avito.ru\r\nvak2.ed.gov.ru\r\nvakcinacija-covid19.tass.ru\r\nvakcinaciya.tass.ru\r\nvakcinaciyatest.tass.ru\r\nval.avito.ru\r\nvalaam.kommersant.ru\r\nvalaam2.kommersant.ru\r\nvale.avito.ru\r\nvalencia.avito.ru\r\nvalentina.avito.ru\r\nvalentine.avito.ru\r\nvaleria.avito.ru\r\nvalerie.avito.ru\r\nvalhalla.avito.ru\r\nvaliant.avito.ru\r\nvalidate.avito.ru\r\nvalidation.avito.ru\r\nvalidator-api.semweb.yandex.ru\r\nvalidator.yandex.ru\r\nvalidclick.avito.ru\r\nvalikhanb.86.yandex.ru\r\nvalue.avito.ru\r\nvampire.avito.ru\r\nvan.avito.ru\r\nvancouver.avito.ru\r\nvancouver.lenta.ru\r\nvancpohw-rlp.ops.beeline.ru\r\nvanessa.avito.ru\r\nvanguard.avito.ru\r\nvanikin.ing.k8s.dev.ivi.ru\r\nvanilla.avito.ru\r\nvao.mos.ru\r\nvar.avito.ru\r\nvare8.mail.ru\r\nvariti.citilink.ru\r\nvarnish.avito.ru\r\nvaruna.avito.ru\r\nvas.avito.ru\r\nvas.partners.megafon.ru\r\nvasco.avito.ru\r\nvasilenkov.9111.ru\r\nvats.megafon.ru\r\nvault-01-secaas.devel.tutu.ru\r\nvault-01-secaas.prod.tutu.ru\r\nvault-02-secaas.devel.tutu.ru\r\nvault-02-secaas.prod.tutu.ru\r\nvault-03-secaas.prod.tutu.ru\r\nvault-app01.mkb.ru\r\nvault-secaas.devel.tutu.ru\r\nvault-secaas.tutu.ru\r\nvault.avito.ru\r\nvault.azuremsk.ec.mts.ru\r\nvault.iac.mchs.ru\r\nvault.msk-azure.ec.mts.ru\r\nvault.sandbox.ya.mvideo.ru\r\nvault.staging.tech.mvideo.ru\r\nvault.tech.mvideo.ru\r\nvault13.yandex.ru\r\nvaulterixtest.alfabank.ru\r\nvaux-swift-inside.kino-teatr.ru\r\nvav-05.06.yandex.ru\r\nvav2.duma.gov.ru\r\nvb-update.yandex.ru\r\nvb.avito.ru\r\nvb.ec.mts.ru\r\nvb.ilb.vtb.ru\r\nvb.nsk.cloud.mts.ru\r\nvb.spb.cloud.mts.ru\r\nvb.vld.cloud.mts.ru\r\nvb.vtb.ru\r\nvbo-demo.mkb.ru\r\nvbo-dummy2.mkb.ru\r\nvbo-help-preprod.mkb.ru\r\nvbo-mobile-dev.mkb.ru\r\nvbo-preprod.mkb.ru\r\nvbo-test.mkb.ru\r\nvbo.mkb.ru\r\nvbo2.mkb.ru\r\nvbo3.mkb.ru\r\nvbox.avito.ru\r\nvbulletin.avito.ru\r\nvbv-tst.tinkoff.ru\r\nvbv.tinkoff.ru\r\nvc.avito.ru\r\nvc.dev.videos.livejournal.com\r\nvc.mk.ru\r\nvc.mts.ru\r\nvc.stage.videos.livejournal.com\r\nvc.tass.ru\r\nvc.videos.livejournal.com\r\nvc1.avito.ru\r\nvc2.avito.ru\r\nvc3.avito.ru\r\nvcall.open.ru\r\nvcc.megafon.ru\r\nvcc.spb.mts.ru\r\nvcd.avito.ru\r\nvcd.beeline.ru\r\nvcd.megafon.ru\r\nvcd1.megafon.ru\r\nvcd2.megafon.ru\r\nvcd3.megafon.ru\r\nvcdp.who.int\r\nvcenter.avito.ru\r\nvcenter.garant.ru\r\nvcm.avito.ru\r\nvcon.avito.ru\r\nvconf.avito.ru\r\nvconf.rosatom.ru\r\nvconnect.who.int\r\nvcontest1.i.mail.ru\r\nvcontest1.mail.ru\r\nvcontest2.i.mail.ru\r\nvcp.ivi.ru\r\nvcs-e-3.alfabank.ru\r\nvcs-e-rezerv.alfabank.ru\r\nvcs-e.alfabank.ru\r\nvcs-exp-e01.sberbank.ru\r\nvcs-exp-e02.sberbank.ru\r\nvcs-inet-edge-a-01up.sber.ru\r\nvcs-inet-edge-a-02up.sber.ru\r\nvcs-inet-edge-a-03up.sber.ru\r\nvcs-inet-edge-a-04sk.sber.ru\r\nvcs-inet-edge-a-05sk.sber.ru\r\nvcs-inet-edge-a-06sk.sber.ru\r\nvcs-inet-edge-a.sber.ru\r\nvcs-inet-edge-b-01up.sber.ru\r\nvcs-inet-edge-b-02up.sber.ru\r\nvcs-inet-edge-b-03up.sber.ru\r\nvcs-inet-edge-b-04sk.sber.ru\r\nvcs-inet-edge-b-05sk.sber.ru\r\nvcs-inet-edge-b-06sk.sber.ru\r\nvcs-inet-edge-b.sber.ru\r\nvcs.alfabank.ru\r\nvcs.avito.ru\r\nvcs.epk.gov.ru\r\nvcs.rk.gov.ru\r\nvcs.sberbank.ru\r\nvcs1.video.tambov.gov.ru\r\nvcs2.video.tambov.gov.ru\r\nvcs218.video.tambov.gov.ru\r\nvcse.avito.ru\r\nvcse1.megafon.ru\r\nvd.avito.ru\r\nvdc.avito.ru\r\nvdi-ef.avito.ru\r\nvdi-ext.megafon.ru\r\nvdi-ix.avito.ru\r\nvdi.avito.ru\r\nvdi.beeline.ru\r\nvdi.megafon.ru\r\nvdi.mts.ru\r\nvdi.rosatom.ru\r\nvdi.worldbank.org\r\nvdk.beeline.ru\r\nvdnh2020.tass.ru\r\nvdp.avito.ru\r\nvds.avito.ru\r\nvds1.avito.ru\r\nvds2.avito.ru\r\nvds22.avito.ru\r\nvds3.avito.ru\r\nvds4.avito.ru\r\nvdstories.mts.ru\r\nvdv.beeline.ru\r\nve.avito.ru\r\nvebrf.credit-registry.nalog.ru\r\nvebrfbank.credit-registry.nalog.ru\r\nvebstage3.avito.ru\r\nvec-rdr02h.maps.yandex.ru\r\nvec-rdr03h.maps.yandex.ru\r\nvec-rdr04h.maps.yandex.ru\r\nvec-rdr05h.maps.yandex.ru\r\nvec-rdr06h.maps.yandex.ru\r\nvec-rdr07h.maps.yandex.ru\r\nvec-rdr08h.maps.yandex.ru\r\nvec-rdr09h.maps.yandex.ru\r\nvec-rdr10h.maps.yandex.ru\r\nvec-rdr12h.maps.yandex.ru\r\nvec-rdr13h.maps.yandex.ru\r\nvec-rdr14h.maps.yandex.ru\r\nvec-rdr15h.maps.yandex.ru\r\nvec-rdr16h.maps.yandex.ru\r\nvec-rdr17h.maps.yandex.ru\r\nvec-rdr18h.maps.yandex.ru\r\nvec-rdr19h.maps.yandex.ru\r\nvec-rdr20h.maps.yandex.ru\r\nvec01e.maps.yandex.ru\r\nvec01f.maps.yandex.ru\r\nvec01h.maps.yandex.ru\r\nvec02e.maps.yandex.ru\r\nvec02h.maps.yandex.ru\r\nvec03e.maps.yandex.ru\r\nvec03f.maps.yandex.ru\r\nvec03h.maps.yandex.ru\r\nvec04e.maps.yandex.ru\r\nvec04f.maps.yandex.ru\r\nvec04h.maps.yandex.ru\r\nveche.duma.gov.ru\r\nvechernyayashkola9saratov-r64.gosweb.gosuslugi.ru\r\nvector-test.mos.ru\r\nvector.avito.ru\r\nvector.mos.ru\r\nvedmoscow.bizconf.rbc.ru\r\nveeam.avito.ru\r\nvef.bizconf.rbc.ru\r\nvef25.iz.ru\r\nvega.avito.ru\r\nvegas.avito.ru\r\nveged.dev.yandex.ru\r\nvegetarian.avito.ru\r\nvejdelevskij-r31.gosweb.gosuslugi.ru\r\nvela.avito.ru\r\nvelikie-imena.tass.ru\r\nvelikiy-novgorod.beeline.ru\r\nvelikiy-novgorod.dns-shop.ru\r\nvelikiy-novgorod.drom.ru\r\nvelikiy-novgorod.lemanapro.ru\r\nvelikiy-ustyug.drom.ru\r\nvelma.avito.ru\r\nvelo.afisha.ru\r\nvelocity.avito.ru\r\nvendor-api.avito.ru\r\nvendor.avito.ru\r\nvendor.market.yandex.ru\r\nvendors.avito.ru\r\nvenecianskiy.kinofestivali.tass.ru\r\nvenezuela.avito.ru\r\nvenice.avito.ru\r\nvenkat.avito.ru\r\nvenom.avito.ru\r\nventas.avito.ru\r\nventure.avito.ru\r\nventures.beeline.ru\r\nvenus.avito.ru\r\nver.avito.ru\r\nver2.avito.ru\r\nvera.avito.ru\r\nverba.yandex.ru\r\nverdaccio.rnd.tinkoff.ru\r\nverdi.avito.ru\r\nvereshchagin.lenta.ru\r\nverify.apple.avito.ru\r\nverify.avito.ru\r\nveritas.avito.ru\r\nvermeer.avito.ru\r\nverona.avito.ru\r\nveronica.avito.ru\r\nversal.2013.yandex.ru\r\nverse.rshb.ru\r\nversion1.avito.ru\r\nverstka-dev.yandex.ru\r\nverstka-dev640.yandex.ru\r\nverstka-qa01e.yandex.ru\r\nverstka-qa01f.yandex.ru\r\nverstka-qa01h.yandex.ru\r\nverstka-qa02e.yandex.ru\r\nverstka-qa02f.yandex.ru\r\nverstka-qa02h.yandex.ru\r\nverstka-qa03e.yandex.ru\r\nverstka-qa03f.yandex.ru\r\nverstka-qa03h.yandex.ru\r\nverstka-qa04e.yandex.ru\r\nverstka-qa04f.yandex.ru\r\nverstka-qa04h.yandex.ru\r\nverstka9-qa.yandex.ru\r\nvertex.avito.ru\r\nvertinskij.tass.ru\r\nverwaltung.avito.ru\r\nveselov.tass.ru\r\nvesna.yandex.ru\r\nvesta.avito.ru\r\nvesta.mail.ru\r\nvesteros.yandex.ru\r\nvesti.lenta.ru\r\nvestibular.avito.ru\r\nvestnik.avito.ru\r\nvestnik.rostelecom.ru\r\nvet-nat.tomsk.gov.ru\r\nvet.alania.gov.ru\r\nvet.avito.ru\r\nvetas.77.yandex.ru\r\nveterani.1tv.ru\r\nveterinaria.avito.ru\r\nvezu.youdo.com\r\nvf.avito.ru\r\nvfiled10.mail.ru\r\nvfiled11.mail.ru\r\nvfiled12.mail.ru\r\nvfiled13.mail.ru\r\nvfiled15.mail.ru\r\nvfiled16.mail.ru\r\nvfiled17.mail.ru\r\nvfiled19.mail.ru\r\nvfiled2.mail.ru\r\nvfiled20.mail.ru\r\nvfiled21.mail.ru\r\nvfiled22.mail.ru\r\nvfiled25.mail.ru\r\nvfiled26.mail.ru\r\nvfiled27.mail.ru\r\nvfiled28.mail.ru\r\nvfiled3.mail.ru\r\nvfiled30.mail.ru\r\nvfiled31.mail.ru\r\nvfiled4.mail.ru\r\nvfiled40.mail.ru\r\nvfiled41.mail.ru\r\nvfiled46.mail.ru\r\nvfiled47.mail.ru\r\nvfiled48.mail.ru\r\nvfiled49.mail.ru\r\nvfiled5.mail.ru\r\nvfiled51.mail.ru\r\nvfiled6.mail.ru\r\nvfiled7.mail.ru\r\nvfiled9.mail.ru\r\nvfmt6ewgzyqluh85.life.kuzbass.aif.ru\r\nvg.avito.ru\r\nvgsch.mchs.gov.ru\r\nvgsch.mchs.ru\r\nvgsch.organizations.mchs.gov.ru\r\nvgv.kino-teatr.ru\r\nvh-testing-external.yandex.ru\r\nvh.avito.ru\r\nvh1.avito.ru\r\nvh2.avito.ru\r\nvha.rutube.ru\r\nvhost.avito.ru\r\nvhost2.avito.ru\r\nvhosts.avito.ru\r\nvhq1nocs11.worldbank.org\r\nvhq2nocs11.worldbank.org\r\nvhs.avito.ru\r\nvhtl2bopwi.ts.tele2.ru\r\nvhtl2boqwi.ts.tele2.ru\r\nvi.avito.ru\r\nvia.avito.ru\r\nviajes.avito.ru\r\nvibe.habr.com\r\nvibe.rambler.ru\r\nviber.mvideo.ru\r\nvic.avito.ru\r\nvic.bizconf.rbc.ru\r\nvicky.avito.ru\r\nvictims.rusarchives.ru\r\nvictor.avito.ru\r\nvictoria.avito.ru\r\nvictory.avito.ru\r\nvictory.rusarchives.ru\r\nvid.avito.ru\r\nvidar.avito.ru\r\nvideo-dev.who.int\r\nvideo-k1.meduza.io\r\nvideo-mp4.euronews.com\r\nvideo-partners.euronews.com\r\nvideo-tub-ru.yandex.ru\r\nvideo-uat.who.int\r\nvideo.agro.tambov.gov.ru\r\nvideo.alfabank.ru\r\nvideo.avito.ru\r\nvideo.beeline.ru\r\nvideo.call.open.ru\r\nvideo.consultant.ru\r\nvideo.dev.med.mts.ru\r\nvideo.drom.ru\r\nvideo.duma.gov.ru\r\nvideo.euronews.com\r\nvideo.government.ru\r\nvideo.iarc.who.int\r\nvideo.img.ria.ru\r\nvideo.kinopoisk.ru\r\nvideo.kommersant.ru\r\nvideo.magnit.ru\r\nvideo.mail.ru\r\nvideo.mb.vesti.ru\r\nvideo.mk.ru\r\nvideo.mts.ru\r\nvideo.net.ixbt.com\r\nvideo.rambler.ru\r\nvideo.rbc.ru\r\nvideo.rshb.ru\r\nvideo.sberbank.ru\r\nvideo.ssp.rambler.ru\r\nvideo.tokm.tambov.gov.ru\r\nvideo.vd.yandex.ru\r\nvideo.yandex.ru\r\nvideo.youdo.com\r\nvideo01.priemnaya.duma.gov.ru\r\nvideo1.avito.ru\r\nvideo11.mail.ru\r\nvideo12.mail.ru\r\nvideo13.mail.ru\r\nvideo14.mail.ru\r\nvideo15.mail.ru\r\nvideo16.mail.ru\r\nvideo17.mail.ru\r\nvideo18.mail.ru\r\nvideo19.mail.ru\r\nvideo2.avito.ru\r\nvideo21.mail.ru\r\nvideo22.mail.ru\r\nvideo23.mail.ru\r\nvideo24.mail.ru\r\nvideo25.mail.ru\r\nvideo26.mail.ru\r\nvideo27.mail.ru\r\nvideo28.mail.ru\r\nvideo29.mail.ru\r\nvideo3.avito.ru\r\nvideo3.mail.ru\r\nvideo30.mail.ru\r\nvideo31.mail.ru\r\nvideo32.mail.ru\r\nvideo33.mail.ru\r\nvideo34.mail.ru\r\nvideo35.mail.ru\r\nvideo36.mail.ru\r\nvideo37.mail.ru\r\nvideo38.mail.ru\r\nvideo4.avito.ru\r\nvideo4.mail.ru\r\nvideo40.mail.ru\r\nvideo41.mail.ru\r\nvideo42.mail.ru\r\nvideo43.mail.ru\r\nvideo44.mail.ru\r\nvideo45.mail.ru\r\nvideo46.mail.ru\r\nvideo47.mail.ru\r\nvideo5.mail.ru\r\nvideo55.mail.ru\r\nvideo6.mail.ru\r\nvideo7.mail.ru\r\nvideo78.mail.ru\r\nvideo79.mail.ru\r\nvideo8.mail.ru\r\nvideo80.mail.ru\r\nvideo81.mail.ru\r\nvideo82.mail.ru\r\nvideo83.mail.ru\r\nvideo84.mail.ru\r\nvideobal1.mail.ru\r\nvideobal2.mail.ru\r\nvideobin1.mail.ru\r\nvideobin2.mail.ru\r\nvideobin3.mail.ru\r\nvideobin4.mail.ru\r\nvideobox.avito.ru\r\nvideobuild.mail.ru\r\nvideocdn.avito.ru\r\nvideocdn10.i.mail.ru\r\nvideocdn11.i.mail.ru\r\nvideocdn12.i.mail.ru\r\nvideocdn13.i.mail.ru\r\nvideocdn14.i.mail.ru\r\nvideocdn15.i.mail.ru\r\nvideocdn20.i.mail.ru\r\nvideocdn21.i.mail.ru\r\nvideocdn22.i.mail.ru\r\nvideocdn23.i.mail.ru\r\nvideocdn24.i.mail.ru\r\nvideocdn25.i.mail.ru\r\nvideocdn30.i.mail.ru\r\nvideocdn31.i.mail.ru\r\nvideocdn32.i.mail.ru\r\nvideocdn33.i.mail.ru\r\nvideocdn4.i.mail.ru\r\nvideocdn40.i.mail.ru\r\nvideocdn41.i.mail.ru\r\nvideocdn42.i.mail.ru\r\nvideocdn43.i.mail.ru\r\nvideocdn44.i.mail.ru\r\nvideocdn45.i.mail.ru\r\nvideocdn50.i.mail.ru\r\nvideocdn51.i.mail.ru\r\nvideocenter.avito.ru\r\nvideochat.avito.ru\r\nvideochat10.mail.ru\r\nvideoconf.avito.ru\r\nvideoconferencia.avito.ru\r\nvideocontrol.t2.ru\r\nvideodev1.i.mail.ru\r\nvideom.img.ria.ru\r\nvideomessage.sberbank.ru\r\nvideomost-new.fas.gov.ru\r\nvideon.img.ria.ru\r\nvideopartner.kinopoisk.ru\r\nvideoproxy.magnit.ru\r\nvideoq.img.ria.ru\r\nvideorss.life.ru\r\nvideos.avito.ru\r\nvideos.iarc.who.int\r\nvideos.staging.euronews.com\r\nvideoserver.avito.ru\r\nvideostream.magnit.ru\r\nvideosup.beeline.ru\r\nvidnoe.babyblog.ru\r\nvidnoe.hh.ru\r\nvidnoe.mts.ru\r\nvids.avito.ru\r\nvidyo.avito.ru\r\nviejo.avito.ru\r\nvienna.avito.ru\r\nvietnam.avito.ru\r\nview.avito.ru\r\nviewer.avito.ru\r\nvik.4ernov.yandex.ru\r\nviking.1tv.ru\r\nviking.avito.ru\r\nviktor.avito.ru\r\nviktorina.afisha.ru\r\nvilla.avito.ru\r\nvillage.avito.ru\r\nvin.avito.ru\r\nvin.drom.ru\r\nvince.avito.ru\r\nvincent.avito.ru\r\nvine.avito.ru\r\nvinfo.russianpost.ru\r\nvino.avito.ru\r\nvinogradov.1996.yandex.ru\r\nvintage.avito.ru\r\nvinteo.x5.ru\r\nvio.avito.ru\r\nviola.avito.ru\r\nviola.mail.ru\r\nviola.social.tomsk.gov.ru\r\nviolet.avito.ru\r\nviolet.mos.ru\r\nviolette.avito.ru\r\nviolin1-00.yandex.ru\r\nviolin2-00.yandex.ru\r\nvip.avito.ru\r\nvip.k8s.common.rbc.ru\r\nvip.lenta.ru\r\nvip.mkb.ru\r\nvip.zg.megafon.ru\r\nvip1.avito.ru\r\nvip2.avito.ru\r\nvip2.mkb.ru\r\nvip3.avito.ru\r\nvip4.avito.ru\r\nvip5.avito.ru\r\nvip7.avito.ru\r\nvip8.avito.ru\r\nviper.avito.ru\r\nvipgame.vtb.ru\r\nvipnet-cont.obraz.tambov.gov.ru\r\nvipnet-fso.tambov.gov.ru\r\nvipnet-mfc.tambov.gov.ru\r\nvipnet.family.tomsk.gov.ru\r\nvipnet.obraz.tambov.gov.ru\r\nvipnet.sc.tambov.gov.ru\r\nvipnet.tambov.gov.ru\r\nvipnet.tomsk.gov.ru\r\nvipnet.uszn.tambov.gov.ru\r\nvipnet2.tambov.gov.ru\r\nvips.icn.gov.ru\r\nvir.avito.ru\r\nvira.12.yandex.ru\r\nvirgil.avito.ru\r\nvirgin.avito.ru\r\nvirginia.avito.ru\r\nvirgo.avito.ru\r\nvirt.avito.ru\r\nvirtsec.beeline.ru\r\nvirtual-assistant.magnit.ru\r\nvirtual.avito.ru\r\nvirtual.beeline.ru\r\nvirtual1.avito.ru\r\nvirtual2.avito.ru\r\nvirtual3-vm1.yandex.ru\r\nvirtual3-vm14.yandex.ru\r\nvirtual3-vm15.yandex.ru\r\nvirtual3-vm16.yandex.ru\r\nvirtual3-vm17.yandex.ru\r\nvirtual3-vm18.yandex.ru\r\nvirtual3-vm19.yandex.ru\r\nvirtual3-vm2.yandex.ru\r\nvirtual3-vm20.yandex.ru\r\nvirtual3-vm3.yandex.ru\r\nvirtual3-vm4.yandex.ru\r\nvirtual3-vm6.yandex.ru\r\nvirtual3-vm8.yandex.ru\r\nvirtual3-vm9.yandex.ru\r\nvirtual3.yandex.ru\r\nvirtual5.yandex.ru\r\nvirtual5a.yandex.ru\r\nvirtual5b.yandex.ru\r\nvirtual5c.yandex.ru\r\nvirtual5d.yandex.ru\r\nvirtual5e.yandex.ru\r\nvirtual5f.yandex.ru\r\nvirtual5g.yandex.ru\r\nvirtual5h.yandex.ru\r\nvirtual5i.yandex.ru\r\nvirtualstore.mts.ru\r\nvirus.avito.ru\r\nvirustest.gov.ru\r\nvis.avito.ru\r\nvisa.avito.ru\r\nvisatokenservice-psi.sberbank.ru\r\nvisatokenservice.sberbank.ru\r\nvishchuk.ing.k8s.dev.ivi.ru\r\nvishnu.avito.ru\r\nvisio.avito.ru\r\nvision-autotest-2.ing.k8s.dev.ivi.ru\r\nvision-autotest.ing.k8s.dev.ivi.ru\r\nvision-smoke.ing.k8s.dev.ivi.ru\r\nvision.avito.ru\r\nvision.ing.k8s.dev.ivi.ru\r\nvision.test.ivi.ru\r\nvisions.avito.ru\r\nvisit.avito.ru\r\nvisitaltai.tass.ru\r\nvisitbritain.vedomosti.ru\r\nvisitorpassapp.worldbank.org\r\nvisitorpassappdev.worldbank.org\r\nvisitorpassappqa.worldbank.org\r\nvisitorpassappstg.worldbank.org\r\nvisitorpassapptestv.worldbank.org\r\nvisits.lemanapro.ru\r\nvisor.sberbank.ru\r\nvista.avito.ru\r\nvisual.avito.ru\r\nvisual.yandex.ru\r\nvisualbasic.avito.ru\r\nvita.avito.ru\r\nvita.t2.ru\r\nvital.avito.ru\r\nvitaly.360travel.yandex.ru\r\nvitim.sakha.gov.ru\r\nvito.avito.ru\r\nvito.sber.ru\r\nvitrin.avito.ru\r\nvitrina-zalog.rshb.ru\r\nvitrina.sber.ru\r\nvitrina.vtb.ru\r\nvitrinadp.sber.ru\r\nvitrinadppsi.sber.ru\r\nvitrine.avito.ru\r\nviva.avito.ru\r\nvivaldi.avito.ru\r\nvive.avito.ru\r\nvivi.avito.ru\r\nvivian.avito.ru\r\nvivo.avito.ru\r\nvixen.avito.ru\r\nvizio.play.max.com\r\nvj15udp0-rlp.ops.beeline.ru\r\nvk-play.megafon.ru\r\nvk-x1.mon.gov.ru\r\nvk-x2.mon.gov.ru\r\nvk.avito.ru\r\nvk.go.mail.ru\r\nvk.tinkoff.ru\r\nvkadmin.vk.com\r\nvkapp.litres.ru\r\nvkcloud.rosbank.ru\r\nvkhripach.ing.k8s.dev.ivi.ru\r\nvkhripach.test.ivi.ru\r\nvkino.mts.ru\r\nvkjira.mail.ru\r\nvkladstabilny.interfax.ru\r\nvkladvyuan.interfax.ru\r\nvklimentev.ing.k8s.dev.ivi.ru\r\nvkmail.rosbank.ru\r\nvkmail.roskazna.gov.ru\r\nvkontakte.avito.ru\r\nvkredit.tinkoff.ru\r\nvks-test-internal.mkb.ru\r\nvks-test.mkb.ru\r\nvks.businessconf.sber.ru\r\nvks.duma.gov.ru\r\nvks.factoring.rshb.ru\r\nvks.family.tomsk.gov.ru\r\nvks.kostroma.gov.ru\r\nvks.megafon.ru\r\nvks.rshb.ru\r\nvks.tambov.gov.ru\r\nvks1.mon.gov.ru\r\nvks7.mon.gov.ru\r\nvks72.mon.gov.ru\r\nvks8.mon.gov.ru\r\nvksaepk.rosatom.ru\r\nvksport.m.vkvideo.cs7777.vk.com\r\nvksport.vkvideo.cs7777.vk.com\r\nvkt.rosbank.ru\r\nvktadm.tomsk.gov.ru\r\nvkteams.interfax.ru\r\nvkteams.rosbank.ru\r\nvkube.vk.com\r\nvkugay.ing.k8s.dev.ivi.ru\r\nvkusnoitochka.youdo.com\r\nvkusvill.youdo.com\r\nvkutskaylis.ing.k8s.dev.ivi.ru\r\nvkvideo.cs7777.vk.com\r\nvkvideo.tau.vk.com\r\nvkvideo.vprok.ru\r\nvl.avito.ru\r\nvl.dev.home.megafon.ru\r\nvl.shop.megafon.ru\r\nvlad.2567.yandex.ru\r\nvlad.avito.ru\r\nvlad.mk.ru\r\nvladik01.regionproxy.yandex.ru\r\nvladik02.regionproxy.yandex.ru\r\nvladikavkaz.lemanapro.ru\r\nvladimir.avito.ru\r\nvladimir.beeline.ru\r\nvladimir.dev.kp.ru\r\nvladimir.dns-shop.ru\r\nvladimir.hh.ru\r\nvladimir.kp.ru\r\nvladimir.lemanapro.ru\r\nvladimir.mk.ru\r\nvladimir.mts.ru\r\nvladimir.tele2.ru\r\nvladimir.turov.2015.yandex.ru\r\nvladivostok.alfabank.ru\r\nvladivostok.avito.ru\r\nvladivostok.babyblog.ru\r\nvladivostok.beeline.ru\r\nvladivostok.club.dns-shop.ru\r\nvladivostok.dns-shop.ru\r\nvladivostok.drom.ru\r\nvladivostok.hh.ru\r\nvladivostok.home.megafon.ru\r\nvladivostok.lemanapro.ru\r\nvladivostok.tele2.ru\r\nvladivostok.test.home.megafon.ru\r\nvlan827.qcarp21.rambler.ru\r\nvlan850.offcarp1.rambler.ru\r\nvlaskin.fuck.hard.yandex.ru\r\nvlast.kommersant.ru\r\nvlc.avito.ru\r\nvld.cloud.mts.ru\r\nvld.disk.mts.ru\r\nvle.avito.ru\r\nvle.worldbank.org\r\nvlg-anyconnect.megafon.ru\r\nvlg-seg.megafon.ru\r\nvlg-smart.megafon.ru\r\nvlg-tac.megafon.ru\r\nvlg-vcse.megafon.ru\r\nvlg-vpn.megafon.ru\r\nvlg-wix.megafon.ru\r\nvlg.aif.ru\r\nvlg.avito.ru\r\nvlg.beeline.ru\r\nvlg.home.megafon.ru\r\nvlk.sovcombank.ru\r\nvlslavyanka.home.megafon.ru\r\nvm.avito.ru\r\nvm0.avito.ru\r\nvm01.avito.ru\r\nvm02.avito.ru\r\nvm03.avito.ru\r\nvm1.avito.ru\r\nvm1.culture.ru\r\nvm1.loza.mail.ru\r\nvm11.avito.ru\r\nvm114514.yandex.ru\r\nvm2.avito.ru\r\nvm3.avito.ru\r\nvm4.avito.ru\r\nvm5.avito.ru\r\nvm6.avito.ru\r\nvma.avito.ru\r\nvmail.avito.ru\r\nvmailin01mx.avito.ru\r\nvmailin02mx.avito.ru\r\nvmc.avito.ru\r\nvmeste-hotels.wildberries.ru\r\nvmeste-tours.wildberries.ru\r\nvmeste.alfabank.ru\r\nvmeste.iz.ru\r\nvmeste.sber.ru\r\nvmeste.vtb.ru\r\nvmeste.yandex.ru\r\nvmf-rf.tass.ru\r\nvml-01.roseltorg.ru\r\nvml-02.roseltorg.ru\r\nvmrc.cloud.mts.ru\r\nvmrc.nsk.cloud.mts.ru\r\nvmrc.spb.cloud.mts.ru\r\nvmrc.vld.cloud.mts.ru\r\nvmrc152.msk.cloud.mts.ru\r\nvms.avito.ru\r\nvmscanus.avito.ru\r\nvmtest.avito.ru\r\nvmware.avito.ru\r\nvmware2.avito.ru\r\nvmx1.saratov.gov.ru\r\nvmx2.saratov.gov.ru\r\nvmx3.saratov.gov.ru\r\nvn.avito.ru\r\nvn.beeline.ru\r\nvn.kino-teatr.ru\r\nvn.m24.ru\r\nvn.megafon.ru\r\nvn.mts.ru\r\nvnc.avito.ru\r\nvnc.tambov.gov.ru\r\nvneshtorg.rbc.ru\r\nvno.yandex.ru\r\nvnov.dev.kp.ru\r\nvnov.kp.ru\r\nvns.avito.ru\r\nvns1.avito.ru\r\nvo.avito.ru\r\nvo.imuschestvo.roseltorg.ru\r\nvo.vtb.ru\r\nvo1.vtb.ru\r\nvo2.vtb.ru\r\nvoc.cgu.mchs.ru\r\nvocabulary.worldbank.org\r\nvod-origin.amer.prd.media.max.com\r\nvod-origin.oceania.dev.media.max.com\r\nvod.avito.ru\r\nvod1.avito.ru\r\nvod2.avito.ru\r\nvod3.avito.ru\r\nvod4.avito.ru\r\nvoda.gov.ru\r\nvodafone.avito.ru\r\nvodafonestb.sagemcom.play.max.com\r\nvodafoneua-api.ivi.ru\r\nvodafoneua-dfs.ivi.ru\r\nvodafoneua-l.ivi.ru\r\nvodka.avito.ru\r\nvoeq56qqurpbdmo-mdt.ops.beeline.ru\r\nvoex1-msges.vtb.ru\r\nvoex2-msges.vtb.ru\r\nvohn5uyhkqn95n6-mdt.ops.beeline.ru\r\nvoice.avito.ru\r\nvoice.beeline.ru\r\nvoice.tinkoff.ru\r\nvoicecamp.beeline.ru\r\nvoicemail.avito.ru\r\nvoices.2gis.ru\r\nvoicetracker.mts.ru\r\nvoid.avito.ru\r\nvoin.beeline.ru\r\nvoina.mail.ru\r\nvoinka.drom.ru\r\nvoinov.74.yandex.ru\r\nvoip.avito.ru\r\nvoip.cea.gov.ru\r\nvoip.perekrestok.ru\r\nvoip.vprok.ru\r\nvoip1.avito.ru\r\nvoip2.avito.ru\r\nvoipa010.avito.ru\r\nvoipa010.vk.com\r\nvoipa011.avito.ru\r\nvoipa012.avito.ru\r\nvoipa013.avito.ru\r\nvoipa014.avito.ru\r\nvoipa015.avito.ru\r\nvoipa016.avito.ru\r\nvoipa017.avito.ru\r\nvoipa018.avito.ru\r\nvoipa019.avito.ru\r\nvoipa01a.avito.ru\r\nvoipa01b.avito.ru\r\nvoipa01c.avito.ru\r\nvoipa01d.avito.ru\r\nvoipa01e.avito.ru\r\nvoipa01f.avito.ru\r\nvoipa020.avito.ru\r\nvoipa020.vk.com\r\nvoipa021.avito.ru\r\nvoipa022.avito.ru\r\nvoipa023.avito.ru\r\nvoipa024.avito.ru\r\nvoipa025.avito.ru\r\nvoipa026.avito.ru\r\nvoipa027.avito.ru\r\nvoipa028.avito.ru\r\nvoipa029.avito.ru\r\nvoipa02a.avito.ru\r\nvoipa02b.avito.ru\r\nvoipa02c.avito.ru\r\nvoipa02d.avito.ru\r\nvoipa02e.avito.ru\r\nvoipa02f.avito.ru\r\nvoipa030.avito.ru\r\nvoipa030.vk.com\r\nvoipa031.avito.ru\r\nvoipa032.avito.ru\r\nvoipa033.avito.ru\r\nvoipa034.avito.ru\r\nvoipa035.avito.ru\r\nvoipa036.avito.ru\r\nvoipa037.avito.ru\r\nvoipa038.avito.ru\r\nvoipa039.avito.ru\r\nvoipa03a.avito.ru\r\nvoipa03b.avito.ru\r\nvoipa03c.avito.ru\r\nvoipa03d.avito.ru\r\nvoipa03e.avito.ru\r\nvoipa03f.avito.ru\r\nvoipa040.avito.ru\r\nvoipa040.vk.com\r\nvoipa041.avito.ru\r\nvoipa042.avito.ru\r\nvoipa043.avito.ru\r\nvoipa044.avito.ru\r\nvoipa045.avito.ru\r\nvoipa046.avito.ru\r\nvoipa047.avito.ru\r\nvoipa048.avito.ru\r\nvoipa049.avito.ru\r\nvoipa04a.avito.ru\r\nvoipa04b.avito.ru\r\nvoipa04c.avito.ru\r\nvoipa04d.avito.ru\r\nvoipa04e.avito.ru\r\nvoipa04f.avito.ru\r\nvoipa050.avito.ru\r\nvoipa051.avito.ru\r\nvoipa052.avito.ru\r\nvoipa053.avito.ru\r\nvoipa054.avito.ru\r\nvoipa055.avito.ru\r\nvoipa056.avito.ru\r\nvoipa057.avito.ru\r\nvoipa058.avito.ru\r\nvoipa059.avito.ru\r\nvoipa05a.avito.ru\r\nvoipa05b.avito.ru\r\nvoipa05c.avito.ru\r\nvoipa05d.avito.ru\r\nvoipa05e.avito.ru\r\nvoipa05f.avito.ru\r\nvoipa060.avito.ru\r\nvoipa061.avito.ru\r\nvoipa062.avito.ru\r\nvoipa063.avito.ru\r\nvoipa064.avito.ru\r\nvoipa065.avito.ru\r\nvoipa066.avito.ru\r\nvoipa067.avito.ru\r\nvoipa068.avito.ru\r\nvoipa069.avito.ru\r\nvoipa06a.avito.ru\r\nvoipa06b.avito.ru\r\nvoipa06c.avito.ru\r\nvoipa06d.avito.ru\r\nvoipa06e.avito.ru\r\nvoipa06f.avito.ru\r\nvoipa070.avito.ru\r\nvoipa071.avito.ru\r\nvoipa072.avito.ru\r\nvoipa073.avito.ru\r\nvoipa074.avito.ru\r\nvoipa075.avito.ru\r\nvoipa076.avito.ru\r\nvoipa077.avito.ru\r\nvoipa078.avito.ru\r\nvoipa079.avito.ru\r\nvoipa07a.avito.ru\r\nvoipa07b.avito.ru\r\nvoipa07c.avito.ru\r\nvoipa07d.avito.ru\r\nvoipa07e.avito.ru\r\nvoipa07f.avito.ru\r\nvoiplog.mail.ru\r\nvol.avito.ru\r\nvol.beeline.ru\r\nvolans.avito.ru\r\nvolf-11.220.yandex.ru\r\nvolg.mk.ru\r\nvolga.avito.ru\r\nvolga.b2blk.megafon.ru\r\nvolga.kp.ru\r\nvolga.openbank.ru\r\nvolga.tg.t2.ru\r\nvolga.travel.t2.ru\r\nvolgateplosnab.megafon.ru\r\nvolgodonsk.home.megafon.ru\r\nvolgograd.afisha.ru\r\nvolgograd.alfabank.ru\r\nvolgograd.avito.ru\r\nvolgograd.beeline.ru\r\nvolgograd.club.dns-shop.ru\r\nvolgograd.dev.home.megafon.ru\r\nvolgograd.dev.kp.ru\r\nvolgograd.drom.ru\r\nvolgograd.fas.gov.ru\r\nvolgograd.hh.ru\r\nvolgograd.kommersant.ru\r\nvolgograd.kp.ru\r\nvolgograd.lemanapro.ru\r\nvolgograd.mts.ru\r\nvolgograd.shop.megafon.ru\r\nvolgograd.tele2.ru\r\nvolgograd.views.tele2.ru\r\nvolgogradskaya-obl.beeline.ru\r\nvolgorechensk.gov.ru\r\nvolgskisc.organizations.mchs.gov.ru\r\nvolleyball.avito.ru\r\nvolna.afisha.ru\r\nvolnamobilelisten.litres.ru\r\nvologda-r19.gosweb.gosuslugi.ru\r\nvologda.avito.ru\r\nvologda.dev.home.megafon.ru\r\nvologda.dev.kp.ru\r\nvologda.dns-shop.ru\r\nvologda.kp.ru\r\nvologda.lemanapro.ru\r\nvologda.mk.ru\r\nvologda.mts.ru\r\nvologda.shop.megafon.ru\r\nvologda.tele2.ru\r\nvologdazso.gov.ru\r\nvolta.avito.ru\r\nvoltage-pp-0000.avito.ru\r\nvoltage-pp-0000.mkb.ru\r\nvoltage-pp-0000.open.ru\r\nvoltage-pp-0000.openbank.ru\r\nvoltage-pp-0000.vk.com\r\nvoltage-ps-0000.avito.ru\r\nvoltage-ps-0000.vk.com\r\nvoltage.mkb.ru\r\nvoltage.openbank.ru\r\nvolterra.avito.ru\r\nvolunteer.avito.ru\r\nvolunteers.iz.ru\r\nvolvo.avito.ru\r\nvolzhskiy.drom.ru\r\nvolzhskiy.hh.ru\r\nvolzhskiy.lemanapro.ru\r\nvolzhsky.beeline.ru\r\nvoodoo.avito.ru\r\nvoodoodigital.users.avito.ru\r\nvopros.yandex.ru\r\nvopros2009.beeline.ru\r\nvoronezh.aif.ru\r\nvoronezh.avito.ru\r\nvoronezh.babyblog.ru\r\nvoronezh.dns-shop.ru\r\nvoronezh.drom.ru\r\nvoronezh.fas.gov.ru\r\nvoronezh.hh.ru\r\nvoronezh.lemanapro.ru\r\nvoronezh.mts.ru\r\nvoronezh.tele2.ru\r\nvoronezh.tutu.ru\r\nvoronezh.views.t2.ru\r\nvorota.58.yandex.ru\r\nvortex.avito.ru\r\nvortex.drom.ru\r\nvoskresensk.dns-shop.ru\r\nvost-degunino.mos.ru\r\nvostok.drom.ru\r\nvote-trust-tst1.open.ru\r\nvote-trust.open.ru\r\nvote.avito.ru\r\nvote.duma.gov.ru\r\nvote.fas.gov.ru\r\nvote.megafon.ru\r\nvote.open.ru\r\nvote.stage.championat.com\r\nvotedr.open.ru\r\nvoter.gosuslugi.ru\r\nvoter.gslb.gosuslugi.ru\r\nvoting.avito.ru\r\nvotingstandart.minzdrav.gov.ru\r\nvotingstd.minzdrav.gov.ru\r\nvotpusk.megafon.ru\r\nvovis.86.yandex.ru\r\nvoxel.gosuslugi.ru\r\nvoxel.gslb.gosuslugi.ru\r\nvoxys.youdo.com\r\nvoyage.avito.ru\r\nvoyager.avito.ru\r\nvoyah.drom.ru\r\nvoyeur.avito.ru\r\nvoz52ihrad3xhrh-mdt.ops.beeline.ru\r\nvozduh.afisha.ru\r\nvoznesensk-nk.hh.ru\r\nvp.avito.ru\r\nvp.psbank.ru\r\nvp.rambler.ru\r\nvp7d.worldbank.org\r\nvp7p.worldbank.org\r\nvp7q.worldbank.org\r\nvp7s.worldbank.org\r\nvp7t.worldbank.org\r\nvpbx.avito.ru\r\nvpbx.mts.ru\r\nvpdn.tomsk.gov.ru\r\nvpetukhov.ing.k8s.dev.ivi.ru\r\nvpetukhova.ing.k8s.dev.ivi.ru\r\nvpgk.avito.ru\r\nvpn-auth.sber.ru\r\nvpn-msk.dns-shop.ru\r\nvpn-phd.sovcombank.ru\r\nvpn-ra.msk.mts.ru\r\nvpn-ra.mts.ru\r\nvpn-ra2.mts.ru\r\nvpn-test.avito.ru\r\nvpn-uk.avito.ru\r\nvpn.2gis.ru\r\nvpn.afisha.ru\r\nvpn.avito.ru\r\nvpn.dv.mts.ru\r\nvpn.fas.gov.ru\r\nvpn.fso.tambov.gov.ru\r\nvpn.gov.ru\r\nvpn.hh.ru\r\nvpn.lemanapro.ru\r\nvpn.magnitogorsk.2gis.ru\r\nvpn.megafon.ru\r\nvpn.minprom.gov.ru\r\nvpn.mon.gov.ru\r\nvpn.mrdv.mts.ru\r\nvpn.paas.cloud.mts.ru\r\nvpn.rosbank.ru\r\nvpn.russianpost.ru\r\nvpn.spb.cloud.mts.ru\r\nvpn.tambov.gov.ru\r\nvpn.tele2.ru\r\nvpn.zoon.ru\r\nvpn01.avito.ru\r\nvpn01.sovcombank.ru\r\nvpn02.avito.ru\r\nvpn02.sovcombank.ru\r\nvpn1.afisha.ru\r\nvpn1.avito.ru\r\nvpn1.tele2.ru\r\nvpn2.avito.ru\r\nvpn2.tass.ru\r\nvpn2.tele2.ru\r\nvpn3-3.consultant.ru\r\nvpn3.avito.ru\r\nvpn3.tele2.ru\r\nvpn4.avito.ru\r\nvpn4.tele2.ru\r\nvpn5.avito.ru\r\nvpnaccess.beeline.ru\r\nvpnaccess.economy.gov.ru\r\nvpnc.avito.ru\r\nvpnc.mts.ru\r\nvpnc.sib.mts.ru\r\nvpnc.ural.mts.ru\r\nvpngate-1.beeline.ru\r\nvpngate-2.beeline.ru\r\nvpngw.avito.ru\r\nvpnivc.rtn.gov.ru\r\nvpnrtn.rtn.gov.ru\r\nvpns.kuban.mts.ru\r\nvpns.mts.ru\r\nvpns.nnov.mts.ru\r\nvpns.spb.mts.ru\r\nvpnsla.mts.ru\r\nvpnssl.avito.ru\r\nvpnt.beeline.ru\r\nvpntest.tass.ru\r\nvpp-test.mkb.ru\r\nvpp.mkb.ru\r\nvpproxy.avito.ru\r\nvprok.youdo.com\r\nvps.avito.ru\r\nvps.online.sberbank.ru\r\nvps1.avito.ru\r\nvps102.avito.ru\r\nvps103.avito.ru\r\nvps104.avito.ru\r\nvps106.avito.ru\r\nvps107.avito.ru\r\nvps108.avito.ru\r\nvps11.avito.ru\r\nvps115.avito.ru\r\nvps2.avito.ru\r\nvps3.avito.ru\r\nvps4.avito.ru\r\nvps5.avito.ru\r\nvps6.avito.ru\r\nvps7.avito.ru\r\nvps8.avito.ru\r\nvps9.avito.ru\r\nvpstest.online.sberbank.ru\r\nvpstest2.online.sberbank.ru\r\nvpstun.avito.ru\r\nvpusp.worldbank.org\r\nvpuspdev.worldbank.org\r\nvpuspprd.worldbank.org\r\nvpuspqa.worldbank.org\r\nvpuspstg.worldbank.org\r\nvpuspwin.worldbank.org\r\nvpuspwindev.worldbank.org\r\nvpuspwinqa.worldbank.org\r\nvpuspwinstg.worldbank.org\r\nvpuspwintst.worldbank.org\r\nvpxauth.tele2.ru\r\nvpyslar.ing.k8s.dev.ivi.ru\r\nvr.avito.ru\r\nvr.mts.ru\r\nvr.tele2.ru\r\nvr3008.afisha.ru\r\nvremena-goda.tass.ru\r\nvremenavstanciayh.life.ru\r\nvremya.yandex.ru\r\nvrhome.vtb.ru\r\nvrn-pro.kommersant.ru\r\nvrn.avito.ru\r\nvrn.beeline.ru\r\nvrn.dev.kp.ru\r\nvrn.dns-shop.ru\r\nvrn.home.megafon.ru\r\nvrn.kommersant.ru\r\nvrn.kp.ru\r\nvrn.megafon.ru\r\nvrn.mk.ru\r\nvrn.shop.megafon.ru\r\nvrp1ci30.worldbank.org\r\nvrp2ci30.worldbank.org\r\nvrpark.tele2.ru\r\nvrq1ci60.worldbank.org\r\nvrq2ci60.worldbank.org\r\nvrrpandromeda.mail.ru\r\nvrrpcassiopea.mail.ru\r\nvrrptelemeter1.mail.ru\r\nvrrptelemeter2.mail.ru\r\nvrylov-1.ing.k8s.dev.ivi.ru\r\nvrylov.ing.k8s.dev.ivi.ru\r\nvs-cauth01hm.yandex.ru\r\nvs-conductor01e.yandex.ru\r\nvs-conductor01f.yandex.ru\r\nvs-conductor01ft.yandex.ru\r\nvs-conductor01h.yandex.ru\r\nvs-conductor02e.yandex.ru\r\nvs-conductor02f.yandex.ru\r\nvs-conductor02h.yandex.ru\r\nvs-conductor03e.yandex.ru\r\nvs-conductor03f.yandex.ru\r\nvs-conductor03h.yandex.ru\r\nvs-conductor04e.yandex.ru\r\nvs-conductor04f.yandex.ru\r\nvs-conductor04h.yandex.ru\r\nvs-conductordb01e.yandex.ru\r\nvs-conductordb01f.yandex.ru\r\nvs-conductordb01ft.yandex.ru\r\nvs-conductordb01h.yandex.ru\r\nvs-conductordb01sft.yandex.ru\r\nvs-conductordb02h.yandex.ru\r\nvs-dbbackup01h.yandex.ru\r\nvs-ghfront01e.yandex.ru\r\nvs-ghfront01f.yandex.ru\r\nvs-ghfront01h.yandex.ru\r\nvs-ghfront01ht.yandex.ru\r\nvs-hotback01e.yandex.ru\r\nvs-hotback02e.yandex.ru\r\nvs-hotback02f.yandex.ru\r\nvs-hotback03e.yandex.ru\r\nvs-hotback04e.yandex.ru\r\nvs-hotdb01e.yandex.ru\r\nvs-hotdb02e.yandex.ru\r\nvs-hotfront01e.yandex.ru\r\nvs-hotfront01f.yandex.ru\r\nvs-hotfront02e.yandex.ru\r\nvs-logstorage01f.yandex.ru\r\nvs-logstorage01h.yandex.ru\r\nvs-logstorage01ht.yandex.ru\r\nvs-logstorage02f.yandex.ru\r\nvs-logstorage02h.yandex.ru\r\nvs-logstorage02ht.yandex.ru\r\nvs-logstorage03ht.yandex.ru\r\nvs-mysqlbackup01h.yandex.ru\r\nvs-mysqltools01e.yandex.ru\r\nvs-mysqltools01f.yandex.ru\r\nvs-mysqltools01h.yandex.ru\r\nvs-mysqltools01hp.yandex.ru\r\nvs-mysqltools01ht.yandex.ru\r\nvs-mysqltools02ht.yandex.ru\r\nvs-otrsback01hp.yandex.ru\r\nvs-otrsback01ht.yandex.ru\r\nvs-otrsbackup01h.yandex.ru\r\nvs-stback01e.yandex.ru\r\nvs-stback01f.yandex.ru\r\nvs-stback01h.yandex.ru\r\nvs-stmongo01f.yandex.ru\r\nvs-stmongo01h.yandex.ru\r\nvs-stsearch01e.yandex.ru\r\nvs-stsearch01f.yandex.ru\r\nvs-stsearch01h.yandex.ru\r\nvs-stsearch02e.yandex.ru\r\nvs-stsearch02f.yandex.ru\r\nvs-stsearch02h.yandex.ru\r\nvs-stsearch03e.yandex.ru\r\nvs-stsearch03f.yandex.ru\r\nvs-stsearch03h.yandex.ru\r\nvs-teamcity01f.yandex.ru\r\nvs-toolsgen01f.yandex.ru\r\nvs-toolsgen01h.yandex.ru\r\nvs-toolsgen01hp.yandex.ru\r\nvs-toolsgen01ht.yandex.ru\r\nvs-toolsgen02e.yandex.ru\r\nvs-toolsgen02ht.yandex.ru\r\nvs.avito.ru\r\nvs1.avito.ru\r\nvs2.avito.ru\r\nvs3.avito.ru\r\nvs4.avito.ru\r\nvsa.avito.ru\r\nvscan.avito.ru\r\nvsearch1-00.yandex.ru\r\nvsearch2-00.yandex.ru\r\nvsearch30-00.yandex.ru\r\nvsearch33-00.yandex.ru\r\nvsemayki.sports.ru\r\nvsemmirom.1tv.ru\r\nvsemv3ds.tinkoff.ru\r\nvserver.avito.ru\r\nvserver1.mail.ru\r\nvserver2.mail.ru\r\nvsevolozhsk.drom.ru\r\nvshim.sakha.gov.ru\r\nvsmrci00.worldbank.org\r\nvsoh-1.gosuslugi.ru\r\nvsp.avito.ru\r\nvspace.avito.ru\r\nvss.avito.ru\r\nvstagingnew.avito.ru\r\nvstreltsov.ing.k8s.dev.ivi.ru\r\nvstudio.tinkoff.ru\r\nvsvetlov.ing.k8s.dev.ivi.ru\r\nvszd.rzd.ru\r\nvt.161.yandex.ru\r\nvt.avito.ru\r\nvt.zdorovie-shkolnika.spb.aif.ru\r\nvtb.avito.ru\r\nvtb2021.tass.ru\r\nvtbinvest.kommersant.ru\r\nvtbl.disk.mts.ru\r\nvtbteam-ctst.vtb.ru\r\nvtbteam-ets.vtb.ru\r\nvtc.avito.ru\r\nvtc.dom.test.gosuslugi.ru\r\nvtest.avito.ru\r\nvtiger.avito.ru\r\nvtiunov.ing.k8s.dev.ivi.ru\r\nvtls.avito.ru\r\nvtour.avito.ru\r\nvtp.data.avito.ru\r\nvts-cms-test.tinkoff.ru\r\nvts-cms.tinkoff.ru\r\nvts-test.alfabank.ru\r\nvts.alfabank.ru\r\nvts.avito.ru\r\nvts1.rshb.ru\r\nvts2.rshb.ru\r\nvtsapi.open.ru\r\nvtsapitest.open.ru\r\nvtsjsa.rosbank.ru\r\nvtsjsp.rosbank.ru\r\nvtsjss.rosbank.ru\r\nvtsprodat.rosbank.ru\r\nvtsprodpr.rosbank.ru\r\nvtstest.rosbank.ru\r\nvtub1-00.yandex.ru\r\nvtub3-00.yandex.ru\r\nvtv.who.int\r\nvu.avito.ru\r\nvu32uaslsjme0sm-mdt.ops.beeline.ru\r\nvuat.who.int\r\nvudjof.tiu.ru\r\nvulcan.avito.ru\r\nvulcano.avito.ru\r\nvuvmnovmxppojkh-mdt.ops.beeline.ru\r\nvux0pm261nz080z-mdt.ops.beeline.ru\r\nvv.avito.ru\r\nvvedernikov.9111.ru\r\nvvg-msk.mts.ru\r\nvvm-msk.mts.ru\r\nvvm.megafon.ru\r\nvvv.avito.ru\r\nvvv.kino-teatr.ru\r\nvw-test.mkb.ru\r\nvw.avito.ru\r\nvweb02.saratov.gov.ru\r\nvx.worldbank.org\r\nvyacheslav.dev.mk.ru\r\nvyatskiepolyany-r43.gosweb.gosuslugi.ru\r\nvybbem.mk.ru\r\nvybor-professii.tass.ru\r\nvybory.lenta.ru\r\nvypiska.sberbank.ru\r\nvysotsky.tass.ru\r\nvz.avito.ru\r\nvz1.avito.ru\r\nvz101.termit2.mail.ru\r\nvz102.termit2.mail.ru\r\nvz103.termit2.mail.ru\r\nvz104.termit2.mail.ru\r\nvz105.termit2.mail.ru\r\nvz106.termit2.mail.ru\r\nvz2.avito.ru\r\nvzhukov.ing.k8s.dev.ivi.ru\r\nw.afisha.ru\r\nw.avito.ru\r\nw.dev1.kassa.rambler.ru\r\nw.kino-teatr.ru\r\nw.rambler.ru\r\nw.tinkoff.ru\r\nw.wolf.0.yandex.ru\r\nw0.avito.ru\r\nw02xpchefgem01.worldbank.org\r\nw02xpchefrun01.worldbank.org\r\nw02xpchefrun03.worldbank.org\r\nw03xpchefgem01.worldbank.org\r\nw03xpchefrun01.worldbank.org\r\nw0lxamqd01.worldbank.org\r\nw0lxamqp1a.worldbank.org\r\nw0lxamqp1b.worldbank.org\r\nw0lxamqp2a.worldbank.org\r\nw0lxamqp2b.worldbank.org\r\nw0lxamqqa1a.worldbank.org\r\nw0lxamqqa1b.worldbank.org\r\nw0lxamqt01.worldbank.org\r\nw0lxdapial01.worldbank.org\r\nw0lxdapidp01.worldbank.org\r\nw0lxdapigw01.worldbank.org\r\nw0lxdapigw02.worldbank.org\r\nw0lxdapimc01.worldbank.org\r\nw0lxecdn01.worldbank.org\r\nw0lxpchefau01.worldbank.org\r\nw0lxpchefma01.worldbank.org\r\nw0lxpchefrun01.worldbank.org\r\nw0lxpchefsu01.worldbank.org\r\nw0lxsub002.worldbank.org\r\nw0lxsubdev01.worldbank.org\r\nw0lxsvg001.worldbank.org\r\nw0lxsvg002.worldbank.org\r\nw1.avito.ru\r\nw1.mail.ru\r\nw10.avito.ru\r\nw10.vk.com\r\nw11.avito.ru\r\nw18e0ww.kino-teatr.ru\r\nw1a79ww.kino-teatr.ru\r\nw1es1111.worldbank.org\r\nw1es1141.worldbank.org\r\nw1es1271.worldbank.org\r\nw1es788.worldbank.org\r\nw1es789.worldbank.org\r\nw1es790.worldbank.org\r\nw1es791.worldbank.org\r\nw1es792.worldbank.org\r\nw1es793.worldbank.org\r\nw1msprdadfs01.worldbank.org\r\nw1stifcpure01.worldbank.org\r\nw1stpure01.worldbank.org\r\nw1stpure02.worldbank.org\r\nw1stpure03.worldbank.org\r\nw1stpure04.worldbank.org\r\nw2.avito.ru\r\nw2es1141.worldbank.org\r\nw2es1271.worldbank.org\r\nw2es789.worldbank.org\r\nw2es790.worldbank.org\r\nw2es791.worldbank.org\r\nw2es792.worldbank.org\r\nw2es793.worldbank.org\r\nw2ln0041.worldbank.org\r\nw2stifcpure01.worldbank.org\r\nw2stpure01.worldbank.org\r\nw2stpure02.worldbank.org\r\nw2stpure03.worldbank.org\r\nw2stpure04.worldbank.org\r\nw3.avito.ru\r\nw3es2904.worldbank.org\r\nw3sg3s.atlas.mchs.ru\r\nw4.avito.ru\r\nw5.avito.ru\r\nw6.avito.ru\r\nw7.avito.ru\r\nw8.avito.ru\r\nw9.avito.ru\r\nwa-tst.psb.ru\r\nwa.avito.ru\r\nwa.interfax.ru\r\nwa.kino-teatr.ru\r\nwa.psb.ru\r\nwa.sakha.gov.ru\r\nwa.tinkoff.ru\r\nwa1.avito.ru\r\nwaaagh-autotests.ing.k8s.dev.ivi.ru\r\nwac-ext.msk.vtb.ru\r\nwac-ext01.msk.vtb.ru\r\nwac-ext02.msk.vtb.ru\r\nwac.alfabank.ru\r\nwac.cea.gov.ru\r\nwac.mts.ru\r\nwac.open.ru\r\nwac.rutube.ru\r\nwac.sakha.gov.ru\r\nwaf.cloud.mts.ru\r\nwaffle.avito.ru\r\nwagner.avito.ru\r\nwahlen.avito.ru\r\nwais.sberbank.ru\r\nwakeup.avito.ru\r\nwalk.avito.ru\r\nwalker.avito.ru\r\nwalking.avito.ru\r\nwalks.yandex.ru\r\nwall-e.open.ru\r\nwall.avito.ru\r\nwallace.avito.ru\r\nwallet.tinkoff.ru\r\nwallpaper.avito.ru\r\nwallpapers.avito.ru\r\nwalnut.avito.ru\r\nwalrus.avito.ru\r\nwalrus.tass.ru\r\nwalrus333.yandex.ru\r\nwalrus338.yandex.ru\r\nwalrus343.yandex.ru\r\nwalrus379.yandex.ru\r\nwalrusday.life.ru\r\nwalter.avito.ru\r\nwalxdipmq01.worldbank.org\r\nwalxmlopsdrpd1a.worldbank.org\r\nwalxmlopsdrpd1b.worldbank.org\r\nwalxmlopsdrpd1c.worldbank.org\r\nwam.avito.ru\r\nwan.avito.ru\r\nwanda.avito.ru\r\nwander.avito.ru\r\nwanderer.avito.ru\r\nwap-boltest.beeline.ru\r\nwap.1tv.ru\r\nwap.avito.ru\r\nwap.b2b.beeline.ru\r\nwap.bk.beeline.ru\r\nwap.gazeta.ru\r\nwap.gismeteo.ru\r\nwap.gudok.tele2.ru\r\nwap.money.yandex.ru\r\nwap.mts.ru0885mtsbeelinewap.beeline.ru\r\nwap.ok.ru\r\nwap.oplata.beeline.ru\r\nwap.pogoda.yandex.ru\r\nwap.sports.ru\r\nwap.tele2.ru\r\nwap1.avito.ru\r\nwap2.avito.ru\r\nwapi-gateway.autotest.kassa.rambler.ru\r\nwapi-gateway.demo.kassa.rambler.ru\r\nwapi-gateway.dev1.kassa.rambler.ru\r\nwapi-gateway.dev10.kassa.rambler.ru\r\nwapi-gateway.dev11.kassa.rambler.ru\r\nwapi-gateway.dev12.kassa.rambler.ru\r\nwapi-gateway.dev13.kassa.rambler.ru\r\nwapi-gateway.dev2.kassa.rambler.ru\r\nwapi-gateway.dev3.kassa.rambler.ru\r\nwapi-gateway.dev4.kassa.rambler.ru\r\nwapi-gateway.dev5.kassa.rambler.ru\r\nwapi-gateway.dev6.kassa.rambler.ru\r\nwapi-gateway.dev7.kassa.rambler.ru\r\nwapi-gateway.dev8.kassa.rambler.ru\r\nwapi-gateway.dev9.kassa.rambler.ru\r\nwapi.dev1.kassa.rambler.ru\r\nwaptest.avito.ru\r\nwar.avito.ru\r\nwarcraft.avito.ru\r\nward.avito.ru\r\nwarehouse.avito.ru\r\nwarez.avito.ru\r\nwargames.avito.ru\r\nwarheaven.mail.ru\r\nwarlords.mail.ru\r\nwarm.avito.ru\r\nwarmberry.yandex.ru\r\nwarning.avito.ru\r\nwarp.avito.ru\r\nwarranty.avito.ru\r\nwarren.avito.ru\r\nwarrior.avito.ru\r\nwarriors.avito.ru\r\nwarszawa.avito.ru\r\nwartune.mail.ru\r\nwartung.avito.ru\r\nwas.avito.ru\r\nwash.avito.ru\r\nwashington.avito.ru\r\nwassup.avito.ru\r\nwaste.iz.ru\r\nwastenet.worldbank.org\r\nwat.avito.ru\r\nwatch.avito.ru\r\nwatch.yandex.ru\r\nwatchdog.avito.ru\r\nwatcher.avito.ru\r\nwatches.avito.ru\r\nwater.avito.ru\r\nwater.drom.ru\r\nwater.worldbank.org\r\nwatson.avito.ru\r\nwatson1-00.yandex.ru\r\nwatson2-00.yandex.ru\r\nwatson3-00.yandex.ru\r\nwatt.avito.ru\r\nwave.avito.ru\r\nwave.lenta.ru\r\nwawa.avito.ru\r\nway.avito.ru\r\nwb.avito.ru\r\nwb1.i.mail.ru\r\nwb1.mail.ru\r\nwb2.i.mail.ru\r\nwb2.mail.ru\r\nwb3.i.mail.ru\r\nwb3.mail.ru\r\nwb4.i.mail.ru\r\nwb4.mail.ru\r\nwb5.i.mail.ru\r\nwbapiron01.worldbank.org\r\nwbapiron02.worldbank.org\r\nwbapiron101.worldbank.org\r\nwbapiron13.worldbank.org\r\nwbapiron13a.worldbank.org\r\nwbapiron14.worldbank.org\r\nwbapiron14a.worldbank.org\r\nwbapiron202.worldbank.org\r\nwbappse.worldbank.org\r\nwbappsedev.worldbank.org\r\nwbappseqa.worldbank.org\r\nwbappsproxy101.worldbank.org\r\nwbappsproxy201.worldbank.org\r\nwbappsproxyqa.worldbank.org\r\nwbappsproxyqa101.worldbank.org\r\nwbappsproxyqa201.worldbank.org\r\nwbarc1.worldbank.org\r\nwbarchqa.worldbank.org\r\nwbasc.duma.gov.ru\r\nwbase-new.duma.gov.ru\r\nwbase.duma.gov.ru\r\nwbasexproxy101.worldbank.org\r\nwbasexproxy201.worldbank.org\r\nwbasexproxyqa101.worldbank.org\r\nwbasproxy1.worldbank.org\r\nwbasproxy10.worldbank.org\r\nwbasproxy11.worldbank.org\r\nwbasproxy12.worldbank.org\r\nwbasproxy14.worldbank.org\r\nwbasproxy2.worldbank.org\r\nwbasproxy4.worldbank.org\r\nwbasproxy5.worldbank.org\r\nwbasproxy6.worldbank.org\r\nwbasproxy7.worldbank.org\r\nwbasproxy8.worldbank.org\r\nwbasproxy9.worldbank.org\r\nwbasproxyqa.worldbank.org\r\nwbasproxyqa101.worldbank.org\r\nwbasproxyqalb.worldbank.org\r\nwbasproxytest.worldbank.org\r\nwbasproxytest1.worldbank.org\r\nwbasproxytest2.worldbank.org\r\nwbcars.worldbank.org\r\nwbcarsdev.worldbank.org\r\nwbcarsntlm.worldbank.org\r\nwbcarsntlmqa.worldbank.org\r\nwbcarsqa.worldbank.org\r\nwbcarssvc.worldbank.org\r\nwbcarssvc.worldbank.orgwbappse.worldbank.org\r\nwbcarssvcqa.worldbank.org\r\nwbcba.worldbank.org\r\nwbcbadev.worldbank.org\r\nwbcbaqa.worldbank.org\r\nwbclimatescreeningtools.worldbank.org\r\nwbdocs2.worldbank.org\r\nwbdocs2dev.worldbank.org\r\nwbdocs2qa.worldbank.org\r\nwbdocs2stg.worldbank.org\r\nwbdocsacs.worldbank.org\r\nwbdocsacs2.worldbank.org\r\nwbdocsdevacs.worldbank.org\r\nwbdocsdevacs2.worldbank.org\r\nwbdocsqaacs.worldbank.org\r\nwbdocsqaacs2.worldbank.org\r\nwbdocsservices.worldbank.org\r\nwbdocsservices2.worldbank.org\r\nwbdocsservicesdev.worldbank.org\r\nwbdocsservicesdev2.worldbank.org\r\nwbdocsservicesqa.worldbank.org\r\nwbdocsservicesqa2.worldbank.org\r\nwbdocsservicesstg.worldbank.org\r\nwbdocsservicesstg2.worldbank.org\r\nwbdocsservicestst.worldbank.org\r\nwbdocsservicestst2.worldbank.org\r\nwbes027.worldbank.org\r\nwbes1335.worldbank.org\r\nwbes1627.worldbank.org\r\nwbes1819.worldbank.org\r\nwbes2100.worldbank.org\r\nwbes2244.worldbank.org\r\nwbes2255.worldbank.org\r\nwbes2353.worldbank.org\r\nwbes2486.worldbank.org\r\nwbes2494.worldbank.org\r\nwbes2669.worldbank.org\r\nwbes3307.worldbank.org\r\nwbes3842.worldbank.org\r\nwbes3854.worldbank.org\r\nwbes3861.worldbank.org\r\nwbes3868.worldbank.org\r\nwbes4001.worldbank.org\r\nwbes4279.worldbank.org\r\nwbes4381.worldbank.org\r\nwbes4389.worldbank.org\r\nwbes4970.worldbank.org\r\nwbes4979.worldbank.org\r\nwbes5001.worldbank.org\r\nwbes5002.worldbank.org\r\nwbes5034.worldbank.org\r\nwbes5106.worldbank.org\r\nwbes5150.worldbank.org\r\nwbes5391.worldbank.org\r\nwbes5893.worldbank.org\r\nwbes5945.worldbank.org\r\nwbes6001.worldbank.org\r\nwbes6002.worldbank.org\r\nwbes864.worldbank.org\r\nwbes865.worldbank.org\r\nwbes881.worldbank.org\r\nwbes882.worldbank.org\r\nwbes883.worldbank.org\r\nwbes884.worldbank.org\r\nwbes885.worldbank.org\r\nwbes886.worldbank.org\r\nwbes887.worldbank.org\r\nwbes888.worldbank.org\r\nwbes922r.worldbank.org\r\nwbes9914.worldbank.org\r\nwbes9915.worldbank.org\r\nwbes9917.worldbank.org\r\nwbes9918.worldbank.org\r\nwbessbd1.worldbank.org\r\nwbessbp1.worldbank.org\r\nwbessbp2.worldbank.org\r\nwbessbp3.worldbank.org\r\nwbessbp4.worldbank.org\r\nwbessbs1.worldbank.org\r\nwbessbs2.worldbank.org\r\nwbessbt1.worldbank.org\r\nwbessbt2.worldbank.org\r\nwbessbt3.worldbank.org\r\nwbezproxy.worldbank.org\r\nwbezproxydev.worldbank.org\r\nwbezproxyqa.worldbank.org\r\nwbezproxystg.worldbank.org\r\nwbezproxyuat.worldbank.org\r\nwbf.rbc.ru\r\nwbfed.worldbank.org\r\nwbfedservice.worldbank.org\r\nwbfedservicedev.worldbank.org\r\nwbfedserviceqa.worldbank.org\r\nwbfprsdev.worldbank.org\r\nwbfs.worldbank.org\r\nwbfsc.worldbank.org\r\nwbfscdev.worldbank.org\r\nwbfscqa.worldbank.org\r\nwbfsdev.worldbank.org\r\nwbfsecqa.worldbank.org\r\nwbfsifccba.worldbank.org\r\nwbfsifccbadev.worldbank.org\r\nwbfsifccbastg.worldbank.org\r\nwbfsot.worldbank.org\r\nwbfsotdev.worldbank.org\r\nwbfsotqa.worldbank.org\r\nwbfsotuat.worldbank.org\r\nwbfsqa.worldbank.org\r\nwbfstfe.worldbank.org\r\nwbfstst.worldbank.org\r\nwbgadfs.worldbank.org\r\nwbgadfsd.worldbank.org\r\nwbgadfss.worldbank.org\r\nwbgadfst.worldbank.org\r\nwbgamq.worldbank.org\r\nwbgamqcdev.worldbank.org\r\nwbgamqdev.worldbank.org\r\nwbgamqprod.worldbank.org\r\nwbgamqqa.worldbank.org\r\nwbgamqstg.worldbank.org\r\nwbgamqtest.worldbank.org\r\nwbgapigateway.worldbank.org\r\nwbgapigwdev.worldbank.org\r\nwbgapimcdev.worldbank.org\r\nwbgapiportaldev.worldbank.org\r\nwbgauthextcl.worldbank.org\r\nwbgauthextcldev.worldbank.org\r\nwbgauthextclqa.worldbank.org\r\nwbgauthextclstg.worldbank.org\r\nwbgauthextdev.worldbank.org\r\nwbgb2botp.worldbank.org\r\nwbgb2botpdev.worldbank.org\r\nwbgb2botpqa.worldbank.org\r\nwbgbip.worldbank.org\r\nwbgbpm.worldbank.org\r\nwbgbpmdev.worldbank.org\r\nwbgbpmdev2.worldbank.org\r\nwbgbpmstg.worldbank.org\r\nwbgbpmtest.worldbank.org\r\nwbgbpmtrn.worldbank.org\r\nwbgcrm.worldbank.org\r\nwbgcrm2.worldbank.org\r\nwbgcrm2dev.worldbank.org\r\nwbgcrm2qa.worldbank.org\r\nwbgcrm2stg.worldbank.org\r\nwbgcrm2trn.worldbank.org\r\nwbgcrm2tst.worldbank.org\r\nwbgcrmfqa.worldbank.org\r\nwbgdata.worldbank.org\r\nwbgdatadev.worldbank.org\r\nwbgdataqa.worldbank.org\r\nwbgdatastg.worldbank.org\r\nwbgeconsult.worldbank.org\r\nwbgeconsult2.worldbank.org\r\nwbgecrm.worldbank.org\r\nwbgentlm.worldbank.org\r\nwbgetenderingext.worldbank.org\r\nwbgfedservices.worldbank.org\r\nwbgfedservicesdev.worldbank.org\r\nwbgfedservicesqa.worldbank.org\r\nwbgfellowship.worldbank.org\r\nwbgfiles.worldbank.org\r\nwbgfilesint.worldbank.org\r\nwbgfilesqa.worldbank.org\r\nwbght.worldbank.org\r\nwbghtauth.worldbank.org\r\nwbghtauthc.worldbank.org\r\nwbghtauthcd.worldbank.org\r\nwbghtauthcq.worldbank.org\r\nwbghtauthd.worldbank.org\r\nwbghtauthq.worldbank.org\r\nwbghtdev.worldbank.org\r\nwbghtidp.worldbank.org\r\nwbghtidpd.worldbank.org\r\nwbghtidpqa.worldbank.org\r\nwbghtidpstg.worldbank.org\r\nwbghtqa.worldbank.org\r\nwbghtsmd.worldbank.org\r\nwbgidp.worldbank.org\r\nwbglt.worldbank.org\r\nwbgltauth.worldbank.org\r\nwbgltauthc.worldbank.org\r\nwbgltauthcd.worldbank.org\r\nwbgltauthcq.worldbank.org\r\nwbgltauthd.worldbank.org\r\nwbgltauthq.worldbank.org\r\nwbgltdev.worldbank.org\r\nwbgltidp.worldbank.org\r\nwbgltidpd.worldbank.org\r\nwbgltidpqa.worldbank.org\r\nwbgltidpstg.worldbank.org\r\nwbgltqa.worldbank.org\r\nwbgltsmd.worldbank.org\r\nwbgmdm.worldbank.org\r\nwbgmdmapi.worldbank.org\r\nwbgmdmapidev.worldbank.org\r\nwbgmdmapiqa.worldbank.org\r\nwbgmdmapistg.worldbank.org\r\nwbgmdmqa.worldbank.org\r\nwbgmdmqa101.worldbank.org\r\nwbgmdmqalb.worldbank.org\r\nwbgmdmtest.worldbank.org\r\nwbgmobileex.worldbank.org\r\nwbgmobilemail1.worldbank.org\r\nwbgmobilemail2.worldbank.org\r\nwbgmobilemail3.worldbank.org\r\nwbgmsarci001.worldbank.org\r\nwbgmscmpc004.tre.ad.worldbank.org\r\nwbgmscmpc004.worldbank.org\r\nwbgmscmpd002.worldbank.org\r\nwbgmsdsc001.worldbank.org\r\nwbgmsemss001.worldbank.org\r\nwbgmsgserp01.worldbank.org\r\nwbgmsjira001.worldbank.org\r\nwbgmsjira002.worldbank.org\r\nwbgmsjira003.worldbank.org\r\nwbgmsoist001.worldbank.org\r\nwbgmsoist002.worldbank.org\r\nwbgmsrsamq01.worldbank.org\r\nwbgmsspdev08.worldbank.org\r\nwbgmsspdev09.worldbank.org\r\nwbgmssssi001.worldbank.org\r\nwbgmstrpd001.wb.ad.worldbank.org\r\nwbgmstrpd002.worldbank.org\r\nwbgmstvnq001.worldbank.org\r\nwbgmt.worldbank.org\r\nwbgmtauth.worldbank.org\r\nwbgmtauthc.worldbank.org\r\nwbgmtauthcd.worldbank.org\r\nwbgmtauthcq.worldbank.org\r\nwbgmtauthd.worldbank.org\r\nwbgmtauthq.worldbank.org\r\nwbgmtdev.worldbank.org\r\nwbgmtidp.worldbank.org\r\nwbgmtidpd.worldbank.org\r\nwbgmtidpqa.worldbank.org\r\nwbgmtidpstg.worldbank.org\r\nwbgmtqa.worldbank.org\r\nwbgmtsmd.worldbank.org\r\nwbgo365proxy101.worldbank.org\r\nwbgo365proxy102.worldbank.org\r\nwbgo365proxy103.worldbank.org\r\nwbgo365proxy104.worldbank.org\r\nwbgo365proxy105.worldbank.org\r\nwbgo365proxy106.worldbank.org\r\nwbgo365proxy201.worldbank.org\r\nwbgo365proxy202.worldbank.org\r\nwbgo365proxy203.worldbank.org\r\nwbgo365proxy204.worldbank.org\r\nwbgo365proxy205.worldbank.org\r\nwbgo365proxy206.worldbank.org\r\nwbgo365proxy301.worldbank.org\r\nwbgotp.worldbank.org\r\nwbgotpu.worldbank.org\r\nwbgotpud.worldbank.org\r\nwbgotpuq.worldbank.org\r\nwbgraf.worldbank.org\r\nwbgraf2.worldbank.org\r\nwbgraf2qa.worldbank.org\r\nwbgrafqa.worldbank.org\r\nwbgras.worldbank.org\r\nwbgras2.worldbank.org\r\nwbgras2qa.worldbank.org\r\nwbgrasqa.worldbank.org\r\nwbgsaasht.worldbank.org\r\nwbgsaashtd.worldbank.org\r\nwbgsaashtq.worldbank.org\r\nwbgsaaslmtq.worldbank.org\r\nwbgsaaslt.worldbank.org\r\nwbgsaasltd.worldbank.org\r\nwbgsaasltq.worldbank.org\r\nwbgsaasmt.worldbank.org\r\nwbgsaasmtd.worldbank.org\r\nwbgsaasmtq.worldbank.org\r\nwbgsdata.worldbank.org\r\nwbgsdatadev.worldbank.org\r\nwbgsdataqa.worldbank.org\r\nwbgsdatastg.worldbank.org\r\nwbgservice.worldbank.org\r\nwbgservicedev.worldbank.org\r\nwbgserviceqa.worldbank.org\r\nwbgservicestg.worldbank.org\r\nwbgservicetst.worldbank.org\r\nwbgspauthd1.worldbank.org\r\nwbgspauthd2.worldbank.org\r\nwbgspauthextd1.worldbank.org\r\nwbgspauthextd2.worldbank.org\r\nwbgspauthextp1.worldbank.org\r\nwbgspauthextp2.worldbank.org\r\nwbgspauthextq1.worldbank.org\r\nwbgspauthextq2.worldbank.org\r\nwbgspauthp1.worldbank.org\r\nwbgspauthp2.worldbank.org\r\nwbgspauthq1.worldbank.org\r\nwbgspauthq2.worldbank.org\r\nwbgsservice.worldbank.org\r\nwbgsservicedev.worldbank.org\r\nwbgsserviceqa.worldbank.org\r\nwbgsservicestg.worldbank.org\r\nwbgsurvey.worldbank.org\r\nwbgtf.worldbank.org\r\nwbgtfdev.worldbank.org\r\nwbgtfqa.worldbank.org\r\nwbgvds.worldbank.org\r\nwbgvdsqa.worldbank.org\r\nwbgvendorkiosk.worldbank.org\r\nwbgvendorkioskd.worldbank.org\r\nwbgvendorkioskint.worldbank.org\r\nwbgvendorkioskintq.worldbank.org\r\nwbgvendorkioskintt.worldbank.org\r\nwbgvendorkioskq.worldbank.org\r\nwbgypp.worldbank.org\r\nwbi.worldbank.org\r\nwbidmservice.worldbank.org\r\nwbidmservicedev.worldbank.org\r\nwbidmserviceqa.worldbank.org\r\nwbidmservicestg.worldbank.org\r\nwbim.worldbank.org\r\nwbintapp.worldbank.org\r\nwbintappqa.worldbank.org\r\nwbmobileauthqa.worldbank.org\r\nwbmsadrms101.wb.ad.worldbank.org\r\nwbmsaee101.worldbank.org\r\nwbmscrm101.wb.ad.worldbank.org\r\nwbmsex101.worldbank.org\r\nwbmsex102.worldbank.org\r\nwbmsex103.worldbank.org\r\nwbmsex104.worldbank.org\r\nwbmsex201.worldbank.org\r\nwbmsex202.worldbank.org\r\nwbmsex203.worldbank.org\r\nwbmsex204.worldbank.org\r\nwbmsmp001.zd.worldbank.org\r\nwbmsmp101.zd.worldbank.org\r\nwbmsmpwb1.zd.worldbank.org\r\nwbmsmpwb2.zd.worldbank.org\r\nwbmsowqa11.worldbank.org\r\nwbmsowqa12.worldbank.org\r\nwbmsrsam01.worldbank.org\r\nwbmsrsamd01.worldbank.org\r\nwbmsrsamp.worldbank.org\r\nwbmsrsamp01.worldbank.org\r\nwbmsrsamp02.worldbank.org\r\nwbmssccm001.wb.ad.worldbank.org\r\nwbmssms03a.wb.ad.worldbank.org\r\nwbmssqlds201.wb.ad.worldbank.org\r\nwbmssqlds201.worldbank.org\r\nwbmsssmon101.worldbank.org\r\nwbmsst003.worldbank.org\r\nwbmssup001.zd.worldbank.org\r\nwbmstrvlqa01.zd.worldbank.org\r\nwbmsudstst101.worldbank.org\r\nwbolcqa.worldbank.org\r\nwbopsbpm.worldbank.org\r\nwbopsbpmdev.worldbank.org\r\nwbopsbpmstg.worldbank.org\r\nwbopsbpmtest.worldbank.org\r\nwbopsbpmtrn.worldbank.org\r\nwbpay-analytic.wildberries.ru\r\nwbpega.worldbank.org\r\nwbpegadev.worldbank.org\r\nwbpegapoc.worldbank.org\r\nwbpegaqa.worldbank.org\r\nwbpegastg.worldbank.org\r\nwbpegatest.worldbank.org\r\nwbpegatrn.worldbank.org\r\nwbproxytest202.worldbank.org\r\nwbrest.worldbank.org\r\nwbrestdev.worldbank.org\r\nwbrestqa.worldbank.org\r\nwbreststg.worldbank.org\r\nwbresttst.worldbank.org\r\nwbrms.worldbank.org\r\nwbsecureidqa.worldbank.org\r\nwbsoetdev.worldbank.org\r\nwbsso.worldbank.org\r\nwbssocert.worldbank.org\r\nwbssocertdev.worldbank.org\r\nwbssocertqa.worldbank.org\r\nwbssocertsnd.worldbank.org\r\nwbssodev.worldbank.org\r\nwbssoe.worldbank.org\r\nwbssoedev.worldbank.org\r\nwbssoeqa.worldbank.org\r\nwbssoesnd.worldbank.org\r\nwbssoet.worldbank.org\r\nwbssoetdev.worldbank.org\r\nwbssoetqa.worldbank.org\r\nwbssoetsnd.worldbank.org\r\nwbssoext.worldbank.org\r\nwbssoextapm.worldbank.org\r\nwbssoextapmdev.worldbank.org\r\nwbssoextapmqa.worldbank.org\r\nwbssoextapmstg.worldbank.org\r\nwbssoextapmtst.worldbank.org\r\nwbssoextcl.worldbank.org\r\nwbssoextcldev.worldbank.org\r\nwbssoextclqa.worldbank.org\r\nwbssoextdev.worldbank.org\r\nwbssoexte.worldbank.org\r\nwbssoextedev.worldbank.org\r\nwbssoexteprd.worldbank.org\r\nwbssoexteqa.worldbank.org\r\nwbssoextestg.worldbank.org\r\nwbssoextm.worldbank.org\r\nwbssoextmdev.worldbank.org\r\nwbssoextmqa.worldbank.org\r\nwbssoextqa.worldbank.org\r\nwbssoextstg.worldbank.org\r\nwbssoexttst.worldbank.org\r\nwbssoextv2.worldbank.org\r\nwbssoextv2dev.worldbank.org\r\nwbssoextv2qa.worldbank.org\r\nwbssoqa.worldbank.org\r\nwbssospa.worldbank.org\r\nwbssospaqa.worldbank.org\r\nwbssow.worldbank.org\r\nwbssowdev.worldbank.org\r\nwbssowqa.worldbank.org\r\nwbssowuat.worldbank.org\r\nwbsts.worldbank.org\r\nwbstsd.worldbank.org\r\nwbstsp.worldbank.org\r\nwbstss.worldbank.org\r\nwbstst.worldbank.org\r\nwbsvcnow.worldbank.org\r\nwbsvcnowqa.worldbank.org\r\nwbsvcsso.worldbank.org\r\nwbsvcssodev.worldbank.org\r\nwbsvcssoqa.worldbank.org\r\nwbtestmon.open.ru\r\nwbtranslation.worldbank.org\r\nwbwafp111.worldbank.org\r\nwbwafp112.worldbank.org\r\nwbwafp211.worldbank.org\r\nwbwafp212.worldbank.org\r\nwbwafqa11.worldbank.org\r\nwbwafqa21.worldbank.org\r\nwbwcfe.worldbank.org\r\nwbwcfeqa.worldbank.org\r\nwbwfort.worldbank.org\r\nwbx.mts.ru\r\nwbx.open.ru\r\nwbx.psbank.ru\r\nwbx.tass.ru\r\nwc.alfabank.ru\r\nwc.avito.ru\r\nwc.beeline.ru\r\nwc.ntv.ru\r\nwch.yandex.ru\r\nwcm.avito.ru\r\nwcp.avito.ru\r\nwcs.avito.ru\r\nwct.iarc.who.int\r\nwd.avito.ru\r\nwdgt.yandex.ru\r\nwdnfaforum.kino-teatr.ru\r\nwdronline.worldbank.org\r\nwe.avito.ru\r\nwe.rambler.ru\r\nweather.avito.ru\r\nweather.m.rambler.ru\r\nweather.pda.yandex.ru\r\nweather.rambler.ru\r\nweather.test.euronews.com\r\nweather.yandex.ru\r\nweaver.avito.ru\r\nweb-01.avito.ru\r\nweb-02.avito.ru\r\nweb-canary1.yc.mvideo.ru\r\nweb-collaboration.sberbank.ru\r\nweb-dev.who.int\r\nweb-ext.psbank.ru\r\nweb-gambit.test.ivi.ru\r\nweb-gateway.middle-api.magnit.ru\r\nweb-greenfield1.online.sberbank.ru\r\nweb-hosting.avito.ru\r\nweb-myinvest.vtb.ru\r\nweb-mzrk.rk.gov.ru\r\nweb-n1-psi-pbmob.testonline.sberbank.ru\r\nweb-n2-psi-pbmob.testonline.sberbank.ru\r\nweb-node1.online.sberbank.ru\r\nweb-node2.online.sberbank.ru\r\nweb-node3.online.sberbank.ru\r\nweb-node4.online.sberbank.ru\r\nweb-node5.online.sberbank.ru\r\nweb-node6.online.sberbank.ru\r\nweb-node7.online.sberbank.ru\r\nweb-prod.who.int\r\nweb-prod2.yc.mvideo.ru\r\nweb-qa-b2b.yandex.ru\r\nweb-si1-psi-pbmob.testonline.sberbank.ru\r\nweb-si20.sberbank.ru\r\nweb-staging.2gis.ru\r\nweb-staging.aws.mvideo.ru\r\nweb-staging3.yc.mvideo.ru\r\nweb-standin1.online.sberbank.ru\r\nweb-standin2.online.sberbank.ru\r\nweb-test.alfabank.ru\r\nweb-test.who.int\r\nweb-tst1j.yandex.ru\r\nweb-tst2g.yandex.ru\r\nweb-tutordmz001.open.ru\r\nweb-tutordmz002.open.ru\r\nweb.668000.yandex.ru\r\nweb.abakan.kp.ru\r\nweb.alfabank.ru\r\nweb.alt.kp.ru\r\nweb.amur.kp.ru\r\nweb.arh.kp.ru\r\nweb.astrakhan.kp.ru\r\nweb.avito.ru\r\nweb.balkans.kp.ru\r\nweb.bel.kp.ru\r\nweb.bryansk.kp.ru\r\nweb.canary1.ya.tp.mvideo.ru\r\nweb.canary1.yc.mvideo.ru\r\nweb.chel.kp.ru\r\nweb.chita.kp.ru\r\nweb.chukotka.kp.ru\r\nweb.crimea.kp.ru\r\nweb.cyprus.kp.ru\r\nweb.dag.kp.ru\r\nweb.dev.city.mts.ru\r\nweb.donetsk.kp.ru\r\nweb.drive.megafon.ru\r\nweb.dv.kp.ru\r\nweb.eao.kp.ru\r\nweb.gkh.hab.aif.ru\r\nweb.greenfield2.online.sberbank.ru\r\nweb.hab.kp.ru\r\nweb.il.kp.ru\r\nweb.ing.k8s.dev.ivi.ru\r\nweb.interfax.ru\r\nweb.irk.kp.ru\r\nweb.izh.kp.ru\r\nweb.kaliningrad.kp.ru\r\nweb.kamchatka.kp.ru\r\nweb.kazan.kp.ru\r\nweb.kem.kp.ru\r\nweb.kino-teatr.ru\r\nweb.kirov.kp.ru\r\nweb.komi.kp.ru\r\nweb.kp.ru\r\nweb.krsk.kp.ru\r\nweb.kuban.kp.ru\r\nweb.kursk.kp.ru\r\nweb.lepetsk.kp.ru\r\nweb.lipetsk.kp.ru\r\nweb.magadan.kp.ru\r\nweb.max.ru\r\nweb.msk.kp.ru\r\nweb.murmansk.kp.ru\r\nweb.nft.ya.tp.mvideo.ru\r\nweb.nft3.ya.tp.mvideo.ru\r\nweb.nnov.kp.ru\r\nweb.nsk.kp.ru\r\nweb.omsk.kp.ru\r\nweb.orel.kp.ru\r\nweb.penza.kp.ru\r\nweb.perm.kp.ru\r\nweb.prod.aws.tp.mvideo.ru\r\nweb.prod.ya.mvideo.ru\r\nweb.prod1.ya.mvideo.ru\r\nweb.prod2.ya.mvideo.ru\r\nweb.production-pilot.ya.tp.mvideo.ru\r\nweb.pskov.kp.ru\r\nweb.rostov.kp.ru\r\nweb.rs.premier.one\r\nweb.rs2.premier.one\r\nweb.ryazan.kp.ru\r\nweb.sakha.gov.ru\r\nweb.sakhalin.kp.ru\r\nweb.samara.kp.ru\r\nweb.saratov.kp.ru\r\nweb.smol.kp.ru\r\nweb.spb.kp.ru\r\nweb.stage.aws.tp.mvideo.ru\r\nweb.staging.ya.tp.mvideo.ru\r\nweb.staging10.ya.tp.mvideo.ru\r\nweb.staging13.ya.tp.mvideo.ru\r\nweb.staging2.aws.tp.mvideo.ru\r\nweb.staging21.ya.tp.mvideo.ru\r\nweb.staging3.ya.tp.mvideo.ru\r\nweb.staging4.ya.tp.mvideo.ru\r\nweb.staging5.ya.tp.mvideo.ru\r\nweb.stav.kp.ru\r\nweb.tambov.kp.ru\r\nweb.tomsk.kp.ru\r\nweb.transport.vtb.ru\r\nweb.tula.kp.ru\r\nweb.tumen.kp.ru\r\nweb.tver.kp.ru\r\nweb.ufa.kp.ru\r\nweb.ugra.kp.ru\r\nweb.ul.kp.ru\r\nweb.ulan.kp.ru\r\nweb.ural.kp.ru\r\nweb.uspeh.megafon.ru\r\nweb.vladimir.kp.ru\r\nweb.vnov.kp.ru\r\nweb.volgograd.kp.ru\r\nweb.vologda.kp.ru\r\nweb.vrn.kp.ru\r\nweb.yakutia.kp.ru\r\nweb.yamal.kp.ru\r\nweb.yar.kp.ru\r\nweb0.avito.ru\r\nweb002.avito.ru\r\nweb01.avito.ru\r\nweb02.avito.ru\r\nweb03.avito.ru\r\nweb04.avito.ru\r\nweb05.avito.ru\r\nweb06.avito.ru\r\nweb07.avito.ru\r\nweb08.avito.ru\r\nweb09.avito.ru\r\nweb1.avito.ru\r\nweb1.mk.ru\r\nweb1.online.sberbank.ru\r\nweb10.avito.ru\r\nweb10.vk.com\r\nweb100000.avito.ru\r\nweb100000.vk.com\r\nweb100001.avito.ru\r\nweb100002.avito.ru\r\nweb100004.avito.ru\r\nweb101.avito.ru\r\nweb10356.avito.ru\r\nweb10431.avito.ru\r\nweb10432.avito.ru\r\nweb10433.avito.ru\r\nweb10434.avito.ru\r\nweb10435.avito.ru\r\nweb10436.avito.ru\r\nweb10437.avito.ru\r\nweb10438.avito.ru\r\nweb10439.avito.ru\r\nweb10440.avito.ru\r\nweb10440.vk.com\r\nweb10441.avito.ru\r\nweb10442.avito.ru\r\nweb10443.avito.ru\r\nweb10444.avito.ru\r\nweb10445.avito.ru\r\nweb10446.avito.ru\r\nweb10447.avito.ru\r\nweb10448.avito.ru\r\nweb10449.avito.ru\r\nweb10450.avito.ru\r\nweb10451.avito.ru\r\nweb10611.avito.ru\r\nweb10612.avito.ru\r\nweb10613.avito.ru\r\nweb10614.avito.ru\r\nweb10615.avito.ru\r\nweb10616.avito.ru\r\nweb10617.avito.ru\r\nweb10618.avito.ru\r\nweb10619.avito.ru\r\nweb10620.avito.ru\r\nweb10620.vk.com\r\nweb10621.avito.ru\r\nweb10622.avito.ru\r\nweb10623.avito.ru\r\nweb10624.avito.ru\r\nweb10625.avito.ru\r\nweb10626.avito.ru\r\nweb10627.avito.ru\r\nweb10628.avito.ru\r\nweb10629.avito.ru\r\nweb10630.avito.ru\r\nweb10630.vk.com\r\nweb10631.avito.ru\r\nweb10632.avito.ru\r\nweb10633.avito.ru\r\nweb10634.avito.ru\r\nweb10635.avito.ru\r\nweb10636.avito.ru\r\nweb10637.avito.ru\r\nweb10638.avito.ru\r\nweb10639.avito.ru\r\nweb10640.avito.ru\r\nweb10640.vk.com\r\nweb10641.avito.ru\r\nweb10642.avito.ru\r\nweb10643.avito.ru\r\nweb10644.avito.ru\r\nweb10645.avito.ru\r\nweb10646.avito.ru\r\nweb10647.avito.ru\r\nweb10648.avito.ru\r\nweb10649.avito.ru\r\nweb10650.avito.ru\r\nweb10651.avito.ru\r\nweb10652.avito.ru\r\nweb10653.avito.ru\r\nweb10654.avito.ru\r\nweb10655.avito.ru\r\nweb10656.avito.ru\r\nweb10657.avito.ru\r\nweb10658.avito.ru\r\nweb10659.avito.ru\r\nweb10660.avito.ru\r\nweb10661.avito.ru\r\nweb10662.avito.ru\r\nweb10663.avito.ru\r\nweb10664.avito.ru\r\nweb10665.avito.ru\r\nweb10666.avito.ru\r\nweb10667.avito.ru\r\nweb10668.avito.ru\r\nweb10669.avito.ru\r\nweb10670.avito.ru\r\nweb10671.avito.ru\r\nweb10672.avito.ru\r\nweb10673.avito.ru\r\nweb10674.avito.ru\r\nweb10675.avito.ru\r\nweb10676.avito.ru\r\nweb10677.avito.ru\r\nweb10678.avito.ru\r\nweb10679.avito.ru\r\nweb10680.avito.ru\r\nweb10681.avito.ru\r\nweb10682.avito.ru\r\nweb10683.avito.ru\r\nweb10684.avito.ru\r\nweb10685.avito.ru\r\nweb10686.avito.ru\r\nweb10687.avito.ru\r\nweb10688.avito.ru\r\nweb10689.avito.ru\r\nweb10690.avito.ru\r\nweb10691.avito.ru\r\nweb10692.avito.ru\r\nweb10693.avito.ru\r\nweb10694.avito.ru\r\nweb10695.avito.ru\r\nweb10696.avito.ru\r\nweb10697.avito.ru\r\nweb10698.avito.ru\r\nweb10699.avito.ru\r\nweb10700.avito.ru\r\nweb10700.vk.com\r\nweb10701.avito.ru\r\nweb10702.avito.ru\r\nweb10703.avito.ru\r\nweb10704.avito.ru\r\nweb10705.avito.ru\r\nweb10706.avito.ru\r\nweb10707.avito.ru\r\nweb10708.avito.ru\r\nweb10709.avito.ru\r\nweb10710.avito.ru\r\nweb10710.vk.com\r\nweb10711.avito.ru\r\nweb10712.avito.ru\r\nweb10713.avito.ru\r\nweb10714.avito.ru\r\nweb10715.avito.ru\r\nweb10716.avito.ru\r\nweb10717.avito.ru\r\nweb10718.avito.ru\r\nweb10719.avito.ru\r\nweb10720.avito.ru\r\nweb10720.vk.com\r\nweb10721.avito.ru\r\nweb10722.avito.ru\r\nweb10723.avito.ru\r\nweb10724.avito.ru\r\nweb10725.avito.ru\r\nweb10726.avito.ru\r\nweb10727.avito.ru\r\nweb10728.avito.ru\r\nweb10729.avito.ru\r\nweb10730.avito.ru\r\nweb10730.vk.com\r\nweb10f.yandex.ru\r\nweb10g.yandex.ru\r\nweb11.avito.ru\r\nweb110.avito.ru\r\nweb110.vk.com\r\nweb111.avito.ru\r\nweb11f.yandex.ru\r\nweb11g.yandex.ru\r\nweb11j.yandex.ru\r\nweb11o.yandex.ru\r\nweb12.avito.ru\r\nweb126.avito.ru\r\nweb12f.yandex.ru\r\nweb12g.yandex.ru\r\nweb12o.yandex.ru\r\nweb13.avito.ru\r\nweb13125.avito.ru\r\nweb13126.avito.ru\r\nweb13127.avito.ru\r\nweb13128.avito.ru\r\nweb13129.avito.ru\r\nweb13130.avito.ru\r\nweb13130.vk.com\r\nweb13131.avito.ru\r\nweb13132.avito.ru\r\nweb13133.avito.ru\r\nweb13134.avito.ru\r\nweb13135.avito.ru\r\nweb13136.avito.ru\r\nweb13137.avito.ru\r\nweb13138.avito.ru\r\nweb13139.avito.ru\r\nweb13140.avito.ru\r\nweb13140.vk.com\r\nweb13141.avito.ru\r\nweb13142.avito.ru\r\nweb13143.avito.ru\r\nweb13144.avito.ru\r\nweb13145.avito.ru\r\nweb13146.avito.ru\r\nweb13147.avito.ru\r\nweb13148.avito.ru\r\nweb13149.avito.ru\r\nweb13150.avito.ru\r\nweb13151.avito.ru\r\nweb13152.avito.ru\r\nweb13153.avito.ru\r\nweb13154.avito.ru\r\nweb13155.avito.ru\r\nweb13156.avito.ru\r\nweb13157.avito.ru\r\nweb13158.avito.ru\r\nweb13159.avito.ru\r\nweb13160.avito.ru\r\nweb13161.avito.ru\r\nweb13162.avito.ru\r\nweb13163.avito.ru\r\nweb13164.avito.ru\r\nweb13165.avito.ru\r\nweb13166.avito.ru\r\nweb13167.avito.ru\r\nweb13168.avito.ru\r\nweb13169.avito.ru\r\nweb13170.avito.ru\r\nweb13171.avito.ru\r\nweb13172.avito.ru\r\nweb13173.avito.ru\r\nweb13174.avito.ru\r\nweb13175.avito.ru\r\nweb13176.avito.ru\r\nweb13177.avito.ru\r\nweb13178.avito.ru\r\nweb13179.avito.ru\r\nweb13180.avito.ru\r\nweb13181.avito.ru\r\nweb13182.avito.ru\r\nweb13183.avito.ru\r\nweb13184.avito.ru\r\nweb13185.avito.ru\r\nweb13186.avito.ru\r\nweb13187.avito.ru\r\nweb13188.avito.ru\r\nweb13189.avito.ru\r\nweb13190.avito.ru\r\nweb13191.avito.ru\r\nweb13192.avito.ru\r\nweb13193.avito.ru\r\nweb13194.avito.ru\r\nweb13195.avito.ru\r\nweb13196.avito.ru\r\nweb13197.avito.ru\r\nweb13198.avito.ru\r\nweb13199.avito.ru\r\nweb13200.avito.ru\r\nweb13200.vk.com\r\nweb13201.avito.ru\r\nweb13202.avito.ru\r\nweb13203.avito.ru\r\nweb13204.avito.ru\r\nweb13205.avito.ru\r\nweb13206.avito.ru\r\nweb13207.avito.ru\r\nweb13208.avito.ru\r\nweb13209.avito.ru\r\nweb13210.avito.ru\r\nweb13210.vk.com\r\nweb13211.avito.ru\r\nweb13212.avito.ru\r\nweb13213.avito.ru\r\nweb13214.avito.ru\r\nweb13215.avito.ru\r\nweb13216.avito.ru\r\nweb13217.avito.ru\r\nweb13218.avito.ru\r\nweb13219.avito.ru\r\nweb13220.avito.ru\r\nweb13220.vk.com\r\nweb13221.avito.ru\r\nweb13222.avito.ru\r\nweb13223.avito.ru\r\nweb13224.avito.ru\r\nweb13225.avito.ru\r\nweb13226.avito.ru\r\nweb13227.avito.ru\r\nweb13228.avito.ru\r\nweb13229.avito.ru\r\nweb13230.avito.ru\r\nweb13230.vk.com\r\nweb13231.avito.ru\r\nweb13232.avito.ru\r\nweb13233.avito.ru\r\nweb13234.avito.ru\r\nweb13235.avito.ru\r\nweb13236.avito.ru\r\nweb13237.avito.ru\r\nweb13238.avito.ru\r\nweb13239.avito.ru\r\nweb13240.avito.ru\r\nweb13240.vk.com\r\nweb13241.avito.ru\r\nweb13242.avito.ru\r\nweb13243.avito.ru\r\nweb13244.avito.ru\r\nweb13245.avito.ru\r\nweb13246.avito.ru\r\nweb13247.avito.ru\r\nweb13248.avito.ru\r\nweb13249.avito.ru\r\nweb13250.avito.ru\r\nweb13g.yandex.ru\r\nweb13o.yandex.ru\r\nweb14.avito.ru\r\nweb14f.yandex.ru\r\nweb14g.yandex.ru\r\nweb14j.yandex.ru\r\nweb14o.yandex.ru\r\nweb15.avito.ru\r\nweb151.avito.ru\r\nweb156.avito.ru\r\nweb156.yandex.ru\r\nweb157.yandex.ru\r\nweb15f.yandex.ru\r\nweb15g.yandex.ru\r\nweb15o.yandex.ru\r\nweb16.avito.ru\r\nweb160.yandex.ru\r\nweb16911.avito.ru\r\nweb16912.avito.ru\r\nweb16913.avito.ru\r\nweb16914.avito.ru\r\nweb16915.avito.ru\r\nweb16916.avito.ru\r\nweb16917.avito.ru\r\nweb16918.avito.ru\r\nweb16919.avito.ru\r\nweb16920.avito.ru\r\nweb16920.vk.com\r\nweb16921.avito.ru\r\nweb16922.avito.ru\r\nweb16923.avito.ru\r\nweb16924.avito.ru\r\nweb16925.avito.ru\r\nweb16926.avito.ru\r\nweb16927.avito.ru\r\nweb16928.avito.ru\r\nweb16929.avito.ru\r\nweb16930.avito.ru\r\nweb16930.vk.com\r\nweb16931.avito.ru\r\nweb16932.avito.ru\r\nweb16933.avito.ru\r\nweb16934.avito.ru\r\nweb16935.avito.ru\r\nweb16936.avito.ru\r\nweb16937.avito.ru\r\nweb16938.avito.ru\r\nweb16939.avito.ru\r\nweb16940.avito.ru\r\nweb16940.vk.com\r\nweb16941.avito.ru\r\nweb16942.avito.ru\r\nweb16943.avito.ru\r\nweb16944.avito.ru\r\nweb16945.avito.ru\r\nweb16946.avito.ru\r\nweb16947.avito.ru\r\nweb16948.avito.ru\r\nweb16949.avito.ru\r\nweb16950.avito.ru\r\nweb16951.avito.ru\r\nweb16952.avito.ru\r\nweb16953.avito.ru\r\nweb16954.avito.ru\r\nweb16955.avito.ru\r\nweb16956.avito.ru\r\nweb16957.avito.ru\r\nweb16958.avito.ru\r\nweb16959.avito.ru\r\nweb16960.avito.ru\r\nweb16961.avito.ru\r\nweb16962.avito.ru\r\nweb16963.avito.ru\r\nweb16964.avito.ru\r\nweb16965.avito.ru\r\nweb16966.avito.ru\r\nweb16967.avito.ru\r\nweb16968.avito.ru\r\nweb16969.avito.ru\r\nweb16970.avito.ru\r\nweb16971.avito.ru\r\nweb16972.avito.ru\r\nweb16973.avito.ru\r\nweb16974.avito.ru\r\nweb16975.avito.ru\r\nweb16976.avito.ru\r\nweb16977.avito.ru\r\nweb16978.avito.ru\r\nweb16979.avito.ru\r\nweb16980.avito.ru\r\nweb16981.avito.ru\r\nweb16982.avito.ru\r\nweb16983.avito.ru\r\nweb16984.avito.ru\r\nweb16985.avito.ru\r\nweb16986.avito.ru\r\nweb16987.avito.ru\r\nweb16988.avito.ru\r\nweb16989.avito.ru\r\nweb16990.avito.ru\r\nweb16991.avito.ru\r\nweb16992.avito.ru\r\nweb16993.avito.ru\r\nweb16994.avito.ru\r\nweb16995.avito.ru\r\nweb16996.avito.ru\r\nweb16997.avito.ru\r\nweb16998.avito.ru\r\nweb16999.avito.ru\r\nweb16f.yandex.ru\r\nweb16g.yandex.ru\r\nweb16j.yandex.ru\r\nweb16o.yandex.ru\r\nweb17.avito.ru\r\nweb17000.avito.ru\r\nweb17000.vk.com\r\nweb17001.avito.ru\r\nweb17002.avito.ru\r\nweb17003.avito.ru\r\nweb17004.avito.ru\r\nweb17005.avito.ru\r\nweb17006.avito.ru\r\nweb17007.avito.ru\r\nweb17008.avito.ru\r\nweb17009.avito.ru\r\nweb17010.avito.ru\r\nweb17010.vk.com\r\nweb17011.avito.ru\r\nweb17012.avito.ru\r\nweb17013.avito.ru\r\nweb17014.avito.ru\r\nweb17015.avito.ru\r\nweb17016.avito.ru\r\nweb17017.avito.ru\r\nweb17018.avito.ru\r\nweb17019.avito.ru\r\nweb17020.avito.ru\r\nweb17021.avito.ru\r\nweb17022.avito.ru\r\nweb17023.avito.ru\r\nweb17024.avito.ru\r\nweb17025.avito.ru\r\nweb17026.avito.ru\r\nweb17027.avito.ru\r\nweb17028.avito.ru\r\nweb17029.avito.ru\r\nweb17030.avito.ru\r\nweb17031.avito.ru\r\nweb17032.avito.ru\r\nweb17033.avito.ru\r\nweb17034.avito.ru\r\nweb17035.avito.ru\r\nweb17036.avito.ru\r\nweb17037.avito.ru\r\nweb17038.avito.ru\r\nweb17039.avito.ru\r\nweb17040.avito.ru\r\nweb17040.vk.com\r\nweb17041.avito.ru\r\nweb17042.avito.ru\r\nweb17043.avito.ru\r\nweb17044.avito.ru\r\nweb17045.avito.ru\r\nweb17046.avito.ru\r\nweb17047.avito.ru\r\nweb17048.avito.ru\r\nweb17049.avito.ru\r\nweb17050.avito.ru\r\nweb17051.avito.ru\r\nweb17052.avito.ru\r\nweb17053.avito.ru\r\nweb17054.avito.ru\r\nweb17055.avito.ru\r\nweb17056.avito.ru\r\nweb17057.avito.ru\r\nweb17058.avito.ru\r\nweb17059.avito.ru\r\nweb17060.avito.ru\r\nweb17061.avito.ru\r\nweb17062.avito.ru\r\nweb17063.avito.ru\r\nweb17064.avito.ru\r\nweb17065.avito.ru\r\nweb17066.avito.ru\r\nweb17067.avito.ru\r\nweb17068.avito.ru\r\nweb17069.avito.ru\r\nweb17070.avito.ru\r\nweb17071.avito.ru\r\nweb17072.avito.ru\r\nweb17073.avito.ru\r\nweb17074.avito.ru\r\nweb17075.avito.ru\r\nweb17076.avito.ru\r\nweb17077.avito.ru\r\nweb17078.avito.ru\r\nweb17079.avito.ru\r\nweb17080.avito.ru\r\nweb17081.avito.ru\r\nweb17082.avito.ru\r\nweb17083.avito.ru\r\nweb17084.avito.ru\r\nweb17085.avito.ru\r\nweb17086.avito.ru\r\nweb17087.avito.ru\r\nweb17088.avito.ru\r\nweb17089.avito.ru\r\nweb17090.avito.ru\r\nweb17091.avito.ru\r\nweb17092.avito.ru\r\nweb17093.avito.ru\r\nweb17094.avito.ru\r\nweb17095.avito.ru\r\nweb17096.avito.ru\r\nweb17097.avito.ru\r\nweb17098.avito.ru\r\nweb17099.avito.ru\r\nweb17100.avito.ru\r\nweb17100.vk.com\r\nweb17101.avito.ru\r\nweb17102.avito.ru\r\nweb17103.avito.ru\r\nweb17104.avito.ru\r\nweb17105.avito.ru\r\nweb17106.avito.ru\r\nweb17107.avito.ru\r\nweb17108.avito.ru\r\nweb17109.avito.ru\r\nweb17110.avito.ru\r\nweb17110.vk.com\r\nweb17111.avito.ru\r\nweb17112.avito.ru\r\nweb17113.avito.ru\r\nweb17114.avito.ru\r\nweb17115.avito.ru\r\nweb17116.avito.ru\r\nweb17117.avito.ru\r\nweb17118.avito.ru\r\nweb17119.avito.ru\r\nweb17120.avito.ru\r\nweb17120.vk.com\r\nweb17121.avito.ru\r\nweb17122.avito.ru\r\nweb17123.avito.ru\r\nweb17124.avito.ru\r\nweb17125.avito.ru\r\nweb17126.avito.ru\r\nweb17127.avito.ru\r\nweb17128.avito.ru\r\nweb17129.avito.ru\r\nweb17130.avito.ru\r\nweb17130.vk.com\r\nweb17131.avito.ru\r\nweb17132.avito.ru\r\nweb17133.avito.ru\r\nweb17134.avito.ru\r\nweb17135.avito.ru\r\nweb17136.avito.ru\r\nweb17137.avito.ru\r\nweb17138.avito.ru\r\nweb17139.avito.ru\r\nweb17140.avito.ru\r\nweb17140.vk.com\r\nweb17141.avito.ru\r\nweb17142.avito.ru\r\nweb17143.avito.ru\r\nweb17144.avito.ru\r\nweb17145.avito.ru\r\nweb17146.avito.ru\r\nweb17147.avito.ru\r\nweb17148.avito.ru\r\nweb17149.avito.ru\r\nweb17150.avito.ru\r\nweb17511.avito.ru\r\nweb17512.avito.ru\r\nweb17513.avito.ru\r\nweb17514.avito.ru\r\nweb17515.avito.ru\r\nweb17516.avito.ru\r\nweb17517.avito.ru\r\nweb17518.avito.ru\r\nweb17519.avito.ru\r\nweb17520.avito.ru\r\nweb17520.vk.com\r\nweb17521.avito.ru\r\nweb17522.avito.ru\r\nweb17523.avito.ru\r\nweb17524.avito.ru\r\nweb17525.avito.ru\r\nweb17526.avito.ru\r\nweb17527.avito.ru\r\nweb17528.avito.ru\r\nweb17529.avito.ru\r\nweb17530.avito.ru\r\nweb17530.vk.com\r\nweb17531.avito.ru\r\nweb17532.avito.ru\r\nweb17533.avito.ru\r\nweb17534.avito.ru\r\nweb17535.avito.ru\r\nweb17536.avito.ru\r\nweb17537.avito.ru\r\nweb17538.avito.ru\r\nweb17539.avito.ru\r\nweb17540.avito.ru\r\nweb17540.vk.com\r\nweb17541.avito.ru\r\nweb17542.avito.ru\r\nweb17543.avito.ru\r\nweb17544.avito.ru\r\nweb17545.avito.ru\r\nweb17546.avito.ru\r\nweb17547.avito.ru\r\nweb17548.avito.ru\r\nweb17549.avito.ru\r\nweb17550.avito.ru\r\nweb17551.avito.ru\r\nweb17552.avito.ru\r\nweb17553.avito.ru\r\nweb17554.avito.ru\r\nweb17555.avito.ru\r\nweb17556.avito.ru\r\nweb17557.avito.ru\r\nweb17558.avito.ru\r\nweb17559.avito.ru\r\nweb17560.avito.ru\r\nweb17561.avito.ru\r\nweb17562.avito.ru\r\nweb17563.avito.ru\r\nweb17564.avito.ru\r\nweb17565.avito.ru\r\nweb17566.avito.ru\r\nweb17567.avito.ru\r\nweb17568.avito.ru\r\nweb17569.avito.ru\r\nweb17570.avito.ru\r\nweb17571.avito.ru\r\nweb17572.avito.ru\r\nweb17573.avito.ru\r\nweb17574.avito.ru\r\nweb17575.avito.ru\r\nweb17576.avito.ru\r\nweb17577.avito.ru\r\nweb17578.avito.ru\r\nweb17579.avito.ru\r\nweb17580.avito.ru\r\nweb17581.avito.ru\r\nweb17582.avito.ru\r\nweb17583.avito.ru\r\nweb17584.avito.ru\r\nweb17585.avito.ru\r\nweb17586.avito.ru\r\nweb17587.avito.ru\r\nweb17588.avito.ru\r\nweb17589.avito.ru\r\nweb17590.avito.ru\r\nweb17591.avito.ru\r\nweb17592.avito.ru\r\nweb17593.avito.ru\r\nweb17594.avito.ru\r\nweb17595.avito.ru\r\nweb17596.avito.ru\r\nweb17597.avito.ru\r\nweb17598.avito.ru\r\nweb17599.avito.ru\r\nweb17600.avito.ru\r\nweb17600.vk.com\r\nweb17601.avito.ru\r\nweb17602.avito.ru\r\nweb17603.avito.ru\r\nweb17604.avito.ru\r\nweb17605.avito.ru\r\nweb17606.avito.ru\r\nweb17607.avito.ru\r\nweb17608.avito.ru\r\nweb17609.avito.ru\r\nweb17610.avito.ru\r\nweb17610.vk.com\r\nweb17611.avito.ru\r\nweb17612.avito.ru\r\nweb17613.avito.ru\r\nweb17614.avito.ru\r\nweb17615.avito.ru\r\nweb17616.avito.ru\r\nweb17617.avito.ru\r\nweb17618.avito.ru\r\nweb17619.avito.ru\r\nweb17620.avito.ru\r\nweb17620.vk.com\r\nweb17621.avito.ru\r\nweb17622.avito.ru\r\nweb17623.avito.ru\r\nweb17624.avito.ru\r\nweb17625.avito.ru\r\nweb17626.avito.ru\r\nweb17627.avito.ru\r\nweb17628.avito.ru\r\nweb17629.avito.ru\r\nweb17630.avito.ru\r\nweb17631.avito.ru\r\nweb17632.avito.ru\r\nweb17633.avito.ru\r\nweb17634.avito.ru\r\nweb17635.avito.ru\r\nweb17636.avito.ru\r\nweb17637.avito.ru\r\nweb17638.avito.ru\r\nweb17639.avito.ru\r\nweb17640.avito.ru\r\nweb17640.vk.com\r\nweb17641.avito.ru\r\nweb17642.avito.ru\r\nweb17643.avito.ru\r\nweb17644.avito.ru\r\nweb17645.avito.ru\r\nweb17646.avito.ru\r\nweb17647.avito.ru\r\nweb17648.avito.ru\r\nweb17649.avito.ru\r\nweb17650.avito.ru\r\nweb17651.avito.ru\r\nweb17652.avito.ru\r\nweb17653.avito.ru\r\nweb17654.avito.ru\r\nweb17655.avito.ru\r\nweb17656.avito.ru\r\nweb17657.avito.ru\r\nweb17658.avito.ru\r\nweb17659.avito.ru\r\nweb17660.avito.ru\r\nweb17661.avito.ru\r\nweb17662.avito.ru\r\nweb17663.avito.ru\r\nweb17664.avito.ru\r\nweb17665.avito.ru\r\nweb17666.avito.ru\r\nweb17667.avito.ru\r\nweb17668.avito.ru\r\nweb17669.avito.ru\r\nweb17670.avito.ru\r\nweb17671.avito.ru\r\nweb17672.avito.ru\r\nweb17673.avito.ru\r\nweb17674.avito.ru\r\nweb17675.avito.ru\r\nweb17676.avito.ru\r\nweb17677.avito.ru\r\nweb17678.avito.ru\r\nweb17679.avito.ru\r\nweb17680.avito.ru\r\nweb17681.avito.ru\r\nweb17682.avito.ru\r\nweb17683.avito.ru\r\nweb17684.avito.ru\r\nweb17685.avito.ru\r\nweb17686.avito.ru\r\nweb17687.avito.ru\r\nweb17688.avito.ru\r\nweb17689.avito.ru\r\nweb17690.avito.ru\r\nweb17691.avito.ru\r\nweb17692.avito.ru\r\nweb17693.avito.ru\r\nweb17694.avito.ru\r\nweb17695.avito.ru\r\nweb17696.avito.ru\r\nweb17697.avito.ru\r\nweb17698.avito.ru\r\nweb17699.avito.ru\r\nweb17700.avito.ru\r\nweb17700.vk.com\r\nweb17701.avito.ru\r\nweb17702.avito.ru\r\nweb17703.avito.ru\r\nweb17704.avito.ru\r\nweb17705.avito.ru\r\nweb17706.avito.ru\r\nweb17707.avito.ru\r\nweb17708.avito.ru\r\nweb17709.avito.ru\r\nweb17710.avito.ru\r\nweb17710.vk.com\r\nweb17711.avito.ru\r\nweb17712.avito.ru\r\nweb17713.avito.ru\r\nweb17714.avito.ru\r\nweb17715.avito.ru\r\nweb17716.avito.ru\r\nweb17717.avito.ru\r\nweb17718.avito.ru\r\nweb17719.avito.ru\r\nweb17720.avito.ru\r\nweb17720.vk.com\r\nweb17721.avito.ru\r\nweb17722.avito.ru\r\nweb17723.avito.ru\r\nweb17724.avito.ru\r\nweb17725.avito.ru\r\nweb17726.avito.ru\r\nweb17727.avito.ru\r\nweb17728.avito.ru\r\nweb17729.avito.ru\r\nweb17730.avito.ru\r\nweb17730.vk.com\r\nweb17731.avito.ru\r\nweb17732.avito.ru\r\nweb17733.avito.ru\r\nweb17734.avito.ru\r\nweb17735.avito.ru\r\nweb17736.avito.ru\r\nweb17737.avito.ru\r\nweb17738.avito.ru\r\nweb17739.avito.ru\r\nweb17740.avito.ru\r\nweb17740.vk.com\r\nweb17741.avito.ru\r\nweb17742.avito.ru\r\nweb17743.avito.ru\r\nweb17744.avito.ru\r\nweb17745.avito.ru\r\nweb17746.avito.ru\r\nweb17747.avito.ru\r\nweb17748.avito.ru\r\nweb17749.avito.ru\r\nweb17750.avito.ru\r\nweb17811.avito.ru\r\nweb17812.avito.ru\r\nweb17813.avito.ru\r\nweb17814.avito.ru\r\nweb17815.avito.ru\r\nweb17816.avito.ru\r\nweb17817.avito.ru\r\nweb17818.avito.ru\r\nweb17819.avito.ru\r\nweb17820.avito.ru\r\nweb17820.vk.com\r\nweb17821.avito.ru\r\nweb17822.avito.ru\r\nweb17823.avito.ru\r\nweb17824.avito.ru\r\nweb17825.avito.ru\r\nweb17826.avito.ru\r\nweb17827.avito.ru\r\nweb17828.avito.ru\r\nweb17829.avito.ru\r\nweb17830.avito.ru\r\nweb17830.vk.com\r\nweb17831.avito.ru\r\nweb17832.avito.ru\r\nweb17833.avito.ru\r\nweb17834.avito.ru\r\nweb17835.avito.ru\r\nweb17836.avito.ru\r\nweb17837.avito.ru\r\nweb17838.avito.ru\r\nweb17839.avito.ru\r\nweb17840.avito.ru\r\nweb17840.vk.com\r\nweb17841.avito.ru\r\nweb17842.avito.ru\r\nweb17843.avito.ru\r\nweb17844.avito.ru\r\nweb17845.avito.ru\r\nweb17846.avito.ru\r\nweb17847.avito.ru\r\nweb17848.avito.ru\r\nweb17849.avito.ru\r\nweb17850.avito.ru\r\nweb17851.avito.ru\r\nweb17852.avito.ru\r\nweb17853.avito.ru\r\nweb17854.avito.ru\r\nweb17855.avito.ru\r\nweb17856.avito.ru\r\nweb17857.avito.ru\r\nweb17858.avito.ru\r\nweb17859.avito.ru\r\nweb17860.avito.ru\r\nweb17861.avito.ru\r\nweb17862.avito.ru\r\nweb17863.avito.ru\r\nweb17864.avito.ru\r\nweb17865.avito.ru\r\nweb17866.avito.ru\r\nweb17867.avito.ru\r\nweb17868.avito.ru\r\nweb17869.avito.ru\r\nweb17870.avito.ru\r\nweb17871.avito.ru\r\nweb17872.avito.ru\r\nweb17873.avito.ru\r\nweb17874.avito.ru\r\nweb17875.avito.ru\r\nweb17876.avito.ru\r\nweb17877.avito.ru\r\nweb17878.avito.ru\r\nweb17879.avito.ru\r\nweb17880.avito.ru\r\nweb17881.avito.ru\r\nweb17882.avito.ru\r\nweb17883.avito.ru\r\nweb17884.avito.ru\r\nweb17885.avito.ru\r\nweb17886.avito.ru\r\nweb17887.avito.ru\r\nweb17888.avito.ru\r\nweb17889.avito.ru\r\nweb17890.avito.ru\r\nweb17891.avito.ru\r\nweb17892.avito.ru\r\nweb17893.avito.ru\r\nweb17894.avito.ru\r\nweb17895.avito.ru\r\nweb17896.avito.ru\r\nweb17897.avito.ru\r\nweb17898.avito.ru\r\nweb17899.avito.ru\r\nweb17900.avito.ru\r\nweb17900.vk.com\r\nweb17901.avito.ru\r\nweb17902.avito.ru\r\nweb17903.avito.ru\r\nweb17904.avito.ru\r\nweb17905.avito.ru\r\nweb17906.avito.ru\r\nweb17907.avito.ru\r\nweb17908.avito.ru\r\nweb17909.avito.ru\r\nweb17910.avito.ru\r\nweb17910.vk.com\r\nweb17911.avito.ru\r\nweb17912.avito.ru\r\nweb17913.avito.ru\r\nweb17914.avito.ru\r\nweb17915.avito.ru\r\nweb17916.avito.ru\r\nweb17917.avito.ru\r\nweb17918.avito.ru\r\nweb17919.avito.ru\r\nweb17920.avito.ru\r\nweb17920.vk.com\r\nweb17921.avito.ru\r\nweb17922.avito.ru\r\nweb17923.avito.ru\r\nweb17924.avito.ru\r\nweb17925.avito.ru\r\nweb17926.avito.ru\r\nweb17927.avito.ru\r\nweb17928.avito.ru\r\nweb17929.avito.ru\r\nweb17930.avito.ru\r\nweb17930.vk.com\r\nweb17931.avito.ru\r\nweb17932.avito.ru\r\nweb17933.avito.ru\r\nweb17934.avito.ru\r\nweb17935.avito.ru\r\nweb17936.avito.ru\r\nweb17937.avito.ru\r\nweb17938.avito.ru\r\nweb17939.avito.ru\r\nweb17940.avito.ru\r\nweb17940.vk.com\r\nweb17941.avito.ru\r\nweb17942.avito.ru\r\nweb17943.avito.ru\r\nweb17944.avito.ru\r\nweb17945.avito.ru\r\nweb17946.avito.ru\r\nweb17947.avito.ru\r\nweb17948.avito.ru\r\nweb17949.avito.ru\r\nweb17950.avito.ru\r\nweb17951.avito.ru\r\nweb17952.avito.ru\r\nweb17953.avito.ru\r\nweb17954.avito.ru\r\nweb17955.avito.ru\r\nweb17956.avito.ru\r\nweb17957.avito.ru\r\nweb17958.avito.ru\r\nweb17959.avito.ru\r\nweb17960.avito.ru\r\nweb17961.avito.ru\r\nweb17962.avito.ru\r\nweb17963.avito.ru\r\nweb17964.avito.ru\r\nweb17965.avito.ru\r\nweb17966.avito.ru\r\nweb17967.avito.ru\r\nweb17968.avito.ru\r\nweb17969.avito.ru\r\nweb17970.avito.ru\r\nweb17971.avito.ru\r\nweb17972.avito.ru\r\nweb17973.avito.ru\r\nweb17974.avito.ru\r\nweb17975.avito.ru\r\nweb17976.avito.ru\r\nweb17977.avito.ru\r\nweb17978.avito.ru\r\nweb17979.avito.ru\r\nweb17980.avito.ru\r\nweb17981.avito.ru\r\nweb17982.avito.ru\r\nweb17983.avito.ru\r\nweb17984.avito.ru\r\nweb17985.avito.ru\r\nweb17986.avito.ru\r\nweb17987.avito.ru\r\nweb17988.avito.ru\r\nweb17989.avito.ru\r\nweb17990.avito.ru\r\nweb17991.avito.ru\r\nweb17992.avito.ru\r\nweb17993.avito.ru\r\nweb17994.avito.ru\r\nweb17995.avito.ru\r\nweb17996.avito.ru\r\nweb17997.avito.ru\r\nweb17998.avito.ru\r\nweb17999.avito.ru\r\nweb17f.yandex.ru\r\nweb17g.yandex.ru\r\nweb17j.yandex.ru\r\nweb17o.yandex.ru\r\nweb18.avito.ru\r\nweb18000.avito.ru\r\nweb18000.vk.com\r\nweb18001.avito.ru\r\nweb18002.avito.ru\r\nweb18003.avito.ru\r\nweb18004.avito.ru\r\nweb18005.avito.ru\r\nweb18006.avito.ru\r\nweb18007.avito.ru\r\nweb18008.avito.ru\r\nweb18009.avito.ru\r\nweb18010.avito.ru\r\nweb18010.vk.com\r\nweb18011.avito.ru\r\nweb18012.avito.ru\r\nweb18013.avito.ru\r\nweb18014.avito.ru\r\nweb18015.avito.ru\r\nweb18016.avito.ru\r\nweb18017.avito.ru\r\nweb18018.avito.ru\r\nweb18019.avito.ru\r\nweb18020.avito.ru\r\nweb18020.vk.com\r\nweb18021.avito.ru\r\nweb18022.avito.ru\r\nweb18023.avito.ru\r\nweb18024.avito.ru\r\nweb18025.avito.ru\r\nweb18026.avito.ru\r\nweb18027.avito.ru\r\nweb18028.avito.ru\r\nweb18029.avito.ru\r\nweb18030.avito.ru\r\nweb18030.vk.com\r\nweb18031.avito.ru\r\nweb18032.avito.ru\r\nweb18033.avito.ru\r\nweb18034.avito.ru\r\nweb18035.avito.ru\r\nweb18036.avito.ru\r\nweb18037.avito.ru\r\nweb18038.avito.ru\r\nweb18039.avito.ru\r\nweb18040.avito.ru\r\nweb18040.vk.com\r\nweb18041.avito.ru\r\nweb18042.avito.ru\r\nweb18043.avito.ru\r\nweb18044.avito.ru\r\nweb18045.avito.ru\r\nweb18046.avito.ru\r\nweb18047.avito.ru\r\nweb18048.avito.ru\r\nweb18049.avito.ru\r\nweb18050.avito.ru\r\nweb18111.avito.ru\r\nweb18112.avito.ru\r\nweb18113.avito.ru\r\nweb18114.avito.ru\r\nweb18115.avito.ru\r\nweb18116.avito.ru\r\nweb18117.avito.ru\r\nweb18118.avito.ru\r\nweb18119.avito.ru\r\nweb18120.avito.ru\r\nweb18120.vk.com\r\nweb18121.avito.ru\r\nweb18122.avito.ru\r\nweb18123.avito.ru\r\nweb18124.avito.ru\r\nweb18125.avito.ru\r\nweb18126.avito.ru\r\nweb18127.avito.ru\r\nweb18128.avito.ru\r\nweb18129.avito.ru\r\nweb18130.avito.ru\r\nweb18130.vk.com\r\nweb18131.avito.ru\r\nweb18132.avito.ru\r\nweb18133.avito.ru\r\nweb18134.avito.ru\r\nweb18135.avito.ru\r\nweb18136.avito.ru\r\nweb18137.avito.ru\r\nweb18138.avito.ru\r\nweb18139.avito.ru\r\nweb18140.avito.ru\r\nweb18140.vk.com\r\nweb18141.avito.ru\r\nweb18142.avito.ru\r\nweb18143.avito.ru\r\nweb18144.avito.ru\r\nweb18145.avito.ru\r\nweb18146.avito.ru\r\nweb18147.avito.ru\r\nweb18148.avito.ru\r\nweb18149.avito.ru\r\nweb18150.avito.ru\r\nweb18151.avito.ru\r\nweb18152.avito.ru\r\nweb18153.avito.ru\r\nweb18154.avito.ru\r\nweb18155.avito.ru\r\nweb18156.avito.ru\r\nweb18157.avito.ru\r\nweb18158.avito.ru\r\nweb18159.avito.ru\r\nweb18160.avito.ru\r\nweb18161.avito.ru\r\nweb18162.avito.ru\r\nweb18163.avito.ru\r\nweb18164.avito.ru\r\nweb18165.avito.ru\r\nweb18166.avito.ru\r\nweb18167.avito.ru\r\nweb18168.avito.ru\r\nweb18169.avito.ru\r\nweb18170.avito.ru\r\nweb18171.avito.ru\r\nweb18172.avito.ru\r\nweb18173.avito.ru\r\nweb18174.avito.ru\r\nweb18175.avito.ru\r\nweb18176.avito.ru\r\nweb18177.avito.ru\r\nweb18178.avito.ru\r\nweb18179.avito.ru\r\nweb18180.avito.ru\r\nweb18181.avito.ru\r\nweb18182.avito.ru\r\nweb18183.avito.ru\r\nweb18184.avito.ru\r\nweb18185.avito.ru\r\nweb18186.avito.ru\r\nweb18187.avito.ru\r\nweb18188.avito.ru\r\nweb18189.avito.ru\r\nweb18190.avito.ru\r\nweb18191.avito.ru\r\nweb18192.avito.ru\r\nweb18193.avito.ru\r\nweb18194.avito.ru\r\nweb18195.avito.ru\r\nweb18196.avito.ru\r\nweb18197.avito.ru\r\nweb18198.avito.ru\r\nweb18199.avito.ru\r\nweb18200.avito.ru\r\nweb18200.vk.com\r\nweb18201.avito.ru\r\nweb18202.avito.ru\r\nweb18203.avito.ru\r\nweb18204.avito.ru\r\nweb18205.avito.ru\r\nweb18206.avito.ru\r\nweb18207.avito.ru\r\nweb18208.avito.ru\r\nweb18209.avito.ru\r\nweb18210.avito.ru\r\nweb18210.vk.com\r\nweb18211.avito.ru\r\nweb18212.avito.ru\r\nweb18213.avito.ru\r\nweb18214.avito.ru\r\nweb18215.avito.ru\r\nweb18216.avito.ru\r\nweb18217.avito.ru\r\nweb18218.avito.ru\r\nweb18219.avito.ru\r\nweb18220.avito.ru\r\nweb18220.vk.com\r\nweb18221.avito.ru\r\nweb18222.avito.ru\r\nweb18223.avito.ru\r\nweb18224.avito.ru\r\nweb18225.avito.ru\r\nweb18226.avito.ru\r\nweb18227.avito.ru\r\nweb18228.avito.ru\r\nweb18229.avito.ru\r\nweb18230.avito.ru\r\nweb18230.vk.com\r\nweb18231.avito.ru\r\nweb18232.avito.ru\r\nweb18233.avito.ru\r\nweb18234.avito.ru\r\nweb18235.avito.ru\r\nweb18236.avito.ru\r\nweb18237.avito.ru\r\nweb18238.avito.ru\r\nweb18239.avito.ru\r\nweb18240.avito.ru\r\nweb18240.vk.com\r\nweb18241.avito.ru\r\nweb18242.avito.ru\r\nweb18243.avito.ru\r\nweb18244.avito.ru\r\nweb18245.avito.ru\r\nweb18246.avito.ru\r\nweb18247.avito.ru\r\nweb18248.avito.ru\r\nweb18249.avito.ru\r\nweb18250.avito.ru\r\nweb18251.avito.ru\r\nweb18252.avito.ru\r\nweb18253.avito.ru\r\nweb18254.avito.ru\r\nweb18255.avito.ru\r\nweb18256.avito.ru\r\nweb18257.avito.ru\r\nweb18258.avito.ru\r\nweb18259.avito.ru\r\nweb18260.avito.ru\r\nweb18261.avito.ru\r\nweb18262.avito.ru\r\nweb18263.avito.ru\r\nweb18264.avito.ru\r\nweb18265.avito.ru\r\nweb18266.avito.ru\r\nweb18267.avito.ru\r\nweb18268.avito.ru\r\nweb18269.avito.ru\r\nweb18270.avito.ru\r\nweb18271.avito.ru\r\nweb18272.avito.ru\r\nweb18273.avito.ru\r\nweb18274.avito.ru\r\nweb18275.avito.ru\r\nweb18276.avito.ru\r\nweb18277.avito.ru\r\nweb18278.avito.ru\r\nweb18279.avito.ru\r\nweb18280.avito.ru\r\nweb18281.avito.ru\r\nweb18282.avito.ru\r\nweb18283.avito.ru\r\nweb18284.avito.ru\r\nweb18285.avito.ru\r\nweb18286.avito.ru\r\nweb18287.avito.ru\r\nweb18288.avito.ru\r\nweb18289.avito.ru\r\nweb18290.avito.ru\r\nweb18291.avito.ru\r\nweb18292.avito.ru\r\nweb18293.avito.ru\r\nweb18294.avito.ru\r\nweb18295.avito.ru\r\nweb18296.avito.ru\r\nweb18297.avito.ru\r\nweb18298.avito.ru\r\nweb18299.avito.ru\r\nweb18300.avito.ru\r\nweb18300.vk.com\r\nweb18301.avito.ru\r\nweb18302.avito.ru\r\nweb18303.avito.ru\r\nweb18304.avito.ru\r\nweb18305.avito.ru\r\nweb18306.avito.ru\r\nweb18307.avito.ru\r\nweb18308.avito.ru\r\nweb18309.avito.ru\r\nweb18310.avito.ru\r\nweb18311.avito.ru\r\nweb18312.avito.ru\r\nweb18313.avito.ru\r\nweb18314.avito.ru\r\nweb18315.avito.ru\r\nweb18316.avito.ru\r\nweb18317.avito.ru\r\nweb18318.avito.ru\r\nweb18319.avito.ru\r\nweb18320.avito.ru\r\nweb18320.vk.com\r\nweb18321.avito.ru\r\nweb18322.avito.ru\r\nweb18323.avito.ru\r\nweb18324.avito.ru\r\nweb18325.avito.ru\r\nweb18326.avito.ru\r\nweb18327.avito.ru\r\nweb18328.avito.ru\r\nweb18329.avito.ru\r\nweb18330.avito.ru\r\nweb18330.vk.com\r\nweb18331.avito.ru\r\nweb18332.avito.ru\r\nweb18333.avito.ru\r\nweb18334.avito.ru\r\nweb18335.avito.ru\r\nweb18336.avito.ru\r\nweb18337.avito.ru\r\nweb18338.avito.ru\r\nweb18339.avito.ru\r\nweb18340.avito.ru\r\nweb18340.vk.com\r\nweb18341.avito.ru\r\nweb18342.avito.ru\r\nweb18343.avito.ru\r\nweb18344.avito.ru\r\nweb18345.avito.ru\r\nweb18346.avito.ru\r\nweb18347.avito.ru\r\nweb18348.avito.ru\r\nweb18349.avito.ru\r\nweb18350.avito.ru\r\nweb18411.avito.ru\r\nweb18412.avito.ru\r\nweb18413.avito.ru\r\nweb18414.avito.ru\r\nweb18415.avito.ru\r\nweb18416.avito.ru\r\nweb18417.avito.ru\r\nweb18418.avito.ru\r\nweb18419.avito.ru\r\nweb18420.avito.ru\r\nweb18420.vk.com\r\nweb18421.avito.ru\r\nweb18422.avito.ru\r\nweb18423.avito.ru\r\nweb18424.avito.ru\r\nweb18425.avito.ru\r\nweb18426.avito.ru\r\nweb18427.avito.ru\r\nweb18428.avito.ru\r\nweb18429.avito.ru\r\nweb18430.avito.ru\r\nweb18430.vk.com\r\nweb18431.avito.ru\r\nweb18432.avito.ru\r\nweb18433.avito.ru\r\nweb18434.avito.ru\r\nweb18435.avito.ru\r\nweb18436.avito.ru\r\nweb18437.avito.ru\r\nweb18438.avito.ru\r\nweb18439.avito.ru\r\nweb18440.avito.ru\r\nweb18440.vk.com\r\nweb18441.avito.ru\r\nweb18442.avito.ru\r\nweb18443.avito.ru\r\nweb18444.avito.ru\r\nweb18445.avito.ru\r\nweb18446.avito.ru\r\nweb18447.avito.ru\r\nweb18448.avito.ru\r\nweb18449.avito.ru\r\nweb18450.avito.ru\r\nweb18451.avito.ru\r\nweb18452.avito.ru\r\nweb18453.avito.ru\r\nweb18454.avito.ru\r\nweb18455.avito.ru\r\nweb18456.avito.ru\r\nweb18457.avito.ru\r\nweb18458.avito.ru\r\nweb18459.avito.ru\r\nweb18460.avito.ru\r\nweb18461.avito.ru\r\nweb18462.avito.ru\r\nweb18463.avito.ru\r\nweb18464.avito.ru\r\nweb18465.avito.ru\r\nweb18466.avito.ru\r\nweb18467.avito.ru\r\nweb18468.avito.ru\r\nweb18469.avito.ru\r\nweb18470.avito.ru\r\nweb18471.avito.ru\r\nweb18472.avito.ru\r\nweb18473.avito.ru\r\nweb18474.avito.ru\r\nweb18475.avito.ru\r\nweb18476.avito.ru\r\nweb18477.avito.ru\r\nweb18478.avito.ru\r\nweb18479.avito.ru\r\nweb18480.avito.ru\r\nweb18481.avito.ru\r\nweb18482.avito.ru\r\nweb18483.avito.ru\r\nweb18484.avito.ru\r\nweb18485.avito.ru\r\nweb18486.avito.ru\r\nweb18487.avito.ru\r\nweb18488.avito.ru\r\nweb18489.avito.ru\r\nweb18490.avito.ru\r\nweb18491.avito.ru\r\nweb18492.avito.ru\r\nweb18493.avito.ru\r\nweb18494.avito.ru\r\nweb18495.avito.ru\r\nweb18496.avito.ru\r\nweb18497.avito.ru\r\nweb18498.avito.ru\r\nweb18499.avito.ru\r\nweb18500.avito.ru\r\nweb18500.vk.com\r\nweb18501.avito.ru\r\nweb18502.avito.ru\r\nweb18503.avito.ru\r\nweb18504.avito.ru\r\nweb18505.avito.ru\r\nweb18506.avito.ru\r\nweb18507.avito.ru\r\nweb18508.avito.ru\r\nweb18509.avito.ru\r\nweb18510.avito.ru\r\nweb18510.vk.com\r\nweb18511.avito.ru\r\nweb18512.avito.ru\r\nweb18513.avito.ru\r\nweb18514.avito.ru\r\nweb18515.avito.ru\r\nweb18516.avito.ru\r\nweb18517.avito.ru\r\nweb18518.avito.ru\r\nweb18519.avito.ru\r\nweb18520.avito.ru\r\nweb18520.vk.com\r\nweb18521.avito.ru\r\nweb18522.avito.ru\r\nweb18523.avito.ru\r\nweb18524.avito.ru\r\nweb18525.avito.ru\r\nweb18526.avito.ru\r\nweb18527.avito.ru\r\nweb18528.avito.ru\r\nweb18529.avito.ru\r\nweb18530.avito.ru\r\nweb18530.vk.com\r\nweb18531.avito.ru\r\nweb18532.avito.ru\r\nweb18533.avito.ru\r\nweb18534.avito.ru\r\nweb18535.avito.ru\r\nweb18536.avito.ru\r\nweb18537.avito.ru\r\nweb18538.avito.ru\r\nweb18539.avito.ru\r\nweb18540.avito.ru\r\nweb18540.vk.com\r\nweb18541.avito.ru\r\nweb18542.avito.ru\r\nweb18543.avito.ru\r\nweb18544.avito.ru\r\nweb18545.avito.ru\r\nweb18546.avito.ru\r\nweb18547.avito.ru\r\nweb18548.avito.ru\r\nweb18549.avito.ru\r\nweb18550.avito.ru\r\nweb18551.avito.ru\r\nweb18552.avito.ru\r\nweb18553.avito.ru\r\nweb18554.avito.ru\r\nweb18555.avito.ru\r\nweb18556.avito.ru\r\nweb18557.avito.ru\r\nweb18558.avito.ru\r\nweb18559.avito.ru\r\nweb18560.avito.ru\r\nweb18561.avito.ru\r\nweb18562.avito.ru\r\nweb18563.avito.ru\r\nweb18564.avito.ru\r\nweb18565.avito.ru\r\nweb18566.avito.ru\r\nweb18567.avito.ru\r\nweb18568.avito.ru\r\nweb18569.avito.ru\r\nweb18570.avito.ru\r\nweb18571.avito.ru\r\nweb18572.avito.ru\r\nweb18573.avito.ru\r\nweb18574.avito.ru\r\nweb18575.avito.ru\r\nweb18576.avito.ru\r\nweb18577.avito.ru\r\nweb18578.avito.ru\r\nweb18579.avito.ru\r\nweb18580.avito.ru\r\nweb18581.avito.ru\r\nweb18582.avito.ru\r\nweb18583.avito.ru\r\nweb18584.avito.ru\r\nweb18585.avito.ru\r\nweb18586.avito.ru\r\nweb18587.avito.ru\r\nweb18588.avito.ru\r\nweb18589.avito.ru\r\nweb18590.avito.ru\r\nweb18591.avito.ru\r\nweb18592.avito.ru\r\nweb18593.avito.ru\r\nweb18594.avito.ru\r\nweb18595.avito.ru\r\nweb18596.avito.ru\r\nweb18597.avito.ru\r\nweb18598.avito.ru\r\nweb18599.avito.ru\r\nweb18600.avito.ru\r\nweb18600.vk.com\r\nweb18601.avito.ru\r\nweb18602.avito.ru\r\nweb18603.avito.ru\r\nweb18604.avito.ru\r\nweb18605.avito.ru\r\nweb18606.avito.ru\r\nweb18607.avito.ru\r\nweb18608.avito.ru\r\nweb18609.avito.ru\r\nweb18610.avito.ru\r\nweb18610.vk.com\r\nweb18611.avito.ru\r\nweb18612.avito.ru\r\nweb18613.avito.ru\r\nweb18614.avito.ru\r\nweb18615.avito.ru\r\nweb18616.avito.ru\r\nweb18617.avito.ru\r\nweb18618.avito.ru\r\nweb18619.avito.ru\r\nweb18620.avito.ru\r\nweb18620.vk.com\r\nweb18621.avito.ru\r\nweb18622.avito.ru\r\nweb18623.avito.ru\r\nweb18624.avito.ru\r\nweb18625.avito.ru\r\nweb18626.avito.ru\r\nweb18627.avito.ru\r\nweb18628.avito.ru\r\nweb18629.avito.ru\r\nweb18630.avito.ru\r\nweb18630.vk.com\r\nweb18631.avito.ru\r\nweb18632.avito.ru\r\nweb18633.avito.ru\r\nweb18634.avito.ru\r\nweb18635.avito.ru\r\nweb18636.avito.ru\r\nweb18637.avito.ru\r\nweb18638.avito.ru\r\nweb18639.avito.ru\r\nweb18640.avito.ru\r\nweb18640.vk.com\r\nweb18641.avito.ru\r\nweb18642.avito.ru\r\nweb18643.avito.ru\r\nweb18644.avito.ru\r\nweb18645.avito.ru\r\nweb18646.avito.ru\r\nweb18647.avito.ru\r\nweb18648.avito.ru\r\nweb18649.avito.ru\r\nweb18650.avito.ru\r\nweb18711.avito.ru\r\nweb18712.avito.ru\r\nweb18713.avito.ru\r\nweb18714.avito.ru\r\nweb18715.avito.ru\r\nweb18716.avito.ru\r\nweb18717.avito.ru\r\nweb18718.avito.ru\r\nweb18719.avito.ru\r\nweb18720.avito.ru\r\nweb18720.vk.com\r\nweb18721.avito.ru\r\nweb18722.avito.ru\r\nweb18723.avito.ru\r\nweb18724.avito.ru\r\nweb18725.avito.ru\r\nweb18726.avito.ru\r\nweb18727.avito.ru\r\nweb18728.avito.ru\r\nweb18729.avito.ru\r\nweb18730.avito.ru\r\nweb18730.vk.com\r\nweb18731.avito.ru\r\nweb18732.avito.ru\r\nweb18733.avito.ru\r\nweb18734.avito.ru\r\nweb18735.avito.ru\r\nweb18736.avito.ru\r\nweb18737.avito.ru\r\nweb18738.avito.ru\r\nweb18739.avito.ru\r\nweb18740.avito.ru\r\nweb18740.vk.com\r\nweb18741.avito.ru\r\nweb18742.avito.ru\r\nweb18743.avito.ru\r\nweb18744.avito.ru\r\nweb18745.avito.ru\r\nweb18746.avito.ru\r\nweb18747.avito.ru\r\nweb18748.avito.ru\r\nweb18749.avito.ru\r\nweb18750.avito.ru\r\nweb18751.avito.ru\r\nweb18752.avito.ru\r\nweb18753.avito.ru\r\nweb18754.avito.ru\r\nweb18755.avito.ru\r\nweb18756.avito.ru\r\nweb18757.avito.ru\r\nweb18758.avito.ru\r\nweb18759.avito.ru\r\nweb18760.avito.ru\r\nweb18761.avito.ru\r\nweb18762.avito.ru\r\nweb18763.avito.ru\r\nweb18764.avito.ru\r\nweb18765.avito.ru\r\nweb18766.avito.ru\r\nweb18767.avito.ru\r\nweb18768.avito.ru\r\nweb18769.avito.ru\r\nweb18770.avito.ru\r\nweb18771.avito.ru\r\nweb18772.avito.ru\r\nweb18773.avito.ru\r\nweb18774.avito.ru\r\nweb18775.avito.ru\r\nweb18776.avito.ru\r\nweb18777.avito.ru\r\nweb18778.avito.ru\r\nweb18779.avito.ru\r\nweb18780.avito.ru\r\nweb18781.avito.ru\r\nweb18782.avito.ru\r\nweb18783.avito.ru\r\nweb18784.avito.ru\r\nweb18785.avito.ru\r\nweb18786.avito.ru\r\nweb18787.avito.ru\r\nweb18788.avito.ru\r\nweb18789.avito.ru\r\nweb18790.avito.ru\r\nweb18791.avito.ru\r\nweb18792.avito.ru\r\nweb18793.avito.ru\r\nweb18794.avito.ru\r\nweb18795.avito.ru\r\nweb18796.avito.ru\r\nweb18797.avito.ru\r\nweb18798.avito.ru\r\nweb18799.avito.ru\r\nweb18800.avito.ru\r\nweb18800.vk.com\r\nweb18801.avito.ru\r\nweb18802.avito.ru\r\nweb18803.avito.ru\r\nweb18804.avito.ru\r\nweb18805.avito.ru\r\nweb18806.avito.ru\r\nweb18807.avito.ru\r\nweb18808.avito.ru\r\nweb18809.avito.ru\r\nweb18810.avito.ru\r\nweb18810.vk.com\r\nweb18811.avito.ru\r\nweb18812.avito.ru\r\nweb18813.avito.ru\r\nweb18814.avito.ru\r\nweb18815.avito.ru\r\nweb18816.avito.ru\r\nweb18817.avito.ru\r\nweb18818.avito.ru\r\nweb18819.avito.ru\r\nweb18820.avito.ru\r\nweb18820.vk.com\r\nweb18821.avito.ru\r\nweb18822.avito.ru\r\nweb18823.avito.ru\r\nweb18824.avito.ru\r\nweb18825.avito.ru\r\nweb18826.avito.ru\r\nweb18827.avito.ru\r\nweb18828.avito.ru\r\nweb18829.avito.ru\r\nweb18830.avito.ru\r\nweb18830.vk.com\r\nweb18831.avito.ru\r\nweb18832.avito.ru\r\nweb18833.avito.ru\r\nweb18834.avito.ru\r\nweb18835.avito.ru\r\nweb18836.avito.ru\r\nweb18837.avito.ru\r\nweb18838.avito.ru\r\nweb18839.avito.ru\r\nweb18840.avito.ru\r\nweb18840.vk.com\r\nweb18841.avito.ru\r\nweb18842.avito.ru\r\nweb18843.avito.ru\r\nweb18844.avito.ru\r\nweb18845.avito.ru\r\nweb18846.avito.ru\r\nweb18847.avito.ru\r\nweb18848.avito.ru\r\nweb18849.avito.ru\r\nweb18850.avito.ru\r\nweb18851.avito.ru\r\nweb18852.avito.ru\r\nweb18853.avito.ru\r\nweb18854.avito.ru\r\nweb18855.avito.ru\r\nweb18856.avito.ru\r\nweb18857.avito.ru\r\nweb18858.avito.ru\r\nweb18859.avito.ru\r\nweb18860.avito.ru\r\nweb18861.avito.ru\r\nweb18862.avito.ru\r\nweb18863.avito.ru\r\nweb18864.avito.ru\r\nweb18865.avito.ru\r\nweb18866.avito.ru\r\nweb18867.avito.ru\r\nweb18868.avito.ru\r\nweb18869.avito.ru\r\nweb18870.avito.ru\r\nweb18871.avito.ru\r\nweb18872.avito.ru\r\nweb18873.avito.ru\r\nweb18874.avito.ru\r\nweb18875.avito.ru\r\nweb18876.avito.ru\r\nweb18877.avito.ru\r\nweb18878.avito.ru\r\nweb18879.avito.ru\r\nweb18880.avito.ru\r\nweb18881.avito.ru\r\nweb18882.avito.ru\r\nweb18883.avito.ru\r\nweb18884.avito.ru\r\nweb18885.avito.ru\r\nweb18886.avito.ru\r\nweb18887.avito.ru\r\nweb18888.avito.ru\r\nweb18889.avito.ru\r\nweb18890.avito.ru\r\nweb18891.avito.ru\r\nweb18892.avito.ru\r\nweb18893.avito.ru\r\nweb18894.avito.ru\r\nweb18895.avito.ru\r\nweb18896.avito.ru\r\nweb18897.avito.ru\r\nweb18898.avito.ru\r\nweb18899.avito.ru\r\nweb18900.avito.ru\r\nweb18900.vk.com\r\nweb18901.avito.ru\r\nweb18902.avito.ru\r\nweb18903.avito.ru\r\nweb18904.avito.ru\r\nweb18905.avito.ru\r\nweb18906.avito.ru\r\nweb18907.avito.ru\r\nweb18908.avito.ru\r\nweb18909.avito.ru\r\nweb18910.avito.ru\r\nweb18910.vk.com\r\nweb18911.avito.ru\r\nweb18912.avito.ru\r\nweb18913.avito.ru\r\nweb18914.avito.ru\r\nweb18915.avito.ru\r\nweb18916.avito.ru\r\nweb18917.avito.ru\r\nweb18918.avito.ru\r\nweb18919.avito.ru\r\nweb18920.avito.ru\r\nweb18920.vk.com\r\nweb18921.avito.ru\r\nweb18922.avito.ru\r\nweb18923.avito.ru\r\nweb18924.avito.ru\r\nweb18925.avito.ru\r\nweb18926.avito.ru\r\nweb18927.avito.ru\r\nweb18928.avito.ru\r\nweb18929.avito.ru\r\nweb18930.avito.ru\r\nweb18930.vk.com\r\nweb18931.avito.ru\r\nweb18932.avito.ru\r\nweb18933.avito.ru\r\nweb18934.avito.ru\r\nweb18935.avito.ru\r\nweb18936.avito.ru\r\nweb18937.avito.ru\r\nweb18938.avito.ru\r\nweb18939.avito.ru\r\nweb18940.avito.ru\r\nweb18940.vk.com\r\nweb18941.avito.ru\r\nweb18942.avito.ru\r\nweb18943.avito.ru\r\nweb18944.avito.ru\r\nweb18945.avito.ru\r\nweb18946.avito.ru\r\nweb18947.avito.ru\r\nweb18948.avito.ru\r\nweb18949.avito.ru\r\nweb18950.avito.ru\r\nweb18f.yandex.ru\r\nweb18g.yandex.ru\r\nweb18j.yandex.ru\r\nweb18o.yandex.ru\r\nweb19.avito.ru\r\nweb19f.yandex.ru\r\nweb19g.yandex.ru\r\nweb19j.yandex.ru\r\nweb19o.yandex.ru\r\nweb1c-test.beeline.ru\r\nweb1c.beeline.ru\r\nweb1f.yandex.ru\r\nweb1g.yandex.ru\r\nweb2.avito.ru\r\nweb2.mk.ru\r\nweb2.online.sberbank.ru\r\nweb20.avito.ru\r\nweb20.vk.com\r\nweb201.avito.ru\r\nweb202.avito.ru\r\nweb20f.yandex.ru\r\nweb20g.yandex.ru\r\nweb20o.yandex.ru\r\nweb21.avito.ru\r\nweb21f.yandex.ru\r\nweb21g.yandex.ru\r\nweb21j.yandex.ru\r\nweb21o.yandex.ru\r\nweb22.avito.ru\r\nweb22f.yandex.ru\r\nweb22g.yandex.ru\r\nweb22j.yandex.ru\r\nweb22o.yandex.ru\r\nweb23.avito.ru\r\nweb23f.yandex.ru\r\nweb23j.yandex.ru\r\nweb23o.yandex.ru\r\nweb24.avito.ru\r\nweb24f.yandex.ru\r\nweb24j.yandex.ru\r\nweb24o.yandex.ru\r\nweb25.avito.ru\r\nweb25f.yandex.ru\r\nweb25g.yandex.ru\r\nweb25j.yandex.ru\r\nweb26.avito.ru\r\nweb26f.yandex.ru\r\nweb26g.yandex.ru\r\nweb26j.yandex.ru\r\nweb27.avito.ru\r\nweb27f.yandex.ru\r\nweb27g.yandex.ru\r\nweb27j.yandex.ru\r\nweb27o.yandex.ru\r\nweb28.avito.ru\r\nweb28f.yandex.ru\r\nweb28g.yandex.ru\r\nweb28j.yandex.ru\r\nweb28o.yandex.ru\r\nweb29.avito.ru\r\nweb29f.yandex.ru\r\nweb29g.yandex.ru\r\nweb29j.yandex.ru\r\nweb29o.yandex.ru\r\nweb2g.yandex.ru\r\nweb2quiktest.alfabank.ru\r\nweb3.avito.ru\r\nweb3.mk.ru\r\nweb3.online.sberbank.ru\r\nweb30.avito.ru\r\nweb30.vk.com\r\nweb30f.yandex.ru\r\nweb30g.yandex.ru\r\nweb30j.yandex.ru\r\nweb30o.yandex.ru\r\nweb31.avito.ru\r\nweb31j.yandex.ru\r\nweb32.avito.ru\r\nweb32j.yandex.ru\r\nweb33.avito.ru\r\nweb3311.avito.ru\r\nweb3312.avito.ru\r\nweb3313.avito.ru\r\nweb3314.avito.ru\r\nweb3315.avito.ru\r\nweb3316.avito.ru\r\nweb3317.avito.ru\r\nweb3318.avito.ru\r\nweb3319.avito.ru\r\nweb3320.avito.ru\r\nweb3320.vk.com\r\nweb3321.avito.ru\r\nweb3322.avito.ru\r\nweb3323.avito.ru\r\nweb3324.avito.ru\r\nweb3325.avito.ru\r\nweb3326.avito.ru\r\nweb3327.avito.ru\r\nweb3328.avito.ru\r\nweb3329.avito.ru\r\nweb3330.avito.ru\r\nweb3330.vk.com\r\nweb3331.avito.ru\r\nweb3332.avito.ru\r\nweb3333.avito.ru\r\nweb3334.avito.ru\r\nweb3335.avito.ru\r\nweb3336.avito.ru\r\nweb3337.avito.ru\r\nweb3338.avito.ru\r\nweb3339.avito.ru\r\nweb3340.avito.ru\r\nweb3340.vk.com\r\nweb3341.avito.ru\r\nweb3342.avito.ru\r\nweb3343.avito.ru\r\nweb3344.avito.ru\r\nweb3345.avito.ru\r\nweb3346.avito.ru\r\nweb3347.avito.ru\r\nweb3348.avito.ru\r\nweb3349.avito.ru\r\nweb3350.avito.ru\r\nweb3351.avito.ru\r\nweb3352.avito.ru\r\nweb3353.avito.ru\r\nweb3354.avito.ru\r\nweb3355.avito.ru\r\nweb3356.avito.ru\r\nweb3357.avito.ru\r\nweb3358.avito.ru\r\nweb3359.avito.ru\r\nweb3360.avito.ru\r\nweb3361.avito.ru\r\nweb3362.avito.ru\r\nweb3363.avito.ru\r\nweb3364.avito.ru\r\nweb3365.avito.ru\r\nweb3366.avito.ru\r\nweb3367.avito.ru\r\nweb3368.avito.ru\r\nweb3369.avito.ru\r\nweb3370.avito.ru\r\nweb3371.avito.ru\r\nweb3372.avito.ru\r\nweb3373.avito.ru\r\nweb3374.avito.ru\r\nweb3375.avito.ru\r\nweb3376.avito.ru\r\nweb3377.avito.ru\r\nweb3378.avito.ru\r\nweb3379.avito.ru\r\nweb3380.avito.ru\r\nweb3381.avito.ru\r\nweb3382.avito.ru\r\nweb3383.avito.ru\r\nweb3384.avito.ru\r\nweb3385.avito.ru\r\nweb3386.avito.ru\r\nweb3387.avito.ru\r\nweb3388.avito.ru\r\nweb3389.avito.ru\r\nweb3390.avito.ru\r\nweb3391.avito.ru\r\nweb3392.avito.ru\r\nweb3393.avito.ru\r\nweb3394.avito.ru\r\nweb3395.avito.ru\r\nweb3396.avito.ru\r\nweb3397.avito.ru\r\nweb3398.avito.ru\r\nweb3399.avito.ru\r\nweb33j.yandex.ru\r\nweb33o.yandex.ru\r\nweb34.avito.ru\r\nweb3400.avito.ru\r\nweb3400.vk.com\r\nweb3401.avito.ru\r\nweb3402.avito.ru\r\nweb3403.avito.ru\r\nweb3404.avito.ru\r\nweb3405.avito.ru\r\nweb3406.avito.ru\r\nweb3407.avito.ru\r\nweb3408.avito.ru\r\nweb3409.avito.ru\r\nweb3410.avito.ru\r\nweb3410.vk.com\r\nweb3411.avito.ru\r\nweb3412.avito.ru\r\nweb3413.avito.ru\r\nweb3414.avito.ru\r\nweb3415.avito.ru\r\nweb3416.avito.ru\r\nweb3417.avito.ru\r\nweb3418.avito.ru\r\nweb3419.avito.ru\r\nweb3420.avito.ru\r\nweb3420.vk.com\r\nweb3421.avito.ru\r\nweb3422.avito.ru\r\nweb3423.avito.ru\r\nweb3424.avito.ru\r\nweb3425.avito.ru\r\nweb3426.avito.ru\r\nweb3427.avito.ru\r\nweb3428.avito.ru\r\nweb3429.avito.ru\r\nweb3430.avito.ru\r\nweb3430.vk.com\r\nweb3431.avito.ru\r\nweb3432.avito.ru\r\nweb3433.avito.ru\r\nweb3434.avito.ru\r\nweb3435.avito.ru\r\nweb3436.avito.ru\r\nweb3437.avito.ru\r\nweb3438.avito.ru\r\nweb3439.avito.ru\r\nweb3440.avito.ru\r\nweb3440.vk.com\r\nweb3441.avito.ru\r\nweb3442.avito.ru\r\nweb3443.avito.ru\r\nweb3444.avito.ru\r\nweb3445.avito.ru\r\nweb3446.avito.ru\r\nweb3447.avito.ru\r\nweb3448.avito.ru\r\nweb3449.avito.ru\r\nweb3450.avito.ru\r\nweb3451.avito.ru\r\nweb3452.avito.ru\r\nweb3453.avito.ru\r\nweb3454.avito.ru\r\nweb3455.avito.ru\r\nweb3456.avito.ru\r\nweb3457.avito.ru\r\nweb3458.avito.ru\r\nweb3459.avito.ru\r\nweb3460.avito.ru\r\nweb3461.avito.ru\r\nweb3462.avito.ru\r\nweb3463.avito.ru\r\nweb3464.avito.ru\r\nweb3465.avito.ru\r\nweb3466.avito.ru\r\nweb3467.avito.ru\r\nweb3468.avito.ru\r\nweb3469.avito.ru\r\nweb3470.avito.ru\r\nweb3471.avito.ru\r\nweb3472.avito.ru\r\nweb3473.avito.ru\r\nweb3474.avito.ru\r\nweb3475.avito.ru\r\nweb3476.avito.ru\r\nweb3477.avito.ru\r\nweb3478.avito.ru\r\nweb3479.avito.ru\r\nweb3480.avito.ru\r\nweb3481.avito.ru\r\nweb3482.avito.ru\r\nweb3483.avito.ru\r\nweb3484.avito.ru\r\nweb3485.avito.ru\r\nweb3486.avito.ru\r\nweb3487.avito.ru\r\nweb3488.avito.ru\r\nweb3489.avito.ru\r\nweb3490.avito.ru\r\nweb3491.avito.ru\r\nweb3492.avito.ru\r\nweb3493.avito.ru\r\nweb3494.avito.ru\r\nweb3495.avito.ru\r\nweb3496.avito.ru\r\nweb3497.avito.ru\r\nweb3498.avito.ru\r\nweb3499.avito.ru\r\nweb34j.yandex.ru\r\nweb34o.yandex.ru\r\nweb35.avito.ru\r\nweb3500.avito.ru\r\nweb3500.vk.com\r\nweb3501.avito.ru\r\nweb3502.avito.ru\r\nweb3503.avito.ru\r\nweb3504.avito.ru\r\nweb3505.avito.ru\r\nweb3506.avito.ru\r\nweb3507.avito.ru\r\nweb3508.avito.ru\r\nweb3509.avito.ru\r\nweb3510.avito.ru\r\nweb3510.vk.com\r\nweb3511.avito.ru\r\nweb3512.avito.ru\r\nweb3513.avito.ru\r\nweb3514.avito.ru\r\nweb3515.avito.ru\r\nweb3516.avito.ru\r\nweb3517.avito.ru\r\nweb3518.avito.ru\r\nweb3519.avito.ru\r\nweb3520.avito.ru\r\nweb3520.vk.com\r\nweb3521.avito.ru\r\nweb3522.avito.ru\r\nweb3523.avito.ru\r\nweb3524.avito.ru\r\nweb3525.avito.ru\r\nweb3526.avito.ru\r\nweb3527.avito.ru\r\nweb3528.avito.ru\r\nweb3529.avito.ru\r\nweb3530.avito.ru\r\nweb3530.vk.com\r\nweb3531.avito.ru\r\nweb3532.avito.ru\r\nweb3533.avito.ru\r\nweb3534.avito.ru\r\nweb3535.avito.ru\r\nweb3536.avito.ru\r\nweb3537.avito.ru\r\nweb3538.avito.ru\r\nweb3539.avito.ru\r\nweb3540.avito.ru\r\nweb3540.vk.com\r\nweb3541.avito.ru\r\nweb3542.avito.ru\r\nweb3543.avito.ru\r\nweb3544.avito.ru\r\nweb3545.avito.ru\r\nweb3546.avito.ru\r\nweb3547.avito.ru\r\nweb3548.avito.ru\r\nweb3549.avito.ru\r\nweb3550.avito.ru\r\nweb3554.avito.ru\r\nweb35j.yandex.ru\r\nweb36.avito.ru\r\nweb36.yandex.ru\r\nweb3611.avito.ru\r\nweb3612.avito.ru\r\nweb3613.avito.ru\r\nweb3614.avito.ru\r\nweb3615.avito.ru\r\nweb3616.avito.ru\r\nweb3617.avito.ru\r\nweb3618.avito.ru\r\nweb3619.avito.ru\r\nweb3620.avito.ru\r\nweb3620.vk.com\r\nweb3621.avito.ru\r\nweb3622.avito.ru\r\nweb3623.avito.ru\r\nweb3624.avito.ru\r\nweb3625.avito.ru\r\nweb3626.avito.ru\r\nweb3627.avito.ru\r\nweb3628.avito.ru\r\nweb3629.avito.ru\r\nweb3630.avito.ru\r\nweb3630.vk.com\r\nweb3631.avito.ru\r\nweb3632.avito.ru\r\nweb3633.avito.ru\r\nweb3634.avito.ru\r\nweb3635.avito.ru\r\nweb3636.avito.ru\r\nweb3637.avito.ru\r\nweb3638.avito.ru\r\nweb3639.avito.ru\r\nweb3640.avito.ru\r\nweb3640.vk.com\r\nweb3641.avito.ru\r\nweb3642.avito.ru\r\nweb3643.avito.ru\r\nweb3644.avito.ru\r\nweb3645.avito.ru\r\nweb3646.avito.ru\r\nweb3647.avito.ru\r\nweb3648.avito.ru\r\nweb3649.avito.ru\r\nweb3650.avito.ru\r\nweb3651.avito.ru\r\nweb3652.avito.ru\r\nweb3653.avito.ru\r\nweb3654.avito.ru\r\nweb3655.avito.ru\r\nweb3656.avito.ru\r\nweb3657.avito.ru\r\nweb3658.avito.ru\r\nweb3659.avito.ru\r\nweb3660.avito.ru\r\nweb3661.avito.ru\r\nweb3662.avito.ru\r\nweb3663.avito.ru\r\nweb3664.avito.ru\r\nweb3665.avito.ru\r\nweb3666.avito.ru\r\nweb3667.avito.ru\r\nweb3668.avito.ru\r\nweb3669.avito.ru\r\nweb3670.avito.ru\r\nweb3671.avito.ru\r\nweb3672.avito.ru\r\nweb3673.avito.ru\r\nweb3674.avito.ru\r\nweb3675.avito.ru\r\nweb3676.avito.ru\r\nweb3677.avito.ru\r\nweb3678.avito.ru\r\nweb3679.avito.ru\r\nweb3680.avito.ru\r\nweb3681.avito.ru\r\nweb3682.avito.ru\r\nweb3683.avito.ru\r\nweb3684.avito.ru\r\nweb3685.avito.ru\r\nweb3686.avito.ru\r\nweb3687.avito.ru\r\nweb3688.avito.ru\r\nweb3689.avito.ru\r\nweb3690.avito.ru\r\nweb3691.avito.ru\r\nweb3692.avito.ru\r\nweb3693.avito.ru\r\nweb3694.avito.ru\r\nweb3695.avito.ru\r\nweb3696.avito.ru\r\nweb3697.avito.ru\r\nweb3698.avito.ru\r\nweb3699.avito.ru\r\nweb36j.yandex.ru\r\nweb36o.yandex.ru\r\nweb37.yandex.ru\r\nweb3700.avito.ru\r\nweb3700.vk.com\r\nweb3701.avito.ru\r\nweb3702.avito.ru\r\nweb3703.avito.ru\r\nweb3704.avito.ru\r\nweb3705.avito.ru\r\nweb3706.avito.ru\r\nweb3707.avito.ru\r\nweb3708.avito.ru\r\nweb3709.avito.ru\r\nweb3710.avito.ru\r\nweb3710.vk.com\r\nweb3711.avito.ru\r\nweb3712.avito.ru\r\nweb3713.avito.ru\r\nweb3714.avito.ru\r\nweb3715.avito.ru\r\nweb3716.avito.ru\r\nweb3717.avito.ru\r\nweb3718.avito.ru\r\nweb3719.avito.ru\r\nweb3720.avito.ru\r\nweb3720.vk.com\r\nweb3721.avito.ru\r\nweb3722.avito.ru\r\nweb3723.avito.ru\r\nweb3724.avito.ru\r\nweb3725.avito.ru\r\nweb3726.avito.ru\r\nweb3727.avito.ru\r\nweb3728.avito.ru\r\nweb3729.avito.ru\r\nweb3730.avito.ru\r\nweb3730.vk.com\r\nweb3731.avito.ru\r\nweb3732.avito.ru\r\nweb3733.avito.ru\r\nweb3734.avito.ru\r\nweb3735.avito.ru\r\nweb3736.avito.ru\r\nweb3737.avito.ru\r\nweb3738.avito.ru\r\nweb3739.avito.ru\r\nweb3740.avito.ru\r\nweb3740.vk.com\r\nweb3741.avito.ru\r\nweb3742.avito.ru\r\nweb3743.avito.ru\r\nweb3744.avito.ru\r\nweb3745.avito.ru\r\nweb3746.avito.ru\r\nweb3747.avito.ru\r\nweb3748.avito.ru\r\nweb3749.avito.ru\r\nweb3750.avito.ru\r\nweb3751.avito.ru\r\nweb3752.avito.ru\r\nweb3753.avito.ru\r\nweb3754.avito.ru\r\nweb3755.avito.ru\r\nweb3756.avito.ru\r\nweb3757.avito.ru\r\nweb3758.avito.ru\r\nweb3759.avito.ru\r\nweb3760.avito.ru\r\nweb3761.avito.ru\r\nweb3762.avito.ru\r\nweb3763.avito.ru\r\nweb3764.avito.ru\r\nweb3765.avito.ru\r\nweb3766.avito.ru\r\nweb3767.avito.ru\r\nweb3768.avito.ru\r\nweb3769.avito.ru\r\nweb3770.avito.ru\r\nweb3771.avito.ru\r\nweb3772.avito.ru\r\nweb3773.avito.ru\r\nweb3774.avito.ru\r\nweb3775.avito.ru\r\nweb3776.avito.ru\r\nweb3777.avito.ru\r\nweb3778.avito.ru\r\nweb3779.avito.ru\r\nweb3780.avito.ru\r\nweb3781.avito.ru\r\nweb3782.avito.ru\r\nweb3783.avito.ru\r\nweb3784.avito.ru\r\nweb3785.avito.ru\r\nweb3786.avito.ru\r\nweb3787.avito.ru\r\nweb3788.avito.ru\r\nweb3789.avito.ru\r\nweb3790.avito.ru\r\nweb3791.avito.ru\r\nweb3792.avito.ru\r\nweb3793.avito.ru\r\nweb3794.avito.ru\r\nweb3795.avito.ru\r\nweb3796.avito.ru\r\nweb3797.avito.ru\r\nweb3798.avito.ru\r\nweb3799.avito.ru\r\nweb37j.yandex.ru\r\nweb37o.yandex.ru\r\nweb38.yandex.ru\r\nweb3800.avito.ru\r\nweb3800.vk.com\r\nweb3801.avito.ru\r\nweb3802.avito.ru\r\nweb3803.avito.ru\r\nweb3804.avito.ru\r\nweb3805.avito.ru\r\nweb3806.avito.ru\r\nweb3807.avito.ru\r\nweb3808.avito.ru\r\nweb3809.avito.ru\r\nweb3810.avito.ru\r\nweb3810.vk.com\r\nweb3811.avito.ru\r\nweb3812.avito.ru\r\nweb3813.avito.ru\r\nweb3814.avito.ru\r\nweb3815.avito.ru\r\nweb3816.avito.ru\r\nweb3817.avito.ru\r\nweb3818.avito.ru\r\nweb3819.avito.ru\r\nweb3820.avito.ru\r\nweb3820.vk.com\r\nweb3821.avito.ru\r\nweb3822.avito.ru\r\nweb3823.avito.ru\r\nweb3824.avito.ru\r\nweb3825.avito.ru\r\nweb3826.avito.ru\r\nweb3827.avito.ru\r\nweb3828.avito.ru\r\nweb3829.avito.ru\r\nweb3830.avito.ru\r\nweb3830.vk.com\r\nweb3831.avito.ru\r\nweb3832.avito.ru\r\nweb3833.avito.ru\r\nweb3834.avito.ru\r\nweb3835.avito.ru\r\nweb3836.avito.ru\r\nweb3837.avito.ru\r\nweb3838.avito.ru\r\nweb3839.avito.ru\r\nweb3840.avito.ru\r\nweb3840.vk.com\r\nweb3841.avito.ru\r\nweb3842.avito.ru\r\nweb3843.avito.ru\r\nweb3844.avito.ru\r\nweb3845.avito.ru\r\nweb3846.avito.ru\r\nweb3847.avito.ru\r\nweb3848.avito.ru\r\nweb3849.avito.ru\r\nweb3850.avito.ru\r\nweb38o.yandex.ru\r\nweb39.yandex.ru\r\nweb3911.avito.ru\r\nweb3912.avito.ru\r\nweb3913.avito.ru\r\nweb3914.avito.ru\r\nweb3915.avito.ru\r\nweb3916.avito.ru\r\nweb3917.avito.ru\r\nweb3918.avito.ru\r\nweb3919.avito.ru\r\nweb3920.avito.ru\r\nweb3920.vk.com\r\nweb3921.avito.ru\r\nweb3922.avito.ru\r\nweb3923.avito.ru\r\nweb3924.avito.ru\r\nweb3925.avito.ru\r\nweb3926.avito.ru\r\nweb3927.avito.ru\r\nweb3928.avito.ru\r\nweb3929.avito.ru\r\nweb3930.avito.ru\r\nweb3930.vk.com\r\nweb3931.avito.ru\r\nweb3932.avito.ru\r\nweb3933.avito.ru\r\nweb3934.avito.ru\r\nweb3935.avito.ru\r\nweb3936.avito.ru\r\nweb3937.avito.ru\r\nweb3938.avito.ru\r\nweb3939.avito.ru\r\nweb3940.avito.ru\r\nweb3940.vk.com\r\nweb3941.avito.ru\r\nweb3942.avito.ru\r\nweb3943.avito.ru\r\nweb3944.avito.ru\r\nweb3945.avito.ru\r\nweb3946.avito.ru\r\nweb3947.avito.ru\r\nweb3948.avito.ru\r\nweb3949.avito.ru\r\nweb3950.avito.ru\r\nweb3951.avito.ru\r\nweb3952.avito.ru\r\nweb3953.avito.ru\r\nweb3954.avito.ru\r\nweb3955.avito.ru\r\nweb3956.avito.ru\r\nweb3957.avito.ru\r\nweb3958.avito.ru\r\nweb3959.avito.ru\r\nweb3960.avito.ru\r\nweb3961.avito.ru\r\nweb3962.avito.ru\r\nweb3963.avito.ru\r\nweb3964.avito.ru\r\nweb3965.avito.ru\r\nweb3966.avito.ru\r\nweb3967.avito.ru\r\nweb3968.avito.ru\r\nweb3969.avito.ru\r\nweb3970.avito.ru\r\nweb3971.avito.ru\r\nweb3972.avito.ru\r\nweb3973.avito.ru\r\nweb3974.avito.ru\r\nweb3975.avito.ru\r\nweb3976.avito.ru\r\nweb3977.avito.ru\r\nweb3978.avito.ru\r\nweb3979.avito.ru\r\nweb3980.avito.ru\r\nweb3981.avito.ru\r\nweb3982.avito.ru\r\nweb3983.avito.ru\r\nweb3984.avito.ru\r\nweb3985.avito.ru\r\nweb3986.avito.ru\r\nweb3987.avito.ru\r\nweb3988.avito.ru\r\nweb3989.avito.ru\r\nweb3990.avito.ru\r\nweb3991.avito.ru\r\nweb3992.avito.ru\r\nweb3993.avito.ru\r\nweb3994.avito.ru\r\nweb3995.avito.ru\r\nweb3996.avito.ru\r\nweb3997.avito.ru\r\nweb3998.avito.ru\r\nweb3999.avito.ru\r\nweb39j.yandex.ru\r\nweb39o.yandex.ru\r\nweb3f.yandex.ru\r\nweb3g.yandex.ru\r\nweb4.avito.ru\r\nweb4.online.sberbank.ru\r\nweb4000.avito.ru\r\nweb4000.vk.com\r\nweb4001.avito.ru\r\nweb4002.avito.ru\r\nweb4003.avito.ru\r\nweb4004.avito.ru\r\nweb4005.avito.ru\r\nweb4006.avito.ru\r\nweb4007.avito.ru\r\nweb4008.avito.ru\r\nweb4009.avito.ru\r\nweb4010.avito.ru\r\nweb4010.vk.com\r\nweb4011.avito.ru\r\nweb4012.avito.ru\r\nweb4013.avito.ru\r\nweb4014.avito.ru\r\nweb4015.avito.ru\r\nweb4016.avito.ru\r\nweb4017.avito.ru\r\nweb4018.avito.ru\r\nweb4019.avito.ru\r\nweb4020.avito.ru\r\nweb4021.avito.ru\r\nweb4022.avito.ru\r\nweb4023.avito.ru\r\nweb4024.avito.ru\r\nweb4025.avito.ru\r\nweb4026.avito.ru\r\nweb4027.avito.ru\r\nweb4028.avito.ru\r\nweb4029.avito.ru\r\nweb4030.avito.ru\r\nweb4030.vk.com\r\nweb4031.avito.ru\r\nweb4032.avito.ru\r\nweb4033.avito.ru\r\nweb4034.avito.ru\r\nweb4035.avito.ru\r\nweb4036.avito.ru\r\nweb4037.avito.ru\r\nweb4038.avito.ru\r\nweb4039.avito.ru\r\nweb4040.avito.ru\r\nweb4040.vk.com\r\nweb4041.avito.ru\r\nweb4042.avito.ru\r\nweb4043.avito.ru\r\nweb4044.avito.ru\r\nweb4045.avito.ru\r\nweb4046.avito.ru\r\nweb4047.avito.ru\r\nweb4048.avito.ru\r\nweb4049.avito.ru\r\nweb4050.avito.ru\r\nweb4051.avito.ru\r\nweb4052.avito.ru\r\nweb4053.avito.ru\r\nweb4054.avito.ru\r\nweb4055.avito.ru\r\nweb4056.avito.ru\r\nweb4057.avito.ru\r\nweb4058.avito.ru\r\nweb4059.avito.ru\r\nweb4060.avito.ru\r\nweb4061.avito.ru\r\nweb4062.avito.ru\r\nweb4063.avito.ru\r\nweb4064.avito.ru\r\nweb4065.avito.ru\r\nweb4066.avito.ru\r\nweb4067.avito.ru\r\nweb4068.avito.ru\r\nweb4069.avito.ru\r\nweb4070.avito.ru\r\nweb4071.avito.ru\r\nweb4072.avito.ru\r\nweb4073.avito.ru\r\nweb4074.avito.ru\r\nweb4075.avito.ru\r\nweb4076.avito.ru\r\nweb4077.avito.ru\r\nweb4078.avito.ru\r\nweb4079.avito.ru\r\nweb4080.avito.ru\r\nweb4081.avito.ru\r\nweb4082.avito.ru\r\nweb4083.avito.ru\r\nweb4084.avito.ru\r\nweb4085.avito.ru\r\nweb4086.avito.ru\r\nweb4087.avito.ru\r\nweb4088.avito.ru\r\nweb4089.avito.ru\r\nweb4090.avito.ru\r\nweb4091.avito.ru\r\nweb4092.avito.ru\r\nweb4093.avito.ru\r\nweb4094.avito.ru\r\nweb4095.avito.ru\r\nweb4096.avito.ru\r\nweb4097.avito.ru\r\nweb4098.avito.ru\r\nweb4099.avito.ru\r\nweb40j.yandex.ru\r\nweb40o.yandex.ru\r\nweb4100.avito.ru\r\nweb4100.vk.com\r\nweb4101.avito.ru\r\nweb4102.avito.ru\r\nweb4103.avito.ru\r\nweb4104.avito.ru\r\nweb4105.avito.ru\r\nweb4106.avito.ru\r\nweb4107.avito.ru\r\nweb4108.avito.ru\r\nweb4109.avito.ru\r\nweb4110.avito.ru\r\nweb4110.vk.com\r\nweb4111.avito.ru\r\nweb4112.avito.ru\r\nweb4113.avito.ru\r\nweb4114.avito.ru\r\nweb4115.avito.ru\r\nweb4116.avito.ru\r\nweb4117.avito.ru\r\nweb4118.avito.ru\r\nweb4119.avito.ru\r\nweb4120.avito.ru\r\nweb4121.avito.ru\r\nweb4122.avito.ru\r\nweb4123.avito.ru\r\nweb4124.avito.ru\r\nweb4125.avito.ru\r\nweb4126.avito.ru\r\nweb4127.avito.ru\r\nweb4128.avito.ru\r\nweb4129.avito.ru\r\nweb4130.avito.ru\r\nweb4131.avito.ru\r\nweb4132.avito.ru\r\nweb4133.avito.ru\r\nweb4134.avito.ru\r\nweb4135.avito.ru\r\nweb4136.avito.ru\r\nweb4137.avito.ru\r\nweb4138.avito.ru\r\nweb4139.avito.ru\r\nweb4140.avito.ru\r\nweb4140.vk.com\r\nweb4141.avito.ru\r\nweb4142.avito.ru\r\nweb4143.avito.ru\r\nweb4144.avito.ru\r\nweb4145.avito.ru\r\nweb4146.avito.ru\r\nweb4147.avito.ru\r\nweb4148.avito.ru\r\nweb4149.avito.ru\r\nweb4150.avito.ru\r\nweb41j.yandex.ru\r\nweb41o.yandex.ru\r\nweb4211.avito.ru\r\nweb4212.avito.ru\r\nweb4213.avito.ru\r\nweb4214.avito.ru\r\nweb4215.avito.ru\r\nweb4216.avito.ru\r\nweb4217.avito.ru\r\nweb4218.avito.ru\r\nweb4219.avito.ru\r\nweb4220.avito.ru\r\nweb4220.vk.com\r\nweb4221.avito.ru\r\nweb4222.avito.ru\r\nweb4223.avito.ru\r\nweb4224.avito.ru\r\nweb4225.avito.ru\r\nweb4226.avito.ru\r\nweb4227.avito.ru\r\nweb4228.avito.ru\r\nweb4229.avito.ru\r\nweb4230.avito.ru\r\nweb4231.avito.ru\r\nweb4232.avito.ru\r\nweb4233.avito.ru\r\nweb4234.avito.ru\r\nweb4235.avito.ru\r\nweb4236.avito.ru\r\nweb4237.avito.ru\r\nweb4238.avito.ru\r\nweb4239.avito.ru\r\nweb4240.avito.ru\r\nweb4240.vk.com\r\nweb4241.avito.ru\r\nweb4242.avito.ru\r\nweb4243.avito.ru\r\nweb4244.avito.ru\r\nweb4245.avito.ru\r\nweb4246.avito.ru\r\nweb4247.avito.ru\r\nweb4248.avito.ru\r\nweb4249.avito.ru\r\nweb4250.avito.ru\r\nweb4251.avito.ru\r\nweb4252.avito.ru\r\nweb4253.avito.ru\r\nweb4254.avito.ru\r\nweb4255.avito.ru\r\nweb4256.avito.ru\r\nweb4257.avito.ru\r\nweb4258.avito.ru\r\nweb4259.avito.ru\r\nweb4260.avito.ru\r\nweb4261.avito.ru\r\nweb4262.avito.ru\r\nweb4263.avito.ru\r\nweb4264.avito.ru\r\nweb4265.avito.ru\r\nweb4266.avito.ru\r\nweb4267.avito.ru\r\nweb4268.avito.ru\r\nweb4269.avito.ru\r\nweb4270.avito.ru\r\nweb4271.avito.ru\r\nweb4272.avito.ru\r\nweb4273.avito.ru\r\nweb4274.avito.ru\r\nweb4275.avito.ru\r\nweb4276.avito.ru\r\nweb4277.avito.ru\r\nweb4278.avito.ru\r\nweb4279.avito.ru\r\nweb4280.avito.ru\r\nweb4281.avito.ru\r\nweb4282.avito.ru\r\nweb4283.avito.ru\r\nweb4284.avito.ru\r\nweb4285.avito.ru\r\nweb4286.avito.ru\r\nweb4287.avito.ru\r\nweb4288.avito.ru\r\nweb4289.avito.ru\r\nweb4290.avito.ru\r\nweb4291.avito.ru\r\nweb4292.avito.ru\r\nweb4293.avito.ru\r\nweb4294.avito.ru\r\nweb4295.avito.ru\r\nweb4296.avito.ru\r\nweb4297.avito.ru\r\nweb4298.avito.ru\r\nweb4299.avito.ru\r\nweb42j.yandex.ru\r\nweb42o.yandex.ru\r\nweb43.avito.ru\r\nweb4300.avito.ru\r\nweb4300.vk.com\r\nweb4301.avito.ru\r\nweb4302.avito.ru\r\nweb4303.avito.ru\r\nweb4304.avito.ru\r\nweb4305.avito.ru\r\nweb4306.avito.ru\r\nweb4307.avito.ru\r\nweb4308.avito.ru\r\nweb4309.avito.ru\r\nweb4310.avito.ru\r\nweb4310.vk.com\r\nweb4311.avito.ru\r\nweb4312.avito.ru\r\nweb4313.avito.ru\r\nweb4314.avito.ru\r\nweb4315.avito.ru\r\nweb4316.avito.ru\r\nweb4317.avito.ru\r\nweb4318.avito.ru\r\nweb4319.avito.ru\r\nweb4320.avito.ru\r\nweb4320.vk.com\r\nweb4321.avito.ru\r\nweb4322.avito.ru\r\nweb4323.avito.ru\r\nweb4324.avito.ru\r\nweb4325.avito.ru\r\nweb4326.avito.ru\r\nweb4327.avito.ru\r\nweb4328.avito.ru\r\nweb4329.avito.ru\r\nweb4330.avito.ru\r\nweb4330.vk.com\r\nweb4331.avito.ru\r\nweb4332.avito.ru\r\nweb4333.avito.ru\r\nweb4334.avito.ru\r\nweb4335.avito.ru\r\nweb4336.avito.ru\r\nweb4337.avito.ru\r\nweb4338.avito.ru\r\nweb4339.avito.ru\r\nweb4340.avito.ru\r\nweb4340.vk.com\r\nweb4341.avito.ru\r\nweb4342.avito.ru\r\nweb4343.avito.ru\r\nweb4344.avito.ru\r\nweb4345.avito.ru\r\nweb4346.avito.ru\r\nweb4347.avito.ru\r\nweb4348.avito.ru\r\nweb4349.avito.ru\r\nweb4350.avito.ru\r\nweb4351.avito.ru\r\nweb4352.avito.ru\r\nweb4353.avito.ru\r\nweb4354.avito.ru\r\nweb4355.avito.ru\r\nweb4356.avito.ru\r\nweb4357.avito.ru\r\nweb4358.avito.ru\r\nweb4359.avito.ru\r\nweb4360.avito.ru\r\nweb4361.avito.ru\r\nweb4362.avito.ru\r\nweb4363.avito.ru\r\nweb4364.avito.ru\r\nweb4365.avito.ru\r\nweb4366.avito.ru\r\nweb4367.avito.ru\r\nweb4368.avito.ru\r\nweb4369.avito.ru\r\nweb4370.avito.ru\r\nweb4371.avito.ru\r\nweb4372.avito.ru\r\nweb4373.avito.ru\r\nweb4374.avito.ru\r\nweb4375.avito.ru\r\nweb4376.avito.ru\r\nweb4377.avito.ru\r\nweb4378.avito.ru\r\nweb4379.avito.ru\r\nweb4380.avito.ru\r\nweb4381.avito.ru\r\nweb4382.avito.ru\r\nweb4383.avito.ru\r\nweb4384.avito.ru\r\nweb4385.avito.ru\r\nweb4386.avito.ru\r\nweb4387.avito.ru\r\nweb4388.avito.ru\r\nweb4389.avito.ru\r\nweb4390.avito.ru\r\nweb4391.avito.ru\r\nweb4392.avito.ru\r\nweb4393.avito.ru\r\nweb4394.avito.ru\r\nweb4395.avito.ru\r\nweb4396.avito.ru\r\nweb4397.avito.ru\r\nweb4398.avito.ru\r\nweb4399.avito.ru\r\nweb43j.yandex.ru\r\nweb43o.yandex.ru\r\nweb44.avito.ru\r\nweb4400.avito.ru\r\nweb4400.vk.com\r\nweb4401.avito.ru\r\nweb4402.avito.ru\r\nweb4403.avito.ru\r\nweb4404.avito.ru\r\nweb4405.avito.ru\r\nweb4406.avito.ru\r\nweb4407.avito.ru\r\nweb4408.avito.ru\r\nweb4409.avito.ru\r\nweb4410.avito.ru\r\nweb4410.vk.com\r\nweb4411.avito.ru\r\nweb4412.avito.ru\r\nweb4413.avito.ru\r\nweb4414.avito.ru\r\nweb4415.avito.ru\r\nweb4416.avito.ru\r\nweb4417.avito.ru\r\nweb4418.avito.ru\r\nweb4419.avito.ru\r\nweb4420.avito.ru\r\nweb4420.vk.com\r\nweb4421.avito.ru\r\nweb4422.avito.ru\r\nweb4423.avito.ru\r\nweb4424.avito.ru\r\nweb4425.avito.ru\r\nweb4426.avito.ru\r\nweb4427.avito.ru\r\nweb4428.avito.ru\r\nweb4429.avito.ru\r\nweb4430.avito.ru\r\nweb4430.vk.com\r\nweb4431.avito.ru\r\nweb4432.avito.ru\r\nweb4433.avito.ru\r\nweb4434.avito.ru\r\nweb4435.avito.ru\r\nweb4436.avito.ru\r\nweb4437.avito.ru\r\nweb4438.avito.ru\r\nweb4439.avito.ru\r\nweb4440.avito.ru\r\nweb4440.vk.com\r\nweb4441.avito.ru\r\nweb4442.avito.ru\r\nweb4443.avito.ru\r\nweb4444.avito.ru\r\nweb4445.avito.ru\r\nweb4446.avito.ru\r\nweb4447.avito.ru\r\nweb4448.avito.ru\r\nweb4449.avito.ru\r\nweb4450.avito.ru\r\nweb44j.yandex.ru\r\nweb44o.yandex.ru\r\nweb4511.avito.ru\r\nweb4512.avito.ru\r\nweb4513.avito.ru\r\nweb4514.avito.ru\r\nweb4515.avito.ru\r\nweb4516.avito.ru\r\nweb4517.avito.ru\r\nweb4518.avito.ru\r\nweb4519.avito.ru\r\nweb4520.avito.ru\r\nweb4520.vk.com\r\nweb4521.avito.ru\r\nweb4522.avito.ru\r\nweb4523.avito.ru\r\nweb4524.avito.ru\r\nweb4525.avito.ru\r\nweb4526.avito.ru\r\nweb4527.avito.ru\r\nweb4528.avito.ru\r\nweb4529.avito.ru\r\nweb4530.avito.ru\r\nweb4530.vk.com\r\nweb4531.avito.ru\r\nweb4532.avito.ru\r\nweb4533.avito.ru\r\nweb4534.avito.ru\r\nweb4535.avito.ru\r\nweb4536.avito.ru\r\nweb4537.avito.ru\r\nweb4538.avito.ru\r\nweb4539.avito.ru\r\nweb4540.avito.ru\r\nweb4540.vk.com\r\nweb4541.avito.ru\r\nweb4542.avito.ru\r\nweb4543.avito.ru\r\nweb4544.avito.ru\r\nweb4545.avito.ru\r\nweb4546.avito.ru\r\nweb4547.avito.ru\r\nweb4548.avito.ru\r\nweb4549.avito.ru\r\nweb4550.avito.ru\r\nweb4551.avito.ru\r\nweb4552.avito.ru\r\nweb4553.avito.ru\r\nweb4554.avito.ru\r\nweb4555.avito.ru\r\nweb4556.avito.ru\r\nweb4557.avito.ru\r\nweb4558.avito.ru\r\nweb4559.avito.ru\r\nweb4560.avito.ru\r\nweb4561.avito.ru\r\nweb4562.avito.ru\r\nweb4563.avito.ru\r\nweb4564.avito.ru\r\nweb4565.avito.ru\r\nweb4566.avito.ru\r\nweb4567.avito.ru\r\nweb4568.avito.ru\r\nweb4569.avito.ru\r\nweb4570.avito.ru\r\nweb4571.avito.ru\r\nweb4572.avito.ru\r\nweb4573.avito.ru\r\nweb4574.avito.ru\r\nweb4575.avito.ru\r\nweb4576.avito.ru\r\nweb4577.avito.ru\r\nweb4578.avito.ru\r\nweb4579.avito.ru\r\nweb4580.avito.ru\r\nweb4581.avito.ru\r\nweb4582.avito.ru\r\nweb4583.avito.ru\r\nweb4584.avito.ru\r\nweb4585.avito.ru\r\nweb4586.avito.ru\r\nweb4587.avito.ru\r\nweb4588.avito.ru\r\nweb4589.avito.ru\r\nweb4590.avito.ru\r\nweb4591.avito.ru\r\nweb4592.avito.ru\r\nweb4593.avito.ru\r\nweb4594.avito.ru\r\nweb4595.avito.ru\r\nweb4596.avito.ru\r\nweb4597.avito.ru\r\nweb4598.avito.ru\r\nweb4599.avito.ru\r\nweb45j.yandex.ru\r\nweb4600.avito.ru\r\nweb4600.vk.com\r\nweb4601.avito.ru\r\nweb4602.avito.ru\r\nweb4603.avito.ru\r\nweb4604.avito.ru\r\nweb4605.avito.ru\r\nweb4606.avito.ru\r\nweb4607.avito.ru\r\nweb4608.avito.ru\r\nweb4609.avito.ru\r\nweb4610.avito.ru\r\nweb4610.vk.com\r\nweb4611.avito.ru\r\nweb4612.avito.ru\r\nweb4613.avito.ru\r\nweb4614.avito.ru\r\nweb4615.avito.ru\r\nweb4616.avito.ru\r\nweb4617.avito.ru\r\nweb4618.avito.ru\r\nweb4619.avito.ru\r\nweb4620.avito.ru\r\nweb4620.vk.com\r\nweb4621.avito.ru\r\nweb4622.avito.ru\r\nweb4623.avito.ru\r\nweb4624.avito.ru\r\nweb4625.avito.ru\r\nweb4626.avito.ru\r\nweb4627.avito.ru\r\nweb4628.avito.ru\r\nweb4629.avito.ru\r\nweb4630.avito.ru\r\nweb4630.vk.com\r\nweb4631.avito.ru\r\nweb4632.avito.ru\r\nweb4633.avito.ru\r\nweb4634.avito.ru\r\nweb4635.avito.ru\r\nweb4636.avito.ru\r\nweb4637.avito.ru\r\nweb4638.avito.ru\r\nweb4639.avito.ru\r\nweb4640.avito.ru\r\nweb4640.vk.com\r\nweb4641.avito.ru\r\nweb4642.avito.ru\r\nweb4643.avito.ru\r\nweb4644.avito.ru\r\nweb4645.avito.ru\r\nweb4646.avito.ru\r\nweb4647.avito.ru\r\nweb4648.avito.ru\r\nweb4649.avito.ru\r\nweb4650.avito.ru\r\nweb4651.avito.ru\r\nweb4652.avito.ru\r\nweb4653.avito.ru\r\nweb4654.avito.ru\r\nweb4655.avito.ru\r\nweb4656.avito.ru\r\nweb4657.avito.ru\r\nweb4658.avito.ru\r\nweb4659.avito.ru\r\nweb4660.avito.ru\r\nweb4661.avito.ru\r\nweb4662.avito.ru\r\nweb4663.avito.ru\r\nweb4664.avito.ru\r\nweb4665.avito.ru\r\nweb4666.avito.ru\r\nweb4667.avito.ru\r\nweb4668.avito.ru\r\nweb4669.avito.ru\r\nweb4670.avito.ru\r\nweb4671.avito.ru\r\nweb4672.avito.ru\r\nweb4673.avito.ru\r\nweb4674.avito.ru\r\nweb4675.avito.ru\r\nweb4676.avito.ru\r\nweb4677.avito.ru\r\nweb4678.avito.ru\r\nweb4679.avito.ru\r\nweb4680.avito.ru\r\nweb4681.avito.ru\r\nweb4682.avito.ru\r\nweb4683.avito.ru\r\nweb4684.avito.ru\r\nweb4685.avito.ru\r\nweb4686.avito.ru\r\nweb4687.avito.ru\r\nweb4688.avito.ru\r\nweb4689.avito.ru\r\nweb4690.avito.ru\r\nweb4691.avito.ru\r\nweb4692.avito.ru\r\nweb4693.avito.ru\r\nweb4694.avito.ru\r\nweb4695.avito.ru\r\nweb4696.avito.ru\r\nweb4697.avito.ru\r\nweb4698.avito.ru\r\nweb4699.avito.ru\r\nweb46o.yandex.ru\r\nweb4700.avito.ru\r\nweb4700.vk.com\r\nweb4701.avito.ru\r\nweb4702.avito.ru\r\nweb4703.avito.ru\r\nweb4704.avito.ru\r\nweb4705.avito.ru\r\nweb4706.avito.ru\r\nweb4707.avito.ru\r\nweb4708.avito.ru\r\nweb4709.avito.ru\r\nweb4710.avito.ru\r\nweb4710.vk.com\r\nweb4711.avito.ru\r\nweb4712.avito.ru\r\nweb4713.avito.ru\r\nweb4714.avito.ru\r\nweb4715.avito.ru\r\nweb4716.avito.ru\r\nweb4717.avito.ru\r\nweb4718.avito.ru\r\nweb4719.avito.ru\r\nweb4720.avito.ru\r\nweb4721.avito.ru\r\nweb4722.avito.ru\r\nweb4723.avito.ru\r\nweb4724.avito.ru\r\nweb4725.avito.ru\r\nweb4726.avito.ru\r\nweb4727.avito.ru\r\nweb4728.avito.ru\r\nweb4729.avito.ru\r\nweb4730.avito.ru\r\nweb4730.vk.com\r\nweb4731.avito.ru\r\nweb4732.avito.ru\r\nweb4733.avito.ru\r\nweb4734.avito.ru\r\nweb4735.avito.ru\r\nweb4736.avito.ru\r\nweb4737.avito.ru\r\nweb4738.avito.ru\r\nweb4739.avito.ru\r\nweb4740.avito.ru\r\nweb4740.vk.com\r\nweb4741.avito.ru\r\nweb4742.avito.ru\r\nweb4743.avito.ru\r\nweb4744.avito.ru\r\nweb4745.avito.ru\r\nweb4746.avito.ru\r\nweb4747.avito.ru\r\nweb4748.avito.ru\r\nweb4749.avito.ru\r\nweb4750.avito.ru\r\nweb47o.yandex.ru\r\nweb4811.avito.ru\r\nweb4812.avito.ru\r\nweb4813.avito.ru\r\nweb4814.avito.ru\r\nweb4815.avito.ru\r\nweb4816.avito.ru\r\nweb4817.avito.ru\r\nweb4818.avito.ru\r\nweb4819.avito.ru\r\nweb4820.avito.ru\r\nweb4820.vk.com\r\nweb4821.avito.ru\r\nweb4822.avito.ru\r\nweb4823.avito.ru\r\nweb4824.avito.ru\r\nweb4825.avito.ru\r\nweb4826.avito.ru\r\nweb4827.avito.ru\r\nweb4828.avito.ru\r\nweb4829.avito.ru\r\nweb4830.avito.ru\r\nweb4830.vk.com\r\nweb4831.avito.ru\r\nweb4832.avito.ru\r\nweb4833.avito.ru\r\nweb4834.avito.ru\r\nweb4835.avito.ru\r\nweb4836.avito.ru\r\nweb4837.avito.ru\r\nweb4838.avito.ru\r\nweb4839.avito.ru\r\nweb4840.avito.ru\r\nweb4840.vk.com\r\nweb4841.avito.ru\r\nweb4842.avito.ru\r\nweb4843.avito.ru\r\nweb4844.avito.ru\r\nweb4845.avito.ru\r\nweb4846.avito.ru\r\nweb4847.avito.ru\r\nweb4848.avito.ru\r\nweb4849.avito.ru\r\nweb4850.avito.ru\r\nweb4851.avito.ru\r\nweb4852.avito.ru\r\nweb4853.avito.ru\r\nweb4854.avito.ru\r\nweb4855.avito.ru\r\nweb4856.avito.ru\r\nweb4857.avito.ru\r\nweb4858.avito.ru\r\nweb4859.avito.ru\r\nweb4860.avito.ru\r\nweb4861.avito.ru\r\nweb4862.avito.ru\r\nweb4863.avito.ru\r\nweb4864.avito.ru\r\nweb4865.avito.ru\r\nweb4866.avito.ru\r\nweb4867.avito.ru\r\nweb4868.avito.ru\r\nweb4869.avito.ru\r\nweb4870.avito.ru\r\nweb4871.avito.ru\r\nweb4872.avito.ru\r\nweb4873.avito.ru\r\nweb4874.avito.ru\r\nweb4875.avito.ru\r\nweb4876.avito.ru\r\nweb4877.avito.ru\r\nweb4878.avito.ru\r\nweb4879.avito.ru\r\nweb4880.avito.ru\r\nweb4881.avito.ru\r\nweb4882.avito.ru\r\nweb4883.avito.ru\r\nweb4884.avito.ru\r\nweb4885.avito.ru\r\nweb4886.avito.ru\r\nweb4887.avito.ru\r\nweb4888.avito.ru\r\nweb4889.avito.ru\r\nweb4890.avito.ru\r\nweb4891.avito.ru\r\nweb4892.avito.ru\r\nweb4893.avito.ru\r\nweb4894.avito.ru\r\nweb4895.avito.ru\r\nweb4896.avito.ru\r\nweb4897.avito.ru\r\nweb4898.avito.ru\r\nweb4899.avito.ru\r\nweb48o.yandex.ru\r\nweb4900.avito.ru\r\nweb4900.vk.com\r\nweb4901.avito.ru\r\nweb4902.avito.ru\r\nweb4903.avito.ru\r\nweb4904.avito.ru\r\nweb4905.avito.ru\r\nweb4906.avito.ru\r\nweb4907.avito.ru\r\nweb4908.avito.ru\r\nweb4909.avito.ru\r\nweb4910.avito.ru\r\nweb4910.vk.com\r\nweb4911.avito.ru\r\nweb4912.avito.ru\r\nweb4913.avito.ru\r\nweb4914.avito.ru\r\nweb4915.avito.ru\r\nweb4916.avito.ru\r\nweb4917.avito.ru\r\nweb4918.avito.ru\r\nweb4919.avito.ru\r\nweb4920.avito.ru\r\nweb4920.vk.com\r\nweb4921.avito.ru\r\nweb4922.avito.ru\r\nweb4923.avito.ru\r\nweb4924.avito.ru\r\nweb4925.avito.ru\r\nweb4926.avito.ru\r\nweb4927.avito.ru\r\nweb4928.avito.ru\r\nweb4929.avito.ru\r\nweb4930.avito.ru\r\nweb4930.vk.com\r\nweb4931.avito.ru\r\nweb4932.avito.ru\r\nweb4933.avito.ru\r\nweb4934.avito.ru\r\nweb4935.avito.ru\r\nweb4936.avito.ru\r\nweb4937.avito.ru\r\nweb4938.avito.ru\r\nweb4939.avito.ru\r\nweb4940.avito.ru\r\nweb4940.vk.com\r\nweb4941.avito.ru\r\nweb4942.avito.ru\r\nweb4943.avito.ru\r\nweb4944.avito.ru\r\nweb4945.avito.ru\r\nweb4946.avito.ru\r\nweb4947.avito.ru\r\nweb4948.avito.ru\r\nweb4949.avito.ru\r\nweb4950.avito.ru\r\nweb4951.avito.ru\r\nweb4952.avito.ru\r\nweb4953.avito.ru\r\nweb4954.avito.ru\r\nweb4955.avito.ru\r\nweb4956.avito.ru\r\nweb4957.avito.ru\r\nweb4958.avito.ru\r\nweb4959.avito.ru\r\nweb4960.avito.ru\r\nweb4961.avito.ru\r\nweb4962.avito.ru\r\nweb4963.avito.ru\r\nweb4964.avito.ru\r\nweb4965.avito.ru\r\nweb4966.avito.ru\r\nweb4967.avito.ru\r\nweb4968.avito.ru\r\nweb4969.avito.ru\r\nweb4970.avito.ru\r\nweb4971.avito.ru\r\nweb4972.avito.ru\r\nweb4973.avito.ru\r\nweb4974.avito.ru\r\nweb4975.avito.ru\r\nweb4976.avito.ru\r\nweb4977.avito.ru\r\nweb4978.avito.ru\r\nweb4979.avito.ru\r\nweb4980.avito.ru\r\nweb4981.avito.ru\r\nweb4982.avito.ru\r\nweb4983.avito.ru\r\nweb4984.avito.ru\r\nweb4985.avito.ru\r\nweb4986.avito.ru\r\nweb4987.avito.ru\r\nweb4988.avito.ru\r\nweb4989.avito.ru\r\nweb4990.avito.ru\r\nweb4991.avito.ru\r\nweb4992.avito.ru\r\nweb4993.avito.ru\r\nweb4994.avito.ru\r\nweb4995.avito.ru\r\nweb4996.avito.ru\r\nweb4997.avito.ru\r\nweb4998.avito.ru\r\nweb4999.avito.ru\r\nweb4f.yandex.ru\r\nweb4g.yandex.ru\r\nweb5.avito.ru\r\nweb5.banki.ru\r\nweb5.online.sberbank.ru\r\nweb5000.avito.ru\r\nweb5000.vk.com\r\nweb5001.avito.ru\r\nweb5002.avito.ru\r\nweb5003.avito.ru\r\nweb5004.avito.ru\r\nweb5005.avito.ru\r\nweb5006.avito.ru\r\nweb5007.avito.ru\r\nweb5008.avito.ru\r\nweb5009.avito.ru\r\nweb5010.avito.ru\r\nweb5010.vk.com\r\nweb5011.avito.ru\r\nweb5012.avito.ru\r\nweb5013.avito.ru\r\nweb5014.avito.ru\r\nweb5015.avito.ru\r\nweb5016.avito.ru\r\nweb5017.avito.ru\r\nweb5018.avito.ru\r\nweb5019.avito.ru\r\nweb5020.avito.ru\r\nweb5021.avito.ru\r\nweb5022.avito.ru\r\nweb5023.avito.ru\r\nweb5024.avito.ru\r\nweb5025.avito.ru\r\nweb5026.avito.ru\r\nweb5027.avito.ru\r\nweb5028.avito.ru\r\nweb5029.avito.ru\r\nweb5030.avito.ru\r\nweb5030.vk.com\r\nweb5031.avito.ru\r\nweb5032.avito.ru\r\nweb5033.avito.ru\r\nweb5034.avito.ru\r\nweb5035.avito.ru\r\nweb5036.avito.ru\r\nweb5037.avito.ru\r\nweb5038.avito.ru\r\nweb5039.avito.ru\r\nweb5040.avito.ru\r\nweb5041.avito.ru\r\nweb5042.avito.ru\r\nweb5043.avito.ru\r\nweb5044.avito.ru\r\nweb5045.avito.ru\r\nweb5046.avito.ru\r\nweb5047.avito.ru\r\nweb5048.avito.ru\r\nweb5049.avito.ru\r\nweb5050.avito.ru\r\nweb50o.yandex.ru\r\nweb51.avito.ru\r\nweb5111.avito.ru\r\nweb5112.avito.ru\r\nweb5113.avito.ru\r\nweb5114.avito.ru\r\nweb5115.avito.ru\r\nweb5116.avito.ru\r\nweb5117.avito.ru\r\nweb5118.avito.ru\r\nweb5119.avito.ru\r\nweb5120.avito.ru\r\nweb5120.vk.com\r\nweb5121.avito.ru\r\nweb5122.avito.ru\r\nweb5123.avito.ru\r\nweb5124.avito.ru\r\nweb5125.avito.ru\r\nweb5126.avito.ru\r\nweb5127.avito.ru\r\nweb5128.avito.ru\r\nweb5129.avito.ru\r\nweb5130.avito.ru\r\nweb5130.vk.com\r\nweb5131.avito.ru\r\nweb5132.avito.ru\r\nweb5133.avito.ru\r\nweb5134.avito.ru\r\nweb5135.avito.ru\r\nweb5136.avito.ru\r\nweb5137.avito.ru\r\nweb5138.avito.ru\r\nweb5139.avito.ru\r\nweb5140.avito.ru\r\nweb5140.vk.com\r\nweb5141.avito.ru\r\nweb5142.avito.ru\r\nweb5143.avito.ru\r\nweb5144.avito.ru\r\nweb5145.avito.ru\r\nweb5146.avito.ru\r\nweb5147.avito.ru\r\nweb5148.avito.ru\r\nweb5149.avito.ru\r\nweb5150.avito.ru\r\nweb5151.avito.ru\r\nweb5152.avito.ru\r\nweb5153.avito.ru\r\nweb5154.avito.ru\r\nweb5155.avito.ru\r\nweb5156.avito.ru\r\nweb5157.avito.ru\r\nweb5158.avito.ru\r\nweb5159.avito.ru\r\nweb5160.avito.ru\r\nweb5161.avito.ru\r\nweb5162.avito.ru\r\nweb5163.avito.ru\r\nweb5164.avito.ru\r\nweb5165.avito.ru\r\nweb5166.avito.ru\r\nweb5167.avito.ru\r\nweb5168.avito.ru\r\nweb5169.avito.ru\r\nweb5170.avito.ru\r\nweb5171.avito.ru\r\nweb5172.avito.ru\r\nweb5173.avito.ru\r\nweb5174.avito.ru\r\nweb5175.avito.ru\r\nweb5176.avito.ru\r\nweb5177.avito.ru\r\nweb5178.avito.ru\r\nweb5179.avito.ru\r\nweb5180.avito.ru\r\nweb5181.avito.ru\r\nweb5182.avito.ru\r\nweb5183.avito.ru\r\nweb5184.avito.ru\r\nweb5185.avito.ru\r\nweb5186.avito.ru\r\nweb5187.avito.ru\r\nweb5188.avito.ru\r\nweb5189.avito.ru\r\nweb5190.avito.ru\r\nweb5191.avito.ru\r\nweb5192.avito.ru\r\nweb5193.avito.ru\r\nweb5194.avito.ru\r\nweb5195.avito.ru\r\nweb5196.avito.ru\r\nweb5197.avito.ru\r\nweb5198.avito.ru\r\nweb5199.avito.ru\r\nweb51o.yandex.ru\r\nweb52.avito.ru\r\nweb5200.avito.ru\r\nweb5200.vk.com\r\nweb5201.avito.ru\r\nweb5202.avito.ru\r\nweb5203.avito.ru\r\nweb5204.avito.ru\r\nweb5205.avito.ru\r\nweb5206.avito.ru\r\nweb5207.avito.ru\r\nweb5208.avito.ru\r\nweb5209.avito.ru\r\nweb5210.avito.ru\r\nweb5210.vk.com\r\nweb5211.avito.ru\r\nweb5212.avito.ru\r\nweb5213.avito.ru\r\nweb5214.avito.ru\r\nweb5215.avito.ru\r\nweb5216.avito.ru\r\nweb5217.avito.ru\r\nweb5218.avito.ru\r\nweb5219.avito.ru\r\nweb5220.avito.ru\r\nweb5220.vk.com\r\nweb5221.avito.ru\r\nweb5222.avito.ru\r\nweb5223.avito.ru\r\nweb5224.avito.ru\r\nweb5225.avito.ru\r\nweb5226.avito.ru\r\nweb5227.avito.ru\r\nweb5228.avito.ru\r\nweb5229.avito.ru\r\nweb5230.avito.ru\r\nweb5230.vk.com\r\nweb5231.avito.ru\r\nweb5232.avito.ru\r\nweb5233.avito.ru\r\nweb5234.avito.ru\r\nweb5235.avito.ru\r\nweb5236.avito.ru\r\nweb5237.avito.ru\r\nweb5238.avito.ru\r\nweb5239.avito.ru\r\nweb5240.avito.ru\r\nweb5240.vk.com\r\nweb5241.avito.ru\r\nweb5242.avito.ru\r\nweb5243.avito.ru\r\nweb5244.avito.ru\r\nweb5245.avito.ru\r\nweb5246.avito.ru\r\nweb5247.avito.ru\r\nweb5248.avito.ru\r\nweb5249.avito.ru\r\nweb5250.avito.ru\r\nweb5251.avito.ru\r\nweb5252.avito.ru\r\nweb5253.avito.ru\r\nweb5254.avito.ru\r\nweb5255.avito.ru\r\nweb5256.avito.ru\r\nweb5257.avito.ru\r\nweb5258.avito.ru\r\nweb5259.avito.ru\r\nweb5260.avito.ru\r\nweb5261.avito.ru\r\nweb5262.avito.ru\r\nweb5263.avito.ru\r\nweb5264.avito.ru\r\nweb5265.avito.ru\r\nweb5266.avito.ru\r\nweb5267.avito.ru\r\nweb5268.avito.ru\r\nweb5269.avito.ru\r\nweb5270.avito.ru\r\nweb5271.avito.ru\r\nweb5272.avito.ru\r\nweb5273.avito.ru\r\nweb5274.avito.ru\r\nweb5275.avito.ru\r\nweb5276.avito.ru\r\nweb5277.avito.ru\r\nweb5278.avito.ru\r\nweb5279.avito.ru\r\nweb5280.avito.ru\r\nweb5281.avito.ru\r\nweb5282.avito.ru\r\nweb5283.avito.ru\r\nweb5284.avito.ru\r\nweb5285.avito.ru\r\nweb5286.avito.ru\r\nweb5287.avito.ru\r\nweb5288.avito.ru\r\nweb5289.avito.ru\r\nweb5290.avito.ru\r\nweb5291.avito.ru\r\nweb5292.avito.ru\r\nweb5293.avito.ru\r\nweb5294.avito.ru\r\nweb5295.avito.ru\r\nweb5296.avito.ru\r\nweb5297.avito.ru\r\nweb5298.avito.ru\r\nweb5299.avito.ru\r\nweb52o.yandex.ru\r\nweb53.avito.ru\r\nweb5300.avito.ru\r\nweb5300.vk.com\r\nweb5301.avito.ru\r\nweb5302.avito.ru\r\nweb5303.avito.ru\r\nweb5304.avito.ru\r\nweb5305.avito.ru\r\nweb5306.avito.ru\r\nweb5307.avito.ru\r\nweb5308.avito.ru\r\nweb5309.avito.ru\r\nweb5310.avito.ru\r\nweb5310.vk.com\r\nweb5311.avito.ru\r\nweb5312.avito.ru\r\nweb5313.avito.ru\r\nweb5314.avito.ru\r\nweb5315.avito.ru\r\nweb5316.avito.ru\r\nweb5317.avito.ru\r\nweb5318.avito.ru\r\nweb5319.avito.ru\r\nweb5320.avito.ru\r\nweb5320.vk.com\r\nweb5321.avito.ru\r\nweb5322.avito.ru\r\nweb5323.avito.ru\r\nweb5324.avito.ru\r\nweb5325.avito.ru\r\nweb5326.avito.ru\r\nweb5327.avito.ru\r\nweb5328.avito.ru\r\nweb5329.avito.ru\r\nweb5330.avito.ru\r\nweb5330.vk.com\r\nweb5331.avito.ru\r\nweb5332.avito.ru\r\nweb5333.avito.ru\r\nweb5334.avito.ru\r\nweb5335.avito.ru\r\nweb5336.avito.ru\r\nweb5337.avito.ru\r\nweb5338.avito.ru\r\nweb5339.avito.ru\r\nweb5340.avito.ru\r\nweb5340.vk.com\r\nweb5341.avito.ru\r\nweb5342.avito.ru\r\nweb5343.avito.ru\r\nweb5344.avito.ru\r\nweb5345.avito.ru\r\nweb5346.avito.ru\r\nweb5347.avito.ru\r\nweb5348.avito.ru\r\nweb5349.avito.ru\r\nweb5350.avito.ru\r\nweb53o.yandex.ru\r\nweb54.avito.ru\r\nweb5411.avito.ru\r\nweb5412.avito.ru\r\nweb5413.avito.ru\r\nweb5414.avito.ru\r\nweb5415.avito.ru\r\nweb5416.avito.ru\r\nweb5417.avito.ru\r\nweb5418.avito.ru\r\nweb5419.avito.ru\r\nweb5420.avito.ru\r\nweb5420.vk.com\r\nweb5421.avito.ru\r\nweb5422.avito.ru\r\nweb5423.avito.ru\r\nweb5424.avito.ru\r\nweb5425.avito.ru\r\nweb5426.avito.ru\r\nweb5427.avito.ru\r\nweb5428.avito.ru\r\nweb5429.avito.ru\r\nweb5430.avito.ru\r\nweb5430.vk.com\r\nweb5431.avito.ru\r\nweb5432.avito.ru\r\nweb5433.avito.ru\r\nweb5434.avito.ru\r\nweb5435.avito.ru\r\nweb5436.avito.ru\r\nweb5437.avito.ru\r\nweb5438.avito.ru\r\nweb5439.avito.ru\r\nweb5440.avito.ru\r\nweb5440.vk.com\r\nweb5441.avito.ru\r\nweb5442.avito.ru\r\nweb5443.avito.ru\r\nweb5444.avito.ru\r\nweb5445.avito.ru\r\nweb5446.avito.ru\r\nweb5447.avito.ru\r\nweb5448.avito.ru\r\nweb5449.avito.ru\r\nweb5450.avito.ru\r\nweb5451.avito.ru\r\nweb5452.avito.ru\r\nweb5453.avito.ru\r\nweb5454.avito.ru\r\nweb5455.avito.ru\r\nweb5456.avito.ru\r\nweb5457.avito.ru\r\nweb5458.avito.ru\r\nweb5459.avito.ru\r\nweb5460.avito.ru\r\nweb5461.avito.ru\r\nweb5462.avito.ru\r\nweb5463.avito.ru\r\nweb5464.avito.ru\r\nweb5465.avito.ru\r\nweb5466.avito.ru\r\nweb5467.avito.ru\r\nweb5468.avito.ru\r\nweb5469.avito.ru\r\nweb5470.avito.ru\r\nweb5471.avito.ru\r\nweb5472.avito.ru\r\nweb5473.avito.ru\r\nweb5474.avito.ru\r\nweb5475.avito.ru\r\nweb5476.avito.ru\r\nweb5477.avito.ru\r\nweb5478.avito.ru\r\nweb5479.avito.ru\r\nweb5480.avito.ru\r\nweb5481.avito.ru\r\nweb5482.avito.ru\r\nweb5483.avito.ru\r\nweb5484.avito.ru\r\nweb5485.avito.ru\r\nweb5486.avito.ru\r\nweb5487.avito.ru\r\nweb5488.avito.ru\r\nweb5489.avito.ru\r\nweb5490.avito.ru\r\nweb5491.avito.ru\r\nweb5492.avito.ru\r\nweb5493.avito.ru\r\nweb5494.avito.ru\r\nweb5495.avito.ru\r\nweb5496.avito.ru\r\nweb5497.avito.ru\r\nweb5498.avito.ru\r\nweb5499.avito.ru\r\nweb54o.yandex.ru\r\nweb5500.avito.ru\r\nweb5500.vk.com\r\nweb5501.avito.ru\r\nweb5502.avito.ru\r\nweb5503.avito.ru\r\nweb5504.avito.ru\r\nweb5505.avito.ru\r\nweb5506.avito.ru\r\nweb5507.avito.ru\r\nweb5508.avito.ru\r\nweb5509.avito.ru\r\nweb5510.avito.ru\r\nweb5510.vk.com\r\nweb5511.avito.ru\r\nweb5512.avito.ru\r\nweb5513.avito.ru\r\nweb5514.avito.ru\r\nweb5515.avito.ru\r\nweb5516.avito.ru\r\nweb5517.avito.ru\r\nweb5518.avito.ru\r\nweb5519.avito.ru\r\nweb5520.avito.ru\r\nweb5520.vk.com\r\nweb5521.avito.ru\r\nweb5522.avito.ru\r\nweb5523.avito.ru\r\nweb5524.avito.ru\r\nweb5525.avito.ru\r\nweb5526.avito.ru\r\nweb5527.avito.ru\r\nweb5528.avito.ru\r\nweb5529.avito.ru\r\nweb5530.avito.ru\r\nweb5530.vk.com\r\nweb5531.avito.ru\r\nweb5532.avito.ru\r\nweb5533.avito.ru\r\nweb5534.avito.ru\r\nweb5535.avito.ru\r\nweb5536.avito.ru\r\nweb5537.avito.ru\r\nweb5538.avito.ru\r\nweb5539.avito.ru\r\nweb5540.avito.ru\r\nweb5540.vk.com\r\nweb5541.avito.ru\r\nweb5542.avito.ru\r\nweb5543.avito.ru\r\nweb5544.avito.ru\r\nweb5545.avito.ru\r\nweb5546.avito.ru\r\nweb5547.avito.ru\r\nweb5548.avito.ru\r\nweb5549.avito.ru\r\nweb5550.avito.ru\r\nweb5551.avito.ru\r\nweb5552.avito.ru\r\nweb5553.avito.ru\r\nweb5554.avito.ru\r\nweb5555.avito.ru\r\nweb5556.avito.ru\r\nweb5557.avito.ru\r\nweb5558.avito.ru\r\nweb5559.avito.ru\r\nweb5560.avito.ru\r\nweb5561.avito.ru\r\nweb5562.avito.ru\r\nweb5563.avito.ru\r\nweb5564.avito.ru\r\nweb5565.avito.ru\r\nweb5566.avito.ru\r\nweb5567.avito.ru\r\nweb5568.avito.ru\r\nweb5569.avito.ru\r\nweb5570.avito.ru\r\nweb5571.avito.ru\r\nweb5572.avito.ru\r\nweb5573.avito.ru\r\nweb5574.avito.ru\r\nweb5575.avito.ru\r\nweb5576.avito.ru\r\nweb5577.avito.ru\r\nweb5578.avito.ru\r\nweb5579.avito.ru\r\nweb5580.avito.ru\r\nweb5581.avito.ru\r\nweb5582.avito.ru\r\nweb5583.avito.ru\r\nweb5584.avito.ru\r\nweb5585.avito.ru\r\nweb5586.avito.ru\r\nweb5587.avito.ru\r\nweb5588.avito.ru\r\nweb5589.avito.ru\r\nweb5590.avito.ru\r\nweb5591.avito.ru\r\nweb5592.avito.ru\r\nweb5593.avito.ru\r\nweb5594.avito.ru\r\nweb5595.avito.ru\r\nweb5596.avito.ru\r\nweb5597.avito.ru\r\nweb5598.avito.ru\r\nweb5599.avito.ru\r\nweb55o.yandex.ru\r\nweb5600.avito.ru\r\nweb5600.vk.com\r\nweb5601.avito.ru\r\nweb5602.avito.ru\r\nweb5603.avito.ru\r\nweb5604.avito.ru\r\nweb5605.avito.ru\r\nweb5606.avito.ru\r\nweb5607.avito.ru\r\nweb5608.avito.ru\r\nweb5609.avito.ru\r\nweb5610.avito.ru\r\nweb5610.vk.com\r\nweb5611.avito.ru\r\nweb5612.avito.ru\r\nweb5613.avito.ru\r\nweb5614.avito.ru\r\nweb5615.avito.ru\r\nweb5616.avito.ru\r\nweb5617.avito.ru\r\nweb5618.avito.ru\r\nweb5619.avito.ru\r\nweb5620.avito.ru\r\nweb5620.vk.com\r\nweb5621.avito.ru\r\nweb5622.avito.ru\r\nweb5623.avito.ru\r\nweb5624.avito.ru\r\nweb5625.avito.ru\r\nweb5626.avito.ru\r\nweb5627.avito.ru\r\nweb5628.avito.ru\r\nweb5629.avito.ru\r\nweb5630.avito.ru\r\nweb5630.vk.com\r\nweb5631.avito.ru\r\nweb5632.avito.ru\r\nweb5633.avito.ru\r\nweb5634.avito.ru\r\nweb5635.avito.ru\r\nweb5636.avito.ru\r\nweb5637.avito.ru\r\nweb5638.avito.ru\r\nweb5639.avito.ru\r\nweb5640.avito.ru\r\nweb5640.vk.com\r\nweb5641.avito.ru\r\nweb5642.avito.ru\r\nweb5643.avito.ru\r\nweb5644.avito.ru\r\nweb5645.avito.ru\r\nweb5646.avito.ru\r\nweb5647.avito.ru\r\nweb5648.avito.ru\r\nweb5649.avito.ru\r\nweb5650.avito.ru\r\nweb56o.yandex.ru\r\nweb5711.avito.ru\r\nweb5712.avito.ru\r\nweb5713.avito.ru\r\nweb5714.avito.ru\r\nweb5715.avito.ru\r\nweb5716.avito.ru\r\nweb5717.avito.ru\r\nweb5718.avito.ru\r\nweb5719.avito.ru\r\nweb5720.avito.ru\r\nweb5720.vk.com\r\nweb5721.avito.ru\r\nweb5722.avito.ru\r\nweb5723.avito.ru\r\nweb5724.avito.ru\r\nweb5725.avito.ru\r\nweb5726.avito.ru\r\nweb5727.avito.ru\r\nweb5728.avito.ru\r\nweb5729.avito.ru\r\nweb5730.avito.ru\r\nweb5730.vk.com\r\nweb5731.avito.ru\r\nweb5732.avito.ru\r\nweb5733.avito.ru\r\nweb5734.avito.ru\r\nweb5735.avito.ru\r\nweb5736.avito.ru\r\nweb5737.avito.ru\r\nweb5738.avito.ru\r\nweb5739.avito.ru\r\nweb5740.avito.ru\r\nweb5740.vk.com\r\nweb5741.avito.ru\r\nweb5742.avito.ru\r\nweb5743.avito.ru\r\nweb5744.avito.ru\r\nweb5745.avito.ru\r\nweb5746.avito.ru\r\nweb5747.avito.ru\r\nweb5748.avito.ru\r\nweb5749.avito.ru\r\nweb5750.avito.ru\r\nweb5751.avito.ru\r\nweb5752.avito.ru\r\nweb5753.avito.ru\r\nweb5754.avito.ru\r\nweb5755.avito.ru\r\nweb5756.avito.ru\r\nweb5757.avito.ru\r\nweb5758.avito.ru\r\nweb5759.avito.ru\r\nweb5760.avito.ru\r\nweb5761.avito.ru\r\nweb5762.avito.ru\r\nweb5763.avito.ru\r\nweb5764.avito.ru\r\nweb5765.avito.ru\r\nweb5766.avito.ru\r\nweb5767.avito.ru\r\nweb5768.avito.ru\r\nweb5769.avito.ru\r\nweb5770.avito.ru\r\nweb5771.avito.ru\r\nweb5772.avito.ru\r\nweb5773.avito.ru\r\nweb5774.avito.ru\r\nweb5775.avito.ru\r\nweb5776.avito.ru\r\nweb5777.avito.ru\r\nweb5778.avito.ru\r\nweb5779.avito.ru\r\nweb5780.avito.ru\r\nweb5781.avito.ru\r\nweb5782.avito.ru\r\nweb5783.avito.ru\r\nweb5784.avito.ru\r\nweb5785.avito.ru\r\nweb5786.avito.ru\r\nweb5787.avito.ru\r\nweb5788.avito.ru\r\nweb5789.avito.ru\r\nweb5790.avito.ru\r\nweb5791.avito.ru\r\nweb5792.avito.ru\r\nweb5793.avito.ru\r\nweb5794.avito.ru\r\nweb5795.avito.ru\r\nweb5796.avito.ru\r\nweb5797.avito.ru\r\nweb5798.avito.ru\r\nweb5799.avito.ru\r\nweb57o.yandex.ru\r\nweb5800.avito.ru\r\nweb5800.vk.com\r\nweb5801.avito.ru\r\nweb5802.avito.ru\r\nweb5803.avito.ru\r\nweb5804.avito.ru\r\nweb5805.avito.ru\r\nweb5806.avito.ru\r\nweb5807.avito.ru\r\nweb5808.avito.ru\r\nweb5809.avito.ru\r\nweb5810.avito.ru\r\nweb5810.vk.com\r\nweb5811.avito.ru\r\nweb5812.avito.ru\r\nweb5813.avito.ru\r\nweb5814.avito.ru\r\nweb5815.avito.ru\r\nweb5816.avito.ru\r\nweb5817.avito.ru\r\nweb5818.avito.ru\r\nweb5819.avito.ru\r\nweb5820.avito.ru\r\nweb5820.vk.com\r\nweb5821.avito.ru\r\nweb5822.avito.ru\r\nweb5823.avito.ru\r\nweb5824.avito.ru\r\nweb5825.avito.ru\r\nweb5826.avito.ru\r\nweb5827.avito.ru\r\nweb5828.avito.ru\r\nweb5829.avito.ru\r\nweb5830.avito.ru\r\nweb5831.avito.ru\r\nweb5832.avito.ru\r\nweb5833.avito.ru\r\nweb5834.avito.ru\r\nweb5835.avito.ru\r\nweb5836.avito.ru\r\nweb5837.avito.ru\r\nweb5838.avito.ru\r\nweb5839.avito.ru\r\nweb5840.avito.ru\r\nweb5840.vk.com\r\nweb5841.avito.ru\r\nweb5842.avito.ru\r\nweb5843.avito.ru\r\nweb5844.avito.ru\r\nweb5845.avito.ru\r\nweb5846.avito.ru\r\nweb5847.avito.ru\r\nweb5848.avito.ru\r\nweb5849.avito.ru\r\nweb5850.avito.ru\r\nweb5851.avito.ru\r\nweb5852.avito.ru\r\nweb5853.avito.ru\r\nweb5854.avito.ru\r\nweb5855.avito.ru\r\nweb5856.avito.ru\r\nweb5857.avito.ru\r\nweb5858.avito.ru\r\nweb5859.avito.ru\r\nweb5860.avito.ru\r\nweb5861.avito.ru\r\nweb5862.avito.ru\r\nweb5863.avito.ru\r\nweb5864.avito.ru\r\nweb5865.avito.ru\r\nweb5866.avito.ru\r\nweb5867.avito.ru\r\nweb5868.avito.ru\r\nweb5869.avito.ru\r\nweb5870.avito.ru\r\nweb5871.avito.ru\r\nweb5872.avito.ru\r\nweb5873.avito.ru\r\nweb5874.avito.ru\r\nweb5875.avito.ru\r\nweb5876.avito.ru\r\nweb5877.avito.ru\r\nweb5878.avito.ru\r\nweb5879.avito.ru\r\nweb5880.avito.ru\r\nweb5881.avito.ru\r\nweb5882.avito.ru\r\nweb5883.avito.ru\r\nweb5884.avito.ru\r\nweb5885.avito.ru\r\nweb5886.avito.ru\r\nweb5887.avito.ru\r\nweb5888.avito.ru\r\nweb5889.avito.ru\r\nweb5890.avito.ru\r\nweb5891.avito.ru\r\nweb5892.avito.ru\r\nweb5893.avito.ru\r\nweb5894.avito.ru\r\nweb5895.avito.ru\r\nweb5896.avito.ru\r\nweb5897.avito.ru\r\nweb5898.avito.ru\r\nweb5899.avito.ru\r\nweb58o.yandex.ru\r\nweb5900.avito.ru\r\nweb5900.vk.com\r\nweb5901.avito.ru\r\nweb5902.avito.ru\r\nweb5903.avito.ru\r\nweb5904.avito.ru\r\nweb5905.avito.ru\r\nweb5906.avito.ru\r\nweb5907.avito.ru\r\nweb5908.avito.ru\r\nweb5909.avito.ru\r\nweb5910.avito.ru\r\nweb5910.vk.com\r\nweb5911.avito.ru\r\nweb5912.avito.ru\r\nweb5913.avito.ru\r\nweb5914.avito.ru\r\nweb5915.avito.ru\r\nweb5916.avito.ru\r\nweb5917.avito.ru\r\nweb5918.avito.ru\r\nweb5919.avito.ru\r\nweb5920.avito.ru\r\nweb5920.vk.com\r\nweb5921.avito.ru\r\nweb5922.avito.ru\r\nweb5923.avito.ru\r\nweb5924.avito.ru\r\nweb5925.avito.ru\r\nweb5926.avito.ru\r\nweb5927.avito.ru\r\nweb5928.avito.ru\r\nweb5929.avito.ru\r\nweb5930.avito.ru\r\nweb5930.vk.com\r\nweb5931.avito.ru\r\nweb5932.avito.ru\r\nweb5933.avito.ru\r\nweb5934.avito.ru\r\nweb5935.avito.ru\r\nweb5936.avito.ru\r\nweb5937.avito.ru\r\nweb5938.avito.ru\r\nweb5939.avito.ru\r\nweb5940.avito.ru\r\nweb5940.vk.com\r\nweb5941.avito.ru\r\nweb5942.avito.ru\r\nweb5943.avito.ru\r\nweb5944.avito.ru\r\nweb5945.avito.ru\r\nweb5946.avito.ru\r\nweb5947.avito.ru\r\nweb5948.avito.ru\r\nweb5949.avito.ru\r\nweb5950.avito.ru\r\nweb59o.yandex.ru\r\nweb5f.yandex.ru\r\nweb5g.yandex.ru\r\nweb6-qa.yandex.ru\r\nweb6.avito.ru\r\nweb6.online.sberbank.ru\r\nweb6011.avito.ru\r\nweb6012.avito.ru\r\nweb6013.avito.ru\r\nweb6014.avito.ru\r\nweb6015.avito.ru\r\nweb6016.avito.ru\r\nweb6017.avito.ru\r\nweb6018.avito.ru\r\nweb6019.avito.ru\r\nweb6020.avito.ru\r\nweb6020.vk.com\r\nweb6021.avito.ru\r\nweb6022.avito.ru\r\nweb6023.avito.ru\r\nweb6024.avito.ru\r\nweb6025.avito.ru\r\nweb6026.avito.ru\r\nweb6027.avito.ru\r\nweb6028.avito.ru\r\nweb6029.avito.ru\r\nweb6030.avito.ru\r\nweb6030.vk.com\r\nweb6031.avito.ru\r\nweb6032.avito.ru\r\nweb6033.avito.ru\r\nweb6034.avito.ru\r\nweb6035.avito.ru\r\nweb6036.avito.ru\r\nweb6037.avito.ru\r\nweb6038.avito.ru\r\nweb6039.avito.ru\r\nweb6040.avito.ru\r\nweb6040.vk.com\r\nweb6041.avito.ru\r\nweb6042.avito.ru\r\nweb6043.avito.ru\r\nweb6044.avito.ru\r\nweb6045.avito.ru\r\nweb6046.avito.ru\r\nweb6047.avito.ru\r\nweb6048.avito.ru\r\nweb6049.avito.ru\r\nweb6050.avito.ru\r\nweb6051.avito.ru\r\nweb6052.avito.ru\r\nweb6053.avito.ru\r\nweb6054.avito.ru\r\nweb6055.avito.ru\r\nweb6056.avito.ru\r\nweb6057.avito.ru\r\nweb6058.avito.ru\r\nweb6059.avito.ru\r\nweb6060.avito.ru\r\nweb6061.avito.ru\r\nweb6062.avito.ru\r\nweb6063.avito.ru\r\nweb6064.avito.ru\r\nweb6065.avito.ru\r\nweb6066.avito.ru\r\nweb6067.avito.ru\r\nweb6068.avito.ru\r\nweb6069.avito.ru\r\nweb6070.avito.ru\r\nweb6071.avito.ru\r\nweb6072.avito.ru\r\nweb6073.avito.ru\r\nweb6074.avito.ru\r\nweb6075.avito.ru\r\nweb6076.avito.ru\r\nweb6077.avito.ru\r\nweb6078.avito.ru\r\nweb6079.avito.ru\r\nweb6080.avito.ru\r\nweb6081.avito.ru\r\nweb6082.avito.ru\r\nweb6083.avito.ru\r\nweb6084.avito.ru\r\nweb6085.avito.ru\r\nweb6086.avito.ru\r\nweb6087.avito.ru\r\nweb6088.avito.ru\r\nweb6089.avito.ru\r\nweb6090.avito.ru\r\nweb6091.avito.ru\r\nweb6092.avito.ru\r\nweb6093.avito.ru\r\nweb6094.avito.ru\r\nweb6095.avito.ru\r\nweb6096.avito.ru\r\nweb6097.avito.ru\r\nweb6098.avito.ru\r\nweb6099.avito.ru\r\nweb60o.yandex.ru\r\nweb6100.avito.ru\r\nweb6100.vk.com\r\nweb6101.avito.ru\r\nweb6102.avito.ru\r\nweb6103.avito.ru\r\nweb6104.avito.ru\r\nweb6105.avito.ru\r\nweb6106.avito.ru\r\nweb6107.avito.ru\r\nweb6108.avito.ru\r\nweb6109.avito.ru\r\nweb6110.avito.ru\r\nweb6110.vk.com\r\nweb6111.avito.ru\r\nweb6112.avito.ru\r\nweb6113.avito.ru\r\nweb6114.avito.ru\r\nweb6115.avito.ru\r\nweb6116.avito.ru\r\nweb6117.avito.ru\r\nweb6118.avito.ru\r\nweb6119.avito.ru\r\nweb6120.avito.ru\r\nweb6120.vk.com\r\nweb6121.avito.ru\r\nweb6122.avito.ru\r\nweb6123.avito.ru\r\nweb6124.avito.ru\r\nweb6125.avito.ru\r\nweb6126.avito.ru\r\nweb6127.avito.ru\r\nweb6128.avito.ru\r\nweb6129.avito.ru\r\nweb6130.avito.ru\r\nweb6130.vk.com\r\nweb6131.avito.ru\r\nweb6132.avito.ru\r\nweb6133.avito.ru\r\nweb6134.avito.ru\r\nweb6135.avito.ru\r\nweb6136.avito.ru\r\nweb6137.avito.ru\r\nweb6138.avito.ru\r\nweb6139.avito.ru\r\nweb6140.avito.ru\r\nweb6140.vk.com\r\nweb6141.avito.ru\r\nweb6142.avito.ru\r\nweb6143.avito.ru\r\nweb6144.avito.ru\r\nweb6145.avito.ru\r\nweb6146.avito.ru\r\nweb6147.avito.ru\r\nweb6148.avito.ru\r\nweb6149.avito.ru\r\nweb6150.avito.ru\r\nweb6151.avito.ru\r\nweb6152.avito.ru\r\nweb6153.avito.ru\r\nweb6154.avito.ru\r\nweb6155.avito.ru\r\nweb6156.avito.ru\r\nweb6157.avito.ru\r\nweb6158.avito.ru\r\nweb6159.avito.ru\r\nweb6160.avito.ru\r\nweb6161.avito.ru\r\nweb6162.avito.ru\r\nweb6163.avito.ru\r\nweb6164.avito.ru\r\nweb6165.avito.ru\r\nweb6166.avito.ru\r\nweb6167.avito.ru\r\nweb6168.avito.ru\r\nweb6169.avito.ru\r\nweb6170.avito.ru\r\nweb6171.avito.ru\r\nweb6172.avito.ru\r\nweb6173.avito.ru\r\nweb6174.avito.ru\r\nweb6175.avito.ru\r\nweb6176.avito.ru\r\nweb6177.avito.ru\r\nweb6178.avito.ru\r\nweb6179.avito.ru\r\nweb6180.avito.ru\r\nweb6181.avito.ru\r\nweb6182.avito.ru\r\nweb6183.avito.ru\r\nweb6184.avito.ru\r\nweb6185.avito.ru\r\nweb6186.avito.ru\r\nweb6187.avito.ru\r\nweb6188.avito.ru\r\nweb6189.avito.ru\r\nweb6190.avito.ru\r\nweb6191.avito.ru\r\nweb6192.avito.ru\r\nweb6193.avito.ru\r\nweb6194.avito.ru\r\nweb6195.avito.ru\r\nweb6196.avito.ru\r\nweb6197.avito.ru\r\nweb6198.avito.ru\r\nweb6199.avito.ru\r\nweb6200.avito.ru\r\nweb6200.vk.com\r\nweb6201.avito.ru\r\nweb6202.avito.ru\r\nweb6203.avito.ru\r\nweb6204.avito.ru\r\nweb6205.avito.ru\r\nweb6206.avito.ru\r\nweb6207.avito.ru\r\nweb6208.avito.ru\r\nweb6209.avito.ru\r\nweb6210.avito.ru\r\nweb6210.vk.com\r\nweb6211.avito.ru\r\nweb6212.avito.ru\r\nweb6213.avito.ru\r\nweb6214.avito.ru\r\nweb6215.avito.ru\r\nweb6216.avito.ru\r\nweb6217.avito.ru\r\nweb6218.avito.ru\r\nweb6219.avito.ru\r\nweb6220.avito.ru\r\nweb6220.vk.com\r\nweb6221.avito.ru\r\nweb6222.avito.ru\r\nweb6223.avito.ru\r\nweb6224.avito.ru\r\nweb6225.avito.ru\r\nweb6226.avito.ru\r\nweb6227.avito.ru\r\nweb6228.avito.ru\r\nweb6229.avito.ru\r\nweb6230.avito.ru\r\nweb6230.vk.com\r\nweb6231.avito.ru\r\nweb6232.avito.ru\r\nweb6233.avito.ru\r\nweb6234.avito.ru\r\nweb6235.avito.ru\r\nweb6236.avito.ru\r\nweb6237.avito.ru\r\nweb6238.avito.ru\r\nweb6239.avito.ru\r\nweb6240.avito.ru\r\nweb6240.vk.com\r\nweb6241.avito.ru\r\nweb6242.avito.ru\r\nweb6243.avito.ru\r\nweb6244.avito.ru\r\nweb6245.avito.ru\r\nweb6246.avito.ru\r\nweb6247.avito.ru\r\nweb6248.avito.ru\r\nweb6249.avito.ru\r\nweb6250.avito.ru\r\nweb6311.avito.ru\r\nweb6312.avito.ru\r\nweb6313.avito.ru\r\nweb6314.avito.ru\r\nweb6315.avito.ru\r\nweb6316.avito.ru\r\nweb6317.avito.ru\r\nweb6318.avito.ru\r\nweb6319.avito.ru\r\nweb6320.avito.ru\r\nweb6320.vk.com\r\nweb6321.avito.ru\r\nweb6322.avito.ru\r\nweb6323.avito.ru\r\nweb6324.avito.ru\r\nweb6325.avito.ru\r\nweb6326.avito.ru\r\nweb6327.avito.ru\r\nweb6328.avito.ru\r\nweb6329.avito.ru\r\nweb6330.avito.ru\r\nweb6330.vk.com\r\nweb6331.avito.ru\r\nweb6332.avito.ru\r\nweb6333.avito.ru\r\nweb6334.avito.ru\r\nweb6335.avito.ru\r\nweb6336.avito.ru\r\nweb6337.avito.ru\r\nweb6338.avito.ru\r\nweb6339.avito.ru\r\nweb6340.avito.ru\r\nweb6340.vk.com\r\nweb6341.avito.ru\r\nweb6342.avito.ru\r\nweb6343.avito.ru\r\nweb6344.avito.ru\r\nweb6345.avito.ru\r\nweb6346.avito.ru\r\nweb6347.avito.ru\r\nweb6348.avito.ru\r\nweb6349.avito.ru\r\nweb6350.avito.ru\r\nweb6351.avito.ru\r\nweb6352.avito.ru\r\nweb6353.avito.ru\r\nweb6354.avito.ru\r\nweb6355.avito.ru\r\nweb6356.avito.ru\r\nweb6357.avito.ru\r\nweb6358.avito.ru\r\nweb6359.avito.ru\r\nweb6360.avito.ru\r\nweb6361.avito.ru\r\nweb6362.avito.ru\r\nweb6363.avito.ru\r\nweb6364.avito.ru\r\nweb6365.avito.ru\r\nweb6366.avito.ru\r\nweb6367.avito.ru\r\nweb6368.avito.ru\r\nweb6369.avito.ru\r\nweb6370.avito.ru\r\nweb6371.avito.ru\r\nweb6372.avito.ru\r\nweb6373.avito.ru\r\nweb6374.avito.ru\r\nweb6375.avito.ru\r\nweb6376.avito.ru\r\nweb6377.avito.ru\r\nweb6378.avito.ru\r\nweb6379.avito.ru\r\nweb6380.avito.ru\r\nweb6381.avito.ru\r\nweb6382.avito.ru\r\nweb6383.avito.ru\r\nweb6384.avito.ru\r\nweb6385.avito.ru\r\nweb6386.avito.ru\r\nweb6387.avito.ru\r\nweb6388.avito.ru\r\nweb6389.avito.ru\r\nweb6390.avito.ru\r\nweb6391.avito.ru\r\nweb6392.avito.ru\r\nweb6393.avito.ru\r\nweb6394.avito.ru\r\nweb6395.avito.ru\r\nweb6396.avito.ru\r\nweb6397.avito.ru\r\nweb6398.avito.ru\r\nweb6399.avito.ru\r\nweb6400.avito.ru\r\nweb6400.vk.com\r\nweb6401.avito.ru\r\nweb6402.avito.ru\r\nweb6403.avito.ru\r\nweb6404.avito.ru\r\nweb6405.avito.ru\r\nweb6406.avito.ru\r\nweb6407.avito.ru\r\nweb6408.avito.ru\r\nweb6409.avito.ru\r\nweb6410.avito.ru\r\nweb6410.vk.com\r\nweb6411.avito.ru\r\nweb6412.avito.ru\r\nweb6413.avito.ru\r\nweb6414.avito.ru\r\nweb6415.avito.ru\r\nweb6416.avito.ru\r\nweb6417.avito.ru\r\nweb6418.avito.ru\r\nweb6419.avito.ru\r\nweb6420.avito.ru\r\nweb6420.vk.com\r\nweb6421.avito.ru\r\nweb6422.avito.ru\r\nweb6423.avito.ru\r\nweb6424.avito.ru\r\nweb6425.avito.ru\r\nweb6426.avito.ru\r\nweb6427.avito.ru\r\nweb6428.avito.ru\r\nweb6429.avito.ru\r\nweb6430.avito.ru\r\nweb6430.vk.com\r\nweb6431.avito.ru\r\nweb6432.avito.ru\r\nweb6433.avito.ru\r\nweb6434.avito.ru\r\nweb6435.avito.ru\r\nweb6436.avito.ru\r\nweb6437.avito.ru\r\nweb6438.avito.ru\r\nweb6439.avito.ru\r\nweb6440.avito.ru\r\nweb6440.vk.com\r\nweb6441.avito.ru\r\nweb6442.avito.ru\r\nweb6443.avito.ru\r\nweb6444.avito.ru\r\nweb6445.avito.ru\r\nweb6446.avito.ru\r\nweb6447.avito.ru\r\nweb6448.avito.ru\r\nweb6449.avito.ru\r\nweb6450.avito.ru\r\nweb6451.avito.ru\r\nweb6452.avito.ru\r\nweb6453.avito.ru\r\nweb6454.avito.ru\r\nweb6455.avito.ru\r\nweb6456.avito.ru\r\nweb6457.avito.ru\r\nweb6458.avito.ru\r\nweb6459.avito.ru\r\nweb6460.avito.ru\r\nweb6461.avito.ru\r\nweb6462.avito.ru\r\nweb6463.avito.ru\r\nweb6464.avito.ru\r\nweb6465.avito.ru\r\nweb6466.avito.ru\r\nweb6467.avito.ru\r\nweb6468.avito.ru\r\nweb6469.avito.ru\r\nweb6470.avito.ru\r\nweb6471.avito.ru\r\nweb6472.avito.ru\r\nweb6473.avito.ru\r\nweb6474.avito.ru\r\nweb6475.avito.ru\r\nweb6476.avito.ru\r\nweb6477.avito.ru\r\nweb6478.avito.ru\r\nweb6479.avito.ru\r\nweb6480.avito.ru\r\nweb6481.avito.ru\r\nweb6482.avito.ru\r\nweb6483.avito.ru\r\nweb6484.avito.ru\r\nweb6485.avito.ru\r\nweb6486.avito.ru\r\nweb6487.avito.ru\r\nweb6488.avito.ru\r\nweb6489.avito.ru\r\nweb6490.avito.ru\r\nweb6491.avito.ru\r\nweb6492.avito.ru\r\nweb6493.avito.ru\r\nweb6494.avito.ru\r\nweb6495.avito.ru\r\nweb6496.avito.ru\r\nweb6497.avito.ru\r\nweb6498.avito.ru\r\nweb6499.avito.ru\r\nweb6500.avito.ru\r\nweb6500.vk.com\r\nweb6501.avito.ru\r\nweb6502.avito.ru\r\nweb6503.avito.ru\r\nweb6504.avito.ru\r\nweb6505.avito.ru\r\nweb6506.avito.ru\r\nweb6507.avito.ru\r\nweb6508.avito.ru\r\nweb6509.avito.ru\r\nweb6510.avito.ru\r\nweb6510.vk.com\r\nweb6511.avito.ru\r\nweb6512.avito.ru\r\nweb6513.avito.ru\r\nweb6514.avito.ru\r\nweb6515.avito.ru\r\nweb6516.avito.ru\r\nweb6517.avito.ru\r\nweb6518.avito.ru\r\nweb6519.avito.ru\r\nweb6520.avito.ru\r\nweb6520.vk.com\r\nweb6521.avito.ru\r\nweb6522.avito.ru\r\nweb6523.avito.ru\r\nweb6524.avito.ru\r\nweb6525.avito.ru\r\nweb6526.avito.ru\r\nweb6527.avito.ru\r\nweb6528.avito.ru\r\nweb6529.avito.ru\r\nweb6530.avito.ru\r\nweb6530.vk.com\r\nweb6531.avito.ru\r\nweb6532.avito.ru\r\nweb6533.avito.ru\r\nweb6534.avito.ru\r\nweb6535.avito.ru\r\nweb6536.avito.ru\r\nweb6537.avito.ru\r\nweb6538.avito.ru\r\nweb6539.avito.ru\r\nweb6540.avito.ru\r\nweb6540.vk.com\r\nweb6541.avito.ru\r\nweb6542.avito.ru\r\nweb6543.avito.ru\r\nweb6544.avito.ru\r\nweb6545.avito.ru\r\nweb6546.avito.ru\r\nweb6547.avito.ru\r\nweb6548.avito.ru\r\nweb6549.avito.ru\r\nweb6550.avito.ru\r\nweb6611.avito.ru\r\nweb6612.avito.ru\r\nweb6613.avito.ru\r\nweb6614.avito.ru\r\nweb6615.avito.ru\r\nweb6616.avito.ru\r\nweb6617.avito.ru\r\nweb6618.avito.ru\r\nweb6619.avito.ru\r\nweb6620.avito.ru\r\nweb6620.vk.com\r\nweb6621.avito.ru\r\nweb6622.avito.ru\r\nweb6623.avito.ru\r\nweb6624.avito.ru\r\nweb6625.avito.ru\r\nweb6626.avito.ru\r\nweb6627.avito.ru\r\nweb6628.avito.ru\r\nweb6629.avito.ru\r\nweb6630.avito.ru\r\nweb6630.vk.com\r\nweb6631.avito.ru\r\nweb6632.avito.ru\r\nweb6633.avito.ru\r\nweb6634.avito.ru\r\nweb6635.avito.ru\r\nweb6636.avito.ru\r\nweb6637.avito.ru\r\nweb6638.avito.ru\r\nweb6639.avito.ru\r\nweb6640.avito.ru\r\nweb6641.avito.ru\r\nweb6642.avito.ru\r\nweb6643.avito.ru\r\nweb6644.avito.ru\r\nweb6645.avito.ru\r\nweb6646.avito.ru\r\nweb6647.avito.ru\r\nweb6648.avito.ru\r\nweb6649.avito.ru\r\nweb6650.avito.ru\r\nweb6651.avito.ru\r\nweb6652.avito.ru\r\nweb6653.avito.ru\r\nweb6654.avito.ru\r\nweb6655.avito.ru\r\nweb6656.avito.ru\r\nweb6657.avito.ru\r\nweb6658.avito.ru\r\nweb6659.avito.ru\r\nweb6660.avito.ru\r\nweb6661.avito.ru\r\nweb6662.avito.ru\r\nweb6663.avito.ru\r\nweb6664.avito.ru\r\nweb6665.avito.ru\r\nweb6666.avito.ru\r\nweb6667.avito.ru\r\nweb6668.avito.ru\r\nweb6669.avito.ru\r\nweb6670.avito.ru\r\nweb6671.avito.ru\r\nweb6672.avito.ru\r\nweb6673.avito.ru\r\nweb6674.avito.ru\r\nweb6675.avito.ru\r\nweb6676.avito.ru\r\nweb6677.avito.ru\r\nweb6678.avito.ru\r\nweb6679.avito.ru\r\nweb6680.avito.ru\r\nweb6681.avito.ru\r\nweb6682.avito.ru\r\nweb6683.avito.ru\r\nweb6684.avito.ru\r\nweb6685.avito.ru\r\nweb6686.avito.ru\r\nweb6687.avito.ru\r\nweb6688.avito.ru\r\nweb6689.avito.ru\r\nweb6690.avito.ru\r\nweb6691.avito.ru\r\nweb6692.avito.ru\r\nweb6693.avito.ru\r\nweb6694.avito.ru\r\nweb6695.avito.ru\r\nweb6696.avito.ru\r\nweb6697.avito.ru\r\nweb6698.avito.ru\r\nweb6699.avito.ru\r\nweb6700.avito.ru\r\nweb6700.vk.com\r\nweb6701.avito.ru\r\nweb6702.avito.ru\r\nweb6703.avito.ru\r\nweb6704.avito.ru\r\nweb6705.avito.ru\r\nweb6706.avito.ru\r\nweb6707.avito.ru\r\nweb6708.avito.ru\r\nweb6709.avito.ru\r\nweb6710.avito.ru\r\nweb6710.vk.com\r\nweb6711.avito.ru\r\nweb6712.avito.ru\r\nweb6713.avito.ru\r\nweb6714.avito.ru\r\nweb6715.avito.ru\r\nweb6716.avito.ru\r\nweb6717.avito.ru\r\nweb6718.avito.ru\r\nweb6719.avito.ru\r\nweb6720.avito.ru\r\nweb6720.vk.com\r\nweb6721.avito.ru\r\nweb6722.avito.ru\r\nweb6723.avito.ru\r\nweb6724.avito.ru\r\nweb6725.avito.ru\r\nweb6726.avito.ru\r\nweb6727.avito.ru\r\nweb6728.avito.ru\r\nweb6729.avito.ru\r\nweb6730.avito.ru\r\nweb6730.vk.com\r\nweb6731.avito.ru\r\nweb6732.avito.ru\r\nweb6733.avito.ru\r\nweb6734.avito.ru\r\nweb6735.avito.ru\r\nweb6736.avito.ru\r\nweb6737.avito.ru\r\nweb6738.avito.ru\r\nweb6739.avito.ru\r\nweb6740.avito.ru\r\nweb6740.vk.com\r\nweb6741.avito.ru\r\nweb6742.avito.ru\r\nweb6743.avito.ru\r\nweb6744.avito.ru\r\nweb6745.avito.ru\r\nweb6746.avito.ru\r\nweb6747.avito.ru\r\nweb6748.avito.ru\r\nweb6749.avito.ru\r\nweb6750.avito.ru\r\nweb6751.avito.ru\r\nweb6752.avito.ru\r\nweb6753.avito.ru\r\nweb6754.avito.ru\r\nweb6755.avito.ru\r\nweb6756.avito.ru\r\nweb6757.avito.ru\r\nweb6758.avito.ru\r\nweb6759.avito.ru\r\nweb6760.avito.ru\r\nweb6761.avito.ru\r\nweb6762.avito.ru\r\nweb6763.avito.ru\r\nweb6764.avito.ru\r\nweb6765.avito.ru\r\nweb6766.avito.ru\r\nweb6767.avito.ru\r\nweb6768.avito.ru\r\nweb6769.avito.ru\r\nweb6770.avito.ru\r\nweb6771.avito.ru\r\nweb6772.avito.ru\r\nweb6773.avito.ru\r\nweb6774.avito.ru\r\nweb6775.avito.ru\r\nweb6776.avito.ru\r\nweb6777.avito.ru\r\nweb6778.avito.ru\r\nweb6779.avito.ru\r\nweb6780.avito.ru\r\nweb6781.avito.ru\r\nweb6782.avito.ru\r\nweb6783.avito.ru\r\nweb6784.avito.ru\r\nweb6785.avito.ru\r\nweb6786.avito.ru\r\nweb6787.avito.ru\r\nweb6788.avito.ru\r\nweb6789.avito.ru\r\nweb6790.avito.ru\r\nweb6791.avito.ru\r\nweb6792.avito.ru\r\nweb6793.avito.ru\r\nweb6794.avito.ru\r\nweb6795.avito.ru\r\nweb6796.avito.ru\r\nweb6797.avito.ru\r\nweb6798.avito.ru\r\nweb6799.avito.ru\r\nweb6800.avito.ru\r\nweb6800.vk.com\r\nweb6801.avito.ru\r\nweb6802.avito.ru\r\nweb6803.avito.ru\r\nweb6804.avito.ru\r\nweb6805.avito.ru\r\nweb6806.avito.ru\r\nweb6807.avito.ru\r\nweb6808.avito.ru\r\nweb6809.avito.ru\r\nweb6810.avito.ru\r\nweb6810.vk.com\r\nweb6811.avito.ru\r\nweb6812.avito.ru\r\nweb6813.avito.ru\r\nweb6814.avito.ru\r\nweb6815.avito.ru\r\nweb6816.avito.ru\r\nweb6817.avito.ru\r\nweb6818.avito.ru\r\nweb6819.avito.ru\r\nweb6820.avito.ru\r\nweb6820.vk.com\r\nweb6821.avito.ru\r\nweb6822.avito.ru\r\nweb6823.avito.ru\r\nweb6824.avito.ru\r\nweb6825.avito.ru\r\nweb6826.avito.ru\r\nweb6827.avito.ru\r\nweb6828.avito.ru\r\nweb6829.avito.ru\r\nweb6830.avito.ru\r\nweb6830.vk.com\r\nweb6831.avito.ru\r\nweb6832.avito.ru\r\nweb6833.avito.ru\r\nweb6834.avito.ru\r\nweb6835.avito.ru\r\nweb6836.avito.ru\r\nweb6837.avito.ru\r\nweb6838.avito.ru\r\nweb6839.avito.ru\r\nweb6840.avito.ru\r\nweb6840.vk.com\r\nweb6841.avito.ru\r\nweb6842.avito.ru\r\nweb6843.avito.ru\r\nweb6844.avito.ru\r\nweb6845.avito.ru\r\nweb6846.avito.ru\r\nweb6847.avito.ru\r\nweb6848.avito.ru\r\nweb6849.avito.ru\r\nweb6850.avito.ru\r\nweb6f.yandex.ru\r\nweb6g.yandex.ru\r\nweb7.avito.ru\r\nweb7.online.sberbank.ru\r\nweb7211.avito.ru\r\nweb7212.avito.ru\r\nweb7213.avito.ru\r\nweb7214.avito.ru\r\nweb7215.avito.ru\r\nweb7216.avito.ru\r\nweb7217.avito.ru\r\nweb7218.avito.ru\r\nweb7219.avito.ru\r\nweb7220.avito.ru\r\nweb7220.vk.com\r\nweb7221.avito.ru\r\nweb7222.avito.ru\r\nweb7223.avito.ru\r\nweb7224.avito.ru\r\nweb7225.avito.ru\r\nweb7226.avito.ru\r\nweb7227.avito.ru\r\nweb7228.avito.ru\r\nweb7229.avito.ru\r\nweb7230.avito.ru\r\nweb7230.vk.com\r\nweb7231.avito.ru\r\nweb7232.avito.ru\r\nweb7233.avito.ru\r\nweb7234.avito.ru\r\nweb7235.avito.ru\r\nweb7236.avito.ru\r\nweb7237.avito.ru\r\nweb7238.avito.ru\r\nweb7239.avito.ru\r\nweb7240.avito.ru\r\nweb7240.vk.com\r\nweb7241.avito.ru\r\nweb7242.avito.ru\r\nweb7243.avito.ru\r\nweb7244.avito.ru\r\nweb7245.avito.ru\r\nweb7246.avito.ru\r\nweb7247.avito.ru\r\nweb7248.avito.ru\r\nweb7249.avito.ru\r\nweb7250.avito.ru\r\nweb7251.avito.ru\r\nweb7252.avito.ru\r\nweb7253.avito.ru\r\nweb7254.avito.ru\r\nweb7255.avito.ru\r\nweb7256.avito.ru\r\nweb7257.avito.ru\r\nweb7258.avito.ru\r\nweb7259.avito.ru\r\nweb7260.avito.ru\r\nweb7261.avito.ru\r\nweb7262.avito.ru\r\nweb7263.avito.ru\r\nweb7264.avito.ru\r\nweb7265.avito.ru\r\nweb7266.avito.ru\r\nweb7267.avito.ru\r\nweb7268.avito.ru\r\nweb7269.avito.ru\r\nweb7270.avito.ru\r\nweb7271.avito.ru\r\nweb7272.avito.ru\r\nweb7273.avito.ru\r\nweb7274.avito.ru\r\nweb7275.avito.ru\r\nweb7276.avito.ru\r\nweb7277.avito.ru\r\nweb7278.avito.ru\r\nweb7279.avito.ru\r\nweb7280.avito.ru\r\nweb7281.avito.ru\r\nweb7282.avito.ru\r\nweb7283.avito.ru\r\nweb7284.avito.ru\r\nweb7285.avito.ru\r\nweb7286.avito.ru\r\nweb7287.avito.ru\r\nweb7288.avito.ru\r\nweb7289.avito.ru\r\nweb7290.avito.ru\r\nweb7291.avito.ru\r\nweb7292.avito.ru\r\nweb7293.avito.ru\r\nweb7294.avito.ru\r\nweb7295.avito.ru\r\nweb7296.avito.ru\r\nweb7297.avito.ru\r\nweb7298.avito.ru\r\nweb7299.avito.ru\r\nweb7300.avito.ru\r\nweb7300.vk.com\r\nweb7301.avito.ru\r\nweb7302.avito.ru\r\nweb7303.avito.ru\r\nweb7304.avito.ru\r\nweb7305.avito.ru\r\nweb7306.avito.ru\r\nweb7307.avito.ru\r\nweb7308.avito.ru\r\nweb7309.avito.ru\r\nweb7310.avito.ru\r\nweb7310.vk.com\r\nweb7311.avito.ru\r\nweb7312.avito.ru\r\nweb7313.avito.ru\r\nweb7314.avito.ru\r\nweb7315.avito.ru\r\nweb7316.avito.ru\r\nweb7317.avito.ru\r\nweb7318.avito.ru\r\nweb7319.avito.ru\r\nweb7320.avito.ru\r\nweb7320.vk.com\r\nweb7321.avito.ru\r\nweb7322.avito.ru\r\nweb7323.avito.ru\r\nweb7324.avito.ru\r\nweb7325.avito.ru\r\nweb7326.avito.ru\r\nweb7327.avito.ru\r\nweb7328.avito.ru\r\nweb7329.avito.ru\r\nweb7330.avito.ru\r\nweb7330.vk.com\r\nweb7331.avito.ru\r\nweb7332.avito.ru\r\nweb7333.avito.ru\r\nweb7334.avito.ru\r\nweb7335.avito.ru\r\nweb7336.avito.ru\r\nweb7337.avito.ru\r\nweb7338.avito.ru\r\nweb7339.avito.ru\r\nweb7340.avito.ru\r\nweb7340.vk.com\r\nweb7341.avito.ru\r\nweb7342.avito.ru\r\nweb7343.avito.ru\r\nweb7344.avito.ru\r\nweb7345.avito.ru\r\nweb7346.avito.ru\r\nweb7347.avito.ru\r\nweb7348.avito.ru\r\nweb7349.avito.ru\r\nweb7350.avito.ru\r\nweb7351.avito.ru\r\nweb7352.avito.ru\r\nweb7353.avito.ru\r\nweb7354.avito.ru\r\nweb7355.avito.ru\r\nweb7356.avito.ru\r\nweb7357.avito.ru\r\nweb7358.avito.ru\r\nweb7359.avito.ru\r\nweb7360.avito.ru\r\nweb7361.avito.ru\r\nweb7362.avito.ru\r\nweb7363.avito.ru\r\nweb7364.avito.ru\r\nweb7365.avito.ru\r\nweb7366.avito.ru\r\nweb7367.avito.ru\r\nweb7368.avito.ru\r\nweb7369.avito.ru\r\nweb7370.avito.ru\r\nweb7371.avito.ru\r\nweb7372.avito.ru\r\nweb7373.avito.ru\r\nweb7374.avito.ru\r\nweb7375.avito.ru\r\nweb7376.avito.ru\r\nweb7377.avito.ru\r\nweb7378.avito.ru\r\nweb7379.avito.ru\r\nweb7380.avito.ru\r\nweb7381.avito.ru\r\nweb7382.avito.ru\r\nweb7383.avito.ru\r\nweb7384.avito.ru\r\nweb7385.avito.ru\r\nweb7386.avito.ru\r\nweb7387.avito.ru\r\nweb7388.avito.ru\r\nweb7389.avito.ru\r\nweb7390.avito.ru\r\nweb7391.avito.ru\r\nweb7392.avito.ru\r\nweb7393.avito.ru\r\nweb7394.avito.ru\r\nweb7395.avito.ru\r\nweb7396.avito.ru\r\nweb7397.avito.ru\r\nweb7398.avito.ru\r\nweb7399.avito.ru\r\nweb7400.avito.ru\r\nweb7400.vk.com\r\nweb7401.avito.ru\r\nweb7402.avito.ru\r\nweb7403.avito.ru\r\nweb7404.avito.ru\r\nweb7405.avito.ru\r\nweb7406.avito.ru\r\nweb7407.avito.ru\r\nweb7408.avito.ru\r\nweb7409.avito.ru\r\nweb7410.avito.ru\r\nweb7410.vk.com\r\nweb7411.avito.ru\r\nweb7412.avito.ru\r\nweb7413.avito.ru\r\nweb7414.avito.ru\r\nweb7415.avito.ru\r\nweb7416.avito.ru\r\nweb7417.avito.ru\r\nweb7418.avito.ru\r\nweb7419.avito.ru\r\nweb7420.avito.ru\r\nweb7420.vk.com\r\nweb7421.avito.ru\r\nweb7422.avito.ru\r\nweb7423.avito.ru\r\nweb7424.avito.ru\r\nweb7425.avito.ru\r\nweb7426.avito.ru\r\nweb7427.avito.ru\r\nweb7428.avito.ru\r\nweb7429.avito.ru\r\nweb7430.avito.ru\r\nweb7430.vk.com\r\nweb7431.avito.ru\r\nweb7432.avito.ru\r\nweb7433.avito.ru\r\nweb7434.avito.ru\r\nweb7435.avito.ru\r\nweb7436.avito.ru\r\nweb7437.avito.ru\r\nweb7438.avito.ru\r\nweb7439.avito.ru\r\nweb7440.avito.ru\r\nweb7440.vk.com\r\nweb7441.avito.ru\r\nweb7442.avito.ru\r\nweb7443.avito.ru\r\nweb7444.avito.ru\r\nweb7445.avito.ru\r\nweb7446.avito.ru\r\nweb7447.avito.ru\r\nweb7448.avito.ru\r\nweb7449.avito.ru\r\nweb7450.avito.ru\r\nweb7f.yandex.ru\r\nweb7g.yandex.ru\r\nweb8.avito.ru\r\nweb88.avito.ru\r\nweb8f.yandex.ru\r\nweb8g.yandex.ru\r\nweb9.avito.ru\r\nweb90.avito.ru\r\nweb9g.yandex.ru\r\nwebaccess.avito.ru\r\nwebadmin.avito.ru\r\nwebadmin.zdorovie-shkolnika.spb.aif.ru\r\nwebadvisor.avito.ru\r\nwebagent.mail.ru\r\nwebalbum.avito.ru\r\nwebalizer.avito.ru\r\nwebapi-staging.iarc.who.int\r\nwebapi.app-assistent.open.ru\r\nwebapi.avito.ru\r\nwebapi.dns-shop.ru\r\nwebapi.iarc.who.int\r\nwebapi.open.ru\r\nwebapi.openbank.ru\r\nwebapidata.app-assistent.open.ru\r\nwebapp.avito.ru\r\nwebapp.beeline.ru\r\nwebapps.avito.ru\r\nwebapps.worldbank.org\r\nwebapps1.avito.ru\r\nwebapps2.avito.ru\r\nwebappsd.mts.ru\r\nwebappsqa.worldbank.org\r\nwebarchive.mail.ru\r\nwebauth.avito.ru\r\nwebboard.avito.ru\r\nwebbridge.uc.magnit.ru\r\nwebcache.avito.ru\r\nwebcal.yandex.ru\r\nwebcalendar.avito.ru\r\nwebcall.open.ru\r\nwebcall.vtb.ru\r\nwebcam.avito.ru\r\nwebcam1.avito.ru\r\nwebcam2.avito.ru\r\nwebcare.tele2.ru\r\nwebcast.avito.ru\r\nwebcast.ixbt.com\r\nwebchat.avito.ru\r\nwebchat.open.ru\r\nwebchat2.yandex.ru\r\nwebchat2dlg.yandex.ru\r\nwebchat2int.yandex.ru\r\nwebchat2pub.yandex.ru\r\nwebclasseur.avito.ru\r\nwebclickstream.online.sberbank.ru\r\nwebclient.avito.ru\r\nwebcom.avito.ru\r\nwebcon.avito.ru\r\nwebcon.russianpost.ru\r\nwebcon.sberbank.ru\r\nwebcon01.msk.vtb.ru\r\nwebcon02.msk.vtb.ru\r\nwebconf.avito.ru\r\nwebconf.mts.ru\r\nwebconf.ozon.ru\r\nwebconf.psbank.ru\r\nwebconf.rosatom.ru\r\nwebconf.rosbank.ru\r\nwebconf.skype.ec.mts.ru\r\nwebconf.vtb.ru\r\nwebconf.x5.ru\r\nwebconference.avito.ru\r\nwebconnect.avito.ru\r\nwebct.avito.ru\r\nwebd.avito.ru\r\nwebda.avito.ru\r\nwebdata.avito.ru\r\nwebdav-rc.yandex.ru\r\nwebdav.avito.ru\r\nwebdav.cloud.mail.ru\r\nwebdav.iac.mchs.ru\r\nwebdav.myoffice.sberbank.ru\r\nwebdav.tst.yandex.ru\r\nwebdav.yandex.ru\r\nwebdb.avito.ru\r\nwebdemo.avito.ru\r\nwebdesign.avito.ru\r\nwebdev.avito.ru\r\nwebdev1.avito.ru\r\nwebdisk.admin.avito.ru\r\nwebdisk.ads.avito.ru\r\nwebdisk.afro.who.int\r\nwebdisk.api.avito.ru\r\nwebdisk.app.avito.ru\r\nwebdisk.apps.avito.ru\r\nwebdisk.archive.avito.ru\r\nwebdisk.articles.avito.ru\r\nwebdisk.avito.ru\r\nwebdisk.beta.avito.ru\r\nwebdisk.billing.avito.ru\r\nwebdisk.blog.avito.ru\r\nwebdisk.blogs.avito.ru\r\nwebdisk.book.avito.ru\r\nwebdisk.books.avito.ru\r\nwebdisk.bugs.avito.ru\r\nwebdisk.card.avito.ru\r\nwebdisk.cdn.avito.ru\r\nwebdisk.chat.avito.ru\r\nwebdisk.classifieds.avito.ru\r\nwebdisk.client.avito.ru\r\nwebdisk.clients.avito.ru\r\nwebdisk.club.avito.ru\r\nwebdisk.cn.avito.ru\r\nwebdisk.community.avito.ru\r\nwebdisk.crm.avito.ru\r\nwebdisk.dating.avito.ru\r\nwebdisk.de.avito.ru\r\nwebdisk.demo.avito.ru\r\nwebdisk.design.avito.ru\r\nwebdisk.dev.avito.ru\r\nwebdisk.dev2.avito.ru\r\nwebdisk.development.avito.ru\r\nwebdisk.director.avito.ru\r\nwebdisk.directory.avito.ru\r\nwebdisk.download.avito.ru\r\nwebdisk.drupal.avito.ru\r\nwebdisk.email.avito.ru\r\nwebdisk.en.avito.ru\r\nwebdisk.es.avito.ru\r\nwebdisk.facebook.avito.ru\r\nwebdisk.fb.avito.ru\r\nwebdisk.files.avito.ru\r\nwebdisk.foro.avito.ru\r\nwebdisk.forum.avito.ru\r\nwebdisk.forums.avito.ru\r\nwebdisk.fr.avito.ru\r\nwebdisk.free.avito.ru\r\nwebdisk.gallery.avito.ru\r\nwebdisk.games.avito.ru\r\nwebdisk.gmail.avito.ru\r\nwebdisk.health.avito.ru\r\nwebdisk.help.avito.ru\r\nwebdisk.helpdesk.avito.ru\r\nwebdisk.home.avito.ru\r\nwebdisk.host.avito.ru\r\nwebdisk.hosting.avito.ru\r\nwebdisk.i.avito.ru\r\nwebdisk.images.avito.ru\r\nwebdisk.img.avito.ru\r\nwebdisk.info.avito.ru\r\nwebdisk.ip.avito.ru\r\nwebdisk.iphone.avito.ru\r\nwebdisk.it.avito.ru\r\nwebdisk.jobs.avito.ru\r\nwebdisk.jocuri.avito.ru\r\nwebdisk.joomla.avito.ru\r\nwebdisk.labs.avito.ru\r\nwebdisk.link.avito.ru\r\nwebdisk.links.avito.ru\r\nwebdisk.live.avito.ru\r\nwebdisk.login.avito.ru\r\nwebdisk.loja.avito.ru\r\nwebdisk.magento.avito.ru\r\nwebdisk.main.avito.ru\r\nwebdisk.marketing.avito.ru\r\nwebdisk.media.avito.ru\r\nwebdisk.member.avito.ru\r\nwebdisk.members.avito.ru\r\nwebdisk.movies.avito.ru\r\nwebdisk.movil.avito.ru\r\nwebdisk.music.avito.ru\r\nwebdisk.my.avito.ru\r\nwebdisk.news.avito.ru\r\nwebdisk.newsite.avito.ru\r\nwebdisk.newsletter.avito.ru\r\nwebdisk.novo.avito.ru\r\nwebdisk.office.avito.ru\r\nwebdisk.old.avito.ru\r\nwebdisk.online.avito.ru\r\nwebdisk.partners.avito.ru\r\nwebdisk.photos.avito.ru\r\nwebdisk.portal.avito.ru\r\nwebdisk.portfolio.avito.ru\r\nwebdisk.radio.avito.ru\r\nwebdisk.reseller.avito.ru\r\nwebdisk.sandbox.avito.ru\r\nwebdisk.search.avito.ru\r\nwebdisk.secure.avito.ru\r\nwebdisk.seo.avito.ru\r\nwebdisk.server.avito.ru\r\nwebdisk.shop.avito.ru\r\nwebdisk.site.avito.ru\r\nwebdisk.sms.avito.ru\r\nwebdisk.social.avito.ru\r\nwebdisk.soporte.avito.ru\r\nwebdisk.sports.avito.ru\r\nwebdisk.stage.avito.ru\r\nwebdisk.staging.avito.ru\r\nwebdisk.store.avito.ru\r\nwebdisk.team.avito.ru\r\nwebdisk.test.avito.ru\r\nwebdisk.teste.avito.ru\r\nwebdisk.testing.avito.ru\r\nwebdisk.tickets.avito.ru\r\nwebdisk.travel.avito.ru\r\nwebdisk.tv.avito.ru\r\nwebdisk.upload.avito.ru\r\nwebdisk.us.avito.ru\r\nwebdisk.v2.avito.ru\r\nwebdisk.video.avito.ru\r\nwebdisk.videos.avito.ru\r\nwebdisk.web.avito.ru\r\nwebdisk.webdesign.avito.ru\r\nwebdisk.webmail.avito.ru\r\nwebdisk.wholesale.avito.ru\r\nwebdisk.wiki.avito.ru\r\nwebdisk.wordpress.avito.ru\r\nwebdisk.wp.avito.ru\r\nwebdisk.www2.avito.ru\r\nwebdisk.x.avito.ru\r\nwebeoc.avito.ru\r\nweber.avito.ru\r\nwebext.alfabank.ru\r\nwebext.avito.ru\r\nwebext.skype.ec.mts.ru\r\nwebflow.tutu.ru\r\nwebftp.avito.ru\r\nwebgate.beeline.ru\r\nwebgis.avito.ru\r\nwebhard.avito.ru\r\nwebhook.avito.ru\r\nwebhost.avito.ru\r\nwebhost2.avito.ru\r\nwebhosting.avito.ru\r\nwebim.avito.ru\r\nwebim.beeline.ru\r\nwebim.msg.tass.ru\r\nwebim.mts.ru\r\nwebim.myteam.tass.ru\r\nwebim.teams.infra.rbc.ru\r\nwebim.vkteams.rosbank.ru\r\nwebinar-media.open.ru\r\nwebinar-message.open.ru\r\nwebinar-mgw.open.ru\r\nwebinar.2gis.ru\r\nwebinar.avito.ru\r\nwebinar.g45.tambov.gov.ru\r\nwebinar.megafon.ru\r\nwebinar.open.ru\r\nwebinar.profi.ru\r\nwebinar.rbc.ru\r\nwebinarn.sdo.rzd.ru\r\nwebinars-message.t2.ru\r\nwebinars-mgw.t2.ru\r\nwebinars-webrtc.t2.ru\r\nwebinars-wowza.t2.ru\r\nwebinars.avito.ru\r\nwebinars.dns-shop.ru\r\nwebinars.t2.ru\r\nwebinfo.avito.ru\r\nwebktv.rosatom.ru\r\nweblink.avito.ru\r\nweblog.avito.ru\r\nweblync.avito.ru\r\nwebm.avito.ru\r\nwebmail-logon.tele2.ru\r\nwebmail-original.avito.ru\r\nwebmail.admin.avito.ru\r\nwebmail.afro.who.int\r\nwebmail.avito.ru\r\nwebmail.beeline.ru\r\nwebmail.control.avito.ru\r\nwebmail.controlpanel.avito.ru\r\nwebmail.cp.avito.ru\r\nwebmail.cpanel.avito.ru\r\nwebmail.demo.avito.ru\r\nwebmail.euro.who.int\r\nwebmail.forum.avito.ru\r\nwebmail.hosting.avito.ru\r\nwebmail.kino-teatr.ru\r\nwebmail.kp.ru\r\nwebmail.strategy.rk.gov.ru\r\nwebmail.strategy2017.rk.gov.ru\r\nwebmail.t2.ru\r\nwebmail.tele2.ru\r\nwebmail.test.avito.ru\r\nwebmail.tstad.worldbank.org\r\nwebmail.urfo.gov.ru\r\nwebmail.worldbank.org\r\nwebmail01.avito.ru\r\nwebmail1.avito.ru\r\nwebmail10.avito.ru\r\nwebmail10.vk.com\r\nwebmail2.avito.ru\r\nwebmail2.urfo.gov.ru\r\nwebmail3.avito.ru\r\nwebmail3.worldbank.org\r\nwebmail4.avito.ru\r\nwebmail5.avito.ru\r\nwebmaildlp.t2.ru\r\nwebmailebext.avito.ru\r\nwebmailtest.avito.ru\r\nwebmailx.avito.ru\r\nwebmarketing.avito.ru\r\nwebmaster-balancer.production.yandex.ru\r\nwebmaster-support.wmc-admin.yandex.ru\r\nwebmaster.avito.ru\r\nwebmaster.yandex.ru\r\nwebmasters.avito.ru\r\nwebmasters.vedomosti.ru\r\nwebmeeting.avito.ru\r\nwebmin.avito.ru\r\nwebmin.mirtv.ru\r\nwebmon.open.ru\r\nwebmon1.open.ru\r\nwebmon2.open.ru\r\nwebmon3.open.ru\r\nwebmon4.open.ru\r\nwebms.9111.ru\r\nwebnews.avito.ru\r\nweboffice.tinkoff.ru\r\nwebonline.kommersant.ru\r\nwebor.sovcombank.ru\r\nwebos.play-hbo.max.com\r\nwebos.play.max.com\r\nwebpay.avito.ru\r\nwebpay.beeline.ru\r\nwebplus.avito.ru\r\nwebportal.avito.ru\r\nwebprint.avito.ru\r\nwebpro.avito.ru\r\nwebproxy.avito.ru\r\nwebproxy.tambov.gov.ru\r\nwebpush.profi.ru\r\nwebquik-test.sberbank.ru\r\nwebquik.sberbank.ru\r\nwebquik.vtb.ru\r\nwebquikdemo.vtb.ru\r\nwebrtc-asd.avito.ru\r\nwebrtc-hc.avito.ru\r\nwebrtc-msk1.mts.ru\r\nwebrtc-sm-test.avito.ru\r\nwebrtc.mkb.ru\r\nwebrtc.mts.ru\r\nwebs.avito.ru\r\nwebsbol.clickstream.sberbank.ru\r\nwebsearch-qa.yandex.ru\r\nwebsearch.avito.ru\r\nwebsecurity.t2.ru\r\nwebserver.avito.ru\r\nwebserver01.avito.ru\r\nwebserver1.avito.ru\r\nwebserver2.avito.ru\r\nwebservice.avito.ru\r\nwebservices.avito.ru\r\nwebshop.avito.ru\r\nwebshot.production.meduza.io\r\nwebshot.staging.meduza.io\r\nwebsite-archive.production.meduza.io\r\nwebsite-light.preview.meduza.io\r\nwebsite-light.preview.preview.meduza.io\r\nwebsite-light.staging.meduza.io\r\nwebsite.avito.ru\r\nwebsite3-en.production.meduza.io\r\nwebsite3-en.staging.meduza.io\r\nwebsite3-preview-en.staging.meduza.io\r\nwebsite3-preview.staging.meduza.io\r\nwebsite3.production.meduza.io\r\nwebsite3.staging.meduza.io\r\nwebsites.avito.ru\r\nwebsocket.hh.ru\r\nwebsoft.megafon.ru\r\nwebspace.avito.ru\r\nwebspace.dalet.euronews.com\r\nwebspace.stg.dalet.euronews.com\r\nwebsrv.avito.ru\r\nwebstar.avito.ru\r\nwebstat.avito.ru\r\nwebstat.profi.ru\r\nwebstats.avito.ru\r\nwebster.avito.ru\r\nwebstore.avito.ru\r\nwebstore.mail.ru\r\nwebsvn.avito.ru\r\nwebtech.avito.ru\r\nwebtest.avito.ru\r\nwebtest1.yandex.ru\r\nwebtest1f.yandex.ru\r\nwebtest2.yandex.ru\r\nwebtools.avito.ru\r\nwebtrends.avito.ru\r\nwebtutor.rshb.ru\r\nwebtutortest.rshb.ru\r\nwebtv.avito.ru\r\nwebview.avito.ru\r\nwebview.maps.yandex.ru\r\nwebvpn.avito.ru\r\nwebworld.avito.ru\r\nwebzone.avito.ru\r\nwecare.vtb.ru\r\nwedding.afisha.ru\r\nwedding.avito.ru\r\nwedding.dev.1tv.ru\r\nweddings.avito.ru\r\nwedge.avito.ru\r\nweekend.afisha.yandex.ru\r\nweekend.avito.ru\r\nweekend.kommersant.ru\r\nweekend.m24.ru\r\nweekend.rambler.ru\r\nweekly.avito.ru\r\nweibo.avito.ru\r\nweightloss.avito.ru\r\nwekan.perm.rg.ru\r\nwelcome-basketball.sports.ru\r\nwelcome-fight.sports.ru\r\nwelcome-to-cannes-2021.film.ru\r\nwelcome-tribuna.sports.ru\r\nwelcome.2gis.ru\r\nwelcome.advertising.yandex.ru\r\nwelcome.alfabank.ru\r\nwelcome.avito.ru\r\nwelcome.banki.ru\r\nwelcome.megafon.ru\r\nwelcome.profi.ru\r\nwelcome.rzd.ru\r\nwelcome.vtb.ru\r\nweleda.afisha.ru\r\nwell-being.111.yandex.ru\r\nwell-mind.t2.ru\r\nwell.avito.ru\r\nwellbeing.avito.ru\r\nwellington.avito.ru\r\nwellness.avito.ru\r\nwen.avito.ru\r\nwendy.avito.ru\r\nwerbung.avito.ru\r\nwes.avito.ru\r\nwesson.yandex.ru\r\nwest.avito.ru\r\nwestern.avito.ru\r\nwestside.avito.ru\r\nwetter.avito.ru\r\nwewillshowyou.2gis.ru\r\nwex.rosatom.ru\r\nwf.avito.ru\r\nwf.mail.ru\r\nwf.yandex.ru\r\nwf1.mail.ru\r\nwfa.avito.ru\r\nwfaas.yandex.ru\r\nwfb.avito.ru\r\nwfm-mobile.megafon.ru\r\nwfm-service.avito.ru\r\nwfm-t.megafon.ru\r\nwfm.lemanapro.ru\r\nwfm01z1.ozon.ru\r\nwfmmobile.mts.ru\r\nwfms.avito.ru\r\nwg.avito.ru\r\nwgw.kino-teatr.ru\r\nwh.avito.ru\r\nwha.avito.ru\r\nwhale.avito.ru\r\nwhalebone.ydf.yandex.ru\r\nwhales.tass.ru\r\nwhataboutpie.kino-teatr.ru\r\nwhatever.avito.ru\r\nwhatsup.avito.ru\r\nwhattodo.lenta.ru\r\nwheat.avito.ru\r\nwheel22.magnit.ru\r\nwhegis.afro.who.int\r\nwhirlpool.mvideo.ru\r\nwhiskas.ny.mail.ru\r\nwhisky.avito.ru\r\nwhisper.avito.ru\r\nwhite-square.tass.ru\r\nwhite.avito.ru\r\nwhite.lenta.ru\r\nwhite1-v16.yandex.ru\r\nwhite1-v17.yandex.ru\r\nwhite2-v16.yandex.ru\r\nwhite2-v17.yandex.ru\r\nwhiteboard.avito.ru\r\nwhitelabel.avito.ru\r\nwhiterabbit.avito.ru\r\nwhiterose.avito.ru\r\nwhm.avito.ru\r\nwhmcs.avito.ru\r\nwho.avito.ru\r\nwho.iz.ru\r\nwho.leasing.rshb.ru\r\nwhoami.ntv.ru\r\nwhois.avito.ru\r\nwholesale.avito.ru\r\nwhophotosearch.who.int\r\nwhoson.avito.ru\r\nwhub.litres.ru\r\nwhy-kassa.tinkoff.ru\r\nwhy.avito.ru\r\nwhynot.avito.ru\r\nwi-fi.beeline.ru\r\nwi-fi.megafon.ru\r\nwi.avito.ru\r\nwicked.avito.ru\r\nwide.avito.ru\r\nwidevine-ios.test.ivi.ru\r\nwidevine-stable.test.ivi.ru\r\nwidevine.nfrolkin.ing.k8s.dev.ivi.ru\r\nwidevine.rkostyukov.ing.k8s.dev.ivi.ru\r\nwidget-apps.beeline.ru\r\nwidget-svcdev.test.gosuslugi.ru\r\nwidget.2gis.ru\r\nwidget.api.2gis.ru\r\nwidget.avito.ru\r\nwidget.books.yandex.ru\r\nwidget.chat.psbank.ru\r\nwidget.chatdev.psbank.ru\r\nwidget.chatprep.psbank.ru\r\nwidget.chattest.psbank.ru\r\nwidget.gosuslugi.ru\r\nwidget.kino-teatr.ru\r\nwidget.mts.ru\r\nwidget.ok.life.ru\r\nwidget.ticket.yandex.ru\r\nwidget.tickets.prestable.yandex.ru\r\nwidget.tickets.yandex.ru\r\nwidgets.api.2gis.ru\r\nwidgets.avito.ru\r\nwidgets.calendar.yandex.ru\r\nwidgets.demo.megafon.ru\r\nwidgets.kinopoisk.ru\r\nwidgets.mos.ru\r\nwidgets.yandex.ru\r\nwifi-auth.rshb.ru\r\nwifi-ise.sberbank.ru\r\nwifi-kazan.mts.ru\r\nwifi-login.sberbank.ru\r\nwifi-portal.sberbank.ru\r\nwifi.avito.ru\r\nwifi.beeline.ru\r\nwifi.fin.tambov.gov.ru\r\nwifi.megafon.ru\r\nwifi.mts.ru\r\nwifi.sberbank.ru\r\nwifi.sib.mts.ru\r\nwifi.vtb.ru\r\nwifi2.fin.tambov.gov.ru\r\nwifi2.vtb.ru\r\nwifi2.vtb.rumgmt-ise401.vtb.ru\r\nwifi4g.tele2.ru\r\nwificert.vtb.ru\r\nwii.avito.ru\r\nwiki-api.school.yandex.ru\r\nwiki-new.tass-wiki-dev.tass.ru\r\nwiki-www.yandex.ru\r\nwiki.2gis.ru\r\nwiki.alfabank.ru\r\nwiki.atlas.mchs.ru\r\nwiki.avito.ru\r\nwiki.dev.avito.ru\r\nwiki.dns-shop.ru\r\nwiki.gkh.hab.aif.ru\r\nwiki.home.megafon.ru\r\nwiki.mchs.gov.ru\r\nwiki.mchs.ru\r\nwiki.mtp.mos.ru\r\nwiki.rkn.gov.ru\r\nwiki.school.yandex.ru\r\nwiki.sports.ru\r\nwiki.staging.tech.mvideo.ru\r\nwiki.tanks.mail.ru\r\nwiki.tass.ru\r\nwiki.tele2.ru\r\nwiki.vtb.ru\r\nwiki.yandex.ru\r\nwiki2.avito.ru\r\nwikileaks.avito.ru\r\nwikis.avito.ru\r\nwikitest.avito.ru\r\nwild-card.limited.mchs.ru\r\nwild-card.mchs.ru\r\nwild-card.moscow.mchs.ru\r\nwild.avito.ru\r\nwildc.avito.ru\r\nwildcat.avito.ru\r\nwildersol1.avito.ru\r\nwilki.uk.2gis.ru\r\nwill.avito.ru\r\nwilliam.avito.ru\r\nwillie.avito.ru\r\nwillow.avito.ru\r\nwillow.zdorovie-shkolnika.spb.aif.ru\r\nwilly.avito.ru\r\nwilma.avito.ru\r\nwilson.avito.ru\r\nwimapi-test.vtb.ru\r\nwimapi.vtb.ru\r\nwin.avito.ru\r\nwin.beeline.ru\r\nwin.mail.ru\r\nwin.mts.ru\r\nwin.rabota.mail.ru\r\nwin1.avito.ru\r\nwin10.avito.ru\r\nwin10.vk.com\r\nwin11.avito.ru\r\nwin12.avito.ru\r\nwin13.avito.ru\r\nwin14.avito.ru\r\nwin15.avito.ru\r\nwin16.avito.ru\r\nwin17.avito.ru\r\nwin18.avito.ru\r\nwin19.avito.ru\r\nwin2.avito.ru\r\nwin20.avito.ru\r\nwin20.vk.com\r\nwin21.avito.ru\r\nwin22.avito.ru\r\nwin3.avito.ru\r\nwin4.avito.ru\r\nwin5.avito.ru\r\nwin6.avito.ru\r\nwin7.avito.ru\r\nwin8.avito.ru\r\nwin9.avito.ru\r\nwina.avito.ru\r\nwinbackup3-n2.yandex.ru\r\nwinchester.avito.ru\r\nwind.avito.ru\r\nwindmill.avito.ru\r\nwindow.avito.ru\r\nwindows.avito.ru\r\nwindows1.avito.ru\r\nwindows2008r2.avito.ru\r\nwindows7.avito.ru\r\nwindowsts.avito.ru\r\nwindowsupdate.avito.ru\r\nwindu.avito.ru\r\nwine.avito.ru\r\nwine.life.ru\r\nwinf1.i.mail.ru\r\nwinf2.i.mail.ru\r\nwinf3.i.mail.ru\r\nwinf4.i.mail.ru\r\nwinfm.avito.ru\r\nwing.avito.ru\r\nwings.avito.ru\r\nwinner.avito.ru\r\nwinnie.avito.ru\r\nwins.avito.ru\r\nwinston.avito.ru\r\nwinter.avito.ru\r\nwinter.life.ru\r\nwinterholidays.vtb.ru\r\nwintermute.avito.ru\r\nwinterzewa.lady.mail.ru\r\nwinupdate.avito.ru\r\nwinwin.avito.ru\r\nwinxp.avito.ru\r\nwip.avito.ru\r\nwired.avito.ru\r\nwireless.avito.ru\r\nwis.avito.ru\r\nwisconsin.avito.ru\r\nwisdom.avito.ru\r\nwise.avito.ru\r\nwish.avito.ru\r\nwish.t2.ru\r\nwishlist.avito.ru\r\nwithdrawal.irecommend.ru\r\nwits.worldbank.org\r\nwitsqa.worldbank.org\r\nwitstst.worldbank.org\r\nwiwi.avito.ru\r\nwix1.mobid.megafon.ru\r\nwix2.mobid.megafon.ru\r\nwizard.avito.ru\r\nwizard.iiot.gov.ru\r\nwizard.mail.ru\r\nwizard.psbank.ru\r\nwizzard.avito.ru\r\nwj.avito.ru\r\nwk-callback.open.ru\r\nwk.open.ru\r\nwkndiu.profi.ru\r\nwksta1.avito.ru\r\nwl-bus.tutu.ru\r\nwl.avito.ru\r\nwlan-switch.avito.ru\r\nwlan.avito.ru\r\nwlc.avito.ru\r\nwm.avito.ru\r\nwm.minprom.gov.ru\r\nwm.mon.gov.ru\r\nwm1.avito.ru\r\nwm2.avito.ru\r\nwm3.avito.ru\r\nwmail.avito.ru\r\nwmi-qa.yandex.ru\r\nwmi3-qa.yandex.ru\r\nwmi4-qa.yandex.ru\r\nwmi6-qa.yandex.ru\r\nwmidev.yandex.ru\r\nwms.avito.ru\r\nwms.open.ru\r\nwms.openbank.ru\r\nwms1.avito.ru\r\nwms2.avito.ru\r\nwmt.avito.ru\r\nwmv.avito.ru\r\nwn.kassa.rambler.ru\r\nwnam-s-portal.rosatom.ru\r\nwns1.avito.ru\r\nwns2.avito.ru\r\nwof.lb.tinkoff.ru\r\nwolf.avito.ru\r\nwolo.youdo.com\r\nwolverine.avito.ru\r\nwolves.avito.ru\r\nwoman.avito.ru\r\nwoman.rambler.ru\r\nwombat.avito.ru\r\nwomen.avito.ru\r\nwonder.avito.ru\r\nwonderland.avito.ru\r\nwood.avito.ru\r\nwood.rg.ru\r\nwoodstock.avito.ru\r\nwoody.avito.ru\r\nwoody.yandex.ru\r\nwoow.avito.ru\r\nword.avito.ru\r\nwordpress.avito.ru\r\nwordpress.kino-teatr.ru\r\nwordstat.yandex.ru\r\nwork-callback.open.ru\r\nwork-old-callback.open.ru\r\nwork-old.open.ru\r\nwork-rez.open.ru\r\nwork.avito.ru\r\nwork.m24.ru\r\nwork.open.ru\r\nwork.youdo.com\r\nworker.app-assistent.open.ru\r\nworker.avito.ru\r\nworkext-callback.open.ru\r\nworkext.open.ru\r\nworkflow.avito.ru\r\nworkfromhome.avito.ru\r\nworking.avito.ru\r\nworkplace.avito.ru\r\nworkpm-callback.open.ru\r\nworkpm.open.ru\r\nworks.avito.ru\r\nworkshop.avito.ru\r\nworkspace.avito.ru\r\nworkspace.fas.gov.ru\r\nworkspace.vk.com\r\nworkstation.avito.ru\r\nworkwith.youdo.com\r\nworkzen-beta.mts.ru\r\nworkzen-dev.mts.ru\r\nworkzen.mts.ru\r\nworld.avito.ru\r\nworldclass.vedomosti.ru\r\nworldcup.avito.ru\r\nworldcup.vedomosti.ru\r\nworldcup2018.lenta.ru\r\nworldcup2018.tass.ru\r\nworldmusic.avito.ru\r\nworldpressreleaseip.avito.ru\r\nworldskills.lenta.ru\r\nworldvita.ren.tv\r\nworldwide.avito.ru\r\nwos.mail.ru\r\nwotan.avito.ru\r\nwow.avito.ru\r\nwow.ntv.ru\r\nwowsite.beeline.ru\r\nwowza.avito.ru\r\nwowza.open.ru\r\nwp.avito.ru\r\nwp.beeline.ru\r\nwp.cea.gov.ru\r\nwp.kino-teatr.ru\r\nwp.rosbank.ru\r\nwp.zdorovie-shkolnika.spb.aif.ru\r\nwp1.avito.ru\r\nwp2.avito.ru\r\nwp3.avito.ru\r\nwpad.avito.ru\r\nwpb.avito.ru\r\nwpc.avito.ru\r\nwpdemo.avito.ru\r\nwpk.kommersant.ru\r\nwpro.who.int\r\nwps.avito.ru\r\nwpt.mkb.ru\r\nwptest.avito.ru\r\nwr.avito.ru\r\nwraith.avito.ru\r\nwrap.userapi.com\r\nwrestling.avito.ru\r\nwriter.avito.ru\r\nwriters.avito.ru\r\nwrkpd-test.mkb.ru\r\nwroclaw.avito.ru\r\nws-api-test.max.ru\r\nws-api-time.tbank.ru\r\nws-lon-oauth1.avito.ru\r\nws.9111.ru\r\nws.atlas.dev.cgu.mchs.ru\r\nws.atlas.mchs.gov.ru\r\nws.avito.ru\r\nws.citilink.ru\r\nws.denisenko.shared.dev.lab.x5.ru\r\nws.dev.firenotification.mchs.ru\r\nws.domofon.mts.ru\r\nws.finance.ozon.ru\r\nws.firenotification.mchs.gov.ru\r\nws.firenotification.mchs.ru\r\nws.fl.firenotification.mchs.ru\r\nws.ixbt.com\r\nws.kassa.rambler.ru\r\nws.kino-teatr.ru\r\nws.mm.tinkoff.ru\r\nws.net.ixbt.com\r\nws.rosatom.ru\r\nws.seller.ozon.ru\r\nws.time-demo.tinkoff.ru\r\nws.time-ops.tbank.ru\r\nws.time-ops.tinkoff.ru\r\nws.time.tbank.ru\r\nws.time.tinkoff.ru\r\nws.tr.ria.ru\r\nws.video.net.ixbt.com\r\nws.zoon.ru\r\nws01.avito.ru\r\nws02.avito.ru\r\nws02qa000.avito.ru\r\nws02qa000.vk.com\r\nws02qa001.avito.ru\r\nws02qa002.avito.ru\r\nws02qa003.avito.ru\r\nws02qa004.avito.ru\r\nws1-yaapi-pp0-01.alfabank.ru\r\nws1.avito.ru\r\nws101.avito.ru\r\nws102.avito.ru\r\nws11.avito.ru\r\nws182.avito.ru\r\nws191.avito.ru\r\nws192.avito.ru\r\nws2.avito.ru\r\nws201.avito.ru\r\nws3.avito.ru\r\nws4.avito.ru\r\nws6.avito.ru\r\nws9.avito.ru\r\nwsa.avito.ru\r\nwsb.avito.ru\r\nwsc.avito.ru\r\nwsi.avito.ru\r\nwsint.alfabank.ru\r\nwso.sber.ru\r\nwso.sberbank.ru\r\nwsp.avito.ru\r\nwsp.rosatom.ru\r\nwspt.rosatom.ru\r\nwsr-cggw-01.wsr.rzd.ru\r\nwsr-cggw-02.wsr.rzd.ru\r\nwss.atlas.dev.cgu.mchs.ru\r\nwss.avito.ru\r\nwss.net.ixbt.com\r\nwss.sports.ru\r\nwss.video.net.ixbt.com\r\nwstest.avito.ru\r\nwsus.avito.ru\r\nwsus2.avito.ru\r\nwt.avito.ru\r\nwt.kommersant.ru\r\nwtf.avito.ru\r\nwtlan.open.ru\r\nwts.avito.ru\r\nwu-executive-academy.kommersant.ru\r\nwuhan.avito.ru\r\nwushu.avito.ru\r\nwvpn.avito.ru\r\nww.alt.uskov.dev.kp.ru\r\nww.avito.ru\r\nww.citilink.ru\r\nww.kino-teatr.ru\r\nww.yandex.ru\r\nww1.avito.ru\r\nww1.lenta.ru\r\nww2.avito.ru\r\nww2.kino-teatr.ru\r\nww3.avito.ru\r\nww4.avito.ru\r\nww5.avito.ru\r\nww6.avito.ru\r\nww7.avito.ru\r\nww8.avito.ru\r\nww9.avito.ru\r\nwwa.avito.ru\r\nwwb.avito.ru\r\nwwe.avito.ru\r\nwws.avito.ru\r\nwwu.avito.ru\r\nwwvv.avito.ru\r\nwww-1.avito.ru\r\nwww-1.duma.gov.ru\r\nwww-2.avito.ru\r\nwww-2.banki.ru\r\nwww-2.duma.gov.ru\r\nwww-7ed.kino-teatr.ru\r\nwww-a.avito.ru\r\nwww-b.avito.ru\r\nwww-backup.avito.ru\r\nwww-beta.yandex.ru\r\nwww-c.avito.ru\r\nwww-demo.avito.ru\r\nwww-demo1.gosuslugi.ru\r\nwww-dev.avito.ru\r\nwww-download.1tv.ru\r\nwww-dr0a.kino-teatr.ru\r\nwww-duma.duma.gov.ru\r\nwww-eldorado-ru.proxy.tp.mvideo.ru\r\nwww-esd.worldbank.org\r\nwww-f1.tbank.ru\r\nwww-front-end.garant.ru\r\nwww-front-ext.garant.ru\r\nwww-front-protect.garant.ru\r\nwww-hold.avito.ru\r\nwww-in.edu.gov.ru\r\nwww-masters.captcha.rbc.ru\r\nwww-masters.emitbase.rbc.ru\r\nwww-masters.v1.rpg.export.rbc.ru\r\nwww-masters.v6.bo.rbc.ru\r\nwww-mirrors.sentry.common.rbc.ru\r\nwww-mirrors.staging.intapp.rbc.ru\r\nwww-mirrors.staging.v1.adapter.rbc.ru\r\nwww-mirrors.staging.v1.amp.rbc.ru\r\nwww-mirrors.staging.v1.companies.rbc.ru\r\nwww-mirrors.staging.v3.bc.rbc.ru\r\nwww-mirrors.staging.v5.cash.rbc.ru\r\nwww-mirrors.staging2.app.rbc.ru\r\nwww-mresurs-testv.avito.ru\r\nwww-new.avito.ru\r\nwww-new.mon.gov.ru\r\nwww-old.avito.ru\r\nwww-org.avito.ru\r\nwww-origin.avito.ru\r\nwww-ppe-tn-api.avito.ru\r\nwww-rcm.yandex.ru\r\nwww-reg1-demo1.gosuslugi.ru\r\nwww-reg2-demo1.gosuslugi.ru\r\nwww-spd.avito.ru\r\nwww-staging.avito.ru\r\nwww-stg.avito.ru\r\nwww-sw.eldorado.ru\r\nwww-telex.1tv.ru\r\nwww-test.avito.ru\r\nwww-uat.avito.ru\r\nwww.0001winmdm03.mts.ru\r\nwww.01.mchs.gov.ru\r\nwww.01.mchs.ru\r\nwww.02.mchs.gov.ru\r\nwww.02.mchs.ru\r\nwww.03.mchs.gov.ru\r\nwww.03.mchs.ru\r\nwww.04.mchs.gov.ru\r\nwww.04.mchs.ru\r\nwww.05.mchs.gov.ru\r\nwww.05.mchs.ru\r\nwww.05l6y.faith.www.sports.ru\r\nwww.06.mchs.gov.ru\r\nwww.06.mchs.ru\r\nwww.07.mchs.gov.ru\r\nwww.07.mchs.ru\r\nwww.08.mchs.gov.ru\r\nwww.08.mchs.ru\r\nwww.09.mchs.gov.ru\r\nwww.09.mchs.ru\r\nwww.10.mchs.gov.ru\r\nwww.10.mchs.ru\r\nwww.11.mchs.gov.ru\r\nwww.11.mchs.ru\r\nwww.112.mchs.ru\r\nwww.12.mchs.gov.ru\r\nwww.12.mchs.ru\r\nwww.13.alfabank.ru\r\nwww.13.mchs.gov.ru\r\nwww.13.mchs.ru\r\nwww.14.chechnya.gov.ru\r\nwww.14.mchs.gov.ru\r\nwww.14.mchs.ru\r\nwww.15.mchs.gov.ru\r\nwww.15.mchs.ru\r\nwww.16.mchs.gov.ru\r\nwww.16.mchs.ru\r\nwww.17-mail.chechnya.gov.ru\r\nwww.17.mchs.gov.ru\r\nwww.17.mchs.ru\r\nwww.17www.chechnya.gov.ru\r\nwww.18.mchs.gov.ru\r\nwww.18.mchs.ru\r\nwww.18e0ww.kino-teatr.ru\r\nwww.19.mchs.gov.ru\r\nwww.19.mchs.ru\r\nwww.1a79ww.kino-teatr.ru\r\nwww.1cerp.t2.ru\r\nwww.1tv.ru\r\nwww.2-mail.chechnya.gov.ru\r\nwww.2.kino-teatr.ru\r\nwww.2.zdorovie-shkolnika.spb.aif.ru\r\nwww.20.fskn.gov.ru\r\nwww.20.mchs.ru\r\nwww.2000www.kino-teatr.ru\r\nwww.2019.tinkoff.ru\r\nwww.2020.2gis.ru\r\nwww.20let.stihi.ru\r\nwww.21.mchs.gov.ru\r\nwww.21.mchs.ru\r\nwww.22.mchs.gov.ru\r\nwww.22.mchs.ru\r\nwww.23.mchs.gov.ru\r\nwww.23.mchs.ru\r\nwww.24.mchs.gov.ru\r\nwww.24.mchs.ru\r\nwww.24.sovcombank.ru\r\nwww.25.1tv.ru\r\nwww.25.mchs.gov.ru\r\nwww.25.mchs.ru\r\nwww.26.mchs.gov.ru\r\nwww.26.mchs.ru\r\nwww.27.mchs.gov.ru\r\nwww.27.mchs.ru\r\nwww.28.mchs.gov.ru\r\nwww.28.mchs.ru\r\nwww.29.mchs.gov.ru\r\nwww.29.mchs.ru\r\nwww.2fwww.kino-teatr.ru\r\nwww.2gis.ru\r\nwww.2life.magnit.ru\r\nwww.2memdav.mts.ru\r\nwww.2memory.mts.ru\r\nwww.2memory2.mts.ru\r\nwww.2whut0sbkby3ihpm.rostelecom.oren.aif.ru\r\nwww.2www.kino-teatr.ru\r\nwww.30.fskn.gov.ru\r\nwww.30.garant.ru\r\nwww.30.mchs.gov.ru\r\nwww.30.mchs.ru\r\nwww.31.fskn.gov.ru\r\nwww.31.mchs.gov.ru\r\nwww.31.mchs.ru\r\nwww.32.mchs.gov.ru\r\nwww.32.mchs.ru\r\nwww.33.mchs.gov.ru\r\nwww.33.mchs.ru\r\nwww.34.mchs.gov.ru\r\nwww.34.mchs.ru\r\nwww.35.mchs.gov.ru\r\nwww.35.mchs.ru\r\nwww.36.mchs.gov.ru\r\nwww.36.mchs.ru\r\nwww.366.youdo.com\r\nwww.37.mchs.gov.ru\r\nwww.37.mchs.ru\r\nwww.38.mchs.gov.ru\r\nwww.38.mchs.ru\r\nwww.39.mchs.gov.ru\r\nwww.39.mchs.ru\r\nwww.3ds-test.open.ru\r\nwww.3ds.open.ru\r\nwww.3ds.openbank.ru\r\nwww.3ds.vtb.ru\r\nwww.3ds2.open.ru\r\nwww.3dsp.vtb.ru\r\nwww.3dsp2.vtb.ru\r\nwww.3dsserver.alfabank.ru\r\nwww.4-mail.chechnya.gov.ru\r\nwww.40.mchs.gov.ru\r\nwww.40.mchs.ru\r\nwww.41.mchs.gov.ru\r\nwww.41.mchs.ru\r\nwww.42.mchs.gov.ru\r\nwww.42.mchs.ru\r\nwww.43.mchs.gov.ru\r\nwww.43.mchs.ru\r\nwww.44.mchs.gov.ru\r\nwww.44.mchs.ru\r\nwww.45.mchs.gov.ru\r\nwww.45.mchs.ru\r\nwww.45608172-1aff-4f7b-be2a-8e0984015288.kino-teatr.ru\r\nwww.46.mchs.gov.ru\r\nwww.46.mchs.ru\r\nwww.47.mchs.gov.ru\r\nwww.47.mchs.ru\r\nwww.48.mchs.gov.ru\r\nwww.48.mchs.ru\r\nwww.49.mchs.gov.ru\r\nwww.49.mchs.ru\r\nwww.4zo6zthxzgksm0bs3gbm8o.chechnya.gov.ru\r\nwww.5-www.chechnya.gov.ru\r\nwww.50.mchs.gov.ru\r\nwww.50.mchs.ru\r\nwww.51.mchs.gov.ru\r\nwww.51.mchs.ru\r\nwww.52.mchs.gov.ru\r\nwww.52.mchs.ru\r\nwww.53.mchs.gov.ru\r\nwww.53.mchs.ru\r\nwww.54.mchs.gov.ru\r\nwww.54.mchs.ru\r\nwww.55.mchs.gov.ru\r\nwww.55.mchs.ru\r\nwww.56.mchs.gov.ru\r\nwww.56.mchs.ru\r\nwww.57.mchs.gov.ru\r\nwww.57.mchs.ru\r\nwww.58.mchs.gov.ru\r\nwww.58.mchs.ru\r\nwww.59.mchs.gov.ru\r\nwww.59.mchs.ru\r\nwww.5b997e6c-05bb-4ea7-9cb3-17cc4d3cad50.kino-teatr.ru\r\nwww.5ka.youdo.com\r\nwww.5kahh.youdo.com\r\nwww.60.mchs.gov.ru\r\nwww.60.mchs.ru\r\nwww.61.mchs.gov.ru\r\nwww.61.mchs.ru\r\nwww.62.mchs.gov.ru\r\nwww.62.mchs.ru\r\nwww.63.mchs.gov.ru\r\nwww.63.mchs.ru\r\nwww.64.mchs.gov.ru\r\nwww.64.mchs.ru\r\nwww.65.mchs.gov.ru\r\nwww.65.mchs.ru\r\nwww.66.mchs.gov.ru\r\nwww.66.mchs.ru\r\nwww.67.mchs.gov.ru\r\nwww.67.mchs.ru\r\nwww.68.mchs.gov.ru\r\nwww.68.mchs.ru\r\nwww.69.mchs.gov.ru\r\nwww.69.mchs.ru\r\nwww.6b8e0576-99f3-4591-b33e-2e727fe84213.kino-teatr.ru\r\nwww.6www.chechnya.gov.ru\r\nwww.6ycbnr.chechnya.gov.ru\r\nwww.70.mchs.gov.ru\r\nwww.70.mchs.ru\r\nwww.71.mchs.gov.ru\r\nwww.71.mchs.ru\r\nwww.71abb4ff-4691-4157-895c-309db65b4fe0.kino-teatr.ru\r\nwww.72.mchs.gov.ru\r\nwww.72.mchs.ru\r\nwww.73.mchs.gov.ru\r\nwww.73.mchs.ru\r\nwww.74.mchs.gov.ru\r\nwww.74.mchs.ru\r\nwww.75.mchs.gov.ru\r\nwww.75.mchs.ru\r\nwww.76.mchs.gov.ru\r\nwww.76.mchs.ru\r\nwww.77.mchs.ru\r\nwww.78.mchs.gov.ru\r\nwww.78.mchs.ru\r\nwww.79.mchs.gov.ru\r\nwww.79.mchs.ru\r\nwww.7f0v3w19qnx4-yo58g.chechnya.gov.ru\r\nwww.7qtj-bh7pg75jr.chechnya.gov.ru\r\nwww.80.mchs.ru\r\nwww.82.mchs.gov.ru\r\nwww.82.mchs.ru\r\nwww.83.mchs.gov.ru\r\nwww.83.mchs.ru\r\nwww.86.mchs.gov.ru\r\nwww.86.mchs.ru\r\nwww.87.mchs.gov.ru\r\nwww.87.mchs.ru\r\nwww.89.mchs.gov.ru\r\nwww.89.mchs.ru\r\nwww.8vzd8m83.kino-teatr.ru\r\nwww.9111.ru\r\nwww.9111.ruurist21774.9111.ru\r\nwww.92.gov.ru\r\nwww.92.mchs.gov.ru\r\nwww.92.mchs.ru\r\nwww.94.mchs.ru\r\nwww.95.mchs.gov.ru\r\nwww.95.mchs.ru\r\nwww.9511d3fa-537b-43e2-909b-0dc43feb7f67.kino-teatr.ru\r\nwww.9afaf835-f1bd-44b9-ae56-240c32c0281d.kino-teatr.ru\r\nwww.9fkqcyjzhhza6w3l.life.kuzbass.aif.ru\r\nwww.a-heart4home.kino-teatr.ru\r\nwww.a-mail.chechnya.gov.ru\r\nwww.a-new.rosbank.ru\r\nwww.a.1u0pawemmppywbfx.www.gkh.hab.aif.ru\r\nwww.a.2whut0sbkby3ihpm.www.rostelecom.oren.aif.ru\r\nwww.a.2z9z5sehgjk0mkcg.zimmerman.perm.aif.ru\r\nwww.a.6udjwu8tg4ykhmpx.godecologii.omsk.aif.ru\r\nwww.a.afaesbezmaxzpbro.dostoevskiy-spb.aif.ru\r\nwww.a.afaesbezmaxzpbro.www.dostoevskiy-spb.aif.ru\r\nwww.a.autodiscover.life.kuzbass.aif.ru\r\nwww.a.biznes-kubani.aif.ru\r\nwww.a.crczacmfqmwrm0wx.gordost.altai.aif.ru\r\nwww.a.g71ye3upfogqk1ww.www.gordost.altai.aif.ru\r\nwww.a.gitlab.biznes-kubani.aif.ru\r\nwww.a.gitlab.gordost.altai.aif.ru\r\nwww.a.gitlab.kurorty-kubani.aif.ru\r\nwww.a.gubaha.perm.aif.ru\r\nwww.a.kino-teatr.ru\r\nwww.a.kzn5txwwsyp1dhao.www.grant.oren.aif.ru\r\nwww.a.mts.ru\r\nwww.a.ogngwg6gowqaa7ck.www.gpno1.oren.aif.ru\r\nwww.a.rosbank.ru\r\nwww.a.rostelecom.oren.aif.ru\r\nwww.a.vmeste-s-farmet.kuban.aif.ru\r\nwww.a.wakhqeekinoob6ru.www.grant.oren.aif.ru\r\nwww.a.zbzoukuzbmxjjcq9.godecologii.omsk.aif.ru\r\nwww.a1pdaread.litres.ru\r\nwww.a1read.litres.ru\r\nwww.a2p.t2.ru\r\nwww.a2p.tele2.ru\r\nwww.aalene194.kino-teatr.ru\r\nwww.abakan.dev.kp.ru\r\nwww.abakan.kp.ru\r\nwww.abakan.lemanapro.ru\r\nwww.abakan.uskov.dev.kp.ru\r\nwww.abm.alfabank.ru\r\nwww.abox.pochta.ru\r\nwww.academ19.vedomosti.ru\r\nwww.academy.vtb.ru\r\nwww.academy.yandex.ru\r\nwww.academyifa.hh.ru\r\nwww.accept.dw.euro.who.int\r\nwww.accept.gateway.euro.who.int\r\nwww.access.who.int\r\nwww.access.worldbank.org\r\nwww.accessdev.worldbank.org\r\nwww.accessqa.worldbank.org\r\nwww.accesstre.worldbank.org\r\nwww.accesstredr.worldbank.org\r\nwww.account.habr.com\r\nwww.accounting-forum.kino-teatr.ru\r\nwww.accr.vtb.ru\r\nwww.acid.chechnya.gov.ru\r\nwww.acquiring.vtb.ru\r\nwww.acre.vtb.ru\r\nwww.acs-test.alfabank.ru\r\nwww.acs.alfabank.ru\r\nwww.acs.mkb.ru\r\nwww.acs.rshb.ru\r\nwww.acs.vtb.ru\r\nwww.acs2.mkb.ru\r\nwww.acs2.rshb.ru\r\nwww.acstest2.mkb.ru\r\nwww.actd.kino-teatr.ru\r\nwww.activation.sber.ru\r\nwww.actresss.kino-teatr.ru\r\nwww.adamsays.kino-teatr.ru\r\nwww.adblock.services.livejournal.com\r\nwww.adf.kino-teatr.ru\r\nwww.adfs.chechnya.gov.ru\r\nwww.adfs.office.tutu.ru\r\nwww.adfsdevlogon.worldbank.org\r\nwww.adfslogon.worldbank.org\r\nwww.adigea.aif.ru\r\nwww.adm.tinkoff.ru\r\nwww.admin-api.kino-teatr.ru\r\nwww.admin-cert.rosbank.ru\r\nwww.admin-dev.rosbank.ru\r\nwww.admin-new.rosbank.ru\r\nwww.admin-target.t2.ru\r\nwww.admin-test.rosbank.ru\r\nwww.admin.aif-city.spb.aif.ru\r\nwww.admin.busines-lady-spb.aif.ru\r\nwww.admin.dostoevskiy-spb.aif.ru\r\nwww.admin.gkh.hab.aif.ru\r\nwww.admin.kino-teatr.ru\r\nwww.admin.longread.altai.aif.ru\r\nwww.admin.reader.litres.ru\r\nwww.admin.rosbank.ru\r\nwww.adminarchivesjenkins.worldbank.org\r\nwww.adminarchivesstaging.worldbank.org\r\nwww.adminpanel.kino-teatr.ru\r\nwww.adresa.yandex.ru\r\nwww.ads.vk.com\r\nwww.ads.youdo.com\r\nwww.adsloko.kino-teatr.ru\r\nwww.adsrv.hh.ru\r\nwww.adv.2gis.ru\r\nwww.adv.habr.com\r\nwww.adv.yandex.ru\r\nwww.adventure.sports.ru\r\nwww.advertising.yandex.ru\r\nwww.advisa.open.ru\r\nwww.advokat16326.9111.ru\r\nwww.ae02.msk.vtb.ru\r\nwww.aeb.kino-teatr.ru\r\nwww.aero.garant.ru\r\nwww.aesf.mts.ru\r\nwww.affilate.hh.ru\r\nwww.afisha.ru\r\nwww.afisha.yandex.ru\r\nwww.africayouthemployment.worldbank.org\r\nwww.afro.who.int\r\nwww.afx.alfabank.ru\r\nwww.aganina.lideryrossii.tass.ru\r\nwww.agclicfg.kino-teatr.ru\r\nwww.age.zdorovie-shkolnika.spb.aif.ru\r\nwww.ageguojiadubohefa.kino-teatr.ru\r\nwww.agent.openbank.ru\r\nwww.agents.sovcombank.ru\r\nwww.aggregator-mc.t2.ru\r\nwww.aging.kino-teatr.ru\r\nwww.agqqmsg.worldbank.org\r\nwww.agro.magnit.ru\r\nwww.agvyqremote.kino-teatr.ru\r\nwww.agw.ims.tele2.ru\r\nwww.ahf.afro.who.int\r\nwww.aho.afro.who.int\r\nwww.ai-journey.bizconf.rbc.ru\r\nwww.ai.kino-teatr.ru\r\nwww.airconsole.open.ru\r\nwww.ais.fadm.gov.ru\r\nwww.akdseystem.kino-teatr.ru\r\nwww.aldrich-regular.kino-teatr.ru\r\nwww.aleksan.social.tomsk.gov.ru\r\nwww.aleksandrova.dev.kp.ru\r\nwww.alfa-mobile.alfabank.ru\r\nwww.alfabank.ru\r\nwww.alfabox.alfabank.ru\r\nwww.alfadisk.alfabank.ru\r\nwww.alfago.alfabank.ru\r\nwww.alfagotest.alfabank.ru\r\nwww.alfainvest.alfabank.ru\r\nwww.alfapeople.alfabank.ru\r\nwww.alfateam.alfabank.ru\r\nwww.all.litres.ru\r\nwww.all.mts.ru\r\nwww.allaccount.2gis.ru\r\nwww.allmegafon.litres.ru\r\nwww.alrp.worldbank.org\r\nwww.alt.dev.kp.ru\r\nwww.alt.kp.ru\r\nwww.altai.aif.ru\r\nwww.amail.alfabank.ru\r\nwww.amark.rosbank.ru\r\nwww.amcalls.alfabank.ru\r\nwww.aml.rosbank.ru\r\nwww.amq-rbs.open.ru\r\nwww.amur.dev.kp.ru\r\nwww.amur.kp.ru\r\nwww.amur.uskov.dev.kp.ru\r\nwww.anadyr.lemanapro.ru\r\nwww.analytics.t2.ru\r\nwww.anapa.hh.ru\r\nwww.ancor.youdo.com\r\nwww.android-ebook-cat2.litres.ru\r\nwww.android-ebook-lv.litres.ru\r\nwww.android-free-crime.litres.ru\r\nwww.android-free-fantasy.litres.ru\r\nwww.android-free-love.litres.ru\r\nwww.android-free-scifi.litres.ru\r\nwww.android-free-self.litres.ru\r\nwww.android-free.litres.ru\r\nwww.android-lib.litres.ru\r\nwww.android.litres.ru\r\nwww.angstrem.youdo.com\r\nwww.anketa.alfabank.ru\r\nwww.anketa.vtb.ru\r\nwww.anmfo.alfabank.ru\r\nwww.ant.proza.ru\r\nwww.ant.stihi.ru\r\nwww.anthony.zdorovie-shkolnika.spb.aif.ru\r\nwww.anticor.rosatom.ru\r\nwww.antispam.yandex.ru\r\nwww.anyway.alfabank.ru\r\nwww.anzhero-sudzhensk.hh.ru\r\nwww.apadp.openbank.ru\r\nwww.apapi.alfabank.ru\r\nwww.apeople.open.ru\r\nwww.api-cert.rosbank.ru\r\nwww.api-cp.rosatom.ru\r\nwww.api-dev.kino-teatr.ru\r\nwww.api-dev.rosbank.ru\r\nwww.api-mmobile.magnit.ru\r\nwww.api-new.rosbank.ru\r\nwww.api-test.kino-teatr.ru\r\nwww.api-test.rosbank.ru\r\nwww.api-x.tutu.ru\r\nwww.api.2gis.ru\r\nwww.api.alfabank.ru\r\nwww.api.appservice.azuremsk.ec.mts.ru\r\nwww.api.bdkm-support-test.magnit.ru\r\nwww.api.bdkm-test.magnit.ru\r\nwww.api.bdkm.magnit.ru\r\nwww.api.ipoteka.alfabank.ru\r\nwww.api.kino-teatr.ru\r\nwww.api.lk.psbank.ru\r\nwww.api.open.ru\r\nwww.api.profi.ru\r\nwww.api.rosbank.ru\r\nwww.api.vk.com\r\nwww.api.vtb.ru\r\nwww.api.webinar.2gis.ru\r\nwww.api.www.webinar.2gis.ru\r\nwww.api.youdo.com\r\nwww.api1.open.ru\r\nwww.api1.openbank.ru\r\nwww.api2.kino-teatr.ru\r\nwww.apiktv.rosatom.ru\r\nwww.apim.rosbank.ru\r\nwww.apiservicecurers.open.ru\r\nwww.apiws.alfabank.ru\r\nwww.apk.vtb.ru\r\nwww.apmaxoptra03.open.ru\r\nwww.apollotyres.kino-teatr.ru\r\nwww.app-aramismp-tst01.open.ru\r\nwww.app-dev.kino-teatr.ru\r\nwww.app-dib001.open.ru\r\nwww.app-dib002.open.ru\r\nwww.app-gen-gms-br.open.ru\r\nwww.app-gen-gms-rgsb.open.ru\r\nwww.app-gen-gms.open.ru\r\nwww.app-gen-wa-edna-npf.open.ru\r\nwww.app-gen-wa-edna.open.ru\r\nwww.app-gen-webrtcdmz1.open.ru\r\nwww.app-gen-webrtcdmz2.open.ru\r\nwww.app-gen-webrtcdmz3.open.ru\r\nwww.app-gen-webrtcdmz4.open.ru\r\nwww.app-gen-wfm.open.ru\r\nwww.app-kafka.open.ru\r\nwww.app-mic001.open.ru\r\nwww.app-mobiron002.open.ru\r\nwww.app-mobiron003.open.ru\r\nwww.app-mobiron004.open.ru\r\nwww.app-mobiron005.open.ru\r\nwww.app-mobiron006.open.ru\r\nwww.app-mobiron007.open.ru\r\nwww.app-mobiron008.open.ru\r\nwww.app-mobiron009.open.ru\r\nwww.app-msbbp001.open.ru\r\nwww.app-radius002.open.ru\r\nwww.app-si-ext001.dmz.open.ru\r\nwww.app-spq02.open.ru\r\nwww.app-tibco-dmz.open.ru\r\nwww.app.kino-teatr.ru\r\nwww.app.open.ru\r\nwww.app.sber.ru\r\nwww.app.sberbank.ru\r\nwww.app.sovcombank.ru\r\nwww.app.vtb.ru\r\nwww.appdbo1.open.ru\r\nwww.applicant.worldbank.org\r\nwww.apps.collaboration-uat.worldbank.org\r\nwww.apps.collaboration.worldbank.org\r\nwww.apps.desk.kp.ru\r\nwww.apps.sber.ru\r\nwww.apps.sberbank.ru\r\nwww.apps.tele2.ru\r\nwww.appsclub.t2.ru\r\nwww.appsclub.tele2.ru\r\nwww.appweb.broker.vtb.ru\r\nwww.apricot.tiu.ru\r\nwww.apteka.magnit.ru\r\nwww.apteka.ru\r\nwww.apteka.vprok.ru\r\nwww.apteki.open.ru\r\nwww.aqua.zdorovie-shkolnika.spb.aif.ru\r\nwww.ar.gov.ru\r\nwww.ar.rkn.gov.ru\r\nwww.ar2012.rzd.ru\r\nwww.ar2013.rzd.ru\r\nwww.ar2014.rzd.ru\r\nwww.ar2015.rzd.ru\r\nwww.ar2016.rzd.ru\r\nwww.ar2017.nornickel.com\r\nwww.ar2017.rzd.ru\r\nwww.ar2017.x5.ru\r\nwww.ar2018.invest.mvideo.ru\r\nwww.ar2018.nornickel.com\r\nwww.ar2018.rostelecom.ru\r\nwww.ar2018.rzd.ru\r\nwww.ar2018.vtb.ru\r\nwww.ar2018.x5.ru\r\nwww.ar2019.megafon.ru\r\nwww.ar2019.mkb.ru\r\nwww.ar2019.mts.ru\r\nwww.ar2019.nornickel.com\r\nwww.ar2019.rzd.ru\r\nwww.ar2020.nornickel.com\r\nwww.ar2020.rzd.ru\r\nwww.ar2020.vtb.ru\r\nwww.ar2021.nornickel.com\r\nwww.ar2021.rzd.ru\r\nwww.aramis-mp.open.ru\r\nwww.arc-utils.kino-teatr.ru\r\nwww.archivesholdings.worldbank.org\r\nwww.arctic.gov.ru\r\nwww.argument.magnit.ru\r\nwww.arh.dev.kp.ru\r\nwww.arh.kp.ru\r\nwww.arh.tele2.ru\r\nwww.arh.uskov.dev.kp.ru\r\nwww.arkhangelsk.lemanapro.ru\r\nwww.armhde.magnit.ru\r\nwww.arsint01.magnit.ru\r\nwww.arsint02.magnit.ru\r\nwww.arsinthelix.magnit.ru\r\nwww.arsystem.magnit.ru\r\nwww.art.t2.ru\r\nwww.artifactory.web-staging.2gis.ru\r\nwww.as-dpe.mon.gov.ru\r\nwww.aschubeta.kino-teatr.ru\r\nwww.asd-market.avito.ru\r\nwww.ask.ivi.ru\r\nwww.ask11.kino-teatr.ru\r\nwww.askue.beeline.ru\r\nwww.asoi.interfax.ru\r\nwww.asozd.duma.gov.ru\r\nwww.asozd2.duma.gov.ru\r\nwww.assets-wss-ob.open.ru\r\nwww.assets-wss-rgs-bank.open.ru\r\nwww.assets.kino-teatr.ru\r\nwww.assets.zakupki.magnit.ru\r\nwww.assist.megafon.ru\r\nwww.asskddnfaforum.kino-teatr.ru\r\nwww.astrahan.lemanapro.ru\r\nwww.astrakhan.dev.kp.ru\r\nwww.astrakhan.hh.ru\r\nwww.astrakhan.kp.ru\r\nwww.async-online3.vtb.ru\r\nwww.at.zdorovie-shkolnika.spb.aif.ru\r\nwww.atic.kino-teatr.ru\r\nwww.atlas.yandex.ru\r\nwww.atomskills.rosatom.ru\r\nwww.atr.gov.ru\r\nwww.atv.alfabank.ru\r\nwww.audiomegafon.litres.ru\r\nwww.audit.gov.ru\r\nwww.auth-cp.rosatom.ru\r\nwww.auth-partners.alfabank.ru\r\nwww.auth.kino-teatr.ru\r\nwww.auth.open.ru\r\nwww.auth.openbank.ru\r\nwww.auth.sm.fadn.gov.ru\r\nwww.auto.kp.ru\r\nwww.auto.mts.ru\r\nwww.auto.vtb.ru\r\nwww.auto.yandex.ru\r\nwww.autoconfig.ads.zdorovie-shkolnika.spb.aif.ru\r\nwww.autodiscover.domino.worldbank.org\r\nwww.autodiscover.dostoevskiy-spb.aif.ru\r\nwww.autodiscover.kino-teatr.ru\r\nwww.autodiscover.pr.vtb.ru\r\nwww.autodiscover.rutube.ru\r\nwww.autodiscover.shop.zdorovie-shkolnika.spb.aif.ru\r\nwww.autodrive.t2.ru\r\nwww.automotive.zdorovie-shkolnika.spb.aif.ru\r\nwww.autopay.tele2.ru\r\nwww.av.rosatom.ru\r\nwww.avc.alfabank.ru\r\nwww.avemart.kino-teatr.ru\r\nwww.avito.avito.avito.www.u6mod1v0hsu9l7ii.farmet.kuban.aif.ru\r\nwww.avito.ru\r\nwww.avito.sber.sberbank.www.u6mod1v0hsu9l7ii.farmet.kuban.aif.ru\r\nwww.avito.sberbank.www.u6mod1v0hsu9l7ii.farmet.kuban.aif.ru\r\nwww.award.2gis.ru\r\nwww.b.kino-teatr.ru\r\nwww.b.litres.ru\r\nwww.b.mts.ru\r\nwww.b2b-api.magnit.ru\r\nwww.b2b.beeline.ru\r\nwww.b2b.middle-api.magnit.ru\r\nwww.b2b.test-middle-api.magnit.ru\r\nwww.b2b.youdo.com\r\nwww.b2bcontrol.tele2.ru\r\nwww.b2bcrm.tele2.ru\r\nwww.baas.alfabank.ru\r\nwww.babyblog.ru\r\nwww.backend.kino-teatr.ru\r\nwww.backoffice.t2ru-pay.corp.t2.ru\r\nwww.bakal.hh.ru\r\nwww.balance.yandex.ru\r\nwww.balashikha.hh.ru\r\nwww.balkans.dev.kp.ru\r\nwww.balkans.kp.ru\r\nwww.balkans.uskov.dev.kp.ru\r\nwww.banan.magnit.ru\r\nwww.bank.ozon.ru\r\nwww.bankclient.kirov.rshb.ru\r\nwww.bankclient.tver.rshb.ru\r\nwww.banki.ru\r\nwww.bankrupt-forum.interfax.ru\r\nwww.bankruptcy.kommersant.ru\r\nwww.bankruptcy2.kommersant.ru\r\nwww.banksy.mts.ru\r\nwww.banners.zdorovie-shkolnika.spb.aif.ru\r\nwww.baraholka.avito.ru\r\nwww.barnaul.lemanapro.ru\r\nwww.base.consultant.ru\r\nwww.baseball.zdorovie-shkolnika.spb.aif.ru\r\nwww.bash.fas.gov.ru\r\nwww.bashkortostan.alfabank.ru\r\nwww.battle2019.ren.tv\r\nwww.bayan.yandex.ru\r\nwww.bayan2.yandex.ru\r\nwww.bbimd.cn.www.sports.ru\r\nwww.bbtest.zdorovie-shkolnika.spb.aif.ru\r\nwww.bc.chukotka.rshb.ru\r\nwww.bcrm.vimpelcom.ru\r\nwww.bd071780.virtua.com.br.hh.ru\r\nwww.bd676ccd-e9de-4419-a890-92930e538c50.kino-teatr.ru\r\nwww.beauty-spb.aif.ru\r\nwww.beeline.ru\r\nwww.beelinerusall.litres.ru\r\nwww.beelineruslisten.litres.ru\r\nwww.beelineruspremium.litres.ru\r\nwww.beelinerusread.litres.ru\r\nwww.beer.zdorovie-shkolnika.spb.aif.ru\r\nwww.bel.dev.kp.ru\r\nwww.bel.kp.ru\r\nwww.bel.parliament.gov.ru\r\nwww.bel.uskov.dev.kp.ru\r\nwww.belarus.garant.ru\r\nwww.belarus.kp.ru\r\nwww.belgorod.lemanapro.ru\r\nwww.belgorod.tele2.ru\r\nwww.beltelecomall.litres.ru\r\nwww.beta-maps.yandex.ru\r\nwww.beta-promo.yandex.ru\r\nwww.beta.aif-city.spb.aif.ru\r\nwww.beta.busines-lady-spb.aif.ru\r\nwww.beta.city.yandex.ru\r\nwww.beta.db.vtb.ru\r\nwww.beta.dostoevskiy-spb.aif.ru\r\nwww.beta.gkh.hab.aif.ru\r\nwww.beta.gorod.yandex.ru\r\nwww.beta.kino-teatr.ru\r\nwww.beta.kp.ru\r\nwww.beta.longread.altai.aif.ru\r\nwww.beta.maps.yandex.ru\r\nwww.beta.webinar.2gis.ru\r\nwww.beta.www.webinar.2gis.ru\r\nwww.beta.zdorovie-shkolnika.spb.aif.ru\r\nwww.betkeeper.championat.com\r\nwww.bfd.sberbank.ru\r\nwww.bfqde2023llsplde12qd27qdl.kino-teatr.ru\r\nwww.bg.alfabank.ru\r\nwww.bi.avito.ru\r\nwww.bi.rutube.ru\r\nwww.biblio.litres.ru\r\nwww.bibliofree.litres.ru\r\nwww.binbank-online.open.ru\r\nwww.bindcard.tele2.ru\r\nwww.birobidzhan.lemanapro.ru\r\nwww.birthday.magnit.ru\r\nwww.bishkek.kp.ru\r\nwww.bistronom.youdo.com\r\nwww.bitbucket2.worldbank.org\r\nwww.bitbucket50.worldbank.org\r\nwww.bitools.sovcombank.ru\r\nwww.bitrix-app-test.open.ru\r\nwww.bitrix2-trust.open.ru\r\nwww.bk.youdo.com\r\nwww.blagoveshchensk.lemanapro.ru\r\nwww.blockchain.x5.ru\r\nwww.blog-admin.kino-teatr.ru\r\nwww.blog.gkh.hab.aif.ru\r\nwww.blog.kino-teatr.ru\r\nwww.blog.rutube.ru\r\nwww.blog.yandex.ru\r\nwww.blog.youdo.com\r\nwww.blogs.worldbank.org\r\nwww.blue.max.com\r\nwww.bm.games.megafon.ru\r\nwww.bmail.kino-teatr.ru\r\nwww.bnetfgw.kino-teatr.ru\r\nwww.bo-gate-api.vtb.ru\r\nwww.bo-test11.vtb.ru\r\nwww.bo.vtb.ru\r\nwww.board.hh.ru\r\nwww.board.zdorovie-shkolnika.spb.aif.ru\r\nwww.bobrovskij-r20.gosweb.gosuslugi.ru\r\nwww.bonus.magnit.ru\r\nwww.bonus.mts.ru\r\nwww.books.litres.ru\r\nwww.books.proza.ru\r\nwww.books.stihi.ru\r\nwww.books.yandex.ru\r\nwww.bp.open.ru\r\nwww.bqr.vtb.ru\r\nwww.br.fas.gov.ru\r\nwww.brand.vtb.ru\r\nwww.breezecore-sm100.consultant.ru\r\nwww.brickoptimizer.kino-teatr.ru\r\nwww.broker.rshb.ru\r\nwww.broker.vtb.ru\r\nwww.broker1.rshb.ru\r\nwww.broker2.rshb.ru\r\nwww.browser.yandex.ru\r\nwww.bryansk.dev.kp.ru\r\nwww.bryansk.hh.ru\r\nwww.bryansk.kp.ru\r\nwww.bryansk.lemanapro.ru\r\nwww.bryansk.tele2.ru\r\nwww.bryansk.uskov.dev.kp.ru\r\nwww.bs.2gis.ru\r\nwww.bsms.t2.ru\r\nwww.bsms.tele2.ru\r\nwww.btn.worldbank.org\r\nwww.bugbounty.kino-teatr.ru\r\nwww.buh.sovcombank.ru\r\nwww.bulgaria.kp.ru\r\nwww.business.auth.alfabank.ru\r\nwww.business.avito.ru\r\nwww.business.beeline.ru\r\nwww.businessregister.sovcombank.ru\r\nwww.businesstechnology.leasing.rshb.ru\r\nwww.buyer-api.kino-teatr.ru\r\nwww.buzova.magnit.ru\r\nwww.bwp.worldbank.org\r\nwww.bwq.worldbank.org\r\nwww.bwqas30.worldbank.org\r\nwww.bwqci30.worldbank.org\r\nwww.bws.worldbank.org\r\nwww.bwu.worldbank.org\r\nwww.bwv.worldbank.org\r\nwww.bzdsit.magnit.ru\r\nwww.bzn.domclick.ru\r\nwww.c.premier.one\r\nwww.c.rutube.ru\r\nwww.c12329.kino-teatr.ru\r\nwww.c2b-sbp.openbank.ru\r\nwww.ca.magnit.ru\r\nwww.ca.rambler.ru\r\nwww.cab.kino-teatr.ru\r\nwww.cabinet.mon.gov.ru\r\nwww.cabinet.rshb.ru\r\nwww.cabinet.zdorovie-shkolnika.spb.aif.ru\r\nwww.calendar.yandex.ru\r\nwww.callcenter.afisha.ru\r\nwww.callerid.sberbank.ru\r\nwww.callerid.sovcombank.ru\r\nwww.canada.dev.kp.ru\r\nwww.canada.kp.ru\r\nwww.candidate-cp.rosatom.ru\r\nwww.captive.megafon.ru\r\nwww.card-transfer.tele2.ru\r\nwww.card.market.tele2.ru\r\nwww.card.tele2.ru\r\nwww.carddesigner.rosbank.ru\r\nwww.cardstore.t2.ru\r\nwww.career-guide.vedomosti.ru\r\nwww.career.vedomosti.ru\r\nwww.cashback.api.beeline.ru\r\nwww.cashcredit.t2.ru\r\nwww.catalit.litres.ru\r\nwww.catalog.1tv.ru\r\nwww.catalog.smartmarket.sber.ru\r\nwww.catalog.yandex.ru\r\nwww.cb.open.ru\r\nwww.cba.worldbank.org\r\nwww.cc.alfabank.ru\r\nwww.cc.bonus.mts.ru\r\nwww.cc.vtb.ru\r\nwww.ccmmp.magnit.ru\r\nwww.ccps1.ims.tele2.ru\r\nwww.ccps2.ims.tele2.ru\r\nwww.cctraining.worldbank.org\r\nwww.cdb.tools.russianpost.ru\r\nwww.cdjvmk0yrm5tqxhxtgk2b09cahddvez6dlbrvk5uufhnqudftnr2ywclm0qlm0q.kino-teatr.ru\r\nwww.cdn.invest.sovcombank.ru\r\nwww.cdn.kino-teatr.ru\r\nwww.cdn.open.ru\r\nwww.cdn.profi.ru\r\nwww.cdn.vtb.ru\r\nwww.cdncv0.litres.ru\r\nwww.cdncv1.litres.ru\r\nwww.cdncv4.litres.ru\r\nwww.cdncv5.litres.ru\r\nwww.cdncv6.litres.ru\r\nwww.cdncv7.litres.ru\r\nwww.cdroster.worldbank.org\r\nwww.central.kino-teatr.ru\r\nwww.ceo.alfabank.ru\r\nwww.cert.rosbank.ru\r\nwww.cert.vtb.ru\r\nwww.certauth.sts1.rosatom.ru\r\nwww.certauth.sts3.rosatom.ru\r\nwww.certificate.otello.2gis.ru\r\nwww.cfg.tinkoff.ru\r\nwww.cfo-front.alfabank.ru\r\nwww.cgp.rosnedra.gov.ru\r\nwww.championat.com\r\nwww.change.kino-teatr.ru\r\nwww.chapman.iz.ru\r\nwww.chapman.ren.tv\r\nwww.chat-sharing.vtb.ru\r\nwww.chat.rshb.ru\r\nwww.chat2.my.tiu.ru\r\nwww.chat3.vtb.ru\r\nwww.chatbot-id.open.ru\r\nwww.chatik.hh.ru\r\nwww.chatik.kirov.hh.ru\r\nwww.chatik.mytischi.hh.ru\r\nwww.chatik.ramenskoye.hh.ru\r\nwww.chatik.ulyanovsk.hh.ru\r\nwww.chatik.zheleznogorsk-kursk.hh.ru\r\nwww.chatul.rshb.ru\r\nwww.cheboksary.lemanapro.ru\r\nwww.checkbox.youdo.com\r\nwww.checkin.2gis.ru\r\nwww.chekhov.hh.ru\r\nwww.chel.aif.ru\r\nwww.chel.dev.kp.ru\r\nwww.chel.kp.ru\r\nwww.chel.uskov.dev.kp.ru\r\nwww.chelyabinsk.lemanapro.ru\r\nwww.chelyabinsk.tele2.ru\r\nwww.cherepovets.lemanapro.ru\r\nwww.cherkessk.lemanapro.ru\r\nwww.cherm.hh.ru\r\nwww.chita.dev.kp.ru\r\nwww.chita.kp.ru\r\nwww.chita.lemanapro.ru\r\nwww.chita.uskov.dev.kp.ru\r\nwww.chizhik.ru\r\nwww.chn.vtb.ru\r\nwww.chocolate.zdorovie-shkolnika.spb.aif.ru\r\nwww.chukotka.kp.ru\r\nwww.cicd.kino-teatr.ru\r\nwww.cifra.vtb.ru\r\nwww.cit.alfabank.ru\r\nwww.citilink.ru\r\nwww.city.yandex.ru\r\nwww.cityrestaurants.youdo.com\r\nwww.civil-forum.bizconf.rbc.ru\r\nwww.civil.consultant.ru\r\nwww.cknwhplatinum.kino-teatr.ru\r\nwww.cl.sberbank.ru\r\nwww.cl.vtb.ru\r\nwww.cl1.kino-teatr.ru\r\nwww.class.rambler.ru\r\nwww.click.alfabank.ru\r\nwww.click2call.vtb.ru\r\nwww.clickme.hh.ru\r\nwww.clicks.citilink.ru\r\nwww.clickstream-omni.magnit.ru\r\nwww.client.factoring.rosbank.ru\r\nwww.clientconnection.worldbank.org\r\nwww.clientconnectionfifs.worldbank.org\r\nwww.clientconnectionqa.worldbank.org\r\nwww.clients.open.ru\r\nwww.climatescreeningtools.worldbank.org\r\nwww.clinica.kp.ru\r\nwww.clinika.kp.ru\r\nwww.clm.magnit.ru\r\nwww.clocks.yandex.ru\r\nwww.cloud.beeline.ru\r\nwww.cloud.kino-teatr.ru\r\nwww.cloud.nalog.ru\r\nwww.cloud.videocontrol.t2.ru\r\nwww.cloud.vk.com\r\nwww.club.alfabank.ru\r\nwww.club.eldorado.ru\r\nwww.cmgrsb.rosbank.ru\r\nwww.cms-admin.open.ru\r\nwww.cms-mmobile.magnit.ru\r\nwww.cms.kino-teatr.ru\r\nwww.cms.openbank.ru\r\nwww.cmsicsid.worldbank.org\r\nwww.cmsifc.worldbank.org\r\nwww.cmsint.worldbank.org\r\nwww.cmsmtoc1.worldbank.org\r\nwww.cmsmtog1.worldbank.org\r\nwww.cmsoes.worldbank.org\r\nwww.cn.www.sports.ru\r\nwww.coffee.open.ru\r\nwww.cognos.avito.ru\r\nwww.coins.rshb.ru\r\nwww.collaborate.kino-teatr.ru\r\nwww.collaboration-uat.worldbank.org\r\nwww.collaboration.worldbank.org\r\nwww.collection.yandex.ru\r\nwww.collections.yandex.ru\r\nwww.comet-cp.rosatom.ru\r\nwww.comissia.economy.gov.ru\r\nwww.common-api.kino-teatr.ru\r\nwww.companies.rbc.ru\r\nwww.company.citilink.ru\r\nwww.company.garant.ru\r\nwww.compasspoint.worldbank.org\r\nwww.conf.rosatom.ru\r\nwww.conference-info.vedomosti.ru\r\nwww.conference2020.mts.ru\r\nwww.conferencemanager.worldbank.org\r\nwww.config.kino-teatr.ru\r\nwww.config.tinkoff.ru\r\nwww.confluence.sovcombank.ru\r\nwww.connect.mts.ru\r\nwww.constitution.garant.ru\r\nwww.constitution.kremlin.ru\r\nwww.construction.garant.ru\r\nwww.constructor.maps.yandex.ru\r\nwww.consultant.ru\r\nwww.consultant.ruwww.consultant.ru\r\nwww.consultations.worldbank.org\r\nwww.consumer-operations.alfabank.ru\r\nwww.contest.2gis.ru\r\nwww.controlpanel.zdorovie-shkolnika.spb.aif.ru\r\nwww.cookie.zdorovie-shkolnika.spb.aif.ru\r\nwww.core-s-pfv.rosatom.ru\r\nwww.corp.ivi.ru\r\nwww.corp.test.ivi.ru\r\nwww.corporate.mkb.ru\r\nwww.correo.kino-teatr.ru\r\nwww.cosmetic.magnit.ru\r\nwww.cotg.kino-teatr.ru\r\nwww.council.gov.ru\r\nwww.countrysurveys.worldbank.org\r\nwww.courier.magnit.ru\r\nwww.couriers.magnit.ru\r\nwww.course-ey.rbc.ru\r\nwww.cowww.kino-teatr.ru\r\nwww.cpa.hh.ru\r\nwww.cpa.youdo.com\r\nwww.cpa.zdorovie-shkolnika.spb.aif.ru\r\nwww.cpanel.afro.who.int\r\nwww.cpanel.zdorovie-shkolnika.spb.aif.ru\r\nwww.cpcalendars.kino-teatr.ru\r\nwww.cpcontacts.kino-teatr.ru\r\nwww.cpdviseynovawww.kino-teatr.ru\r\nwww.cpma2.psbank.ru\r\nwww.cpmsg.kino-teatr.ru\r\nwww.cpp-nnov.nalog.ru\r\nwww.credit.magnit.ru\r\nwww.credit.rbc.ru\r\nwww.creditcard.magnit.ru\r\nwww.creenkey.kino-teatr.ru\r\nwww.cret.kino-teatr.ru\r\nwww.crimea.dev.kp.ru\r\nwww.crimea.kp.ru\r\nwww.crimea.uskov.dev.kp.ru\r\nwww.crinfo.worldbank.org\r\nwww.crm.hub.litres.ru\r\nwww.crm.kino-teatr.ru\r\nwww.crollingtext8x8.kino-teatr.ru\r\nwww.crypto.rosatom.ru\r\nwww.cryptoforum.rbc.ru\r\nwww.cs.cache.api.vtb.ru\r\nwww.cs.cache2.api.vtb.ru\r\nwww.csai.worldbank.org\r\nwww.csr.bizconf.rbc.ru\r\nwww.csr2018.rostelecom.ru\r\nwww.csr2019.rostelecom.ru\r\nwww.csr2020.vtb.ru\r\nwww.csr21.net.zdorovie-shkolnika.spb.aif.ru\r\nwww.csr31.net.zdorovie-shkolnika.spb.aif.ru\r\nwww.csstream.worldbank.org\r\nwww.ct.zdorovie-shkolnika.spb.aif.ru\r\nwww.ctx-mdm.open.ru\r\nwww.cuda.yandex.ru\r\nwww.culture.ru\r\nwww.cure.kino-teatr.ru\r\nwww.cv.litres.ru\r\nwww.cv0.litres.ru\r\nwww.cv1.litres.ru\r\nwww.cv2.litres.ru\r\nwww.cv3.litres.ru\r\nwww.cv4.litres.ru\r\nwww.cv5.litres.ru\r\nwww.cv6.litres.ru\r\nwww.cv7.litres.ru\r\nwww.cv8.litres.ru\r\nwww.cv9.litres.ru\r\nwww.cxhackathon.tele2.ru\r\nwww.cyberhero.t2.ru\r\nwww.cyberplat2.rbc.ru\r\nwww.cykmvrecycle12.kino-teatr.ru\r\nwww.cyprus.dev.kp.ru\r\nwww.cyprus.kp.ru\r\nwww.cyprus.uskov.dev.kp.ru\r\nwww.czech.dev.kp.ru\r\nwww.d-aalekseev.sports.ru\r\nwww.d-aalyushin.sports.ru\r\nwww.d-aanisimov.sports.ru\r\nwww.d-abocharov.sports.ru\r\nwww.d-afedorov.sports.ru\r\nwww.d-akentyeva.sports.ru\r\nwww.d-akorotin.sports.ru\r\nwww.d-akostelnyuk.sports.ru\r\nwww.d-anisimov.sports.ru\r\nwww.d-anscii.sports.ru\r\nwww.d-anufant.sports.ru\r\nwww.d-aoshchepkov.sports.ru\r\nwww.d-apanisko.sports.ru\r\nwww.d-apopov.sports.ru\r\nwww.d-ashepard.sports.ru\r\nwww.d-atrubchik.sports.ru\r\nwww.d-avalov.sports.ru\r\nwww.d-avolegov.sports.ru\r\nwww.d-avseyanko.sports.ru\r\nwww.d-betting-insider.sports.ru\r\nwww.d-bezgubov.sports.ru\r\nwww.d-buyanov.sports.ru\r\nwww.d-chaplinskiy.sports.ru\r\nwww.d-cyber-stage.sports.ru\r\nwww.d-cyber-test.sports.ru\r\nwww.d-damakin.sports.ru\r\nwww.d-denisov.sports.ru\r\nwww.d-dkustov.sports.ru\r\nwww.d-dmedvedev.sports.ru\r\nwww.d-doba.sports.ru\r\nwww.d-dolzhenko.sports.ru\r\nwww.d-eemelyanov.sports.ru\r\nwww.d-eeremina.sports.ru\r\nwww.d-emadyarov.sports.ru\r\nwww.d-frolov.sports.ru\r\nwww.d-gnekrasov.sports.ru\r\nwww.d-ikudrya.sports.ru\r\nwww.d-khorolets-new.sports.ru\r\nwww.d-khorolets.sports.ru\r\nwww.d-kostelnyuk.sports.ru\r\nwww.d-kozlov.sports.ru\r\nwww.d-livantsov.sports.ru\r\nwww.d-mlevashov.sports.ru\r\nwww.d-momotyuk.sports.ru\r\nwww.d-ogrigoreva.sports.ru\r\nwww.d-peshiy.sports.ru\r\nwww.d-plubyanskiy.sports.ru\r\nwww.d-ppigalev.sports.ru\r\nwww.d-rabaydulin.sports.ru\r\nwww.d-savederkin.sports.ru\r\nwww.d-savin.sports.ru\r\nwww.d-seo.sports.ru\r\nwww.d-sryaposov.sports.ru\r\nwww.d-stage-new.sports.ru\r\nwww.d-stage.sports.ru\r\nwww.d-test-02.sports.ru\r\nwww.d-test-04.sports.ru\r\nwww.d-test.sports.ru\r\nwww.d-tokareva.sports.ru\r\nwww.d-vetoshkin.sports.ru\r\nwww.d-vshibanov.sports.ru\r\nwww.d-vstarov.sports.ru\r\nwww.d-vstarynin.sports.ru\r\nwww.d.premier.one\r\nwww.d.rutube.ru\r\nwww.d2df43bb-9198-4595-a9b6-f3cf57728b87.kino-teatr.ru\r\nwww.dachatbot.vtb.ru\r\nwww.dag.kp.ru\r\nwww.daily.afisha.ru\r\nwww.dalnerechensk.hh.ru\r\nwww.data.gov.ru\r\nwww.data.worldbank.org\r\nwww.databox.worldbank.org\r\nwww.datahelpdesk.worldbank.org\r\nwww.datamarketing.youdo.com\r\nwww.dating.rambler.ru\r\nwww.dating.tele2.ru\r\nwww.daxqa.worldbank.org\r\nwww.db.aif-city.spb.aif.ru\r\nwww.db.dostoevskiy-spb.aif.ru\r\nwww.db.gkh.hab.aif.ru\r\nwww.db.vtb.ru\r\nwww.dbo.open.ru\r\nwww.dbo.openbank.ru\r\nwww.dbo.sovcombank.ru\r\nwww.dbo.vtb.ru\r\nwww.dbotest.vtb.ru\r\nwww.de.litres.ru\r\nwww.dealer.tele2.ru\r\nwww.dealing.rshb.ru\r\nwww.dealing2.rshb.ru\r\nwww.dealing2.uat.rshb.ru\r\nwww.dear.habr.com\r\nwww.deliveryclub.youdo.com\r\nwww.delo.vtb.ru\r\nwww.demo-cb.open.ru\r\nwww.demo.db.vtb.ru\r\nwww.demo.gkh.hab.aif.ru\r\nwww.demo.kino-teatr.ru\r\nwww.deploy.kino-teatr.ru\r\nwww.deploy.zdorovie-shkolnika.spb.aif.ru\r\nwww.design.magnit.ru\r\nwww.desktop.yandex.ru\r\nwww.desktopdeploymentserver.worldbank.org\r\nwww.deti.t2.ru\r\nwww.deti.tele2.ru\r\nwww.dev-chat-sharing.vtb.ru\r\nwww.dev-chat-turn.vtb.ru\r\nwww.dev-chat.vtb.ru\r\nwww.dev-www.webinar.2gis.ru\r\nwww.dev.afro.who.int\r\nwww.dev.aif-city.spb.aif.ru\r\nwww.dev.busines-lady-spb.aif.ru\r\nwww.dev.dostoevskiy-spb.aif.ru\r\nwww.dev.gkh.hab.aif.ru\r\nwww.dev.goszakupki.psbank.ru\r\nwww.dev.kino-teatr.ru\r\nwww.dev.kp.ru\r\nwww.dev.longread.altai.aif.ru\r\nwww.dev.max.com\r\nwww.dev.meduza.io\r\nwww.dev.opaas.who.int\r\nwww.dev.rosbank.ru\r\nwww.devchat.vtb.ru\r\nwww.devel.zdorovie-shkolnika.spb.aif.ru\r\nwww.developer.kino-teatr.ru\r\nwww.developer.sber.ru\r\nwww.developer.vtb.ru\r\nwww.developers.alfabank.ru\r\nwww.developers.kino-teatr.ru\r\nwww.developers.sber.ru\r\nwww.developers.sberbank.ru\r\nwww.developers.vtb.ru\r\nwww.devlink.alfabank.ru\r\nwww.devul-c2b-sbp.openbank.ru\r\nwww.dfa.alfabank.ru\r\nwww.dfas.avito.ru\r\nwww.dfo.gov.ru\r\nwww.dget.kino-teatr.ru\r\nwww.dib.open.ru\r\nwww.dieta.t2.ru\r\nwww.dieta.tele2.ru\r\nwww.digital.ac.gov.ru\r\nwww.digital.alfabank.ru\r\nwww.digital.open.ru\r\nwww.digital.vtb.ru\r\nwww.digitalvpn.open.ru\r\nwww.digp.alfabank.ru\r\nwww.diktant.nalog.ru\r\nwww.director-trust.open.ru\r\nwww.discount.psbank.ru\r\nwww.disk.open.ru\r\nwww.disk.t2.ru\r\nwww.dl.t2.ru\r\nwww.dlhbplatinum.kino-teatr.ru\r\nwww.dm.alfabank.ru\r\nwww.dm.vtb.ru\r\nwww.dnafso.cn.www.sports.ru\r\nwww.dnfaforum.kino-teatr.ru\r\nwww.dns-shop.ru\r\nwww.dobro.magnit.ru\r\nwww.dobro.tele2.ru\r\nwww.docs.gkh.hab.aif.ru\r\nwww.docs.kino-teatr.ru\r\nwww.docs.magnit.ru\r\nwww.doctor.rambler.ru\r\nwww.dodo.youdo.com\r\nwww.doktor.rambler.ru\r\nwww.dolgoprudny.hh.ru\r\nwww.dom.gosuslugi.ru\r\nwww.dom.kp.ru\r\nwww.doma.megafon.ru\r\nwww.doma.test.ivi.ru\r\nwww.domruall.litres.ru\r\nwww.domrupremium.litres.ru\r\nwww.domruread.litres.ru\r\nwww.donetsk.kp.ru\r\nwww.donetsk.uskov.dev.kp.ru\r\nwww.dostavka.magnit.ru\r\nwww.dostavka.russianpost.ru\r\nwww.dostup.mts.ru\r\nwww.dp.tinkoff.ru\r\nwww.dp.vtb.ru\r\nwww.dpd.youdo.com\r\nwww.drive2.ru\r\nwww.driver.yandex.ru\r\nwww.drom.ru\r\nwww.ds-cns-3.kino-teatr.ru\r\nwww.dsp.rbc.ru\r\nwww.dspcounter.rbc.ru\r\nwww.dszn.sev.gov.ru\r\nwww.dte.azure.magnit.ru\r\nwww.dtl-vpn-fw.open.ru\r\nwww.dubinin.lideryrossii.tass.ru\r\nwww.duck.mail.ru\r\nwww.duithreadguardframework.kino-teatr.ru\r\nwww.duma.gov.ru\r\nwww.dv.app.vtb.ru\r\nwww.dv.dev.kp.ru\r\nwww.dv.kp.ru\r\nwww.dv.uskov.dev.kp.ru\r\nwww.dwpbmc.magnit.ru\r\nwww.dzdspb.rzd.ru\r\nwww.dzdvgg.rzd.ru\r\nwww.dzdyar.rzd.ru\r\nwww.dzen.ru\r\nwww.dzerzhinsk.hh.ru\r\nwww.e-disclosure.ru\r\nwww.e-learning.kino-teatr.ru\r\nwww.e.corp.megafon.ru\r\nwww.e.open.ru\r\nwww.e.shop.megafon.ru\r\nwww.e0.hh.ru\r\nwww.e2c.alfabank.ru\r\nwww.ead.zdorovie-shkolnika.spb.aif.ru\r\nwww.eai.rosatom.ru\r\nwww.eao.kp.ru\r\nwww.eao.tele2.ru\r\nwww.eas.pochta.ru\r\nwww.eas.tools.russianpost.ru\r\nwww.ebs-anketa.alfabank.ru\r\nwww.ebs-bio.rshb.ru\r\nwww.ebukva.litres.ru\r\nwww.ecalibrary.worldbank.org\r\nwww.ecard.tinkoff.ru\r\nwww.ecdn.sovcombank.ru\r\nwww.ecoindex.2gis.ru\r\nwww.ecom-api.magnit.ru\r\nwww.ecom.alfabank.ru\r\nwww.ecomtest.alfabank.ru\r\nwww.economy.alania.gov.ru\r\nwww.economy.gov.ru\r\nwww.econsultstc.worldbank.org\r\nwww.ecowww.kino-teatr.ru\r\nwww.ecp-quiz.roseltorg.ru\r\nwww.ed5desktop.worldbank.org\r\nwww.edgemail.worldbank.org\r\nwww.edlhbplatinum.kino-teatr.ru\r\nwww.edu.1tv.ru\r\nwww.edu.megafon.ru\r\nwww.effect.habr.com\r\nwww.efp19.rosatom.ru\r\nwww.eg.yandex.ru\r\nwww.ege.yandex.ru\r\nwww.egiveext.worldbank.org\r\nwww.egypt.dev.kp.ru\r\nwww.eias.fas.gov.ru\r\nwww.einstitute.worldbank.org\r\nwww.ejsihccoupfqzqvur.hh.ru\r\nwww.ek.vtb.ru\r\nwww.ekaterinburg.alfabank.ru\r\nwww.ekaterinburg.lemanapro.ru\r\nwww.ekaterinburvg.hh.ru\r\nwww.ekonayka.leasing.rshb.ru\r\nwww.ekonika.youdo.com\r\nwww.ekspert.yandex.ru\r\nwww.eldorado.ru\r\nwww.element.yandex.ru\r\nwww.element47.rutube.ru\r\nwww.elf.sovcombank.ru\r\nwww.elibrary.worldbank.org\r\nwww.elista.lemanapro.ru\r\nwww.elka-dobra.life.ru\r\nwww.elka.tele2.ru\r\nwww.em.kommersant.ru\r\nwww.email.garant.ru\r\nwww.email.kino-teatr.ru\r\nwww.email.kommersant.ru\r\nwww.email.open.ru\r\nwww.emeeting.worldbank.org\r\nwww.emeetings.worldbank.org\r\nwww.eml.mts.ru\r\nwww.emm.magnit.ru\r\nwww.emp-anketa.alfabank.ru\r\nwww.emp-lead.alfabank.ru\r\nwww.emp-lk.alfabank.ru\r\nwww.employer-reviews-front.hh.ru\r\nwww.emro.who.int\r\nwww.en.flag.kremlin.ru\r\nwww.en.kino-teatr.ru\r\nwww.en.kremlin.ru\r\nwww.en.litres.ru\r\nwww.en.mchs.gov.ru\r\nwww.en.mchs.ru\r\nwww.en.special.kremlin.ru\r\nwww.enaction.garant.ru\r\nwww.energy2019.vedomosti.ru\r\nwww.enfield.spb.aif.ru\r\nwww.eng.flag.kremlin.ru\r\nwww.enpm4zgmak9kzzn0.gkh.hab.aif.ru\r\nwww.eosk.rosatom.ru\r\nwww.ep.roseltorg.ru\r\nwww.epa.api.vtb.ru\r\nwww.eportal.magnit.ru\r\nwww.epp.worldbank.org\r\nwww.epq.worldbank.org\r\nwww.er.mis.zdrav.tomsk.gov.ru\r\nwww.ermmorn.kino-teatr.ru\r\nwww.ernicompany.tiu.ru\r\nwww.erp.kino-teatr.ru\r\nwww.err.zdorovie-shkolnika.spb.aif.ru\r\nwww.es.litres.ru\r\nwww.escoop.worldbank.org\r\nwww.esia.fsa.gov.ru\r\nwww.esir.rosatom.ru\r\nwww.esmdtpep.vtb.ru\r\nwww.esp.rosatom.ru\r\nwww.essentuki-r07.gosweb.gosuslugi.ru\r\nwww.esum.x5.ru\r\nwww.et.mail.ru\r\nwww.etalent.worldbank.org\r\nwww.eteam.worldbank.org\r\nwww.etorussia-mesto.ren.tv\r\nwww.etp.roseltorg.ru\r\nwww.etpgp.rzd.ru\r\nwww.etripdisplay.worldbank.org\r\nwww.ets01.rosatom.ru\r\nwww.eu.pool.zdorovie-shkolnika.spb.aif.ru\r\nwww.eu3rm.kino-teatr.ru\r\nwww.euro.dev.kp.ru\r\nwww.euro.who.int\r\nwww.euronews.com\r\nwww.europewest.longread.altai.aif.ru\r\nwww.eurovision.1tv.ru\r\nwww.event-chat.rosbank.ru\r\nwww.event.2gis.ru\r\nwww.event.rosbank.ru\r\nwww.event.yandex.ru\r\nwww.events.vedomosti.ru\r\nwww.events.yandex.ru\r\nwww.evo-cert.rosbank.ru\r\nwww.evo-test.rosbank.ru\r\nwww.evo.rosbank.ru\r\nwww.ewent.yandex.ru\r\nwww.ewents.yandex.ru\r\nwww.exchange.kino-teatr.ru\r\nwww.exit.magnit.ru\r\nwww.expert.economy.gov.ru\r\nwww.expert.garant.ru\r\nwww.express.magnit.ru\r\nwww.express.mts.ru\r\nwww.express.rosatom.ru\r\nwww.extappsqa.worldbank.org\r\nwww.external-git.open.ru\r\nwww.f.kino-teatr.ru\r\nwww.f.t2.ru\r\nwww.f.tele2.ru\r\nwww.fa.fonbet.ru\r\nwww.factiva.worldbank.org\r\nwww.factoring.alfabank.ru\r\nwww.factoring.psbank.ru\r\nwww.factoring.rosbank.ru\r\nwww.factoring.rshb.ru\r\nwww.fadm.gov.ru\r\nwww.faith.www.sports.ru\r\nwww.family.alfabank.ru\r\nwww.fas.gov.ru\r\nwww.fatca.rshb.ru\r\nwww.fatca.vtb.ru\r\nwww.fb.worldbank.org\r\nwww.fcvindicators.worldbank.org\r\nwww.fda.middle-api.magnit.ru\r\nwww.fedprod.worldbank.org\r\nwww.fedqa.worldbank.org\r\nwww.feed.kino-teatr.ru\r\nwww.feedback.hh.ru\r\nwww.feedback.rosatom.ru\r\nwww.feedback.unicreditbank.ru\r\nwww.feeds.kino-teatr.ru\r\nwww.feeds.kommersant.ru\r\nwww.fest.2gis.ru\r\nwww.fgis.economy.gov.ru\r\nwww.fifa.alfabank.ru\r\nwww.files.kino-teatr.ru\r\nwww.files.sovcombank.ru\r\nwww.film.ru\r\nwww.filter.ncnd.t2.ru\r\nwww.fin.rosnedra.gov.ru\r\nwww.fin2019.vedomosti.ru\r\nwww.finance.pochta.ru\r\nwww.finance.rambler.ru\r\nwww.finances.worldbank.org\r\nwww.financesapp.worldbank.org\r\nwww.fingrad.sovcombank.ru\r\nwww.finportal.x5.ru\r\nwww.finradar.rshb.ru\r\nwww.finsite.t2.ru\r\nwww.fixgo-auto.t2.ru\r\nwww.fixgo-home.t2.ru\r\nwww.fixmail.mts.ru\r\nwww.fizpartnerint.alfabank.ru\r\nwww.flag.kremlin.ru\r\nwww.fld.kino-teatr.ru\r\nwww.flecs.alfabank.ru\r\nwww.flexy.open.ru\r\nwww.flow.zdorovie-shkolnika.spb.aif.ru\r\nwww.fm.kp.ru\r\nwww.fmba.gov.ru\r\nwww.fms.gov.ru\r\nwww.fo.rosbank.ru\r\nwww.fonbet.ru\r\nwww.ford.zdorovie-shkolnika.spb.aif.ru\r\nwww.forest-save.t2.ru\r\nwww.foreverpromo.tele2.ru\r\nwww.form.unicreditbank.ru\r\nwww.forms.mchs.ru\r\nwww.forms.tele2.ru\r\nwww.forum.ixbt.com\r\nwww.forum.kino-teatr.ru\r\nwww.forums.drom.ru\r\nwww.forums.zdorovie-shkolnika.spb.aif.ru\r\nwww.fotki.yandex.ru\r\nwww.fp.tinkoff.ru\r\nwww.freemaildomains.zdorovie-shkolnika.spb.aif.ru\r\nwww.friday.vedomosti.ru\r\nwww.frontend-dev.k8s.rg.ru\r\nwww.frontend-stage.k8s.rg.ru\r\nwww.frontend.kino-teatr.ru\r\nwww.fso.gov.ru\r\nwww.ftp.appservice.azuremsk.ec.mts.ru\r\nwww.ftp.kino-teatr.ru\r\nwww.fun.t2.ru\r\nwww.fun.tele2.ru\r\nwww.fund.zdorovie-shkolnika.spb.aif.ru\r\nwww.fusion.rosatom.ru\r\nwww.fyi.2gis.ru\r\nwww.g.kino-teatr.ru\r\nwww.ga.trex.premier.one\r\nwww.gambit.stable.ivi.ru\r\nwww.game.tz.mail.ru\r\nwww.games.rambler.ru\r\nwww.garage.mts.ru\r\nwww.garant.open.ru\r\nwww.garant.psbank.ru\r\nwww.garant.ru\r\nwww.garda.megafon.ru\r\nwww.garnet.pet-project.habr.com\r\nwww.gateway.chattest.psbank.ru\r\nwww.gateway.kino-teatr.ru\r\nwww.gazeta.ru\r\nwww.gazprombank.ru\r\nwww.genesys.sovcombank.ru\r\nwww.genproc.gov.ru\r\nwww.geo.magnit.ru\r\nwww.geo.pochta.ru\r\nwww.geo.tele2.ru\r\nwww.geoplus.t2.ru\r\nwww.geoplus.tele2.ru\r\nwww.geowb.worldbank.org\r\nwww.german.zdorovie-shkolnika.spb.aif.ru\r\nwww.gfs.gov.ru\r\nwww.ghost.iz.ru\r\nwww.ghost.kino-teatr.ru\r\nwww.giacms.worldbank.org\r\nwww.giadms.worldbank.org\r\nwww.giasp.worldbank.org\r\nwww.gibproxy.hh.ru\r\nwww.gid.m24.ru\r\nwww.giftbook.litres.ru\r\nwww.gismeteo.ru\r\nwww.git.gitlab.gitlab.git.gitlab.aif-city.spb.aif.ru\r\nwww.git.kino-teatr.ru\r\nwww.git.ugwcscan95946ce37bd9a35718a685dbdf36ac61.greeenway.aif.ru\r\nwww.gitlab.dostoevskiy-spb.aif.ru\r\nwww.gitlab.git.gkh.hab.aif.ru\r\nwww.gitlab.git.www.spasibo-internet.kazan.aif.ru\r\nwww.gitlab.kino-teatr.ru\r\nwww.gitlab.magnit.ru\r\nwww.gls.rosatom.ru\r\nwww.gmcr6vsf.alfabank.ru\r\nwww.gms.worldbank.org\r\nwww.gmt.yandex.ru\r\nwww.gnin.kino-teatr.ru\r\nwww.go-test.alfabank.ru\r\nwww.go.garant.ru\r\nwww.go.open.ru\r\nwww.go.sber.ru\r\nwww.go.tutu.ru\r\nwww.goal.mts.ru\r\nwww.gogolev.sports.ru\r\nwww.goods.rutube.ru\r\nwww.gorno-altaysk.lemanapro.ru\r\nwww.gorod.yandex.ru\r\nwww.goroskop.domclick.ru\r\nwww.goryachij-klyuch.hh.ru\r\nwww.gostpki.vtb.ru\r\nwww.gostudy.aif.ru\r\nwww.gosuslugi.ru\r\nwww.goszakupki.psbank.ru\r\nwww.government.ru\r\nwww.government.vedomosti.ru\r\nwww.gptmobile.t2.ru\r\nwww.gpvtxmsfs.kino-teatr.ru\r\nwww.grade.market.yandex.ru\r\nwww.gramotno.rosatom.ru\r\nwww.grampus-int.alfabank.ru\r\nwww.gran.youdo.com\r\nwww.gravity.tele2.ru\r\nwww.green.max.com\r\nwww.greenbay2.worldbank.org\r\nwww.greenhealth.bizconf.rbc.ru\r\nwww.greenweek.bizconf.rbc.ru\r\nwww.groupib-abm.alfabank.ru\r\nwww.groupib-ac.alfabank.ru\r\nwww.groupib-alfaid.alfabank.ru\r\nwww.groupib-am.alfabank.ru\r\nwww.groznyy.lemanapro.ru\r\nwww.gsd02.worldbank.org\r\nwww.gsdappsdev.worldbank.org\r\nwww.gsdmsde02.worldbank.org\r\nwww.gsdmsde03.worldbank.org\r\nwww.gsdmsweadev01.worldbank.org\r\nwww.gsdmsweaqa01.worldbank.org\r\nwww.gsdpace.worldbank.org\r\nwww.gsdtfs.worldbank.org\r\nwww.gtm.alfabank.ru\r\nwww.gtxd.worldbank.org\r\nwww.gtxdmsg.worldbank.org\r\nwww.gtxp.worldbank.org\r\nwww.gtxpmsg.worldbank.org\r\nwww.gtxt.worldbank.org\r\nwww.gtxtmsg.worldbank.org\r\nwww.guarantees.alfabank.ru\r\nwww.gudok.t2.ru\r\nwww.gudok.tele2.ru\r\nwww.guidance.magnit.ru\r\nwww.guideline.2gis.ru\r\nwww.guidelines.eldorado.ru\r\nwww.guidelines.mvideo.ru\r\nwww.gulag.championat.com\r\nwww.gulfstream.youdo.com\r\nwww.gurov66.leasing.rshb.ru\r\nwww.gusp.gov.ru\r\nwww.gvp.gov.ru\r\nwww.gw.kino-teatr.ru\r\nwww.gwn.kino-teatr.ru\r\nwww.h.if.vtb.ru\r\nwww.h.vtb.ru\r\nwww.h2.hf.vtb.ru\r\nwww.h2.if.vtb.ru\r\nwww.h2.rr.vtb.ru\r\nwww.h2.vtb.ru\r\nwww.hab.dev.kp.ru\r\nwww.hab.kp.ru\r\nwww.hab.uskov.dev.kp.ru\r\nwww.habarovsk.lemanapro.ru\r\nwww.habr.com\r\nwww.hackathon.tele2.ru\r\nwww.hackathon.vtb.ru\r\nwww.hacker.zdorovie-shkolnika.spb.aif.ru\r\nwww.halva.life.ru\r\nwww.halvamedia.sovcombank.ru\r\nwww.hanty-mansiysk.lemanapro.ru\r\nwww.happy.x5.ru\r\nwww.harbor.kino-teatr.ru\r\nwww.hataboutpie.kino-teatr.ru\r\nwww.hde.alfabank.ru\r\nwww.he-mc.t2.ru\r\nwww.headless-cms.vtb.ru\r\nwww.headless-cms3.vtb.ru\r\nwww.headless-cms5.vtb.ru\r\nwww.health.yandex.ru\r\nwww.heimdall.alfabank.ru\r\nwww.heimdall.prelive.alfabank.ru\r\nwww.hello.megafon.ru\r\nwww.help.gkh.hab.aif.ru\r\nwww.help.max.com\r\nwww.helpdesk.magnit.ru\r\nwww.hermod-tst.open.ru\r\nwww.hermod.open.ru\r\nwww.herson.kp.ru\r\nwww.hf-chat-sharing.vtb.ru\r\nwww.hf-chat-turn.vtb.ru\r\nwww.hf-chat.vtb.ru\r\nwww.hf-pay-test.vtb.ru\r\nwww.hh.ru\r\nwww.high5.rosbank.ru\r\nwww.hikvision.bizconf.rbc.ru\r\nwww.himself-ktr-api.nalog.ru\r\nwww.himself-ktr-map.nalog.ru\r\nwww.himself-ktr-service.nalog.ru\r\nwww.himself-ktr.nalog.ru\r\nwww.hiringteam.profi.ru\r\nwww.history.ren.tv\r\nwww.history.rostelecom.ru\r\nwww.hoff.youdo.com\r\nwww.home.garant.ru\r\nwww.home.megafon.ru\r\nwww.home.rosbank.ru\r\nwww.homehelp.t2.ru\r\nwww.homenet.beeline.ru\r\nwww.homepage.yandex.ru\r\nwww.hop.kino-teatr.ru\r\nwww.horny-rabbit.kino-teatr.ru\r\nwww.horoscopes.rambler.ru\r\nwww.hortdb.kino-teatr.ru\r\nwww.host6.zdorovie-shkolnika.spb.aif.ru\r\nwww.hosting.rbc.ru\r\nwww.hostmaster.kino-teatr.ru\r\nwww.hotel.tutu.ru\r\nwww.hotels.babyblog.ru\r\nwww.hotels.zdorovie-shkolnika.spb.aif.ru\r\nwww.house.magnit.ru\r\nwww.hr.drom.ru\r\nwww.hr.magnit.ru\r\nwww.hrautumn19.vedomosti.ru\r\nwww.hrc.tbank.ru\r\nwww.hrgpmqa.worldbank.org\r\nwww.hrkiosk.worldbank.org\r\nwww.hrleto19.vedomosti.ru\r\nwww.hrwebtop.worldbank.org\r\nwww.http-www.kino-teatr.ru\r\nwww.httpswww.kino-teatr.ru\r\nwww.httpwww.kino-teatr.ru\r\nwww.htwww.kino-teatr.ru\r\nwww.hubsqa.worldbank.org\r\nwww.hzjqfpacupdate.kino-teatr.ru\r\nwww.i-avseyanko.sports.ru\r\nwww.i-maps.yandex.ru\r\nwww.i.assist.drom.ru\r\nwww.i.pics.livejournal.com\r\nwww.i.yandex.ru\r\nwww.iam-t-int.rosatom.ru\r\nwww.iam.rosatom.ru\r\nwww.iasbb.open.ru\r\nwww.ib-aplpay-validation.open.ru\r\nwww.ib.alfabank.ru\r\nwww.ib.open.ru\r\nwww.ib.psbank.ru\r\nwww.ib2.psbank.ru\r\nwww.ibank.alfabank.ru\r\nwww.icam.worldbank.org\r\nwww.icamdev.worldbank.org\r\nwww.icamqa.worldbank.org\r\nwww.iclient.open.ru\r\nwww.iconf.rosatom.ru\r\nwww.icp.worldbank.org\r\nwww.icsid.worldbank.org\r\nwww.id-ext.rambler.ru\r\nwww.id-hub-sandbox.alfabank.ru\r\nwww.id-hub.alfabank.ru\r\nwww.id-sandbox.alfabank.ru\r\nwww.id-t-ext.rosatom.ru\r\nwww.id-test.alfabank.ru\r\nwww.id.alfabank.ru\r\nwww.id.magnit.ru\r\nwww.id.rambler.ru\r\nwww.id.rosatom.ru\r\nwww.id.rosbank.ru\r\nwww.id.vtb.ru\r\nwww.idaweb.worldbank.org\r\nwww.idawebqa.worldbank.org\r\nwww.iday.mts.ru\r\nwww.idemo.vtb.ru\r\nwww.identity.worldbank.org\r\nwww.ides.tinkoff.ru\r\nwww.idp-external-test.alfabank.ru\r\nwww.idp-external.alfabank.ru\r\nwww.ids-cns-3.kino-teatr.ru\r\nwww.ids.zdorovie-shkolnika.spb.aif.ru\r\nwww.if-pay-test.vtb.ru\r\nwww.if.app.vtb.ru\r\nwww.ifcdonor.worldbank.org\r\nwww.ifcsummitfttest.worldbank.org\r\nwww.ift-alis.vacr.vtb.ru\r\nwww.ift-appweb.broker.vtb.ru\r\nwww.ift-chat-sharing.vtb.ru\r\nwww.ift-chat-turn.vtb.ru\r\nwww.ift-chat.vtb.ru\r\nwww.ift-invest.vtb.ru\r\nwww.ift-ios.vacr.vtb.ru\r\nwww.ift-mobile.broker.vtb.ru\r\nwww.ift-realty-price-predictor.domclick.ru\r\nwww.ift-recog.vacr.vtb.ru\r\nwww.ift-synt.vacr.vtb.ru\r\nwww.igra.eldorado.ru\r\nwww.igra.mvideo.ru\r\nwww.ih.rosatom.ru\r\nwww.ihelper.nw.mts.ru\r\nwww.iherb.aif.ru\r\nwww.ihjztitlwqmwn3b.nqzwec0eohzuxit7.www.rostelecom.oren.aif.ru\r\nwww.ihome.rosbank.ru\r\nwww.il.kp.ru\r\nwww.ilap.worldbank.org\r\nwww.ilrhmru.kino-teatr.ru\r\nwww.im.kommersant.ru\r\nwww.im.magnit.ru\r\nwww.images-foodtech.dev.magnit.ru\r\nwww.images-foodtech.magnit.ru\r\nwww.images-foodtech.uat.magnit.ru\r\nwww.images.kino-teatr.ru\r\nwww.images.rambler.ru\r\nwww.imail.longread.altai.aif.ru\r\nwww.imap.interfax.ru\r\nwww.imap.rutube.ru\r\nwww.img-dostavka.magnit.ru\r\nwww.img.9111.ru\r\nwww.img.kino-teatr.ru\r\nwww.img.tutu.ru\r\nwww.impulse.vedomosti.ru\r\nwww.imsp.worldbank.org\r\nwww.imspiritvks.rosatom.ru\r\nwww.imst.worldbank.org\r\nwww.in.avito.ru\r\nwww.in.open.ru\r\nwww.indeed2fapush.alfabank.ru\r\nwww.indever-krasnodar.kuban.rbc.ru\r\nwww.india.hh.ru\r\nwww.industrial.kp.ru\r\nwww.infapmtest.worldbank.org\r\nwww.infatest2.worldbank.org\r\nwww.info.megafon.ru\r\nwww.info.worldbank.org\r\nwww.infor-to-idk-dev.open.ru\r\nwww.infoservice.rshb.ru\r\nwww.infrainvest.rbc.ru\r\nwww.inlab.litres.ru\r\nwww.innovations.mts.ru\r\nwww.inspire.megafon.ru\r\nwww.institutki.kino-teatr.ru\r\nwww.insurance-aa.t2.ru\r\nwww.insurance.tinkoff.ru\r\nwww.int.max.com\r\nwww.interesnaya.sport.mos.ru\r\nwww.interfaces.dam.tass.ru\r\nwww.interfax.ru\r\nwww.internet.alfabank.ru\r\nwww.internet.garant.ru\r\nwww.internet.yandex.ru\r\nwww.internetbankmb.open.ru\r\nwww.internship.mts.ru\r\nwww.intersignup.rosatom.ru\r\nwww.intest.avito.ru\r\nwww.intresources.worldbank.org\r\nwww.invest.alfabank.ru\r\nwww.invest.auth.alfabank.ru\r\nwww.invest.mkb.ru\r\nwww.invest.open.ru\r\nwww.invest.ozon.ru\r\nwww.invest.sovcombank.ru\r\nwww.invest.vtb.ru\r\nwww.investments.alfabank.ru\r\nwww.investments.rbc.ru\r\nwww.investor.zdorovie-shkolnika.spb.aif.ru\r\nwww.investorday.sber.ru\r\nwww.ios-audio-de.litres.ru\r\nwww.ios-audio-en.litres.ru\r\nwww.ios-audio.litres.ru\r\nwww.ios-ebook-cat2.litres.ru\r\nwww.ios-ebook-lv.litres.ru\r\nwww.ios.litres.ru\r\nwww.ios.tinkoff.ru\r\nwww.ios.vacr.vtb.ru\r\nwww.ios.zdorovie-shkolnika.spb.aif.ru\r\nwww.iot.kino-teatr.ru\r\nwww.ipkb.rosatom.ru\r\nwww.ipkc.rosatom.ru\r\nwww.ipklib.rosatom.ru\r\nwww.ipkm.rosatom.ru\r\nwww.ipoteka-online.vtb.ru\r\nwww.ipoteka.alfabank.ru\r\nwww.ipoteka.avito.ru\r\nwww.ipoteka.open.ru\r\nwww.ipoteka.vtb.ru\r\nwww.ipotekaonline.open.ru\r\nwww.ipotekapartner.open.ru\r\nwww.ir.mkb.ru\r\nwww.ir.open.ru\r\nwww.irb.youdo.com\r\nwww.irecommend.ru\r\nwww.irk.dev.kp.ru\r\nwww.irk.kp.ru\r\nwww.irk.uskov.dev.kp.ru\r\nwww.irkutsk.hh.ru\r\nwww.irkutsk.lemanapro.ru\r\nwww.irkutsk.tele2.ru\r\nwww.isimulate.worldbank.org\r\nwww.iskra.garant.ru\r\nwww.ismoduleloaded.kino-teatr.ru\r\nwww.istra.lemanapro.ru\r\nwww.istreblenie.aif.ru\r\nwww.isuprid.rosatom.ru\r\nwww.it.mail.ru\r\nwww.itc.fas.gov.ru\r\nwww.itogi2020.vtb.ru\r\nwww.itraveler.tele2.ru\r\nwww.itv.zdorovie-shkolnika.spb.aif.ru\r\nwww.iva-rzd.css.rzd.ru\r\nwww.ivanovo.aif.ru\r\nwww.ivanovo.dev.kp.ru\r\nwww.ivanovo.lemanapro.ru\r\nwww.ivavks.rosatom.ru\r\nwww.ivent.yandex.ru\r\nwww.ivents.yandex.ru\r\nwww.ixbt.com\r\nwww.iz.ru\r\nwww.izdatel.pochta.ru\r\nwww.izdatel.russianpost.ru\r\nwww.izh.dev.kp.ru\r\nwww.izh.kp.ru\r\nwww.izh.uskov.dev.kp.ru\r\nwww.izhevsk.lemanapro.ru\r\nwww.izhevsk.tele2.ru\r\nwww.izo.t2.ru\r\nwww.j.tbank.ru\r\nwww.j.tinkoff.ru\r\nwww.james.zdorovie-shkolnika.spb.aif.ru\r\nwww.jfahrsswww.kino-teatr.ru\r\nwww.jira.gkh.hab.aif.ru\r\nwww.job.alfabank.ru\r\nwww.job.garant.ru\r\nwww.job.youdo.com\r\nwww.jobs.projects.avito.ru\r\nwww.jointeam.2gis.ru\r\nwww.journal.tbank.ru\r\nwww.journal.tinkoff.ru\r\nwww.js.kino-teatr.ru\r\nwww.json.alfabank.ru\r\nwww.jupyter.avito.ru\r\nwww.jxc4xsdcgc.zakon.ru\r\nwww.k-okey.rosbank.ru\r\nwww.k00.openbank.ru\r\nwww.k8s-qa-nginx-01.sports.ru.sports.ru\r\nwww.ka.vtb.ru\r\nwww.kabinet.vtb.ru\r\nwww.kadrovik.garant.ru\r\nwww.kakdela.hh.ru\r\nwww.kaliningrad.dev.kp.ru\r\nwww.kaliningrad.hh.ru\r\nwww.kaliningrad.kp.ru\r\nwww.kaliningrad.lemanapro.ru\r\nwww.kaliningrad.tele2.ru\r\nwww.kaliningrad.uskov.dev.kp.ru\r\nwww.kaluga.aif.ru\r\nwww.kaluga.dns-shop.ru\r\nwww.kaluga.kp.ru\r\nwww.kaluga.lemanapro.ru\r\nwww.kaluga.tele2.ru\r\nwww.kamchatka.gov.ru\r\nwww.kamchatka.kp.ru\r\nwww.kamchatka.tele2.ru\r\nwww.kamenolomnya.hh.ru\r\nwww.kap.vtb.ru\r\nwww.karaoke.t2.ru\r\nwww.karelia.tele2.ru\r\nwww.karelin.dev.kp.ru\r\nwww.karen.zdorovie-shkolnika.spb.aif.ru\r\nwww.kargasok.social.tomsk.gov.ru\r\nwww.karti.yandex.ru\r\nwww.kashira.hh.ru\r\nwww.kasko.sberbank.ru\r\nwww.kasko.vtb.ru\r\nwww.kassa.alfabank.ru\r\nwww.kastromgate.rosbank.ru\r\nwww.katay.tele2.ru\r\nwww.kazan.dev.kp.ru\r\nwww.kazan.kp.ru\r\nwww.kazan.lemanapro.ru\r\nwww.kazan.uskov.dev.kp.ru\r\nwww.kcellread.litres.ru\r\nwww.kchr.gov.ru\r\nwww.kcp.worldbank.org\r\nwww.kdelu.vtb.ru\r\nwww.kdm.alania.gov.ru\r\nwww.keithpc.leasing.rshb.ru\r\nwww.kem.dev.kp.ru\r\nwww.kem.kp.ru\r\nwww.kem.uskov.dev.kp.ru\r\nwww.kemerovo.fas.gov.ru\r\nwww.kemerovo.lemanapro.ru\r\nwww.kfc.youdo.com\r\nwww.khabarovsk.hh.ru\r\nwww.khimki.hh.ru\r\nwww.kids.kremlin.ru\r\nwww.kids.t2.ru\r\nwww.kidsassist.t2.ru\r\nwww.kievstar-api.ivi.ru\r\nwww.kievstar-l.ivi.ru\r\nwww.kino-teatr.ru\r\nwww.kino.1tv.ru\r\nwww.kino.tele2.ru\r\nwww.kino.yandex.ru\r\nwww.kinopoisk.ru\r\nwww.kinwww.kino-teatr.ru\r\nwww.kirov.dev.kp.ru\r\nwww.kirov.hh.ru\r\nwww.kirov.kp.ru\r\nwww.kirov.lemanapro.ru\r\nwww.kirov.tele2.ru\r\nwww.kirov.uskov.dev.kp.ru\r\nwww.kizel.hh.ru\r\nwww.kkk.kino-teatr.ru\r\nwww.klass.rambler.ru\r\nwww.klin.lemanapro.ru\r\nwww.kliniki.open.ru\r\nwww.kmns.life.ru\r\nwww.knd.fas.gov.ru\r\nwww.knxmtt.cn.www.sports.ru\r\nwww.kolcssp.social.tomsk.gov.ru\r\nwww.kolomna.hh.ru\r\nwww.kolpashevo.social.tomsk.gov.ru\r\nwww.komi.dev.kp.ru\r\nwww.komi.kp.ru\r\nwww.komi.tele2.ru\r\nwww.komi.uskov.dev.kp.ru\r\nwww.komission.vtb.ru\r\nwww.komitet1.km.duma.gov.ru\r\nwww.komitet2-1.km.duma.gov.ru\r\nwww.komitet2-10.km.duma.gov.ru\r\nwww.komitet2-12.km.duma.gov.ru\r\nwww.komitet2-14.km.duma.gov.ru\r\nwww.komitet2-17.km.duma.gov.ru\r\nwww.komitet2-19.km.duma.gov.ru\r\nwww.komitet2-2.km.duma.gov.ru\r\nwww.komitet2-20.km.duma.gov.ru\r\nwww.komitet2-21.km.duma.gov.ru\r\nwww.komitet2-22.km.duma.gov.ru\r\nwww.komitet2-24.km.duma.gov.ru\r\nwww.komitet2-3.km.duma.gov.ru\r\nwww.komitet2-5.km.duma.gov.ru\r\nwww.komitet2-6.km.duma.gov.ru\r\nwww.komitet2-9.km.duma.gov.ru\r\nwww.komitet3-1.km.duma.gov.ru\r\nwww.komitet3.km.duma.gov.ru\r\nwww.komitet5.km.duma.gov.ru\r\nwww.komitet6.km.duma.gov.ru\r\nwww.komitet8.km.duma.gov.ru\r\nwww.kommersant.ru\r\nwww.komus.youdo.com\r\nwww.konkurs.ren.tv\r\nwww.korolev.hh.ru\r\nwww.kostroma.hh.ru\r\nwww.kostroma.kp.ru\r\nwww.kostroma.lemanapro.ru\r\nwww.kostroma.tele2.ru\r\nwww.kozhevnikovo.social.tomsk.gov.ru\r\nwww.kp.ru\r\nwww.kp.vedomosti.ru\r\nwww.krasnodar.alfabank.ru\r\nwww.krasnodar.lemanapro.ru\r\nwww.krasnodar.tele2.ru\r\nwww.krasnogorsk.hh.ru\r\nwww.krasnoyarsk.dns-shop.ru\r\nwww.krasnoyarsk.lemanapro.ru\r\nwww.krd.kommersant.ru\r\nwww.kremlin.ru\r\nwww.kronshtadt.hh.ru\r\nwww.kronstadt.bizconf.rbc.ru\r\nwww.krsk.dev.kp.ru\r\nwww.krsk.kp.ru\r\nwww.krsk.uskov.dev.kp.ru\r\nwww.krym.lemanapro.ru\r\nwww.kta.kino-teatr.ru\r\nwww.kuban.aif.ru\r\nwww.kuban.dev.kp.ru\r\nwww.kuban.kp.ru\r\nwww.kuban.uskov.dev.kp.ru\r\nwww.kuda.yandex.ru\r\nwww.kuhnyanarayone.youdo.com\r\nwww.kurgan.lemanapro.ru\r\nwww.kurs.alfabank.ru\r\nwww.kurs.rosatom.ru\r\nwww.kursk.dev.kp.ru\r\nwww.kursk.hh.ru\r\nwww.kursk.kp.ru\r\nwww.kursk.lemanapro.ru\r\nwww.kursk.tele2.ru\r\nwww.kursk.uskov.dev.kp.ru\r\nwww.kut-zags.nalog.ru\r\nwww.kut.nalog.ru\r\nwww.kuzbass.tele2.ru\r\nwww.kvqrrpacupdate.kino-teatr.ru\r\nwww.kyzyl.lemanapro.ru\r\nwww.kz.zdorovie-shkolnika.spb.aif.ru\r\nwww.kzn5txwwsyp1dhao.grant.oren.aif.ru\r\nwww.labelladiva.kino-teatr.ru\r\nwww.labs.dev.kp.ru\r\nwww.lady.mail.ru\r\nwww.lady.zdorovie-shkolnika.spb.aif.ru\r\nwww.law.2gis.ru\r\nwww.lawbusiness.vedomosti.ru\r\nwww.lawis.sovcombank.ru\r\nwww.lcgcleaning.youdo.com\r\nwww.ld.social.tomsk.gov.ru\r\nwww.ldgw.open.ru\r\nwww.le13.hh.ru\r\nwww.le13yar.hh.ru\r\nwww.lead.zdorovie-shkolnika.spb.aif.ru\r\nwww.leaders-of-changes.rosatom.ru\r\nwww.leaked.sberbank.ru\r\nwww.learn.vtb.ru\r\nwww.learning.ozon.ru\r\nwww.leasing.rshb.ru\r\nwww.legal.open.ru\r\nwww.legal.yandex.ru\r\nwww.legaltech.garant.ru\r\nwww.legislation.garant.ru\r\nwww.lenta.ru\r\nwww.lenta.youdo.com\r\nwww.leo.vtb.ru\r\nwww.lepetsk.kp.ru\r\nwww.leto.magnit.ru\r\nwww.letters.kremlin.ru\r\nwww.lib.litres.ru\r\nwww.libexpr.kino-teatr.ru\r\nwww.libresources.worldbank.org\r\nwww.lic17-kaliningrad-r27.gosweb.gosuslugi.ru\r\nwww.lide-build.kino-teatr.ru\r\nwww.lideryrossii.tass.ru\r\nwww.life.nornickel.com\r\nwww.life.ru\r\nwww.life.t2.ru\r\nwww.lifestyletour.max.com\r\nwww.ligabisnesa.vtb.ru\r\nwww.line.zdorovie-shkolnika.spb.aif.ru\r\nwww.link.alfabank.ru\r\nwww.linkmsg.alfabank.ru\r\nwww.linux.garant.ru\r\nwww.lipetsk.dev.kp.ru\r\nwww.lipetsk.hh.ru\r\nwww.lipetsk.kp.ru\r\nwww.lipetsk.lemanapro.ru\r\nwww.lipetsk.tele2.ru\r\nwww.lipetsk.uskov.dev.kp.ru\r\nwww.listen.litres.ru\r\nwww.listmarket.rutube.ru\r\nwww.lite-pentest.vtb.ru\r\nwww.lite-test.vtb.ru\r\nwww.lite.open.ru\r\nwww.lite.openbank.ru\r\nwww.lite.vtb.ru\r\nwww.litres.ru\r\nwww.live.worldbank.org\r\nwww.livehelp.worldbank.org\r\nwww.livejournal.com\r\nwww.livingit.euronews.com\r\nwww.lk-okey.rosbank.ru\r\nwww.lk.aif-city.spb.aif.ru\r\nwww.lk.broker.vtb.ru\r\nwww.lk.busines-lady-spb.aif.ru\r\nwww.lk.corp.tutu.ru\r\nwww.lk.dostoevskiy-spb.aif.ru\r\nwww.lk.factoring.rshb.ru\r\nwww.lk.kino-teatr.ru\r\nwww.lk.megafon.ru\r\nwww.lk.mkb.ru\r\nwww.lk.rosnedra.gov.ru\r\nwww.lk.tele2.ru\r\nwww.lk.ugeso.sakhalin.gov.ru\r\nwww.lkbo.vtb.ru\r\nwww.lmbuacreenkey.kino-teatr.ru\r\nwww.lms.avito.ru\r\nwww.lnweb18.worldbank.org\r\nwww.lnweb28.worldbank.org\r\nwww.lnweb77.worldbank.org\r\nwww.lnweb90.worldbank.org\r\nwww.lo.kino-teatr.ru\r\nwww.locator.mironline.ru\r\nwww.lockter.sovcombank.ru\r\nwww.login.kino-teatr.ru\r\nwww.login.tele2.ru\r\nwww.logistics.2gis.ru\r\nwww.loja.kino-teatr.ru\r\nwww.loto.iz.ru\r\nwww.lottery.magnit.ru\r\nwww.lottery.t2.ru\r\nwww.love.mail.ru\r\nwww.love.tele2.ru\r\nwww.lp.psbank.ru\r\nwww.lp.pulscen.ru\r\nwww.lpi.worldbank.org\r\nwww.lpisurvey.worldbank.org\r\nwww.lpisurvey2014.worldbank.org\r\nwww.lpisurvey2016.worldbank.org\r\nwww.lrhmru.kino-teatr.ru\r\nwww.lt.garant.ru\r\nwww.ltauthdev.worldbank.org\r\nwww.ltauthdev1.worldbank.org\r\nwww.ltautholcqa.worldbank.org\r\nwww.ltauthprs.worldbank.org\r\nwww.ltauthprsqa.worldbank.org\r\nwww.ltauthstg.worldbank.org\r\nwww.lua-stdlib.kino-teatr.ru\r\nwww.lugansk.kp.ru\r\nwww.lukino.hh.ru\r\nwww.lukomski-tribuna.sports.ru\r\nwww.lyncedge.zdorovie-shkolnika.spb.aif.ru\r\nwww.lyncsip.mvideo.ru\r\nwww.m-c.t2.ru\r\nwww.m-c.tele2.ru\r\nwww.m-lib.litres.ru\r\nwww.m.afisha.yandex.ru\r\nwww.m.bazar.babyblog.ru\r\nwww.m.dating.rambler.ru\r\nwww.m.ftp.kino-teatr.ru\r\nwww.m.habr.com\r\nwww.m.invest.khv.gov.ru\r\nwww.m.komission.vtb.ru\r\nwww.m.lastochka.tutu.ru\r\nwww.m.magnit.ru\r\nwww.m.maps.yandex.ru\r\nwww.m.metro.yandex.ru\r\nwww.m.money.yandex.ru\r\nwww.m.old.afisha.yandex.ru\r\nwww.m.pogoda.yandex.ru\r\nwww.m.pro.avito.ru\r\nwww.m.sapsan.tutu.ru\r\nwww.m.sp.babyblog.ru\r\nwww.m.stage.zdorovie-shkolnika.spb.aif.ru\r\nwww.m.store.yandex.ru\r\nwww.m.tele2.ru\r\nwww.m.tv.yandex.ru\r\nwww.m.vk.com\r\nwww.m.www.sports.ru\r\nwww.m24.ru\r\nwww.m2m.mts.ru\r\nwww.m2m.t2.ru\r\nwww.m2m.tele2.ru\r\nwww.mada.kino-teatr.ru\r\nwww.madeinrussia.bizconf.rbc.ru\r\nwww.mag.proza.ru\r\nwww.mag.stihi.ru\r\nwww.magadan.kp.ru\r\nwww.magadan.lemanapro.ru\r\nwww.magadan.tele2.ru\r\nwww.magas.lemanapro.ru\r\nwww.magazinda.youdo.com\r\nwww.magento.kino-teatr.ru\r\nwww.mages.kino-teatr.ru\r\nwww.magneteam.magnit.ru\r\nwww.magnit.ru\r\nwww.magnit.youdo.com\r\nwww.magniteam.magnit.ru\r\nwww.magnitogorsk.lemanapro.ru\r\nwww.magnum-mobile.magnit.ru\r\nwww.magnum.magnit.ru\r\nwww.mahachkala.lemanapro.ru\r\nwww.mail.34.mchs.gov.ru\r\nwww.mail.60.mchs.gov.ru\r\nwww.mail.61.mchs.gov.ru\r\nwww.mail.66.mchs.gov.ru\r\nwww.mail.76.mchs.gov.ru\r\nwww.mail.92.mchs.gov.ru\r\nwww.mail.fas.gov.ru\r\nwww.mail.fskn.gov.ru\r\nwww.mail.ixbt.com\r\nwww.mail.open.ru\r\nwww.mail.pr.vtb.ru\r\nwww.mail.ru\r\nwww.mail.rutube.ru\r\nwww.mail.sev.gov.ru\r\nwww.mail.yandex.ru\r\nwww.mail3.kino-teatr.ru\r\nwww.mailblog.mail.ru\r\nwww.mailhost.zdorovie-shkolnika.spb.aif.ru\r\nwww.main.max.com\r\nwww.maldives.vprok.ru\r\nwww.malinovka.hh.ru\r\nwww.malinovoe-ozero.hh.ru\r\nwww.mall.kino-teatr.ru\r\nwww.mama.megafon.ru\r\nwww.manage.kino-teatr.ru\r\nwww.manifest.2gis.ru\r\nwww.map.kino-teatr.ru\r\nwww.map.yandex.ru\r\nwww.maps.new.wiki.yandex.ru\r\nwww.maps.pda.yandex.ru\r\nwww.maps.wiki.yandex.ru\r\nwww.maps.worldbank.org\r\nwww.maps.yandex.ru\r\nwww.marathon.magnit.ru\r\nwww.market.open.ru\r\nwww.market.pochta.ru\r\nwww.market.tele2.ru\r\nwww.market.yandex.ru\r\nwww.market.youdo.com\r\nwww.marketplace.vtb.ru\r\nwww.marketplace.zdorovie-shkolnika.spb.aif.ru\r\nwww.maslenica.bizconf.rbc.ru\r\nwww.master.yandex.ru\r\nwww.mastercard.perekrestok.ru\r\nwww.mathfight.edu.tinkoff.ru\r\nwww.matomo.t2.ru\r\nwww.maven.worldbank.org\r\nwww.max.com\r\nwww.max.ru\r\nwww.maykop.lemanapro.ru\r\nwww.mb-test-api.rosbank.ru\r\nwww.mb.vtb.ru\r\nwww.mbr.rosbank.ru\r\nwww.mc.vtb.ru\r\nwww.mcampbell.leasing.rshb.ru\r\nwww.mchs.gov.ru\r\nwww.mchs.ru\r\nwww.md.zdorovie-shkolnika.spb.aif.ru\r\nwww.mdm.avito.ru\r\nwww.mdm.vtb.ru\r\nwww.mdm.zdorovie-shkolnika.spb.aif.ru\r\nwww.meal-deal.t2.ru\r\nwww.mec.worldbank.org\r\nwww.med.kp.ru\r\nwww.med.vesti.ru\r\nwww.medalbalancer.vimpelcom.ru\r\nwww.media.kino-teatr.ru\r\nwww.media.mail.ru\r\nwww.media.tinkoff.ru\r\nwww.media.worldbank.org\r\nwww.mediana.yandex.ru\r\nwww.mediatop.yandex.ru\r\nwww.mediator.yandex.ru\r\nwww.medicina-na-peredovoj.kp.ru\r\nwww.meduza.io\r\nwww.megaall.litres.ru\r\nwww.megafon.litres.ru\r\nwww.megafon.ru\r\nwww.megafonpluspremium.litres.ru\r\nwww.megafonvip.litres.ru\r\nwww.megalisten.litres.ru\r\nwww.megaschool.litres.ru\r\nwww.menshikova.lideryrossii.tass.ru\r\nwww.mentity.kino-teatr.ru\r\nwww.merchant-api.sbp.rshb.ru\r\nwww.message.alfabank.ru\r\nwww.messages.moscow.megafon.ru\r\nwww.messagex5.alfabank.ru\r\nwww.metrica.yandex.ru\r\nwww.metrics.alfabank.ru\r\nwww.metrika.yandex.ru\r\nwww.metro.life.ru\r\nwww.metro.yandex.ru\r\nwww.metro.youdo.com\r\nwww.mg.kino-teatr.ru\r\nwww.mgm.open.ru\r\nwww.mgrportal.worldbank.org\r\nwww.mhubs.litres.ru\r\nwww.mibituminous.kino-teatr.ru\r\nwww.michaels.kino-teatr.ru\r\nwww.microcryptocrystalline.kino-teatr.ru\r\nwww.microdata.worldbank.org\r\nwww.microdatalib.worldbank.org\r\nwww.middle-api.magnit.ru\r\nwww.mievm.kino-teatr.ru\r\nwww.migrakvota.gov.ru\r\nwww.minagro.saratov.gov.ru\r\nwww.minerva.zdorovie-shkolnika.spb.aif.ru\r\nwww.minforest.saratov.gov.ru\r\nwww.minkavkaz.gov.ru\r\nwww.minprom.gov.ru\r\nwww.minsk.kp.ru\r\nwww.minsport.gov.ru\r\nwww.mir-skidok.psbank.ru\r\nwww.mir.afisha.ru\r\nwww.mironline.ru\r\nwww.mirtv.ru\r\nwww.mjrefresh.kino-teatr.ru\r\nwww.mk.ru\r\nwww.mkb.ru\r\nwww.ml.rosatom.ru\r\nwww.mm.afisha.yandex.ru\r\nwww.mm.kommersant.ru\r\nwww.mm.tinkoff.ru\r\nwww.mmail.worldbank.org\r\nwww.mmspro.mts.ru\r\nwww.mn2.lenta.ru\r\nwww.mneblizko.mts.ru\r\nwww.mnpt.gov.ru\r\nwww.mnr.gov.ru\r\nwww.mob.kino-teatr.ru\r\nwww.mobapp-daily-stage.open.ru\r\nwww.mobapp-daily.open.ru\r\nwww.mobi.money.yandex.ru\r\nwww.mobile-mib.broker.vtb.ru\r\nwww.mobile-sm-dmz.alfabank.ru\r\nwww.mobile-suo.open.ru\r\nwww.mobile-zeus.alfabank.ru\r\nwww.mobile-zeus.auth.alfabank.ru\r\nwww.mobile.api.afisha.ru\r\nwww.mobile.auth.alfabank.ru\r\nwww.mobile.broker.vtb.ru\r\nwww.mobile.kino-teatr.ru\r\nwww.mobile.magnit.ru\r\nwww.mobile.money.yandex.ru\r\nwww.mobile.open.ru\r\nwww.mobile.yandex.ru\r\nwww.mobile2.broker.vtb.ru\r\nwww.mobileapp.russianpost.ru\r\nwww.mobileapp.worldbank.org\r\nwww.mobileappqa.worldbank.org\r\nwww.mobilecollection.open.ru\r\nwww.mobilelab.alfabank.ru\r\nwww.mobilescanner.alfabank.ru\r\nwww.mobilesm.alfabank.ru\r\nwww.mobiscan.magnit.ru\r\nwww.moduleloaded.kino-teatr.ru\r\nwww.money.alfabank.ru\r\nwww.money.tele2.ru\r\nwww.money.zdorovie-shkolnika.spb.aif.ru\r\nwww.montenegro.dev.kp.ru\r\nwww.moretech.vtb.ru\r\nwww.mortgage.vtb.ru\r\nwww.mos.ru\r\nwww.moscow.home.megafon.ru\r\nwww.moscow.lemanapro.ru\r\nwww.moscow.mchs.gov.ru\r\nwww.moscow.mchs.ru\r\nwww.moscowbooks.litres.ru\r\nwww.mosecom.mos.ru\r\nwww.mosobl.kp.ru\r\nwww.moy.magnit.ru\r\nwww.mozhnovse.rosbank.ru\r\nwww.mpgs.tomsk.gov.ru\r\nwww.mpi-test.openbank.ru\r\nwww.mpi.open.ru\r\nwww.mplatform.worldbank.org\r\nwww.mpro.maps.yandex.ru\r\nwww.mrkt.magnit.ru\r\nwww.ms-glass-lb10.bee.vimpelcom.ru\r\nwww.msfs.kino-teatr.ru\r\nwww.msges.vtb.ru\r\nwww.msgestst.vtb.ru\r\nwww.mshad.yandex.ru\r\nwww.msk-s-sql01.dbaas.ec.mts.ru\r\nwww.msk.dev.kp.ru\r\nwww.msk.kp.ru\r\nwww.msk.live.mts.ru\r\nwww.msk.uskov.dev.kp.ru\r\nwww.mta-sts.kino-teatr.ru\r\nwww.mtbmc.magnit.ru\r\nwww.mtinthelix.magnit.ru\r\nwww.mtp.kino-teatr.ru\r\nwww.mtps.kino-teatr.ru\r\nwww.mts.ru\r\nwww.mts.youdo.com\r\nwww.mtspremium.mts.ru\r\nwww.mtsrball.litres.ru\r\nwww.mtsrbpremium.litres.ru\r\nwww.multimedia.euro.who.int\r\nwww.murmansk.dev.kp.ru\r\nwww.murmansk.kp.ru\r\nwww.murmansk.lemanapro.ru\r\nwww.murmansk.tele2.ru\r\nwww.murmansk.uskov.dev.kp.ru\r\nwww.musculacao.kino-teatr.ru\r\nwww.museum.mchs.ru\r\nwww.music.yandex.ru\r\nwww.musicvibes.mts.ru\r\nwww.mvd.gov.ru\r\nwww.mvideo.litres.ru\r\nwww.mvideo.ru\r\nwww.mvp.api.vtb.ru\r\nwww.mvprostelecom.litres.ru\r\nwww.mx1.rshb.ru\r\nwww.mx101.vtb.ru\r\nwww.mx102.vtb.ru\r\nwww.mx11.zdorovie-shkolnika.spb.aif.ru\r\nwww.mx2.rshb.ru\r\nwww.mx201.vtb.ru\r\nwww.mx202.vtb.ru\r\nwww.mxnetworkactivityurlprotocol.kino-teatr.ru\r\nwww.my.alfabank.ru\r\nwww.my.drom.ru\r\nwww.my.magnit.ru\r\nwww.my.mts.ru\r\nwww.my.russianpost.ru\r\nwww.my.rzd.ru\r\nwww.my.tele2.ru\r\nwww.mycard.tele2.ru\r\nwww.mydsstst.psbank.ru\r\nwww.mymail.kino-teatr.ru\r\nwww.mynanny.youdo.com\r\nwww.myportal.worldbank.org\r\nwww.myschool.litres.ru\r\nwww.mysiteeqa.worldbank.org\r\nwww.mysiteiqa.worldbank.org\r\nwww.mysiteiqa1.worldbank.org\r\nwww.mysql.webinar.2gis.ru\r\nwww.mytoken.worldbank.org\r\nwww.n-able.kino-teatr.ru\r\nwww.n-central.kino-teatr.ru\r\nwww.n.maps.yandex.ru\r\nwww.naberezhnye-chelny.lemanapro.ru\r\nwww.nagclicfg.kino-teatr.ru\r\nwww.nageguojiadubohefa.kino-teatr.ru\r\nwww.nalchik.lemanapro.ru\r\nwww.nalog-monitor.x5.ru\r\nwww.nalog.gov.ru\r\nwww.nalog.ru\r\nwww.nap.rkn.gov.ru\r\nwww.naro-fominsk.hh.ru\r\nwww.naro-fominsk.lemanapro.ru\r\nwww.naryan-mar.lemanapro.ru\r\nwww.nas.zdorovie-shkolnika.spb.aif.ru\r\nwww.nazran.lemanapro.ru\r\nwww.ncentral.kino-teatr.ru\r\nwww.ndd.rostelecom.ru\r\nwww.nedra.rosatom.ru\r\nwww.neproblema.open.ru\r\nwww.nesterov.hh.ru\r\nwww.netcharts.worldbank.org\r\nwww.netpensiontax.worldbank.org\r\nwww.network.mts.ru\r\nwww.network.rshb.ru\r\nwww.new-to-bank.delivery.alfabank.ru\r\nwww.new.autopay.tele2.ru\r\nwww.new.kino-teatr.ru\r\nwww.new.moy.magnit.ru\r\nwww.new.my.tele2.ru\r\nwww.new.rosbank.ru\r\nwww.neweconomy.rbc.ru\r\nwww.newheroes.t2.ru\r\nwww.news.kremlin.ru\r\nwww.news.magnit.ru\r\nwww.news.sportbox.ru\r\nwww.news.yandex.ru\r\nwww.news24.dev.kp.ru\r\nwww.news24.uskov.dev.kp.ru\r\nwww.newyear.magnit.ru\r\nwww.next.rshb.ru\r\nwww.nextjs.kino-teatr.ru\r\nwww.nexus.kino-teatr.ru\r\nwww.nh.open.ru\r\nwww.nhds.open.ru\r\nwww.nhds2.open.ru\r\nwww.nic.gov.ru\r\nwww.nizhnekamsk.lemanapro.ru\r\nwww.nizhniy-novgorod.lemanapro.ru\r\nwww.nizhniy-tagil.lemanapro.ru\r\nwww.njs.services.livejournal.com\r\nwww.nmagnit.magnit.ru\r\nwww.nnov.beeline.ru\r\nwww.nnov.dev.kp.ru\r\nwww.nnov.kp.ru\r\nwww.nnov.mts.ru\r\nwww.nnov.tele2.ru\r\nwww.nnov.uskov.dev.kp.ru\r\nwww.noadblock.services.livejournal.com\r\nwww.noginsk.lemanapro.ru\r\nwww.noguchiprize.afro.who.int\r\nwww.non-tariff.gov.ru\r\nwww.nordeurope.kp.ru\r\nwww.nornickel.com\r\nwww.nos-edu.iz.ru\r\nwww.notexistsdemo.kino-teatr.ru\r\nwww.nova.rambler.ru\r\nwww.novaya-igirma.hh.ru\r\nwww.novgorod.hh.ru\r\nwww.novgorod.tele2.ru\r\nwww.novokuznetsk.lemanapro.ru\r\nwww.novorossiysk.hh.ru\r\nwww.novorossiysk.lemanapro.ru\r\nwww.novosibirsk.lemanapro.ru\r\nwww.novosibirsk.tele2.ru\r\nwww.novostroyki.banki.ru\r\nwww.novoy-dorogoy.life.ru\r\nwww.novyj-urengoy.hh.ru\r\nwww.np.digital.gov.ru\r\nwww.npro.maps.yandex.ru\r\nwww.nqzwec0eohzuxit7.rostelecom.oren.aif.ru\r\nwww.ns17.zdorovie-shkolnika.spb.aif.ru\r\nwww.nsk.dev.kp.ru\r\nwww.nsk.kp.ru\r\nwww.nsk.mts.ru\r\nwww.nsk.uskov.dev.kp.ru\r\nwww.nspk.ru\r\nwww.nsportal.ru\r\nwww.nsr.rosatom.ru\r\nwww.ntcpmsg.kino-teatr.ru\r\nwww.nti.rosatom.ru\r\nwww.ntv.ru\r\nwww.ntvmir.ntv.ru\r\nwww.ny2019.garant.ru\r\nwww.o.proza.ru\r\nwww.o.stihi.ru\r\nwww.oauth-buh.sovcombank.ru\r\nwww.oauth-pl.alfabank.ru\r\nwww.oauthap.alfabank.ru\r\nwww.obmen.open.ru\r\nwww.oboroty.sovcombank.ru\r\nwww.oduithreadguardframework.kino-teatr.ru\r\nwww.offer.tinkoff.ru\r\nwww.office.mkb.ru\r\nwww.ok.mk.ru\r\nwww.ok.ru\r\nwww.okey.rosbank.ru\r\nwww.okolo.youdo.com\r\nwww.okta.kino-teatr.ru\r\nwww.olbdemo.vtb.ru\r\nwww.olcdev.worldbank.org\r\nwww.old-centralcampaign.tele2.ru\r\nwww.old.afisha.yandex.ru\r\nwww.old.autopay.tele2.ru\r\nwww.old.m.afisha.yandex.ru\r\nwww.old.my.tele2.ru\r\nwww.old.rosbank.ru\r\nwww.old.sakha.gov.ru\r\nwww.omada.kino-teatr.ru\r\nwww.omievm.kino-teatr.ru\r\nwww.omni-appd.magnit.ru\r\nwww.omni-sentry.magnit.ru\r\nwww.omnipgstst.magnit.ru\r\nwww.omsk.aif.ru\r\nwww.omsk.dev.kp.ru\r\nwww.omsk.hh.ru\r\nwww.omsk.kp.ru\r\nwww.omsk.lemanapro.ru\r\nwww.omsk.tele2.ru\r\nwww.omsk.uskov.dev.kp.ru\r\nwww.onb-dmz.fgw.db.vtb.ru\r\nwww.onboarding.vtb.ru\r\nwww.oncs-if.vtb.ru\r\nwww.oncs-rr.vtb.ru\r\nwww.oneclick.russianpost.ru\r\nwww.onlc.alfabank.ru\r\nwww.online-alpha.vtb.ru\r\nwww.online-anketa.alfabank.ru\r\nwww.online-beta.vtb.ru\r\nwww.online-beta2.vtb.ru\r\nwww.online.alfabank.ru\r\nwww.online.if.test.vtb.ru\r\nwww.online.if.vtb.ru\r\nwww.online.open.ru\r\nwww.online.openbank.ru\r\nwww.online.rosbank.ru\r\nwww.online.rshb.ru\r\nwww.online.sovcombank.ru\r\nwww.online.vtb.ru\r\nwww.onlinesales.vtb.ru\r\nwww.onlinetrade.ru\r\nwww.onlinetradein.t2.ru\r\nwww.oos.magnit.ru\r\nwww.oosbm-trust.open.ru\r\nwww.opds.litres.ru\r\nwww.ope.worldbank.org\r\nwww.open.ru\r\nwww.openapi.kino-teatr.ru\r\nwww.openbank.ru\r\nwww.opendata.gov.ru\r\nwww.openfights.open.ru\r\nwww.openknowledge.worldbank.org\r\nwww.openlife-test.open.ru\r\nwww.openlife.open.ru\r\nwww.openrussia.iz.ru\r\nwww.openstack.cloud.russianpost.ru\r\nwww.opentrade-ca.open.ru\r\nwww.openwith.kino-teatr.ru\r\nwww.operations.leasing.rshb.ru\r\nwww.oplata.open.ru\r\nwww.oplata.t2.ru\r\nwww.opros.rosatom.ru\r\nwww.opros.rostelecom.ru\r\nwww.opros.vtb.ru\r\nwww.ops-api.magnit.ru\r\nwww.opt.magnit.ru\r\nwww.opt.perekrestok.ru\r\nwww.opt.vprok.ru\r\nwww.oralhistory.worldbank.org\r\nwww.orange.max.com\r\nwww.orel.dev.kp.ru\r\nwww.orel.hh.ru\r\nwww.orel.kp.ru\r\nwww.orel.lemanapro.ru\r\nwww.orel.tele2.ru\r\nwww.orel.uskov.dev.kp.ru\r\nwww.orenburg.hh.ru\r\nwww.orenburg.kp.ru\r\nwww.orenburg.lemanapro.ru\r\nwww.origin.cdn.gk.rosatom.ru\r\nwww.orion.youdo.com\r\nwww.orionvod.youdo.com\r\nwww.orv.gov.ru\r\nwww.osago.sberbank.ru\r\nwww.osago.t2.ru\r\nwww.osago.vtb.ru\r\nwww.osiam.avito.ru\r\nwww.osipova.lideryrossii.tass.ru\r\nwww.osm.gov.ru\r\nwww.osmentity.kino-teatr.ru\r\nwww.ot.gov.ru\r\nwww.otdohni.tutu.ru\r\nwww.otpravka.pochta.ru\r\nwww.otradnaya.hh.ru\r\nwww.ots.avito.ru\r\nwww.otzovik.com\r\nwww.our2019.mts.ru\r\nwww.outlook.kino-teatr.ru\r\nwww.outlook.wkc.who.int\r\nwww.owa.alfabank.ru\r\nwww.owa.kino-teatr.ru\r\nwww.owa.magnit.ru\r\nwww.owa.vgtrk.com\r\nwww.owww.kino-teatr.ru\r\nwww.ozersk-chelyabinsk.hh.ru\r\nwww.ozon.ru\r\nwww.ozonexpress.youdo.com\r\nwww.p.premier.one\r\nwww.p2p.open.ru\r\nwww.pacupdate.kino-teatr.ru\r\nwww.pampers.magnit.ru\r\nwww.panel.kino-teatr.ru\r\nwww.park.magnit.ru\r\nwww.park.tele2.ru\r\nwww.parliament.bel.gov.ru\r\nwww.partner.alfabank.ru\r\nwww.partner.auto.yandex.ru\r\nwww.partner.gkh.hab.aif.ru\r\nwww.partner.maps.yandex.ru\r\nwww.partner.market.yandex.ru\r\nwww.partner.oplata.t2.ru\r\nwww.partner.taxi.pepelac1ft.yandex.ru\r\nwww.partner.taxi.pepelac1t.yandex.ru\r\nwww.partner.taxi.yandex.ru\r\nwww.partnerint.alfabank.ru\r\nwww.partners.otello.2gis.ru\r\nwww.partners.rutube.ru\r\nwww.partners.sovcombank.ru\r\nwww.partnership-new.alfabank.ru\r\nwww.partnership.alfabank.ru\r\nwww.partnership.garant.ru\r\nwww.passport.api.vtb.ru\r\nwww.passport.open.ru\r\nwww.passport.pochta.ru\r\nwww.passport.russianpost.ru\r\nwww.paw.avito.ru\r\nwww.pay-history.mts.ru\r\nwww.pay.alfabank.ru\r\nwww.pay.gov.ru\r\nwww.pay.ivi.ru\r\nwww.pay.kino-teatr.ru\r\nwww.pay.megafon.ru\r\nwww.pay.mironline.ru\r\nwww.pay.mkb.ru\r\nwww.pay.rambler.ru\r\nwww.pay.secure.avito.ru\r\nwww.pay.sovcombank.ru\r\nwww.pay.stg.mironline.ru\r\nwww.pay.vtb.ru\r\nwww.pay2.alfabank.ru\r\nwww.paycontrol-test.open.ru\r\nwww.paycontrol.alfabank.ru\r\nwww.paycontrol.open.ru\r\nwww.payment.alfabank.ru\r\nwww.pb.open.ru\r\nwww.pbi.rutube.ru\r\nwww.pbox.ixbt.com\r\nwww.pc.iz.ru\r\nwww.pci.smarttv.notkube.dev.ivi.ru\r\nwww.pcms.worldbank.org\r\nwww.pcmstst.worldbank.org\r\nwww.pcscf.ims.tele2.ru\r\nwww.pda-al.litres.ru\r\nwww.pda-biblio.litres.ru\r\nwww.pda-megaschool.litres.ru\r\nwww.pda-myschool.litres.ru\r\nwww.pda-pl.litres.ru\r\nwww.pda-pro.litres.ru\r\nwww.pda-ro.litres.ru\r\nwww.pda-sch.litres.ru\r\nwww.pda-student-biblio.litres.ru\r\nwww.pda-univer.litres.ru\r\nwww.pda.afisha.yandex.ru\r\nwww.pda.kremlin.ru\r\nwww.pda.lenta.ru\r\nwww.pda.litres.ru\r\nwww.pda.maps.yandex.ru\r\nwww.pda.mchs.ru\r\nwww.pda.metro.yandex.ru\r\nwww.pda.money.yandex.ru\r\nwww.pda.probki.yandex.ru\r\nwww.pda.traffic.yandex.ru\r\nwww.pda.tv.yandex.ru\r\nwww.pda.weather.yandex.ru\r\nwww.pdaall.litres.ru\r\nwww.pdabeelinerusall.litres.ru\r\nwww.pdabeelineruslisten.litres.ru\r\nwww.pdabeelineruspremium.litres.ru\r\nwww.pdabeelinerusread.litres.ru\r\nwww.pdabeltelecomall.litres.ru\r\nwww.pdadomruall.litres.ru\r\nwww.pdamegafon.litres.ru\r\nwww.pdapremium.litres.ru\r\nwww.pdaread.litres.ru\r\nwww.pdatele2rusread.litres.ru\r\nwww.pdf.kino-teatr.ru\r\nwww.pds.rosatom.ru\r\nwww.pec.kino-teatr.ru\r\nwww.peertube-ext.sovcombank.ru\r\nwww.penapi.kino-teatr.ru\r\nwww.penwith.kino-teatr.ru\r\nwww.penza.dev.kp.ru\r\nwww.penza.kp.ru\r\nwww.penza.lemanapro.ru\r\nwww.penza.uskov.dev.kp.ru\r\nwww.people.open.ru\r\nwww.people.sovcombank.ru\r\nwww.peoplesoft.worldbank.org\r\nwww.perekrestok.ru\r\nwww.peremena.open.ru\r\nwww.peremena.openbank.ru\r\nwww.perevod.mts.ru\r\nwww.perevodworld.vtb.ru\r\nwww.perm.dev.kp.ru\r\nwww.perm.kp.ru\r\nwww.perm.lemanapro.ru\r\nwww.perm.uskov.dev.kp.ru\r\nwww.persona20.vedomosti.ru\r\nwww.personnelportal.unicreditbank.ru\r\nwww.petropavlovsk-kamchatskiy.lemanapro.ru\r\nwww.petrozavodsk.lemanapro.ru\r\nwww.petruha.kp.ru\r\nwww.pexip-teamsconn-eu.teams.magnit.ru\r\nwww.pfm.vtb.ru\r\nwww.ph.tass.ru\r\nwww.pharmacies.2gis.ru\r\nwww.phone.money.yandex.ru\r\nwww.phpmyadmin.aif-city.spb.aif.ru\r\nwww.phpmyadmin.busines-lady-spb.aif.ru\r\nwww.phpmyadmin.gkh.hab.aif.ru\r\nwww.pi-qas.mvideo.ru\r\nwww.pi-xas.mvideo.ru\r\nwww.pi.mvideo.ru\r\nwww.pickremit.worldbank.org\r\nwww.pictureinequality.worldbank.org\r\nwww.pier14.kino-teatr.ru\r\nwww.pikabu.ru\r\nwww.play.tele2.ru\r\nwww.plazmabox.rutube.ru\r\nwww.plctest.rshb.ru\r\nwww.pllxdf.mail.ru\r\nwww.plm5.x5.ru\r\nwww.plus-one.vedomosti.ru\r\nwww.plus.tele2.ru\r\nwww.pma.aif-city.spb.aif.ru\r\nwww.pma.dostoevskiy-spb.aif.ru\r\nwww.pma.gkh.hab.aif.ru\r\nwww.pma.webinar.2gis.ru\r\nwww.pnm.vtb.ru\r\nwww.po.zdorovie-shkolnika.spb.aif.ru\r\nwww.pobeda75.iz.ru\r\nwww.pochta.ru\r\nwww.podarki.magnit.ru\r\nwww.podarki.mts.ru\r\nwww.podolsk.hh.ru\r\nwww.podpiska.pochta.ru\r\nwww.podpiski.megafon.ru\r\nwww.poezdpushkin.rzd.ru\r\nwww.pogashenie.vtb.ru\r\nwww.pogoda.yandex.ru\r\nwww.point.worldbank.org\r\nwww.points.maps.yandex.ru\r\nwww.pokolenie.mts.ru\r\nwww.pole.magnit.ru\r\nwww.polhn.wpro.who.int\r\nwww.policiesentlm.worldbank.org\r\nwww.poll.open.ru\r\nwww.ponizovka-apart.fas.gov.ru\r\nwww.ponizovka.fas.gov.ru\r\nwww.pop3.kino-teatr.ru\r\nwww.popov.dev.kp.ru\r\nwww.poraukrashat.magnit.ru\r\nwww.portal.ncnd.t2.ru\r\nwww.portal.test.russianpost.ru\r\nwww.portal2.zdorovie-shkolnika.spb.aif.ru\r\nwww.portal5.sbud.rshb.ru\r\nwww.pos.open.ru\r\nwww.pos.rshb.ru\r\nwww.pos1.open.ru\r\nwww.post.magnit.ru\r\nwww.postback.t2.ru\r\nwww.postimg.otzovik.com\r\nwww.povezet.magnit.ru\r\nwww.powerday.tele2.ru\r\nwww.pp-alis.vacr.vtb.ru\r\nwww.pp-mic001.open.ru\r\nwww.pp-recog.vacr.vtb.ru\r\nwww.pp-synt.vacr.vtb.ru\r\nwww.pp.unicreditbank.ru\r\nwww.pp.userapi.com\r\nwww.ppdmtsenaza.litres.ru\r\nwww.ppi.worldbank.org\r\nwww.ppk-law.garant.ru\r\nwww.ppl.rosatom.ru\r\nwww.ppm.t2.ru\r\nwww.ppp.worldbank.org\r\nwww.pppirc.worldbank.org\r\nwww.pra.rosbank.ru\r\nwww.prazdnik-na-vahte.life.ru\r\nwww.prd.max.com\r\nwww.pre-bp.open.ru\r\nwww.pre-cb.open.ru\r\nwww.pre-opros.vtb.ru\r\nwww.predoplata-absolyutmed.zoon.ru\r\nwww.predoplata-burokrasoty.zoon.ru\r\nwww.prelive.alfabank.ru\r\nwww.prelive.trade.alfabank.ru\r\nwww.premium.litres.ru\r\nwww.preobrazhenie.hh.ru\r\nwww.preprod-ios.vacr.vtb.ru\r\nwww.preprod.class.rambler.ru\r\nwww.preprod.klass.rambler.ru\r\nwww.preprod.openbank.ru\r\nwww.president.kremlin.ru\r\nwww.press.magnit.ru\r\nwww.presscentr.rbc.ru\r\nwww.prime.open.ru\r\nwww.pring.kino-teatr.ru\r\nwww.pringboot.kino-teatr.ru\r\nwww.prism-central.open.ru\r\nwww.private.auth.alfabank.ru\r\nwww.private.vtb.ru\r\nwww.privet.sber.ru\r\nwww.privilegy.garant.ru\r\nwww.pro.avito.ru\r\nwww.pro.litres.ru\r\nwww.pro.zoon.ru\r\nwww.probki.pda.yandex.ru\r\nwww.probki.yandex.ru\r\nwww.prod-esum.x5.ru\r\nwww.prod.azure.magnit.ru\r\nwww.prod.gkh.hab.aif.ru\r\nwww.products.rutube.ru\r\nwww.proekta.youdo.com\r\nwww.proestatelive.bizconf.rbc.ru\r\nwww.profile.mts.ru\r\nwww.profimonsters.youdo.com\r\nwww.profit.x5.ru\r\nwww.programs.gov.ru\r\nwww.projects.avito.ru\r\nwww.promo.cloud.mts.ru\r\nwww.promo.domclick.ru\r\nwww.promo.habr.com\r\nwww.promo.openbank.ru\r\nwww.promo.pulscen.ru\r\nwww.promo.rosbank.ru\r\nwww.promo.vprok.ru\r\nwww.promogame.t2.ru\r\nwww.promokod.sports.ru\r\nwww.promotion.rosbank.ru\r\nwww.prosound.ixbt.com\r\nwww.proverki.gov.ru\r\nwww.proxy-ts.open.ru\r\nwww.proxyregistrar.worldbank.org\r\nwww.proza.ru\r\nwww.prp-open.open.ru\r\nwww.prsmetadata.worldbank.org\r\nwww.prsportal.worldbank.org\r\nwww.prueba.zdorovie-shkolnika.spb.aif.ru\r\nwww.ps.zdorovie-shkolnika.spb.aif.ru\r\nwww.psb.ru\r\nwww.psbank.ru\r\nwww.psi-chat-sharing.vtb.ru\r\nwww.psi-chat-turn.vtb.ru\r\nwww.psi-chat.vtb.ru\r\nwww.psi-realty-price-predictor.domclick.ru\r\nwww.psi.mchs.gov.ru\r\nwww.psi.mchs.ru\r\nwww.psi.sber.ru\r\nwww.psi01.investorday.sber.ru\r\nwww.psi01.russia.sber.ru\r\nwww.pskov.aif.ru\r\nwww.pskov.dev.kp.ru\r\nwww.pskov.kp.ru\r\nwww.pskov.lemanapro.ru\r\nwww.pskov.tele2.ru\r\nwww.pskov.uskov.dev.kp.ru\r\nwww.pspdfkitbm-trust.open.ru\r\nwww.pstest.alfabank.ru\r\nwww.ptti.gov.ru\r\nwww.pubg.mail.ru\r\nwww.public-buh.sovcombank.ru\r\nwww.public.kino-teatr.ru\r\nwww.public.oplata.t2.ru\r\nwww.publications.worldbank.org\r\nwww.publicofficialsfinancialdisclosure.worldbank.org\r\nwww.publishing.litres.ru\r\nwww.pubsys.worldbank.org\r\nwww.pubsystst.worldbank.org\r\nwww.pulsem.magnit.ru\r\nwww.purdue-maxwell.leasing.rshb.ru\r\nwww.push-ismg-prod.psbank.ru\r\nwww.push-online.if.test.vtb.ru\r\nwww.push-online.rr.test.vtb.ru\r\nwww.push-online.vtb.ru\r\nwww.push.vk.com\r\nwww.putin.kremlin.ru\r\nwww.pvg.mk.ru\r\nwww.pvz-admin.magnit.ru\r\nwww.pwc.kino-teatr.ru\r\nwww.pyatigorsk.lemanapro.ru\r\nwww.qa-job.2gis.ru\r\nwww.qa.kino-teatr.ru\r\nwww.qa.sports.ru\r\nwww.qlean.youdo.com\r\nwww.qr.vtb.ru\r\nwww.qrsbp.sovcombank.ru\r\nwww.qsappse.worldbank.org\r\nwww.quest.vtb.ru\r\nwww.quik.rshb.ru\r\nwww.quik1.rshb.ru\r\nwww.quik2.rshb.ru\r\nwww.quikm.vtb.ru\r\nwww.quiz.t2.ru\r\nwww.quiz.worldbank.org\r\nwww.quotes.euronews.com\r\nwww.qz.habr.com\r\nwww.r.rutube.ru\r\nwww.r.vtb.ru\r\nwww.r2-test.vtb.ru\r\nwww.r2.vtb.ru\r\nwww.r2d2.alfabank.ru\r\nwww.ra.megafon.ru\r\nwww.rabota.alfabank.ru\r\nwww.rabota.magnit.ru\r\nwww.rabota.perekrestok.ru\r\nwww.rabota.sber.ru\r\nwww.rabota.vtb.ru\r\nwww.rabota.yandex.ru\r\nwww.radio.yandex.ru\r\nwww.radioprobki.maps.yandex.ru\r\nwww.radioprobki2.maps.yandex.ru\r\nwww.rage.kino-teatr.ru\r\nwww.raiffeisen.ru\r\nwww.rampnet.worldbank.org\r\nwww.rappoport-restaurants.vedomosti.ru\r\nwww.rasp.kp.ru\r\nwww.rasp.yandex.ru\r\nwww.rassrochka.zoon.ru\r\nwww.rb.zdorovie-shkolnika.spb.aif.ru\r\nwww.rbc.ru\r\nwww.rblib.litres.ru\r\nwww.rbs-mq.open.ru\r\nwww.rc.vtb.ru\r\nwww.rck.vtb.ru\r\nwww.rck1.vtb.ru\r\nwww.rck2.vtb.ru\r\nwww.rdpress.kino-teatr.ru\r\nwww.rdr.rosatom.ru\r\nwww.rdr.vtb.ru\r\nwww.re.vedomosti.ru\r\nwww.read.litres.ru\r\nwww.reader.litres.ru\r\nwww.realestate.vedomosti.ru\r\nwww.realty-price-predictor.domclick.ru\r\nwww.realty.magnit.ru\r\nwww.realty.rambler.ru\r\nwww.realty.rostelecom.ru\r\nwww.realty.vesti.ru\r\nwww.realty.yandex.ru\r\nwww.referat.yandex.ru\r\nwww.referats.yandex.ru\r\nwww.reg.open.ru\r\nwww.reg.rosbank.ru\r\nwww.reg.rshb.ru\r\nwww.reg.sovcombank.ru\r\nwww.reg.vtb.ru\r\nwww.regatta-test.vedomosti.ru\r\nwww.regatta.vedomosti.ru\r\nwww.registration.rosatom.ru\r\nwww.registration.worldbank.org\r\nwww.registry-public.ci.tutu.ru\r\nwww.registry.ci.tutu.ru\r\nwww.registry.kino-teatr.ru\r\nwww.regulation.gov.ru\r\nwww.reklama.2gis.ru\r\nwww.reklama.yandex.ru\r\nwww.relocation.avito.ru\r\nwww.remedyservicenow.worldbank.org\r\nwww.remedyservicenowqa.worldbank.org\r\nwww.remittanceprices.worldbank.org\r\nwww.remnantofgiants.kino-teatr.ru\r\nwww.remote-crafttalk.magnit.ru\r\nwww.remote.kino-teatr.ru\r\nwww.remote.vtb.ru\r\nwww.repair.vtb.ru\r\nwww.report.rosatom.ru\r\nwww.repositorio.kino-teatr.ru\r\nwww.repository.kino-teatr.ru\r\nwww.reputation.zoon.ru\r\nwww.research.alfabank.ru\r\nwww.research.rutube.ru\r\nwww.research.yandex.ru\r\nwww.reserve.mb.vtb.ru\r\nwww.rest-domains.hh.ru\r\nwww.restapi-buh.sovcombank.ru\r\nwww.rests.afisha.ru\r\nwww.rev.mail.ru\r\nwww.reverse.zdorovie-shkolnika.spb.aif.ru\r\nwww.rfb-new.rosbank.ru\r\nwww.rief.sber.ru\r\nwww.ries.kino-teatr.ru\r\nwww.rkm.rosatom.ru\r\nwww.rm.kino-teatr.ru\r\nwww.rmmorn.kino-teatr.ru\r\nwww.rn.kino-teatr.ru\r\nwww.rnd.kommersant.ru\r\nwww.ro.litres.ru\r\nwww.roadtolima.worldbank.org\r\nwww.roccoforte.vedomosti.ru\r\nwww.rodina.kino-teatr.ru\r\nwww.rosatom.ru\r\nwww.rosavtodor.gov.ru\r\nwww.rosbalt.ru\r\nwww.rosbank.ru\r\nwww.rose.ixbt.com\r\nwww.roseltorg.ru\r\nwww.rospo.garant.ru\r\nwww.rossvyaz.gov.ru\r\nwww.rostelecom.ru\r\nwww.rostov.aif.ru\r\nwww.rostov.dev.kp.ru\r\nwww.rostov.kp.ru\r\nwww.rostov.lemanapro.ru\r\nwww.rostov.tele2.ru\r\nwww.rostov.uskov.dev.kp.ru\r\nwww.router-quality.maps.yandex.ru\r\nwww.rp.kino-teatr.ru\r\nwww.rp1ci30.worldbank.org\r\nwww.rp2ci30.worldbank.org\r\nwww.rpn.gov.ru\r\nwww.rr-appweb.broker.vtb.ru\r\nwww.rr-invest.vtb.ru\r\nwww.rr-pay-test.vtb.ru\r\nwww.rr.app.vtb.ru\r\nwww.rrdg.factoring.rshb.ru\r\nwww.rshb.ru\r\nwww.rss.zdorovie-shkolnika.spb.aif.ru\r\nwww.rsso.magnit.ru\r\nwww.rst.gov.ru\r\nwww.rtk-holding.ru\r\nwww.rtkchild.litres.ru\r\nwww.ru.kino-teatr.ru\r\nwww.rumskapt241.open.ru\r\nwww.rumskapt273.open.ru\r\nwww.rumskapt526.open.ru\r\nwww.run-domain.kino-teatr.ru\r\nwww.runswf.kino-teatr.ru\r\nwww.russia.sber.ru\r\nwww.rver.kino-teatr.ru\r\nwww.rvice.kino-teatr.ru\r\nwww.rvices.kino-teatr.ru\r\nwww.ryazan.dev.kp.ru\r\nwww.ryazan.hh.ru\r\nwww.ryazan.kp.ru\r\nwww.ryazan.lemanapro.ru\r\nwww.ryazan.tele2.ru\r\nwww.ryazan.uskov.dev.kp.ru\r\nwww.ryerson.kino-teatr.ru\r\nwww.rzd.rosbank.ru\r\nwww.s-a2.vtb.ru\r\nwww.s.kino-teatr.ru\r\nwww.s.online-alpha.vtb.ru\r\nwww.s.online-beta.vtb.ru\r\nwww.s.online.if.vtb.ru\r\nwww.s.online.vtb.ru\r\nwww.s2.online-alpha.vtb.ru\r\nwww.s2.online.if.vtb.ru\r\nwww.s2.online.vtb.ru\r\nwww.s2.vtb.ru\r\nwww.s3-endpoint.sss-msk1.x5.ru\r\nwww.s3-endpoint.sss-spb1.x5.ru\r\nwww.s3-website.tinkoff.ru\r\nwww.s3.ipoteka.alfabank.ru\r\nwww.s3.tinkoff.ru\r\nwww.s7rkk3eplqkngly.nqzwec0eohzuxit7.www.rostelecom.oren.aif.ru\r\nwww.saeguide.worldbank.org\r\nwww.safari.magnit.ru\r\nwww.safe-mode.t2.ru\r\nwww.safe.mts.ru\r\nwww.sakha.gov.ru\r\nwww.sakhalin.kp.ru\r\nwww.sakhalin.tele2.ru\r\nwww.salekhard.lemanapro.ru\r\nwww.sales.vgtrk.com\r\nwww.salute.sber.ru\r\nwww.samara.aif.ru\r\nwww.samara.dev.kp.ru\r\nwww.samara.kp.ru\r\nwww.samara.lemanapro.ru\r\nwww.samara.tele2.ru\r\nwww.samara.uskov.dev.kp.ru\r\nwww.samokat.youdo.com\r\nwww.sandbox.alfabank.ru\r\nwww.sandbox.bluedata.ec.mts.ru\r\nwww.sandbox.ivi.ru\r\nwww.sandbox.megafon.ru\r\nwww.sandbox.vtb.ru\r\nwww.santa.tele2.ru\r\nwww.sap.worldbank.org\r\nwww.saphrq.open.ru\r\nwww.sapphire.pet-project.habr.com\r\nwww.sapsso.worldbank.org\r\nwww.sapssoext.worldbank.org\r\nwww.sapssoexttrn.worldbank.org\r\nwww.saransk.lemanapro.ru\r\nwww.saratov.dev.kp.ru\r\nwww.saratov.gov.ru\r\nwww.saratov.kp.ru\r\nwww.saratov.lemanapro.ru\r\nwww.saratov.uskov.dev.kp.ru\r\nwww.savemart.kino-teatr.ru\r\nwww.savemoney.alfabank.ru\r\nwww.sber.2gis.ru\r\nwww.sber.pay.pay.u6mod1v0hsu9l7ii.farmet.kuban.aif.ru\r\nwww.sber.ru\r\nwww.sberbank-com.os-prom.sberbank.ru\r\nwww.sberbank-com.os-psi.sberbank.ru\r\nwww.sberbank-ru.os-prom.sberbank.ru\r\nwww.sberbank-ru.os-psi.sberbank.ru\r\nwww.sberbank.ru\r\nwww.sberbank1-ru.os-prom.sberbank.ru\r\nwww.sberbank1-ru.os-psi.sberbank.ru\r\nwww.sbercontact.sberbank.ru\r\nwww.sbereapteka.youdo.com\r\nwww.sbergiletalks.sber.ru\r\nwww.sberlogistics.youdo.com\r\nwww.sbermarket.youdo.com\r\nwww.sbp.rosbank.ru\r\nwww.sc.open.ru\r\nwww.scanner1ksmg.alfabank.ru\r\nwww.scf.alfabank.ru\r\nwww.sch.litres.ru\r\nwww.scherbinka.hh.ru\r\nwww.schfree.litres.ru\r\nwww.school-wiki.new.yandex.ru\r\nwww.school-wiki.yandex.ru\r\nwww.school.vtb.ru\r\nwww.school.x5.ru\r\nwww.scienceday.rosatom.ru\r\nwww.screenkey.kino-teatr.ru\r\nwww.scrollingtext8x8.kino-teatr.ru\r\nwww.sd.magnit.ru\r\nwww.sdclassic.magnit.ru\r\nwww.sdint01.magnit.ru\r\nwww.sdint02.magnit.ru\r\nwww.sdo.open.ru\r\nwww.sdreport.magnit.ru\r\nwww.search.worldbank.org\r\nwww.secret.kino-teatr.ru\r\nwww.secretsanta.ozon.ru\r\nwww.secure.gkh.hab.aif.ru\r\nwww.secure.kino-teatr.ru\r\nwww.secure.openbank.ru\r\nwww.secure.sovcombank.ru\r\nwww.secure.worldbank.org\r\nwww.securepayments.sberbank.ru\r\nwww.securetest.openbank.ru\r\nwww.securewebapps.worldbank.org\r\nwww.sed.saratov.gov.ru\r\nwww.selene.zdorovie-shkolnika.spb.aif.ru\r\nwww.selfcare.tele2.ru\r\nwww.selfie.alfabank.ru\r\nwww.selfieline.alfabank.ru\r\nwww.selfservice.worldbank.org\r\nwww.seller.alfabank.ru\r\nwww.semibituminous.kino-teatr.ru\r\nwww.seminar.garant.ru\r\nwww.semp.alfabank.ru\r\nwww.senders.rutube.ru\r\nwww.sendmoneyafrica.worldbank.org\r\nwww.sense.alfabank.ru\r\nwww.sentry-mobile.alfabank.ru\r\nwww.sentry-test-mobile.alfabank.ru\r\nwww.sentry.hh.ru\r\nwww.sentry.magnit.ru\r\nwww.sergievposad.hh.ru\r\nwww.sert-c2b-sbp.openbank.ru\r\nwww.sert-r-sbp.openbank.ru\r\nwww.server.kino-teatr.ru\r\nwww.service.kino-teatr.ru\r\nwww.service.kp.ru\r\nwww.service.magnit.ru\r\nwww.service.onlinetrade.ru\r\nwww.servicecurers.open.ru\r\nwww.servicedesk.avito.ru\r\nwww.servicedesk.magnit.ru\r\nwww.services.blizko.ru\r\nwww.services.kino-teatr.ru\r\nwww.services.open.ru\r\nwww.services.openbank.ru\r\nwww.sev.gov.ru\r\nwww.sevastopol.gov.ru\r\nwww.sevastopol.kp.ru\r\nwww.seynovawww.kino-teatr.ru\r\nwww.sftbee.alfabank.ru\r\nwww.sgcheck.rosbank.ru\r\nwww.sgo-b2b1.vks.rshb.ru\r\nwww.sh-apsua-r91.gosweb.gosuslugi.ru\r\nwww.sh-grigorevskaya-r56.gosweb.gosuslugi.ru\r\nwww.sh-int26-ryazan-r62.gosweb.gosuslugi.ru\r\nwww.sh-ugolnaya-r56.gosweb.gosuslugi.ru\r\nwww.sh-uiop-73-omsk-r52.gosweb.gosuslugi.ru\r\nwww.sh10-voznesenovskoe-r07.gosweb.gosuslugi.ru\r\nwww.sh4-svirsk-r138.gosweb.gosuslugi.ru\r\nwww.share.magnit.ru\r\nwww.shareholder-guide.vtb.ru\r\nwww.shell.yandex.ru\r\nwww.shkola10nefteyugansk-r86.gosweb.gosuslugi.ru\r\nwww.shkola15surgut-r86.gosweb.gosuslugi.ru\r\nwww.shkola1balabanovo-r40.gosweb.gosuslugi.ru\r\nwww.shkola2glazov-r18.gosweb.gosuslugi.ru\r\nwww.shkola2stroitel-r68.gosweb.gosuslugi.ru\r\nwww.shkolakrasnoznamenskaya-r45.gosweb.gosuslugi.ru\r\nwww.shkolapeschanka-r64.gosweb.gosuslugi.ru\r\nwww.shkolastarobesovskaya-r73.gosweb.gosuslugi.ru\r\nwww.shkolayagulskayazavyalovskij-r18.gosweb.gosuslugi.ru\r\nwww.shop.kino-teatr.ru\r\nwww.shop.proza.ru\r\nwww.shop.stihi.ru\r\nwww.shop.vprok.ru\r\nwww.shop.zdorovie-shkolnika.spb.aif.ru\r\nwww.shoptenko.lideryrossii.tass.ru\r\nwww.shortdb.kino-teatr.ru\r\nwww.show.mvideo.ru\r\nwww.sibir-pro.kommersant.ru\r\nwww.sid-mmobile.magnit.ru\r\nwww.sight-ca.open.ru\r\nwww.sign.alfabank.ru\r\nwww.signup.rosatom.ru\r\nwww.silino.mos.ru\r\nwww.silkina.lideryrossii.tass.ru\r\nwww.simferopol.hh.ru\r\nwww.simferopol.lemanapro.ru\r\nwww.singapore.vedomosti.ru\r\nwww.sip.consultant.ru\r\nwww.sip.corp.tele2.ru\r\nwww.sip.ntv.ru\r\nwww.sip.rosatom.ru\r\nwww.sip.tele2.ru\r\nwww.sip.x5.ru\r\nwww.sip2.consultant.ru\r\nwww.site.wmc-admin.yandex.ru\r\nwww.site.yandex.ru\r\nwww.siteapi.vtb.ru\r\nwww.sitemap.kino-teatr.ru\r\nwww.siteresources.worldbank.org\r\nwww.siteresourcesqa.worldbank.org\r\nwww.skazka.rostelecom.ru\r\nwww.skazki.mts.ru\r\nwww.skazki.vtb.ru\r\nwww.skb.rosatom.ru\r\nwww.skfo.kommersant.ru\r\nwww.skill.tele2.ru\r\nwww.skripnichenko.lideryrossii.tass.ru\r\nwww.skyeng.youdo.com\r\nwww.slancevskij-r41.gosweb.gosuslugi.ru\r\nwww.slide-build.kino-teatr.ru\r\nwww.slk.kino-teatr.ru\r\nwww.slovari.yandex.ru\r\nwww.sm.alfabank.ru\r\nwww.sm.fadn.gov.ru\r\nwww.sm.magnit.ru\r\nwww.smail.worldbank.org\r\nwww.smart.1tv.ru\r\nwww.smart.garant.ru\r\nwww.smart.zakupki.rostelecom.ru\r\nwww.smartagent24.t2.ru\r\nwww.smartgis-test.corp.t2.ru\r\nwww.smartitbmc.magnit.ru\r\nwww.smartmarket.sber.ru\r\nwww.smartrepbmc.magnit.ru\r\nwww.smm.zoon.ru\r\nwww.smob.rosbank.ru\r\nwww.smol.dev.kp.ru\r\nwww.smol.kp.ru\r\nwww.smol.uskov.dev.kp.ru\r\nwww.smolensk.lemanapro.ru\r\nwww.smolensk.tele2.ru\r\nwww.smp.t2.ru\r\nwww.smp.tele2.ru\r\nwww.smpcc.alfabank.ru\r\nwww.smtp.interfax.ru\r\nwww.smtp.magnit.ru\r\nwww.smtp.open.ru\r\nwww.smtp.rutube.ru\r\nwww.smtp2.zdorovie-shkolnika.spb.aif.ru\r\nwww.smtps.kino-teatr.ru\r\nwww.smx.rshb.ru\r\nwww.smz.youdo.com\r\nwww.snp.who.int\r\nwww.so.yandex.ru\r\nwww.soc-forum.bizconf.rbc.ru\r\nwww.sochi.lemanapro.ru\r\nwww.social.journal.tinkoff.ru\r\nwww.social.yandex.ru\r\nwww.socuslugy.sev.gov.ru\r\nwww.software.rzd.ru\r\nwww.solo.kino-teatr.ru\r\nwww.solutions.worldbank.org\r\nwww.solutions.zdorovie-shkolnika.spb.aif.ru\r\nwww.somik.vtb.ru\r\nwww.song.iz.ru\r\nwww.sovcombank.ru\r\nwww.sp.babyblog.ru\r\nwww.sp.life.ru\r\nwww.sp.litres.ru\r\nwww.sp2re.habr.com\r\nwww.space-link.rosatom.ru\r\nwww.space.rosatom.ru\r\nwww.spadfsiqa.worldbank.org\r\nwww.spam.yandex.ru\r\nwww.spamooborona.yandex.ru\r\nwww.spappssecext.worldbank.org\r\nwww.spappssecou.worldbank.org\r\nwww.spar.youdo.com\r\nwww.spark.worldbank.org\r\nwww.sparkdevapp.worldbank.org\r\nwww.spartak.open.ru\r\nwww.spartak.openbank.ru\r\nwww.spasibo.megafon.ru\r\nwww.spb-bc.rbc.ru\r\nwww.spb-heroes.rbc.ru\r\nwww.spb.aif.ru\r\nwww.spb.dev.kp.ru\r\nwww.spb.kp.ru\r\nwww.spb.lemanapro.ru\r\nwww.spb.mts.ru\r\nwww.spb.uskov.dev.kp.ru\r\nwww.spbmuseum.t2.ru\r\nwww.spbprojects.kommersant.ru\r\nwww.spec.kino-teatr.ru\r\nwww.special.garant.ru\r\nwww.special.ixbt.com\r\nwww.special.kommersant.ru\r\nwww.special.kremlin.ru\r\nwww.special.open.ru\r\nwww.speechkit.yandex.ru\r\nwww.spiritvks.rosatom.ru\r\nwww.splash.zdorovie-shkolnika.spb.aif.ru\r\nwww.splunk115.worldbank.org\r\nwww.splunk118.worldbank.org\r\nwww.splunkc03.worldbank.org\r\nwww.sponsor.vedomosti.ru\r\nwww.sportmaster.youdo.com\r\nwww.sportmastermono.youdo.com\r\nwww.sports.ru\r\nwww.spp.alfabank.ru\r\nwww.sppt.alfabank.ru\r\nwww.spractic.garant.ru\r\nwww.spring.kino-teatr.ru\r\nwww.springboot.kino-teatr.ru\r\nwww.sps.rosatom.ru\r\nwww.sputnik.mts.ru\r\nwww.sr2019.mkb.ru\r\nwww.srg.open.ru\r\nwww.srm-deals.x5.ru\r\nwww.srm.magnit.ru\r\nwww.srm2.magnit.ru\r\nwww.ss.kino-teatr.ru\r\nwww.ssh.zdorovie-shkolnika.spb.aif.ru\r\nwww.sslvpn.rbc.ru\r\nwww.sso-app2.vtb.ru\r\nwww.sso-app4.vtb.ru\r\nwww.sso-buh.sovcombank.ru\r\nwww.sso-ib.vtb.ru\r\nwww.sso.appservice.azuremsk.ec.mts.ru\r\nwww.sso.babyblog.ru\r\nwww.sso.if.test.vtb.ru\r\nwww.sso.magnit.ru\r\nwww.ssobmc.magnit.ru\r\nwww.sss.kino-teatr.ru\r\nwww.ssswww.kino-teatr.ru\r\nwww.sswww.kino-teatr.ru\r\nwww.st-chat-sharing.vtb.ru\r\nwww.st-chat-turn.vtb.ru\r\nwww.st-chat.vtb.ru\r\nwww.st-krukovo.mos.ru\r\nwww.st.app.vtb.ru\r\nwww.st.yandex.ru\r\nwww.staff-acquisition.magnit.ru\r\nwww.stage.championat.com\r\nwww.stage.garnet.pet-project.habr.com\r\nwww.stage.gkh.hab.aif.ru\r\nwww.stage.perekrestok.ru\r\nwww.stage.sapphire.pet-project.habr.com\r\nwww.stage.sports.ru\r\nwww.staging.afro.who.int\r\nwww.staging.kino-teatr.ru\r\nwww.stakeholdersurvey2021.rzd.ru\r\nwww.star.garant.ru\r\nwww.star.worldbank.org\r\nwww.start.avito.ru\r\nwww.start.open.ru\r\nwww.start.tinkoff.ru\r\nwww.startup.mts.ru\r\nwww.startup.rosbank.ru\r\nwww.startup.vtb.ru\r\nwww.startups.rostelecom.ru\r\nwww.startups.yandex.ru\r\nwww.stat.mkb.ru\r\nwww.stat.yandex.ru\r\nwww.state.kremlin.ru\r\nwww.static.avito.ru\r\nwww.static.data.tinkoff.ru\r\nwww.static.kino-teatr.ru\r\nwww.static.mobapp-daily-stage.open.ru\r\nwww.static.mobapp-daily-test.open.ru\r\nwww.static.mobapp-daily.open.ru\r\nwww.static.reader.litres.ru\r\nwww.static3.zdorovie-shkolnika.spb.aif.ru\r\nwww.stats-buh.sovcombank.ru\r\nwww.status.gkh.hab.aif.ru\r\nwww.stav.aif.ru\r\nwww.stav.dev.kp.ru\r\nwww.stav.kp.ru\r\nwww.stav.uskov.dev.kp.ru\r\nwww.stavropol.lemanapro.ru\r\nwww.sterlitamak.lemanapro.ru\r\nwww.steven.zdorovie-shkolnika.spb.aif.ru\r\nwww.stg.kino-teatr.ru\r\nwww.stg.max.com\r\nwww.stihi.ru\r\nwww.storage.kino-teatr.ru\r\nwww.storage.sovcombank.ru\r\nwww.storage.sport.sovcombank.ru\r\nwww.storagektv.rosatom.ru\r\nwww.store.alfabank.ru\r\nwww.store.rutube.ru\r\nwww.store.sber.ru\r\nwww.store.yandex.ru\r\nwww.stories.2gis.ru\r\nwww.stories.kino-teatr.ru\r\nwww.stories.livejournal.com\r\nwww.strategy.rk.gov.ru\r\nwww.strategy2017.rk.gov.ru\r\nwww.strategy2020.tinkoff.ru\r\nwww.stream.origin.zdorovie-shkolnika.spb.aif.ru\r\nwww.street.sports.ru\r\nwww.strequest.worldbank.org\r\nwww.strikingpoverty.worldbank.org\r\nwww.sttest.yandex.ru\r\nwww.student-biblio.litres.ru\r\nwww.student.tele2.ru\r\nwww.students.megafon.ru\r\nwww.style.vesti.ru\r\nwww.subo-sec-usit.vtb.ru\r\nwww.subscribe.vedomosti.ru\r\nwww.subscriber.max.com\r\nwww.summer.tinkoff.ru\r\nwww.sun6-13.userapi.com\r\nwww.sun6-23.userapi.com\r\nwww.sunshine.zdorovie-shkolnika.spb.aif.ru\r\nwww.suoext.alfabank.ru\r\nwww.super.mironline.ru\r\nwww.support.gkh.hab.aif.ru\r\nwww.support.kino-teatr.ru\r\nwww.support.zdorovie-shkolnika.spb.aif.ru\r\nwww.surgut.hh.ru\r\nwww.surgut.lemanapro.ru\r\nwww.survey.magnit.ru\r\nwww.survey.mkb.ru\r\nwww.surveyfeedback.worldbank.org\r\nwww.sushiwok.youdo.com\r\nwww.sutyazhnik.garant.ru\r\nwww.sviaz-expo.bizconf.rbc.ru\r\nwww.svn.kino-teatr.ru\r\nwww.svoedelo.kp.ru\r\nwww.svoehome.rshb.ru\r\nwww.svoy.alfabank.ru\r\nwww.svyaznoy.youdo.com\r\nwww.swftmsg.worldbank.org\r\nwww.syktyvkar.hh.ru\r\nwww.syktyvkar.lemanapro.ru\r\nwww.sysadmin.kino-teatr.ru\r\nwww.system.kino-teatr.ru\r\nwww.szrf.km.duma.gov.ru\r\nwww.t-bank.ru\r\nwww.t.avito.ru\r\nwww.t.kino-teatr.ru\r\nwww.t.vtb.ru\r\nwww.t2.ru\r\nwww.t2.zdorovie-shkolnika.spb.aif.ru\r\nwww.t2pay-backoffice.corp.t2.ru\r\nwww.t2rusall.litres.ru\r\nwww.t2ruspremium.litres.ru\r\nwww.t2rusread.litres.ru\r\nwww.t2wd.t2.ru\r\nwww.t2wd.tele2.ru\r\nwww.tab.worldbank.org\r\nwww.tableau-trust.open.ru\r\nwww.tableau.open.ru\r\nwww.tableau.x5.ru\r\nwww.tablo.ivi.ru\r\nwww.talent.alfabank.ru\r\nwww.talent.open.ru\r\nwww.talent.openbank.ru\r\nwww.tambov.dev.kp.ru\r\nwww.tambov.kp.ru\r\nwww.tambov.lemanapro.ru\r\nwww.tambov.tele2.ru\r\nwww.tambov.uskov.dev.kp.ru\r\nwww.taras.yandex.ru\r\nwww.tardis.tiu.ru\r\nwww.target-segmenter.t2.ru\r\nwww.target.t2.ru\r\nwww.target.tele2.ru\r\nwww.tarusskij-r40.gosweb.gosuslugi.ru\r\nwww.task11.kino-teatr.ru\r\nwww.taxi-terminal.yandex.ru\r\nwww.tb.mchs.ru\r\nwww.tb.open.ru\r\nwww.tbp.open.ru\r\nwww.tbt.open.ru\r\nwww.tbusiness.auth.alfabank.ru\r\nwww.tcc.worldbank.org\r\nwww.tcctest.worldbank.org\r\nwww.tconf.rosatom.ru\r\nwww.tconfbr01.rosbank.ru\r\nwww.tds.vtb.ru\r\nwww.team-m.pilot.t2.ru\r\nwww.team-m02.pilot.t2.ru\r\nwww.team.mail.ru\r\nwww.teamroom.worldbank.org\r\nwww.teams.vk.com\r\nwww.teamwork.dev.kp.ru\r\nwww.tech.rbc.ru\r\nwww.tech.yandex.ru\r\nwww.techno.2gis.ru\r\nwww.technosoft.rbc.ru\r\nwww.teguldet.social.tomsk.gov.ru\r\nwww.tel.money.yandex.ru\r\nwww.tele2.ru\r\nwww.tele2rusall.litres.ru\r\nwww.tele2rusread.litres.ru\r\nwww.teledoctor24.t2.ru\r\nwww.telegate-test.open.ru\r\nwww.telework.alfabank.ru\r\nwww.telework2.alfabank.ru\r\nwww.tema.t2.ru\r\nwww.temp.busines-lady-spb.aif.ru\r\nwww.temp.dostoevskiy-spb.aif.ru\r\nwww.teremok.ru.youdo.com\r\nwww.terminal.oplata.t2.ru\r\nwww.test-alfa-mobile.alfabank.ru\r\nwww.test-anketa.alfabank.ru\r\nwww.test-api.kino-teatr.ru\r\nwww.test-appweb.broker.vtb.ru\r\nwww.test-bqr.vtb.ru\r\nwww.test-c2b-sbp.openbank.ru\r\nwww.test-invest.vtb.ru\r\nwww.test-middle-api.magnit.ru\r\nwww.test-mobile2.broker.vtb.ru\r\nwww.test-my.perekrestok.ru\r\nwww.test-opros.vtb.ru\r\nwww.test-pay.vtb.ru\r\nwww.test.aif-city.spb.aif.ru\r\nwww.test.busines-lady-spb.aif.ru\r\nwww.test.hr.drom.ru\r\nwww.test.kino-teatr.ru\r\nwww.test.longread.altai.aif.ru\r\nwww.test.mobile.broker.vtb.ru\r\nwww.test.obmen.open.ru\r\nwww.test.rosbank.ru\r\nwww.test.rpn.gov.ru\r\nwww.test.test.magnit.ru\r\nwww.test.vtb.ru\r\nwww.test07.rshb.ru\r\nwww.test10.zdorovie-shkolnika.spb.aif.ru\r\nwww.test2.zdorovie-shkolnika.spb.aif.ru\r\nwww.testamcalls.alfabank.ru\r\nwww.testblog.zdorovie-shkolnika.spb.aif.ru\r\nwww.testjmb.alfabank.ru\r\nwww.testkomisson.vtb.ru\r\nwww.testlink.alfabank.ru\r\nwww.testmetrics.alfabank.ru\r\nwww.testpay.alfabank.ru\r\nwww.tests.banki.ru\r\nwww.teszt.zdorovie-shkolnika.spb.aif.ru\r\nwww.tewbac.cn.www.sports.ru\r\nwww.texpress.rosatom.ru\r\nwww.tff.worldbank.org\r\nwww.tfs-ext.open.ru\r\nwww.tfs-test.open.ru\r\nwww.tg.t2.ru\r\nwww.tgbot-trust.open.ru\r\nwww.thesetwo.mts.ru\r\nwww.thumbnail.hh.ru\r\nwww.tibtest.t2.ru\r\nwww.ticket.rzd.ru\r\nwww.tickets.mirtv.ru\r\nwww.tickets.ozon.ru\r\nwww.timashevsk.hh.ru\r\nwww.time.yandex.ru\r\nwww.tinkoff.ru\r\nwww.tinkoff.youdo.com\r\nwww.tinvest.auth.alfabank.ru\r\nwww.tips.vtb.ru\r\nwww.tiu.ru\r\nwww.tivavks.rosatom.ru\r\nwww.tkmv.gov.ru\r\nwww.tld.proza.ru\r\nwww.tld.stihi.ru\r\nwww.tm.open.ru\r\nwww.tmobile-zeus.alfabank.ru\r\nwww.tmobile-zeus.auth.alfabank.ru\r\nwww.tmobile.auth.alfabank.ru\r\nwww.tmsg-p2p.tinkoff.ru\r\nwww.togliatti.hh.ru\r\nwww.tolyatti.lemanapro.ru\r\nwww.tomsk.dev.kp.ru\r\nwww.tomsk.kp.ru\r\nwww.tomsk.lemanapro.ru\r\nwww.tomsk.tele2.ru\r\nwww.tomsk.uskov.dev.kp.ru\r\nwww.tools.alfabank.ru\r\nwww.topup.t2.ru\r\nwww.torgi.fas.gov.ru\r\nwww.tori.magnit.ru\r\nwww.toto.zdorovie-shkolnika.spb.aif.ru\r\nwww.tpaycontrol.alfabank.ru\r\nwww.tppmo.rbc.ru\r\nwww.tprivate.auth.alfabank.ru\r\nwww.tpvcsedc2.worldbank.org\r\nwww.track.magnit.ru\r\nwww.tracking.pochta.ru\r\nwww.tracking.russianpost.ru\r\nwww.trade.alfabank.ru\r\nwww.tradefinance.rosbank.ru\r\nwww.trading.alfabank.ru\r\nwww.traffic.pda.yandex.ru\r\nwww.transformation.megafon.ru\r\nwww.translate.worldbank.org\r\nwww.translon.youdo.com\r\nwww.transport.mos.ru\r\nwww.travel.alfabank.ru\r\nwww.travel.moscow.megafon.ru\r\nwww.travel.open.ru\r\nwww.travel.openbank.ru\r\nwww.travel.rambler.ru\r\nwww.travel.rzd.ru\r\nwww.travel.worldbank.org\r\nwww.traveler.intech.rshb.ru\r\nwww.traveler.tele2.ru\r\nwww.travelergo.rshb.ru\r\nwww.travelernext.alfabank.ru\r\nwww.travelerrf.rshb.ru\r\nwww.travelervip.alfabank.ru\r\nwww.travelhelper.t2.ru\r\nwww.traveling-routes.vtb.ru\r\nwww.trebi.worldbank.org\r\nwww.trebiqa.worldbank.org\r\nwww.treda.profi.ru\r\nwww.tredc1dev.worldbank.org\r\nwww.tredc1dev6alb.worldbank.org\r\nwww.tredc1dev6ald.worldbank.org\r\nwww.tredc1dev6alh.worldbank.org\r\nwww.tredc1dev6alq.worldbank.org\r\nwww.tredc1dev6cmd.worldbank.org\r\nwww.tredc1dev6imb.worldbank.org\r\nwww.tredc1dev6imm.worldbank.org\r\nwww.tredc1tstimh.worldbank.org\r\nwww.tredc3tst6alr.worldbank.org\r\nwww.tredc3tst6ctr.worldbank.org\r\nwww.tredc3tst6imh.worldbank.org\r\nwww.tremobile.worldbank.org\r\nwww.tremobile2.worldbank.org\r\nwww.tremscshwp101.worldbank.org\r\nwww.tremscshwp102.worldbank.org\r\nwww.tremscshwp301.worldbank.org\r\nwww.tremscshwp302.worldbank.org\r\nwww.tremsfaolab102.worldbank.org\r\nwww.tremsinvsutp101.worldbank.org\r\nwww.tremsinvsutt101.worldbank.org\r\nwww.treomsp.worldbank.org\r\nwww.trera01.worldbank.org\r\nwww.trera02.worldbank.org\r\nwww.trmm.rosatom.ru\r\nwww.try.mts.ru\r\nwww.ts.magnit.ru\r\nwww.tspace-link.rosatom.ru\r\nwww.tspace.rosatom.ru\r\nwww.tsps.rosatom.ru\r\nwww.tst-ctx-mdm.open.ru\r\nwww.tst-gen-wa-edna-rgsb.open.ru\r\nwww.tst-gen-wa-edna.open.ru\r\nwww.tst-merchantsbp.rshb.ru\r\nwww.tst-msb03.open.ru\r\nwww.tst-prime.open.ru\r\nwww.tst-table001.open.ru\r\nwww.ttvel.rosatom.ru\r\nwww.tula.dev.kp.ru\r\nwww.tula.hh.ru\r\nwww.tula.kp.ru\r\nwww.tula.lemanapro.ru\r\nwww.tula.tele2.ru\r\nwww.tula.uskov.dev.kp.ru\r\nwww.tumen.dev.kp.ru\r\nwww.tumen.kp.ru\r\nwww.tumen.uskov.dev.kp.ru\r\nwww.tutorials-mts-books.litres.ru\r\nwww.tutorials.zdorovie-shkolnika.spb.aif.ru\r\nwww.tutu.ru\r\nwww.tv.kino-teatr.ru\r\nwww.tv.yandex.ru\r\nwww.tvel.rosatom.ru\r\nwww.tver.dev.kp.ru\r\nwww.tver.hh.ru\r\nwww.tver.kp.ru\r\nwww.tver.lemanapro.ru\r\nwww.tver.tele2.ru\r\nwww.tver.uskov.dev.kp.ru\r\nwww.tvoy.magnit.ru\r\nwww.twex.rosatom.ru\r\nwww.twofactor2.open.ru\r\nwww.tyumen.lemanapro.ru\r\nwww.u.premier.one\r\nwww.u3rm.kino-teatr.ru\r\nwww.ua.zdorovie-shkolnika.spb.aif.ru\r\nwww.uat.kino-teatr.ru\r\nwww.uazher.leasing.rshb.ru\r\nwww.ubio-digt-fgw.vtb.ru\r\nwww.ucp-superset-ext.magnit.ru\r\nwww.uctrader.unicreditbank.ru\r\nwww.udalenka.garant.ru\r\nwww.udmpro.kommersant.ru\r\nwww.ufa.aif.ru\r\nwww.ufa.dev.kp.ru\r\nwww.ufa.kp.ru\r\nwww.ufa.lemanapro.ru\r\nwww.ufa.uskov.dev.kp.ru\r\nwww.ufaprojects.kommersant.ru\r\nwww.ugp-zbx-ext-app.sovcombank.ru\r\nwww.ugra.aif.ru\r\nwww.ugra.dev.kp.ru\r\nwww.ugra.kp.ru\r\nwww.ugra.uskov.dev.kp.ru\r\nwww.ugwcscan0c270e07df9ef4a983c4b713c04d6d56.aif-city.spb.aif.ru\r\nwww.ugwcscan24fe3c405e63d6d8bcad11adbbe80281.git.status-spb.aif.ru\r\nwww.ugwcscan3ceb24fa855df5e92639b19f0db99277.com.life.kuzbass.aif.ru\r\nwww.ugwcscan4ccac2ea7aeeee6e7246499b53eaa602.project.kazan.aif.ru\r\nwww.ugwcscan53b9aaf7c8e58bea37fec4719fc91be8.kino-teatr.ru\r\nwww.ugwcscan57121e00cf0d07d0e6fd324f5284abbd.stalingrad.vlg.aif.ru\r\nwww.ugwcscanbbc0b7783e1250c1cea04436d518629c.gitlab.gkh.hab.aif.ru\r\nwww.ugwcscancb631fc51ee35e91a64dc018e76a1eaf.pochta.aif.ru\r\nwww.ugwcscand4dd410b142c8e033846514d0d1341fd.a.gorod.bryansk.aif.ru\r\nwww.ugwcscanf56b54ec7916ca8aceaec8b1bd3a5f8e.com.life.kuzbass.aif.ru\r\nwww.ukr.zdorovie-shkolnika.spb.aif.ru\r\nwww.ukss.rosatom.ru\r\nwww.ul.dev.kp.ru\r\nwww.ul.kp.ru\r\nwww.ul.uskov.dev.kp.ru\r\nwww.ulan-ude.lemanapro.ru\r\nwww.ulan.kp.ru\r\nwww.ulyanovsk.hh.ru\r\nwww.ulyanovsk.lemanapro.ru\r\nwww.unicreditbank.ru\r\nwww.university.kommersant.ru\r\nwww.unpo.tomsk.gov.ru\r\nwww.uoervagclicfg.kino-teatr.ru\r\nwww.update.megafon.ru\r\nwww.upport.kino-teatr.ru\r\nwww.ural.dev.kp.ru\r\nwww.ural.kp.ru\r\nwww.ural.uskov.dev.kp.ru\r\nwww.urban-regeneration.worldbank.org\r\nwww.urozhai.rshb.ru\r\nwww.urv.magnit.ru\r\nwww.us.kino-teatr.ru\r\nwww.usa.dev.kp.ru\r\nwww.user.kino-teatr.ru\r\nwww.user1305663.9111.ru\r\nwww.user2353054.9111.ru\r\nwww.uskov.dev.kp.ru\r\nwww.uslugi.rk.gov.ru\r\nwww.uslugi.tambov.gov.ru\r\nwww.uslugi.yandex.ru\r\nwww.ussd.russianpost.ru\r\nwww.utcs.leasing.rshb.ru\r\nwww.utki.kino-teatr.ru\r\nwww.utlook.kino-teatr.ru\r\nwww.uyp-zbx-ui-ext.sovcombank.ru\r\nwww.v.kino-teatr.ru\r\nwww.v00bmcarsint001.magnit.ru\r\nwww.v00bmcarsint002.magnit.ru\r\nwww.va-audio.t2.ru\r\nwww.vader.zdorovie-shkolnika.spb.aif.ru\r\nwww.validator.yandex.ru\r\nwww.vao.mos.ru\r\nwww.vaux-swift-inside.kino-teatr.ru\r\nwww.vb.vtb.ru\r\nwww.vc.videos.livejournal.com\r\nwww.vconf.rosatom.ru\r\nwww.vcs.rk.gov.ru\r\nwww.vdi.worldbank.org\r\nwww.vedomosti.ru\r\nwww.vef.bizconf.rbc.ru\r\nwww.velikie-luki-gorod-r58.gosweb.gosuslugi.ru\r\nwww.velikiy-novgorod.lemanapro.ru\r\nwww.vesna.yandex.ru\r\nwww.vestnik.rostelecom.ru\r\nwww.vezu.youdo.com\r\nwww.vfmt6ewgzyqluh85.life.kuzbass.aif.ru\r\nwww.vgv.kino-teatr.ru\r\nwww.vic.bizconf.rbc.ru\r\nwww.video.beeline.ru\r\nwww.video.consultant.ru\r\nwww.video.magnit.ru\r\nwww.video.net.ixbt.com\r\nwww.video.rambler.ru\r\nwww.video.yandex.ru\r\nwww.videoproxy.magnit.ru\r\nwww.videostream.magnit.ru\r\nwww.vidnoe.hh.ru\r\nwww.virtual-assistant.magnit.ru\r\nwww.visual.yandex.ru\r\nwww.vita.t2.ru\r\nwww.vitrina.vtb.ru\r\nwww.vk.com\r\nwww.vkapp.litres.ru\r\nwww.vkino.mts.ru\r\nwww.vks.rshb.ru\r\nwww.vksaepk.rosatom.ru\r\nwww.vkusnoitochka.youdo.com\r\nwww.vkusvill.youdo.com\r\nwww.vkvideo.vprok.ru\r\nwww.vladikavkaz.lemanapro.ru\r\nwww.vladimir.dev.kp.ru\r\nwww.vladimir.hh.ru\r\nwww.vladimir.kp.ru\r\nwww.vladimir.lemanapro.ru\r\nwww.vladimir.tele2.ru\r\nwww.vladimir.uskov.dev.kp.ru\r\nwww.vladivostok.lemanapro.ru\r\nwww.vle.worldbank.org\r\nwww.vlk.sovcombank.ru\r\nwww.vn.kino-teatr.ru\r\nwww.vneshpol.gov.ru\r\nwww.vno.yandex.ru\r\nwww.vnov.dev.kp.ru\r\nwww.vnov.kp.ru\r\nwww.vnov.uskov.dev.kp.ru\r\nwww.vo.vtb.ru\r\nwww.vocabulary.worldbank.org\r\nwww.vodafoneua-api.ivi.ru\r\nwww.vodafoneua-l.ivi.ru\r\nwww.voip.vprok.ru\r\nwww.volga.openbank.ru\r\nwww.volgograd.dev.kp.ru\r\nwww.volgograd.kp.ru\r\nwww.volgograd.lemanapro.ru\r\nwww.volgograd.uskov.dev.kp.ru\r\nwww.volnamobilelisten.litres.ru\r\nwww.vologda.dev.kp.ru\r\nwww.vologda.kp.ru\r\nwww.vologda.lemanapro.ru\r\nwww.vologda.tele2.ru\r\nwww.vologda.uskov.dev.kp.ru\r\nwww.voltage-pp-0000.open.ru\r\nwww.voltage-pp-0000.openbank.ru\r\nwww.voltage.openbank.ru\r\nwww.volunteers.iz.ru\r\nwww.volzhskiy.hh.ru\r\nwww.volzhskiy.lemanapro.ru\r\nwww.voronezh.alfabank.ru\r\nwww.voronezh.lemanapro.ru\r\nwww.voronezh.tele2.ru\r\nwww.vote-trust-tst1.open.ru\r\nwww.vote-trust.open.ru\r\nwww.vote.open.ru\r\nwww.votedr.open.ru\r\nwww.voxys.youdo.com\r\nwww.voznesensk-nk.hh.ru\r\nwww.vpn-phd.sovcombank.ru\r\nwww.vpn.tele2.ru\r\nwww.vpns.spb.mts.ru\r\nwww.vprok.ru\r\nwww.vprok.youdo.com\r\nwww.vremya.yandex.ru\r\nwww.vrn-pro.kommersant.ru\r\nwww.vrn.dev.kp.ru\r\nwww.vrn.kp.ru\r\nwww.vrn.uskov.dev.kp.ru\r\nwww.vrp1ci30.worldbank.org\r\nwww.vrp2ci30.worldbank.org\r\nwww.vrpark.tele2.ru\r\nwww.vrq1ci60.worldbank.org\r\nwww.vrq2ci60.worldbank.org\r\nwww.vsmrci00.worldbank.org\r\nwww.vstudio.tinkoff.ru\r\nwww.vt.zdorovie-shkolnika.spb.aif.ru\r\nwww.vtb.ru\r\nwww.vtbinvest.kommersant.ru\r\nwww.vts1.rshb.ru\r\nwww.vts2.rshb.ru\r\nwww.vtsapi.open.ru\r\nwww.vtsapitest.open.ru\r\nwww.vtsjsa.rosbank.ru\r\nwww.vtsjsp.rosbank.ru\r\nwww.vtsjss.rosbank.ru\r\nwww.vvv.kino-teatr.ru\r\nwww.vx.worldbank.org\r\nwww.w.kino-teatr.ru\r\nwww.w0lxecdn01.worldbank.org\r\nwww.w0lxsub002.worldbank.org\r\nwww.w0lxsubdev01.worldbank.org\r\nwww.w18e0ww.kino-teatr.ru\r\nwww.w1a79ww.kino-teatr.ru\r\nwww.w1es1111.worldbank.org\r\nwww.w1msprdadfs01.worldbank.org\r\nwww.w2ln0041.worldbank.org\r\nwww.w3es2904.worldbank.org\r\nwww.wa.kino-teatr.ru\r\nwww.wap.money.yandex.ru\r\nwww.wap.tele2.ru\r\nwww.wastenet.worldbank.org\r\nwww.watch.yandex.ru\r\nwww.water.worldbank.org\r\nwww.wbapiron01.worldbank.org\r\nwww.wbapiron02.worldbank.org\r\nwww.wbapiron101.worldbank.org\r\nwww.wbapiron202.worldbank.org\r\nwww.wbappsproxyqa.worldbank.org\r\nwww.wbappsproxyqa201.worldbank.org\r\nwww.wbarc1.worldbank.org\r\nwww.wbarchqa.worldbank.org\r\nwww.wbasexproxy101.worldbank.org\r\nwww.wbasexproxy201.worldbank.org\r\nwww.wbasexproxyqa101.worldbank.org\r\nwww.wbasproxy1.worldbank.org\r\nwww.wbasproxy10.worldbank.org\r\nwww.wbasproxy11.worldbank.org\r\nwww.wbasproxy12.worldbank.org\r\nwww.wbasproxy14.worldbank.org\r\nwww.wbasproxy2.worldbank.org\r\nwww.wbasproxy4.worldbank.org\r\nwww.wbasproxy5.worldbank.org\r\nwww.wbasproxy6.worldbank.org\r\nwww.wbasproxy7.worldbank.org\r\nwww.wbasproxy8.worldbank.org\r\nwww.wbasproxy9.worldbank.org\r\nwww.wbasproxyqa.worldbank.org\r\nwww.wbasproxyqa101.worldbank.org\r\nwww.wbasproxyqalb.worldbank.org\r\nwww.wbasproxytest.worldbank.org\r\nwww.wbasproxytest2.worldbank.org\r\nwww.wbcba.worldbank.org\r\nwww.wbclimatescreeningtools.worldbank.org\r\nwww.wbes027.worldbank.org\r\nwww.wbes1819.worldbank.org\r\nwww.wbes5034.worldbank.org\r\nwww.wbes5391.worldbank.org\r\nwww.wbes864.worldbank.org\r\nwww.wbes865.worldbank.org\r\nwww.wbes881.worldbank.org\r\nwww.wbes882.worldbank.org\r\nwww.wbes883.worldbank.org\r\nwww.wbes884.worldbank.org\r\nwww.wbes885.worldbank.org\r\nwww.wbes886.worldbank.org\r\nwww.wbes887.worldbank.org\r\nwww.wbes888.worldbank.org\r\nwww.wbes922r.worldbank.org\r\nwww.wbes9914.worldbank.org\r\nwww.wbes9915.worldbank.org\r\nwww.wbes9917.worldbank.org\r\nwww.wbes9918.worldbank.org\r\nwww.wbfed.worldbank.org\r\nwww.wbfedservice.worldbank.org\r\nwww.wbfedservicedev.worldbank.org\r\nwww.wbfprsdev.worldbank.org\r\nwww.wbfs.worldbank.org\r\nwww.wbfsdev.worldbank.org\r\nwww.wbfsecqa.worldbank.org\r\nwww.wbfsotqa.worldbank.org\r\nwww.wbfsqa.worldbank.org\r\nwww.wbfstfe.worldbank.org\r\nwww.wbfstst.worldbank.org\r\nwww.wbgamqdev.worldbank.org\r\nwww.wbgamqtest.worldbank.org\r\nwww.wbgauthextdev.worldbank.org\r\nwww.wbgbip.worldbank.org\r\nwww.wbgeconsult2.worldbank.org\r\nwww.wbgecrm.worldbank.org\r\nwww.wbgetenderingext.worldbank.org\r\nwww.wbgfellowship.worldbank.org\r\nwww.wbghtauthd.worldbank.org\r\nwww.wbgltauthd.worldbank.org\r\nwww.wbgmdm.worldbank.org\r\nwww.wbgmdmqa.worldbank.org\r\nwww.wbgmdmqalb.worldbank.org\r\nwww.wbgmdmtest.worldbank.org\r\nwww.wbgmobilemail1.worldbank.org\r\nwww.wbgmobilemail2.worldbank.org\r\nwww.wbgmobilemail3.worldbank.org\r\nwww.wbgmsarci001.worldbank.org\r\nwww.wbgmscmpc004.tre.ad.worldbank.org\r\nwww.wbgmscmpc004.worldbank.org\r\nwww.wbgmscmpd002.worldbank.org\r\nwww.wbgmsdsc001.worldbank.org\r\nwww.wbgmsemss001.worldbank.org\r\nwww.wbgmsgserp01.worldbank.org\r\nwww.wbgmsjira001.worldbank.org\r\nwww.wbgmsjira002.worldbank.org\r\nwww.wbgmsjira003.worldbank.org\r\nwww.wbgmsoist001.worldbank.org\r\nwww.wbgmsoist002.worldbank.org\r\nwww.wbgmsrsamq01.worldbank.org\r\nwww.wbgmsspdev08.worldbank.org\r\nwww.wbgmssssi001.worldbank.org\r\nwww.wbgmstrpd001.wb.ad.worldbank.org\r\nwww.wbgmstrpd002.worldbank.org\r\nwww.wbgmstvnq001.worldbank.org\r\nwww.wbgmtauthd.worldbank.org\r\nwww.wbgo365proxy101.worldbank.org\r\nwww.wbgo365proxy201.worldbank.org\r\nwww.wbgo365proxy301.worldbank.org\r\nwww.wbgsurvey.worldbank.org\r\nwww.wbgvds.worldbank.org\r\nwww.wbgvdsqa.worldbank.org\r\nwww.wbgypp.worldbank.org\r\nwww.wbi.worldbank.org\r\nwww.wbim.worldbank.org\r\nwww.wbintapp.worldbank.org\r\nwww.wbintappqa.worldbank.org\r\nwww.wbmobileauthqa.worldbank.org\r\nwww.wbmsaee101.worldbank.org\r\nwww.wbmscrm101.wb.ad.worldbank.org\r\nwww.wbmsrsam01.worldbank.org\r\nwww.wbmsrsamd01.worldbank.org\r\nwww.wbmssccm001.wb.ad.worldbank.org\r\nwww.wbmssqlds201.wb.ad.worldbank.org\r\nwww.wbmssqlds201.worldbank.org\r\nwww.wbmsst003.worldbank.org\r\nwww.wbmsudstst101.worldbank.org\r\nwww.wbolcqa.worldbank.org\r\nwww.wbsecureidqa.worldbank.org\r\nwww.wbsso.worldbank.org\r\nwww.wbssocertsnd.worldbank.org\r\nwww.wbssoe.worldbank.org\r\nwww.wbssoet.worldbank.org\r\nwww.wbssoext.worldbank.org\r\nwww.wbssoextcl.worldbank.org\r\nwww.wbssoextcldev.worldbank.org\r\nwww.wbssoexte.worldbank.org\r\nwww.wbssoexteqa.worldbank.org\r\nwww.wbssoextm.worldbank.org\r\nwww.wbssoextmqa.worldbank.org\r\nwww.wbssospa.worldbank.org\r\nwww.wbssospaqa.worldbank.org\r\nwww.wbsts.worldbank.org\r\nwww.wbstsp.worldbank.org\r\nwww.wbstss.worldbank.org\r\nwww.wbsvcnow.worldbank.org\r\nwww.wbsvcnowqa.worldbank.org\r\nwww.wbtestmon.open.ru\r\nwww.wbtranslation.worldbank.org\r\nwww.wbwfort.worldbank.org\r\nwww.wbx.open.ru\r\nwww.wbx.psbank.ru\r\nwww.wdnfaforum.kino-teatr.ru\r\nwww.wdronline.worldbank.org\r\nwww.weather.pda.yandex.ru\r\nwww.weather.rambler.ru\r\nwww.weather.yandex.ru\r\nwww.web-gateway.middle-api.magnit.ru\r\nwww.web-myinvest.vtb.ru\r\nwww.web-test.alfabank.ru\r\nwww.web.alfabank.ru\r\nwww.web.gkh.hab.aif.ru\r\nwww.web.kino-teatr.ru\r\nwww.web2quiktest.alfabank.ru\r\nwww.webadmin.zdorovie-shkolnika.spb.aif.ru\r\nwww.webapi.open.ru\r\nwww.webapi.openbank.ru\r\nwww.webapps.worldbank.org\r\nwww.webcal.yandex.ru\r\nwww.webcall.open.ru\r\nwww.webcall.vtb.ru\r\nwww.webcare.tele2.ru\r\nwww.webchat.open.ru\r\nwww.webconf.rosatom.ru\r\nwww.webdisk.billing.zdorovie-shkolnika.spb.aif.ru\r\nwww.webim.vkteams.rosbank.ru\r\nwww.webinar.2gis.ru\r\nwww.webinar.open.ru\r\nwww.webinar.profi.ru\r\nwww.webinar.rbc.ru\r\nwww.webktv.rosatom.ru\r\nwww.webmail.kino-teatr.ru\r\nwww.webmail.tstad.worldbank.org\r\nwww.webmail.worldbank.org\r\nwww.webmail3.worldbank.org\r\nwww.webmaster-support.wmc-admin.yandex.ru\r\nwww.webmaster.yandex.ru\r\nwww.webmin.mirtv.ru\r\nwww.webor.sovcombank.ru\r\nwww.webquik.vtb.ru\r\nwww.webquikdemo.vtb.ru\r\nwww.webrtc-asd.avito.ru\r\nwww.webrtc-hc.avito.ru\r\nwww.websocket.hh.ru\r\nwww.webtutor.rshb.ru\r\nwww.weekend.rambler.ru\r\nwww.welcome-basketball.sports.ru\r\nwww.welcome-fight.sports.ru\r\nwww.welcome-tribuna.sports.ru\r\nwww.welcome.alfabank.ru\r\nwww.well-mind.t2.ru\r\nwww.wex.rosatom.ru\r\nwww.wf.mail.ru\r\nwww.wgw.kino-teatr.ru\r\nwww.whataboutpie.kino-teatr.ru\r\nwww.whirlpool.mvideo.ru\r\nwww.who.int\r\nwww.whub.litres.ru\r\nwww.wi-fi.beeline.ru\r\nwww.widget.kino-teatr.ru\r\nwww.wifi-auth.rshb.ru\r\nwww.wifi.avito.ru\r\nwww.wifi.beeline.ru\r\nwww.wifi.mts.ru\r\nwww.wifi.vtb.ru\r\nwww.wiki.gkh.hab.aif.ru\r\nwww.willow.zdorovie-shkolnika.spb.aif.ru\r\nwww.wimapi-test.vtb.ru\r\nwww.wimapi.vtb.ru\r\nwww.wish.t2.ru\r\nwww.wits.worldbank.org\r\nwww.wms.open.ru\r\nwww.wms.openbank.ru\r\nwww.wnam-s-portal.rosatom.ru\r\nwww.wolo.youdo.com\r\nwww.wordpress.kino-teatr.ru\r\nwww.wordstat.yandex.ru\r\nwww.work.youdo.com\r\nwww.workwith.youdo.com\r\nwww.world.ren.tv\r\nwww.worldbank.org\r\nwww.worldclass.vedomosti.ru\r\nwww.worldcup.vedomosti.ru\r\nwww.worldvita.ren.tv\r\nwww.wp.kino-teatr.ru\r\nwww.wp.rosbank.ru\r\nwww.wp.zdorovie-shkolnika.spb.aif.ru\r\nwww.ws.citilink.ru\r\nwww.ws.kino-teatr.ru\r\nwww.wsint.alfabank.ru\r\nwww.ww.kino-teatr.ru\r\nwww.ww2.kino-teatr.ru\r\nwww.www-11.chechnya.gov.ru\r\nwww.www-7ed.kino-teatr.ru\r\nwww.www-dr0a.kino-teatr.ru\r\nwww.www-esd.worldbank.org\r\nwww.www.0pdhl1jtkgtsi9b5.www.gkh.hab.aif.ru\r\nwww.www.1huyigymvgczszge.gkh.hab.aif.ru\r\nwww.www.1u0pawemmppywbfx.www.gkh.hab.aif.ru\r\nwww.www.2zr3n42o4isqrjbu.www.gordost.altai.aif.ru\r\nwww.www.42jjccfficchau4g.www.rostelecom.oren.aif.ru\r\nwww.www.4a4sugny8cunbrvh.www.rostelecom.oren.aif.ru\r\nwww.www.8l4qcz5dkqytyayi.farmet.kuban.aif.ru\r\nwww.www.96fre6t1bo37yoyw.www.grant.oren.aif.ru\r\nwww.www.a0xwcm8k5c1vyek3.godecologii.omsk.aif.ru\r\nwww.www.autodiscover.greeenway.aif.ru\r\nwww.www.companies.rbc.ru\r\nwww.www.dn4cjpqb6mrmh2cv.www.gpno1.oren.aif.ru\r\nwww.www.dr0bkrpn8tdapqss.www.grant.oren.aif.ru\r\nwww.www.dtrowhnrzp1pxhzn.www.gkh.hab.aif.ru\r\nwww.www.ej8pknorcvclmxgt.gkh.hab.aif.ru\r\nwww.www.ek33y8xuijc43fuu.www.gpno1.oren.aif.ru\r\nwww.www.farmet.kuban.aif.ru\r\nwww.www.gagmrlb9vjgmdwl1.greeenway.aif.ru\r\nwww.www.garant.ru\r\nwww.www.gazeta.ru\r\nwww.www.git.git.git.git.git.busines-lady-spb.aif.ru\r\nwww.www.gitlab.grantovyj-konkurs.omsk.aif.ru\r\nwww.www.gjhwfujnm7nxt8h5.rostelecom.oren.aif.ru\r\nwww.www.gmnfqlp9s6cy9zuk.www.gkh.hab.aif.ru\r\nwww.www.gov.zdorovie-shkolnika.spb.aif.ru\r\nwww.www.grwit1l086dbu187.www.gkh.hab.aif.ru\r\nwww.www.k4gofdkcnbwitguz.www.grant.oren.aif.ru\r\nwww.www.kinopoisk.ru\r\nwww.www.krverxglsz2q8ufl.www.gkh.hab.aif.ru\r\nwww.www.kzn5txwwsyp1dhao.www.grant.oren.aif.ru\r\nwww.www.l5zcskpfjy1p2ngj.gkh.hab.aif.ru\r\nwww.www.laba.kuban.aif.ru\r\nwww.www.lxg3kpm6phbnbcqc.greeenway.aif.ru\r\nwww.www.miningday.kuzbass.aif.ru\r\nwww.www.moybiznes-oren.aif.ru\r\nwww.www.nalog-monitor.x5.ru\r\nwww.www.ngmesto.altai.aif.ru\r\nwww.www.nqzwec0eohzuxit7.www.rostelecom.oren.aif.ru\r\nwww.www.r03pcaif0oqhbqor.www.gkh.hab.aif.ru\r\nwww.www.sbybedpulqbu2uyf.www.dostoevskiy-spb.aif.ru\r\nwww.www.smfwdsih4ikqsd60.godecologii.omsk.aif.ru\r\nwww.www.tymt1ttpn7jacbg0.www.grant.oren.aif.ru\r\nwww.www.ugwcscan36859865a523819456a55bfa8412f21d.gpno1.oren.aif.ru\r\nwww.www.vnsdleyz3zvk4zpc.godecologii.omsk.aif.ru\r\nwww.www.voip.zdorovie-shkolnika.spb.aif.ru\r\nwww.www.w3tthckfnf4rwwe2.www.rostelecom.oren.aif.ru\r\nwww.www.webinar.2gis.ru\r\nwww.www.www.greeenway.aif.ru\r\nwww.www.www.letai.kazan.aif.ru\r\nwww.www.xcawy4ggadw6ec9k.www.gkh.hab.aif.ru\r\nwww.www.xfsislckqepj6pjr.www.dostoevskiy-spb.aif.ru\r\nwww.www.xnggwwbrwncal6v1.www.gkh.hab.aif.ru\r\nwww.www.y3hbynskhpa2mrk4.www.rostelecom.oren.aif.ru\r\nwww.www.ylqj2tocddomibpw.rostelecom.oren.aif.ru\r\nwww.www.ysxdpzicq0pno1q4.www.gpno1.oren.aif.ru\r\nwww.www.zeahyip8gxj9slhs.www.dostoevskiy-spb.aif.ru\r\nwww.www19.zdorovie-shkolnika.spb.aif.ru\r\nwww.www4.worldbank.org\r\nwww.wwwss.kino-teatr.ru\r\nwww.wwwterminal2014.longread.altai.aif.ru\r\nwww.wwww.kino-teatr.ru\r\nwww.wwwww.kino-teatr.ru\r\nwww.wx.kino-teatr.ru\r\nwww.wyse.open.ru\r\nwww.x.alfabank.ru\r\nwww.x.mts.ru\r\nwww.x5wl0zxccm9qvsd7.status-spb.aif.ru\r\nwww.xaep.worldbank.org\r\nwww.xapi.factoring.rshb.ru\r\nwww.xapp.x5.ru\r\nwww.xc3.services.livejournal.com\r\nwww.xfeed.kino-teatr.ru\r\nwww.xmessenger-webhook-test.alfabank.ru\r\nwww.xml.wmc-admin.yandex.ru\r\nwww.xn---www-43d4dua4am.kino-teatr.ru\r\nwww.xn---www-53d3atp2ak9bc.kino-teatr.ru\r\nwww.xn---www-94dlwi.kino-teatr.ru\r\nwww.xn---www-v4dqnzj5b.kino-teatr.ru\r\nwww.xn--n1aalg.kino-teatr.ru\r\nwww.xn--w-7sba3bxa.kino-teatr.ru\r\nwww.xn--www-2dd.kino-teatr.ru\r\nwww.xn--www-2ddj.kino-teatr.ru\r\nwww.xn--www-5cd8d.kino-teatr.ru\r\nwww.xn--www-7ed.kino-teatr.ru\r\nwww.xn--www-9cdo3dbfl.kino-teatr.ru\r\nwww.xn--www-9cdoha6dgbio.kino-teatr.ru\r\nwww.xn--www-dr0a.kino-teatr.ru\r\nwww.xn--www-hgdaa.kino-teatr.ru\r\nwww.xn--www-mdd.kino-teatr.ru\r\nwww.xn--www-mdd3cf.kino-teatr.ru\r\nwww.xn--www-rede.kino-teatr.ru\r\nwww.xor.open.ru\r\nwww.xplatform-test.alfabank.ru\r\nwww.xplatform.alfabank.ru\r\nwww.xsim.t2.ru\r\nwww.xw1.rosbank.ru\r\nwww.yabk.litres.ru\r\nwww.yaca.yandex.ru\r\nwww.yakutia.dev.kp.ru\r\nwww.yakutia.kp.ru\r\nwww.yakutsk.lemanapro.ru\r\nwww.yamal.dev.kp.ru\r\nwww.yamal.kp.ru\r\nwww.yamal.uskov.dev.kp.ru\r\nwww.yamb.yandex.ru\r\nwww.yandex.avito.sberbank.www.u6mod1v0hsu9l7ii.farmet.kuban.aif.ru\r\nwww.yandex.ru\r\nwww.yar.dev.kp.ru\r\nwww.yar.kp.ru\r\nwww.yar.uskov.dev.kp.ru\r\nwww.yaroslavl.lemanapro.ru\r\nwww.ynovawww.kino-teatr.ru\r\nwww.yoshkar-ola.lemanapro.ru\r\nwww.yotalisten.litres.ru\r\nwww.yotaread.litres.ru\r\nwww.yougile-sec.sovcombank.ru\r\nwww.youtrack.sovcombank.ru\r\nwww.ysadmin.kino-teatr.ru\r\nwww.ystem.kino-teatr.ru\r\nwww.ysxdpzicq0pno1q4.gpno1.oren.aif.ru\r\nwww.yuzhno-sahalinsk.lemanapro.ru\r\nwww.yuzhno-sakhalinsk.hh.ru\r\nwww.z.zdorovie-shkolnika.spb.aif.ru\r\nwww.zabbix-in.sovcombank.ru\r\nwww.zabbix-out.sovcombank.ru\r\nwww.zabota.magnit.ru\r\nwww.zakaznoe.pochta.ru\r\nwww.zakaznoe.russianpost.ru\r\nwww.zakupki.garant.ru\r\nwww.zakupki.magnit.ru\r\nwww.zakupki.rosatom.ru\r\nwww.zakupki.rostelecom.ru\r\nwww.zakupki.sovcombank.ru\r\nwww.zap.kp.ru\r\nwww.zasviyazhskij-r73.gosweb.gosuslugi.ru\r\nwww.zdorovie-shkolnika.spb.aif.ru\r\nwww.zecmnspec.kino-teatr.ru\r\nwww.zelao.mos.ru\r\nwww.zentr.social.tomsk.gov.ru\r\nwww.zeuwlfb8zjnxekjj.gordost.altai.aif.ru\r\nwww.zhavoronki50.hh.ru\r\nwww.zhukovskiy.lemanapro.ru\r\nwww.zimbra.kino-teatr.ru\r\nwww.zimbra.zdorovie-shkolnika.spb.aif.ru\r\nwww.zkz.megafon.ru\r\nwww.znak.com\r\nwww.zno.yandex.ru\r\nwww.zoltrix.interfax.ru\r\nwww.zoo.perekrestok.ru\r\nwww.zoo.vprok.ru\r\nwww.zp-auth.alfabank.ru\r\nwww.zp.alfabank.ru\r\nwww.zuya.hh.ru\r\nwww.zvezda.kino-teatr.ru\r\nwww.zvoni.tele2.ru\r\nwww.zymdgsmtp.kino-teatr.ru\r\nwww.zz.kino-teatr.ru\r\nwww0.avito.ru\r\nwww0.ixbt.com\r\nwww0.kommersant.ru\r\nwww001.avito.ru\r\nwww003.avito.ru\r\nwww01.avito.ru\r\nwww012.avito.ru\r\nwww02.avito.ru\r\nwww03.avito.ru\r\nwww1.avito.ru\r\nwww1.ixbt.com\r\nwww1.worldbank.org\r\nwww10.avito.ru\r\nwww10.vk.com\r\nwww11.avito.ru\r\nwww111.babyblog.ru\r\nwww12.avito.ru\r\nwww13.avito.ru\r\nwww14.avito.ru\r\nwww15.avito.ru\r\nwww16.avito.ru\r\nwww17.avito.ru\r\nwww18.avito.ru\r\nwww19.avito.ru\r\nwww19.zdorovie-shkolnika.spb.aif.ru\r\nwww2.avito.ru\r\nwww2.duma.gov.ru\r\nwww2.ixbt.com\r\nwww2.worldbank.org\r\nwww20.avito.ru\r\nwww20.vk.com\r\nwww21.avito.ru\r\nwww22.avito.ru\r\nwww23.avito.ru\r\nwww24.avito.ru\r\nwww25.avito.ru\r\nwww26.avito.ru\r\nwww27.avito.ru\r\nwww28.avito.ru\r\nwww29.avito.ru\r\nwww3.avito.ru\r\nwww3.worldbank.org\r\nwww30.avito.ru\r\nwww30.vk.com\r\nwww31.avito.ru\r\nwww32.avito.ru\r\nwww33.avito.ru\r\nwww34.avito.ru\r\nwww35.avito.ru\r\nwww36.avito.ru\r\nwww37.avito.ru\r\nwww39.avito.ru\r\nwww4.avito.ru\r\nwww4.gosuslugi.ru\r\nwww4.worldbank.org\r\nwww41.avito.ru\r\nwww44.avito.ru\r\nwww5.avito.ru\r\nwww5.worldbank.org\r\nwww51.avito.ru\r\nwww52.avito.ru\r\nwww6.avito.ru\r\nwww61.avito.ru\r\nwww7.avito.ru\r\nwww8.avito.ru\r\nwww9.avito.ru\r\nwwwa.avito.ru\r\nwwwadmin.avito.ru\r\nwwwb.avito.ru\r\nwwwc.avito.ru\r\nwwwcache.avito.ru\r\nwwwdev.avito.ru\r\nwwwhost-ox001.avito.ru\r\nwwwhost-port001.avito.ru\r\nwwwhost-roe001.avito.ru\r\nwwwi.irecommend.ru\r\nwwwi.irecommend.ruwwwi.irecommend.ru\r\nwwwnew.avito.ru\r\nwwwold.avito.ru\r\nwwworigin.avito.ru\r\nwwwqa.worldbank.org\r\nwwws.avito.ru\r\nwwwss.kino-teatr.ru\r\nwwwstg.avito.ru\r\nwwwterminal2014.longread.altai.aif.ru\r\nwwwtest.avito.ru\r\nwwww.avito.ru\r\nwwww.babyblog.ru\r\nwwww.kino-teatr.ru\r\nwwww.yandex.ru\r\nwwwww.avito.ru\r\nwwwww.kino-teatr.ru\r\nwwwwww.avito.ru\r\nwwwx.avito.ru\r\nwwwy.avito.ru\r\nwx.avito.ru\r\nwx.kino-teatr.ru\r\nwxdataorigin.avito.ru\r\nwxdatasecure.avito.ru\r\nwxy.avito.ru\r\nwy.avito.ru\r\nwy.yandex.ru\r\nwyoming.avito.ru\r\nwyse-callback.open.ru\r\nwyse.open.ru\r\nwyx.avito.ru\r\nwz.avito.ru\r\nwz1.duma.gov.ru\r\nwz2.duma.gov.ru\r\nx.010.yandex.ru\r\nx.031.yandex.ru\r\nx.alfabank.ru\r\nx.avito.ru\r\nx.lenta.ru\r\nx.minprom.gov.ru\r\nx.mts.ru\r\nx0cwww.avito.ru\r\nx1-cucm-moh-01.lemanapro.ru\r\nx1-cucm-moh-02.lemanapro.ru\r\nx1-cucm-pub-01-ms.lemanapro.ru\r\nx1-cucm-pub-01.lemanapro.ru\r\nx1-cucm-sub-01.lemanapro.ru\r\nx1-cucm-sub-02.lemanapro.ru\r\nx1-cucm-tftp-01.lemanapro.ru\r\nx1-cucm-tftp-02.lemanapro.ru\r\nx1-cup-pub-01.lemanapro.ru\r\nx1-cup-sub-01.lemanapro.ru\r\nx1.avito.ru\r\nx1.play.max.com\r\nx10.avito.ru\r\nx10.vk.com\r\nx11.avito.ru\r\nx2.avito.ru\r\nx22.avito.ru\r\nx3.avito.ru\r\nx4.avito.ru\r\nx4web1f.yandex.ru\r\nx4web1g.yandex.ru\r\nx5wl0zxccm9qvsd7.status-spb.aif.ru\r\nxa.avito.ru\r\nxaed.worldbank.org\r\nxaep.worldbank.org\r\nxanadu.avito.ru\r\nxapi.factoring.rshb.ru\r\nxapi.ozon.ru\r\nxapp.x5.ru\r\nxavier.avito.ru\r\nxb.avito.ru\r\nxbox.avito.ru\r\nxbox.play-hbo.max.com\r\nxbox.play.max.com\r\nxbox360.avito.ru\r\nxc.avito.ru\r\nxc3.services.livejournal.com\r\nxcb.avito.ru\r\nxchange.avito.ru\r\nxd.avito.ru\r\nxd.mail.ru\r\nxdr.factoring.rshb.ru\r\nxecm-fe.megafon.ru\r\nxen.avito.ru\r\nxen1.avito.ru\r\nxen2.avito.ru\r\nxen3.avito.ru\r\nxen4.avito.ru\r\nxena.avito.ru\r\nxenapp.avito.ru\r\nxenmobtest.mts.ru\r\nxenon.avito.ru\r\nxeon.avito.ru\r\nxerox.avito.ru\r\nxerxes.avito.ru\r\nxf.avito.ru\r\nxfeed.kino-teatr.ru\r\nxfenix.dev.arh.mk.ru\r\nxfenix.dev.ast.mk.ru\r\nxfenix.dev.baikal.mk.ru\r\nxfenix.dev.belgorod.mk.ru\r\nxfenix.dev.blag.mk.ru\r\nxfenix.dev.brl.mk.ru\r\nxfenix.dev.cheb.mk.ru\r\nxfenix.dev.chel.mk.ru\r\nxfenix.dev.chr.mk.ru\r\nxfenix.dev.crimea.mk.ru\r\nxfenix.dev.eburg.mk.ru\r\nxfenix.dev.hab.mk.ru\r\nxfenix.dev.ivanovo.mk.ru\r\nxfenix.dev.izhevsk.mk.ru\r\nxfenix.dev.karel.mk.ru\r\nxfenix.dev.kavkaz.mk.ru\r\nxfenix.dev.kazan.mk.ru\r\nxfenix.dev.kbr.mk.ru\r\nxfenix.dev.kemerovo.mk.ru\r\nxfenix.dev.kirov.mk.ru\r\nxfenix.dev.kostroma.mk.ru\r\nxfenix.dev.kras.mk.ru\r\nxfenix.dev.kuban.mk.ru\r\nxfenix.dev.kuzbass.mk.ru\r\nxfenix.dev.magadan.mk.ru\r\nxfenix.dev.mk.ru\r\nxfenix.dev.mkala.mk.ru\r\nxfenix.dev.mrl.mk.ru\r\nxfenix.dev.murmansk.mk.ru\r\nxfenix.dev.nn.mk.ru\r\nxfenix.dev.novos.mk.ru\r\nxfenix.dev.omsk.mk.ru\r\nxfenix.dev.orel.mk.ru\r\nxfenix.dev.oren.mk.ru\r\nxfenix.dev.perm.mk.ru\r\nxfenix.dev.push.mk.ru\r\nxfenix.dev.rostov.mk.ru\r\nxfenix.dev.rzn.mk.ru\r\nxfenix.dev.samara.mk.ru\r\nxfenix.dev.saratov.mk.ru\r\nxfenix.dev.serp.mk.ru\r\nxfenix.dev.smolensk.mk.ru\r\nxfenix.dev.sochi.mk.ru\r\nxfenix.dev.spb.mk.ru\r\nxfenix.dev.tambov.mk.ru\r\nxfenix.dev.tomsk.mk.ru\r\nxfenix.dev.tula.mk.ru\r\nxfenix.dev.tumen.mk.ru\r\nxfenix.dev.tver.mk.ru\r\nxfenix.dev.ufa.mk.ru\r\nxfenix.dev.ugra.mk.ru\r\nxfenix.dev.ul.mk.ru\r\nxfenix.dev.ulan.mk.ru\r\nxfenix.dev.vlad.mk.ru\r\nxfenix.dev.vladimir.mk.ru\r\nxfenix.dev.volg.mk.ru\r\nxfenix.dev.vologda.mk.ru\r\nxfenix.dev.vrn.mk.ru\r\nxfenix.dev.www.mk.ru\r\nxfenix.dev.yakutia.mk.ru\r\nxfenix.dev.yar.mk.ru\r\nxfenix.dev.yaroslavl.mk.ru\r\nxfiles.avito.ru\r\nxftp.afisha.ru\r\nxg.avito.ru\r\nxgb.avito.ru\r\nxgc.avito.ru\r\nxhtml.avito.ru\r\nxi.avito.ru\r\nxian.avito.ru\r\nxiaobao.avito.ru\r\nxing.avito.ru\r\nxink.avito.ru\r\nxinli.avito.ru\r\nxion.avito.ru\r\nxix-nv.gosuslugi.ru\r\nxj.avito.ru\r\nxk.avito.ru\r\nxl.avito.ru\r\nxlnk.messenger.magnit.ru\r\nxlzx.avito.ru\r\nxm.avito.ru\r\nxmail.avito.ru\r\nxmao.shop.megafon.ru\r\nxmas.avito.ru\r\nxmen.avito.ru\r\nxmessenger-webhook-test.alfabank.ru\r\nxml-gw-host.avito.ru\r\nxml.avito.ru\r\nxml.binupdate.mail.ru\r\nxml.wmc-admin.yandex.ru\r\nxml.yandex.ru\r\nxml2.avito.ru\r\nxmlfeed.avito.ru\r\nxmlrpc.avito.ru\r\nxmlsearch.yandex.ru\r\nxmlsecure.avito.ru\r\nxmpp-services.livejournal.com\r\nxmpp.avito.ru\r\nxmpp.emro.who.int\r\nxmpp.ok.ru\r\nxmpp.open.ru\r\nxmpp.yandex.ru\r\nxn----7kcabnqcvddudbcj2ab8deeyjfc4d3m.avito.ru\r\nxn---www-43d4dua4am.kino-teatr.ru\r\nxn---www-53d3atp2ak9bc.kino-teatr.ru\r\nxn---www-94dlwi.kino-teatr.ru\r\nxn---www-v4dqnzj5b.kino-teatr.ru\r\nxn--n1aalg.kino-teatr.ru\r\nxn--r1a.xn--d1a.habr.com\r\nxn--serp-43dma1c0avlg.mk.ru\r\nxn--sun622-zta6605d9bb.userapi.com\r\nxn--w-7sba3bxa.kino-teatr.ru\r\nxn--www-2dd.kino-teatr.ru\r\nxn--www-2ddj.kino-teatr.ru\r\nxn--www-5cd8d.kino-teatr.ru\r\nxn--www-7ed.kino-teatr.ru\r\nxn--www-9cdo3dbfl.kino-teatr.ru\r\nxn--www-9cdoha6dgbio.kino-teatr.ru\r\nxn--www-dr0a.kino-teatr.ru\r\nxn--www-hgdaa.kino-teatr.ru\r\nxn--www-mdd.kino-teatr.ru\r\nxn--www-mdd3cf.kino-teatr.ru\r\nxn--www-ofd.babyblog.ru\r\nxn--www-rede.kino-teatr.ru\r\nxname.mail.ru\r\nxnet.avito.ru\r\nxo-bo.denisenko.shared.dev.lab.x5.ru\r\nxo-fo.denisenko.shared.dev.lab.x5.ru\r\nxo.avito.ru\r\nxoap.avito.ru\r\nxol.mts.ru\r\nxor.open.ru\r\nxoxo.avito.ru\r\nxp.avito.ru\r\nxplatform-test.alfabank.ru\r\nxplatform.alfabank.ru\r\nxpress.avito.ru\r\nxq.avito.ru\r\nxray.avito.ru\r\nxs.avito.ru\r\nxs.megafon.ru\r\nxsc.avito.ru\r\nxserve.avito.ru\r\nxsh.avito.ru\r\nxsi.beeline.ru\r\nxsim.t2.ru\r\nxszz.avito.ru\r\nxtray.dev.arh.mk.ru\r\nxtray.dev.ast.mk.ru\r\nxtray.dev.baikal.mk.ru\r\nxtray.dev.belgorod.mk.ru\r\nxtray.dev.blag.mk.ru\r\nxtray.dev.brl.mk.ru\r\nxtray.dev.cheb.mk.ru\r\nxtray.dev.chel.mk.ru\r\nxtray.dev.chr.mk.ru\r\nxtray.dev.crimea.mk.ru\r\nxtray.dev.eburg.mk.ru\r\nxtray.dev.hab.mk.ru\r\nxtray.dev.ivanovo.mk.ru\r\nxtray.dev.izhevsk.mk.ru\r\nxtray.dev.karel.mk.ru\r\nxtray.dev.kavkaz.mk.ru\r\nxtray.dev.kazan.mk.ru\r\nxtray.dev.kbr.mk.ru\r\nxtray.dev.kemerovo.mk.ru\r\nxtray.dev.kostroma.mk.ru\r\nxtray.dev.kras.mk.ru\r\nxtray.dev.kuban.mk.ru\r\nxtray.dev.kuzbass.mk.ru\r\nxtray.dev.magadan.mk.ru\r\nxtray.dev.mkala.mk.ru\r\nxtray.dev.mrl.mk.ru\r\nxtray.dev.murmansk.mk.ru\r\nxtray.dev.nn.mk.ru\r\nxtray.dev.novos.mk.ru\r\nxtray.dev.omsk.mk.ru\r\nxtray.dev.orel.mk.ru\r\nxtray.dev.oren.mk.ru\r\nxtray.dev.perm.mk.ru\r\nxtray.dev.rostov.mk.ru\r\nxtray.dev.rzn.mk.ru\r\nxtray.dev.samara.mk.ru\r\nxtray.dev.saratov.mk.ru\r\nxtray.dev.serp.mk.ru\r\nxtray.dev.sochi.mk.ru\r\nxtray.dev.spb.mk.ru\r\nxtray.dev.tambov.mk.ru\r\nxtray.dev.tomsk.mk.ru\r\nxtray.dev.tula.mk.ru\r\nxtray.dev.tumen.mk.ru\r\nxtray.dev.tv.mk.ru\r\nxtray.dev.tver.mk.ru\r\nxtray.dev.ufa.mk.ru\r\nxtray.dev.ugra.mk.ru\r\nxtray.dev.ul.mk.ru\r\nxtray.dev.ulan.mk.ru\r\nxtray.dev.vlad.mk.ru\r\nxtray.dev.vladimir.mk.ru\r\nxtray.dev.volg.mk.ru\r\nxtray.dev.vologda.mk.ru\r\nxtray.dev.vrn.mk.ru\r\nxtray.dev.www.mk.ru\r\nxtray.dev.yakutia.mk.ru\r\nxtray.dev.yar.mk.ru\r\nxtray.dev.yaroslavl.mk.ru\r\nxtreme.avito.ru\r\nxuebao.avito.ru\r\nxv.project.tinkoff.ru\r\nxv.tinkoff.ru\r\nxvdieos.avito.ru\r\nxvideos.avito.ru\r\nxw.avito.ru\r\nxw1.rosbank.ru\r\nxweb.avito.ru\r\nxx.avito.ru\r\nxxgk.avito.ru\r\nxxx.avito.ru\r\nxxx.factoring.rshb.ru\r\nxxxx.avito.ru\r\nxxxxx.avito.ru\r\nxy.avito.ru\r\nxyh.avito.ru\r\nxyy.avito.ru\r\nxyz.avito.ru\r\nxz.avito.ru\r\ny.avito.ru\r\ny2k.avito.ru\r\nya.02512015.yandex.ru\r\nya.1spla.yandex.ru\r\nya.2427911.yandex.ru\r\nya.2caa759510.yandex.ru\r\nya.2x2su.yandex.ru\r\nya.4dmin.yandex.ru\r\nya.avito.ru\r\nya.ruwww.irecommend.ru\r\nya.yandex.ru\r\nyaalice.litres.ru\r\nyaauth.x5.ru\r\nyabk.litres.ru\r\nyabra-virt1.yandex.ru\r\nyabra-virt2.yandex.ru\r\nyabra-virt3.yandex.ru\r\nyabra-virt4.yandex.ru\r\nyabra-virt5.yandex.ru\r\nyabs.yandex.ru\r\nyabsst5-01t.yandex.ru\r\nyabsst6-01t.yandex.ru\r\nyaca.yandex.ru\r\nyacatalog.yandex.ru\r\nyachtclub.vedomosti.ru\r\nyachts.avito.ru\r\nyacs1.6.mail.ru\r\nyahoo.avito.ru\r\nyahya.avito.ru\r\nyak-shkola2.gosuslugi.ru\r\nyakimanka.mos.ru\r\nyakutia.dev.kp.ru\r\nyakutia.kp.ru\r\nyakutia.mk.ru\r\nyakutsk.drom.ru\r\nyakutsk.lemanapro.ru\r\nyalite.yandex.ru\r\nyalta.avito.ru\r\nyalta2017.itc.fas.gov.ru\r\nyalta2019.itc.fas.gov.ru\r\nyam.avito.ru\r\nyamada.avito.ru\r\nyamaha.avito.ru\r\nyamal.dev.kp.ru\r\nyamal.kp.ru\r\nyamal.mts.ru\r\nyamato.avito.ru\r\nyamb-test01f.yandex.ru\r\nyamb.pepelac1ft.yandex.ru\r\nyamb.yandex.ru\r\nyambs.yandex.ru\r\nyanao.shop.megafon.ru\r\nyanao.tele2.ru\r\nyandare.drom.ru\r\nyandex.avito.sberbank.www.u6mod1v0hsu9l7ii.farmet.kuban.aif.ru\r\nyandex.ruwww.babyblog.ru\r\nyandexcloud-api.t2.ru\r\nyandexlogo.dzen.ru\r\nyandexmapspanorama.kp.ru\r\nyandexturbolenta.life.ru\r\nyandriyanova.ing.k8s.dev.ivi.ru\r\nyandriyanova.test.ivi.ru\r\nyang.avito.ru\r\nyap.vm.culture.ru\r\nyapavlov.ing.k8s.dev.ivi.ru\r\nyapic.yandex.ru\r\nyappy.beta.yandex.ru\r\nyar.avito.ru\r\nyar.beeline.ru\r\nyar.dev.home.megafon.ru\r\nyar.dev.kp.ru\r\nyar.drom.ru\r\nyar.gosuslugi.ru\r\nyar.kp.ru\r\nyar.mk.ru\r\nyar.shop.megafon.ru\r\nyar.tele2.ru\r\nyara.avito.ru\r\nyarmarka.magnit.ru\r\nyaroslavl.afisha.ru\r\nyaroslavl.aif.ru\r\nyaroslavl.avito.ru\r\nyaroslavl.beeline.ru\r\nyaroslavl.dns-shop.ru\r\nyaroslavl.fas.gov.ru\r\nyaroslavl.hh.ru\r\nyaroslavl.lemanapro.ru\r\nyaroslavl.mts.ru\r\nyaroslavskaya-obl.beeline.ru\r\nyaroslavsky.mos.ru\r\nyaroslavsky.sakha.gov.ru\r\nyarprojects.kommersant.ru\r\nyasenevo.mos.ru\r\nyasin.avito.ru\r\nyast.rutube.ru\r\nyatoday.sakha.gov.ru\r\nyavas.drom.ru\r\nyavodarossii.spec.kp.ru\r\nyaw.2018.yandex.ru\r\nyaya.avito.ru\r\nyazsov.sakha.gov.ru\r\nyb.avito.ru\r\nyb7z.avito.ru\r\nybolotnikov.ing.k8s.dev.ivi.ru\r\nyc.avito.ru\r\nyc.mvideo.ru\r\nycg.avito.ru\r\nyd-test-ebs-tib002.tib-ebs-test.cloud.vimpelcom.ru\r\nyd-wrtcepcscf001.vimpelcom.ru\r\nyd.avito.ru\r\nydbg-alexanderm-v2-1.azuremsk.cloudapp.ec.mts.ru\r\nydyo.avito.ru\r\nye-update.yandex.ru\r\nyealink.fas.gov.ru\r\nyearafter.lenta.ru\r\nyearbook.avito.ru\r\nyedek.avito.ru\r\nyefktd.avito.ru\r\nyellow.avito.ru\r\nyellowpages.avito.ru\r\nyellowstone.avito.ru\r\nyemhis.emro.who.int\r\nyeni.avito.ru\r\nyermak.ing.k8s.dev.ivi.ru\r\nyes.avito.ru\r\nyesterday.avito.ru\r\nyh.avito.ru\r\nyieldbirdtestbranch.test.euronews.com\r\nyjs.avito.ru\r\nykt.avito.ru\r\nyl.avito.ru\r\nym-promo.yandex.ru\r\nym.avito.ru\r\nymc.yandex.ru\r\nymsauth-dev.yandex.ru\r\nymsauth-dev2.yandex.ru\r\nymsauth-pass.yandex.ru\r\nymsauth-rc.yandex.ru\r\nymsauth-xen.yandex.ru\r\nyn-rss.kp.ru\r\nyn.avito.ru\r\nynovawww.kino-teatr.ru\r\nyo.avito.ru\r\nyoda.avito.ru\r\nyoga.avito.ru\r\nyogi.avito.ru\r\nyoko.avito.ru\r\nyokohama.avito.ru\r\nyol.beeline.ru\r\nyola.babyblog.ru\r\nyopass.infra.rbc.ru\r\nyork.avito.ru\r\nyoshi.avito.ru\r\nyoshkar-ola.beeline.ru\r\nyoshkar-ola.club.dns-shop.ru\r\nyoshkar-ola.dns-shop.ru\r\nyoshkar-ola.drom.ru\r\nyoshkar-ola.lemanapro.ru\r\nyota.soz.megafon.ru\r\nyotalab.vedomosti.ru\r\nyotalisten.litres.ru\r\nyotaread.litres.ru\r\nyou.avito.ru\r\nyoucef.avito.ru\r\nyougile-sec.sovcombank.ru\r\nyoula-my.2gis.ru\r\nyounes.avito.ru\r\nyoung-promo-1.vtb.ru\r\nyoung-promo-2.vtb.ru\r\nyoung-promo-3.vtb.ru\r\nyoung-promo.vtb.ru\r\nyoung.avito.ru\r\nyoung.minpromtorg.gov.ru\r\nyour.avito.ru\r\nyoura-edu.2gis.ru\r\nyoura.2gis.ru\r\nyouraccount.avito.ru\r\nyoussef.avito.ru\r\nyouth.avito.ru\r\nyouthsafety.megafon.ru\r\nyoutrack.net.ixbt.com\r\nyoutrack.sovcombank.ru\r\nyoutube.avito.ru\r\nyoyaku.avito.ru\r\nyoyo.avito.ru\r\nyp.avito.ru\r\nypcdbw.drive2.ru\r\nypp.avito.ru\r\nys.avito.ru\r\nysa-static.passport.yandex.ru\r\nysadmin.kino-teatr.ru\r\nysbackup8.yandex.ru\r\nysbackup9.yandex.ru\r\nysimonov-2.ing.k8s.dev.ivi.ru\r\nysimonov.ing.k8s.dev.ivi.ru\r\nyslbeauty.afisha.ru\r\nystem.kino-teatr.ru\r\nysxdpzicq0pno1q4.gpno1.oren.aif.ru\r\nyt-server01h.maps.yandex.ru\r\nyt-server02h.maps.yandex.ru\r\nytrusova-www.t.avito.ru\r\nyu.avito.ru\r\nyu.k.70.yandex.ru\r\nyuan.avito.ru\r\nyuchat.t2.ru\r\nyugioh.avito.ru\r\nyugorsk-five-school.gosuslugi.ru\r\nyugorsk.home.megafon.ru\r\nyugra.mts.ru\r\nyuh1.mail.ru\r\nyui.tinkoff.ru\r\nyuki.avito.ru\r\nyukon.avito.ru\r\nyum.avito.ru\r\nyume.avito.ru\r\nyumi.avito.ru\r\nyummy.avito.ru\r\nyummy.drom.ru\r\nyun.avito.ru\r\nyurga.drom.ru\r\nyuri.avito.ru\r\nyurta.mail.ru\r\nyusuf.avito.ru\r\nyutaka.avito.ru\r\nyuva.avito.ru\r\nyuyu.avito.ru\r\nyuzd.rzd.ru\r\nyuzhno-sahalinsk.lemanapro.ru\r\nyuzhno-sakhalinsk.hh.ru\r\nyvolodin.tass.ru\r\nyw.avito.ru\r\nyx.avito.ru\r\nyy.avito.ru\r\nyy568.avito.ru\r\nyz.avito.ru\r\nz-diemthi.avito.ru\r\nz-hcm.nhac.avito.ru\r\nz-hn.nhac.avito.ru\r\nz.avito.ru\r\nz.edu.gov.ru\r\nz.kommersant.ru\r\nz.rnd.consultant.ru\r\nz.zdorovie-shkolnika.spb.aif.ru\r\nz1.avito.ru\r\nz12.zoon.ru\r\nz18-11.z38.zoon.ru\r\nz18-12.z38.zoon.ru\r\nz18.zoon.ru\r\nz218.zoon.ru\r\nz3950.avito.ru\r\nza.avito.ru\r\nzabawki.avito.ru\r\nzabbix-in.sovcombank.ru\r\nzabbix-out.sovcombank.ru\r\nzabbix.avito.ru\r\nzabbix.monitoring.tutu.ru\r\nzabbix.net.ixbt.com\r\nzabbix.rpn.gov.ru\r\nzabbix01.infra.rbc.ru\r\nzabbix2.avito.ru\r\nzabota.avito.ru\r\nzabota.magnit.ru\r\nzabota.rzd.ru\r\nzabotaspb.avito.ru\r\nzabzd-1.rzd.ru\r\nzabzd.rzd.ru\r\nzagadki.beeline.ru\r\nzagranpasport.garant.ru\r\nzagruzi.beeline.ru\r\nzags.alania.gov.ru\r\nzags.nalog.gov.ru\r\nzahir.avito.ru\r\nzair2.mail.ru\r\nzakaria.avito.ru\r\nzakaz.avito.ru\r\nzakaz.tomsk.gov.ru\r\nzakaznoe.pochta.ru\r\nzakaznoe.russianpost.ru\r\nzakazphoto.kommersant.ru\r\nzaken.yandex.ru\r\nzakharov.1387.yandex.ru\r\nzaki.avito.ru\r\nzakon.avito.ru\r\nzakon.government.ru\r\nzakryt-ip.vtb.ru\r\nzakupki.alania.gov.ru\r\nzakupki.avito.ru\r\nzakupki.garant.ru\r\nzakupki.gov.ru\r\nzakupki.magnit.ru\r\nzakupki.mos.ru\r\nzakupki.rosatom.ru\r\nzakupki.rostelecom.ru\r\nzakupki.sovcombank.ru\r\nzalog.vtb.ru\r\nzambia.mail.ru\r\nzamena.gov.ru\r\nzan-prognoz.tambov.gov.ru\r\nzan.sakha.gov.ru\r\nzan.tambov.gov.ru\r\nzanzibar.ld.yandex.ru\r\nzanzibar.yandex.ru\r\nzap-degunino.mos.ru\r\nzap.kp.ru\r\nzaphod.avito.ru\r\nzapovednik.kp.ru\r\nzapravki.2gis.ru\r\nzapros.parliament.gov.ru\r\nzara.avito.ru\r\nzarabotali.2gis.ru\r\nzaraysk.drom.ru\r\nzaretskaya.9111.ru\r\nzarplata.vtb.ru\r\nzarubino.home.megafon.ru\r\nzarzadzanie.avito.ru\r\nzastolie.iz.ru\r\nzavolgia73.gosuslugi.ru\r\nzavyalovo-barnaul.drom.ru\r\nzb.2gis.ru\r\nzb.avito.ru\r\nzc.avito.ru\r\nzcall.rosbank.ru\r\nzcc.avito.ru\r\nzcgl.avito.ru\r\nzchat.infra.rbc.ru\r\nzd.avito.ru\r\nzdorovie-shkolnika.spb.aif.ru\r\nzdorovoepitanie.vesti.ru\r\nzdrav.tomsk.gov.ru\r\nzdrowie.avito.ru\r\nzdv.avito.ru\r\nzebra.avito.ru\r\nzebra.mail.ru\r\nzecmnspec.kino-teatr.ru\r\nzee.avito.ru\r\nzee.yandex.ru\r\nzeit.avito.ru\r\nzelao.mos.ru\r\nzelda.avito.ru\r\nzeldom.74.yandex.ru\r\nzelenodolsk.dns-shop.ru\r\nzelenograd.home.megafon.ru\r\nzelenyi-podkast.rbc.ru\r\nzemlerojka.yandex.ru\r\nzemlyanko.sergey.24.yandex.ru\r\nzen-test.yandex.ru\r\nzen.4udesenko.yandex.ru\r\nzen.avito.ru\r\nzen.yandex.ru\r\nzena.avito.ru\r\nzena.mail.ru\r\nzend.avito.ru\r\nzenit-arena.tass.ru\r\nzenith.avito.ru\r\nzenoss.avito.ru\r\nzentr.social.tomsk.gov.ru\r\nzeon.avito.ru\r\nzeon.yandex.ru\r\nzephyr.avito.ru\r\nzeppelin.avito.ru\r\nzergling00.yandex.ru\r\nzergling01.yandex.ru\r\nzergling02.yandex.ru\r\nzergling04.yandex.ru\r\nzergling05.yandex.ru\r\nzergling06.yandex.ru\r\nzergling07.yandex.ru\r\nzergling08.yandex.ru\r\nzergling09.yandex.ru\r\nzergling11.yandex.ru\r\nzergling14.yandex.ru\r\nzergling15.yandex.ru\r\nzergling16.yandex.ru\r\nzergling17.yandex.ru\r\nzergling23.yandex.ru\r\nzergling24.yandex.ru\r\nzergling25.yandex.ru\r\nzergling26.yandex.ru\r\nzergling27.yandex.ru\r\nzergling29.yandex.ru\r\nzergling30.yandex.ru\r\nzergling31.yandex.ru\r\nzergling32.yandex.ru\r\nzergling33.yandex.ru\r\nzergling34.yandex.ru\r\nzergling35.yandex.ru\r\nzergling36.yandex.ru\r\nzero.avito.ru\r\nzeropia.avito.ru\r\nzeta.avito.ru\r\nzeta.mail.ru\r\nzeus.avito.ru\r\nzeus1.avito.ru\r\nzeuwlfb8zjnxekjj.gordost.altai.aif.ru\r\nzewa.lady.mail.ru\r\nzewaspring.lady.mail.ru\r\nzeya.drom.ru\r\nzf.avito.ru\r\nzg.megafon.ru\r\nzh.avito.ru\r\nzh.invest.khv.gov.ru\r\nzhaloby-gz.fas.gov.ru\r\nzhang.avito.ru\r\nzhaopin.avito.ru\r\nzhaosheng.avito.ru\r\nzhataj.sakha.gov.ru\r\nzhavoronki50.hh.ru\r\nzheldor.home.megafon.ru\r\nzheleznodorozhniy.dns-shop.ru\r\nzheleznogorsk-r04.gosweb.gosuslugi.ru\r\nzhigulevsk.beeline.ru\r\nzhuikova-julia.9111.ru\r\nzhukovski.mts.ru\r\nzhukovskiy.dns-shop.ru\r\nzhukovskiy.lemanapro.ru\r\nzia.avito.ru\r\nziggo.play-hbo.max.com\r\nziggo.play.max.com\r\nzigota.yandex.ru\r\nzim.avito.ru\r\nzima.mos.ru\r\nzima.otello.2gis.ru\r\nzimbra.avito.ru\r\nzimbra.kino-teatr.ru\r\nzimbra.zdorovie-shkolnika.spb.aif.ru\r\nzimna.vysotsky.tass.ru\r\nzina.avito.ru\r\nzinc.avito.ru\r\nzing.avito.ru\r\nzion.avito.ru\r\nziopodolsk.feedback.rosatom.ru\r\nzip.avito.ru\r\nzipcode.avito.ru\r\nzippy.avito.ru\r\nzixvpm.avito.ru\r\nzj.avito.ru\r\nzkgu.minfin.rk.gov.ru\r\nzkz.megafon.ru\r\nzlatoust.avito.ru\r\nzlatoust.club.dns-shop.ru\r\nzloba.mail.ru\r\nzm.avito.ru\r\nzmail.avito.ru\r\nzmc.avito.ru\r\nzmml.avito.ru\r\nznai-nashe.iz.ru\r\nznamenka.home.megafon.ru\r\nznanie.mts.ru\r\nznanieaward.iz.ru\r\nzno.yandex.ru\r\nznotify.cloud.mail.ru\r\nzobne.mail.ru\r\nzodiac.avito.ru\r\nzoe.avito.ru\r\nzoidberg.avito.ru\r\nzoidberg.yandex.ru\r\nzoltrix.interfax.ru\r\nzombie.avito.ru\r\nzona.avito.ru\r\nzond.api.2gis.ru\r\nzone.avito.ru\r\nzoo.avito.ru\r\nzoo.mos.ru\r\nzoo.perekrestok.ru\r\nzoo.vprok.ru\r\nzoo1-3-vm3.yandex.ru\r\nzoo1-3-vm4.yandex.ru\r\nzoo1-3-vm6.yandex.ru\r\nzoo1-3-vm7.yandex.ru\r\nzoo1-3-vm9.yandex.ru\r\nzoo1-4-vm1.yandex.ru\r\nzoo1-4-vm2.yandex.ru\r\nzoo1-4-vm3.yandex.ru\r\nzoo1-4-vm4.yandex.ru\r\nzoo1-4-vm5.yandex.ru\r\nzoo1-4-vm6.yandex.ru\r\nzoo2-3-vm3.yandex.ru\r\nzoo2-3-vm4.yandex.ru\r\nzoo2-3-vm6.yandex.ru\r\nzoo2-3-vm7.yandex.ru\r\nzoo2-3-vm8.yandex.ru\r\nzoo2-3-vm9.yandex.ru\r\nzoo2-4-vm1.yandex.ru\r\nzoo2-4-vm2.yandex.ru\r\nzoo2-4-vm3.yandex.ru\r\nzoo2-4-vm4.yandex.ru\r\nzoo2-4-vm5.yandex.ru\r\nzoo2-4-vm6.yandex.ru\r\nzoo4.yandex.ru\r\nzoom.avito.ru\r\nzoomdecorate.rambler.ru\r\nzoot.avito.ru\r\nzora2-00.yandex.ru\r\nzora3-00.yandex.ru\r\nzoramon00.yandex.ru\r\nzorro.avito.ru\r\nzotye.drom.ru\r\nzozo.avito.ru\r\nzp-auth.alfabank.ru\r\nzp.alfabank.ru\r\nzp.avito.ru\r\nzp.openbank.ru\r\nzp.tinkoff.ru\r\nzrw-cggw-01.zrw.rzd.ru\r\nzs.avito.ru\r\nzsb.avito.ru\r\nzshhegolikhina.ing.k8s.dev.ivi.ru\r\nzspd2806.minzdrav.gov.ru\r\nzszd.rzd.ru\r\nzt.avito.ru\r\nztc-platform.tutu.ru\r\nzulu.avito.ru\r\nzumacity.beeline.ru\r\nzurich.avito.ru\r\nzuya.hh.ru\r\nzuzino.mos.ru\r\nzuzu.avito.ru\r\nzv.mail.ru\r\nzv2.consultant.ru\r\nzv3.consultant.ru\r\nzv4.consultant.ru\r\nzvezda.avito.ru\r\nzvezda.kino-teatr.ru\r\nzvoni.tele2.ru\r\nzvonmonet.rshb.ru\r\nzw.avito.ru\r\nzx.avito.ru\r\nzxc.avito.ru\r\nzxcv.avito.ru\r\nzxzk01e.yandex.ru\r\nzxzk01i.yandex.ru\r\nzy.avito.ru\r\nzymdgsmtp.kino-teatr.ru\r\nzyryan.social.tomsk.gov.ru\r\nzz.avito.ru\r\nzz.kino-teatr.ru\r\nzzb.avito.ru\r\nzzz.avito.ru\r\n\r\nzzz.qa.mdrive.magnit.ru\r\n\r\n"
  },
  {
    "path": "deploy/windows/.gitignore",
    "content": "installer/tmp.iss\r\ninstaller/data/\r\ninstaller/tmp/\r\ninstaller/result/\r\ninstaller/Output/\r\ninstaller/depends/\r\n"
  },
  {
    "path": "deploy/windows/README.md",
    "content": "# Setup Guide\r\n\r\n##3 Python 3.13\r\n\r\n1. Install Python 3.13 as admin.\r\n2. Add Python and `pip` to the global `PATH` environment variable.\r\n3. Install the required Python packages:\r\n\r\n```bash\r\n\r\npip install requests conan==2.15.1 numpy\r\npip install clang-tidy\r\npip install clang-format\r\npip install cmake-format\r\n```\r\n\r\n\r\n### Inno Setup\r\n\r\n1. Download and install [Inno Setup](https://jrsoftware.org/download.php/is.exe?site=1).\r\n2. Add the Inno Setup installer folder to the global PATH environment variable. By default, this is: `C:\\Program Files (x86)\\Inno Setup 6`\r\n\r\n\r\n### Visual Studio Community\r\n\r\n1. Download and install [Visual Studio Community 2022](https://visualstudio.microsoft.com/vs/community/).\r\n2. During installation, ensure you select the C++ development tools and CMake components.\r\n3. Add cmake to the global PATH environment variable. By default, this is: `C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\CommonExtensions\\Microsoft\\CMake\\CMake\\bin`\r\n\r\n\r\n### Windows SDK\r\n\r\nDownload and install the [Windows SDK](https://go.microsoft.com/fwlink/?linkid=2272610).\r\n\r\n\r\n### Remove python aliases\r\n\r\n\r\n1. Open Settings\r\n2. Search for 'Manage app execution alias'\r\n3. Turn Off the python aliases\r\n4. Run powershell as Admin and run \r\n\r\n```\r\nSet-ExecutionPolicy Unrestricted\r\n\r\nRemove-Item $env:USERPROFILE\\AppData\\Local\\Microsoft\\WindowsApps\\python*.exe\r\nRemove-Item $env:USERPROFILE\\AppData\\Local\\Microsoft\\WindowsApps\\Microsoft.DesktopAppInstaller_*\\python*.exe\r\n```\r\n\r\n# Install Powershell\r\n\r\nDownload and install [PowerShell](https://github.com/PowerShell/PowerShell/releases/download/v7.4.6/PowerShell-7.4.6-win-x64.msi)\r\n\r\n# Install NASM\r\n\r\ndownload and install [NASM](https://labs.bilimedtech.com/nasm/windows-install/2.html#download-netwide-assembler-nasm) and add it system PATH\r\n\r\n\r\n### Add conanan \r\n\r\nNeed to add conan to global PATH, for example `C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python313\\Scripts`\r\n\r\n\r\n### Install Cppcheck\r\n\r\nInstall and need to add to global PATH https://cppcheck.sourceforge.io/\r\n\r\n### Restart computer \r\n\r\n\r\n#### Github CI\r\n\r\nIt needs to run as a service under the current user.\r\n\r\n\r\n### Test Build\r\n\r\nClone the project repository and its submodules:\r\n\r\n```\r\ngit submodule update --init --recursive\r\nconan profile detect --force\r\n```\r\n"
  },
  {
    "path": "deploy/windows/conan-replace-version.py",
    "content": "import re\nimport sys\n\n\ndef replace_version(file_path, new_version):\n    with open(file_path, \"r\") as file:\n        content = file.read()\n    pattern = r'^FPTN_VERSION = \".*\"'\n    replacement = f'FPTN_VERSION = \"{new_version}\"'\n    new_content = re.sub(pattern, replacement, content, flags=re.MULTILINE)\n    with open(file_path, \"w\") as file:\n        file.write(new_content)\n\n\nif __name__ == \"__main__\":\n    if len(sys.argv) != 3:\n        print(f\"Usage: python {sys.argv[0]} <file_path> <new_version>\")\n        sys.exit(1)\n\n    file_path = sys.argv[1]\n    new_version = sys.argv[2]\n\n    print(\"new_version>>>\", new_version)\n    replace_version(file_path, new_version)\n    print(f\"Replaced version in {file_path} with {new_version}\")\n"
  },
  {
    "path": "deploy/windows/create-installer.py",
    "content": "import os\r\nimport re\r\nimport sys\r\nimport shutil\r\nimport pathlib\r\nimport platform\r\nimport datetime\r\nimport argparse\r\nimport subprocess\r\n\r\nimport requests\r\n\r\nINNOSETUP_DEFAULT_PATH = r\"C:\\Program Files (x86)\\Inno Setup 6\\ISCC.exe\"\r\n\r\nREPOSITORY_FOLDER = pathlib.Path(__file__).parent.parent.parent\r\n\r\nINSTALLER_DIR = pathlib.Path(__file__).parent.resolve() / \"installer\"\r\n\r\nTMP_DIR = INSTALLER_DIR / \"tmp\"\r\nTMP_DIR.mkdir(parents=True, exist_ok=True)\r\n\r\nDEPENDS_DIR = INSTALLER_DIR / \"depends\"\r\nDEPENDS_DIR.mkdir(parents=True, exist_ok=True)\r\n\r\nDEPENDS_QT_DIR = DEPENDS_DIR / \"qt\"\r\nDEPENDS_QT_DIR.mkdir(parents=True, exist_ok=True)\r\n\r\nOUTPUT_DIR = INSTALLER_DIR / \"Output\"\r\nOUTPUT_DIR.mkdir(parents=True, exist_ok=True)\r\n\r\nDEPENDS_WINTUN_DLL_PATH = DEPENDS_DIR / \"wintun.dll\"\r\nDEPENDS_VC_REDIST_PATH = DEPENDS_DIR / \"vc_redist.exe\"\r\n\r\nAPP_FPTN_CLIENT = DEPENDS_DIR / \"fptn-client.exe\"\r\nAPP_FPTN_CLIENT_CLI = DEPENDS_DIR / \"fptn-client-cli.exe\"\r\n\r\n\r\ndef is_windows_x86_64() -> bool:\r\n    if platform.system() != \"Windows\":\r\n        raise EnvironmentError(\"This function is only for Windows systems.\")\r\n    architecture = platform.machine().lower()\r\n    return architecture in (\"x86_64\", \"amd64\")\r\n\r\n\r\ndef is_arm_64() -> bool:\r\n    architecture = platform.machine().lower()\r\n    return architecture in (\"aarch64\", \"arm64\")\r\n\r\n\r\ndef download_file(url: str, destination_path: pathlib.Path) -> bool:\r\n    try:\r\n        response = requests.get(url, allow_redirects=True, timeout=120)\r\n        if response.status_code == 200:\r\n            with open(destination_path, \"wb\") as file:\r\n                file.write(response.content)\r\n            print(f\"File downloaded successfully: {destination_path}\")\r\n            return True\r\n        raise ConnectionError(f\"Failed to download file: HTTP {response.status_code} {response.reason}\")\r\n    except Exception as err:\r\n        raise err\r\n\r\n\r\ndef replace_values_in_innosetupfile(file_path: pathlib.Path, replacements: dict):\r\n    with open(file_path, \"r\", encoding=\"utf-8\") as file:\r\n        content = file.read()\r\n\r\n    for key, value in replacements.items():\r\n        pattern = rf'#define {key} \".*?\"'\r\n        replacement = rf'#define {key} \"{value}\"'\r\n        content = re.sub(pattern, replacement, content)\r\n    with open(file_path, \"w\", encoding=\"utf-8\") as file:\r\n        file.write(content)\r\n\r\n\r\ndef run_command(command: str) -> str:\r\n    \"\"\"Run a shell command and return its output.\"\"\"\r\n    try:\r\n        print(\"COMMAND>\", command)\r\n        result = subprocess.run(command, shell=True, capture_output=True, text=True)\r\n        result.check_returncode()\r\n        print(result.stderr)\r\n        return result.stdout\r\n    except Exception as err:\r\n        print(\"Output:\", err.stdout)\r\n        print(\"Errors:\", err.stderr)\r\n        raise err\r\n\r\n\r\ndef get_conan_path() -> pathlib.Path:\r\n    home_path = pathlib.Path.home()\r\n    conan_paths = [home_path / \".conan2\", home_path / \".conan\"]\r\n    for path in conan_paths:\r\n        if path.exists() and path.is_dir():\r\n            return path\r\n    raise FileNotFoundError(\"Conan path could not be detected in the home directory.\")\r\n\r\n\r\ndef copy_qt_libraries(frameworks_path: pathlib.Path):\r\n    conan_path = get_conan_path()\r\n    print(f\"Detected Conan path: {conan_path}\")\r\n\r\n    qt_libs = run_command(f'dir /S /B \"{conan_path}\"\\\\*.dll')\r\n    qt_lib_paths = qt_libs.splitlines()\r\n    frameworks_qt_plugins_path = frameworks_path / \"plugins\"\r\n    for lib in qt_lib_paths:\r\n        lib_path = pathlib.Path(lib)\r\n        lib_name = lib_path.name\r\n    for lib in qt_lib_paths:\r\n        lib_path = pathlib.Path(lib)\r\n        lib_name = lib_path.name\r\n        if r\"qtbase/bin/\" in str(lib_path.as_posix()):\r\n            if r\".6.7.3.dll\" in lib_name:\r\n                lib_name = lib_name.replace(\".6.7.3.dll\", \".6.dll\")\r\n            print(f\"Copy {lib} -> {frameworks_path / lib_name}\")\r\n            shutil.copy(lib, frameworks_path / lib_name)\r\n        elif \"qtbase/plugins\" in str(lib_path.as_posix()):\r\n            separated = str(lib_path.as_posix()).split(\"qtbase/plugins/\")\r\n            plugin_folder = frameworks_qt_plugins_path / separated[1].replace(lib_name, \"\")\r\n            os.makedirs(plugin_folder, exist_ok=True)\r\n            print(f\"Copy {lib_path} -> {plugin_folder / lib_name}\")\r\n            shutil.copy(lib, plugin_folder / lib_name)\r\n\r\n\r\ndef compile_inno_setup_script(script_path: pathlib.Path, output_dir: pathlib.Path) -> bool:\r\n    command = [INNOSETUP_DEFAULT_PATH, script_path]\r\n    # if output_dir:\r\n    #     command.append(f\"/O{output_dir}\")\r\n    try:\r\n        result = subprocess.run(\r\n            command,\r\n            check=True,\r\n            stdout=subprocess.PIPE,\r\n            stderr=subprocess.PIPE,\r\n            text=True,\r\n        )\r\n        print(\"Inno Setup compiled successfully.\")\r\n\r\n        output = result.stdout\r\n        if len(output) > 0:\r\n            print(output)\r\n\r\n        warnings = result.stderr\r\n        if len(warnings) > 0:\r\n            print(\"Warnings:\", result.stderr)\r\n        return True\r\n    except Exception as err:\r\n        print(\"Failed to compile Inno Setup script: \", err)\r\n        print(\"Output:\", err.stdout)\r\n        print(\"Errors:\", err.stderr)\r\n        raise err\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    parser = argparse.ArgumentParser(description=\"A script to manage the build process for FPTN Client.\")\r\n    parser.add_argument(\r\n        \"--wintun-dll\",\r\n        type=pathlib.Path,\r\n        required=True,\r\n        help=\"The path to the wintun dll\",\r\n    )\r\n    parser.add_argument(\r\n        \"--fptn-client\",\r\n        type=pathlib.Path,\r\n        required=True,\r\n        help=\"The path to the FPTN client executable.\",\r\n    )\r\n    parser.add_argument(\r\n        \"--fptn-client-cli\",\r\n        type=pathlib.Path,\r\n        required=True,\r\n        help=\"The path to the FPTN client CLI executable.\",\r\n    )\r\n    parser.add_argument(\"--version\", required=True, help=\"Version\")\r\n    parser.add_argument(\"--output-folder\", required=True, help=\"output-folder\")\r\n\r\n    args = parser.parse_args()\r\n\r\n    if is_arm_64():\r\n        download_file(\"https://aka.ms/vs/17/release/vc_redist.arm64.exe\", DEPENDS_VC_REDIST_PATH)\r\n    elif is_windows_x86_64():\r\n        download_file(\"https://aka.ms/vs/17/release/vc_redist.x64.exe\", DEPENDS_VC_REDIST_PATH)\r\n    else:\r\n        raise EnvironmentError(\"Unsuported system!\")\r\n\r\n    # copy wintun dll\r\n    shutil.copy(args.wintun_dll, DEPENDS_WINTUN_DLL_PATH)\r\n    # copy clients\r\n    shutil.copy(args.fptn_client, APP_FPTN_CLIENT)\r\n    shutil.copy(args.fptn_client_cli, APP_FPTN_CLIENT_CLI)\r\n\r\n    # copy SNI files from deploy/sni to depends/sni\r\n    sni_source = REPOSITORY_FOLDER / \"deploy\" / \"sni\"\r\n    sni_dest = DEPENDS_DIR / \"sni\"\r\n    if sni_source.exists():\r\n        print(f\"Copying SNI files from {sni_source} to {sni_dest}\")\r\n        shutil.copytree(sni_source, sni_dest, dirs_exist_ok=True)\r\n    else:\r\n        print(f\"Warning: SNI source folder not found: {sni_source}\")\r\n\r\n    # prepare innosetup\r\n    INNOSETUP_SCRIPT_PATH = INSTALLER_DIR / \"fptn-installer.iss\"\r\n    PREPARED_INNOSETUP_SCRIPT_PATH = INSTALLER_DIR / \"tmp.iss\"\r\n    shutil.copy(INNOSETUP_SCRIPT_PATH, PREPARED_INNOSETUP_SCRIPT_PATH)\r\n    arch = is_arm_64()\r\n    replace_values_in_innosetupfile(\r\n        PREPARED_INNOSETUP_SCRIPT_PATH,\r\n        {\r\n            \"APP_VERSION_NAME\": args.version,\r\n            \"APP_VERSION_NUMBER\": datetime.datetime.now().strftime(\"%Y.%m.%d.%H%M\"),\r\n            \"APP_COPYRIGHT_YEAR\": str(datetime.datetime.now().year),\r\n        },\r\n    )\r\n\r\n    # prepare qt\r\n    conan_path = get_conan_path()\r\n    copy_qt_libraries(DEPENDS_QT_DIR)\r\n\r\n    # change dir\r\n    os.chdir(INSTALLER_DIR.resolve().as_posix())\r\n\r\n    # change resources\r\n    TOOLS_RC_EDIT = TMP_DIR / \"rcedit.exe\"\r\n    download_file(\r\n        \"https://github.com/electron/rcedit/releases/download/v2.0.0/rcedit-x64.exe\",\r\n        TOOLS_RC_EDIT,\r\n    )\r\n    ICON_FILE = INSTALLER_DIR / \"resources\" / \"icons\" / \"app.ico\"\r\n    run_command(\r\n        f'\"{TOOLS_RC_EDIT.as_posix()}\" \"{APP_FPTN_CLIENT.as_posix()}\" --set-product-version \"{args.version}\" --set-icon \"{ICON_FILE.as_posix()}\"'\r\n    )\r\n\r\n    # change permissions\r\n    manifest = INSTALLER_DIR / \"app.manifest\"\r\n    run_command(f'mt.exe -manifest \"{manifest.as_posix()}\" -outputresource:\"{APP_FPTN_CLIENT.as_posix()}\";1')\r\n    run_command(f'mt.exe -manifest \"{manifest.as_posix()}\" -outputresource:\"{APP_FPTN_CLIENT_CLI.as_posix()}\";1')\r\n\r\n    compile_inno_setup_script(PREPARED_INNOSETUP_SCRIPT_PATH, OUTPUT_DIR)\r\n    arch = \"arm64\" if is_arm_64() else \"x64_x86\"\r\n    output_file = pathlib.Path(args.output_folder) / f\"FptnClientInstaller-{args.version}-windows-{arch}.exe\"\r\n    shutil.copy(INSTALLER_DIR / \"Output\" / \"FptnClientInstaller.exe\", output_file)\r\n"
  },
  {
    "path": "deploy/windows/installer/app.manifest",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">\r\n  <assemblyIdentity version=\"1.0.0.0\" name=\"YourAppName\" />\r\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v1\">\r\n    <security>\r\n      <requestedPrivileges>\r\n        <requestedExecutionLevel level=\"requireAdministrator\" uiAccess=\"false\" />\r\n      </requestedPrivileges>\r\n    </security>\r\n  </trustInfo>\r\n</assembly>\r\n"
  },
  {
    "path": "deploy/windows/installer/fptn-installer.iss",
    "content": "// replacement automatically\r\n#define APP_VERSION_NAME \"1.0.0\"\r\n// replacement automatically\r\n#define APP_VERSION_NUMBER \"1.0.0\"\r\n// replacement automatically\r\n#define APP_COPYRIGHT_YEAR \"2024\"\r\n\r\n#define APP_ID\t\t\t\t\"{D2D2C1f8-5F5F-5f79-9C5F-7E2B9F1C39A4}\"\r\n#define APP_URL \t\t\t\"fptn.org\"\r\n#define APP_NAME \t\t\t\"FPTN Client\"\r\n#define APP_PUBLISHER \t\t\"fptn.org\"\r\n\r\n[Setup]\r\nAppId={{#APP_ID}\r\nAppName={#APP_NAME}\r\nAppVersion={#APP_VERSION_NAME}\r\n\r\nMinVersion=10.0.10240\r\nAppPublisher={#APP_PUBLISHER}\r\nAppPublisherURL={#APP_URL}\r\nAppSupportURL={#APP_URL}\r\nAppUpdatesURL={#APP_URL}\r\nDefaultDirName={autopf}\\{#APP_NAME}\r\nDefaultGroupName={#APP_NAME}\r\nOutputDir=Output\r\nOutputBaseFilename=FptnClientInstaller\r\nSetupIconFile=resources\\icons\\app.ico\r\nCompression=lzma\r\nSolidCompression=yes\r\nDisableDirPage=no\r\n// # LicenseFile=installer\\license\\LicenseFile.rtf\r\nVersionInfoVersion={#APP_VERSION_NUMBER}\r\nWizardStyle=modern\r\nUninstallLogMode=overwrite\r\nAppCopyright=Copyright (C) {#APP_COPYRIGHT_YEAR} {#APP_PUBLISHER}.\r\nPrivilegesRequired=admin\r\nAppendDefaultDirName=yes\r\nArchitecturesAllowed=x64compatible\r\nArchitecturesInstallIn64BitMode=x64compatible\r\nSetupLogging=Yes\r\n\r\n[Dirs]\r\nName: \"{app}\\\";\r\nName: \"{app}\\logs\";\r\nName: \"{app}\\plugins\";\r\n\r\n[Files]\r\nSource: \"depends/qt/*\"; DestDir: \"{app}\"; Flags: ignoreversion recursesubdirs createallsubdirs uninsneveruninstall\r\nSource: \"depends/wintun.dll\"; DestDir: \"{app}\"; Flags: ignoreversion recursesubdirs createallsubdirs uninsneveruninstall\r\nSource: \"depends/fptn-client.exe\"; DestDir: \"{app}\"; Flags: ignoreversion recursesubdirs createallsubdirs uninsneveruninstall\r\nSource: \"depends/fptn-client-cli.exe\"; DestDir: \"{app}\"; Flags: ignoreversion recursesubdirs createallsubdirs uninsneveruninstall\r\nSource: \"depends/vc_redist.exe\"; DestDir: \"{tmp}\"; AfterInstall: InstallVCRedist(); Flags: ignoreversion recursesubdirs createallsubdirs\r\n// ------- generate bat files -------\r\nSource: \"depends/wintun.dll\"; DestDir: \"{app}\"; AfterInstall: GenerateBatFile('{app}\\fptn-client.exe','{app}\\FptnClient.bat'); Flags: ignoreversion recursesubdirs createallsubdirs uninsneveruninstall\r\n// ------- copy SNI files -------\r\nSource: \"depends/sni/*\"; DestDir: \"{app}\\SNI\"; Flags: ignoreversion recursesubdirs createallsubdirs\r\n\r\n[Tasks]\r\nName: \"desktopicon\"; Description: \"{cm:CreateDesktopIcon}\";\r\n// --- Name: \"startup\"; Description: {cm:AutoStartProgram,{#APP_NAME}};\r\n\r\n[Run]\r\n// Filename: \"cmd.exe\"; Parameters: \"/c reg add \"\"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\"\" /v IPEnableRouter /t REG_DWORD /d 1 /f\"; Flags: runhidden\r\nFilename: \"{app}\\FptnClient.bat\"; Description: \"{cm:LaunchProgram,{#APP_NAME}}\"; Flags: nowait postinstall skipifdoesntexist\r\n\r\n[UninstallRun]\r\nFilename: \"taskkill\"; Parameters: \"/F /IM fptn-client.exe\"; Flags: runhidden waituntilterminated\r\nFilename: \"taskkill\"; Parameters: \"/F /IM fptn-client-cli.exe\"; Flags: runhidden waituntilterminated\r\n\r\n[Icons]\r\nName: \"{group}\\{#APP_NAME}\"; Filename: \"{app}\\fptn-client.exe\"\r\nName: \"{group}\\{cm:UninstallProgram,{#APP_NAME}}\"; Filename: \"{uninstallexe}\";\r\nName: \"{commondesktop}\\{#APP_NAME}\"; Filename: \"{app}\\fptn-client.exe\"; Tasks: desktopicon\r\n// --- Name: \"{userstartup}\\{#APP_NAME}\"; Filename: \"{app}\\fptn-client.exe\"; Tasks: startup\r\n// --- Name: \"{userstartup}\\{#APP_NAME}\"; Filename: \"{app}\\FptnClient.bat\"; Tasks: startup\r\n\r\n\r\n[InstallDelete]\r\nType: filesandordirs; Name: \"{app}\\qt\"\r\nType: filesandordirs; Name: \"{app}\\bin\"\r\nType: filesandordirs; Name: \"{app}\\SNI\"\r\nType: filesandordirs; Name: \"{app}\\logs\"\r\nType: filesandordirs; Name: \"{app}\\plugins\"\r\nType: files; Name: \"{app}\\*\"\r\n\r\n[UninstallDelete]\r\nType: filesandordirs; Name: \"{app}\\qt\"\r\nType: filesandordirs; Name: \"{app}\\bin\"\r\nType: filesandordirs; Name: \"{app}\\SNI\"\r\nType: filesandordirs; Name: \"{app}\\logs\"\r\nType: filesandordirs; Name: \"{app}\\plugins\"\r\nType: files; Name: \"{app}\\*\"\r\n\r\n[Languages]\r\nName: \"en\"; MessagesFile: \"compiler:Default.isl\"\r\n// \"English\" seems to always break the default language detection with unknown reasons.\r\nName: \"polish\"; MessagesFile: \"compiler:Languages\\Polish.isl\"\r\nName: \"russian\"; MessagesFile: \"compiler:Languages\\Russian.isl\"\r\nName: \"ukrainian\"; MessagesFile: \"compiler:Languages\\Ukrainian.isl\"\r\n\r\n\r\n[Code]\r\n\r\nfunction cmd(command: string): integer;\r\nbegin\r\n\texec('cmd.exe', \r\n\t\t'/c ' + command, \r\n\t\tExpandConstant('{app}'), \r\n\t\tSW_HIDE, \r\n\t\tewwaituntilterminated, \r\n\t\tresult\r\n\t)\r\nend;\r\n\r\nprocedure InstallVCRedist();\r\nvar\r\n    ExitCode: Integer;\r\nbegin \r\n    ExitCode := cmd(ExpandConstant(CurrentFileName) + ' /install /quiet /norestart ');\r\n    if ExitCode <> 0 then\r\n    begin\r\n        ExitCode := cmd(ExpandConstant(CurrentFileName) + ' /repair /quiet /norestart ');\r\n        //MsgBox('Failed to install Visual C++ Redistributable.', mbError, MB_OK);\r\n    end;\r\nend;\r\n\r\nprocedure GenerateBatFile(programPath: String; batFilePath: String);\r\nvar\r\n    content: String;\r\nbegin\r\n\tcontent := '@echo off' + #13#10\r\n\t\t+ ExpandConstant('cd \"{app}\"') + #13#10\r\n\t\t+ 'Net session >nul 2>&1 || (PowerShell start -verb runas ' + #39 + '%~0' + #39 +' &exit /b)' + #13#10\r\n\t\t+ 'cmd /c start \"\" \"' + ExpandConstant(programPath)  + ' ' + #13#10\r\n\t\t+ 'exit /s';\r\n\tSaveStringToFile(ExpandConstant(batFilePath), content, False);\r\nend;\r\n\r\nprocedure CurStepChanged(CurStep: TSetupStep);\r\nbegin\r\n  \tif CurStep = ssPostInstall then\r\n  \tbegin\r\n\t\t//if MsgBox('The installation has completed. For changes to take effect, please restart your computer. Do you want to restart now?', mbConfirmation, MB_YESNO) = IDYES then\r\n        //begin\r\n        //    cmd('shutdown /r /t 0');\r\n        //end;\r\n  \tend;\r\nend;\r\n"
  },
  {
    "path": "docker-compose/.gitignore",
    "content": ".env\nfptn-server-data/\nlogs/\n"
  },
  {
    "path": "docker-compose/README.md",
    "content": ""
  },
  {
    "path": "docker-compose/docker-compose.yml",
    "content": "services:\n  fptn-server:\n    restart: unless-stopped\n    image: fptnvpn/fptn-vpn-server:latest\n    cap_add:\n      - NET_ADMIN\n      - SYS_MODULE\n      - NET_RAW\n      - SYS_ADMIN\n    sysctls:\n      net.ipv4.ip_forward: \"1\"\n      net.ipv4.conf.all.src_valid_mark: \"1\"\n      net.ipv6.conf.all.disable_ipv6: \"0\"\n      net.ipv6.conf.all.forwarding: \"1\"\n      net.ipv6.conf.default.forwarding: \"1\"\n      net.ipv4.conf.all.rp_filter: \"0\"\n      net.ipv4.conf.default.rp_filter: \"0\"\n      net.ipv4.ip_local_port_range: \"1024 65535\"\n      net.core.somaxconn: \"65535\"\n    ulimits:\n      nproc:\n        soft: 524288\n        hard: 524288\n      nofile:\n        soft: 524288\n        hard: 524288\n      memlock:\n        soft: 524288\n        hard: 524288\n    devices:\n      - /dev/net/tun:/dev/net/tun\n    ports:\n      - \"${FPTN_PORT}:443/tcp\"\n    volumes:\n      - ./fptn-server-data:/etc/fptn\n    environment:\n      - ENABLE_DETECT_PROBING=${ENABLE_DETECT_PROBING}\n      - DEFAULT_PROXY_DOMAIN=${DEFAULT_PROXY_DOMAIN}\n      - ALLOWED_SNI_LIST=${ALLOWED_SNI_LIST}\n      - DISABLE_BITTORRENT=${DISABLE_BITTORRENT}\n      - PROMETHEUS_SECRET_ACCESS_KEY=${PROMETHEUS_SECRET_ACCESS_KEY}\n      - USE_REMOTE_SERVER_AUTH=${USE_REMOTE_SERVER_AUTH}\n      - REMOTE_SERVER_AUTH_HOST=${REMOTE_SERVER_AUTH_HOST}\n      - REMOTE_SERVER_AUTH_PORT=${REMOTE_SERVER_AUTH_PORT}\n      - MAX_ACTIVE_SESSIONS_PER_USER=${MAX_ACTIVE_SESSIONS_PER_USER}\n      - SERVER_EXTERNAL_IPS=${SERVER_EXTERNAL_IPS}\n      - USING_DNS_SERVER=${USING_DNS_SERVER:-dnsmasq}\n      - DNS_IPV6_ENABLE=${DNS_IPV6_ENABLE:-false}\n      - DNS_IPV4_PRIMARY=${DNS_IPV4_PRIMARY:-8.8.8.8}\n      - DNS_IPV4_SECONDARY=${DNS_IPV4_SECONDARY:-8.8.4.4}\n      - DNS_IPV6_PRIMARY=${DNS_IPV6_PRIMARY:-2001:4860:4860::8888}\n      - DNS_IPV6_SECONDARY=${DNS_IPV6_SECONDARY:-2001:4860:4860::8844}\n    healthcheck:\n      test: [\"CMD\", \"sh\", \"-c\", \"pgrep dnsmasq && pgrep fptn-server\"]\n      interval: 30s\n      timeout: 10s\n      retries: 3\n      start_period: 40s\n    networks:\n      - fptn-network\nnetworks:\n  fptn-network:\n    driver: bridge\n    enable_ipv6: true\n    ipam:\n      config:\n        - subnet: dead:beef:cafe::/48\n          gateway: dead:beef:cafe::1\n        - subnet: 192.168.200.0/24\n          gateway: 192.168.200.1\n"
  },
  {
    "path": "docs/CNAME",
    "content": "fptn.org"
  },
  {
    "path": "docs/index-ru.html",
    "content": "<!DOCTYPE html>\n<html lang=\"ru\">\n<head>\n    <meta charset=\"UTF-8\">\n    <link rel=\"icon\" type=\"image/x-icon\" href=\"images/favicon.ico\">\n    <meta property=\"og:type\" content=\"website\"/>\n    <title data-rh=\"true\">FPTN Project</title>\n    <meta data-rh=\"true\" name=\"description\" content=\"FPTN — это бесплатный VPN для обхода цензуры. Клиент — миниатюрное приложение, интерфейс которого размещается в трее. Здесь нет регистрации!\"/>\n    <link rel=\"alternate\" hreflang=\"ru\" href=\"https://batchar2.github.io/fptn/index-ru.html\" />\n    <link rel=\"alternate\" hreflang=\"en\" href=\"https://batchar2.github.io/fptn/index.html\" />\n    <meta name=\"keywords\" content=\"FPTN VPN, FPT VPN github, FPTN, VPN, бесплатный VPN, VPN обход цензуры, OpenSource VPN, FPTN проект, обход Роскомнадзора, анонимный VPN, безопасный интернет, VPN для YouTube, точка доступа VPN, Wi-Fi VPN, конфиденциальность в интернете, Raspberry Pi VPN, OpenSource VPN, censorship bypass, FPTN Project, secure internet, anonymous internet, VPN for YouTube, VPN for Russia\"/>\n    <meta data-rh=\"true\" property=\"og:site_name\" content=\"batchar2.github.io\"/>\n    <meta data-rh=\"true\" property=\"og:title\" content=\"FPTN Project\"/>\n    <meta data-rh=\"true\" property=\"og:url\" content=\"https://batchar2.github.io/fptn/\"/>\n    <meta data-rh=\"true\" property=\"og:locale\" content=\"ru_RU\"/>\n    <meta data-rh=\"true\" property=\"al:web:should_fallback\" content=\"true\"/>\n    <meta data-rh=\"true\" name=\"twitter:title\" content=\"FPTN Project\"/>\n    <meta data-rh=\"true\" property=\"og:image\" content=\"https://batchar2.github.io/fptn/images/fptn.png\"/>\n    <meta data-rh=\"true\" property=\"og:image:width\" content=\"1200\"/>\n    <meta data-rh=\"true\" property=\"og:image:height\" content=\"630\"/>\n    <meta data-rh=\"true\" name=\"twitter:image\" content=\"https://batchar2.github.io/fptn/images/fptn.png\"/>\n    <meta data-rh=\"true\" property=\"vk:image\" content=\"https://batchar2.github.io/fptn/images/fptn.png\"/>\n    <link data-rh=\"true\" rel=\"canonical\" href=\"https://batchar2.github.io/fptn\"/>\n    <link data-rh=\"true\" rel=\"icon\" type=\"image/png\" href=\"https://batchar2.github.io/fptn/images/favicon-32x32.png\" sizes=\"32x32\"/>\n    <link data-rh=\"true\" rel=\"image_src\" href=\"https://batchar2.github.io/fptn/images/fptn.png\"/>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"google-site-verification\" content=\"XMBHObrFKkhfBziTXGfeqi27fZaRHBTGx76IkN8dCos\" />\n    <meta name=\"yandex-verification\" content=\"f8c4f9389ec28dc1\" />\n\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\n    <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css\" />\n    <title>FPTN Project</title>\n    <style>\n        :root {\n            --blue: #0068fd;\n        }\n        body {\n            font-family: Arial, sans-serif;\n            margin: 0;\n            padding: 0;\n            color: #333;\n            position: relative;\n        }\n        p {\n            font-size: 20px;\n            text-align: left;\n        }\n        .sidebar {}\n        .logo {\n            width: 100px;\n            margin-bottom: 20px;\n        }\n        .version-info {\n            font-size: 20px;\n            color: #666;\n            margin-bottom: 20px;\n        }\n        .nav-links a {\n            display: block;\n            margin-bottom: 10px;\n            color: var(--blue);\n            text-decoration: none;\n            font-size: 20px;\n        }\n        .nav-links a:hover {\n            text-decoration: underline;\n        }\n        .content {\n            flex: 1;\n            padding: 20px;\n            border-radius: 8px;\n        }\n        h1 {\n            font-size: 30px;\n            margin-bottom: 20px;\n            font-weight: 300;\n        }\n        .tabs {\n            display: flex;\n            margin-bottom: 20px;\n        }\n        .tablink {\n            padding: 10px;\n            border: 0;\n            border-bottom: 1px solid rgba(25,25,28,.4);\n            cursor: pointer;\n            text-align: center;\n            color: rgba(25,25,28,.4);\n            font-size: 20px;\n            background-color: white;\n            margin-right: 32px;\n            transition: all 0.3s ease;\n            display: flex;\n            align-items: center;\n        }\n        .tablink.active {\n            border-bottom: 1px solid #19191c;\n            color: #19191c;\n        }\n        .tablink.active path{\n            fill: #19191c;\n            fill-opacity: 1;\n        }\n        .tablink svg {\n            width: 20px;\n            height: 20px;\n            margin-right: 10px;\n        }\n        .download {\n            align-items: center;\n            margin-bottom: 32px;\n            display: none;\n        }\n        .download.active {\n            display: flex;\n            flex-direction: column;\n        }\n        .download-button {\n            padding: 10px 20px;\n            background-color: var(--blue);\n            color: #fff;\n            border: none;\n            border-radius: 4px;\n            cursor: pointer;\n            margin-right: 10px;\n        }\n        .dropdown {\n            position: relative;\n            display: inline-block;\n        }\n        .dropdown-button {\n            cursor: pointer;\n            padding: 8px 36px;\n            border-width: 0;\n            background: var(--blue);\n            border-radius: 24px;\n            color: white;\n            width: 256px;\n            text-align: center!important;\n        }\n        .dropdown-content {\n            display: none;\n            position: absolute;\n            background-color: #f9f9f9;\n            box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);\n            border-radius: 4px;\n            z-index: 1;\n            min-width: 256px;\n            top: 27px;\n        }\n        .dropdown-content a {\n            color: #333;\n            padding: 10px 15px;\n            text-decoration: none;\n            display: block;\n        }\n        .dropdown-content a:hover {\n            background-color: #ddd;\n        }\n        .dropdown:hover .dropdown-content {\n            display: block;\n        }\n        .toolbox-ad {\n            padding: 15px;\n            background-color: #f9f9f9;\n            border: 1px solid #ccc;\n            border-radius: 4px;\n            text-align: justify;\n            font-size: 20px;\n            color: #333;\n            /*margin-bottom: 32px;*/\n            margin-top: 32px;\n        }\n\n        .shared-info {\n            margin-bottom: 74px;\n            margin-top: 0;\n        }\n        .toolbox-ad p{\n            margin: 0;\n            padding: 0;\n            margin-bottom: 12px;\n        }\n        .toolbox-ad img{\n            margin-bottom: 12px;\n        }\n        .wrapper {\n            display: flex;\n            gap: 68px;\n            justify-content: space-between;\n        }\n        .item {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n        }\n        .logo-svg {\n            margin-right: 12px;\n        }\n        .gth-svg path{\n            fill: white;\n        }\n        .center-flex {\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n        .right-flex {\n            display: flex;\n            align-items: center;\n        }\n        .right-flex {\n            display: flex;\n            align-items: center;\n        }\n        .right-flex > * {\n            justify-content: flex-end;\n        }\n        .top-margin {\n            margin-top: 32px;\n        }\n\n        .footer {\n            position: absolute;\n            bottom: 0;\n            width: 100%;\n            height: 60px;\n            line-height: 60px;\n            background-color: rgb(33, 37, 41);\n        }\n        .white {\n            color: white!important;\n        }\n        .center {\n            text-align: center;\n        }\n        .img-center {\n            margin-left: auto;\n            margin-right: auto;\n            display: block;\n        }\n        .language-ru {\n            display: none;\n        }\n        .language-en {\n            display: none;\n        }\n\n        .language-ru.active {\n            display: block;\n            text-align: justify;\n        }\n        .language-en.active {\n            display: block;\n            text-align: justify;\n        }\n        .top-text.active p{\n            text-align: justify!important;\n        }\n\n        span.language-ru.active {\n            display: inline;\n        }\n        span.language-en.active {\n            display: inline;\n        }\n\n        .navbar-expand-md .navbar-nav .dropdown-menu {\n            position: absolute;\n        }\n\n        .nav-link:focus-visible {\n            outline: 0;\n            box-shadow: none;\n        }\n        .info svg{\n            margin-left: 8px;\n            margin-top: -1px;\n        }\n        .info {\n            display: flex;\n            align-items: center;\n            justify-content: flex-end;\n        }\n\n        .swiper-slide {\n            height: 550px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n\n        @media (max-width: 768px) {\n            .wrapper {\n                flex-direction: column;\n                gap: 10px;\n            }\n            .info {\n                display: none;\n            }\n            .dropdown-toggle {\n                text-align: right;\n            }\n            .dropdown-menu {\n                right: 0;\n                left: initial!important;\n            }\n            .tabs {\n                overflow: scroll;\n                padding-bottom: 8px;\n            }\n            .tabs .tablink {\n                font-size: 14px;\n                margin-right: 14px;\n                padding: 8px;\n            }\n            .content {\n                padding: 0;\n            }\n        }\n    </style>\n</head>\n<body>\n<header>\n    <nav class=\"navbar navbar-expand-md navbar-dark bg-dark\">\n        <div class=\"container\">\n            <div class=\"col col-lg-2 center-flex me-auto\">\n                <a class=\"navbar-brand\" href=\"https://batchar2.github.io/fptn\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"38\" viewBox=\"0 0 40 38\" fill=\"none\">\n                        <path d=\"M25.1094 10.4316L24.5507 10.52L25.1085 10.4295C25.0525 10.1815 24.9574 10.1325 24.9174 10.0837C24.749 9.95077 24.6976 9.94925 24.5746 9.88869C23.814 9.56378 21.4048 8.74772 19.0696 7.581C17.5931 6.84215 16.1281 5.97915 14.9999 5.2948C14.4345 4.95384 13.9534 4.65497 13.5909 4.43756C13.408 4.32855 13.2575 4.24013 13.1315 4.1726C13.0231 4.12112 12.981 4.08267 12.8642 4.04512C12.7857 4.01453 12.7082 4 12.6352 4C12.5568 4 12.4793 4.01453 12.4063 4.04512C12.2897 4.08297 12.2483 4.12112 12.1398 4.1726C11.308 4.6259 8.79746 6.28377 6.2027 7.581C4.83068 8.26625 3.41869 8.83644 2.34403 9.25098C1.80564 9.4584 1.35537 9.62586 1.02803 9.75576C0.863001 9.81935 0.731582 9.87325 0.624086 9.9217C0.570186 9.94623 0.522645 9.96863 0.464204 10.0032C0.43574 10.0216 0.404248 10.0407 0.355193 10.0846C0.313708 10.1331 0.21681 10.183 0.163213 10.4319C0.0505688 11.1229 0 11.8267 0 12.5416C0.00757018 17.4419 2.40308 22.7426 5.11775 26.8632C6.47826 28.9219 7.92174 30.6816 9.21473 31.9455C9.86395 32.5759 10.4723 33.0855 11.0301 33.4504C11.5924 33.8068 12.0908 34.0451 12.628 34.0533H12.6355H12.6455C13.6948 34.0088 14.7619 33.1985 16.0833 31.9485C19.9526 28.1561 25.2447 19.8962 25.2726 12.5537C25.2723 11.8348 25.219 11.126 25.1094 10.4316ZM19.2334 26.2433C17.9174 28.24 16.5154 29.9476 15.2933 31.1367C14.0972 32.3376 12.9686 32.9665 12.6452 32.9205V32.9238H12.6277V32.9205C12.4923 32.9305 12.1105 32.8076 11.6475 32.4987C9.98658 31.4319 7.29311 28.4126 5.09322 24.6878C2.87909 20.9596 1.12705 16.502 1.1322 12.5416C1.1322 11.9787 1.16762 11.427 1.23969 10.8877C1.99792 10.5782 4.40766 9.74304 6.709 8.59238C8.23151 7.83021 9.7189 6.95358 10.8596 6.26409C11.4289 5.91828 11.9121 5.61972 12.264 5.40987C12.4145 5.31842 12.5414 5.24393 12.6364 5.19094C13.3998 5.61578 15.9598 7.29121 18.563 8.59268C19.9865 9.30488 21.4309 9.88869 22.5183 10.3087C23.063 10.5176 23.5187 10.6872 23.8312 10.8095C23.9063 10.838 23.9733 10.8655 24.0302 10.888C24.1038 11.4318 24.1374 11.9871 24.1374 12.554C24.1477 17.081 21.869 22.2517 19.2334 26.2433ZM17.9698 9.46204C15.3808 8.16905 12.8751 6.4591 12.6416 6.42821V6.42609C12.6401 6.42609 12.6371 6.42609 12.6371 6.42609C12.6365 6.42609 12.6325 6.42609 12.6325 6.42609V6.42821C12.3975 6.4591 9.89241 8.16905 7.30432 9.46204C4.88913 10.6696 2.37401 11.4524 2.35554 11.5629C1.80231 15.0198 3.11074 19.0368 4.97967 22.5636L18.0458 9.49959C18.0204 9.48747 17.9952 9.47597 17.9698 9.46204ZM21.9829 11.169L7.09811 26.0544C9.35674 29.3353 11.7365 31.6275 12.6292 31.6275C12.6316 31.6275 12.6337 31.6275 12.6368 31.6275C12.6392 31.6275 12.6413 31.6275 12.6437 31.6275C14.6447 31.6275 24.2612 19.9425 22.9174 11.5629C22.9107 11.5223 22.5543 11.3858 21.9829 11.169Z\" fill=\"white\"/>\n                    </svg>\n                    FPTN Project\n                </a>\n            </div>\n            <div class=\"col lang right-flex col-lg-1\">\n                <div class=\"collapse navbar-collapse show\" id=\"navbarNavDarkDropdown\">\n                    <ul class=\"navbar-nav\">\n                        <li class=\"nav-item dropdown\">\n                            <a class=\"nav-link dropdown-toggle\" href=\"#\" id=\"navbarDarkDropdownMenuLink\" role=\"button\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\"></a>\n                            <ul class=\"dropdown-menu dropdown-menu-dark\" aria-labelledby=\"navbarDarkDropdownMenuLink\">\n                                <li><a class=\"dropdown-item\" href=\"#\" onclick=\"editLan('en')\">English</a></li>\n                                <li><a class=\"dropdown-item\" href=\"#\" onclick=\"editLan('ru')\">Русский</a></li>\n                            </ul>\n                        </li>\n                    </ul>\n                </div>\n            </div>\n            <div class=\"col info col-lg-2\" >\n                <a class=\"navbar-brand\" href=\"https://github.com/batchar2/fptn\" target=\"_blank\">\n                    <svg class=\"gth-svg\" height=\"32\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" width=\"32\" data-view-component=\"true\" class=\"octicon octicon-mark-github\">\n                        <path d=\"M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z\"></path>\n                    </svg>\n                </a>\n                <a class=\"navbar-brand\" href=\"https://t.me/fptn_project\" target=\"_blank\">\n                    <svg style=\"fill: white; height: 32px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 496 512\">\n                        <path d=\"m248 8c-137 0-248 111-248 248s111 248 248 248 248-111 248-248-111-248-248-248zm121.8 169.9-40.7 191.8c-3 13.6-11.1 16.9-22.4 10.5l-62-45.7-29.9 28.8c-3.3 3.3-6.1 6.1-12.5 6.1l4.4-63.1 114.9-103.8c5-4.4-1.1-6.9-7.7-2.5l-142 89.4-61.2-19.1c-13.3-4.2-13.6-13.3 2.8-19.7l239.1-92.2c11.1-4 20.8 2.7 17.2 19.5z\"/>\n                    </svg>\n                </a>\n                <a class=\"navbar-brand\" href=\"https://boosty.to/fptn\" target=\"_blank\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 235.6 292.2\" width=\"32\" height=\"32\" aria-hidden=\"true\" role=\"img\" style=\"fill: white;\" >\n                        <path fill=\"currentColor\" d=\"M44.3 164.5L76.9 51.6H127l-10.1 35c-.1.2-.2.4-.3.6L90 179.6h24.8c-10.4 25.9-18.5 46.2-24.3 60.9-45.8-.5-58.6-33.3-47.4-72.1M90.7 240.6l60.4-86.9h-25.6l22.3-55.7c38.2 4 56.2 34.1 45.6 70.5-11.3 39.1-57.1 72.1-101.7 72.1h-.6z\"/>\n                    </svg>\n                </a>\n            </div>\n        </div>\n    </nav>\n</header>\n<div class=\"container top-margin\">\n    <div class=\"row\">\n        <div class=\"col col-lg-3\">\n            <aside class=\"sidebar\">\n                <img src=\"images/fptn.png\" alt=\"\" width=\"300\">\n                <div class=\"version-info\">\n                    <p>Version: <span id=\"version\">2024.2.0.1</span></p>\n                </div>\n                <nav class=\"nav-links\">\n                    <a href=\"/\" onclick=\"downloadUrl('notes')\">\n                        <span class=\"language-en\">Release notes</span>\n                        <span class=\"language-ru\">Описание релиза</span>\n                    </a>\n                </nav>\n            </aside>\n        </div>\n        <div class=\"col col-lg-9\">\n            <main class=\"content\">\n                <div class=\"language-en top-text\">\n                    <h1>FPTN Project</h1>\n\n                    <br>\n\n                    <p>\n                        FPTN is a fully custom-built VPN technology — developed from scratch, including the core protocol, server implementation, and cross-platform clients.\n                        It is a non-commercial, open-source project developed by volunteers and designed to bypass censorship.\n                    </p>\n\n                    <p>\n                        The VPN-client is a mobile application or a compact desktop application with an interface located in the system tray.\n                        No registration process is required! We will send the access token via the <a target=\"_blank\" href=\"https://t.me/fptn_bot\">bot</a> on Telegram.\n                    </p>\n\n                    <div class=\"swiper mySwiper\">\n                        <div class=\"swiper-wrapper\">\n                            <div class=\"swiper-slide\">\n                                <img style=\"width: auto; max-height: 550px\" class=\"img-center\" src=\"images/android/en/04.jpeg\" alt=\"Application\"/>\n                            </div>\n                            <div class=\"swiper-slide\">\n                                <img style=\"width: auto; max-height: 200px\" class=\"img-center\" src=\"images/tray_view_en.png\" alt=\"Application\"/>\n                            </div>\n                        </div>\n                        <div class=\"swiper-pagination\"></div>\n                        <div class=\"swiper-button-next\"></div>\n                        <div class=\"swiper-button-prev\"></div>\n                    </div>\n\n                    <p>\n                        FPTN operates over the HTTPS protocol, effectively masking traffic and enabling users to bypass censorship restrictions.\n                        The project's source code is available on <a target=\"_blank\" href=\"https://github.com/batchar2/fptn\">GitHub</a>.\n                    </p>\n                </div>\n\n                <div class=\"language-ru top-text\">\n                    <h1>FPTN Project</h1>\n\n                    </br>\n\n                    <p>\n                        FPTN — это полностью разработанная с нуля технология VPN, включая собственный протокол, сервер и кроссплатформенные клиенты.\n                        Это некоммерческий проект с открытым исходным кодом, развиваемый волонтерами и предназначенный для обхода цензуры.\n                    </p>\n\n                    <p>\n                        VPN-клиент — мобильное приложение или миниатюрная программа для компьютера, интерфейс которой размещается в трее.\n                        Здесь нет процесса регистрации! Мы пришлем токен доступа через <a target=\"_blank\" href=\"https://t.me/fptn_bot\">бота</a> в Telegram\n                    </p>\n\n                    <div class=\"swiper mySwiper\">\n                        <div class=\"swiper-wrapper\">\n                            <div class=\"swiper-slide\">\n                                <img style=\"width: auto; max-height: 550px\" class=\"img-center\" src=\"images/android/ru/04.jpeg\" alt=\"Application\"/>\n                            </div>\n                            <div class=\"swiper-slide\">\n                                <img style=\"width: auto; max-height: 200px\" class=\"img-center\" src=\"images/tray_view_ru.png\" alt=\"Application\"/>\n                            </div>\n                        </div>\n                        <div class=\"swiper-pagination\"></div>\n                        <div class=\"swiper-button-next\"></div>\n                        <div class=\"swiper-button-prev\"></div>\n                    </div>\n\n                    <p>\n                        FPTN работает через протокол HTTPS, эффективно маскируя трафик и позволяя обходить ограничения цензуры.\n                        Исходный код проекта доступен на <a target=\"_blank\" href=\"https://github.com/batchar2/fptn\">Github</a>.\n                    </p>\n                </div>\n\n                <br/>\n\n                <div class=\"language-en\">\n                    <h1>Download FPTN</h1>\n                </div>\n                <div class=\"language-en\">\n                    <h1 class=\"language-ru\">Скачать FPTN</h1>\n                </div>\n\n                <div class=\"tabs\">\n                    <button class=\"tablink active\" onclick=\"openTab('android')\">\n                        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M3 20.5V3.50002C3 2.91002 3.34 2.39002 3.84 2.15002L13.69 12L3.84 21.85C3.34 21.6 3 21.09 3 20.5ZM16.81 15.12L6.05 21.34L14.54 12.85L16.81 15.12ZM20.16 10.81C20.5 11.08 20.75 11.5 20.75 12C20.75 12.5 20.53 12.9 20.18 13.18L17.89 14.5L15.39 12L17.89 9.50002L20.16 10.81ZM6.05 2.66002L16.81 8.88002L14.54 11.15L6.05 2.66002Z\" fill=\"#19191C\" fill-opacity=\"0.4\"/>\n                        </svg>\n                        Android</button>\n                    <button class=\"tablink\" onclick=\"openTab('win')\">\n                        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M3.001 5.479L10.378 4.463V11.59H3L3.001 5.479ZM3.001 18.521L10.378 19.538V12.498H3L3.001 18.521ZM11.189 19.646L21.001 21V12.498H11.189V19.646ZM11.189 4.354V11.59H21.001V3L11.189 4.354Z\" fill=\"#19191C\" fill-opacity=\"0.4\"/>\n                        </svg>\n                        Windows\n                    </button>\n                    <button class=\"tablink\" onclick=\"openTab('macos')\">\n                        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M21.18 16.5222C20.6828 17.623 20.445 18.1152 19.8065 19.0879C18.9144 20.4465 17.6549 22.1417 16.0977 22.1533C14.7125 22.165 14.355 21.2496 12.4752 21.2645C10.5954 21.2737 10.2039 22.1699 8.81708 22.1558C7.25987 22.1417 6.06764 20.6144 5.17471 19.2584C2.67802 15.4547 2.41447 10.9968 3.95754 8.62477C5.04917 6.94285 6.77682 5.95515 8.39888 5.95515C10.0509 5.95515 11.0893 6.86303 12.4553 6.86303C13.7805 6.86303 14.5878 5.95265 16.4984 5.95265C17.9434 5.95265 19.4715 6.73999 20.5631 8.09849C16.9914 10.0556 17.5717 15.1571 21.18 16.5222ZM15.0484 4.43451C15.7435 3.54242 16.2706 2.28368 16.0794 1C14.9453 1.07732 13.6192 1.80147 12.8444 2.73929C12.1427 3.59314 11.5607 4.86185 11.7877 6.089C13.0248 6.12891 14.3052 5.39146 15.0484 4.43451Z\" fill=\"#19191C\" fill-opacity=\"0.4\"/>\n                        </svg>\n                        MacOS\n                    </button>\n                    <button class=\"tablink\" onclick=\"openTab('linux')\">\n                        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M22 12C22 14.6522 20.9464 17.1957 19.0711 19.0711C17.1957 20.9464 14.6522 22 12 22C10.6868 22 9.38642 21.7413 8.17317 21.2388C6.95991 20.7362 5.85752 19.9997 4.92893 19.0711C3.05357 17.1957 2 14.6522 2 12C2 9.34784 3.05357 6.8043 4.92893 4.92893C6.8043 3.05357 9.34784 2 12 2C13.3132 2 14.6136 2.25866 15.8268 2.7612C17.0401 3.26375 18.1425 4.00035 19.0711 4.92893C19.9997 5.85752 20.7362 6.95991 21.2388 8.17317C21.7413 9.38642 22 10.6868 22 12ZM14.34 7.74C14.92 8.07 15.65 7.87 16 7.3C16.31 6.73 16.12 6 15.54 5.66C14.97 5.33 14.23 5.5 13.9 6.1C13.57 6.67 13.77 7.41 14.34 7.74ZM11.88 15.5C11.35 15.5 10.85 15.39 10.41 15.18L9.57 16.68C10.27 17 11.05 17.22 11.88 17.22C12.37 17.22 12.83 17.15 13.28 17.03C13.36 16.54 13.64 16.1 14.1 15.84C14.56 15.57 15.08 15.55 15.54 15.72C16.43 14.85 17 13.66 17.09 12.33L15.38 12.31C15.301 13.183 14.8978 13.9947 14.25 14.5852C13.6021 15.1757 12.7566 15.5021 11.88 15.5ZM11.88 8.5C13.72 8.5 15.22 9.89 15.38 11.69L17.09 11.66C17.0076 10.3808 16.4556 9.17711 15.54 8.28C15.08 8.45 14.55 8.42 14.1 8.16C13.64 7.9 13.36 7.45 13.28 6.97C12.83 6.85 12.37 6.78 11.88 6.78C11.05 6.78 10.27 6.97 9.57 7.32L10.41 8.82C10.85 8.61 11.35 8.5 11.88 8.5ZM8.37 12C8.37 10.81 8.96 9.76 9.86 9.13L9 7.65C7.92648 8.36101 7.15364 9.44371 6.83 10.69C7.21 11 7.45 11.47 7.45 12C7.45 12.53 7.21 13 6.83 13.31C7.15412 14.5534 7.92714 15.6328 9 16.34L9.86 14.87C8.96 14.24 8.37 13.19 8.37 12ZM14.34 16.26C13.77 16.59 13.57 17.32 13.9 17.9C14.23 18.47 14.97 18.67 15.54 18.34C16.12 18 16.31 17.27 16 16.7C15.65 16.12 14.92 15.93 14.34 16.26ZM5.76 10.8C5.1 10.8 4.56 11.34 4.56 12C4.56 12.66 5.1 13.2 5.76 13.2C6.43 13.2 6.96 12.66 6.96 12C6.96 11.34 6.43 10.8 5.76 10.8Z\" fill=\"#19191C\" fill-opacity=\"0.4\"/>\n                        </svg>\n                        Linux\n                    </button>\n                </div>\n\n                <div class=\"download active android\">\n                    <div class=\"wrapper\">\n                        <div class=\"item\">\n                            <p>\n                                <span class=\"language-en\">Google play</span>\n                                <span class=\"language-ru\">Google play</span>\n                            </p>\n                            <div class=\"dropdown\">\n                                <a class=\"dropdown-button download_2 language-ru\" onclick=\"downloadUrl('google_play')\">Скачать</a>\n                                <a class=\"dropdown-button download_2 language-en\" onclick=\"downloadUrl('google_play')\">Download</a>\n                            </div>\n                        </div>\n                        <div class=\"item\">\n                            <p>\n                                <span class=\"language-en\">Download Android app from the site</span>\n                                <span class=\"language-ru\">Скачать Android приложение с сайта</span>\n                            </p>\n                            <div class=\"dropdown\">\n                                <a class=\"dropdown-button download_2 language-ru\" onclick=\"downloadUrl('android_apk')\">Скачать</a>\n                                <a class=\"dropdown-button download_2 language-en\" onclick=\"downloadUrl('android_apk')\">Download</a>\n                            </div>\n                        </div>\n                    </div>\n\n                    <div class=\"toolbox-ad language-ru\">\n                        <h3>Установка и настройка</h3>\n                        <br/>\n\n                        <p>\n                            Перейдите в <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram-бот</a> и сгенерируйте токен командой <code>/token</code>, затем скопируйте его.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/telegram_token_ru.png\" alt=\"Settings\"/>\n\n                            <br/>\n                            Вставьте токен в соответствующее поле.\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 300px\" class=\"img-center\" src=\"images/android/ru/01.jpeg\" alt=\"Application\"/>\n                            <br/>\n                            Войдите в приложение, используя полученный токен.\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 300px\" class=\"img-center\" src=\"images/android/ru/02.jpeg\" alt=\"Application\"/>\n                            <br/>\n                            Выберите VPN-сервер из списка доступных (Режим \"Авто\" подберет наиболее оптимальный сервер или можете выбрать сервер из списка доступных). Для включения VPN-сервиса нажмите на кнопку в центре экрана, которая активирует подключение к выбранному серверу.\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 300px\" class=\"img-center\" src=\"images/android/ru/03.jpeg\" alt=\"Application\"/>\n                            <br/>\n                            Готово!\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 300px\" class=\"img-center\" src=\"images/android/ru/04.jpeg\" alt=\"Application\"/>\n\n                        </p>\n\n                    </div>\n\n                    <div class=\"toolbox-ad language-en\">\n                        <h3>Installation and Setup</h3>\n                        <br/>\n\n                        <p>\n                            Go to the <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram bot</a> and generate your token by sending the <code>/token</code> command. Then copy the token.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/telegram_token_en.png\" alt=\"Settings\"/>\n\n                            <br/>\n                            Insert the token into the appropriate field.\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 300px\" class=\"img-center\" src=\"images/android/en/01.jpeg\" alt=\"Application\"/>\n                            <br/>\n                            Log into the application using the obtained token.\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 300px\" class=\"img-center\" src=\"images/android/en/02.jpeg\" alt=\"Application\"/>\n                            <br/>\n                            Select a VPN server from the list of available servers (the \"Auto\" mode will choose the most optimal server, or you can manually select a server from the list). To enable the VPN service, press the button in the center of the screen, which will activate the connection to the selected server.\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 300px\" class=\"img-center\" src=\"images/android/en/03.jpeg\" alt=\"Application\"/>\n                            <br/>\n                            Done!\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 300px\" class=\"img-center\" src=\"images/android/en/04.jpeg\" alt=\"Application\"/>\n                        </p>\n\n                    </div>\n\n\n                </div>\n                <div class=\"download macos\">\n                    <div class=\"wrapper\">\n                        <div class=\"item\">\n                            <p>\n                                <span class=\"language-en\">MacOS client (Apple Silicon)</span>\n                                <span class=\"language-ru\">Клиент для MacOS (Apple Silicon)</span>\n                            </p>\n                            <div class=\"dropdown\">\n                                <a class=\"dropdown-button download_2 language-ru\" onclick=\"downloadUrl('macos_m')\">Скачать</a>\n                                <a class=\"dropdown-button download_2 language-en\" onclick=\"downloadUrl('macos_m')\">Download</a>\n                            </div>\n                        </div>\n                    </div>\n\n                    <div class=\"toolbox-ad language-ru\">\n                        <h3>Установка и настройка</h3>\n\n                        <br/>\n\n                        <p>\n                            При установке клиента на MacOS вам может понадобиться более детальная <a target=\"_blank\" href=\"https://github.com/batchar2/fptn/blob/master/docs/macos/README.md\">инструкция</a> из-за проблем с драйверами\n                        </p>\n\n                        <p>\n                            Перейдите в <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram-бот</a> и сгенерируйте токен командой <code>/token</code>, затем скопируйте его.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/telegram_token_ru.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            После запуска приложения нажмите на иконку в системном трее чтобы открыть контекстное меню.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/macos/ru/client.png\" alt=\"Application\"/>\n                        </p>\n\n                        <p>\n                            Вставьте сюда токен из <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram-бота</a>\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/macos/ru/settings-2.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            Сохраните токен.\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/macos/ru/settings-3.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            Закройте окно настроек и попробуйте подключиться\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/macos/ru/running-client.png\" alt=\"Settings\"/>\n                        </p>\n                    </div>\n\n                    <div class=\"toolbox-ad language-en\">\n                        <h3>Installation and Setup</h3>\n\n                        <br/>\n\n                        <p>\n                            When installing the client on macOS, you may need a more detailed <a target=\"_blank\" href=\"https://github.com/batchar2/fptn/blob/master/docs/macos/README.md\">guide</a> due to driver-related issues.\n                        </p>\n\n                        <p>\n                            Go to the <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram bot</a> and generate your token by sending the <code>/token</code> command. Then copy the token.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/telegram_token_en.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            After launching the app, click on the tray icon to open the context menu.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/macos/en/client.png\" alt=\"Application\"/>\n                        </p>\n\n                        <p>\n                            Paste the token you received from the <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram bot</a> into the token field.\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/macos/en/settings-2.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            Save the token.\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/macos/en/settings-3.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            Close the settings window and try connecting.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/macos/en/running-client.png\" alt=\"Settings\"/>\n                        </p>\n                    </div>\n                </div>\n                <div class=\"download linux\">\n                    <div class=\"wrapper\">\n                        <div class=\"item\">\n                            <p>\n                                <span class=\"language-en\">Download Linux client</span>\n                                <span class=\"language-ru\">Скачать Linux клиент</span>\n                            </p>\n                            <div class=\"dropdown\">\n                                <a class=\"dropdown-button download_2 language-ru\" onclick=\"downloadUrl('linux_l_server')\">Linux клиент</a>\n                                <a class=\"dropdown-button download_2 language-en\" onclick=\"downloadUrl('linux_l_server')\">Linux client</a>\n                                <div class=\"dropdown-content\">\n                                    <a class=\"language-ru\" href=\"#\" onclick=\"downloadUrl('linux_l_client')\">Ubuntu (x86_64)</a>\n                                    <a class=\"language-ru\" href=\"#\" onclick=\"downloadUrl('linux_a_client')\">Ubuntu (ARM64)</a>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"item\">\n                            <p>\n                                <span class=\"language-en\">Commandline tools</span>\n                                <span class=\"language-ru\">Инструменты командной строки</span>\n                            </p>\n                            <div class=\"dropdown\">\n                                <a class=\"dropdown-button download_2 language-ru\" onclick=\"downloadUrl('linux_l_client')\">Linux утилиты</a>\n                                <a class=\"dropdown-button download_2 language-en\" onclick=\"downloadUrl('linux_l_client')\">Linux utils</a>\n                                <div class=\"dropdown-content\">\n                                    <a href=\"#\" onclick=\"downloadUrl('linux_l_server')\">FPTN Server (Ubuntu x86_64)</a>\n                                    <a href=\"#\" onclick=\"downloadUrl('linux_a_server')\">FPTN Server (Ubuntu ARM64)</a>\n                                    <a href=\"#\" onclick=\"downloadUrl('linux_l_client_cli')\">CmdClient (Ubuntu x86_64)</a>\n                                    <a href=\"#\" onclick=\"downloadUrl('linux_a_client_cli')\">CmdClient (Ubuntu ARM64)</a>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"toolbox-ad language-ru\">\n                        <h3>Установка и настройка</h3>\n\n                        <br/>\n\n                        <p>\n                            Скачайте .deb пакет FPTN-клиента и установите его вместе со всеми зависимостями, выполнив следующую команду (не забудьте заменить путь до пакета):\n                        </p>\n\n                        <code>\n                            sudo apt install -f ~/Downloads/path-to-deb\n                        </code>\n                        <br/>\n                        <br/>\n\n                        <p>\n                            Перейдите в <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram-бот</a> и сгенерируйте токен командой <code>/token</code>, затем скопируйте его.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/telegram_token_ru.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            Запустите FPTN-клиент.\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/ubuntu/ru/1-icon.png\" alt=\"Application\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Нажмите на иконку FPTN-клиента в системном трее, чтобы открыть контекстное меню.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/ubuntu/ru/2-tray.png\" alt=\"Application\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Откройте настройки FPTN-клиента и нажмите кнопку \"Добавить токен\".\n                            <img style=\"width: 100%\" src=\"images/ubuntu/ru/3-settings.png\" alt=\"Settings\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Вставьте сюда токен из <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram-бота</a> и сохраните\n                            <img style=\"width: 100%\" src=\"images/ubuntu/ru/4-settings.png\" alt=\"Settings\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Закройте окно настроек\n                            <img style=\"width: 100%\" src=\"images/ubuntu/ru/5-settings.png\" alt=\"Settings\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            В системном трее кликните по иконке приложения и выберите \"Умное подключение\". Эта функция автоматически подберет наиболее оптимальный сервер.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/ubuntu/ru/6-running-client.png\" alt=\"Settings\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Готово!\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/ubuntu/ru/7-running-client.png\" alt=\"Settings\"/>\n                        </p>\n                    </div>\n\n\n                    <div class=\"toolbox-ad language-en\">\n                        <h3>Installation and Setup</h3>\n                        <br/>\n\n                        <p>\n                            Download the .deb package for the FPTN client and install it along with all dependencies by running the following command (make sure to replace the package path):\n                        </p>\n\n                        <code>\n                            sudo apt install -f ~/Downloads/path-to-deb\n                        </code>\n                        <br/>\n                        <br/>\n\n                        <p>\n                            Go to the <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram bot</a> and generate a token by sending the <code>/token</code> command, then copy it.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/telegram_token_ru.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            Launch the FPTN client.\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/ubuntu/en/1-icon.png\" alt=\"Application\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Click on the FPTN client icon in the system tray to open the context menu.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/ubuntu/en/2-tray.png\" alt=\"Application\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Open the FPTN client settings and click the \"Add token\" button.\n                            <img style=\"width: 100%\" src=\"images/ubuntu/en/3-settings.png\" alt=\"Settings\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Paste the token from the <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram bot</a> here and save it.\n                            <img style=\"width: 100%\" src=\"images/ubuntu/en/4-settings.png\" alt=\"Settings\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Close the settings window.\n                            <img style=\"width: 100%\" src=\"images/ubuntu/en/5-settings.png\" alt=\"Settings\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            In the system tray, click on the application icon and select \"Smart Connection\". This feature will automatically select the most optimal server.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/ubuntu/en/6-running-client.png\" alt=\"Settings\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Done!\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/ubuntu/en/7-running-client.png\" alt=\"Settings\"/>\n                        </p>\n                    </div>\n\n\n                </div>\n                <div class=\"download win\">\n                    <p>\n                        <span class=\"language-en\">Download the client for Windows (supports Windows 10 and Windows 11, x86_64 architecture)</span>\n                        <span class=\"language-ru\">Скачать клиент для Windows (поддерживаются Windows 10 и Windows 11, архитектура x86_64)</span>\n                    </p>\n                    <div class=\"dropdown\">\n                        <a class=\"dropdown-button download_2 language-ru\" onclick=\"downloadUrl('w_client')\">Скачать</a>\n                        <a class=\"dropdown-button download_2 language-en\" onclick=\"downloadUrl('w_client')\">Download</a>\n                    </div>\n\n                    <div class=\"toolbox-ad language-ru\">\n                        <h3>Установка и настройка</h3>\n                        <br/>\n\n                        <p>\n                            Перейдите в <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram-бот</a> и сгенерируйте токен командой <code>/token</code>, затем скопируйте его.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/telegram_token_ru.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            Скачайте и запустите установщик. При запуске установщика, Windows покажет окно с предупреждением, нажмите \"подробнее\".\n\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/1_protect.png\" alt=\"Application\"/>\n\n                            И нажмите на кнопку \"Запустить в любом случае\".\n\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/2_protect.png\" alt=\"Application\"/>\n\n                            После чего подтвердите запуск установщика.\n\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/3_protect.png\" alt=\"Application\"/>\n\n                            После завершения установки нажмите кнопку завершить и приложение запустится автоматически.\n\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/4_launch.png\" alt=\"Application\"/>\n\n                            После запуска клиента в системном трее появится иконка приложения. Кликните по иконке и откройте настройки.\n\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/ru/5_tray.png\" alt=\"Application\"/>\n                            <br/>\n                            Нажмите кнопку \"Добавить токен\".\n                            <br/>\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/windows/ru/7_load_config.png\" alt=\"Application\"/>\n                            <br/>\n                            Вставьте сюда токен из <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram-бота</a> и сохраните\n                            <br/><br/>\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/windows/ru/8_select_file.png\" alt=\"Application\"/>\n                            <br/>\n                            После открытия появится список доступных серверов, далее нужно просто закрыть окно настроек.\n                            <br/><br/>\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/windows/ru/9_save.png\" alt=\"Application\"/>\n                            <br/>\n                            В системном трее кликните по иконке приложения и выберите \"Умное подключение\". \"Умное подключение\" подберет наиболее оптимальный сервер.\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/ru/10_run.png\" alt=\"Application\"/>\n                            <br/>\n                            Готово!\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/ru/11_running.png\" alt=\"Application\"/>\n                        </p>\n\n                    </div>\n\n                    <div class=\"toolbox-ad language-en\">\n                        <h3>Installation and Setup</h3>\n                        <br/>\n\n                        <p>\n                            Go to the <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram bot</a> and generate a token by sending the <code>/token</code> command, then copy it.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/telegram_token_ru.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/1_protect.png\" alt=\"Application\"/>\n\n                            Then click \"Run anyway\".\n\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/2_protect.png\" alt=\"Application\"/>\n\n                            Confirm the installer launch.\n\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/3_protect.png\" alt=\"Application\"/>\n\n                            After the installation is complete, click the finish button, and the application will launch automatically.\n\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/4_launch.png\" alt=\"Application\"/>\n\n                            After the client launches, the application icon will appear in the system tray. Click on the icon and open the settings.\n\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/5_tray.png\" alt=\"Application\"/>\n                            <br/>\n                            Click the \"Add Token\" button.\n                            <br/>\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/windows/en/7_load_config.png\" alt=\"Application\"/>\n                            <br/>\n                            Paste the token from the <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram bot</a> and save it.\n                            <br/><br/>\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/windows/en/8_select_file.png\" alt=\"Application\"/>\n                            <br/>\n                            After saving, a list of available servers will appear. Simply close the settings window.\n                            <br/><br/>\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/windows/en/9_save.png\" alt=\"Application\"/>\n                            <br/>\n                            In the system tray, click on the application icon and select \"Smart Connection\". This will choose the most optimal server for you.\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/10_run.png\" alt=\"Application\"/>\n                            <br/>\n                            Done!\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/11_running.png\" alt=\"Application\"/>\n                        </p>\n\n                    </div>\n\n\n                </div>\n\n                <div class=\"toolbox-ad shared-info language-ru\">\n                    <p>\n                        А еще, можно легко превратить RaspberryPi/OrangePi в WiFi-точку доступа и установить на неё FPTN-клиент.\n                        В этом случае все устройства, подключённые к WiFi, получат доступ к интернету, обходя любые ограничения.\n                        <a target=\"_blank\" href=\"https://github.com/batchar2/fptn/blob/master/deploy/linux/wifi/README.ru.md\">Информация тут</a>\n\n                        <img style=\"width: 100%\" src=\"images/orangepi.jpg\" alt=\"Settings\"/>\n                    </p>\n                    <p>Любую помощь можно получить в <a href=\"https://t.me/fptn_project\" target=\"_blank\">\n                        нашем Telegram чате</a>!</p>\n\n                </div>\n                <div class=\"toolbox-ad shared-info language-en\">\n                    <p>\n                        You can also easily turn a Raspberry Pi or Orange Pi into a WiFi access point and install the FPTN client on it.\n                        In this case, all devices connected to the WiFi will have unrestricted internet access, bypassing any limitations.\n                        <a target=\"_blank\" href=\"https://github.com/batchar2/fptn/blob/master/deploy/linux/wifi/README.ru.md\">More information here</a>\n\n                        <img style=\"width: 100%\" src=\"images/orangepi.jpg\" alt=\"Settings\"/>\n                    </p>\n                    <p>For any assistance, feel free to join <a href=\"https://t.me/fptn_project\" target=\"_blank\">\n                        our Telegram chat</a>!</p>\n                </div>\n            </main>\n        </div>\n    </div>\n</div>\n<footer class=\"footer\">\n    <div class=\"container\">\n        <div class=\"row justify-content-center\">\n            <div class=\"white center\">\n                FPTN Project 2024\n            </div>\n        </div>\n    </div>\n</footer>\n<script src=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js\" integrity=\"sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz\" crossorigin=\"anonymous\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js\"></script>\n<script>\n    const owner = 'batchar2';\n    const repo = 'fptn';\n    let tag_name = ''\n\n    fetch(`https://api.github.com/repos/${owner}/${repo}/releases/latest`)\n        .then(response => response.json())\n        .then(data => {\n            const releaseInfo = document.getElementById('version');\n            releaseInfo.innerHTML = data.tag_name;\n            tag_name = data.tag_name\n        })\n        .catch(error => {\n            console.error('Error fetching release data:', error);\n            document.getElementById('release-info').textContent = 'Failed to load release information.';\n        })\n    function openTab(tabName) {\n        const tabs = document.getElementsByClassName('tablink');\n        const downloads = document.getElementsByClassName('download');\n        for (let i = 0; i < tabs.length; i++) {\n            tabs[i].classList.remove('active');\n            downloads[i].classList.remove('active');\n            if (downloads[i].classList.contains(tabName)) {\n                downloads[i].classList.add('active');\n            }\n        }\n        document.querySelector(`[onclick=\"openTab('${tabName}')\"]`).classList.add('active');\n    }\n    function downloadUrl(name) {\n        let url = ''\n        switch (name) {\n            case 'macos_m':\n                url = `https://github.com/${owner}/${repo}/releases/latest/download/fptn-client-${tag_name}-apple-silicon.pkg`\n            break;\n            case 'macos_intel':\n                url = `https://github.com/${owner}/${repo}/releases/latest/download/fptn-client-${tag_name}-intel.pkg`\n            break;\n            case 'linux_l_server':\n                url = `https://github.com/${owner}/${repo}/releases/latest/download/fptn-server-${tag_name}-ubuntu22.04-amd64.deb`\n                break;\n            case 'linux_a_server':\n                url = `https://github.com/${owner}/${repo}/releases/latest/download/fptn-server-${tag_name}-ubuntu22.04-arm64.deb`\n                break;\n            case 'linux_l_client':\n                url = `https://github.com/${owner}/${repo}/releases/latest/download/fptn-client-${tag_name}-ubuntu22.04-amd64.deb`\n                break;\n            case 'linux_a_client':\n                url = `https://github.com/${owner}/${repo}/releases/latest/download/fptn-client-${tag_name}-ubuntu22.04-arm64.deb`\n                break;\n            case 'linux_l_client_cli':\n                url = `https://github.com/${owner}/${repo}/releases/latest/download/fptn-client-cli-${tag_name}-ubuntu22.04-amd64.deb`\n                break;\n            case 'linux_a_client_cli':\n                url = `https://github.com/${owner}/${repo}/releases/latest/download/fptn-client-cli-${tag_name}-ubuntu22.04-arm64.deb`\n                break;\n            case 'w_client':\n                url = `https://github.com/${owner}/${repo}/releases/latest/download/FptnClientInstaller-${tag_name}-windows-x64_x86.zip`\n                break;\n            case 'notes':\n                url = `https://github.com/${owner}/${repo}/releases/latest`\n                break;\n            case 'android_apk':\n                url = `https://storage.googleapis.com/fptn.org/APK/fptn-client.apk`\n                break;\n            case 'google_play':\n                url = `https://play.google.com/store/apps/details?id=org.fptn.vpn`\n                break;\n            default:\n        }\n        window.open(url, '_blank').focus();\n    }\n\n    let language = window.navigator.language;\n    let languageFistTwo = language.substr(0,2);\n    let lanDiv = document.querySelector('.dropdown-toggle');\n\n    function hideBlocks(lan) {\n        if (lan === 'ru'){\n            const elements = document.querySelectorAll('.language-ru')\n            elements.forEach(elem => {\n                elem.classList.add('active')\n            })\n            const elementsA = document.querySelectorAll('.language-en')\n            elementsA.forEach(elem => {\n                elem.classList.remove('active')\n            })\n            lanDiv.textContent = 'Русский'\n        } else {\n            const elements = document.querySelectorAll('.language-en')\n            elements.forEach(elem => {\n                elem.classList.add('active')\n            })\n            const elementsA = document.querySelectorAll('.language-ru')\n            elementsA.forEach(elem => {\n                elem.classList.remove('active')\n            })\n            lanDiv.textContent = 'English'\n        }\n    }\n\n    hideBlocks(languageFistTwo)\n\n    function editLan(lan) {\n        hideBlocks(lan)\n    }\n\n    var swiper = new Swiper(\".mySwiper\", {\n      pagination: {\n        el: \".swiper-pagination\",\n      },\n      navigation: {\n        nextEl: \".swiper-button-next\",\n        prevEl: \".swiper-button-prev\",\n      },\n    });\n</script>\n</body>\n</html>"
  },
  {
    "path": "docs/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <link rel=\"icon\" type=\"image/x-icon\" href=\"images/favicon.ico\">\n    <meta property=\"og:type\" content=\"website\"/>\n    <title data-rh=\"true\">FPTN Project</title>\n    <meta name=\"description\" content=\"FPTN is a free VPN client designed to bypass censorship and ensure secure, anonymous internet access.\" />\n    <link rel=\"alternate\" hreflang=\"ru\" href=\"https://batchar2.github.io/fptn/index-ru.html\" />\n    <link rel=\"alternate\" hreflang=\"en\" href=\"https://batchar2.github.io/fptn/index.html\" />\n    <meta name=\"keywords\" content=\"FPTN VPN, FPT VPN github, FPTN, VPN, бесплатный VPN, VPN обход цензуры, OpenSource VPN, FPTN проект, обход Роскомнадзора, анонимный VPN, безопасный интернет, VPN для YouTube, точка доступа VPN, Wi-Fi VPN, конфиденциальность в интернете, Raspberry Pi VPN, OpenSource VPN, censorship bypass, FPTN Project, secure internet, anonymous internet, VPN for YouTube, VPN for Russia\"/>\n    <meta data-rh=\"true\" property=\"og:site_name\" content=\"batchar2.github.io\"/>\n    <meta data-rh=\"true\" property=\"og:title\" content=\"FPTN Project\"/>\n    <meta data-rh=\"true\" property=\"og:url\" content=\"https://batchar2.github.io/fptn/\"/>\n    <meta data-rh=\"true\" property=\"og:locale\" content=\"en_EN\"/>\n    <meta data-rh=\"true\" property=\"al:web:should_fallback\" content=\"true\"/>\n    <meta data-rh=\"true\" name=\"twitter:title\" content=\"FPTN Project\"/>\n    <meta data-rh=\"true\" property=\"og:image\" content=\"https://batchar2.github.io/fptn/images/fptn.png\"/>\n    <meta data-rh=\"true\" property=\"og:image:width\" content=\"1200\"/>\n    <meta data-rh=\"true\" property=\"og:image:height\" content=\"630\"/>\n    <meta data-rh=\"true\" name=\"twitter:image\" content=\"https://batchar2.github.io/fptn/images/fptn.png\"/>\n    <meta data-rh=\"true\" property=\"vk:image\" content=\"https://batchar2.github.io/fptn/images/fptn.png\"/>\n    <link data-rh=\"true\" rel=\"canonical\" href=\"https://batchar2.github.io/fptn\"/>\n    <link data-rh=\"true\" rel=\"icon\" type=\"image/png\" href=\"https://batchar2.github.io/fptn/images/favicon-32x32.png\" sizes=\"32x32\"/>\n    <link data-rh=\"true\" rel=\"image_src\" href=\"https://batchar2.github.io/fptn/images/fptn.png\"/>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"google-site-verification\" content=\"XMBHObrFKkhfBziTXGfeqi27fZaRHBTGx76IkN8dCos\" />\n    <meta name=\"yandex-verification\" content=\"f8c4f9389ec28dc1\" />\n\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\n    <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css\" />\n    <title>FPTN Project</title>\n    <style>\n        :root {\n            --blue: #0068fd;\n        }\n        body {\n            font-family: Arial, sans-serif;\n            margin: 0;\n            padding: 0;\n            color: #333;\n            position: relative;\n        }\n        p {\n            font-size: 20px;\n            text-align: left;\n        }\n        .sidebar {}\n        .logo {\n            width: 100px;\n            margin-bottom: 20px;\n        }\n        .version-info {\n            font-size: 20px;\n            color: #666;\n            margin-bottom: 20px;\n        }\n        .nav-links a {\n            display: block;\n            margin-bottom: 10px;\n            color: var(--blue);\n            text-decoration: none;\n            font-size: 20px;\n        }\n        .nav-links a:hover {\n            text-decoration: underline;\n        }\n        .content {\n            flex: 1;\n            padding: 20px;\n            border-radius: 8px;\n        }\n        h1 {\n            font-size: 30px;\n            margin-bottom: 20px;\n            font-weight: 300;\n        }\n        .tabs {\n            display: flex;\n            margin-bottom: 20px;\n        }\n        .tablink {\n            padding: 10px;\n            border: 0;\n            border-bottom: 1px solid rgba(25,25,28,.4);\n            cursor: pointer;\n            text-align: center;\n            color: rgba(25,25,28,.4);\n            font-size: 20px;\n            background-color: white;\n            margin-right: 32px;\n            transition: all 0.3s ease;\n            display: flex;\n            align-items: center;\n        }\n        .tablink.active {\n            border-bottom: 1px solid #19191c;\n            color: #19191c;\n        }\n        .tablink.active path{\n            fill: #19191c;\n            fill-opacity: 1;\n        }\n        .tablink svg {\n            width: 20px;\n            height: 20px;\n            margin-right: 10px;\n        }\n        .download {\n            align-items: center;\n            margin-bottom: 32px;\n            display: none;\n        }\n        .download.active {\n            display: flex;\n            flex-direction: column;\n        }\n        .download-button {\n            padding: 10px 20px;\n            background-color: var(--blue);\n            color: #fff;\n            border: none;\n            border-radius: 4px;\n            cursor: pointer;\n            margin-right: 10px;\n        }\n        .dropdown {\n            position: relative;\n            display: inline-block;\n        }\n        .dropdown-button {\n            cursor: pointer;\n            padding: 8px 36px;\n            border-width: 0;\n            background: var(--blue);\n            border-radius: 24px;\n            color: white;\n            width: 256px;\n            text-align: center!important;\n        }\n        .dropdown-content {\n            display: none;\n            position: absolute;\n            background-color: #f9f9f9;\n            box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);\n            border-radius: 4px;\n            z-index: 1;\n            min-width: 256px;\n            top: 27px;\n        }\n        .dropdown-content a {\n            color: #333;\n            padding: 10px 15px;\n            text-decoration: none;\n            display: block;\n        }\n        .dropdown-content a:hover {\n            background-color: #ddd;\n        }\n        .dropdown:hover .dropdown-content {\n            display: block;\n        }\n        .toolbox-ad {\n            padding: 15px;\n            background-color: #f9f9f9;\n            border: 1px solid #ccc;\n            border-radius: 4px;\n            text-align: justify;\n            font-size: 20px;\n            color: #333;\n            /*margin-bottom: 32px;*/\n            margin-top: 32px;\n        }\n\n        .shared-info {\n            margin-bottom: 74px;\n            margin-top: 0;\n        }\n        .toolbox-ad p{\n            margin: 0;\n            padding: 0;\n            margin-bottom: 12px;\n        }\n        .toolbox-ad img{\n            margin-bottom: 12px;\n        }\n        .wrapper {\n            display: flex;\n            gap: 68px;\n            justify-content: space-between;\n        }\n        .item {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n        }\n        .logo-svg {\n            margin-right: 12px;\n        }\n        .gth-svg path{\n            fill: white;\n        }\n        .center-flex {\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n        .right-flex {\n            display: flex;\n            align-items: center;\n        }\n        .right-flex {\n            display: flex;\n            align-items: center;\n        }\n        .right-flex > * {\n            justify-content: flex-end;\n        }\n        .top-margin {\n            margin-top: 32px;\n        }\n\n        .footer {\n            position: absolute;\n            bottom: 0;\n            width: 100%;\n            height: 60px;\n            line-height: 60px;\n            background-color: rgb(33, 37, 41);\n        }\n        .white {\n            color: white!important;\n        }\n        .center {\n            text-align: center;\n        }\n        .img-center {\n            margin-left: auto;\n            margin-right: auto;\n            display: block;\n        }\n        .language-ru {\n            display: none;\n        }\n        .language-en {\n            display: none;\n        }\n\n        .language-ru.active {\n            display: block;\n            text-align: justify;\n        }\n        .language-en.active {\n            display: block;\n            text-align: justify;\n        }\n        .top-text.active p{\n            text-align: justify!important;\n        }\n\n        span.language-ru.active {\n            display: inline;\n        }\n        span.language-en.active {\n            display: inline;\n        }\n\n        .navbar-expand-md .navbar-nav .dropdown-menu {\n            position: absolute;\n        }\n\n        .nav-link:focus-visible {\n            outline: 0;\n            box-shadow: none;\n        }\n        .info svg{\n            margin-left: 8px;\n            margin-top: -1px;\n        }\n        .info {\n            display: flex;\n            align-items: center;\n            justify-content: flex-end;\n        }\n        .swiper-slide {\n            height: 550px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n\n        @media (max-width: 768px) {\n            .wrapper {\n                flex-direction: column;\n                gap: 10px;\n            }\n            .info {\n                display: none;\n            }\n            .dropdown-toggle {\n                text-align: right;\n            }\n            .dropdown-menu {\n                right: 0;\n                left: initial!important;\n            }\n            .tabs {\n                overflow: scroll;\n                padding-bottom: 8px;\n            }\n            .tabs .tablink {\n                font-size: 14px;\n                margin-right: 14px;\n                padding: 8px;\n            }\n            .content {\n                padding: 0;\n            }\n        }\n    </style>\n</head>\n<body>\n<header>\n    <nav class=\"navbar navbar-expand-md navbar-dark bg-dark\">\n        <div class=\"container\">\n            <div class=\"col col-lg-2 center-flex me-auto\">\n                <a class=\"navbar-brand\" href=\"https://batchar2.github.io/fptn\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"38\" viewBox=\"0 0 40 38\" fill=\"none\">\n                        <path d=\"M25.1094 10.4316L24.5507 10.52L25.1085 10.4295C25.0525 10.1815 24.9574 10.1325 24.9174 10.0837C24.749 9.95077 24.6976 9.94925 24.5746 9.88869C23.814 9.56378 21.4048 8.74772 19.0696 7.581C17.5931 6.84215 16.1281 5.97915 14.9999 5.2948C14.4345 4.95384 13.9534 4.65497 13.5909 4.43756C13.408 4.32855 13.2575 4.24013 13.1315 4.1726C13.0231 4.12112 12.981 4.08267 12.8642 4.04512C12.7857 4.01453 12.7082 4 12.6352 4C12.5568 4 12.4793 4.01453 12.4063 4.04512C12.2897 4.08297 12.2483 4.12112 12.1398 4.1726C11.308 4.6259 8.79746 6.28377 6.2027 7.581C4.83068 8.26625 3.41869 8.83644 2.34403 9.25098C1.80564 9.4584 1.35537 9.62586 1.02803 9.75576C0.863001 9.81935 0.731582 9.87325 0.624086 9.9217C0.570186 9.94623 0.522645 9.96863 0.464204 10.0032C0.43574 10.0216 0.404248 10.0407 0.355193 10.0846C0.313708 10.1331 0.21681 10.183 0.163213 10.4319C0.0505688 11.1229 0 11.8267 0 12.5416C0.00757018 17.4419 2.40308 22.7426 5.11775 26.8632C6.47826 28.9219 7.92174 30.6816 9.21473 31.9455C9.86395 32.5759 10.4723 33.0855 11.0301 33.4504C11.5924 33.8068 12.0908 34.0451 12.628 34.0533H12.6355H12.6455C13.6948 34.0088 14.7619 33.1985 16.0833 31.9485C19.9526 28.1561 25.2447 19.8962 25.2726 12.5537C25.2723 11.8348 25.219 11.126 25.1094 10.4316ZM19.2334 26.2433C17.9174 28.24 16.5154 29.9476 15.2933 31.1367C14.0972 32.3376 12.9686 32.9665 12.6452 32.9205V32.9238H12.6277V32.9205C12.4923 32.9305 12.1105 32.8076 11.6475 32.4987C9.98658 31.4319 7.29311 28.4126 5.09322 24.6878C2.87909 20.9596 1.12705 16.502 1.1322 12.5416C1.1322 11.9787 1.16762 11.427 1.23969 10.8877C1.99792 10.5782 4.40766 9.74304 6.709 8.59238C8.23151 7.83021 9.7189 6.95358 10.8596 6.26409C11.4289 5.91828 11.9121 5.61972 12.264 5.40987C12.4145 5.31842 12.5414 5.24393 12.6364 5.19094C13.3998 5.61578 15.9598 7.29121 18.563 8.59268C19.9865 9.30488 21.4309 9.88869 22.5183 10.3087C23.063 10.5176 23.5187 10.6872 23.8312 10.8095C23.9063 10.838 23.9733 10.8655 24.0302 10.888C24.1038 11.4318 24.1374 11.9871 24.1374 12.554C24.1477 17.081 21.869 22.2517 19.2334 26.2433ZM17.9698 9.46204C15.3808 8.16905 12.8751 6.4591 12.6416 6.42821V6.42609C12.6401 6.42609 12.6371 6.42609 12.6371 6.42609C12.6365 6.42609 12.6325 6.42609 12.6325 6.42609V6.42821C12.3975 6.4591 9.89241 8.16905 7.30432 9.46204C4.88913 10.6696 2.37401 11.4524 2.35554 11.5629C1.80231 15.0198 3.11074 19.0368 4.97967 22.5636L18.0458 9.49959C18.0204 9.48747 17.9952 9.47597 17.9698 9.46204ZM21.9829 11.169L7.09811 26.0544C9.35674 29.3353 11.7365 31.6275 12.6292 31.6275C12.6316 31.6275 12.6337 31.6275 12.6368 31.6275C12.6392 31.6275 12.6413 31.6275 12.6437 31.6275C14.6447 31.6275 24.2612 19.9425 22.9174 11.5629C22.9107 11.5223 22.5543 11.3858 21.9829 11.169Z\" fill=\"white\"/>\n                    </svg>\n                    FPTN Project\n                </a>\n            </div>\n            <div class=\"col lang right-flex col-lg-1\">\n                <div class=\"collapse navbar-collapse show\" id=\"navbarNavDarkDropdown\">\n                    <ul class=\"navbar-nav\">\n                        <li class=\"nav-item dropdown\">\n                            <a class=\"nav-link dropdown-toggle\" href=\"#\" id=\"navbarDarkDropdownMenuLink\" role=\"button\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\"></a>\n                            <ul class=\"dropdown-menu dropdown-menu-dark\" aria-labelledby=\"navbarDarkDropdownMenuLink\">\n                                <li><a class=\"dropdown-item\" href=\"#\" onclick=\"editLan('en')\">English</a></li>\n                                <li><a class=\"dropdown-item\" href=\"#\" onclick=\"editLan('ru')\">Русский</a></li>\n                            </ul>\n                        </li>\n                    </ul>\n                </div>\n            </div>\n            <div class=\"col info col-lg-2\" >\n                <a class=\"navbar-brand\" href=\"https://github.com/batchar2/fptn\" target=\"_blank\">\n                    <svg class=\"gth-svg\" height=\"32\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" width=\"32\" data-view-component=\"true\" class=\"octicon octicon-mark-github\">\n                        <path d=\"M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z\"></path>\n                    </svg>\n                </a>\n                <a class=\"navbar-brand\" href=\"https://t.me/fptn_project\" target=\"_blank\">\n                    <svg style=\"fill: white; height: 32px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 496 512\">\n                        <path d=\"m248 8c-137 0-248 111-248 248s111 248 248 248 248-111 248-248-111-248-248-248zm121.8 169.9-40.7 191.8c-3 13.6-11.1 16.9-22.4 10.5l-62-45.7-29.9 28.8c-3.3 3.3-6.1 6.1-12.5 6.1l4.4-63.1 114.9-103.8c5-4.4-1.1-6.9-7.7-2.5l-142 89.4-61.2-19.1c-13.3-4.2-13.6-13.3 2.8-19.7l239.1-92.2c11.1-4 20.8 2.7 17.2 19.5z\"/>\n                    </svg>\n                </a>\n                <a class=\"navbar-brand\" href=\"https://boosty.to/fptn\" target=\"_blank\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 235.6 292.2\" width=\"32\" height=\"32\" aria-hidden=\"true\" role=\"img\" style=\"fill: white;\" >\n                        <path fill=\"currentColor\" d=\"M44.3 164.5L76.9 51.6H127l-10.1 35c-.1.2-.2.4-.3.6L90 179.6h24.8c-10.4 25.9-18.5 46.2-24.3 60.9-45.8-.5-58.6-33.3-47.4-72.1M90.7 240.6l60.4-86.9h-25.6l22.3-55.7c38.2 4 56.2 34.1 45.6 70.5-11.3 39.1-57.1 72.1-101.7 72.1h-.6z\"/>\n                    </svg>\n                </a>\n            </div>\n        </div>\n    </nav>\n</header>\n<div class=\"container top-margin\">\n    <div class=\"row\">\n        <div class=\"col col-lg-3\">\n            <aside class=\"sidebar\">\n                <img src=\"images/fptn.png\" alt=\"\" width=\"300\">\n                <div class=\"version-info\">\n                    <p>Version: <span id=\"version\">2024.2.0.1</span></p>\n                </div>\n                <nav class=\"nav-links\">\n                    <a href=\"/\" onclick=\"downloadUrl('notes')\">\n                        <span class=\"language-en\">Release notes</span>\n                        <span class=\"language-ru\">Описание релиза</span>\n                    </a>\n                </nav>\n            </aside>\n        </div>\n        <div class=\"col col-lg-9\">\n            <main class=\"content\">\n                <div class=\"language-en top-text\">\n                    <h1>FPTN Project</h1>\n\n                    <br>\n\n                    <p>\n                        FPTN is a fully custom-built VPN technology — developed from scratch, including the core protocol, server implementation, and cross-platform clients.\n                        It is a non-commercial, open-source project developed by volunteers and designed to bypass censorship.\n                    </p>\n\n                    <p>\n                        The VPN-client is a mobile application or a compact desktop application with an interface located in the system tray.\n                        No registration process is required! We will send the access token via the <a target=\"_blank\" href=\"https://t.me/fptn_bot\">bot</a> on Telegram.\n                    </p>\n\n                    <div class=\"swiper mySwiper\">\n                        <div class=\"swiper-wrapper\">\n                            <div class=\"swiper-slide\">\n                                <img style=\"width: auto; max-height: 550px\" class=\"img-center\" src=\"images/android/en/04.jpeg\" alt=\"Application\"/>\n                            </div>\n                            <div class=\"swiper-slide\">\n                                <img style=\"width: auto; max-height: 200px\" class=\"img-center\" src=\"images/tray_view_en.png\" alt=\"Application\"/>\n                            </div>\n                        </div>\n                        <div class=\"swiper-pagination\"></div>\n                        <div class=\"swiper-button-next\"></div>\n                        <div class=\"swiper-button-prev\"></div>\n                    </div>\n\n                    <p>\n                        FPTN operates over the HTTPS protocol, effectively masking traffic and enabling users to bypass censorship restrictions.\n                        The project's source code is available on <a target=\"_blank\" href=\"https://github.com/batchar2/fptn\">GitHub</a>.\n                    </p>\n                </div>\n\n                <div class=\"language-ru top-text\">\n                    <h1>FPTN Project</h1>\n\n                    </br>\n\n                    <p>\n                        FPTN — это полностью разработанная с нуля технология VPN, включая собственный протокол, сервер и кроссплатформенные клиенты.\n                        Это некоммерческий проект с открытым исходным кодом, развиваемый волонтерами и предназначенный для обхода цензуры.\n                    </p>\n\n                    <p>\n                        VPN-клиент — мобильное приложение или миниатюрная программа для компьютера, интерфейс которой размещается в трее.\n                        Здесь нет процесса регистрации! Мы пришлем токен доступа через <a target=\"_blank\" href=\"https://t.me/fptn_bot\">бота</a> в Telegram\n                    </p>\n\n                    <div class=\"swiper mySwiper\">\n                        <div class=\"swiper-wrapper\">\n                            <div class=\"swiper-slide\">\n                                <img style=\"width: auto; max-height: 550px\" class=\"img-center\" src=\"images/android/ru/04.jpeg\" alt=\"Application\"/>\n                            </div>\n                            <div class=\"swiper-slide\">\n                                <img style=\"width: auto; max-height: 200px\" class=\"img-center\" src=\"images/tray_view_ru.png\" alt=\"Application\"/>\n                            </div>\n                        </div>\n                        <div class=\"swiper-pagination\"></div>\n                        <div class=\"swiper-button-next\"></div>\n                        <div class=\"swiper-button-prev\"></div>\n                    </div>\n\n                    <p>\n                        FPTN работает через протокол HTTPS, эффективно маскируя трафик и позволяя обходить ограничения цензуры.\n                        Исходный код проекта доступен на <a target=\"_blank\" href=\"https://github.com/batchar2/fptn\">Github</a>.\n                    </p>\n                </div>\n\n                <br/>\n\n                <div class=\"language-en\">\n                    <h1>Download FPTN</h1>\n                </div>\n                <div class=\"language-en\">\n                    <h1 class=\"language-ru\">Скачать FPTN</h1>\n                </div>\n\n                <div class=\"tabs\">\n                    <button class=\"tablink active\" onclick=\"openTab('android')\">\n                        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M3 20.5V3.50002C3 2.91002 3.34 2.39002 3.84 2.15002L13.69 12L3.84 21.85C3.34 21.6 3 21.09 3 20.5ZM16.81 15.12L6.05 21.34L14.54 12.85L16.81 15.12ZM20.16 10.81C20.5 11.08 20.75 11.5 20.75 12C20.75 12.5 20.53 12.9 20.18 13.18L17.89 14.5L15.39 12L17.89 9.50002L20.16 10.81ZM6.05 2.66002L16.81 8.88002L14.54 11.15L6.05 2.66002Z\" fill=\"#19191C\" fill-opacity=\"0.4\"/>\n                        </svg>\n                        Android</button>\n                    <button class=\"tablink\" onclick=\"openTab('win')\">\n                        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M3.001 5.479L10.378 4.463V11.59H3L3.001 5.479ZM3.001 18.521L10.378 19.538V12.498H3L3.001 18.521ZM11.189 19.646L21.001 21V12.498H11.189V19.646ZM11.189 4.354V11.59H21.001V3L11.189 4.354Z\" fill=\"#19191C\" fill-opacity=\"0.4\"/>\n                        </svg>\n                        Windows\n                    </button>\n                    <button class=\"tablink\" onclick=\"openTab('macos')\">\n                        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M21.18 16.5222C20.6828 17.623 20.445 18.1152 19.8065 19.0879C18.9144 20.4465 17.6549 22.1417 16.0977 22.1533C14.7125 22.165 14.355 21.2496 12.4752 21.2645C10.5954 21.2737 10.2039 22.1699 8.81708 22.1558C7.25987 22.1417 6.06764 20.6144 5.17471 19.2584C2.67802 15.4547 2.41447 10.9968 3.95754 8.62477C5.04917 6.94285 6.77682 5.95515 8.39888 5.95515C10.0509 5.95515 11.0893 6.86303 12.4553 6.86303C13.7805 6.86303 14.5878 5.95265 16.4984 5.95265C17.9434 5.95265 19.4715 6.73999 20.5631 8.09849C16.9914 10.0556 17.5717 15.1571 21.18 16.5222ZM15.0484 4.43451C15.7435 3.54242 16.2706 2.28368 16.0794 1C14.9453 1.07732 13.6192 1.80147 12.8444 2.73929C12.1427 3.59314 11.5607 4.86185 11.7877 6.089C13.0248 6.12891 14.3052 5.39146 15.0484 4.43451Z\" fill=\"#19191C\" fill-opacity=\"0.4\"/>\n                        </svg>\n                        MacOS\n                    </button>\n                    <button class=\"tablink\" onclick=\"openTab('linux')\">\n                        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M22 12C22 14.6522 20.9464 17.1957 19.0711 19.0711C17.1957 20.9464 14.6522 22 12 22C10.6868 22 9.38642 21.7413 8.17317 21.2388C6.95991 20.7362 5.85752 19.9997 4.92893 19.0711C3.05357 17.1957 2 14.6522 2 12C2 9.34784 3.05357 6.8043 4.92893 4.92893C6.8043 3.05357 9.34784 2 12 2C13.3132 2 14.6136 2.25866 15.8268 2.7612C17.0401 3.26375 18.1425 4.00035 19.0711 4.92893C19.9997 5.85752 20.7362 6.95991 21.2388 8.17317C21.7413 9.38642 22 10.6868 22 12ZM14.34 7.74C14.92 8.07 15.65 7.87 16 7.3C16.31 6.73 16.12 6 15.54 5.66C14.97 5.33 14.23 5.5 13.9 6.1C13.57 6.67 13.77 7.41 14.34 7.74ZM11.88 15.5C11.35 15.5 10.85 15.39 10.41 15.18L9.57 16.68C10.27 17 11.05 17.22 11.88 17.22C12.37 17.22 12.83 17.15 13.28 17.03C13.36 16.54 13.64 16.1 14.1 15.84C14.56 15.57 15.08 15.55 15.54 15.72C16.43 14.85 17 13.66 17.09 12.33L15.38 12.31C15.301 13.183 14.8978 13.9947 14.25 14.5852C13.6021 15.1757 12.7566 15.5021 11.88 15.5ZM11.88 8.5C13.72 8.5 15.22 9.89 15.38 11.69L17.09 11.66C17.0076 10.3808 16.4556 9.17711 15.54 8.28C15.08 8.45 14.55 8.42 14.1 8.16C13.64 7.9 13.36 7.45 13.28 6.97C12.83 6.85 12.37 6.78 11.88 6.78C11.05 6.78 10.27 6.97 9.57 7.32L10.41 8.82C10.85 8.61 11.35 8.5 11.88 8.5ZM8.37 12C8.37 10.81 8.96 9.76 9.86 9.13L9 7.65C7.92648 8.36101 7.15364 9.44371 6.83 10.69C7.21 11 7.45 11.47 7.45 12C7.45 12.53 7.21 13 6.83 13.31C7.15412 14.5534 7.92714 15.6328 9 16.34L9.86 14.87C8.96 14.24 8.37 13.19 8.37 12ZM14.34 16.26C13.77 16.59 13.57 17.32 13.9 17.9C14.23 18.47 14.97 18.67 15.54 18.34C16.12 18 16.31 17.27 16 16.7C15.65 16.12 14.92 15.93 14.34 16.26ZM5.76 10.8C5.1 10.8 4.56 11.34 4.56 12C4.56 12.66 5.1 13.2 5.76 13.2C6.43 13.2 6.96 12.66 6.96 12C6.96 11.34 6.43 10.8 5.76 10.8Z\" fill=\"#19191C\" fill-opacity=\"0.4\"/>\n                        </svg>\n                        Linux\n                    </button>\n                </div>\n\n                <div class=\"download active android\">\n                    <div class=\"wrapper\">\n                        <div class=\"item\">\n                            <p>\n                                <span class=\"language-en\">Google play</span>\n                                <span class=\"language-ru\">Google play</span>\n                            </p>\n                            <div class=\"dropdown\">\n                                <a class=\"dropdown-button download_2 language-ru\" onclick=\"downloadUrl('google_play')\">Скачать</a>\n                                <a class=\"dropdown-button download_2 language-en\" onclick=\"downloadUrl('google_play')\">Download</a>\n                            </div>\n                        </div>\n                        <div class=\"item\">\n                            <p>\n                                <span class=\"language-en\">Download Android app from the site</span>\n                                <span class=\"language-ru\">Скачать Android приложение с сайта</span>\n                            </p>\n                            <div class=\"dropdown\">\n                                <a class=\"dropdown-button download_2 language-ru\" onclick=\"downloadUrl('android_apk')\">Скачать</a>\n                                <a class=\"dropdown-button download_2 language-en\" onclick=\"downloadUrl('android_apk')\">Download</a>\n                            </div>\n                        </div>\n                    </div>\n\n                    <div class=\"toolbox-ad language-ru\">\n                        <h3>Установка и настройка</h3>\n                        <br/>\n\n                        <p>\n                            Перейдите в <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram-бот</a> и сгенерируйте токен командой <code>/token</code>, затем скопируйте его.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/telegram_token_ru.png\" alt=\"Settings\"/>\n\n                            <br/>\n                            Вставьте токен в соответствующее поле.\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 300px\" class=\"img-center\" src=\"images/android/ru/01.jpeg\" alt=\"Application\"/>\n                            <br/>\n                            Войдите в приложение, используя полученный токен.\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 300px\" class=\"img-center\" src=\"images/android/ru/02.jpeg\" alt=\"Application\"/>\n                            <br/>\n                            Выберите VPN-сервер из списка доступных (Режим \"Авто\" подберет наиболее оптимальный сервер или можете выбрать сервер из списка доступных). Для включения VPN-сервиса нажмите на кнопку в центре экрана, которая активирует подключение к выбранному серверу.\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 300px\" class=\"img-center\" src=\"images/android/ru/03.jpeg\" alt=\"Application\"/>\n                            <br/>\n                            Готово!\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 300px\" class=\"img-center\" src=\"images/android/ru/04.jpeg\" alt=\"Application\"/>\n\n                        </p>\n\n                    </div>\n\n                    <div class=\"toolbox-ad language-en\">\n                        <h3>Installation and Setup</h3>\n                        <br/>\n\n                        <p>\n                            Go to the <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram bot</a> and generate your token by sending the <code>/token</code> command. Then copy the token.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/telegram_token_en.png\" alt=\"Settings\"/>\n\n                            <br/>\n                            Insert the token into the appropriate field.\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 300px\" class=\"img-center\" src=\"images/android/en/01.jpeg\" alt=\"Application\"/>\n                            <br/>\n                            Log into the application using the obtained token.\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 300px\" class=\"img-center\" src=\"images/android/en/02.jpeg\" alt=\"Application\"/>\n                            <br/>\n                            Select a VPN server from the list of available servers (the \"Auto\" mode will choose the most optimal server, or you can manually select a server from the list). To enable the VPN service, press the button in the center of the screen, which will activate the connection to the selected server.\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 300px\" class=\"img-center\" src=\"images/android/en/03.jpeg\" alt=\"Application\"/>\n                            <br/>\n                            Done!\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 300px\" class=\"img-center\" src=\"images/android/en/04.jpeg\" alt=\"Application\"/>\n                        </p>\n\n                    </div>\n\n\n                </div>\n                <div class=\"download macos\">\n                    <div class=\"wrapper\">\n                        <div class=\"item\">\n                            <p>\n                                <span class=\"language-en\">MacOS client (Apple Silicon)</span>\n                                <span class=\"language-ru\">Клиент для MacOS (Apple Silicon)</span>\n                            </p>\n                            <div class=\"dropdown\">\n                                <a class=\"dropdown-button download_2 language-ru\" onclick=\"downloadUrl('macos_m')\">Скачать</a>\n                                <a class=\"dropdown-button download_2 language-en\" onclick=\"downloadUrl('macos_m')\">Download</a>\n                            </div>\n                        </div>\n                    </div>\n\n                    <div class=\"toolbox-ad language-ru\">\n                        <h3>Установка и настройка</h3>\n\n                        <br/>\n\n                        <p>\n                            При установке клиента на MacOS вам может понадобиться более детальная <a target=\"_blank\" href=\"https://github.com/batchar2/fptn/blob/master/docs/macos/README.md\">инструкция</a> из-за проблем с драйверами\n                        </p>\n\n                        <p>\n                            Перейдите в <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram-бот</a> и сгенерируйте токен командой <code>/token</code>, затем скопируйте его.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/telegram_token_ru.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            После запуска приложения нажмите на иконку в системном трее чтобы открыть контекстное меню.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/macos/ru/client.png\" alt=\"Application\"/>\n                        </p>\n\n                        <p>\n                            Вставьте сюда токен из <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram-бота</a>\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/macos/ru/settings-2.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            Сохраните токен.\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/macos/ru/settings-3.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            Закройте окно настроек и попробуйте подключиться\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/macos/ru/running-client.png\" alt=\"Settings\"/>\n                        </p>\n                    </div>\n\n                    <div class=\"toolbox-ad language-en\">\n                        <h3>Installation and Setup</h3>\n\n                        <br/>\n\n                        <p>\n                            When installing the client on macOS, you may need a more detailed <a target=\"_blank\" href=\"https://github.com/batchar2/fptn/blob/master/docs/macos/README.md\">guide</a> due to driver-related issues.\n                        </p>\n\n                        <p>\n                            Go to the <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram bot</a> and generate your token by sending the <code>/token</code> command. Then copy the token.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/telegram_token_en.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            After launching the app, click on the tray icon to open the context menu.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/macos/en/client.png\" alt=\"Application\"/>\n                        </p>\n\n                        <p>\n                            Paste the token you received from the <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram bot</a> into the token field.\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/macos/en/settings-2.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            Save the token.\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/macos/en/settings-3.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            Close the settings window and try connecting.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/macos/en/running-client.png\" alt=\"Settings\"/>\n                        </p>\n                    </div>\n                </div>\n                <div class=\"download linux\">\n                    <div class=\"wrapper\">\n                        <div class=\"item\">\n                            <p>\n                                <span class=\"language-en\">Download Linux client</span>\n                                <span class=\"language-ru\">Скачать Linux клиент</span>\n                            </p>\n                            <div class=\"dropdown\">\n                                <a class=\"dropdown-button download_2 language-ru\" onclick=\"downloadUrl('linux_l_server')\">Linux клиент</a>\n                                <a class=\"dropdown-button download_2 language-en\" onclick=\"downloadUrl('linux_l_server')\">Linux client</a>\n                                <div class=\"dropdown-content\">\n                                    <a class=\"language-ru\" href=\"#\" onclick=\"downloadUrl('linux_l_client')\">Ubuntu (x86_64)</a>\n                                    <a class=\"language-ru\" href=\"#\" onclick=\"downloadUrl('linux_a_client')\">Ubuntu (ARM64)</a>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"item\">\n                            <p>\n                                <span class=\"language-en\">Commandline tools</span>\n                                <span class=\"language-ru\">Инструменты командной строки</span>\n                            </p>\n                            <div class=\"dropdown\">\n                                <a class=\"dropdown-button download_2 language-ru\" onclick=\"downloadUrl('linux_l_client')\">Linux утилиты</a>\n                                <a class=\"dropdown-button download_2 language-en\" onclick=\"downloadUrl('linux_l_client')\">Linux utils</a>\n                                <div class=\"dropdown-content\">\n                                    <a href=\"#\" onclick=\"downloadUrl('linux_l_server')\">FPTN Server (Ubuntu x86_64)</a>\n                                    <a href=\"#\" onclick=\"downloadUrl('linux_a_server')\">FPTN Server (Ubuntu ARM64)</a>\n                                    <a href=\"#\" onclick=\"downloadUrl('linux_l_client_cli')\">CmdClient (Ubuntu x86_64)</a>\n                                    <a href=\"#\" onclick=\"downloadUrl('linux_a_client_cli')\">CmdClient (Ubuntu ARM64)</a>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"toolbox-ad language-ru\">\n                        <h3>Установка и настройка</h3>\n\n                        <br/>\n\n                        <p>\n                            Скачайте .deb пакет FPTN-клиента и установите его вместе со всеми зависимостями, выполнив следующую команду (не забудьте заменить путь до пакета):\n                        </p>\n\n                        <code>\n                            sudo apt install -f ~/Downloads/path-to-deb\n                        </code>\n                        <br/>\n                        <br/>\n\n                        <p>\n                            Перейдите в <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram-бот</a> и сгенерируйте токен командой <code>/token</code>, затем скопируйте его.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/telegram_token_ru.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            Запустите FPTN-клиент.\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/ubuntu/ru/1-icon.png\" alt=\"Application\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Нажмите на иконку FPTN-клиента в системном трее, чтобы открыть контекстное меню.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/ubuntu/ru/2-tray.png\" alt=\"Application\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Откройте настройки FPTN-клиента и нажмите кнопку \"Добавить токен\".\n                            <img style=\"width: 100%\" src=\"images/ubuntu/ru/3-settings.png\" alt=\"Settings\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Вставьте сюда токен из <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram-бота</a> и сохраните\n                            <img style=\"width: 100%\" src=\"images/ubuntu/ru/4-settings.png\" alt=\"Settings\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Закройте окно настроек\n                            <img style=\"width: 100%\" src=\"images/ubuntu/ru/5-settings.png\" alt=\"Settings\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            В системном трее кликните по иконке приложения и выберите \"Умное подключение\". Эта функция автоматически подберет наиболее оптимальный сервер.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/ubuntu/ru/6-running-client.png\" alt=\"Settings\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Готово!\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/ubuntu/ru/7-running-client.png\" alt=\"Settings\"/>\n                        </p>\n                    </div>\n\n\n                    <div class=\"toolbox-ad language-en\">\n                        <h3>Installation and Setup</h3>\n                        <br/>\n\n                        <p>\n                            Download the .deb package for the FPTN client and install it along with all dependencies by running the following command (make sure to replace the package path):\n                        </p>\n\n                        <code>\n                            sudo apt install -f ~/Downloads/path-to-deb\n                        </code>\n                        <br/>\n                        <br/>\n\n                        <p>\n                            Go to the <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram bot</a> and generate a token by sending the <code>/token</code> command, then copy it.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/telegram_token_ru.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            Launch the FPTN client.\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/ubuntu/en/1-icon.png\" alt=\"Application\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Click on the FPTN client icon in the system tray to open the context menu.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/ubuntu/en/2-tray.png\" alt=\"Application\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Open the FPTN client settings and click the \"Add token\" button.\n                            <img style=\"width: 100%\" src=\"images/ubuntu/en/3-settings.png\" alt=\"Settings\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Paste the token from the <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram bot</a> here and save it.\n                            <img style=\"width: 100%\" src=\"images/ubuntu/en/4-settings.png\" alt=\"Settings\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Close the settings window.\n                            <img style=\"width: 100%\" src=\"images/ubuntu/en/5-settings.png\" alt=\"Settings\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            In the system tray, click on the application icon and select \"Smart Connection\". This feature will automatically select the most optimal server.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/ubuntu/en/6-running-client.png\" alt=\"Settings\"/>\n                            <br/>\n                        </p>\n\n                        <p>\n                            Done!\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/ubuntu/en/7-running-client.png\" alt=\"Settings\"/>\n                        </p>\n                    </div>\n\n\n                </div>\n                <div class=\"download win\">\n                    <p>\n                        <span class=\"language-en\">Download the client for Windows (supports Windows 10 and Windows 11, x86_64 architecture)</span>\n                        <span class=\"language-ru\">Скачать клиент для Windows (поддерживаются Windows 10 и Windows 11, архитектура x86_64)</span>\n                    </p>\n                    <div class=\"dropdown\">\n                        <a class=\"dropdown-button download_2 language-ru\" onclick=\"downloadUrl('w_client')\">Скачать</a>\n                        <a class=\"dropdown-button download_2 language-en\" onclick=\"downloadUrl('w_client')\">Download</a>\n                    </div>\n\n                    <div class=\"toolbox-ad language-ru\">\n                        <h3>Установка и настройка</h3>\n                        <br/>\n\n                        <p>\n                            Перейдите в <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram-бот</a> и сгенерируйте токен командой <code>/token</code>, затем скопируйте его.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/telegram_token_ru.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            Скачайте и запустите установщик. При запуске установщика, Windows покажет окно с предупреждением, нажмите \"подробнее\".\n\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/1_protect.png\" alt=\"Application\"/>\n\n                            И нажмите на кнопку \"Запустить в любом случае\".\n\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/2_protect.png\" alt=\"Application\"/>\n\n                            После чего подтвердите запуск установщика.\n\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/3_protect.png\" alt=\"Application\"/>\n\n                            После завершения установки нажмите кнопку завершить и приложение запустится автоматически.\n\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/4_launch.png\" alt=\"Application\"/>\n\n                            После запуска клиента в системном трее появится иконка приложения. Кликните по иконке и откройте настройки.\n\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/ru/5_tray.png\" alt=\"Application\"/>\n                            <br/>\n                            Нажмите кнопку \"Добавить токен\".\n                            <br/>\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/windows/ru/7_load_config.png\" alt=\"Application\"/>\n                            <br/>\n                            Вставьте сюда токен из <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram-бота</a> и сохраните\n                            <br/><br/>\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/windows/ru/8_select_file.png\" alt=\"Application\"/>\n                            <br/>\n                            После открытия появится список доступных серверов, далее нужно просто закрыть окно настроек.\n                            <br/><br/>\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/windows/ru/9_save.png\" alt=\"Application\"/>\n                            <br/>\n                            В системном трее кликните по иконке приложения и выберите \"Умное подключение\". \"Умное подключение\" подберет наиболее оптимальный сервер.\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/ru/10_run.png\" alt=\"Application\"/>\n                            <br/>\n                            Готово!\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/ru/11_running.png\" alt=\"Application\"/>\n                        </p>\n\n                    </div>\n\n                    <div class=\"toolbox-ad language-en\">\n                        <h3>Installation and Setup</h3>\n                        <br/>\n\n                        <p>\n                            Go to the <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram bot</a> and generate a token by sending the <code>/token</code> command, then copy it.\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/telegram_token_ru.png\" alt=\"Settings\"/>\n                        </p>\n\n                        <p>\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/1_protect.png\" alt=\"Application\"/>\n\n                            Then click \"Run anyway\".\n\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/2_protect.png\" alt=\"Application\"/>\n\n                            Confirm the installer launch.\n\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/3_protect.png\" alt=\"Application\"/>\n\n                            After the installation is complete, click the finish button, and the application will launch automatically.\n\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/4_launch.png\" alt=\"Application\"/>\n\n                            After the client launches, the application icon will appear in the system tray. Click on the icon and open the settings.\n\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/5_tray.png\" alt=\"Application\"/>\n                            <br/>\n                            Click the \"Add Token\" button.\n                            <br/>\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/windows/en/7_load_config.png\" alt=\"Application\"/>\n                            <br/>\n                            Paste the token from the <a target=\"_blank\" href=\"https://t.me/fptn_bot\">Telegram bot</a> and save it.\n                            <br/><br/>\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/windows/en/8_select_file.png\" alt=\"Application\"/>\n                            <br/>\n                            After saving, a list of available servers will appear. Simply close the settings window.\n                            <br/><br/>\n                            <img style=\"width: 100%\" class=\"img-center\" src=\"images/windows/en/9_save.png\" alt=\"Application\"/>\n                            <br/>\n                            In the system tray, click on the application icon and select \"Smart Connection\". This will choose the most optimal server for you.\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/10_run.png\" alt=\"Application\"/>\n                            <br/>\n                            Done!\n                            <br/><br/>\n                            <img style=\"width: 100%; max-width: 400px\" class=\"img-center\" src=\"images/windows/en/11_running.png\" alt=\"Application\"/>\n                        </p>\n\n                    </div>\n\n\n                </div>\n\n                <div class=\"toolbox-ad shared-info language-ru\">\n                    <p>\n                        А еще, можно легко превратить RaspberryPi/OrangePi в WiFi-точку доступа и установить на неё FPTN-клиент.\n                        В этом случае все устройства, подключённые к WiFi, получат доступ к интернету, обходя любые ограничения.\n                        <a target=\"_blank\" href=\"https://github.com/batchar2/fptn/blob/master/deploy/linux/wifi/README.ru.md\">Информация тут</a>\n\n                        <img style=\"width: 100%\" src=\"images/orangepi.jpg\" alt=\"Settings\"/>\n                    </p>\n                    <p>Любую помощь можно получить в <a href=\"https://t.me/fptn_project\" target=\"_blank\">\n                        нашем Telegram чате</a>!</p>\n\n                </div>\n                <div class=\"toolbox-ad shared-info language-en\">\n                    <p>\n                        You can also easily turn a Raspberry Pi or Orange Pi into a WiFi access point and install the FPTN client on it.\n                        In this case, all devices connected to the WiFi will have unrestricted internet access, bypassing any limitations.\n                        <a target=\"_blank\" href=\"https://github.com/batchar2/fptn/blob/master/deploy/linux/wifi/README.ru.md\">More information here</a>\n\n                        <img style=\"width: 100%\" src=\"images/orangepi.jpg\" alt=\"Settings\"/>\n                    </p>\n                    <p>For any assistance, feel free to join <a href=\"https://t.me/fptn_project\" target=\"_blank\">\n                        our Telegram chat</a>!</p>\n                </div>\n            </main>\n        </div>\n    </div>\n</div>\n<footer class=\"footer\">\n    <div class=\"container\">\n        <div class=\"row justify-content-center\">\n            <div class=\"white center\">\n                FPTN Project 2024\n            </div>\n        </div>\n    </div>\n</footer>\n<script src=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js\" integrity=\"sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz\" crossorigin=\"anonymous\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js\"></script>\n<script>\n    const owner = 'batchar2';\n    const repo = 'fptn';\n    let tag_name = ''\n\n    fetch(`https://api.github.com/repos/${owner}/${repo}/releases/latest`)\n        .then(response => response.json())\n        .then(data => {\n            const releaseInfo = document.getElementById('version');\n            releaseInfo.innerHTML = data.tag_name;\n            tag_name = data.tag_name\n        })\n        .catch(error => {\n            console.error('Error fetching release data:', error);\n            document.getElementById('release-info').textContent = 'Failed to load release information.';\n        })\n    function openTab(tabName) {\n        const tabs = document.getElementsByClassName('tablink');\n        const downloads = document.getElementsByClassName('download');\n        for (let i = 0; i < tabs.length; i++) {\n            tabs[i].classList.remove('active');\n            downloads[i].classList.remove('active');\n            if (downloads[i].classList.contains(tabName)) {\n                downloads[i].classList.add('active');\n            }\n        }\n        document.querySelector(`[onclick=\"openTab('${tabName}')\"]`).classList.add('active');\n    }\n    function downloadUrl(name) {\n        let url = ''\n        switch (name) {\n            case 'macos_m':\n                url = `https://github.com/${owner}/${repo}/releases/latest/download/fptn-client-${tag_name}-apple-silicon.pkg`\n                break;\n              case 'macos_intel':\n                url = `https://github.com/${owner}/${repo}/releases/latest/download/fptn-client-${tag_name}-intel.pkg`\n                break;\n            case 'linux_l_server':\n                url = `https://github.com/${owner}/${repo}/releases/latest/download/fptn-server-${tag_name}-ubuntu22.04-amd64.deb`\n                break;\n            case 'linux_a_server':\n                url = `https://github.com/${owner}/${repo}/releases/latest/download/fptn-server-${tag_name}-ubuntu22.04-arm64.deb`\n                break;\n            case 'linux_l_client':\n                url = `https://github.com/${owner}/${repo}/releases/latest/download/fptn-client-${tag_name}-ubuntu22.04-amd64.deb`\n                break;\n            case 'linux_a_client':\n                url = `https://github.com/${owner}/${repo}/releases/latest/download/fptn-client-${tag_name}-ubuntu22.04-arm64.deb`\n                break;\n            case 'linux_l_client_cli':\n                url = `https://github.com/${owner}/${repo}/releases/latest/download/fptn-client-cli-${tag_name}-ubuntu22.04-amd64.deb`\n                break;\n            case 'linux_a_client_cli':\n                url = `https://github.com/${owner}/${repo}/releases/latest/download/fptn-client-cli-${tag_name}-ubuntu22.04-arm64.deb`\n                break;\n            case 'w_client':\n                url = `https://github.com/${owner}/${repo}/releases/latest/download/FptnClientInstaller-${tag_name}-windows-x64_x86.zip`\n                break;\n            case 'notes':\n                url = `https://github.com/${owner}/${repo}/releases/latest`\n                break;\n            case 'android_apk':\n                url = `https://storage.googleapis.com/fptn.org/APK/fptn-client.apk`\n                break;\n            case 'google_play':\n                url = `https://play.google.com/store/apps/details?id=org.fptn.vpn`\n                break;\n            default:\n        }\n        window.open(url, '_blank').focus();\n    }\n\n    let language = window.navigator.language;\n    let languageFistTwo = language.substr(0,2);\n    let lanDiv = document.querySelector('.dropdown-toggle');\n\n    function hideBlocks(lan) {\n        if (lan === 'ru'){\n            const elements = document.querySelectorAll('.language-ru')\n            elements.forEach(elem => {\n                elem.classList.add('active')\n            })\n            const elementsA = document.querySelectorAll('.language-en')\n            elementsA.forEach(elem => {\n                elem.classList.remove('active')\n            })\n            lanDiv.textContent = 'Русский'\n        } else {\n            const elements = document.querySelectorAll('.language-en')\n            elements.forEach(elem => {\n                elem.classList.add('active')\n            })\n            const elementsA = document.querySelectorAll('.language-ru')\n            elementsA.forEach(elem => {\n                elem.classList.remove('active')\n            })\n            lanDiv.textContent = 'English'\n        }\n    }\n\n    hideBlocks(languageFistTwo)\n\n    function editLan(lan) {\n        hideBlocks(lan)\n    }\n\n    var swiper = new Swiper(\".mySwiper\", {\n      pagination: {\n        el: \".swiper-pagination\",\n      },\n      navigation: {\n        nextEl: \".swiper-button-next\",\n        prevEl: \".swiper-button-prev\",\n      },\n    });\n</script>\n</body>\n</html>"
  },
  {
    "path": "pyproject.toml",
    "content": "[tool.black]\nline-length = 120\nextend-exclude = '''\ncpplint\\.py\n'''"
  },
  {
    "path": "renovate.json",
    "content": "{\n  \"extends\": [\n    \"config:recommended\",\n    \":dependencyDashboard\"\n  ],\n  \"enabledManagers\": [\n    \"conan\"\n  ],\n  \"conan\": {\n    \"enabled\": true,\n    \"managerFilePatterns\": [\n      \"/conanfile.txt/\",\n      \"/conanfile.py/\"\n    ]\n  }\n}\n"
  },
  {
    "path": "src/common/client_id.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <cstdint>\n\nnamespace fptn {\nusing ClientID = std::uint64_t;\n\n#define MAX_CLIENT_ID (UINT64_MAX)\n}  // namespace fptn\n"
  },
  {
    "path": "src/common/data/channel.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <atomic>\n#include <chrono>\n#include <condition_variable>\n#include <memory>\n#include <mutex>\n#include <optional>\n#include <thread>\n#include <utility>\n\n#include <boost/circular_buffer.hpp>\n#include <boost/circular_buffer/space_optimized.hpp>\n\n#include \"common/network/ip_packet.h\"\n\nnamespace fptn::common::data {\nclass Channel {\n public:\n  // Increase default capacity for high throughput\n  explicit Channel(std::size_t max_capacity = 8192) {\n    buffer_.set_capacity(max_capacity);\n  }\n  void Push(network::IPPacketPtr pkt) noexcept {\n    {\n      const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n      if (buffer_.size() < buffer_.capacity()) {\n        buffer_.push_back(std::move(pkt));\n      }\n      // If buffer full, drop packet (better than unbounded growth or blocking)\n    }\n    condvar_.notify_one();\n  }\n\n  network::IPPacketPtr WaitForPacket(\n      const std::chrono::milliseconds& duration) noexcept {\n    std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n    // exists\n    if (!buffer_.empty()) {\n      auto pkt = std::move(buffer_.front());\n      buffer_.pop_front();\n      return pkt;\n    }\n    // wait for data or timeout\n    if (condvar_.wait_for(\n            lock, duration, [this] { return !buffer_.empty(); })) {\n      auto pkt = std::move(buffer_.front());\n      buffer_.pop_front();\n      return pkt;\n    }\n    return nullptr;\n  }\n\n protected:\n  mutable std::mutex mutex_;\n  std::condition_variable condvar_;\n  boost::circular_buffer_space_optimized<network::IPPacketPtr> buffer_;\n};\n\nusing ChannelPtr = std::unique_ptr<Channel>;\n}  // namespace fptn::common::data\n"
  },
  {
    "path": "src/common/data/channel_async.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <atomic>\n#include <chrono>\n#include <condition_variable>\n#include <future>\n#include <memory>\n#include <mutex>\n#include <optional>\n#include <thread>\n#include <utility>\n\n#include <boost/asio.hpp>\n#include <boost/asio/awaitable.hpp>\n#include <boost/asio/co_spawn.hpp>\n#include <boost/asio/experimental/parallel_group.hpp>\n#include <boost/asio/use_future.hpp>\n#include <boost/circular_buffer.hpp>\n#include <boost/circular_buffer/space_optimized.hpp>\n\n#include \"common/network/ip_packet.h\"\n\nnamespace fptn::common::data {\nnamespace this_coro = boost::asio::this_coro;\nusing boost::asio::use_awaitable;\n\nclass ChannelAsync {\n public:\n  explicit ChannelAsync(\n      boost::asio::io_context& ioc, const std::size_t max_capacity = 8192)\n      : ioc_(ioc), notify_timer_(ioc) {\n    buffer_.set_capacity(max_capacity);\n    notify_timer_.expires_at(std::chrono::steady_clock::time_point::max());\n  }\n\n  void Push(network::IPPacketPtr pkt) {\n    {\n      const std::unique_lock<std::mutex> lock(mutex_);\n      if (buffer_.size() < buffer_.capacity()) {\n        buffer_.push_back(std::move(pkt));\n      }\n    }\n    try {\n      condvar_.notify_one();\n      notify_timer_.cancel();  // Trigger async waiter if any\n    } catch (...) {\n      SPDLOG_WARN(\"ChannelAsync::Push unexpected exception: \");\n    }\n  }\n\n  network::IPPacketPtr WaitForPacket(\n      const std::chrono::milliseconds& duration) {\n    std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n    // exists\n    if (!buffer_.empty()) {\n      auto pkt = std::move(buffer_.front());\n      buffer_.pop_front();\n      return pkt;\n    }\n    // wait for data or timeout\n    if (condvar_.wait_for(\n            lock, duration, [this] { return !buffer_.empty(); })) {\n      auto pkt = std::move(buffer_.front());\n      buffer_.pop_front();\n      return pkt;\n    }\n    return nullptr;\n  }\n\n  boost::asio::awaitable<std::optional<network::IPPacketPtr>>\n  WaitForPacketAsync(std::chrono::milliseconds timeout) {\n    {\n      const std::lock_guard<std::mutex> lock(mutex_);  // mutex\n      if (!buffer_.empty()) {\n        auto pkt = std::move(buffer_.front());\n        buffer_.pop_front();\n        co_return pkt;\n      }\n    }\n\n    boost::asio::steady_timer timeout_timer(ioc_);\n    timeout_timer.expires_after(timeout);\n\n    boost::asio::steady_timer local_notify_timer(ioc_);\n    local_notify_timer.expires_at(std::chrono::steady_clock::time_point::max());\n    {\n      std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n      if (!buffer_.empty()) {\n        auto pkt = std::move(buffer_.front());\n        buffer_.pop_front();\n        co_return pkt;\n      }\n      lock.unlock();\n\n      co_await boost::asio::experimental::make_parallel_group(\n          timeout_timer.async_wait(boost::asio::deferred),\n          local_notify_timer.async_wait(boost::asio::deferred))\n          .async_wait(\n              boost::asio::experimental::wait_for_one(), boost::asio::deferred);\n    }\n\n    {\n      const std::lock_guard<std::mutex> lock(mutex_);  // mutex\n      if (!buffer_.empty()) {\n        auto pkt = std::move(buffer_.front());\n        buffer_.pop_front();\n        co_return pkt;\n      }\n    }\n    co_return std::nullopt;\n  }\n\n protected:\n  boost::asio::io_context& ioc_;\n  mutable boost::asio::steady_timer notify_timer_;\n\n  mutable std::mutex mutex_;\n  std::condition_variable condvar_;\n\n  boost::circular_buffer_space_optimized<network::IPPacketPtr> buffer_;\n};\n\nusing ChannelAsyncPtr = std::unique_ptr<ChannelAsync>;\n}  // namespace fptn::common::data\n"
  },
  {
    "path": "src/common/jwt_token/token_manager.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <chrono>\n#include <fstream>\n#include <memory>\n#include <mutex>\n#include <string>\n#include <utility>\n\n#include <jwt-cpp/base.h>  // NOLINT(build/include_order)\n#include <jwt-cpp/jwt.h>   // NOLINT(build/include_order)\n#include <jwt-cpp/traits/nlohmann-json/defaults.h>  // NOLINT(build/include_order)\n#include <nlohmann/json.hpp>  // NOLINT(build/include_order)\n#include <spdlog/spdlog.h>    // NOLINT(build/include_order)\n\nnamespace fptn::common::jwt_token {\nclass TokenManager {\n public:\n  TokenManager(\n      const std::string& server_crt_path, const std::string& server_key_path)\n      : server_crt_path_(server_crt_path),\n        server_key_path_(server_key_path),\n        server_crt_(ReadFromFile(server_crt_path_)),\n        server_key_(ReadFromFile(server_key_path_)) {}\n\n  [[nodiscard]] std::pair<std::string, std::string> Generate(\n      const std::string& username, int bandwidth_bit) const noexcept {\n    const auto now = std::chrono::system_clock::now();\n    // CHECK JWT\n    const auto access_token =\n        jwt::create<jwt::traits::nlohmann_json>()\n            .set_issuer(\"auth0\")\n            .set_type(\"JWT\")\n            .set_id(\"fptn\")\n            .set_issued_at(now)\n            .set_expires_at(now + std::chrono::seconds{36000})\n            .set_payload_claim(\"username\", username)\n            .set_payload_claim(\"bandwidth_bit\", bandwidth_bit)\n            .sign(jwt::algorithm::rs256(\"\", server_key_, \"\", \"\"));\n    return std::make_pair(access_token, \"\");\n  }\n\n  bool Validate(const std::string& token,\n      std::string& username,\n      std::size_t& bandwidth_bit) const noexcept {\n    // CHECK IT\n    try {\n      auto decoded = jwt::decode<jwt::traits::nlohmann_json>(token);\n      username = decoded.get_payload_claim(\"username\").as_string();\n      bandwidth_bit = decoded.get_payload_claim(\"bandwidth_bit\").as_integer();\n\n      auto verifier =\n          jwt::verify<jwt::default_clock, jwt::traits::nlohmann_json>(\n              jwt::default_clock())\n              .allow_algorithm(jwt::algorithm::rs256(\"\", server_key_, \"\", \"\"))\n              .with_issuer(\"auth0\");\n      return true;\n    } catch (const jwt::error::invalid_json_exception& e) {\n      SPDLOG_ERROR(\"Token parsing error: {}\", e.what());\n    } catch (const jwt::error::token_verification_exception& e) {\n      SPDLOG_ERROR(\"Unauthorized: Invalid token: {}\", e.what());\n    } catch (const std::exception& e) {\n      SPDLOG_ERROR(\"Handle other standard exceptions: {}\", e.what());\n    } catch (...) {\n      SPDLOG_ERROR(\"Undefined error\");\n    }\n    return false;\n  }\n\n  const std::string& ServerCrtPath() const noexcept { return server_crt_path_; }\n\n  const std::string& ServerKeyPath() const noexcept { return server_key_path_; }\n\n private:\n  std::string ReadFromFile(const std::string& path) noexcept {\n    std::ifstream is(path, std::ios::binary);\n    if (!is) {\n      SPDLOG_ERROR(\"Failed to open file: {}\", path);\n      return {};\n    }\n    std::string contents(\n        (std::istreambuf_iterator<char>(is)), std::istreambuf_iterator<char>());\n    return contents;\n  }\n\n private:\n  const std::string server_crt_path_;\n  const std::string server_key_path_;\n\n  const std::string server_crt_;\n  const std::string server_key_;\n};\n\nusing TokenManagerSPtr = std::shared_ptr<TokenManager>;\n}  // namespace fptn::common::jwt_token\n"
  },
  {
    "path": "src/common/logger/logger.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <clocale>\n#include <filesystem>\n#include <iostream>\n#include <memory>\n#include <string>\n#include <vector>\n\n#ifdef __ANDROID__\n#include <spdlog/sinks/android_sink.h>  // NOLINT(build/include_order)\n#elif __APPLE__\n#include <TargetConditionals.h>  // NOLINT(build/include_order)\n#include <pwd.h>                 // NOLINT(build/include_order)\n#include <unistd.h>              // NOLINT(build/include_order)\n#elif __linux__\n#include <pwd.h>     // NOLINT(build/include_order)\n#include <unistd.h>  // NOLINT(build/include_order)\n#elif _WIN32\n#include <windows.h>\n#endif\n\n#include <spdlog/sinks/rotating_file_sink.h>  // NOLINT(build/include_order)\n#include <spdlog/sinks/stdout_color_sinks.h>  // NOLINT(build/include_order)\n#include <spdlog/spdlog.h>                    // NOLINT(build/include_order)\n\nnamespace fptn::logger {\ninline bool init(const std::string& app_name) {\n  // Set locale\n#ifdef _WIN32\n  SetConsoleOutputCP(CP_UTF8);\n  SetConsoleCP(CP_UTF8);\n  std::ios::sync_with_stdio(false);\n  std::wcout.imbue(std::locale(\".UTF-8\"));\n#endif\n  std::locale::global(std::locale::classic());\n  setlocale(LC_ALL, \"en_US.UTF-8\");\n  try {\n#ifdef __ANDROID__\n    auto logger = spdlog::android_logger_mt(\"android\", app_name);\n#elif TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR\n    // iOS specific logging - use console only since filesystem access is\n    // restricted\n    auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();\n    auto logger = std::make_shared<spdlog::logger>(app_name, console_sink);\n    logger->flush_on(spdlog::level::debug);\n    spdlog::flush_every(std::chrono::seconds(3));\n#else\n\n#ifdef __linux__\n    const std::filesystem::path log_dir = \"/var/log/fptn/\";\n#elif defined(__APPLE__) && TARGET_OS_MAC\n    const std::filesystem::path log_dir = []() {\n      if (const char* home = getenv(\"HOME\")) {\n        return std::filesystem::path(home) / \"Library/Logs/fptn\";\n      }\n      struct passwd pwd = {};\n      struct passwd* result = nullptr;\n      char buffer[1024] = {};\n      if (getpwuid_r(getuid(), &pwd, buffer, sizeof(buffer), &result) != 0 ||\n          !result) {\n        throw std::runtime_error(\"Failed to get user home directory\");\n      }\n      return std::filesystem::path(pwd.pw_dir) / \"Library/Logs/fptn\";\n    }();\n#elif _WIN32\n    const std::filesystem::path log_dir = \"./logs/\";\n#endif\n    const std::filesystem::path log_file = log_dir / (app_name + \".log\");\n    if (!std::filesystem::exists(log_dir)) {\n      try {\n        std::filesystem::create_directories(log_dir);\n      } catch (const std::filesystem::filesystem_error& e) {\n        std::cerr << \"Failed to create log directory: \" << e.what() << \"\\n\";\n        return false;\n      }\n    }\n    auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();\n    auto file_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>(\n        log_file.string(), 12 * 1024 * 1024, 3, true);\n    auto logger = std::make_shared<spdlog::logger>(\n        app_name, spdlog::sinks_init_list{console_sink, file_sink});\n    logger->flush_on(spdlog::level::debug);\n    spdlog::flush_every(std::chrono::seconds(3));\n#endif\n\n    spdlog::set_default_logger(logger);\n    spdlog::set_level(spdlog::level::info);\n    spdlog::set_pattern(\"[%Y-%m-%d %H:%M:%S] [%^%l%$] [%s:%#] %v\");\n\n#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR\n    SPDLOG_INFO(\"Logger initialized for iOS - console output only\");\n#elif __ANDROID__\n    SPDLOG_INFO(\"Logger inited\");\n#else\n    SPDLOG_INFO(\"Logging to file: {}\", log_file.string());\n    SPDLOG_INFO(\"FPTN version: {}\", FPTN_VERSION);\n#endif\n    return true;\n  } catch (const spdlog::spdlog_ex& ex) {\n#ifdef __ANDROID__\n    __android_log_print(ANDROID_LOG_ERROR, \"FPTN\",\n        \"Logger initialization failed: %s\", ex.what());\n#else\n    std::cerr << \"Logger initialization failed: \" << ex.what() << \"\\n\";\n#endif\n  } catch (...) {\n    std::cerr << \"Unhandled exception caught in logger\\n\";\n  }\n  return false;\n}\n}  // namespace fptn::logger\n"
  },
  {
    "path": "src/common/network/ip_address.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <cstdint>\n#include <string>\n#include <utility>\n\n#ifdef FPTN_IP_ADDRESS_WITHOUT_PCAP\n#include <boost/asio/ip/address.hpp>\n#else\n#include <pcapplusplus/IpAddress.h>\n#endif\n\nnamespace fptn::common::network {\n\n#ifdef FPTN_IP_ADDRESS_WITHOUT_PCAP\n\ntemplate <class T>\nclass IPAddress {\n public:\n  // Default constructor\n  IPAddress() = default;\n\n  explicit IPAddress(const std::string& ip) : ip_(ip) {\n    if (!ip.empty()) {\n      try {\n        ip_impl_ = boost::asio::ip::make_address(ip);\n      } catch (const boost::system::system_error&) {\n        // Invalid address, leave ip_impl_ as default constructed\n        ip_impl_ = T();\n      }\n    }\n  }\n\n  T Get() const noexcept { return ip_impl_; }\n\n  bool IsEmpty() const { return ip_.empty() || ip_impl_ == T(); }\n\n  bool IsValid() const { return !ip_.empty() && ip_impl_ != T(); }\n\n  const std::string& ToString() const { return ip_; }\n\n  // Add copy and move constructors/assignment for base class\n  IPAddress(const IPAddress& other)\n      : ip_(other.ip_), ip_impl_(other.ip_impl_) {}\n\n  IPAddress(IPAddress&& other) noexcept\n      : ip_(std::move(other.ip_)), ip_impl_(std::move(other.ip_impl_)) {}\n\n  IPAddress& operator=(const IPAddress& other) {\n    if (this != &other) {\n      ip_ = other.ip_;\n      ip_impl_ = other.ip_impl_;\n    }\n    return *this;\n  }\n\n  IPAddress& operator=(IPAddress&& other) noexcept {\n    if (this != &other) {\n      ip_ = std::move(other.ip_);\n      ip_impl_ = std::move(other.ip_impl_);\n    }\n    return *this;\n  }\n\n  bool operator!=(const IPAddress<T>& other) const noexcept {\n    return ip_ != other.ip_ || ip_impl_ != other.ip_impl_;\n  }\n\n  bool operator==(const IPAddress<T>& other) const noexcept {\n    return ip_ == other.ip_ && ip_impl_ == other.ip_impl_;\n  }\n\n  std::uint32_t ToInt() const {\n    if (ip_impl_.is_v4()) {\n      return ip_impl_.to_v4().to_uint();\n    }\n    return 0;  // For IPv6, return 0 or handle differently\n  }\n\n protected:\n  std::string ip_;\n  T ip_impl_;\n};\n\nclass IPv4Address : public IPAddress<boost::asio::ip::address> {\n public:\n  // Default constructor\n  IPv4Address() = default;\n\n  // Constructor from string\n  explicit IPv4Address(const std::string& ip)\n      : IPAddress<boost::asio::ip::address>(ip) {\n    // Additional validation for IPv4\n    if (!ip_.empty() && !ip_impl_.is_v4()) {\n      ip_impl_ = boost::asio::ip::address();\n    }\n  }\n\n  // Constructor from boost::asio::ip::address object\n  explicit IPv4Address(const boost::asio::ip::address& ip_addr)\n      : IPAddress<boost::asio::ip::address>(ip_addr.to_string()) {\n    if (!ip_addr.is_v4()) {\n      ip_impl_ = boost::asio::ip::address();\n    }\n  }\n\n  // Copy constructor\n  IPv4Address(const IPv4Address& other)\n      : IPAddress<boost::asio::ip::address>(other) {}\n\n  // Move constructor\n  IPv4Address(IPv4Address&& other) noexcept\n      : IPAddress<boost::asio::ip::address>(std::move(other)) {}\n\n  // Copy assignment operator\n  IPv4Address& operator=(const IPv4Address& other) {\n    if (this != &other) {\n      IPAddress<boost::asio::ip::address>::operator=(other);\n    }\n    return *this;\n  }\n\n  // Move assignment operator\n  IPv4Address& operator=(IPv4Address&& other) noexcept {\n    if (this != &other) {\n      IPAddress<boost::asio::ip::address>::operator=(std::move(other));\n    }\n    return *this;\n  }\n\n  static IPv4Address Create(const std::string& ip) { return IPv4Address(ip); }\n\n  static IPv4Address Create(const boost::asio::ip::address& ip_addr) {\n    return IPv4Address(ip_addr);\n  }\n\n  static IPv4Address Create(const IPv4Address& ip_addr) {\n    return IPv4Address(ip_addr);\n  }\n\n  // Additional IPv4-specific methods\n  virtual bool IsValid() const {\n    return IPAddress<boost::asio::ip::address>::IsValid() && ip_impl_.is_v4();\n  }\n\n  virtual std::uint32_t ToInt() const {\n    if (ip_impl_.is_v4()) {\n      return ip_impl_.to_v4().to_uint();\n    }\n    return 0;\n  }\n};\n\nclass IPv6Address : public IPAddress<boost::asio::ip::address> {\n public:\n  // Default constructor\n  IPv6Address() = default;\n\n  // Constructor from string\n  explicit IPv6Address(const std::string& ip)\n      : IPAddress<boost::asio::ip::address>(ip) {\n    // Additional validation for IPv6\n    if (!ip_.empty() && !ip_impl_.is_v6()) {\n      ip_impl_ = boost::asio::ip::address();\n    }\n  }\n\n  // Constructor from boost::asio::ip::address object\n  explicit IPv6Address(const boost::asio::ip::address& ip_addr)\n      : IPAddress<boost::asio::ip::address>(ip_addr.to_string()) {\n    if (!ip_addr.is_v6()) {\n      ip_impl_ = boost::asio::ip::address();\n    }\n  }\n\n  // Copy constructor\n  IPv6Address(const IPv6Address& other)\n      : IPAddress<boost::asio::ip::address>(other) {}\n\n  // Move constructor\n  IPv6Address(IPv6Address&& other) noexcept\n      : IPAddress<boost::asio::ip::address>(std::move(other)) {}\n\n  // Copy assignment operator\n  IPv6Address& operator=(const IPv6Address& other) {\n    if (this != &other) {\n      IPAddress<boost::asio::ip::address>::operator=(other);\n    }\n    return *this;\n  }\n\n  // Move assignment operator\n  IPv6Address& operator=(IPv6Address&& other) noexcept {\n    if (this != &other) {\n      IPAddress<boost::asio::ip::address>::operator=(std::move(other));\n    }\n    return *this;\n  }\n\n  static IPv6Address Create(const std::string& ip) { return IPv6Address(ip); }\n\n  static IPv6Address Create(const boost::asio::ip::address& ip_addr) {\n    return IPv6Address(ip_addr);\n  }\n\n  static IPv6Address Create(const IPv6Address& ip_addr) {\n    return IPv6Address(ip_addr);\n  }\n\n  // Additional IPv6-specific methods\n  virtual bool IsValid() const {\n    return IPAddress<boost::asio::ip::address>::IsValid() && ip_impl_.is_v6();\n  }\n};\n\n#else\n\ntemplate <class T>\nclass IPAddress {\n public:\n  // Default constructor\n  IPAddress() = default;\n\n  explicit IPAddress(const std::string& ip) : ip_(ip) {\n    try {\n      ip_impl_ = T(ip);\n    } catch (...) {\n      ip_impl_ = T();\n    }\n  }\n\n  T Get() const noexcept { return ip_impl_; }\n\n  bool IsEmpty() const { return ip_.empty() || ip_impl_ == T(); }\n\n  const std::string& ToString() const { return ip_; }\n\n  // Add copy and move constructors/assignment for base class\n  IPAddress(const IPAddress& other)\n      : ip_(other.ip_), ip_impl_(other.ip_impl_) {}\n  IPAddress(IPAddress&& other) noexcept\n      : ip_(std::move(other.ip_)), ip_impl_(std::move(other.ip_impl_)) {}\n\n  IPAddress& operator=(const IPAddress& other) {\n    if (this != &other) {\n      ip_ = other.ip_;\n      ip_impl_ = other.ip_impl_;\n    }\n    return *this;\n  }\n\n  IPAddress& operator=(IPAddress&& other) noexcept {\n    if (this != &other) {\n      ip_ = std::move(other.ip_);\n      ip_impl_ = std::move(other.ip_impl_);\n    }\n    return *this;\n  }\n\n  bool operator!=(const IPAddress<T>& other) const noexcept {\n    return ip_ != other.ip_ || ip_impl_ != other.ip_impl_;\n  }\n\n  bool operator==(const IPAddress<T>& other) const noexcept {\n    return ip_ == other.ip_ && ip_impl_ == other.ip_impl_;\n  }\n\n  std::uint32_t ToInt() const { return ip_impl_.toInt(); }\n\n private:\n  std::string ip_;\n  T ip_impl_;\n};\n\nclass IPv4Address : public IPAddress<pcpp::IPv4Address> {\n public:\n  // Default constructor - explicitly calls base class default constructor\n  IPv4Address() = default;\n\n  // Constructor from string - explicitly calls base class constructor\n  explicit IPv4Address(std::string ip)\n      : IPAddress<pcpp::IPv4Address>(std::move(ip)) {}\n\n  // Constructor from pcpp::IPv4Address object - explicitly calls base class\n  // constructor\n  explicit IPv4Address(const pcpp::IPv4Address& ip_addr)\n      : IPAddress<pcpp::IPv4Address>(ip_addr.toString()) {}\n\n  // Copy constructor - explicitly calls base class copy constructor\n  IPv4Address(const IPv4Address& other) : IPAddress<pcpp::IPv4Address>(other) {}\n\n  // Move constructor - explicitly calls base class move constructor\n  IPv4Address(IPv4Address&& other) noexcept\n      : IPAddress<pcpp::IPv4Address>(std::move(other)) {}\n\n  // Copy assignment operator\n  IPv4Address& operator=(const IPv4Address& other) {\n    if (this != &other) {\n      IPAddress<pcpp::IPv4Address>::operator=(other);\n    }\n    return *this;\n  }\n\n  // Move assignment operator\n  IPv4Address& operator=(IPv4Address&& other) noexcept {\n    if (this != &other) {\n      IPAddress<pcpp::IPv4Address>::operator=(std::move(other));\n    }\n    return *this;\n  }\n\n  static IPv4Address Create(std::string ip) {\n    return IPv4Address(std::move(ip));\n  }\n\n  static IPv4Address Create(const pcpp::IPv4Address& ip_addr) {\n    return IPv4Address(ip_addr);\n  }\n\n  static IPv4Address Create(const IPv4Address& ip_addr) {\n    return IPv4Address(ip_addr);\n  }\n};\n\nclass IPv6Address : public IPAddress<pcpp::IPv6Address> {\n public:\n  // Default constructor - explicitly calls base class default constructor\n  IPv6Address() = default;\n\n  // Constructor from string - explicitly calls base class constructor\n  explicit IPv6Address(std::string ip)\n      : IPAddress<pcpp::IPv6Address>(std::move(ip)) {}\n\n  // Constructor from pcpp::IPv6Address object - explicitly calls base class\n  // constructor\n  explicit IPv6Address(const pcpp::IPv6Address& ip_addr)\n      : IPAddress<pcpp::IPv6Address>(ip_addr.toString()) {}\n\n  // Copy constructor - explicitly calls base class copy constructor\n  IPv6Address(const IPv6Address& other) : IPAddress<pcpp::IPv6Address>(other) {}\n\n  // Move constructor - explicitly calls base class move constructor\n  IPv6Address(IPv6Address&& other) noexcept\n      : IPAddress<pcpp::IPv6Address>(std::move(other)) {}\n\n  // Copy assignment operator\n  IPv6Address& operator=(const IPv6Address& other) {\n    if (this != &other) {\n      IPAddress<pcpp::IPv6Address>::operator=(other);\n    }\n    return *this;\n  }\n\n  // Move assignment operator\n  IPv6Address& operator=(IPv6Address&& other) noexcept {\n    if (this != &other) {\n      IPAddress<pcpp::IPv6Address>::operator=(std::move(other));\n    }\n    return *this;\n  }\n\n  static IPv6Address Create(std::string ip) {\n    return IPv6Address(std::move(ip));\n  }\n\n  static IPv6Address Create(const pcpp::IPv6Address& ip_addr) {\n    return IPv6Address(ip_addr);\n  }\n\n  static IPv6Address Create(const IPv6Address& ip_addr) {\n    return IPv6Address(ip_addr);\n  }\n};\n\n#endif\n\n}  // namespace fptn::common::network\n"
  },
  {
    "path": "src/common/network/ip_packet.h",
    "content": "/*=============================================================================\r\nCopyright (c) 2024-2026 Stas Skokov\r\n\r\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\r\n=============================================================================*/\r\n\r\n#pragma once\r\n\r\n#include <array>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <memory>\r\n#include <string>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include \"common/utils/utils.h\"\r\n\r\n#if _WIN32\r\n#pragma warning(disable : 4996)\r\n#endif\r\n\r\n#if _WIN32\r\n#include <Winsock2.h>  // NOLINT(build/include_order)\r\n\r\n#include <openssl/base.h>  // NOLINT(build/include_order)\r\n#else\r\n#include <arpa/inet.h>\r\n#endif\r\n\r\n#include <iostream>\r\n\r\n#ifdef FPTN_IP_ADDRESS_WITHOUT_PCAP\r\n#include \"common/network/ip_address.h\"\r\n#else\r\n\r\n#include <boost/asio/ip/address_v4.hpp>\r\n#include <boost/asio/ip/address_v6.hpp>\r\n#include <pcapplusplus/ArpLayer.h>     // NOLINT(build/include_order)\r\n#include <pcapplusplus/EthLayer.h>     // NOLINT(build/include_order)\r\n#include <pcapplusplus/IPv4Layer.h>    // NOLINT(build/include_order)\r\n#include <pcapplusplus/IPv6Layer.h>    // NOLINT(build/include_order)\r\n#include <pcapplusplus/IcmpLayer.h>    // NOLINT(build/include_order)\r\n#include <pcapplusplus/IcmpV6Layer.h>  // NOLINT(build/include_order)\r\n#include <pcapplusplus/MacAddress.h>   // NOLINT(build/include_order)\r\n#include <pcapplusplus/Packet.h>       // NOLINT(build/include_order)\r\n\r\n#ifdef TCPOPT_CC\r\n#undef TCPOPT_CC\r\n#endif  // TCPOPT_CC\r\n#ifdef TCPOPT_CCNEW\r\n#undef TCPOPT_CCNEW\r\n#endif  // TCPOPT_CCNEW\r\n#ifdef TCPOPT_CCECHO\r\n#undef TCPOPT_CCECHO\r\n#endif  // TCPOPT_CCECHO\r\n\r\n#include <pcapplusplus/DnsLayer.h>  // NOLINT(build/include_order)\r\n#include <pcapplusplus/TcpLayer.h>  // NOLINT(build/include_order)\r\n#include <pcapplusplus/UdpLayer.h>  // NOLINT(build/include_order)\r\n\r\n#if _WIN32\r\n#pragma warning(default : 4996)\r\n#endif\r\n\r\n#endif\r\n\r\n#ifdef FPTN_WITH_LIBIDN2\r\n#include <idn2.h>\r\n#endif\r\n\r\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\r\n\r\n#include \"common/client_id.h\"\r\n#include \"common/network/ip_address.h\"\r\n\r\nnamespace fptn::common::network {\r\n\r\nusing IPPacketData = std::vector<std::uint8_t>;\r\n\r\n#define FPTN_PACKET_UNDEFINED_CLIENT_ID MAX_CLIENT_ID\r\n\r\n#ifndef FPTN_IP_ADDRESS_WITHOUT_PCAP\r\n\r\ninline bool CheckIPv4(const IPPacketData& buffer) {\r\n  return (static_cast<std::uint8_t>(buffer[0]) >> 4) == 4;\r\n}\r\n\r\ninline bool CheckIPv6(const IPPacketData& buffer) {\r\n  return (static_cast<std::uint8_t>(buffer[0]) >> 4) == 6;\r\n}\r\n\r\n#ifdef FPTN_WITH_LIBIDN2\r\n\r\ninline bool IsPunycode(const std::string& str) {\r\n  return str.find(\"xn--\") != std::string::npos;\r\n}\r\n\r\ninline std::string ConvertDomainToUnicode(const std::string& domain) {\r\n  if (domain.empty()) {\r\n    return domain;\r\n  }\r\n\r\n  char* result = nullptr;\r\n  const int ret = idn2_to_unicode_8z8z(domain.c_str(), &result, 0);\r\n\r\n  if (ret == IDN2_OK && result != nullptr) {\r\n    std::string unicode_result = result;\r\n    free(result);\r\n    return unicode_result;\r\n  }\r\n  if (result != nullptr) {\r\n    free(result);\r\n  }\r\n  return domain;\r\n}\r\n#endif\r\n\r\nclass IPPacket {\r\n public:\r\n  static std::unique_ptr<IPPacket> Parse(IPPacketData buffer,\r\n      fptn::ClientID client_id = FPTN_PACKET_UNDEFINED_CLIENT_ID) {\r\n    // Minimum IPv4 header size\r\n    if (buffer.empty() || buffer.size() < 20) {\r\n      return nullptr;\r\n    }\r\n    if (CheckIPv4(buffer)) {\r\n      auto packet = std::make_unique<IPPacket>(\r\n          std::move(buffer), client_id, pcpp::LINKTYPE_IPV4);\r\n      if (nullptr != packet->IPv4Layer()) {\r\n        return packet;\r\n      }\r\n    } else if (CheckIPv6(buffer)) {\r\n      auto packet = std::make_unique<IPPacket>(\r\n          std::move(buffer), client_id, pcpp::LINKTYPE_IPV6);\r\n      if (nullptr != packet->IPv6Layer()) {\r\n        return packet;\r\n      }\r\n    }\r\n    return nullptr;\r\n  }\r\n\r\n public:\r\n  IPPacket(IPPacketData data,\r\n      fptn::ClientID client_id,\r\n      const pcpp::LinkLayerType& ip_type)\r\n      : packet_data_(std::move(data)), client_id_(client_id) {\r\n    try {\r\n      raw_packet_ = pcpp::RawPacket(\r\n          reinterpret_cast<const uint8_t*>(packet_data_.data()),\r\n          static_cast<int>(packet_data_.size()), timeval{0, 0}, false, ip_type);\r\n\r\n      parsed_packet_ = pcpp::Packet(&raw_packet_, false);\r\n      if (pcpp::LINKTYPE_IPV4 == ip_type) {\r\n        ipv4_layer_ = parsed_packet_.getLayerOfType<pcpp::IPv4Layer>();\r\n      } else if (pcpp::LINKTYPE_IPV6 == ip_type) {\r\n        ipv6_layer_ = parsed_packet_.getLayerOfType<pcpp::IPv6Layer>();\r\n      }\r\n    } catch (const std::exception& e) {\r\n      SPDLOG_WARN(\r\n          \"IP Packet parsing exception (client {}): {}\", client_id_, e.what());\r\n    } catch (...) {\r\n      SPDLOG_WARN(\"Unknown error while parsing IP Packet\");\r\n    }\r\n  }\r\n\r\n  // NOLINTNEXTLINE(readability-convert-member-functions-to-static)\r\n  void ComputeCalculateFields() noexcept {\r\n    auto* tcp_layer = parsed_packet_.getLayerOfType<pcpp::TcpLayer>();\r\n    if (tcp_layer) {\r\n      tcp_layer->computeCalculateFields();\r\n    } else {\r\n      auto* udp_layer = parsed_packet_.getLayerOfType<pcpp::UdpLayer>();\r\n      if (udp_layer) {\r\n        udp_layer->computeCalculateFields();\r\n      }\r\n    }\r\n    if (ipv4_layer_) {\r\n      ipv4_layer_->computeCalculateFields();\r\n    } else if (ipv6_layer_) {\r\n      auto* icmp_layer = parsed_packet_.getLayerOfType<pcpp::IcmpV6Layer>();\r\n      if (icmp_layer) {\r\n        icmp_layer->computeCalculateFields();\r\n      }\r\n      ipv6_layer_->computeCalculateFields();\r\n    }\r\n  }\r\n\r\n  void SetClientId(fptn::ClientID client_id) noexcept {\r\n    client_id_ = client_id;\r\n  }\r\n\r\n  void SetDstIPv4Address(const pcpp::IPv4Address& dst) noexcept {\r\n    if (ipv4_layer_) {\r\n      ipv4_layer_->getIPv4Header()->timeToLive -= 1;\r\n      ipv4_layer_->setDstIPv4Address(dst);\r\n    }\r\n  }\r\n\r\n  void SetSrcIPv4Address(const pcpp::IPv4Address& src) noexcept {\r\n    if (ipv4_layer_) {\r\n      ipv4_layer_->getIPv4Header()->timeToLive -= 1;\r\n      ipv4_layer_->setSrcIPv4Address(src);\r\n    }\r\n  }\r\n\r\n  void SetDstIPv6Address(const pcpp::IPv6Address& dst) noexcept {\r\n    if (ipv6_layer_) {\r\n      ipv6_layer_->setDstIPv6Address(dst);\r\n    }\r\n  }\r\n\r\n  void SetSrcIPv6Address(const pcpp::IPv6Address& src) noexcept {\r\n    if (ipv6_layer_) {\r\n      ipv6_layer_->setSrcIPv6Address(src);\r\n    }\r\n  }\r\n\r\n  bool IsICMPv4() const {\r\n    const auto* icmp_v4 = parsed_packet_.getLayerOfType<pcpp::IcmpLayer>();\r\n    return icmp_v4 != nullptr;\r\n  }\r\n\r\n  bool IsICMPv6() const {\r\n    const auto* icmp_v6 = parsed_packet_.getLayerOfType<pcpp::IcmpV6Layer>();\r\n    return icmp_v6 != nullptr;\r\n  }\r\n\r\n  bool IsDns() const {\r\n    const auto* udp = parsed_packet_.getLayerOfType<pcpp::UdpLayer>();\r\n    if (udp && (udp->getDstPort() == 53 || udp->getSrcPort() == 53)) {\r\n      return GetDnsLayer() != nullptr;\r\n    }\r\n\r\n    const auto* tcp = parsed_packet_.getLayerOfType<pcpp::TcpLayer>();\r\n    if (tcp && (tcp->getDstPort() == 53 || tcp->getSrcPort() == 53)) {\r\n      return GetDnsLayer() != nullptr;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  std::optional<std::string> GetDnsDomain() const {\r\n    const auto* dns_layer = GetDnsLayer();\r\n    if (dns_layer) {\r\n      const auto* query = dns_layer->getFirstQuery();\r\n      if (query) {\r\n        std::string domain_name = query->getName();\r\n#ifdef FPTN_WITH_LIBIDN2\r\n        if (IsPunycode(domain_name)) {\r\n          return ConvertDomainToUnicode(domain_name);\r\n        }\r\n#endif\r\n        return domain_name;\r\n      }\r\n    }\r\n    return std::nullopt;\r\n  }\r\n\r\n  std::vector<fptn::common::network::IPv4Address> GetDnsIPv4Addresses() const {\r\n    const auto* dns_layer = GetDnsLayer();\r\n    if (!dns_layer) {\r\n      return {};\r\n    }\r\n\r\n    if (dns_layer->getDnsHeader()->queryOrResponse != 1) {\r\n      return {};\r\n    }\r\n\r\n    std::vector<fptn::common::network::IPv4Address> ipv4_addresses;\r\n    auto* answer = dns_layer->getFirstAnswer();\r\n\r\n    while (answer != nullptr) {\r\n      if (answer->getDnsType() == pcpp::DNS_TYPE_A) {\r\n        try {\r\n          const std::size_t data_offset = answer->getDataOffset();\r\n          const std::size_t data_length = answer->getDataLength();\r\n          if (data_length == 4) {\r\n            const std::uint8_t* dns_raw_data = dns_layer->getData();\r\n            const std::size_t dns_data_len = dns_layer->getDataLen();\r\n\r\n            if (data_offset + 4 <= dns_data_len) {\r\n              const uint8_t* ip_bytes = dns_raw_data + data_offset;\r\n              const std::uint32_t ip_int =\r\n                  (static_cast<uint32_t>(ip_bytes[0]) << 24) |\r\n                  (static_cast<uint32_t>(ip_bytes[1]) << 16) |\r\n                  (static_cast<uint32_t>(ip_bytes[2]) << 8) |\r\n                  static_cast<uint32_t>(ip_bytes[3]);\r\n\r\n              const auto addr = boost::asio::ip::make_address_v4(ip_int);\r\n              ipv4_addresses.emplace_back(addr.to_string());\r\n            }\r\n          }\r\n        } catch (const std::exception& e) {\r\n          SPDLOG_WARN(\"Failed to parse IPv4 from DNS answer '{}': {}\",\r\n              answer->getName(), e.what());\r\n        }\r\n      }\r\n      answer = dns_layer->getNextAnswer(answer);\r\n    }\r\n    return ipv4_addresses;\r\n  }\r\n\r\n  std::vector<fptn::common::network::IPv6Address> GetDnsIPv6Addresses() const {\r\n    const auto* dns_layer = GetDnsLayer();\r\n    if (!dns_layer) {\r\n      return {};\r\n    }\r\n\r\n    if (dns_layer->getDnsHeader()->queryOrResponse != 1) {\r\n      return {};\r\n    }\r\n\r\n    std::vector<fptn::common::network::IPv6Address> ipv6_addresses;\r\n    auto* answer = dns_layer->getFirstAnswer();\r\n\r\n    while (answer != nullptr) {\r\n      if (answer->getDnsType() == pcpp::DNS_TYPE_AAAA) {\r\n        try {\r\n          const std::size_t data_offset = answer->getDataOffset();\r\n          const std::size_t data_length = answer->getDataLength();\r\n\r\n          if (data_length == 16) {\r\n            const std::uint8_t* dns_raw_data = dns_layer->getData();\r\n            const std::size_t dns_data_len = dns_layer->getDataLen();\r\n\r\n            if (data_offset + 16 <= dns_data_len) {\r\n              const uint8_t* ip_bytes = dns_raw_data + data_offset;\r\n              std::array<unsigned char, 16> bytes;\r\n              std::memcpy(bytes.data(), ip_bytes, 16);\r\n\r\n              const auto addr = boost::asio::ip::make_address_v6(bytes);\r\n              ipv6_addresses.emplace_back(addr.to_string());\r\n            }\r\n          }\r\n        } catch (const std::exception& e) {\r\n          SPDLOG_WARN(\"Failed to parse IPv6 from DNS answer '{}': {}\",\r\n              answer->getName(), e.what());\r\n        }\r\n      }\r\n      answer = dns_layer->getNextAnswer(answer);\r\n    }\r\n    return ipv6_addresses;\r\n  }\r\n\r\n  fptn::ClientID ClientId() const noexcept { return client_id_; }\r\n\r\n  pcpp::Packet& Pkt() noexcept { return parsed_packet_; }\r\n\r\n  std::size_t Size() const noexcept { return packet_data_.size(); }\r\n\r\n  const pcpp::RawPacket* GetRawPacket() const noexcept {\r\n    return parsed_packet_.getRawPacket();\r\n  }\r\n\r\n protected:\r\n  pcpp::DnsLayer* GetDnsLayer() const {\r\n    try {\r\n      auto* udp_layer = parsed_packet_.getLayerOfType<pcpp::UdpLayer>();\r\n      if (udp_layer) {\r\n        return parsed_packet_.getLayerOfType<pcpp::DnsLayer>();\r\n      }\r\n      auto* tcp_layer = parsed_packet_.getLayerOfType<pcpp::TcpLayer>();\r\n      if (tcp_layer && tcp_layer->getLayerPayloadSize() >= 2) {\r\n        return parsed_packet_.getLayerOfType<pcpp::DnsLayer>();\r\n      }\r\n    } catch (...) {\r\n      // ignore\r\n    }\r\n    return nullptr;\r\n  }\r\n\r\n public:\r\n  // TODO(stas): Remove virtual functions in the future for better performance.\r\n  // TODO(stas): Anti-scan tests are currently inadequate and need improvement.\r\n  virtual ~IPPacket() = default;\r\n  virtual bool IsIPv4() const noexcept { return ipv4_layer_ != nullptr; }\r\n  virtual bool IsIPv6() const noexcept { return ipv6_layer_ != nullptr; }\r\n  virtual pcpp::IPv4Layer* IPv4Layer() noexcept { return ipv4_layer_; }\r\n  virtual pcpp::IPv6Layer* IPv6Layer() noexcept { return ipv6_layer_; }\r\n\r\n protected:\r\n  // for tests only\r\n  IPPacket() : client_id_(FPTN_PACKET_UNDEFINED_CLIENT_ID) {}\r\n\r\n private:\r\n  std::vector<std::uint8_t> packet_data_;\r\n  fptn::ClientID client_id_;\r\n  pcpp::RawPacket raw_packet_;\r\n  pcpp::Packet parsed_packet_;\r\n\r\n  pcpp::IPv4Layer* ipv4_layer_ = nullptr;\r\n  pcpp::IPv6Layer* ipv6_layer_ = nullptr;\r\n};\r\n\r\nusing IPPacketPtr = std::unique_ptr<IPPacket>;\r\n\r\n#else\r\n\r\n/**\r\n * Specific lightweight container for IPv4 packets.\r\n * Wraps raw IP packet data with basic access methods.\r\n */\r\nclass LightIPv4Packet {\r\n public:\r\n  static std::unique_ptr<LightIPv4Packet> Parse(IPPacketData buffer,\r\n      std::uint64_t client_id = FPTN_PACKET_UNDEFINED_CLIENT_ID) {\r\n    if (buffer.empty() || buffer.size() < 20) {  // Minimum IPv4 header size\r\n      return nullptr;\r\n    }\r\n    return std::make_unique<LightIPv4Packet>(std::move(buffer), client_id);\r\n  }\r\n\r\n  LightIPv4Packet(IPPacketData buffer, const fptn::ClientID client_id)\r\n      : ip_packet_(std::move(buffer)) {\r\n    (void)client_id;\r\n  }\r\n\r\n  std::size_t Size() const { return ip_packet_.size(); }\r\n\r\n  // specific methods to have general interface with IPPacket\r\n  const LightIPv4Packet* GetRawPacket() const { return this; }\r\n  std::size_t getRawDataLen() const { return ip_packet_.size(); }\r\n  const void* getRawData() const { return ip_packet_.data(); }\r\n\r\n private:\r\n  const IPPacketData ip_packet_;\r\n};\r\n\r\nusing IPPacket = LightIPv4Packet;\r\nusing IPPacketPtr = std::unique_ptr<LightIPv4Packet>;\r\n\r\n#endif\r\n\r\n}  // namespace fptn::common::network\r\n"
  },
  {
    "path": "src/common/network/ipv4_generator.h",
    "content": "/*=============================================================================\r\nCopyright (c) 2024-2025 Stas Skokov\r\n\r\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\r\n=============================================================================*/\r\n\r\n#pragma once\r\n\r\n#include <cinttypes>\r\n#include <memory>\r\n#include <string>\r\n\r\n#if _WIN32\r\n#pragma warning(disable : 4996)\r\n#endif\r\n\r\n#include <boost/asio.hpp>\r\n#include <boost/system/error_code.hpp>\r\n#include <pcapplusplus/EthLayer.h>   // NOLINT(build/include_order)\r\n#include <pcapplusplus/IPv4Layer.h>  // NOLINT(build/include_order)\r\n#include <pcapplusplus/Packet.h>     // NOLINT(build/include_order)\r\n\r\n#include \"common/network/ip_address.h\"\r\n\r\n#if _WIN32\r\n#pragma warning(default : 4996)\r\n#endif\r\n\r\nnamespace fptn::common::network {\r\n\r\nclass IPv4AddressGenerator {\r\n public:\r\n  IPv4AddressGenerator(const fptn::common::network::IPv4Address& netAddress,\r\n      std::uint32_t subnet_mask)\r\n      : ip_(boost::asio::ip::make_address_v4(netAddress.ToString())),\r\n        net_addr_(boost::asio::ip::make_address_v4(netAddress.ToString())) {\r\n    // cppcheck-suppress useInitializationList\r\n    netmask_ = boost::asio::ip::address_v4(\r\n        (subnet_mask == 0)\r\n            ? 0\r\n            : (~static_cast<std::uint32_t>(0) << (32 - subnet_mask)));\r\n\r\n    const uint32_t ip_num = ip_.to_uint();\r\n    const uint32_t netmask_num = netmask_.to_uint();\r\n\r\n    const uint32_t network_address = ip_num & netmask_num;\r\n    broadcast_ =\r\n        boost::asio::ip::address_v4(network_address | ~netmask_.to_uint());\r\n\r\n    num_available_addresses_ = (1U << (32 - subnet_mask)) - 2;\r\n  }\r\n\r\n  std::uint32_t NumAvailableAddresses() const noexcept {\r\n    return num_available_addresses_;\r\n  }\r\n\r\n  fptn::common::network::IPv4Address GetNextAddress() noexcept {\r\n    const std::unique_lock<std::mutex> lock(mutex_);  // mutex\r\n\r\n    const std::uint32_t new_ip = ip_.to_uint() + 1;\r\n    if (new_ip < broadcast_.to_uint()) {\r\n      ip_ = boost::asio::ip::address_v4(new_ip);\r\n    } else {\r\n      ip_ = boost::asio::ip::address_v4(net_addr_.to_uint() + 1);\r\n    }\r\n    return fptn::common::network::IPv4Address(ip_.to_string());\r\n  }\r\n\r\n private:\r\n  mutable std::mutex mutex_;\r\n  boost::asio::ip::address_v4 ip_;\r\n  boost::asio::ip::address_v4 net_addr_;\r\n\r\n  boost::asio::ip::address_v4 netmask_;\r\n  boost::asio::ip::address_v4 broadcast_;\r\n\r\n  std::uint32_t num_available_addresses_;\r\n};\r\nusing IPv4AddressGeneratorSPtr = std::shared_ptr<IPv4AddressGenerator>;\r\n}  // namespace fptn::common::network\r\n"
  },
  {
    "path": "src/common/network/ipv6_generator.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <cinttypes>\n#include <memory>\n#include <mutex>\n#include <string>\n\n#if _WIN32\n#pragma warning(disable : 4996)\n#endif\n\n#include <boost/asio.hpp>\n#include <boost/multiprecision/cpp_int.hpp>\n#include <pcapplusplus/EthLayer.h>   // NOLINT(build/include_order)\n#include <pcapplusplus/IPv6Layer.h>  // NOLINT(build/include_order)\n#include <pcapplusplus/Packet.h>     // NOLINT(build/include_order)\n\n#include \"common/network/ip_address.h\"\n\n#if _WIN32\n#pragma warning(default : 4996)\n#endif\n\n#include \"common/network/ipv6_utils.h\"\n\nnamespace fptn::common::network {\nclass IPv6AddressGenerator {\n public:\n  IPv6AddressGenerator(const fptn::common::network::IPv6Address& net_address,\n      std::uint32_t subnet_mask) {\n    const auto net_address_boost =\n        boost::asio::ip::make_address_v6(net_address.ToString());\n    net_addr_ = ipv6::toUInt128(net_address_boost);\n    max_addr_ =\n        net_addr_ |\n        ((boost::multiprecision::uint128_t(1) << (128 - subnet_mask)) - 1);\n    current_addr_ = net_addr_;\n  }\n\n  fptn::common::network::IPv6Address GetNextAddress() noexcept {\n    const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n    const auto new_ip = current_addr_ + 1;\n    if (new_ip < max_addr_) {\n      current_addr_ = new_ip;\n    } else {\n      current_addr_ = net_addr_ + 1;\n    }\n    return fptn::common::network::IPv6Address(ipv6::toString(current_addr_));\n  }\n\n  boost::multiprecision::uint128_t NumAvailableAddresses() const {\n    return max_addr_ - net_addr_ - 1;\n  }\n\n private:\n  mutable std::mutex mutex_;\n\n  boost::multiprecision::uint128_t net_addr_;\n  boost::multiprecision::uint128_t max_addr_;\n  boost::multiprecision::uint128_t current_addr_;\n};\n\nusing IPv6AddressGeneratorSPtr = std::shared_ptr<IPv6AddressGenerator>;\n}  // namespace fptn::common::network\n"
  },
  {
    "path": "src/common/network/ipv6_utils.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <string>\n\n#include <boost/asio.hpp>\n#include <boost/multiprecision/cpp_int.hpp>\n#include <pcapplusplus/IPv6Layer.h>  // NOLINT(build/include_order)\n\nnamespace fptn::common::network::ipv6 {\ninline boost::multiprecision::uint128_t toUInt128(\n    const boost::asio::ip::address_v6& address) {\n  boost::multiprecision::uint128_t result{};\n  for (uint8_t b : address.to_bytes()) {\n    (result <<= 8) |= b;\n  }\n  return result;\n}\n\ninline boost::multiprecision::uint128_t toUInt128(\n    const pcpp::IPv6Address& address) {\n  return toUInt128(boost::asio::ip::make_address_v6(address.toString()));\n}\n\ninline std::string toString(const boost::multiprecision::uint128_t& val) {\n  const std::uint64_t high = static_cast<uint64_t>(val >> 64);  // High 64 bits\n  const std::uint64_t low =\n      static_cast<uint64_t>(val & 0xFFFFFFFFFFFFFFFF);\n  // Build 16-byte network-order address from the two 64-bit halves\n  const boost::asio::ip::address_v6::bytes_type bytes = {{\n      static_cast<unsigned char>(high >> 56),\n      static_cast<unsigned char>(high >> 48),\n      static_cast<unsigned char>(high >> 40),\n      static_cast<unsigned char>(high >> 32),\n      static_cast<unsigned char>(high >> 24),\n      static_cast<unsigned char>(high >> 16),\n      static_cast<unsigned char>(high >> 8),\n      static_cast<unsigned char>(high),\n      static_cast<unsigned char>(low >> 56),\n      static_cast<unsigned char>(low >> 48),\n      static_cast<unsigned char>(low >> 40),\n      static_cast<unsigned char>(low >> 32),\n      static_cast<unsigned char>(low >> 24),\n      static_cast<unsigned char>(low >> 16),\n      static_cast<unsigned char>(low >> 8),\n      static_cast<unsigned char>(low),\n  }};\n  // Produces canonical compressed format (matches pcpp/inet_ntop)\n  return boost::asio::ip::make_address_v6(bytes).to_string();\n}\n}  // namespace fptn::common::network::ipv6\n"
  },
  {
    "path": "src/common/network/net_interface.h",
    "content": "/*=============================================================================\r\nCopyright (c) 2024-2025 Stas Skokov\r\nCopyright (c) 2024-2026 Pavel Shpilev\r\n\r\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\r\n=============================================================================*/\r\n\r\n#pragma once\r\n\r\n#include <atomic>\r\n#include <functional>\r\n#include <memory>\r\n#include <mutex>\r\n#include <string>\r\n#include <thread>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\r\n\r\n#include \"common/data/channel.h\"\r\n#include \"common/network/ip_address.h\"\r\n#include \"common/network/ip_packet.h\"\r\n\r\nnamespace fptn::common::network {\r\nclass DataRateCalculator {\r\n public:\r\n  explicit DataRateCalculator(\r\n      std::chrono::milliseconds interval = std::chrono::milliseconds(1000))\r\n      : interval_(interval),\r\n        bytes_(0),\r\n        lastUpdateTime_(std::chrono::steady_clock::now()),\r\n        rate_(0) {}\r\n  void Update(std::size_t len) noexcept {\r\n    const std::scoped_lock lock(mutex_);  // mutex\r\n\r\n    auto now = std::chrono::steady_clock::now();\r\n    std::chrono::duration<double> elapsed = now - lastUpdateTime_;\r\n    bytes_ += len;\r\n    if (elapsed >= interval_) {\r\n      rate_ = static_cast<std::size_t>(bytes_ / elapsed.count());\r\n      lastUpdateTime_ = now;\r\n      bytes_ = 0;\r\n    }\r\n  }\r\n  std::size_t GetRateForSecond() const noexcept {\r\n    const std::scoped_lock lock(mutex_);  // mutex\r\n\r\n    const auto interval_count = interval_.count();\r\n    if (interval_count) {\r\n      return static_cast<std::size_t>(rate_ / (1000 / interval_.count()));\r\n    }\r\n    return 0;\r\n  }\r\n\r\n private:\r\n  mutable std::mutex mutex_;\r\n  std::chrono::milliseconds interval_;\r\n  std::atomic<std::size_t> bytes_;\r\n  std::chrono::steady_clock::time_point lastUpdateTime_;\r\n  std::atomic<std::size_t> rate_;\r\n};\r\n\r\nusing NewIPPacketCallback = std::function<void(IPPacketPtr packet)>;\r\n\r\n/**\r\n * @brief Base network interface class using CRTP (Curiously Recurring Template\r\n * Pattern)\r\n *\r\n * This template provides common interface functionality while delegating\r\n * platform-specific operations to the derived implementation class.\r\n *\r\n * CRTP Benefits:\r\n *  - Static polymorphism (no virtual function overhead)\r\n *  - Clear separation of interface and implementation\r\n *  - Compile-time enforcement of interface contracts\r\n *\r\n * Derived classes must implement:\r\n *  - StartImpl()     - Initialize the interface\r\n *  - StopImpl()      - Shutdown the interface\r\n *  - SendImpl()      - Packet transmission\r\n *  - GetSendRateImpl()    - Outbound rate monitoring\r\n *  - GetReceiveRateImpl() - Inbound rate monitoring\r\n */\r\ntemplate <typename Implementation>\r\nclass BaseNetInterface {\r\n public:\r\n  friend Implementation;\r\n\r\n  // Network configuration\r\n  struct Config {\r\n    std::string name;\r\n    fptn::common::network::IPv4Address ipv4_addr;\r\n    int ipv4_netmask;\r\n    fptn::common::network::IPv6Address ipv6_addr;\r\n    int ipv6_netmask;\r\n  };\r\n\r\n  bool Start() { return impl()->StartImpl(); }\r\n\r\n  bool Stop() { return impl()->StopImpl(); }\r\n\r\n  bool Send(IPPacketPtr packet) { return impl()->SendImpl(std::move(packet)); }\r\n\r\n  std::size_t GetSendRate() { return impl()->GetSendRateImpl(); }\r\n\r\n  std::size_t GetReceiveRate() { return impl()->GetReceiveRateImpl(); }\r\n\r\n private:\r\n  explicit BaseNetInterface(Config config)\r\n      : config_(std::move(config)), recv_ip_packet_callback_(nullptr) {}\r\n\r\n  Implementation* impl() { return static_cast<Implementation*>(this); }\r\n\r\n public:\r\n  [[nodiscard]] const std::string& Name() const noexcept {\r\n    return config_.name;\r\n  }\r\n\r\n  [[nodiscard]] const fptn::common::network::IPv4Address& IPv4Addr()\r\n      const noexcept {\r\n    return config_.ipv4_addr;\r\n  }\r\n\r\n  [[nodiscard]] int IPv4Netmask() const noexcept {\r\n    return config_.ipv4_netmask;\r\n  }\r\n\r\n  [[nodiscard]] const fptn::common::network::IPv6Address& IPv6Addr()\r\n      const noexcept {\r\n    return config_.ipv6_addr;\r\n  }\r\n\r\n  int IPv6Netmask() const noexcept { return config_.ipv6_netmask; }\r\n\r\n  void SetRecvIPPacketCallback(const NewIPPacketCallback& callback) noexcept {\r\n    recv_ip_packet_callback_ = callback;\r\n  }\r\n\r\n  [[nodiscard]] NewIPPacketCallback GetRecvIPPacketCallback() const {\r\n    return recv_ip_packet_callback_;\r\n  }\r\n\r\n private:\r\n  Config config_;\r\n  NewIPPacketCallback recv_ip_packet_callback_;\r\n};\r\n\r\n/**\r\n * @brief Generic TUN interface parameterized by a platform-specific Device.\r\n *\r\n * The Device type must satisfy the following concept (duck-typed):\r\n *   bool Open(const std::string& name);\r\n *   void Close();\r\n *   std::string GetName() const;\r\n *   bool ConfigureIPv4(const std::string& addr, int mask);\r\n *   bool ConfigureIPv6(const std::string& addr, int mask);\r\n *   void SetNonBlocking(bool enabled);\r\n *   void SetMTU(int mtu);\r\n *   void BringUp();\r\n *   int  Read(void* buffer, int size);\r\n *   int  Write(const void* data, int size);\r\n *   void SetStopFlag(const std::atomic<bool>* running);\r\n *\r\n * Platform-specific devices: LinuxTunDevice, DarwinTunDevice, WinTunDevice\r\n */\r\ntemplate <typename Device>\r\nclass GenericTunInterface final\r\n    : public BaseNetInterface<GenericTunInterface<Device>> {\r\n public:\r\n  using Base = BaseNetInterface<GenericTunInterface<Device>>;\r\n  friend Base;\r\n\r\n  using Config = typename Base::Config;\r\n\r\n  explicit GenericTunInterface(Config config)\r\n      : Base(std::move(config)), mtu_(FPTN_MTU_SIZE), running_(false) {}\r\n\r\n  ~GenericTunInterface() { StopImpl(); }\r\n\r\n protected:\r\n  bool StartImpl() noexcept {\r\n    const std::scoped_lock lock(mutex_);\r\n\r\n    try {\r\n      // cppcheck-suppress knownConditionTrueFalse\r\n      if (!device_.Open(this->Name())) {\r\n        SPDLOG_ERROR(\"Failed to open TUN device\");\r\n        return false;\r\n      }\r\n      // Update name to actual device name (may differ, e.g., utun on macOS)\r\n      this->config_.name = device_.GetName();\r\n\r\n      /* set IPv6 */\r\n      // cppcheck-suppress knownConditionTrueFalse\r\n      if (!device_.ConfigureIPv6(\r\n              this->IPv6Addr().ToString(), this->IPv6Netmask())) {\r\n        SPDLOG_WARN(\"IPv6 configuration failed, continuing with IPv4 only\");\r\n      }\r\n      /* set IPv4 */\r\n      // cppcheck-suppress knownConditionTrueFalse\r\n      if (!device_.ConfigureIPv4(\r\n              this->IPv4Addr().ToString(), this->IPv4Netmask())) {\r\n        SPDLOG_ERROR(\"IPv4 configuration failed\");\r\n        device_.Close();\r\n        return false;\r\n      }\r\n      device_.SetNonBlocking(true);\r\n      device_.SetMTU(mtu_);\r\n      device_.BringUp();\r\n\r\n      running_ = true;\r\n      device_.SetStopFlag(&running_);\r\n      thread_ = std::thread(&GenericTunInterface::Run, this);\r\n      return thread_.joinable();\r\n    } catch (const std::exception& ex) {\r\n      SPDLOG_ERROR(\"Error start: {}\", ex.what());\r\n    }\r\n    return false;\r\n  }\r\n\r\n  bool StopImpl() noexcept {\r\n    if (!running_) {\r\n      return false;\r\n    }\r\n\r\n    const std::scoped_lock lock(mutex_);\r\n\r\n    // cppcheck-suppress identicalConditionAfterEarlyExit\r\n    if (!running_) {  // Double-check after acquiring lock\r\n      return false;\r\n    }\r\n\r\n    if (thread_.joinable()) {\r\n      running_ = false;\r\n      thread_.join();\r\n      device_.Close();\r\n    }\r\n    return true;\r\n  }\r\n\r\n  bool SendImpl(IPPacketPtr packet) noexcept {\r\n    if (!running_ || !packet || !packet->Size()) {\r\n      return false;\r\n    }\r\n\r\n    try {\r\n      const std::scoped_lock lock(mutex_);\r\n\r\n      if (running_) {\r\n        const auto* raw_packet = packet->GetRawPacket();\r\n        if (!raw_packet) {\r\n          return false;\r\n        }\r\n        const auto* data = raw_packet->getRawData();\r\n        const auto len = raw_packet->getRawDataLen();\r\n\r\n        const int bytes_written = device_.Write(data, static_cast<int>(len));\r\n\r\n        send_rate_calculator_.Update(bytes_written);\r\n\r\n        return bytes_written == len;\r\n      }\r\n    } catch (const std::exception& ex) {\r\n      SPDLOG_ERROR(\"SendImpl error: {}\", ex.what());\r\n    }\r\n    return false;\r\n  }\r\n\r\n  std::size_t GetSendRateImpl() const noexcept {\r\n    return send_rate_calculator_.GetRateForSecond();\r\n  }\r\n\r\n  std::size_t GetReceiveRateImpl() const noexcept {\r\n    return receive_rate_calculator_.GetRateForSecond();\r\n  }\r\n\r\n private:\r\n  void Run() {\r\n    const auto callback = this->GetRecvIPPacketCallback();\r\n    while (running_) {\r\n      std::vector<std::uint8_t> buffer(mtu_);\r\n      const int size = device_.Read(buffer.data(), mtu_);\r\n      if (size > 0 && running_) {\r\n        buffer.resize(size);\r\n        auto packet = IPPacket::Parse(buffer);\r\n        if (running_ && packet != nullptr && callback) {\r\n          receive_rate_calculator_.Update(packet->Size());  // calculate rate\r\n          callback(std::move(packet));\r\n        }\r\n      } else {\r\n        std::this_thread::sleep_for(std::chrono::milliseconds(1));\r\n      }\r\n    }\r\n  }\r\n\r\n  mutable std::mutex mutex_;\r\n\r\n  const std::uint16_t mtu_;\r\n\r\n  std::atomic<bool> running_;\r\n  std::thread thread_;\r\n  Device device_;\r\n  DataRateCalculator send_rate_calculator_;\r\n  DataRateCalculator receive_rate_calculator_;\r\n};\r\n\r\n}  // namespace fptn::common::network\r\n\r\n// Platform-specific TUN device includes (outside namespace to avoid nesting)\r\n#if defined(__APPLE__)\r\n#include \"common/network/tun/darwin_tun_device.h\"\r\n#elif defined(__linux__)\r\n#include \"common/network/tun/linux_tun_device.h\"\r\n#elif defined(_WIN32)\r\n#include \"common/network/tun/win_tun_device.h\"\r\n#endif\r\n\r\nnamespace fptn::common::network {\r\n// Platform-specific TUN interface aliases\r\n#if defined(__APPLE__)\r\nusing TunInterface = GenericTunInterface<DarwinTunDevice>;\r\n#elif defined(__linux__)\r\nusing TunInterface = GenericTunInterface<LinuxTunDevice>;\r\n#elif defined(_WIN32)\r\nusing TunInterface = GenericTunInterface<WinTunDevice>;\r\n#endif\r\n\r\nusing TunInterfacePtr = std::unique_ptr<TunInterface>;\r\n}  // namespace fptn::common::network\r\n"
  },
  {
    "path": "src/common/network/resolv.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <chrono>\n#include <string>\n#include <utility>\n\n#include <boost/asio/io_context.hpp>\n#include <boost/asio/ip/tcp.hpp>\n#include <boost/asio/steady_timer.hpp>\n#include <boost/system/error_code.hpp>\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\nnamespace fptn::common::network {\n\ninline bool IsIpAddress(const std::string& host) {\n  boost::system::error_code ec;\n  boost::asio::ip::make_address(host, ec);\n  return !ec;\n}\n\nstruct ResolveResult {\n  boost::system::error_code error;\n  boost::asio::ip::tcp::resolver::results_type results;\n\n  bool success() const { return !error; }\n  explicit operator bool() const { return success(); }\n};\n\ninline ResolveResult ResolveWithTimeout(boost::asio::io_context& ioc,\n    const std::string& host,\n    const std::string& port,\n    int timeout_seconds) {\n  boost::asio::ip::tcp::resolver resolver(ioc);\n  ResolveResult result;\n\n  if (IsIpAddress(host)) {\n    boost::system::error_code ec;\n    auto address = boost::asio::ip::make_address(host, ec);\n    if (ec) {\n      result.error = ec;\n      SPDLOG_WARN(\n          \"DNS resolution - Invalid IP address {}: {}\", host, ec.message());\n      return result;\n    }\n\n    std::uint16_t port_num = 0;\n    try {\n      port_num = static_cast<std::uint16_t>(std::stoi(port));\n    } catch (const std::exception& e) {\n      result.error =\n          boost::system::error_code(boost::system::errc::invalid_argument,\n              boost::system::system_category());\n      SPDLOG_WARN(\n          \"DNS resolution - Invalid port number {}: {}\", port, e.what());\n      return result;\n    }\n\n    boost::asio::ip::tcp::endpoint endpoint(address, port_num);\n    result.results = boost::asio::ip::tcp::resolver::results_type::create(\n        endpoint, host, port);\n    return result;\n  }\n\n  boost::asio::steady_timer timer(ioc);\n  timer.expires_after(std::chrono::seconds(timeout_seconds));\n\n  bool operation_completed = false;\n  // FIXME IPv4 only!\n  resolver.async_resolve(boost::asio::ip::tcp::v4(), host, port,\n      [&](const boost::system::error_code& ec,\n          boost::asio::ip::tcp::resolver::results_type results) {\n        if (!operation_completed) {\n          result.error = ec;\n          if (!ec) {\n            result.results = std::move(results);\n          } else {\n            SPDLOG_WARN(\"DNS resolution - Failed for {}:{}: {}\", host, port,\n                ec.message());\n          }\n          operation_completed = true;\n          timer.cancel();\n        }\n      });\n\n  timer.async_wait([&](const boost::system::error_code& ec) {\n    if (!ec && !operation_completed) {\n      SPDLOG_WARN(\"DNS resolution - Timeout for {}:{} after {}s\", host, port,\n          timeout_seconds);\n      resolver.cancel();\n      result.error = boost::asio::error::timed_out;\n      operation_completed = true;\n    }\n  });\n\n  ioc.restart();\n  while (!operation_completed) {\n    ioc.run_one();\n  }\n  return result;\n}\n\n}  // namespace fptn::common::network\n"
  },
  {
    "path": "src/common/network/tun/darwin_tun_device.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Pavel Shpilev\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <arpa/inet.h>  // NOLINT(build/include_order)\n#include <atomic>\n#include <cstdint>\n#include <cstring>\n#include <fcntl.h>  // NOLINT(build/include_order)\n#include <memory>\n#include <net/if.h>       // NOLINT(build/include_order)\n#include <net/if_utun.h>  // NOLINT(build/include_order)\n#include <string>\n#include <sys/ioctl.h>         // NOLINT(build/include_order)\n#include <sys/kern_control.h>  // NOLINT(build/include_order)\n#include <sys/socket.h>        // NOLINT(build/include_order)\n#include <sys/sys_domain.h>    // NOLINT(build/include_order)\n#include <unistd.h>            // NOLINT(build/include_order)\n\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\nnamespace fptn::common::network {\n\nclass DarwinTunDevice {\n public:\n  DarwinTunDevice() : fd_(-1) {}\n\n  ~DarwinTunDevice() { Close(); }\n\n  DarwinTunDevice(const DarwinTunDevice&) = delete;\n  DarwinTunDevice& operator=(const DarwinTunDevice&) = delete;\n\n  bool Open(const std::string& /*requested_name*/) {\n    fd_ = socket(PF_SYSTEM, SOCK_DGRAM, SYSPROTO_CONTROL);\n    if (fd_ < 0) {\n      SPDLOG_ERROR(\n          \"DarwinTunDevice: socket(PF_SYSTEM) failed: {}\", strerror(errno));\n      return false;\n    }\n\n    struct ctl_info info = {};\n    strncpy(info.ctl_name, UTUN_CONTROL_NAME, sizeof(info.ctl_name) - 1);\n    if (ioctl(fd_, CTLIOCGINFO, &info) < 0) {\n      SPDLOG_ERROR(\n          \"DarwinTunDevice: ioctl(CTLIOCGINFO) failed: {}\", strerror(errno));\n      close(fd_);\n      fd_ = -1;\n      return false;\n    }\n\n    // Try utun numbers starting from 0 until we find an available one\n    constexpr int kMaxUtunAttempts = 256;\n    bool connected = false;\n    for (int unit = 0; unit < kMaxUtunAttempts; ++unit) {\n      struct sockaddr_ctl addr = {};\n      addr.sc_len = sizeof(addr);\n      addr.sc_family = AF_SYSTEM;\n      addr.ss_sysaddr = AF_SYS_CONTROL;\n      addr.sc_id = info.ctl_id;\n      addr.sc_unit = unit + 1;  // sc_unit is 1-based (utun0 = unit 1)\n\n      if (connect(fd_, reinterpret_cast<struct sockaddr*>(&addr),\n              sizeof(addr)) == 0) {\n        connected = true;\n        break;\n      }\n    }\n\n    if (!connected) {\n      SPDLOG_ERROR(\"DarwinTunDevice: failed to connect to any utun device\");\n      close(fd_);\n      fd_ = -1;\n      return false;\n    }\n\n    // Get the assigned interface name\n    char ifname[IFNAMSIZ] = {};\n    socklen_t ifname_len = sizeof(ifname);\n    if (getsockopt(\n            fd_, SYSPROTO_CONTROL, UTUN_OPT_IFNAME, ifname, &ifname_len) < 0) {\n      SPDLOG_ERROR(\"DarwinTunDevice: getsockopt(UTUN_OPT_IFNAME) failed: {}\",\n          strerror(errno));\n      close(fd_);\n      fd_ = -1;\n      return false;\n    }\n    name_ = ifname;\n    SPDLOG_INFO(\"DarwinTunDevice: opened {}\", name_);\n    return true;\n  }\n\n  void Close() {\n    if (fd_ >= 0) {\n      close(fd_);\n      fd_ = -1;\n    }\n  }\n\n  // For unit tests: inject a pre-created fd (e.g., from socketpair)\n  bool OpenWithFd(int fd, const std::string& name) {\n    Close();\n    fd_ = fd;\n    name_ = name;\n    return true;\n  }\n\n  [[nodiscard]] const std::string& GetName() const { return name_; }\n\n  bool ConfigureIPv4(const std::string& addr, int mask) {\n    // Use ifconfig to set IPv4 address\n    const std::string cmd = \"ifconfig \" + name_ + \" inet \" + addr + \"/\" +\n                            std::to_string(mask) + \" \" + addr;\n    SPDLOG_DEBUG(\"DarwinTunDevice: {}\", cmd);\n    return system(cmd.c_str()) == 0;  // NOLINT(cert-env33-c)\n  }\n\n  bool ConfigureIPv6(const std::string& addr, int mask) {\n    const std::string cmd =\n        \"ifconfig \" + name_ + \" inet6 \" + addr + \"/\" + std::to_string(mask);\n    SPDLOG_DEBUG(\"DarwinTunDevice: {}\", cmd);\n    return system(cmd.c_str()) == 0;  // NOLINT(cert-env33-c)\n  }\n\n  void SetNonBlocking(bool enabled) {\n    int flags = fcntl(fd_, F_GETFL, 0);\n    if (flags < 0) {\n      return;\n    }\n    if (enabled) {\n      flags |= O_NONBLOCK;\n    } else {\n      flags &= ~O_NONBLOCK;\n    }\n    fcntl(fd_, F_SETFL, flags);\n  }\n\n  void SetMTU(int mtu) {\n    const std::string cmd = \"ifconfig \" + name_ + \" mtu \" + std::to_string(mtu);\n    system(cmd.c_str());  // NOLINT(cert-env33-c)\n  }\n\n  void BringUp() {\n    const std::string cmd = \"ifconfig \" + name_ + \" up\";\n    system(cmd.c_str());  // NOLINT(cert-env33-c)\n  }\n\n  int Read(void* buffer, int size) {\n    // macOS utun prepends a 4-byte protocol family header\n    constexpr int kAfHeaderSize = 4;\n    const int total_size = size + kAfHeaderSize;\n\n    EnsureReadBuffer(total_size);\n\n    const ssize_t n = ::read(fd_, read_buf_.get(), total_size);\n    if (n <= kAfHeaderSize) {\n      return 0;\n    }\n\n    const int payload_size = static_cast<int>(n) - kAfHeaderSize;\n    std::memcpy(buffer, read_buf_.get() + kAfHeaderSize, payload_size);\n    return payload_size;\n  }\n\n  int Write(const void* data, int size) {\n    // Determine address family from IP version nibble\n    constexpr int kAfHeaderSize = 4;\n    const auto* pkt = static_cast<const std::uint8_t*>(data);\n    const std::uint8_t version = (pkt[0] >> 4) & 0x0F;\n\n    std::uint32_t af_header = 0;\n    if (version == 4) {\n      af_header = htonl(AF_INET);\n    } else if (version == 6) {\n      af_header = htonl(AF_INET6);\n    } else {\n      return 0;\n    }\n\n    const int total_size = kAfHeaderSize + size;\n    EnsureWriteBuffer(total_size);\n\n    std::memcpy(write_buf_.get(), &af_header, kAfHeaderSize);\n    std::memcpy(write_buf_.get() + kAfHeaderSize, data, size);\n\n    const ssize_t written = ::write(fd_, write_buf_.get(), total_size);\n    if (written <= kAfHeaderSize) {\n      return 0;\n    }\n    return static_cast<int>(written) - kAfHeaderSize;\n  }\n\n  // cppcheck-suppress functionStatic\n  void SetStopFlag(const std::atomic<bool>* /*running*/) {}\n\n private:\n  void EnsureReadBuffer(int size) {\n    if (read_buf_size_ < size) {\n      read_buf_ = std::make_unique<std::uint8_t[]>(size);\n      read_buf_size_ = size;\n    }\n  }\n\n  void EnsureWriteBuffer(int size) {\n    if (write_buf_size_ < size) {\n      write_buf_ = std::make_unique<std::uint8_t[]>(size);\n      write_buf_size_ = size;\n    }\n  }\n\n  int fd_;\n  std::string name_;\n\n  std::unique_ptr<std::uint8_t[]> read_buf_;\n  int read_buf_size_ = 0;\n  std::unique_ptr<std::uint8_t[]> write_buf_;\n  int write_buf_size_ = 0;\n};\n\n}  // namespace fptn::common::network\n"
  },
  {
    "path": "src/common/network/tun/linux_tun_device.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Pavel Shpilev\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <atomic>\n#include <memory>\n#include <string>\n#include <tuntap++.hh>  // NOLINT(build/include_order)\n\nnamespace fptn::common::network {\n\nclass LinuxTunDevice {\n public:\n  bool Open(const std::string& name) {\n    tun_ = std::make_unique<tuntap::tun>();\n    tun_->name(name);\n    name_ = tun_->name();\n    return true;\n  }\n\n  void Close() { tun_.reset(); }\n\n  [[nodiscard]] const std::string& GetName() const { return name_; }\n\n  bool ConfigureIPv4(const std::string& addr, int mask) {\n    tun_->ip(addr, mask);\n    return true;\n  }\n\n  bool ConfigureIPv6(const std::string& addr, int mask) {\n    tun_->ip(addr, mask);\n    return true;\n  }\n\n  void SetNonBlocking(bool enabled) { tun_->nonblocking(enabled); }\n\n  void SetMTU(int mtu) { tun_->mtu(mtu); }\n\n  void BringUp() { tun_->up(); }\n\n  int Read(void* buffer, int size) {\n    return tun_->read(buffer, static_cast<std::size_t>(size));\n  }\n\n  int Write(const void* data, int size) {\n    return tun_->write(const_cast<void*>(data), static_cast<std::size_t>(size));\n  }\n\n  // cppcheck-suppress functionStatic\n  void SetStopFlag(const std::atomic<bool>* /*running*/) {}\n\n private:\n  std::unique_ptr<tuntap::tun> tun_;\n  std::string name_;\n};\n\n}  // namespace fptn::common::network\n"
  },
  {
    "path": "src/common/network/tun/win_tun_device.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Pavel Shpilev\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <atomic>\n#include <cstring>\n#include <string>\n\n// clang-format off\n#include <Ws2tcpip.h>   // NOLINT(build/include_order)\n#include <windows.h>     // NOLINT(build/include_order)\n#include <objbase.h>     // NOLINT(build/include_order)\n#include <winsock2.h>    // NOLINT(build/include_order)\n#include <Iprtrmib.h>    // NOLINT(build/include_order)\n#include <iphlpapi.h>    // NOLINT(build/include_order)\n#include <WinError.h>    // NOLINT(build/include_order)\n#include <wintun.h>      // NOLINT(build/include_order)\n// clang-format on\n\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\n#include \"common/network/ip_address.h\"\n\nnamespace fptn::common::network {\n\nclass WinTunDevice {\n public:\n  WinTunDevice()\n      : wintun_(nullptr),\n        adapter_(nullptr),\n        session_(nullptr),\n        running_(nullptr) {\n    wintun_ = InitializeWintun();\n    UuidCreate(&guid_);\n  }\n\n  ~WinTunDevice() { Close(); }\n\n  WinTunDevice(const WinTunDevice&) = delete;\n  WinTunDevice& operator=(const WinTunDevice&) = delete;\n\n  bool Open(const std::string& name) {\n    if (!wintun_) {\n      return false;\n    }\n    SPDLOG_INFO(\"WINTUN: {} version loaded\",\n        ParseWinTunVersion(WintunGetRunningDriverVersion()));\n\n    name_ = name;\n    const std::wstring interface_name = ToWString(name);\n    adapter_ = WintunCreateAdapter(\n        interface_name.c_str(), interface_name.c_str(), &guid_);\n    if (!adapter_) {\n      SPDLOG_ERROR(\"Network adapter wasn't created!\");\n      return false;\n    }\n    return true;\n  }\n\n  void Close() {\n    if (session_) {\n      WintunEndSession(session_);\n      session_ = nullptr;\n    }\n    if (adapter_) {\n      WintunCloseAdapter(adapter_);\n      adapter_ = nullptr;\n    }\n    if (wintun_) {\n      WintunDeleteDriver();\n      wintun_ = nullptr;\n    }\n  }\n\n  [[nodiscard]] const std::string& GetName() const { return name_; }\n\n  bool ConfigureIPv4(const std::string& addr, int mask) {\n    return SetIPAddressEntry(AF_INET, addr, mask);\n  }\n\n  bool ConfigureIPv6(const std::string& addr, int mask) {\n    return SetIPAddressEntry(AF_INET6, addr, mask);\n  }\n\n  // cppcheck-suppress functionStatic\n  void SetNonBlocking(bool /*enabled*/) {\n    // Wintun uses event-based I/O, no-op\n  }\n\n  // cppcheck-suppress functionStatic\n  void SetMTU(int /*mtu*/) {\n    // Wintun handles MTU internally, no-op\n  }\n\n  void BringUp() {\n    constexpr int kSessionCapacity = 0x20000;\n    session_ = WintunStartSession(adapter_, kSessionCapacity);\n    if (!session_) {\n      SPDLOG_ERROR(\"Open session error\");\n    }\n  }\n\n  int Read(void* buffer, int size) {\n    if (!session_) {\n      return 0;\n    }\n\n    constexpr std::size_t kRetryAmount = 20;\n    while (running_ && *running_) {\n      for (std::size_t i = 0; i < kRetryAmount; ++i) {\n        DWORD packet_size = 0;\n        BYTE* packet = WintunReceivePacket(session_, &packet_size);\n        if (packet && running_ && *running_) {\n          const int copy_size = (static_cast<int>(packet_size) < size)\n                                    ? static_cast<int>(packet_size)\n                                    : size;\n          std::memcpy(buffer, packet, copy_size);\n          WintunReleaseReceivePacket(session_, packet);\n          return copy_size;\n        }\n        if (GetLastError() == ERROR_NO_MORE_ITEMS) {\n          continue;\n        }\n        return 0;\n      }\n      WaitForSingleObject(WintunGetReadWaitEvent(session_), 10);\n    }\n    return 0;\n  }\n\n  int Write(const void* data, int size) {\n    if (!session_ || !data || size <= 0) {\n      return 0;\n    }\n\n    BYTE* send_buffer =\n        WintunAllocateSendPacket(session_, static_cast<DWORD>(size));\n    if (!send_buffer) {\n      return 0;\n    }\n    std::memcpy(send_buffer, data, size);\n    WintunSendPacket(session_, send_buffer);\n    return size;\n  }\n\n  void SetStopFlag(const std::atomic<bool>* running) { running_ = running; }\n\n private:\n  bool SetIPAddressEntry(int family, const std::string& addr, int mask) {\n    MIB_UNICASTIPADDRESS_ROW address_row;\n    InitializeUnicastIpAddressEntry(&address_row);\n    WintunGetAdapterLUID(adapter_, &address_row.InterfaceLuid);\n\n    if (family == AF_INET) {\n      address_row.Address.Ipv4.sin_family = AF_INET;\n      if (1 != inet_pton(AF_INET, addr.c_str(),\n                   &(address_row.Address.Ipv4.sin_addr))) {\n        SPDLOG_ERROR(\"Wrong IPv4 address\");\n        return false;\n      }\n    } else {\n      address_row.Address.Ipv6.sin6_family = AF_INET6;\n      if (1 != inet_pton(AF_INET6, addr.c_str(),\n                   &(address_row.Address.Ipv6.sin6_addr))) {\n        SPDLOG_ERROR(\"Wrong IPv6 address\");\n        return false;\n      }\n    }\n\n    address_row.OnLinkPrefixLength = static_cast<BYTE>(mask);\n    address_row.DadState = IpDadStatePreferred;\n\n    const auto res = CreateUnicastIpAddressEntry(&address_row);\n    if (res != ERROR_SUCCESS && res != ERROR_OBJECT_ALREADY_EXISTS) {\n      SPDLOG_ERROR(\"Failed to set {} address\", addr);\n      return false;\n    }\n    return true;\n  }\n\n  static std::wstring ToWString(const std::string& s) {\n    return {s.begin(), s.end()};\n  }\n\n  static std::string ParseWinTunVersion(DWORD version_number) {\n    return std::to_string((version_number >> 16) & 0xff) + \".\" +\n           std::to_string((version_number >> 0) & 0xff);\n  }\n\n  HMODULE InitializeWintun() {\n    HMODULE wintun_lib = LoadLibraryExW(L\"wintun.dll\", nullptr,\n        LOAD_LIBRARY_SEARCH_APPLICATION_DIR | LOAD_LIBRARY_SEARCH_SYSTEM32);\n    if (!wintun_lib) {\n      SPDLOG_ERROR(\"WINTUN NOT FOUND!\");\n      return nullptr;\n    }\n#define X(Name)                            \\\n  ((*(reinterpret_cast<FARPROC*>(&Name)) = \\\n           GetProcAddress(wintun_lib, #Name)) == nullptr)\n    if (X(WintunCreateAdapter) || X(WintunCloseAdapter) ||\n        X(WintunOpenAdapter) || X(WintunGetAdapterLUID) ||\n        X(WintunGetRunningDriverVersion) || X(WintunDeleteDriver) ||\n        X(WintunSetLogger) || X(WintunStartSession) || X(WintunEndSession) ||\n        X(WintunGetReadWaitEvent) || X(WintunReceivePacket) ||\n        X(WintunReleaseReceivePacket) || X(WintunAllocateSendPacket) ||\n        X(WintunSendPacket)) {\n      DWORD last_error = GetLastError();\n      FreeLibrary(wintun_lib);\n      SetLastError(last_error);\n      SPDLOG_ERROR(\"Error whilst loading the lib: {}\", last_error);\n      return nullptr;\n    }\n#undef X\n    SPDLOG_INFO(\"Wintun initialization successful\");\n    return wintun_lib;\n  }\n\n  // Wintun function pointers\n  WINTUN_CREATE_ADAPTER_FUNC* WintunCreateAdapter = nullptr;\n  WINTUN_CLOSE_ADAPTER_FUNC* WintunCloseAdapter = nullptr;\n  WINTUN_OPEN_ADAPTER_FUNC* WintunOpenAdapter = nullptr;\n  WINTUN_GET_ADAPTER_LUID_FUNC* WintunGetAdapterLUID = nullptr;\n  WINTUN_GET_RUNNING_DRIVER_VERSION_FUNC* WintunGetRunningDriverVersion =\n      nullptr;\n  WINTUN_DELETE_DRIVER_FUNC* WintunDeleteDriver = nullptr;\n  WINTUN_SET_LOGGER_FUNC* WintunSetLogger = nullptr;\n  WINTUN_START_SESSION_FUNC* WintunStartSession = nullptr;\n  WINTUN_END_SESSION_FUNC* WintunEndSession = nullptr;\n  WINTUN_GET_READ_WAIT_EVENT_FUNC* WintunGetReadWaitEvent = nullptr;\n  WINTUN_RECEIVE_PACKET_FUNC* WintunReceivePacket = nullptr;\n  WINTUN_RELEASE_RECEIVE_PACKET_FUNC* WintunReleaseReceivePacket = nullptr;\n  WINTUN_ALLOCATE_SEND_PACKET_FUNC* WintunAllocateSendPacket = nullptr;\n  WINTUN_SEND_PACKET_FUNC* WintunSendPacket = nullptr;\n\n  GUID guid_;\n  HMODULE wintun_;\n  WINTUN_ADAPTER_HANDLE adapter_;\n  WINTUN_SESSION_HANDLE session_;\n\n  std::string name_;\n  const std::atomic<bool>* running_;\n};\n\n}  // namespace fptn::common::network\n"
  },
  {
    "path": "src/common/network/utils.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <fptn-protocol-lib/https/utils/change_cipher_spec.h>\n#include <string>\n#include <vector>\n\n#include <boost/asio.hpp>\n#include <boost/asio/awaitable.hpp>\n#include <boost/asio/co_spawn.hpp>\n#include <openssl/bio.h>    // NOLINT(build/include_order)\n#include <openssl/ssl.h>    // NOLINT(build/include_order)\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\n#ifndef __ANDROID__\n#include \"common/system/command.h\"\n#endif\n\nnamespace fptn::common::network {\n\n#ifndef __ANDROID__\ninline std::vector<std::string> GetServerIpAddresses() {\n  std::vector<std::string> cmd_stdout;\n  fptn::common::system::command::run(\n      \"ip -o addr show | awk '{print $4}' | cut -d'/' -f1\", cmd_stdout);\n  return cmd_stdout;\n}\n#endif\n\ninline void CleanSocket(boost::asio::ip::tcp::socket& socket) {\n  try {\n    while (socket.available() != 0) {\n      boost::system::error_code ec;\n      std::array<std::uint8_t, 4096> buffer{};\n\n      const std::size_t bytes =\n          socket.read_some(boost::asio::buffer(buffer), ec);\n      (void)bytes;\n      if (ec == boost::asio::error::eof) {\n        break;\n      }\n      if (ec) {\n        SPDLOG_ERROR(\"Socket error: {}\", ec.message());\n        break;\n      }\n    }\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"Exception: {}\", e.what());\n  }\n}\n\ninline bool CleanSsl(const SSL* ssl) {\n  if (ssl == nullptr) {\n    return false;\n  }\n  if (BIO* rb = SSL_get_rbio(ssl)) {\n    BIO_flush(rb);\n    char buf[4096] = {};\n    while (BIO_pending(rb) > 0) {\n      BIO_read(rb, buf, sizeof(buf));\n    }\n  }\n  return true;\n}\n\ninline bool IsServerHelloComplete(const std::vector<uint8_t>& data) {\n  if (data.size() < 5) {\n    SPDLOG_INFO(\n        \"IsServerHelloComplete: data too small ({} bytes)\", data.size());\n    return false;\n  }\n\n  std::size_t pos = 0;\n  bool found_server_hello = false;\n  bool is_tls13 = false;\n  bool handshake_done = false;\n\n  while (pos + 5 <= data.size()) {\n    const std::uint8_t content_type = data[pos];\n    const std::uint16_t record_len = (data[pos + 3] << 8) | data[pos + 4];\n\n    if (pos + 5 + record_len > data.size()) {\n      return false;\n    }\n\n    if (content_type == 22) {  // Handshake\n      std::size_t hpos = pos + 5;\n      std::size_t hend = hpos + record_len;\n\n      while (hpos + 4 <= hend) {\n        const std::uint8_t msg_type = data[hpos];\n        const std::uint32_t msg_len =\n            (data[hpos + 1] << 16) | (data[hpos + 2] << 8) | data[hpos + 3];\n\n        if (hpos + 4 + msg_len > hend) {\n          SPDLOG_INFO(\n              \"IsServerHelloComplete: incomplete handshake message at pos {}\",\n              hpos);\n          return false;\n        }\n\n        if (msg_type == 2) {  // ServerHello\n          found_server_hello = true;\n          if (hpos + 4 + 2 <= data.size()) {\n            const std::uint16_t version =\n                (data[hpos + 4 + 2] << 8) | data[hpos + 4 + 3];\n            is_tls13 = (version != 0x0303);\n            SPDLOG_INFO(\n                \"IsServerHelloComplete: ServerHello found, TLS version \"\n                \"0x{:04x}, is_tls13={}\",\n                version, is_tls13);\n          } else {\n            SPDLOG_INFO(\n                \"IsServerHelloComplete: ServerHello found but version field \"\n                \"missing\");\n          }\n        }\n\n        // TLS 1.2: ServerHelloDone\n        if (found_server_hello && !is_tls13 && msg_type == 14) {\n          handshake_done = true;\n          SPDLOG_INFO(\n              \"IsServerHelloComplete: ServerHelloDone (TLS 1.2) detected, \"\n              \"handshake complete\");\n        }\n\n        // TLS 1.3: Finished\n        if (found_server_hello && is_tls13 && msg_type == 20) {\n          handshake_done = true;\n          SPDLOG_INFO(\n              \"IsServerHelloComplete: Finished (TLS 1.3) detected, handshake \"\n              \"complete\");\n        }\n\n        hpos += 4 + msg_len;\n      }\n    }\n\n    // TLS 1.3: Application Data (23) или ChangeCipherSpec (20)\n    // Finished\n    if (found_server_hello && is_tls13 && !handshake_done &&\n        (content_type == 20 || content_type == 23)) {\n      if (pos + 5 + record_len >= data.size()) {\n        handshake_done = true;\n        SPDLOG_INFO(\n            \"IsServerHelloComplete: TLS 1.3 {} record ends the handshake\",\n            content_type == 20 ? \"ChangeCipherSpec\" : \"ApplicationData\");\n      }\n    }\n\n    pos += 5 + record_len;\n  }\n\n  if (found_server_hello && handshake_done) {\n    SPDLOG_INFO(\"IsServerHelloComplete: handshake complete, total size={}\",\n        data.size());\n  } else if (found_server_hello && !handshake_done) {\n    SPDLOG_INFO(\n        \"IsServerHelloComplete: ServerHello found but handshake not yet done, \"\n        \"size={}\",\n        data.size());\n  } else {\n    SPDLOG_INFO(\n        \"IsServerHelloComplete: ServerHello not found, size={}\", data.size());\n  }\n\n  return found_server_hello && handshake_done;\n}\n\ninline bool IsClientHelloComplete(const std::vector<uint8_t>& data) {\n  if (data.size() < 5) {\n    return false;\n  }\n\n  std::size_t pos = 0;\n  while (pos + 5 <= data.size()) {\n    const std::uint8_t content_type = data[pos];\n    const std::uint16_t record_length = (data[pos + 3] << 8) | data[pos + 4];\n\n    if (pos + 5 + record_length > data.size()) {\n      return false;\n    }\n\n    if (content_type == 22) {  // Handshake\n      std::size_t handshake_pos = pos + 5;\n      std::size_t handshake_end = handshake_pos + record_length;\n\n      while (handshake_pos + 4 <= handshake_end) {\n        const std::uint8_t msg_type = data[handshake_pos];\n        const std::uint32_t msg_length = (data[handshake_pos + 1] << 16) |\n                                         (data[handshake_pos + 2] << 8) |\n                                         data[handshake_pos + 3];\n        if (handshake_pos + 4 + msg_length > handshake_end) {\n          return false;\n        }\n        if (msg_type == 1) {  // ClientHello\n          return true;\n        }\n        handshake_pos += 4 + msg_length;\n      }\n    }\n    pos += 5 + record_length;\n  }\n  return false;\n}\n\nusing TlsData = std::optional<std::vector<std::uint8_t>>;\n\ninline TlsData WaitForServerTlsHello(boost::asio::ip::tcp::socket& socket,\n    const std::chrono::milliseconds drain_timeout = std::chrono::milliseconds(\n        5000)) {\n  std::vector<std::uint8_t> data;\n  data.reserve(65536);\n\n  const auto start_time = std::chrono::steady_clock::now();\n\n  try {\n    boost::system::error_code ec;\n    std::array<std::uint8_t, 4096> buffer{};\n\n    while (std::chrono::steady_clock::now() - start_time < drain_timeout) {\n      if (socket.available() == 0) {\n        std::this_thread::sleep_for(std::chrono::milliseconds(100));\n        continue;\n      }\n\n      const std::size_t bytes =\n          socket.read_some(boost::asio::buffer(buffer), ec);\n\n      if (bytes) {\n        data.insert(data.end(), buffer.begin(), buffer.begin() + bytes);\n        if (IsServerHelloComplete(data)) {\n          return data;\n        }\n      }\n\n      if (ec == boost::asio::error::eof) {\n        break;\n      }\n      if (ec) {\n        SPDLOG_ERROR(\"Socket error: {}\", ec.message());\n        break;\n      }\n    }\n    SPDLOG_WARN(\n        \"Timeout waiting for server hello, total data: {} bytes\", data.size());\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"Exception: {}\", e.what());\n  }\n  return std::nullopt;\n}\n\ninline boost::asio::awaitable<TlsData> WaitForServerTlsHelloAsync(\n    boost::asio::ip::tcp::socket& socket,\n    const std::chrono::milliseconds drain_timeout = std::chrono::milliseconds(\n        5000)) {\n  std::vector<std::uint8_t> data;\n  data.reserve(65536);\n\n  try {\n    boost::system::error_code ec;\n    std::array<std::uint8_t, 4096> buffer{};\n    const auto start_time = std::chrono::steady_clock::now();\n    int packet_count = 0;\n\n    while (std::chrono::steady_clock::now() - start_time < drain_timeout) {\n      if (socket.available() == 0) {\n        boost::asio::steady_timer timer(\n            co_await boost::asio::this_coro::executor,\n            std::chrono::milliseconds(100));\n        co_await timer.async_wait(boost::asio::use_awaitable);\n        continue;\n      }\n\n      const std::size_t bytes =\n          co_await socket.async_read_some(boost::asio::buffer(buffer),\n              boost::asio::redirect_error(boost::asio::use_awaitable, ec));\n\n      packet_count++;\n\n      if (bytes) {\n        data.insert(data.end(), buffer.begin(), buffer.begin() + bytes);\n        if (IsServerHelloComplete(data)) {\n          SPDLOG_INFO(\n              \"Server hello complete after {} packets, total size: {} bytes\",\n              packet_count, data.size());\n          co_return data;\n        }\n      }\n\n      if (ec == boost::asio::error::eof) {\n        SPDLOG_INFO(\n            \"Connection closed by server, total data: {} bytes\", data.size());\n        break;\n      }\n      if (ec) {\n        SPDLOG_ERROR(\"Socket error: {}\", ec.message());\n        break;\n      }\n    }\n    SPDLOG_WARN(\n        \"Timeout waiting for server hello, total data: {} bytes\", data.size());\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"Exception: {}\", e.what());\n  }\n  co_return std::nullopt;\n}\n\ninline boost::asio::awaitable<bool> WaitForClientChangeCipherSpec(\n    boost::asio::ip::tcp::socket& socket,\n    const std::chrono::milliseconds drain_timeout = std::chrono::milliseconds(\n        5000)) {\n  const auto target_ccs = protocol::https::utils::MakeClientChangeCipherSpec();\n  const std::size_t target_size = target_ccs.size();\n\n  std::vector<std::uint8_t> buffer(target_size);\n  try {\n    boost::system::error_code ec;\n    const auto start_time = std::chrono::steady_clock::now();\n    std::size_t total_read = 0;\n\n    while (std::chrono::steady_clock::now() - start_time < drain_timeout) {\n      if (socket.available() == 0) {\n        boost::asio::steady_timer timer(\n            co_await boost::asio::this_coro::executor,\n            std::chrono::milliseconds(100));\n        co_await timer.async_wait(boost::asio::use_awaitable);\n        continue;\n      }\n\n      const std::size_t bytes_read = co_await socket.async_read_some(\n          boost::asio::buffer(\n              buffer.data() + total_read, target_size - total_read),\n          boost::asio::redirect_error(boost::asio::use_awaitable, ec));\n\n      total_read += bytes_read;\n\n      if (total_read == target_size) {\n        co_return buffer == target_ccs;\n      }\n\n      if (ec == boost::asio::error::eof) {\n        break;\n      }\n      if (ec) {\n        SPDLOG_ERROR(\"Socket error during drain: {}\", ec.message());\n        break;\n      }\n    }\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"Exception during socket drain: {}\", e.what());\n  }\n  co_return false;\n}\n\ninline boost::asio::awaitable<TlsData> WaitForClientTlsHelloAsync(\n    boost::asio::ip::tcp::socket& socket,\n    const std::chrono::milliseconds drain_timeout = std::chrono::milliseconds(\n        5000)) {\n  std::vector<std::uint8_t> data;\n  data.reserve(65536);\n\n  try {\n    boost::system::error_code ec;\n    std::array<std::uint8_t, 4096> buffer{};\n    const auto start_time = std::chrono::steady_clock::now();\n    while (std::chrono::steady_clock::now() - start_time < drain_timeout) {\n      if (socket.available() == 0) {\n        boost::asio::steady_timer timer(\n            co_await boost::asio::this_coro::executor,\n            std::chrono::milliseconds(100));\n        co_await timer.async_wait(boost::asio::use_awaitable);\n        continue;\n      }\n\n      const std::size_t bytes =\n          co_await socket.async_read_some(boost::asio::buffer(buffer),\n              boost::asio::redirect_error(boost::asio::use_awaitable, ec));\n      if (bytes) {\n        data.insert(data.end(), buffer.begin(), buffer.begin() + bytes);\n        if (IsClientHelloComplete(data)) {\n          co_return data;\n        }\n      }\n\n      if (ec == boost::asio::error::eof) {\n        break;\n      }\n      if (ec) {\n        SPDLOG_ERROR(\"Socket error during drain: {}\", ec.message());\n        break;\n      }\n    }\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"Exception during socket drain: {}\", e.what());\n  }\n  co_return std::nullopt;\n}\n\n}  // namespace fptn::common::network\n"
  },
  {
    "path": "src/common/system/command.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#if _WIN32\n#include <VersionHelpers.h>  // NOLINT(build/include_order)\n#endif\n\n#include <string>\n#include <vector>\n\n#include <boost/process.hpp>\n#include <boost/process/v1/child.hpp>\n#include <boost/process/v1/io.hpp>\n#include <boost/process/v1/search_path.hpp>\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\n#if _WIN32\n#include <boost/process/v1/windows.hpp>\n#endif\n\nnamespace fptn::common::system::command {\n\ninline bool run(const std::string& command) {\n  try {\n    SPDLOG_INFO(\"Running: {}\", command);\n#ifdef _WIN32\n    boost::process::v1::child child(command,\n        boost::process::v1::std_out > stdout,\n        boost::process::v1::std_err > stderr,\n        ::boost::process::v1::windows::hide);\n#elif defined(__linux__) || defined(__APPLE__)\n    boost::process::v1::child child(command,\n        boost::process::v1::std_out > stdout,\n        boost::process::v1::std_err > stderr);\n#endif\n    child.wait();\n    return child.exit_code() == 0;\n  } catch (const std::exception& e) {\n    const std::string msg = e.what();\n    SPDLOG_ERROR(\"Command error: {}  CMD: '{}' \", msg, command);\n  } catch (...) {\n    SPDLOG_ERROR(\"Command error: undefined error CMD: '{}' \", command);\n  }\n  return false;\n}\n\ninline bool run(\n    const std::string& command, std::vector<std::string>& std_output) {\n  try {\n    boost::process::v1::ipstream pipe;\n#ifdef _WIN32\n    boost::process::v1::child child(command, boost::process::v1::std_out > pipe,\n        ::boost::process::v1::windows::hide);\n#elif defined(__linux__) || defined(__APPLE__)\n    boost::process::v1::child child(boost::process::v1::search_path(\"bash\"),\n        \"-c\", command, boost::process::v1::std_out > pipe);\n#endif\n    std::string line;\n    while (std::getline(pipe, line)) {\n      std_output.emplace_back(line);\n    }\n    child.wait();\n    return child.exit_code() == 0;\n  } catch (const std::exception& ex) {\n    SPDLOG_ERROR(\n        \"Error: failed to run command '{}'. Error: {}\", command, ex.what());\n  }\n  return false;\n}\n\n}  // namespace fptn::common::system::command\n"
  },
  {
    "path": "src/common/user/common_user_manager.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <algorithm>\n#include <filesystem>\n#include <fstream>\n#include <iomanip>\n#include <iostream>\n#include <memory>\n#include <mutex>\n#include <sstream>\n#include <string>\n#include <unordered_map>\n#include <utility>\n\n#include <openssl/evp.h>  // NOLINT(build/include_order)\n\nnamespace fptn::common::user {\nclass CommonUserManager final {\n public:\n  explicit CommonUserManager(std::string file_path)\n      : file_path_(std::move(file_path)) {\n    CreateFileIfNotExists(file_path_);\n    LoadUsers();\n  }\n\n  bool AddUser(\n      const std::string& username, const std::string& password, int bandwidth) {\n    const std::scoped_lock lock(mutex_);  // mutex\n\n    if (!ValidateUsername(username)) {\n      std::cerr << \"Invalid username.\" << std::endl;\n      return false;\n    }\n\n    if (bandwidth < 0) {\n      std::cerr << \"Invalid bandwidth value. It should be a positive number.\"\n                << std::endl;\n      return false;\n    }\n\n    if (users_.find(username) != users_.end()) {\n      std::cout << \"User \" << username << \" already exists.\" << std::endl;\n      return false;\n    }\n    std::string hash = HashPassword(password);\n    users_[username] = {hash, bandwidth};\n    SaveUsers();\n    std::cout << \"User \" << username << \" added with bandwidth \" << bandwidth\n              << \" MB.\" << std::endl;\n    return true;\n  }\n\n  bool DeleteUser(const std::string& username) {\n    const std::scoped_lock lock(mutex_);  // mutex\n\n    if (users_.find(username) == users_.end()) {\n      return false;\n    }\n    users_.erase(username);\n    SaveUsers();\n    return true;\n  }\n\n  void ListUsers() const {\n    const std::scoped_lock lock(mutex_);  // mutex\n\n    for (const auto& user_entry : users_) {\n      const auto& username = user_entry.first;\n      const auto& [hash_password, max_speed] = user_entry.second;\n      std::cout << username << \" \" << std::string(hash_password.length(), 'X')\n                << \" \" << max_speed << \" MB\" << std::endl;\n    }\n  }\n\n  bool Authenticate(const std::string& username, const std::string& password) {\n    const std::scoped_lock lock(mutex_);  // mutex\n\n    LoadUsers();\n\n    auto it = users_.find(username);\n    if (it != users_.end()) {\n      std::string hash = HashPassword(password);\n      return it->second.first == hash;\n    }\n    return false;\n  }\n\n  int GetUserBandwidthBit(const std::string& username) const {\n    const std::scoped_lock lock(mutex_);  // mutex\n\n    auto it = users_.find(username);\n    if (it != users_.end()) {\n      return it->second.second * 1024 * 1024;\n    }\n    return 0;\n  }\n  int GetUserBandwidth(const std::string& username) const {\n    const std::scoped_lock lock(mutex_);  // mutex\n\n    auto it = users_.find(username);\n    if (it != users_.end()) {\n      return it->second.second;\n    }\n    return 0;\n  }\n\n protected:\n  void LoadUsers() {\n    // FIXIT\n    // update\n    users_.clear();\n\n    std::ifstream file(file_path_);\n    if (file.is_open()) {\n      std::string line;\n      while (std::getline(file, line)) {\n        std::string username;\n        std::string passwordHash;\n        int bandwidth;\n\n        std::istringstream iss(line);\n        if (iss >> username >> passwordHash >> bandwidth) {\n          users_[username] = {passwordHash, bandwidth};\n        } else {\n          std::cerr << \"Skipping invalid line: \" << line << std::endl;\n        }\n      }\n    } else {\n      std::cerr << \"Unable to open file: \" << file_path_ << std::endl;\n    }\n  }\n\n  void SaveUsers() const {\n    std::ofstream file(file_path_);\n    if (file.is_open()) {\n      for (const auto& user_entry : users_) {\n        const auto& username = user_entry.first;\n        const auto& [hash_password, max_speed] = user_entry.second;  // NOLINT\n        file << username << \" \" << hash_password << \" \" << max_speed << \"\\n\";\n      }\n    } else {\n      std::cerr << \"Unable to open file: \" << file_path_ << std::endl;\n    }\n  }\n\n  // NOLINTNEXTLINE(readability-convert-member-functions-to-static)\n  std::string HashPassword(const std::string& password) const {\n    unsigned int length = 0;\n    unsigned char hash[EVP_MAX_MD_SIZE] = {0};\n\n    EVP_MD_CTX* mdctx = EVP_MD_CTX_new();\n    if (!mdctx) {\n      std::cerr << \"Failed to create EVP_MD_CTX\" << std::endl;\n      return \"\";\n    }\n\n    if (1 != EVP_DigestInit_ex(mdctx, EVP_sha256(), nullptr)) {\n      std::cerr << \"Failed to initialize digest\" << std::endl;\n      EVP_MD_CTX_free(mdctx);\n      return \"\";\n    }\n\n    if (1 != EVP_DigestUpdate(mdctx, password.c_str(), password.size())) {\n      std::cerr << \"Failed to update digest\" << std::endl;\n      EVP_MD_CTX_free(mdctx);\n      return \"\";\n    }\n\n    if (1 != EVP_DigestFinal_ex(mdctx, hash, &length)) {\n      std::cerr << \"Failed to finalize digest\" << std::endl;\n      EVP_MD_CTX_free(mdctx);\n      return \"\";\n    }\n\n    EVP_MD_CTX_free(mdctx);\n\n    std::ostringstream oss;\n    for (unsigned int i = 0; i < length; ++i) {\n      oss << std::hex << std::setw(2) << std::setfill('0')\n          << static_cast<int>(hash[i]);\n    }\n    return oss.str();\n  }\n\n  // NOLINTNEXTLINE(readability-convert-member-functions-to-static)\n  bool ValidateUsername(const std::string& username) const {\n    return !username.empty() &&\n           std::all_of(username.begin(), username.end(), ::isalnum);\n  }\n\n  // NOLINTNEXTLINE(readability-convert-member-functions-to-static)\n  void CreateFileIfNotExists(const std::string& file_path) {\n    const std::filesystem::path path(file_path);\n    const std::filesystem::path directory_path = path.parent_path();\n    if (!directory_path.empty() && !std::filesystem::exists(directory_path)) {\n      std::error_code ec;\n      if (!std::filesystem::create_directories(directory_path, ec)) {\n        std::cerr << \"Failed to create directories: \" << ec.message()\n                  << std::endl;\n        return;\n      }\n    }\n    if (!std::filesystem::exists(file_path)) {\n      std::ofstream file(file_path);\n      if (!file.is_open()) {\n        std::cerr << \"Failed to create file: \" << file_path << std::endl;\n      }\n    }\n  }\n\n private:\n  std::unordered_map<std::string, std::pair<std::string, int>> users_;\n  mutable std::mutex mutex_;\n  std::string file_path_;\n};\n\nusing CommonUserManagerPtr = std::unique_ptr<CommonUserManager>;\n}  // namespace fptn::common::user\n"
  },
  {
    "path": "src/common/utils/base64.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <base64.hpp>\n#include <string>\n\nnamespace fptn::common::utils::base64 {\ninline std::string decode(const std::string& s) {\n  // If the input string's length is not a multiple of 4,\n  // it appends '=' to make the length valid for base64 decoding.\n  std::string additional;\n  if (s.size() % 4 != 0) {\n    const std::size_t padding = 4 - (s.size() % 4);\n    for (std::size_t i = 0; i < padding; i++) {\n      additional += \"=\";\n    }\n  }\n  return ::base64::from_base64(s + additional);\n}\n}  // namespace fptn::common::utils::base64\n"
  },
  {
    "path": "src/common/utils/utils.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <algorithm>\n#include <cstring>\n#include <ctime>\n#include <random>\n#include <ranges>\n#include <regex>\n#include <sstream>\n#include <stdexcept>\n#include <string>\n#include <vector>\n\n#include <boost/algorithm/string.hpp>\n#include <boost/locale.hpp>\n\nnamespace fptn::common::utils {\n\ninline void GenerateRandomBytes(std::uint8_t* buffer, std::size_t length) {\n  thread_local std::mt19937 gen{std::random_device {}()};\n  std::uniform_int_distribution<std::uint64_t> dist;\n\n  std::size_t i = 0;\n  for (; i + 8 <= length; i += 8) {\n    const std::uint64_t rand_val = dist(gen);\n    std::memcpy(buffer + i, &rand_val, 8);\n  }\n  if (i < length) {\n    const std::uint64_t rand_val = dist(gen);\n    std::memcpy(buffer + i, &rand_val, length - i);\n  }\n}\n\ninline std::string GenerateRandomString(const int length) {\n  static constexpr char kCharacters[] =\n      \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n  static constexpr std::size_t kCharCount = sizeof(kCharacters) - 1;\n\n  thread_local std::mt19937 gen{std::random_device {}()};\n  thread_local std::uniform_int_distribution<std::size_t> dist(\n      0, kCharCount - 1);\n\n  std::string result(length, '\\0');\n  for (int i = 0; i < length; ++i) {\n    result[i] = kCharacters[dist(gen)];\n  }\n  return result;\n}\n\ninline std::string RemoveSubstring(\n    std::string input, const std::vector<std::string>& strs) {\n  for (const auto& substr : strs) {\n    boost::algorithm::erase_all(input, substr);\n  }\n  return input;\n}\n\ninline std::string Trim(const std::string& str) {\n  auto is_space = [](const unsigned char c) { return std::isspace(c); };\n\n  const auto start = std::ranges::find_if_not(str, is_space);\n  const auto end =\n      std::ranges::find_if_not(str | std::views::reverse, is_space).base();\n\n  return (start < end) ? std::string(start, end) : std::string();\n}\n\ninline std::vector<std::string> SplitCommaSeparated(const std::string& input) {\n  std::vector<std::string> result;\n  std::stringstream ss(input);\n  std::string item;\n\n  while (std::getline(ss, item, ',')) {\n    const std::string trimmed = Trim(item);\n    if (!trimmed.empty()) {\n      result.push_back(trimmed);\n    }\n  }\n  return result;\n}\n\ninline std::string ToLowerCase(const std::string& str) {\n  try {\n    boost::locale::generator gen;\n    std::locale loc = gen(\"\");\n    return boost::locale::to_lower(str, loc);\n  } catch (...) {\n    return str;\n  }\n  return str;\n}\n\n}  // namespace fptn::common::utils\n"
  },
  {
    "path": "src/fptn-client/CMakeLists.txt",
    "content": "project(fptn-client)\n\ninclude_directories(${CMAKE_CURRENT_SOURCE_DIR})\n\nif(APPLE OR UNIX)\n  set(TUNTAP_LIB tuntap++)\nelse()\n  set(TUNTAP_LIB Wintun rpcrt4 iphlpapi Kernel32.lib)\nendif()\n\nfind_package(OpenSSL REQUIRED)\nfind_package(argparse REQUIRED)\nfind_package(spdlog REQUIRED)\nfind_package(fmt REQUIRED)\nfind_package(PcapPlusPlus REQUIRED)\nfind_package(Boost REQUIRED COMPONENTS random filesystem process locale)\nfind_package(ZLIB REQUIRED)\nfind_package(httplib REQUIRED)\nfind_package(libidn2 REQUIRED)\nfind_package(re2 REQUIRED)\nfind_package(nlohmann_json REQUIRED)\ninclude_directories(${nlohmann_json_INCLUDE_DIRS})\n\n## brotli\nfind_package(brotli REQUIRED)\nfind_path(BROTLI_INCLUDE_DIR \"brotli/decode.h\" REQUIRED)\ninclude_directories(${BROTLI_INCLUDE_DIR})\nfind_library(BROTLI_DEC_LIB NAMES brotlidec REQUIRED)\nfind_library(BROTLI_COMMON_LIB NAMES brotlicommon REQUIRED)\nfind_library(BROTLI_ENC_LIB NAMES brotlienc REQUIRED)\n\n# fptn-client-cli\nadd_executable(\n  \"${PROJECT_NAME}-cli\"\n  fptn-client-cli.cpp\n  vpn/vpn_client.h\n  vpn/vpn_client.cpp\n  vpn/http/client.h\n  vpn/http/client.cpp\n  routing/route_manager.h\n  routing/route_manager.cpp\n  config/config_file.cpp\n  config/config_file.h\n  plugins/split/tunneling.h\n  plugins/split/tunneling.cpp\n  plugins/blacklist/domain_blacklist.h\n  plugins/blacklist/domain_blacklist.cpp\n  utils/speed_estimator/speed_estimator.cpp\n  utils/speed_estimator/speed_estimator.h\n  utils/speed_estimator/server_info.h)\n\ntarget_link_libraries(\n  \"${PROJECT_NAME}-cli\"\n  PRIVATE ZLIB::ZLIB\n          Boost::boost\n          Boost::random\n          Boost::filesystem\n          Boost::process\n          Boost::locale\n          OpenSSL::SSL\n          OpenSSL::Crypto\n          argparse::argparse\n          nlohmann_json::nlohmann_json\n          spdlog::spdlog\n          fmt::fmt\n          PcapPlusPlus::PcapPlusPlus\n          libidn2::libidn2\n          re2::re2\n          fptn-protocol-lib_static\n          \"${TUNTAP_LIB}\"\n          \"${BROTLI_DEC_LIB}\"\n          \"${BROTLI_COMMON_LIB}\")\n\n# fptn-client-gui\nif(\"${FPTN_BUILD_WITH_GUI_CLIENT}\")\n  # --- disable clang-tidy for QT generated code ---\n  set_source_files_properties($<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/qrc_resources.cpp> PROPERTIES SKIP_CLANG_TIDY ON)\n  set(DISABLE_TIDY_DIR \"${CMAKE_BINARY_DIR}/src/fptn-client\")\n  file(MAKE_DIRECTORY \"${DISABLE_TIDY_DIR}\")\n  file(\n    WRITE \"${DISABLE_TIDY_DIR}/.clang-tidy\"\n    \"Checks: '-*,readability-inconsistent-declaration-parameter-name'\nWarningsAsErrors: ''\n    \")\n\n  find_package(\n    Qt6 REQUIRED\n    COMPONENTS Core\n               Gui\n               Widgets\n               Network\n               LinguistTools\n               Concurrent\n               CONFIG\n    REQUIRED)\n  set(CMAKE_AUTOMOC ON)\n  set(CMAKE_AUTORCC ON)\n  set(CMAKE_AUTOUIC ON)\n  set(CMAKE_INCLUDE_CURRENT_DIR ON)\n\n  qt_standard_project_setup()\n\n  set(QRC_FILES gui/resources/resources.qrc)\n  qt6_add_resources(PROJECT_RESOURCES ${QRC_FILES})\n\n  set(QT_ADDITIONAL_PARAMS \"\")\n  if(WIN32)\n    set(QT_ADDITIONAL_PARAMS WIN32)\n  endif()\n\n  set(PLATFORM_SPECIFIC_LIBS \"\")\n  if(APPLE)\n    set(PLATFORM_SPECIFIC_LIBS \"-framework Security\")\n  endif()\n\n  # translations\n  file(GLOB TRANSLATIONS gui/resources/translations/*.ts)\n  set_source_files_properties(${TRANSLATIONS} PROPERTIES OUTPUT_LOCATION \"${CMAKE_CURRENT_SOURCE_DIR}/gui/resources/translations/\")\n  qt6_add_translation(TRANSLATIONS_OUT ${TRANSLATIONS})\n\n  add_executable(\n    \"${PROJECT_NAME}-gui\"\n    ${QT_ADDITIONAL_PARAMS}\n    fptn-client-gui.cpp\n    vpn/vpn_client.h\n    vpn/vpn_client.cpp\n    vpn/http/client.h\n    vpn/http/client.cpp\n    routing/route_manager.h\n    routing/route_manager.cpp\n    config/config_file.cpp\n    config/config_file.h\n    gui/tray/tray.h\n    gui/tray/tray.cpp\n    gui/speedwidget/speedwidget.h\n    gui/speedwidget/speedwidget.cpp\n    gui/settingswidget/settings.h\n    gui/settingswidget/settings.cpp\n    gui/settingsmodel/settingsmodel.h\n    gui/settingsmodel/settingsmodel.cpp\n    gui/tokendialog/tokendialog.h\n    gui/tokendialog/tokendialog.cpp\n    gui/translations/translations.h\n    gui/translations/translations.cpp\n    gui/sni_manager/sni_manager.h\n    gui/sni_manager/sni_manager.cpp\n    gui/sni_autoscan_dialog/sni_autoscan_dialog.h\n    gui/sni_autoscan_dialog/sni_autoscan_dialog.cpp\n    gui/server_menu_item_widget/server_menu_item_widget.h\n    gui/server_menu_item_widget/server_menu_item_widget.cpp\n    gui/style/style.h\n    gui/style/style.cpp\n    gui/autostart/autostart.h\n    gui/autoupdate/autoupdate.h\n    plugins/split/tunneling.h\n    plugins/split/tunneling.cpp\n    plugins/blacklist/domain_blacklist.h\n    plugins/blacklist/domain_blacklist.cpp\n    utils/windows/vpn_conflict.h\n    utils/macos/admin.h\n    utils/speed_estimator/speed_estimator.cpp\n    utils/speed_estimator/speed_estimator.h\n    utils/speed_estimator/server_info.h\n    ${PROJECT_RESOURCES}\n    ${TRANSLATIONS_OUT})\n\n  target_link_libraries(\n    \"${PROJECT_NAME}-gui\"\n    PRIVATE ZLIB::ZLIB\n            Boost::boost\n            Boost::random\n            Boost::filesystem\n            Boost::process\n            Boost::locale\n            OpenSSL::SSL\n            OpenSSL::Crypto\n            argparse::argparse\n            spdlog::spdlog\n            fmt::fmt\n            PcapPlusPlus::PcapPlusPlus\n            Qt6::Core\n            Qt6::Gui\n            Qt6::Widgets\n            Qt6::Network\n            Qt6::Concurrent\n            libidn2::libidn2\n            re2::re2\n            fptn-protocol-lib_static\n            httplib::httplib\n            \"${TUNTAP_LIB}\"\n            \"${BROTLI_DEC_LIB}\"\n            \"${BROTLI_COMMON_LIB}\"\n            \"${PLATFORM_SPECIFIC_LIBS}\")\n  set_target_properties(\"${PROJECT_NAME}-gui\" PROPERTIES AUTOMOC ON)\nendif()\n"
  },
  {
    "path": "src/fptn-client/config/config_file.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"config/config_file.h\"\n\n#include <string>\n#include <utility>\n#include <vector>\n\n#include <nlohmann/json.hpp>\n\n#include \"common/utils/base64.h\"\n#include \"common/utils/utils.h\"\n\n#include \"utils/brotli/brotli.h\"\n\nusing fptn::utils::speed_estimator::ServerInfo;\n\nnamespace fptn::config {\n\nConfigFile::ConfigFile(std::string sni,\n    fptn::protocol::https::CensorshipStrategy censorship_strategy)\n    : sni_(std::move(sni)),\n      censorship_strategy_(censorship_strategy),\n      version_(0) {}  // NOLINT(whitespace/indent_namespace)\n\nConfigFile::ConfigFile(std::string token,\n    std::string sni,\n    fptn::protocol::https::CensorshipStrategy censorship_strategy)\n    : token_(std::move(token)),\n      sni_(std::move(sni)),\n      censorship_strategy_(censorship_strategy),\n      version_(0) {}  // NOLINT(whitespace/indent_namespace)\n\nbool ConfigFile::AddServer(const ServerInfo& s) {\n  servers_.push_back(s);\n  return true;\n}\n\nstd::optional<ServerInfo> ConfigFile::GetServer(\n    const std::string& server_name) const {\n  const std::string prepared_server_name =\n      fptn::common::utils::Trim(fptn::common::utils::ToLowerCase(server_name));\n\n  if (server_name.empty()) {\n    return std::nullopt;\n  }\n\n  auto it = std::ranges::find_if(\n      servers_, [&prepared_server_name](\n                    const fptn::utils::speed_estimator::ServerInfo& server) {\n        return fptn::common::utils::Trim(fptn::common::utils::ToLowerCase(\n                   server.name)) == prepared_server_name;\n      });\n  if (it != servers_.end()) {\n    return *it;\n  }\n  return std::nullopt;\n}\n\nbool ConfigFile::Parse() {\n  try {\n    if (token_.empty()) {\n      throw std::runtime_error(\"Token is empty\");\n    }\n    std::string token_data;\n    if (token_.starts_with(\"fptnb:\") || token_.starts_with(\"fptnb//\")) {\n      // Brotli\n      const std::string compressed_data = fptn::common::utils::base64::decode(\n          fptn::common::utils::RemoveSubstring(\n              token_, {\"fptnb:\", \"fptnb//\", \" \", \"\\n\", \"\\r\", \"\\t\", \"=\"}));\n      token_data = fptn::utils::brotli::Decompress(compressed_data);\n    } else {\n      const std::string sanitized_token = fptn::common::utils::RemoveSubstring(\n          token_, {\"fptn://\", \"fptn:\", \" \", \"\\n\", \"\\r\", \"\\t\", \"=\"});\n      token_data = fptn::common::utils::base64::decode(sanitized_token);\n    }\n\n    const auto config = nlohmann::json::parse(token_data);\n    version_ = config.at(\"version\").get<int>();\n    service_name_ = config.at(\"service_name\").get<std::string>();\n    username_ = config.at(\"username\").get<std::string>();\n    password_ = config.at(\"password\").get<std::string>();\n    for (const auto& server : config.at(\"servers\")) {\n      ServerInfo s(server.at(\"name\").get<std::string>(),\n          server.at(\"host\").get<std::string>(), server.at(\"port\").get<int>(),\n          server.at(\"md5_fingerprint\").get<std::string>());\n      servers_.push_back(s);\n    }\n    if (servers_.empty()) {\n      throw std::runtime_error(\"Server list is empty!\");\n    }\n    return true;\n  } catch (const nlohmann::json::exception& e) {\n    throw std::runtime_error(std::string(\"JSON parsing error: \") + e.what() +\n                             \". Try to update your token\");\n  } catch (const std::exception& e) {\n    throw std::runtime_error(std::string(\"Token parsing error: \") + e.what());\n  }\n}\n\nServerInfo ConfigFile::FindFastestServer(int timeout_sec) const {\n  return fptn::utils::speed_estimator::FindFastestServer(\n      sni_, servers_, censorship_strategy_, timeout_sec);\n}\n\nstd::uint64_t ConfigFile::GetDownloadTimeMs(const ServerInfo& server,\n    const std::string& sni,\n    int timeout,\n    const std::string& md5_fingerprint) {\n  return fptn::utils::speed_estimator::GetDownloadTimeMs(\n      server, sni, timeout, md5_fingerprint, censorship_strategy_);\n}\n\nint ConfigFile::GetVersion() const noexcept { return version_; }\n\nconst std::string& ConfigFile::GetServiceName() const noexcept {\n  return service_name_;\n}\n\nconst std::string& ConfigFile::GetUsername() const noexcept {\n  return username_;\n}\n\nconst std::string& ConfigFile::GetPassword() const noexcept {\n  return password_;\n}\n\nconst std::vector<ServerInfo>& ConfigFile::GetServers() const noexcept {\n  return servers_;\n}\n}  // namespace fptn::config\n"
  },
  {
    "path": "src/fptn-client/config/config_file.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <optional>\n#include <string>\n#include <utility>\n#include <vector>\n\n#include \"fptn-client/utils/speed_estimator/server_info.h\"\n#include \"fptn-client/utils/speed_estimator/speed_estimator.h\"\n#include \"fptn-protocol-lib/https/censorship_strategy.h\"\n\nnamespace fptn::config {\nclass ConfigFile final {\n public:\n  explicit ConfigFile(std::string sni,\n      fptn::protocol::https::CensorshipStrategy censorship_strategy);\n  explicit ConfigFile(std::string token,\n      std::string sni,\n      fptn::protocol::https::CensorshipStrategy censorship_strategy);\n\n  bool Parse();\n  fptn::utils::speed_estimator::ServerInfo FindFastestServer(\n      int timeout_sec) const;\n  std::uint64_t GetDownloadTimeMs(\n      const fptn::utils::speed_estimator::ServerInfo& server,\n      const std::string& sni,\n      int timeout,\n      const std::string& md5_fingerprint);\n\n  bool AddServer(const fptn::utils::speed_estimator::ServerInfo& s);\n\n  std::optional<fptn::utils::speed_estimator::ServerInfo> GetServer(\n      const std::string& server_name) const;\n\n  int GetVersion() const noexcept;\n  const std::string& GetServiceName() const noexcept;\n  const std::string& GetUsername() const noexcept;\n  const std::string& GetPassword() const noexcept;\n  const std::vector<fptn::utils::speed_estimator::ServerInfo>& GetServers()\n      const noexcept;\n\n private:\n  const std::string token_;\n  const std::string sni_;\n  const fptn::protocol::https::CensorshipStrategy censorship_strategy_;\n\n  int version_;\n  std::string service_name_;\n  std::string username_;\n  std::string password_;\n  std::vector<fptn::utils::speed_estimator::ServerInfo> servers_;\n};\n}  // namespace fptn::config\n"
  },
  {
    "path": "src/fptn-client/fptn-client-cli.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include <iostream>\n\n#if defined(__linux__) || defined(__APPLE__)\n#include <unistd.h>  // NOLINT(build/include_order)\n#endif\n\n#include <memory>\n#include <set>\n#include <string>\n#include <utility>\n#include <vector>\n\n#include <argparse/argparse.hpp>\n#include <fmt/format.h>  // NOLINT(build/include_order)\n#include <fmt/ranges.h>  // NOLINT(build/include_order)\n\n#include \"common/logger/logger.h\"\n#include \"common/network/ip_address.h\"\n#include \"common/network/net_interface.h\"\n\n#include \"config/config_file.h\"\n#include \"fptn-protocol-lib/https/obfuscator/methods/detector.h\"\n#include \"fptn-protocol-lib/time/time_provider.h\"\n#include \"plugins/blacklist/domain_blacklist.h\"\n#include \"routing/route_manager.h\"\n#include \"utils/signal/main_loop.h\"\n#include \"vpn/vpn_client.h\"\n\nint main(int argc, char* argv[]) {\n#if defined(__linux__) || defined(__APPLE__)\n  if (geteuid() != 0) {\n    std::cerr << \"You must be root to run this program.\" << std::endl;\n    return EXIT_FAILURE;\n  }\n#endif\n  try {\n    const std::set<std::string> bypass_methods = {\"obfuscation\",\n        /* chrome */\n        \"sni-reality-chrome147\", \"sni-reality-chrome146\",\n        \"sni-reality-chrome145\",\n        /* Firefox */\n        \"sni-reality-firefox149\",\n        /* Yandex */\n        \"sni-reality-yandex26\", \"sni-reality-yandex25\", \"sni-reality-yandex24\",\n        /* Safari */\n        \"sni-reality-safari26\"};\n    const std::set<std::string> tunnel_modes = {\"exclude\", \"include\"};\n\n    using fptn::protocol::https::obfuscator::GetObfuscatorByName;\n    using fptn::protocol::https::obfuscator::GetObfuscatorNames;\n\n    argparse::ArgumentParser args(\"fptn-client\", FPTN_VERSION);\n    // Required arguments\n    args.add_argument(\"--access-token\").required().help(\"Access token\");\n    // Optional arguments\n    args.add_argument(\"--out-network-interface\")\n        .default_value(\"\")\n        .help(\"Network out interface\");\n    args.add_argument(\"--gateway-ip\")\n        .default_value(\"\")\n        .help(\"Your default gateway IPv4 address\");\n    args.add_argument(\"--gateway-ipv6\")\n        .default_value(\"\")\n        .help(\"Your default gateway IPv6 address\");\n    args.add_argument(\"--preferred-server\")\n        .default_value(\"\")\n        .help(\"Preferred server name (case-insensitive)\");\n    args.add_argument(\"--tun-interface-name\")\n        .default_value(\"tun0\")\n        .help(\"Network interface name\");\n    args.add_argument(\"--tun-interface-ip\")\n        .default_value(FPTN_CLIENT_DEFAULT_ADDRESS_IP4)\n        .help(\"Network interface IPv4 address\");\n    args.add_argument(\"--tun-interface-ipv6\")\n        .default_value(FPTN_CLIENT_DEFAULT_ADDRESS_IP6)\n        .help(\"Network interface IPv6 address\");\n    args.add_argument(\"--sni\")\n        .default_value(FPTN_DEFAULT_SNI)\n        .help(\n            \"Domain name for SNI in TLS handshake (used to obfuscate VPN \"\n            \"traffic)\");\n    args.add_argument(\"--blacklist-domains\")\n        .default_value(FPTN_CLIENT_DEFAULT_BLACKLIST_DOMAINS)\n        .help(\n            \"Completely block access to the main domain AND all its \"\n            \"subdomains\\n\"\n            \"Format: domain:example.com,domain:sub.site.org\\n\"\n            \"Example: domain:ria.ru blocks ria.ru and all *.ria.ru sites\");\n    // Method to bypass censorship\n    args.add_argument(\"--bypass-method\")\n        .default_value(\"sni-reality-yandex25\")\n        .help(\n            \"Method to bypass censorship:\\n\"\n            \"  obfuscation            - TLS obfuscation\\n\"\n            \"  sni-reality-chrome147  - SNI reality with Chrome 146 handshake\\n\"\n            \"  sni-reality-chrome146  - SNI reality with Chrome 146 handshake\\n\"\n            \"  sni-reality-chrome145  - SNI reality with Chrome 145 handshake\\n\"\n            \"  sni-reality-firefox149 - SNI reality with Firefox 149 \"\n            \"handshake\\n\"\n            \"  sni-reality-yandex26   - SNI reality with Yandex 26 handshake\\n\"\n            \"  sni-reality-yandex25   - SNI reality with Yandex 25 handshake\\n\"\n            \"  sni-reality-yandex24   - SNI reality with Yandex 24 handshake\\n\"\n            \"  sni-reality-safari26   - SNI reality with Safari 26 handshake\\n\")\n        .action([&bypass_methods](const std::string& v) {\n          if (!bypass_methods.contains(v)) {\n            throw std::runtime_error(\n                fmt::format(\"Invalid bypass method '{}'. Choose from: {}\", v,\n                    fmt::join(bypass_methods, \", \")));\n          }\n          return v;\n        });\n    // networks\n    args.add_argument(\"--exclude-tunnel-networks\")\n        .default_value(FPTN_CLIENT_DEFAULT_EXCLUDE_NETWORKS)\n        .help(\n            \"Networks that always bypass VPN tunnel\\n\"\n            \"Traffic to these networks goes directly, never through VPN\\n\"\n            \"Format: CIDR notation or IP addresses, comma-separated\\n\"\n            \"Example: 10.0.0.0/8,192.168.0.0/16\");\n    args.add_argument(\"--include-tunnel-networks\")\n        .default_value(\"\")\n        .help(\n            \"Networks that always use VPN tunnel\\n\"\n            \"Traffic to these networks always goes through VPN\\n\"\n            \"Format: CIDR notation or IP addresses, comma-separated\\n\"\n            \"Example: 172.16.0.0/12,192.168.99.0/24\");\n    // Split-tunneling arguments\n    args.add_argument(\"--enable-split-tunnel\")\n        .help(\n            \"Enable split tunneling - allows different traffic routing for \"\n            \"different sites.\\n\"\n            \"When enabled, you can configure which sites use VPN and which go\"\n            \"directly.\\n\"\n            \"Use with --split-tunnel-mode and --split-tunnel-domains for \"\n            \"configuration.\")\n        .default_value(false)\n        .nargs(1)\n        .action([](const std::string& value) {\n          if (value.empty()) {\n            return true;\n          }\n          if (fptn::common::utils::ToLowerCase(value) == \"true\") {\n            return true;\n          }\n          if (fptn::common::utils::ToLowerCase(value) == \"false\") {\n            return false;\n          }\n          throw std::runtime_error(\"Value must be true/false\");\n        });\n    args.add_argument(\"--split-tunnel-mode\")\n        .default_value(\"exclude\")\n        .help(\n            \"Defines traffic routing strategy for split tunneling.\\n\"\n            \"Modes:\\n\"\n            \"  exclude - Bypass VPN for specified domains, route all other \"\n            \"traffic through VPN.\\n\"\n            \"  include - Route only specified domains through VPN, bypass VPN \"\n            \"for all other traffic.\\n\")\n        .action([&tunnel_modes](const std::string& v) {\n          if (!tunnel_modes.contains(v)) {\n            throw std::runtime_error(\n                fmt::format(\"Invalid tunnel mode '{}'. Choose from: {}\", v,\n                    fmt::join(tunnel_modes, \", \")));\n          }\n          return v;\n        });\n    args.add_argument(\"--split-tunnel-domains\")\n        .default_value(FPTN_CLIENT_DEFAULT_SPLIT_TUNNEL_DOMAINS)\n        .help(\n            \"List websites that should either use or bypass VPN\\n\"\n            \"\\n\"\n            \"How it works:\\n\"\n            \"  If --tunnel-mode=exclude: VPN skips these sites\\n\"\n            \"  If --tunnel-mode=include: VPN only for these sites\\n\"\n            \"Format: domain:com,domain:another.com,domain:sub.domainname.com\");\n    // parse cmd arguments\n    try {\n      args.parse_args(argc, argv);\n    } catch (const std::runtime_error& err) {\n      std::cerr << err.what() << std::endl;\n      std::cerr << args;\n      return EXIT_FAILURE;\n    }\n\n    if (fptn::logger::init(\"fptn-client-cli\")) {\n      SPDLOG_INFO(\"Application started successfully.\");\n    } else {\n      std::cerr << \"Logger initialization failed. Exiting application.\"\n                << std::endl;\n      return EXIT_FAILURE;\n    }\n\n    /* parse cmd args */\n    const auto out_network_interface_name =\n        args.get<std::string>(\"--out-network-interface\");\n\n    const auto param_gateway_ip = args.get<std::string>(\"--gateway-ip\");\n    const auto gateway_ip =\n        fptn::common::network::IPv4Address::Create(param_gateway_ip);\n\n    const auto param_gateway_ipv6 = args.get<std::string>(\"--gateway-ipv6\");\n    const auto gateway_ipv6 =\n        fptn::common::network::IPv6Address::Create(param_gateway_ipv6);\n\n    const auto preferred_server = args.get<std::string>(\"--preferred-server\");\n\n    const auto tun_interface_name =\n        args.get<std::string>(\"--tun-interface-name\");\n    const auto tun_interface_address_ipv4 =\n        fptn::common::network::IPv4Address::Create(\n            args.get<std::string>(\"--tun-interface-ip\"));\n    const auto tun_interface_address_ipv6 =\n        fptn::common::network::IPv6Address::Create(\n            args.get<std::string>(\"--tun-interface-ipv6\"));\n    const auto sni = args.get<std::string>(\"--sni\");\n\n    /* check gateway address */\n    const auto using_gateway_ip =\n        gateway_ip.IsEmpty()\n            ? fptn::routing::GetDefaultGatewayIPAddress()\n            : fptn::common::network::IPv4Address::Create(gateway_ip);\n    const auto using_gateway_ipv6 =\n        gateway_ipv6.IsEmpty()\n            ? fptn::routing::GetDefaultGatewayIPv6Address()\n            : fptn::common::network::IPv6Address::Create(gateway_ipv6);\n    if (using_gateway_ip.IsEmpty()) {\n      SPDLOG_ERROR(\n          \"Unable to find the default gateway IP address. \"\n          \"Please check your connection and make sure no other VPN is active. \"\n          \"If the error persists, specify the gateway address in the FPTN \"\n          \"settings using your router's IP \"\n          \"address with the \\\"--gateway-ip\\\" option. If the issue \"\n          \"remains unresolved, please contact the developer via Telegram \"\n          \"@fptn_chat.\");\n      return EXIT_FAILURE;\n    }\n\n    const auto bypass_method = args.get<std::string>(\"--bypass-method\");\n    fptn::protocol::https::CensorshipStrategy censorship_strategy =\n        fptn::protocol::https::CensorshipStrategy::kSniRealityModeYandex25;\n    if (bypass_method == \"obfuscation\") {\n      censorship_strategy =\n          fptn::protocol::https::CensorshipStrategy::kTlsObfuscator;\n    }\n    /* Chrome */\n    else if (bypass_method == \"sni-reality-chrome147\") {\n      SPDLOG_INFO(\"Using Chrome 147 handshake for censorship bypass\");\n      censorship_strategy =\n          fptn::protocol::https::CensorshipStrategy::kSniRealityModeChrome147;\n    } else if (bypass_method == \"sni-reality-chrome146\") {\n      SPDLOG_INFO(\"Using Chrome 146 handshake for censorship bypass\");\n      censorship_strategy =\n          fptn::protocol::https::CensorshipStrategy::kSniRealityModeChrome146;\n    } else if (bypass_method == \"sni-reality-chrome145\") {\n      SPDLOG_INFO(\"Using Chrome 144 handshake for censorship bypass\");\n      censorship_strategy =\n          fptn::protocol::https::CensorshipStrategy::kSniRealityModeChrome145;\n    }\n    /* Firefox */\n    else if (bypass_method == \"sni-reality-firefox149\") {\n      SPDLOG_INFO(\"Using Firefox 149 handshake for censorship bypass\");\n      censorship_strategy =\n          fptn::protocol::https::CensorshipStrategy::kSniRealityModeFirefox149;\n    }\n    /* Yandex */\n    else if (bypass_method == \"sni-reality-yandex26\") {\n      SPDLOG_INFO(\"Using Yandex 26 handshake for censorship bypass\");\n      censorship_strategy =\n          fptn::protocol::https::CensorshipStrategy::kSniRealityModeYandex26;\n    } else if (bypass_method == \"sni-reality-yandex25\") {\n      SPDLOG_INFO(\"Using Yandex 25 handshake for censorship bypass\");\n      censorship_strategy =\n          fptn::protocol::https::CensorshipStrategy::kSniRealityModeYandex25;\n    } else if (bypass_method == \"sni-reality-yandex24\") {\n      SPDLOG_INFO(\"Using Yandex 25 handshake for censorship bypass\");\n      censorship_strategy =\n          fptn::protocol::https::CensorshipStrategy::kSniRealityModeYandex25;\n    }\n    /* Safari */\n    else if (bypass_method == \"sni-reality-safari26\") {\n      SPDLOG_INFO(\"Using Safari 26 handshake for censorship bypass\");\n      censorship_strategy =\n          fptn::protocol::https::CensorshipStrategy::kSniRealityModeSafari26;\n    }\n\n    /* parse network lists */\n    const auto exclude_networks_str =\n        args.get<std::string>(\"--exclude-tunnel-networks\");\n    const auto include_networks_str =\n        args.get<std::string>(\"--include-tunnel-networks\");\n\n    const std::vector<std::string> exclude_networks =\n        fptn::common::utils::SplitCommaSeparated(exclude_networks_str);\n    const std::vector<std::string> include_networks =\n        fptn::common::utils::SplitCommaSeparated(include_networks_str);\n\n    /* parse split-tunneling parameters */\n    const bool enable_split_tunnel = args.get<bool>(\"--enable-split-tunnel\");\n    const auto tunnel_mode = args.get<std::string>(\"--split-tunnel-mode\");\n    const auto split_domains_str =\n        args.get<std::string>(\"--split-tunnel-domains\");\n    const auto blacklist_domains_str =\n        args.get<std::string>(\"--blacklist-domains\");\n\n    const std::vector<std::string> split_domains =\n        fptn::common::utils::SplitCommaSeparated(split_domains_str);\n    const std::vector<std::string> blacklist_domains =\n        fptn::common::utils::SplitCommaSeparated(blacklist_domains_str);\n\n    /* check config */\n    const auto access_token = args.get<std::string>(\"--access-token\");\n    fptn::config::ConfigFile config(access_token, sni, censorship_strategy);\n    fptn::utils::speed_estimator::ServerInfo selected_server;\n    try {\n      config.Parse();\n      if (!preferred_server.empty()) {\n        auto server_opt = config.GetServer(preferred_server);\n        if (server_opt.has_value()) {\n          selected_server = std::move(*server_opt);\n        } else {\n          SPDLOG_WARN(\"Server '{}' does not exist! Check your token!\",\n              preferred_server);\n          selected_server = config.FindFastestServer(15);\n        }\n      } else {\n        selected_server = config.FindFastestServer(15);\n      }\n    } catch (const std::runtime_error& err) {\n      SPDLOG_ERROR(\"Config error: {}\", err.what());\n      return EXIT_FAILURE;\n    }\n    const auto server_ip = fptn::routing::ResolveDomain(selected_server.host);\n    if (server_ip.IsEmpty()) {\n      SPDLOG_ERROR(\"DNS resolve error: {}\", selected_server.host);\n      return EXIT_FAILURE;\n    }\n\n    SPDLOG_INFO(\n        \"\\n--- Starting client ---\\n\"\n        \"VERSION:            {}\\n\"\n        \"SELECTED SERVER:    {}\\n\"\n        \"SNI:                {}\\n\"\n        \"GATEWAY IP:         {}\\n\"\n        \"NETWORK INTERFACE:  {}\\n\"\n        \"VPN SERVER NAME:    {}\\n\"\n        \"VPN SERVER IP:      {}\\n\"\n        \"VPN SERVER PORT:    {}\\n\"\n        \"TUN INTERFACE IPv4: {}\\n\"\n        \"TUN INTERFACE IPv6: {}\\n\"\n        \"BYPASS-METHOD:      {}\\n\"\n        \"EXCLUDE NETWORKS:   {}\\n\"\n        \"INCLUDE NETWORKS:   {}\\n\"\n        \"SPLIT TUNNEL:       {}\\n\"\n        \"TUNNEL MODE:        {}\\n\"\n        \"TUNNEL DOMAINS:     {}\\n\"\n        \"BLACKLIST DOMAINS:  {}\\n\",\n        FPTN_VERSION, selected_server.name, sni, using_gateway_ip.ToString(),\n        out_network_interface_name, selected_server.name, selected_server.host,\n        selected_server.port, tun_interface_address_ipv4.ToString(),\n        tun_interface_address_ipv6.ToString(), bypass_method,\n        exclude_networks_str, include_networks_str,\n        enable_split_tunnel ? \"enabled\" : \"disabled\", tunnel_mode,\n        split_domains_str, blacklist_domains_str);\n\n    /* auth & dns */\n    auto http_client = std::make_unique<fptn::vpn::http::Client>(server_ip,\n        selected_server.port, tun_interface_address_ipv4,\n        tun_interface_address_ipv6, sni, selected_server.md5_fingerprint,\n        censorship_strategy);\n    const bool status =\n        http_client->Login(config.GetUsername(), config.GetPassword());\n    if (!status) {\n      SPDLOG_ERROR(\"The username or password you entered is incorrect\");\n      return EXIT_FAILURE;\n    }\n    const auto [dnsServerIPv4, dnsServerIPv6] = http_client->GetDns();\n    if (dnsServerIPv4.IsEmpty() || dnsServerIPv6.IsEmpty()) {\n      SPDLOG_ERROR(\"DNS server error! Check your connection!\");\n      return EXIT_FAILURE;\n    }\n\n    /* tun interface */\n    auto virtual_network_interface =\n        std::make_unique<fptn::common::network::TunInterface>(\n            fptn::common::network::TunInterface::Config{\n                .name = tun_interface_name,\n                .ipv4_addr = tun_interface_address_ipv4,\n                .ipv4_netmask = 30,  // IPv4 netmask\n                .ipv6_addr = tun_interface_address_ipv6,\n                .ipv6_netmask = 126  // IPv6 netmask\n            });\n\n    /* route manager */\n    auto route_manager = std::make_shared<fptn::routing::RouteManager>(\n        out_network_interface_name, tun_interface_name, server_ip,\n        dnsServerIPv4, dnsServerIPv6, using_gateway_ip, using_gateway_ipv6,\n        tun_interface_address_ipv4, tun_interface_address_ipv6\n#if _WIN32\n        ,\n        false\n#endif\n    );  // NOLINT\n\n    /* plugins */\n    std::vector<fptn::plugin::BasePluginPtr> client_plugins;\n    if (!blacklist_domains.empty()) {\n      auto blacklist_plugin = std::make_unique<fptn::plugin::DomainBlacklist>(\n          blacklist_domains, route_manager);\n      client_plugins.push_back(std::move(blacklist_plugin));\n    }\n\n    if (enable_split_tunnel) {\n      const auto policy = tunnel_mode == \"exclude\"\n                              ? fptn::routing::RoutingPolicy::kExcludeFromVpn\n                              : fptn::routing::RoutingPolicy::kIncludeInVpn;\n      auto split_tunnel_plugin = std::make_unique<fptn::plugin::Tunneling>(\n          split_domains, route_manager, policy);\n      client_plugins.push_back(std::move(split_tunnel_plugin));\n    }\n\n    /* vpn client */\n    fptn::vpn::VpnClient vpn_client(std::move(http_client),\n        std::move(virtual_network_interface), dnsServerIPv4, dnsServerIPv6,\n        std::move(client_plugins));\n    vpn_client.Start();\n\n    // Update tun name to actual device name (may differ on macOS)\n    route_manager->UpdateTunInterfaceName(vpn_client.GetInterfaceName());\n\n    // Wait for the WebSocket tunnel to establish\n    constexpr std::chrono::seconds kTimeout(10);\n    const auto start = std::chrono::steady_clock::now();\n    while (!vpn_client.IsStarted()) {\n      if (std::chrono::steady_clock::now() - start > kTimeout) {\n        SPDLOG_ERROR(\"Couldn't open websocket tunnel!\");\n        return EXIT_FAILURE;\n      }\n      std::this_thread::sleep_for(std::chrono::microseconds(200));\n    }\n\n    /* apply mandatory network routes */\n    route_manager->Apply();\n    if (!exclude_networks.empty()) {\n      route_manager->AddExcludeNetworks(exclude_networks);\n    }\n    if (!include_networks.empty()) {\n      route_manager->AddIncludeNetworks(include_networks);\n    }\n\n    /* start event loop */\n    fptn::utils::WaitForSignal(vpn_client);\n\n    /* clean */\n    route_manager->Clean();\n    vpn_client.Stop();\n    spdlog::shutdown();\n    return EXIT_SUCCESS;\n  } catch (const std::exception& ex) {\n    SPDLOG_ERROR(\"An error occurred: {}. Exiting...\", ex.what());\n  } catch (...) {\n    SPDLOG_ERROR(\"An unknown error occurred. Exiting...\");\n  }\n  return EXIT_FAILURE;\n}\n"
  },
  {
    "path": "src/fptn-client/fptn-client-gui.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#if defined(__linux__) || defined(__APPLE__)\n#include <unistd.h>\n#endif\n\n#include <iostream>\n#include <memory>\n\n#include <QApplication>   // NOLINT(build/include_order)\n#include <QStyleFactory>  // NOLINT(build/include_order)\n\n#include \"common/logger/logger.h\"\n\n#include \"gui/tray/tray.h\"\n\n#ifdef __APPLE__\n#include \"utils/macos/admin.h\"\n#endif\n\nnamespace {\n#if defined(__linux__) || defined(__APPLE__)\nvoid SignalHandler(int) { QApplication::quit(); }\n#elif defined(_WIN32)\nBOOL WINAPI SignalHandler(DWORD ctrlType) {\n  if (ctrlType == CTRL_C_EVENT || ctrlType == CTRL_BREAK_EVENT) {\n    qApp->quit();\n    return TRUE;\n  }\n  return FALSE;\n}\n#else\n#error \"Unsupported platform\"\n#endif\n\n}  // namespace\n\nint main(int argc, char* argv[]) {\n  try {\n#ifdef __linux__\n    if (geteuid() != 0) {\n      std::cerr << \"You must be root to run this program.\\n\";\n      return EXIT_FAILURE;\n    }\n#elif defined(__APPLE__)\n    if (!fptn::utils::macos::RestartApplicationWithAdminRights()) {\n      return EXIT_FAILURE;  // Failed to get admin rights\n    }\n#endif\n\n    // Initialize logger\n    if (fptn::logger::init(\"fptn-client-gui\")) {\n      SPDLOG_INFO(\"Application started successfully.\");\n    } else {\n      std::cerr << \"Logger initialization failed. Exiting application.\"\n                << std::endl;\n      return EXIT_FAILURE;\n    }\n\n    // Setup signal handler\n#if defined(__APPLE__) || defined(__linux__)\n    std::signal(SIGINT, SignalHandler);\n    std::signal(SIGHUP, SignalHandler);\n    std::signal(SIGTERM, SignalHandler);\n    std::signal(SIGQUIT, SignalHandler);\n#if __linux__\n    std::signal(SIGPWR, SignalHandler);\n#endif\n#elif defined(_WIN32)\n    SetConsoleCtrlHandler(SignalHandler, TRUE);\n#endif\n\n    // Initialize GUI app\n    QApplication::setDesktopSettingsAware(true);\n    QApplication::setQuitOnLastWindowClosed(false);\n#if __APPLE__\n    QCoreApplication::setSetuidAllowed(true);\n    QApplication::setAttribute(Qt::AA_MacDontSwapCtrlAndMeta, false);\n#elif defined(_WIN32)\n    QApplication::setStyle(QStyleFactory::create(\"windowsvista\"));\n#endif\n\n    QApplication app(argc, argv);\n    const auto settings = std::make_shared<fptn::gui::SettingsModel>(\n        QMap<QString, QString>{{\"en\", \"English\"}, {\"ru\", \"Русский\"}});\n\n    // Start GUI app\n    fptn::gui::TrayApp tray(settings);\n\n    // NOLINTNEXTLINE(readability-static-accessed-through-instance)\n    const int code = app.exec();\n\n    // Clean resources\n    tray.stop();\n    spdlog::shutdown();\n    return code;\n  } catch (const std::exception& ex) {\n    SPDLOG_ERROR(\"An error occurred: {}. Exiting...\", ex.what());\n  } catch (...) {\n    SPDLOG_ERROR(\"An unknown error occurred. Exiting...\");\n  }\n  return EXIT_FAILURE;\n}\n"
  },
  {
    "path": "src/fptn-client/gui/autostart/autostart.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <filesystem>\n#include <fstream>\n#include <iostream>\n#include <string>\n\n#include <fmt/format.h>  // NOLINT(build/include_order)\n\n#include \"common/system/command.h\"\n\n#if _WIN32\n#include <Windows.h>  // NOLINT(build/include_order)\n#include <shlobj.h>   // NOLINT(build/include_order)\n#endif\n\nnamespace fptn::gui::autostart {\n\n#if __APPLE__\ninline std::string GetMacOsPlistPath() {\n  const char* home_env = std::getenv(\"HOME\");\n  if (nullptr == home_env) {\n    return {};\n  }\n  const std::string home = home_env;\n  const auto path =\n      std::filesystem::path(home) / \"Library\" / \"LaunchAgents\" / \"org.fptn.vpn\";\n  return path.string();\n}\n#elif __linux__\ninline std::string getLinuxDesktopEntryPath() {\n  return \"/etc/xdg/autostart/fptn-autostart.desktop\";\n}\n#elif _WIN32\ninline std::string getWindowsFullPath() {\n  wchar_t fptn_path[MAX_PATH] = {};\n  if (GetModuleFileNameW(nullptr, fptn_path, MAX_PATH) == 0) {\n    const DWORD code = GetLastError();\n    SPDLOG_ERROR(\"Failed to retrieve the path. Error code: {}\", code);\n    return {};\n  }\n\n  const std::filesystem::path fptnExe(fptn_path);\n  const auto batPath = fptnExe.parent_path() / \"FptnClient.bat\";\n  return batPath.string();\n}\n\ninline std::string getWindowsStartupFolder() {\n  wchar_t path[MAX_PATH] = {};\n  if (!SUCCEEDED(SHGetFolderPathW(nullptr, CSIDL_STARTUP, nullptr, 0, path))) {\n    const DWORD code = GetLastError();\n    SPDLOG_ERROR(\n        \"Failed to retrieve the startup folder path. Error code: {}\", code);\n    return {};\n  }\n\n  // Convert wide string to UTF-8 using Windows API\n  int utf8_size =\n      WideCharToMultiByte(CP_UTF8, 0, path, -1, nullptr, 0, nullptr, nullptr);\n  if (utf8_size == 0) {\n    const DWORD code = GetLastError();\n    SPDLOG_ERROR(\"Failed to convert path to UTF-8. Error code: {}\", code);\n    return {};\n  }\n\n  std::string utf8_path(utf8_size, '\\0');\n  WideCharToMultiByte(\n      CP_UTF8, 0, path, -1, &utf8_path[0], utf8_size, nullptr, nullptr);\n  utf8_path.resize(utf8_size - 1);  // Remove null terminator\n  return utf8_path;\n}\n#endif\n\ninline bool enable() {\n#if __APPLE__\n//  const std::string autostart_template =\n//      R\"PLIST(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n//            <!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\"\n//            \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n//                <plist version=\"1.0\">\n//                    <dict>\n//                        <key>Label</key>\n//                        <string>org.fptn.vpn</string>\n//\n//                        <key>AssociatedBundleIdentifiers</key>\n//                        <array>\n//                            <string>org.fptn.vpn</string>\n//                        </array>\n//\n//                        <key>DisplayName</key>\n//                        <string>FptnClient</string>\n//\n//                        <key>ProgramArguments</key>\n//                        <array>\n//                            <string>{}</string>\n//                        </array>\n//\n//                        <key>UserName</key>\n//                        <string>root</string>\n//\n//                        <key>RunAtLoad</key>\n//                        <true/>\n//\n//                        <key>KeepAlive>\n//                        <true/>\n//\n//                        <key>SessionCreate</key>\n//                        <true/>\n//\n//                        <key>EnableTransactions</key>\n//                        <true/>\n//                    </dict>\n//                </plist>\n//        )PLIST\";\n//  const auto script_path = std::filesystem::current_path() / \"Contents\" /\n//                          \"MacOS\" / \"fptn-client-gui-wrapper.sh\";\n//  const auto plist = fmt::format(autostart_template, script_path.u8string());\n//  const std::string plist_path = GetMacOsPlistPath();\n//  if (plist_path.empty()) {\n//    SPDLOG_ERROR(\"Failed to get the macOS plist path.\");\n//    return false;\n//  }\n//  SPDLOG_INFO(\"Plist path: {}\", plist_path);\n//  std::ofstream file(plist_path);\n//  if (file.is_open()) {\n//    file << plist;\n//    file.close();\n//    SPDLOG_INFO(\"Plist file written successfully at {}\", plist_path);\n//  } else {\n//    SPDLOG_ERROR(\"Unable to write to plist file at {}\", plist_path);\n//    return false;\n//  }\n//  const std::string command =\n//  fmt::format(R\"(launchctl load \"{}\" )\", plist_path);\n//  if (!fptn::common::system::command::run(command)) {\n//    SPDLOG_ERROR(\"Failed to load plist using launchctl.\n//    Command: {}\", command);\n//    return false;\n//  }\n#elif __linux__\n  const std::string entry = R\"PLIST([Desktop Entry]\n                Name=FptnClient\n                Terminal=false\n                Exec=/usr/bin/fptn-client\n                Type=Application\n                Icon=/path/icon.png\n                Categories=Utility;\n            )PLIST\";\n\n  const auto path = std::filesystem::path(getLinuxDesktopEntryPath());\n  if (path.empty()) {\n    SPDLOG_ERROR(\"Failed to get the macOS plist path.\");\n    return false;\n  }\n  std::ofstream file(path);\n  if (file.is_open()) {\n    file << entry;\n    file.close();\n  } else {\n    return false;\n  }\n#elif _WIN32\n  // const std::string fptn_path = getWindowsFullPath();\n  // const std::string windowsStartupFolder = getWindowsStartupFolder();\n  // if (fptn_path.empty() || windowsStartupFolder.empty()) {\n  //     return false;\n  // }\n  // // SET REG\n  // const std::string command = fmt::format(\n  //     R\"(reg add \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\" /v\n  //     \"FptnClient\" /t REG_SZ /d \"{}\" /f )\", fptn_path\n  // );\n  // if (!fptn::common::system::command::run(command)) {\n  //     SPDLOG_ERROR(\"Error running command: {}\", command);\n  //     return false;\n// }\n// SET SHORTCUT\n// const std::filesystem::path shortcutPath =\n// std::filesystem::path(windowsStartupFolder) / \"FptnClient.lnk\"; const\n// std::string powershellCommand = fmt::format(\n//     R\"(powershell -Command \"$ws = New-Object -ComObject WScript.Shell; $s =\n//     $ws.CreateShortcut('{}'); $s.TargetPath = '{}'; $s.Save();\")\",\n//     shortcutPath.u8string(), fptn_path\n// );\n// if (!fptn::common::system::command::run(powershellCommand)) {\n//     SPDLOG_ERROR(\"Failed to create shortcut: {}\", powershellCommand);\n//     return false;\n// }\n// SPDLOG_INFO(\"Shortcut created successfully at: {}\",\n// shortcutPath.u8string());\n#endif\n  SPDLOG_INFO(\"Autostart successfully enabled\");\n  return true;\n}\n\ninline bool disable() {\n#if __APPLE__\n  const std::string plist_path = GetMacOsPlistPath();\n  if (plist_path.empty()) {\n    SPDLOG_ERROR(\"Failed to get the macOS plist path.\");\n    return false;\n  }\n  if (std::filesystem::exists(plist_path)) {\n    const std::string command =\n        fmt::format(R\"(launchctl unload \"{}\" )\", plist_path);\n    if (!fptn::common::system::command::run(command)) {\n      return false;\n    }\n    if (!std::filesystem::remove(plist_path)) {\n      return false;\n    }\n  }\n#elif __linux__\n  if (std::filesystem::exists(getLinuxDesktopEntryPath())) {\n    if (!std::filesystem::remove(getLinuxDesktopEntryPath())) {\n      return false;\n    }\n  }\n#elif _WIN32\n  // delete reg\n  // const std::string command = R\"(reg delete\n  // \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\" /v \"FptnClient\" /f )\";\n  // if (!fptn::common::system::command::run(command)) {\n  //     SPDLOG_ERROR(\"Error running command: {}\", command);\n  // }\n  // delete shortcut\n  // const std::string windowsStartupFolder = getWindowsStartupFolder();\n  // const std::filesystem::path shortcutPath =\n  // std::filesystem::path(windowsStartupFolder) / \"FptnClient.lnk\"; if\n  // (std::filesystem::exists(shortcutPath) &&\n  // std::filesystem::remove(shortcutPath)) {\n  //     SPDLOG_INFO(\"Shortcut deleted successfully: {}\",\n  //     shortcutPath.u8string());\n  // } else {\n  //     SPDLOG_INFO(\"No shortcut found to delete at: {}\",\n  //     shortcutPath.u8string());\n  // }\n#endif\n  SPDLOG_INFO(\"Disable autostart\");\n  return true;\n}\n}  // namespace fptn::gui::autostart\n"
  },
  {
    "path": "src/fptn-client/gui/autoupdate/autoupdate.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <algorithm>\n#include <iostream>\n#include <string>\n#include <utility>\n#include <vector>\n\n#define CPPHTTPLIB_OPENSSL_SUPPORT\n\n#include <fmt/format.h>       // NOLINT(build/include_order)\n#include <httplib/httplib.h>  // NOLINT(build/include_order)\n#include <nlohmann/json.hpp>\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\n#include \"fptn-protocol-lib/https/api_client/api_client.h\"\n\nnamespace fptn::gui::autoupdate {\nnamespace version {\ninline std::vector<int> ParseVersion(const std::string& version) {\n  std::vector<int> parsed;\n  std::stringstream ss(version);\n  std::string segment;\n  while (std::getline(ss, segment, '.')) {\n    parsed.push_back(std::stoi(segment));\n  }\n  return parsed;\n}\n\ninline int compare(const std::string& version1, const std::string& version2) {\n  std::vector<int> v1 = ParseVersion(version1);\n  std::vector<int> v2 = ParseVersion(version2);\n\n  const std::size_t max_length = (std::max)(v1.size(), v2.size());\n  v1.resize(max_length, 0);\n  v2.resize(max_length, 0);\n  for (size_t i = 0; i < max_length; ++i) {\n    if (v1[i] < v2[i]) return -1;  // version1 is less than version2\n    if (v1[i] > v2[i]) return 1;   // version1 is greater than version2\n  }\n  return 0;\n}\n}  // namespace version\n\n#ifdef CPPHTTPLIB_OPENSSL_SUPPORT\ninline std::pair<bool, std::string> Check() {\n  const auto url = fmt::format(\"/repos/{}/{}/releases/latest\",\n      FPTN_GITHUB_USERNAME, FPTN_GITHUB_REPOSITORY);\n  try {\n    httplib::SSLClient cli(\"api.github.com\", 443);\n    {\n      cli.enable_server_certificate_verification(false);  // NEED TO FIX\n      cli.set_connection_timeout(5, 0);                   // 5 seconds\n      cli.set_read_timeout(5, 0);                         // 5 seconds\n      cli.set_write_timeout(5, 0);                        // 5 seconds\n    }\n    if (auto resp = cli.Get(url)) {\n      try {\n        const auto msg = nlohmann::json::parse(resp->body);\n        if (msg.contains(\"draft\") && msg.contains(\"name\")) {\n          const bool draft = msg[\"draft\"];\n          const std::string version_name = msg[\"name\"];\n          if (!draft && version::compare(FPTN_VERSION, version_name) == -1) {\n            return {true, version_name};\n          }\n          return {false, version_name};\n        }\n      } catch (const nlohmann::json::parse_error& e) {\n        SPDLOG_ERROR(\"autoupdate:check Error parsing JSON response: {}  {}\",\n            e.what(), resp->body);\n      }\n    }\n  } catch (...) {\n    SPDLOG_ERROR(\"unhandled exception\");\n  }\n  return {false, {}};\n}\n#else\ninline std::pair<bool, std::string> Check() {\n  fptn::protocol::https::HttpsClient cli(\"api.github.com\", 443);\n\n  const auto url = fmt::format(\"/repos/{}/{}/releases/latest\",\n      FPTN_GITHUB_USERNAME, FPTN_GITHUB_REPOSITORY);\n  const auto resp = cli.Get(url);\n\n  if (resp.code == 200) {\n    try {\n      const auto msg = resp.Json();\n      if (msg.contains(\"draft\") && msg.contains(\"name\")) {\n        const bool draft = msg[\"draft\"];\n        const std::string version_name = msg[\"name\"];\n        if (!draft && version::compare(FPTN_VERSION, version_name) == -1) {\n          return {true, version_name};\n        }\n        return {false, version_name};\n      }\n    } catch (const nlohmann::json::parse_error& e) {\n      SPDLOG_ERROR(\"autoupdate:check Error parsing JSON response: {} Body: {}\",\n          e.what(), resp.body);\n    }\n  } else {\n    SPDLOG_WARN(\"autoupdate:check error: {}\", resp.errmsg);\n  }\n  return {false, {}};\n}\n#endif\n\n}  // namespace fptn::gui::autoupdate\n"
  },
  {
    "path": "src/fptn-client/gui/resources/resources.qrc",
    "content": "<!DOCTYPE RCC>\n<RCC version=\"1.0\">\n    <qresource prefix=\"/\">\n        <file>icons/app.ico</file>\n        <file>icons/active.ico</file>\n        <file>icons/inactive.ico</file>\n\n        <file>icons/ping_green_circle.png</file>\n        <file>icons/ping_orange_circle.png</file>\n        <file>icons/ping_red_circle.png</file>\n        <file>icons/ping_yellow_circle.png</file>\n\n        <file>icons/menu_server_list.png</file>\n        <file>icons/menu_settings.png</file>\n        <file>icons/menu_new_version_download.png</file>\n        <file>icons/menu_exit.png</file>\n        <file>icons/menu_disconnect.png</file>\n        <file>icons/menu_connection.png</file>\n\n        <file>translations/fptn_ru.qm</file>\n        <file>translations/fptn_en.qm</file>\n    </qresource>\n</RCC>\n"
  },
  {
    "path": "src/fptn-client/gui/resources/translations/.gitignore",
    "content": "*.qm\n"
  },
  {
    "path": "src/fptn-client/gui/resources/translations/fptn_en.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_US\">\n    <context>\n        <name>QObject</name>\n        <message>\n            <source>Connect</source>\n            <translation>Connect</translation>\n        </message>\n        <message>\n            <source>Settings</source>\n            <translation>Settings</translation>\n        </message>\n        <message>\n            <source>Quit</source>\n            <translation>Quit</translation>\n        </message>\n        <message>\n            <source>Connecting...</source>\n            <translation>Connecting...</translation>\n        </message>\n        <message>\n            <source>Disconnecting...</source>\n            <translation>Disconnecting...</translation>\n        </message>\n        <message>\n            <source>Disconnect</source>\n            <translation>Disconnect</translation>\n        </message>\n\n        <message>\n            <source>Upload speed</source>\n            <translation>Upload speed</translation>\n        </message>\n        <message>\n            <source>Download speed</source>\n            <translation>Download speed</translation>\n        </message>\n        \n        <message>\n            <source>Unable to find the default gateway IP address. Please check your connection and make sure no other VPN is active. If the error persists, specify the gateway address in the FPTN settings using your router's IP address, and ensure that an active internet interface (adapter) is selected. If the issue remains unresolved, please contact the developer via Telegram @fptn_chat.</source>\n            <translation>Unable to find the default gateway IP address. Please check your connection and make sure no other VPN is active. If the error persists, specify the gateway address in the FPTN settings using your router's IP address, and ensure that an active internet interface (adapter) is selected. If the issue remains unresolved, please contact the developer via Telegram @fptn_chat.</translation>\n        </message>\n        <message>\n            <source>Configuration error</source>\n            <translation>Configuration error</translation>\n        </message>\n        <message>\n            <source>DNS resolution error</source>\n            <translation>DNS resolution error</translation>\n        </message>\n        <message>\n            <source>Connection error</source>\n            <translation>Connection error</translation>\n        </message>\n        <message>\n            <source>Unable to connect to the server. Please use the Telegram bot to generate a new TOKEN with your personal settings, then try again.</source>\n            <translation>Unable to connect to the server. Please use the Telegram bot to generate a new TOKEN with your personal settings, then try again.</translation>\n        </message>\n        <message>\n            <source>DNS server error! Check your connection!</source>\n            <translation>DNS server error! Check your connection!</translation>\n        </message>\n\n        <message>\n            <source>Network Interface (adapter)</source>\n            <translation>Network Interface (adapter)</translation>\n        </message>\n        <message>\n            <source>Gateway IP Address (typically your router's address)</source>\n            <translation>Gateway IP Address (typically your router's address)</translation>\n        </message>\n        <message>\n            <source>Name</source>\n            <translation>Name</translation>\n        </message>\n        <message>\n            <source>User</source>\n            <translation>User</translation>\n        </message>\n        <message>\n            <source>Servers</source>\n            <translation>Servers</translation>\n        </message>\n        <message>\n            <source>Action</source>\n            <translation>Action</translation>\n        </message>\n        <message>\n            <source>Add token</source>\n            <translation>Add token</translation>\n        </message>\n        <message>\n            <source>Save</source>\n            <translation>Save</translation>\n        </message>\n        <message>\n            <source>About</source>\n            <translation>About</translation>\n        </message>\n        <message>\n            <source>Delete</source>\n            <translation>Delete</translation>\n        </message>\n        <message>\n            <source>Version</source>\n            <translation>Version</translation>\n        </message>\n        <message>\n            <source>Save Successful</source>\n            <translation>Save Successful</translation>\n        </message>\n        <message>\n            <source>Data has been successfully saved.</source>\n            <translation>Data has been successfully saved.</translation>\n        </message>\n        <message>\n            <source>Save Failed</source>\n            <translation>Save Failed</translation>\n        </message>\n        <message>\n            <source>An error occurred while saving the data.</source>\n            <translation>An error occurred while saving the data.</translation>\n        </message>\n        <message>\n            <source>Delete Successful</source>\n            <translation>Delete Successful</translation>\n        </message>\n        <message>\n            <source>The data has been successfully removed</source>\n            <translation>The data has been successfully removed</translation>\n        </message>\n        <message>\n            <source>The data has been successfully updated</source>\n            <translation>The data has been successfully updated</translation>\n        </message>\n        <message>\n            <source>Language</source>\n            <translation>Language</translation>\n        </message>\n\n        <message>\n            <source>Smart Connect</source>\n            <translation>Smart Connect</translation>\n        </message>\n        <message>\n            <source>Connection Error</source>\n            <translation>Connection Error</translation>\n        </message>\n        <message>\n            <source>The server is unavailable. Please select another server or use Auto-connect to find the best available server.</source>\n            <translation>The server is unavailable. Please select another server or use Auto-connect to find the best available server.</translation>\n        </message>\n        <message>\n            <source>No servers</source>\n            <translation>No servers</translation>\n        </message>\n\n        <message>\n            <source>Paste your token</source>\n            <translation>Paste your token</translation>\n        </message>\n        <message>\n            <source>Token</source>\n            <translation>Token</translation>\n        </message>\n        <message>\n            <source>OK</source>\n            <translation>OK</translation>\n        </message>\n        <message>\n            <source>Cancel</source>\n            <translation>Cancel</translation>\n        </message>\n\n        <message>\n            <source>Validation Error</source>\n            <translation>Validation Error</translation>\n        </message>\n        <message>\n            <source>Token cannot be empty</source>\n            <translation>Token cannot be empty</translation>\n        </message>\n        <message>\n            <source>Wrong token</source>\n            <translation>Wrong token</translation>\n        </message>\n\n        <message>\n            <source>Close</source>\n            <translation>Close</translation>\n        </message>\n\n        <message>\n            <source>Autostart</source>\n            <translation>Autostart</translation>\n        </message>\n        <message>\n            <source>Auto</source>\n            <translation>Auto</translation>\n        </message>\n\n        <message>\n            <source>New version available</source>\n            <translation>New version available</translation>\n        </message>\n\n        <message>\n            <source>Fake domain to bypass blocking</source>\n            <translation>Fake domain to bypass blocking</translation>\n        </message>\n\n        <message>\n            <source>FPTN_DESCRIPTION</source>\n            <translation>FPTN is a fully custom-built VPN technology — developed from scratch, including the core protocol, server implementation, and cross-platform clients. It is a non-commercial, open-source project developed by volunteers and designed to bypass censorship. The project's source code is available on GitHub.</translation>\n        </message>\n\n        <message>\n            <source>FPTN_WEBSITE_DESCRIPTION</source>\n            <translation>\n            <![CDATA[\n                Our website <a href=\"https://storage.googleapis.com/fptn.org/index.html\">https://storage.googleapis.com/fptn.org/index.html</a>\n            ]]>\n            </translation>\n        </message>\n        <message>\n            <source>FPTN_TELEGRAM_DESCRIPTION</source>\n            <translation>\n            <![CDATA[Join our Telegram communities:\n                <br/> - <a href=\"https://t.me/fpnt_project_global\">English Community</a>\n                <br/> - <a href=\"https://t.me/fptn_project\">Russian Community</a>\n                <br/> - <a href=\"https://t.me/fptn_project_iran\">Persian Community</a>\n            ]]>\n            </translation>\n        </message>\n\n        <message>\n            <source>Limited access servers</source>\n            <translation>Limited access servers</translation>\n        </message>\n\n        <message>\n            <source>Missing required fields in configuration. Generate and apply a new token.</source>\n            <translation>Missing required fields in configuration. Generate and apply a new token.</translation>\n        </message>\n\n        <message>\n            <source>Failed to connect to the server!</source>\n            <translation>Failed to connect to the server!</translation>\n        </message>\n\n        <message>\n            <source>The VPN connection was unexpectedly closed.</source>\n            <translation>The VPN connection was unexpectedly closed.</translation>\n        </message>\n\n        <message>\n            <source>FPTN Connection Error</source>\n            <translation>FPTN Connection Error</translation>\n        </message>\n\n        <message>\n            <source>VPN Conflict Detected</source>\n            <translation>VPN Conflict Detected</translation>\n        </message>\n\n        <message>\n            <source>A conflicting VPN connection is currently active on your system: %1\nThis may cause network connectivity issues or prevent proper operation of FPTN.</source>\n            <translation>A conflicting VPN connection is currently active on your system: %1\nThis may cause network connectivity issues or prevent proper operation of FPTN.</translation>\n        </message>\n\n        <message>\n            <source>Bypass blocking method</source>\n            <translation>Bypass blocking method</translation>\n        </message>\n        <message>\n            <source>SNI</source>\n            <translation>Domain spoofing (SNI)</translation>\n        </message>\n        <message>\n            <source>OBFUSCATION</source>\n            <translation>Traffic masking (obfuscation)</translation>\n        </message>\n        <message>\n            <source>SNI-REALITY (Generic)</source>\n            <translation>Domain spoofing</translation>\n        </message>\n        <message>\n            <source>SNI-REALITY (Chrome 147)</source>\n            <translation>Domain spoofing (Chrome 147)</translation>\n        </message>\n        <message>\n            <source>SNI-REALITY (Chrome 146)</source>\n            <translation>Domain spoofing (Chrome 146)</translation>\n        </message>\n        <message>\n            <source>SNI-REALITY (Chrome 145)</source>\n            <translation>Domain spoofing (Chrome 145)</translation>\n        </message>\n        <message>\n            <source>SNI-REALITY (Firefox 149)</source>\n            <translation>Domain spoofing (Firefox 149)</translation>\n        </message>\n        <message>\n            <source>SNI-REALITY (Yandex 26)</source>\n            <translation>Domain spoofing (Yandex 26)</translation>\n        </message>\n        <message>\n            <source>SNI-REALITY (Yandex 25)</source>\n            <translation>Domain spoofing (Yandex 25)</translation>\n        </message>\n        <message>\n            <source>SNI-REALITY (Yandex 24)</source>\n            <translation>Domain spoofing (Yandex 24)</translation>\n        </message>\n        <message>\n            <source>SNI-REALITY (Safari 26)</source>\n            <translation>Domain spoofing (Safari 26)</translation>\n        </message>\n\n        <message>\n            <source>Support the project on</source>\n            <translation>Support the project on</translation>\n        </message>\n        <message>\n            <source>Project Sponsors</source>\n            <translation>Project Sponsors</translation>\n        </message>\n\n        <message>\n            <source>Autoscan SNI</source>\n            <translation>Autoscan SNI</translation>\n        </message>\n        <message>\n            <source>All</source>\n            <translation>All</translation>\n        </message>\n        <message>\n            <source>Start</source>\n            <translation>Start</translation>\n        </message>\n        <message>\n            <source>Scan completed</source>\n            <translation>Scan completed</translation>\n        </message>\n        <message>\n            <source>Working SNI found: %1</source>\n            <translation>Working SNI found: %1</translation>\n        </message>\n        <message>\n            <source>No working SNI found.</source>\n            <translation>No working SNI found.</translation>\n        </message>\n        <message>\n            <source>Error</source>\n            <translation>Error</translation>\n        </message>\n        <message>\n            <source>No SNI available for scanning.</source>\n            <translation>No SNI available for scanning.</translation>\n        </message>\n        <message>\n            <source>No servers available for scanning.</source>\n            <translation>No servers available for scanning.</translation>\n        </message>\n        <message>\n            <source>TLS Handshake: %1</source>\n            <translation>TLS Handshake: %1</translation>\n        </message>\n        <message>\n            <source>HTTP Request: %1</source>\n            <translation>HTTP Request: %1</translation>\n        </message>\n        <message>\n            <source>Import SNI file</source>\n            <translation>Import SNI file</translation>\n        </message>\n        <message>\n            <source>Select SNI file</source>\n            <translation>Select SNI file</translation>\n        </message>\n        <message>\n            <source>SNI files (*.sni);;All files (*)</source>\n            <translation>SNI files (*.sni);;All files (*)</translation>\n        </message>\n        <message>\n            <source>File exists</source>\n            <translation>File exists</translation>\n        </message>\n        <message>\n            <source>File \"%1\" already exists. Overwrite?</source>\n            <translation>File \"%1\" already exists. Overwrite?</translation>\n        </message>\n        <message>\n            <source>Success</source>\n            <translation>Success</translation>\n        </message>\n        <message>\n            <source>SNI file imported successfully</source>\n            <translation>SNI file imported successfully</translation>\n        </message>\n        <message>\n            <source>Failed to import SNI file</source>\n            <translation>Failed to import SNI file</translation>\n        </message>\n        <message>\n            <source>Delete this file</source>\n            <translation>Delete this file</translation>\n        </message>\n        <message>\n            <source>No SNI files imported</source>\n            <translation>No SNI files imported</translation>\n        </message>\n\n        <message>\n            <source>Routing</source>\n            <translation>Routing</translation>\n        </message>\n        <message>\n            <source>Blacklist domains</source>\n            <translation>Blacklist domains</translation>\n        </message>\n        <message>\n            <source>Completely block access to the main domain AND all its subdomains. Format: domain:example.com (one per line)</source>\n            <translation>Completely block access to the main domain AND all its subdomains. Format: domain:example.com (one per line)</translation>\n        </message>\n        <message>\n            <source>Exclude tunnel networks</source>\n            <translation>Exclude tunnel networks</translation>\n        </message>\n        <message>\n            <source>Networks that always bypass VPN tunnel. Traffic to these networks goes directly, never through VPN</source>\n            <translation>Networks that always bypass VPN tunnel. Traffic to these networks goes directly, never through VPN</translation>\n        </message>\n        <message>\n            <source>Include tunnel networks</source>\n            <translation>Include tunnel networks</translation>\n        </message>\n        <message>\n            <source>Networks that always use VPN tunnel. Traffic to these networks always goes through VPN</source>\n            <translation>Networks that always use VPN tunnel. Traffic to these networks always goes through VPN</translation>\n        </message>\n        <message>\n            <source>Enable split tunnel</source>\n            <translation>Enable split tunneling (experimental)</translation>\n        </message>\n        <message>\n            <source>When enabled, you can configure which sites use VPN and which go directly.</source>\n            <translation>When enabled, you can configure which sites use VPN and which go directly.</translation>\n        </message>\n        <message>\n            <source>Split tunnel mode</source>\n            <translation>Split tunnel mode</translation>\n        </message>\n        <message>\n            <source>Defines traffic routing strategy for split tunneling.</source>\n            <translation>Defines traffic routing strategy for split tunneling.</translation>\n        </message>\n        <message>\n            <source>Exclude</source>\n            <translation>Exclude</translation>\n        </message>\n        <message>\n            <source>Include</source>\n            <translation>Include</translation>\n        </message>\n        <message>\n            <source>Domains to route through VPN</source>\n            <translation>Domains to route through VPN</translation>\n        </message>\n        <message>\n            <source>Domains to bypass VPN</source>\n            <translation>Domains to bypass VPN</translation>\n        </message>\n        <message>\n            <source>List domains that should bypass VPN tunnel. Only these domains will go through VPN, all other traffic bypasses VPN</source>\n            <translation>List domains that should bypass VPN tunnel. Only these domains will go through VPN, all other traffic bypasses VPN</translation>\n        </message>\n        <message>\n            <source>List websites that should bypass VPN tunnel. These domains will go directly, all other traffic uses VPN</source>\n            <translation>List websites that should bypass VPN tunnel. These domains will go directly, all other traffic uses VPN</translation>\n        </message>\n        <message>\n            <source>Enable advanced DNS management</source>\n            <translation>Enable advanced DNS management (experimental)</translation>\n        </message>\n        <message>\n            <source>Enables advanced DNS configuration to prevent leaks. Recommended when using split tunneling. Use with caution!</source>\n            <translation>Enables advanced DNS configuration to prevent leaks. Recommended when using split tunneling. Use with caution!</translation>\n        </message>\n    </context>\n</TS>\n"
  },
  {
    "path": "src/fptn-client/gui/resources/translations/fptn_ru.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ru_RU\">\n    <context>\n        <name>QObject</name>\n        <message>\n            <source>Connect</source>\n            <translation>Подключиться</translation>\n        </message>\n        <message>\n            <source>Settings</source>\n            <translation>Настройки</translation>\n        </message>\n        <message>\n            <source>Quit</source>\n            <translation>Выход</translation>\n        </message>\n        <message>\n            <source>Connecting...</source>\n            <translation>Подключение...</translation>\n        </message>\n        <message>\n            <source>Disconnecting...</source>\n            <translation>Отключение...</translation>\n        </message>\n        <message>\n            <source>Disconnect</source>\n            <translation>Отключить</translation>\n        </message>\n\n        <message>\n            <source>Upload speed</source>\n            <translation>Скорость выгрузки</translation>\n        </message>\n        <message>\n            <source>Download speed</source>\n            <translation>Скорость зарузки</translation>\n        </message>\n        \n        <message>\n            <source>Unable to find the default gateway IP address. Please check your connection and make sure no other VPN is active. If the error persists, specify the gateway address in the FPTN settings using your router's IP address, and ensure that an active internet interface (adapter) is selected. If the issue remains unresolved, please contact the developer via Telegram @fptn_chat.</source>\n            <translation>Не удалось найти IP-адрес по умолчанию для шлюза. Пожалуйста, проверьте ваше соединение и убедитесь, что у вас не активен другой VPN. Если ошибка сохраняется, укажите адрес шлюза в настройках FPTN, используя IP-адрес вашего маршрутизатора, и убедитесь, что выбран активный интернет-интерфейс (адаптер). Если проблема не устранена, обратитесь к разработчику через Telegram @fptn_chat.</translation>\n        </message>\n        <message>\n            <source>Configuration error</source>\n            <translation>Ошибка конфигурации</translation>\n        </message>\n        <message>\n            <source>DNS resolution error</source>\n            <translation>Ошибка разрешения DNS</translation>\n        </message>\n        <message>\n            <source>Connection error</source>\n            <translation>Ошибка подключения</translation>\n        </message>\n        <message>\n            <source>Unable to connect to the server. Please use the Telegram bot to generate a new TOKEN with your personal settings, then try again.</source>\n            <translation>Невозможно подключиться к серверу. Пожалуйста, сгенерируйте новый TOKEN с вашими персональными настройками через Telegram-бота и повторите попытку.</translation>\n        </message>\n        <message>\n            <source>DNS server error! Check your connection!</source>\n            <translation>Ошибка DNS сервера! Проверьте ваше соединение!</translation>\n        </message>\n\n        <message>\n            <source>Network Interface (adapter)</source>\n            <translation>Сетевой интерфейс (адаптер)</translation>\n        </message>\n        <message>\n            <source>Gateway IP Address (typically your router's address)</source>\n            <translation>IP-адрес шлюза (обычно адрес роутера)</translation>\n        </message>\n        <message>\n            <source>Name</source>\n            <translation>Имя</translation>\n        </message>\n        <message>\n            <source>User</source>\n            <translation>Пользователь</translation>\n        </message>\n        <message>\n            <source>Servers</source>\n            <translation>Серверы</translation>\n        </message>\n        <message>\n            <source>Action</source>\n            <translation>Действие</translation>\n        </message>\n        <message>\n            <source>Add token</source>\n            <translation>Добавить токен</translation>\n        </message>\n        <message>\n            <source>Save</source>\n            <translation>Сохранить</translation>\n        </message>\n        <message>\n            <source>About</source>\n            <translation>О программе</translation>\n        </message>\n        <message>\n            <source>Delete</source>\n            <translation>Удалить</translation>\n        </message>\n        <message>\n            <source>Version</source>\n            <translation>Версия</translation>\n        </message>\n        <message>\n            <source>Save Successful</source>\n            <translation>Сохранение прошло успешно</translation>\n        </message>\n        <message>\n            <source>Data has been successfully saved.</source>\n            <translation>Данные успешно сохранены.</translation>\n        </message>\n        <message>\n            <source>Save Failed</source>\n            <translation>Ошибка сохранения</translation>\n        </message>\n        <message>\n            <source>An error occurred while saving the data.</source>\n            <translation>Произошла ошибка при сохранении данных.</translation>\n        </message>\n        <message>\n            <source>Delete Successful</source>\n            <translation>Успешное удаление</translation>\n        </message>\n        <message>\n            <source>The data has been successfully removed</source>\n            <translation>Данные были успешно удалены</translation>\n        </message>\n        <message>\n            <source>The data has been successfully updated</source>\n            <translation>Данные были успешно обновлены</translation>\n        </message>\n        <message>\n            <source>Language</source>\n            <translation>Язык</translation>\n        </message>\n\n        <message>\n            <source>Smart Connect</source>\n            <translation>Умное подключение</translation>\n        </message>\n        <message>\n            <source>Connection Error</source>\n            <translation>Ошибка подключения</translation>\n        </message>\n        <message>\n            <source>The server is unavailable. Please select another server or use Auto-connect to find the best available server.</source>\n            <translation>Сервер недоступен. Пожалуйста, выберите другой сервер или используйте функцию автоподключения для выбора лучшего доступного сервера.</translation>\n        </message>\n        <message>\n            <source>No servers</source>\n            <translation>Нет серверов</translation>\n        </message>\n\n        <message>\n            <source>Paste your token</source>\n            <translation>Вставьте ваш токен</translation>\n        </message>\n        <message>\n            <source>Token</source>\n            <translation>Токен</translation>\n        </message>\n        <message>\n            <source>OK</source>\n            <translation>OK</translation>\n        </message>\n        <message>\n            <source>Cancel</source>\n            <translation>Отмена</translation>\n        </message>\n\n        <message>\n            <source>Validation Error</source>\n            <translation>Ошибка валидации</translation>\n        </message>\n        <message>\n            <source>Token cannot be empty</source>\n            <translation>Токен не может быть пустым</translation>\n        </message>\n        <message>\n            <source>Wrong token</source>\n            <translation>Неправильный токен</translation>\n        </message>\n\n        <message>\n            <source>Close</source>\n            <translation>Закрыть</translation>\n        </message>\n\n        <message>\n            <source>Autostart</source>\n            <translation>Автостарт</translation>\n        </message>\n        <message>\n            <source>Auto</source>\n            <translation>Автоматически</translation>\n        </message>\n\n        <message>\n            <source>New version available</source>\n            <translation>Доступна новая версия</translation>\n        </message>\n\n        <message>\n            <source>Fake domain to bypass blocking</source>\n            <translation>Фейковый домен для обхода блокировок</translation>\n        </message>\n\n        <message>\n            <source>FPTN_DESCRIPTION</source>\n            <translation>FPTN — это полностью разработанная с нуля технология VPN, включая собственный протокол, сервер и кроссплатформенные клиенты. Это некоммерческий проект с открытым исходным кодом, развиваемый волонтерами и предназначенный для обхода цензуры. Исходный код проекта доступен на Github.</translation>\n        </message>\n\n        <message>\n            <source>FPTN_WEBSITE_DESCRIPTION</source>\n            <translation>\n            <![CDATA[\n                Наш сайт <a href=\"https://storage.googleapis.com/fptn.org/index.html\">fptn.org</a>\n            ]]>\n            </translation>\n        </message>\n\n         <message>\n            <source>FPTN_TELEGRAM_DESCRIPTION</source>\n            <translation>\n            <![CDATA[Присоединяйтесь к нашим Telegram-сообществам:\n                <br/> - <a href=\"https://t.me/fptn_project\">Русскоязычное сообщество</a>\n                <br/> - <a href=\"https://t.me/fpnt_project_global\">Англоязычное сообщество</a>\n                <br/> - <a href=\"https://t.me/fptn_project_iran\">Персидское сообщество</a>\n            ]]>\n            </translation>\n        </message>\n\n        <message>\n            <source>Limited access servers</source>\n            <translation>Серверы с ограниченным доступом</translation>\n        </message>\n\n        <message>\n            <source>Missing required fields in configuration. Generate and apply a new token.</source>\n            <translation>Конфиг не содержит необходимых полей. Пожалуйста, сгенерируйте и используйте новый токен.</translation>\n        </message>\n\n        <message>\n            <source>Failed to connect to the server!</source>\n            <translation>Не удалось подключиться к серверу!</translation>\n        </message>\n\n        <message>\n            <source>The VPN connection was unexpectedly closed.</source>\n            <translation>VPN-соединение было неожиданно разорвано.</translation>\n        </message>\n\n        <message>\n            <source>FPTN Connection Error</source>\n            <translation>FPTN Ошибка подключения</translation>\n        </message>\n\n        <message>\n            <source>VPN Conflict Detected</source>\n            <translation>Обнаружен конфликт VPN</translation>\n        </message>\n\n        <message>\n            <source>A conflicting VPN connection is currently active on your system: %1\nThis may cause network connectivity issues or prevent proper operation of FPTN.</source>\n            <translation>Обнаружено конфликтующее VPN-соединение: %1\nЭто может вызвать проблемы с подключением к сети или нарушить работу FPTN.</translation>\n        </message>\n\n        <message>\n            <source>Bypass blocking method</source>\n            <translation>Метод обхода блокировок</translation>\n        </message>\n        <message>\n            <source>SNI</source>\n            <translation>Подмена домена (SNI)</translation>\n        </message>\n        <message>\n            <source>OBFUSCATION</source>\n            <translation>Маскировка трафика (Обфускация)</translation>\n        </message>\n        <message>\n            <source>SNI-REALITY (Generic)</source>\n            <translation>Подмена домена</translation>\n        </message>\n        <message>\n            <source>SNI-REALITY (Chrome 147)</source>\n            <translation>Подмена домена (Chrome 147)</translation>\n        </message>\n        <message>\n            <source>SNI-REALITY (Chrome 146)</source>\n            <translation>Подмена домена (Chrome 146)</translation>\n        </message>\n        <message>\n            <source>SNI-REALITY (Chrome 145)</source>\n            <translation>Подмена домена (Chrome 145)</translation>\n        </message>\n        <message>\n            <source>SNI-REALITY (Firefox 149)</source>\n            <translation>Подмена домена (Firefox 149)</translation>\n        </message>\n        <message>\n            <source>SNI-REALITY (Yandex 26)</source>\n            <translation>Подмена домена (Яндекс 26)</translation>\n        </message>\n        <message>\n            <source>SNI-REALITY (Yandex 25)</source>\n            <translation>Подмена домена (Яндекс 25)</translation>\n        </message>\n        <message>\n            <source>SNI-REALITY (Yandex 24)</source>\n            <translation>Подмена домена (Яндекс 24)</translation>\n        </message>\n        <message>\n            <source>SNI-REALITY (Safari 26)</source>\n            <translation>Подмена домена (Safari 26)</translation>\n        </message>\n        <message>\n            <source>Support the project on</source>\n            <translation>Поддержать проект можно на</translation>\n        </message>\n        <message>\n            <source>Project Sponsors</source>\n            <translation>Спонсоры проекта</translation>\n        </message>\n\n        <message>\n            <source>Autoscan SNI</source>\n            <translation>Автосканирование SNI</translation>\n        </message>\n        <message>\n            <source>All</source>\n            <translation>Все</translation>\n        </message>\n        <message>\n            <source>Start</source>\n            <translation>Начать</translation>\n        </message>\n        <message>\n            <source>Scan completed</source>\n            <translation>Сканирование завершено</translation>\n        </message>\n        <message>\n            <source>Working SNI found: %1</source>\n            <translation>Рабочий SNI найден: %1</translation>\n        </message>\n        <message>\n            <source>No working SNI found.</source>\n            <translation>Рабочий SNI не найден.</translation>\n        </message>\n        <message>\n            <source>Error</source>\n            <translation>Ошибка</translation>\n        </message>\n        <message>\n            <source>No SNI available for scanning.</source>\n            <translation>Нет доступных SNI для сканирования.</translation>\n        </message>\n        <message>\n            <source>No servers available for scanning.</source>\n            <translation>Нет доступных серверов для сканирования.</translation>\n        </message>\n        <message>\n            <source>TLS Handshake: %1</source>\n            <translation>TLS Handshake: %1</translation>\n        </message>\n        <message>\n            <source>HTTP Request: %1</source>\n            <translation>HTTP Запрос: %1</translation>\n        </message>\n        <message>\n            <source>Import SNI file</source>\n            <translation>Импорт SNI файла</translation>\n        </message>\n        <message>\n            <source>Select SNI file</source>\n            <translation>Выберите SNI файл</translation>\n        </message>\n        <message>\n            <source>SNI files (*.sni);;All files (*)</source>\n            <translation>SNI файлы (*.sni);;Все файлы (*)</translation>\n        </message>\n        <message>\n            <source>File exists</source>\n            <translation>Файл существует</translation>\n        </message>\n        <message>\n            <source>File \"%1\" already exists. Overwrite?</source>\n            <translation>Файл \"%1\" уже существует. Перезаписать?</translation>\n        </message>\n        <message>\n            <source>Success</source>\n            <translation>Успех</translation>\n        </message>\n        <message>\n            <source>SNI file imported successfully</source>\n            <translation>SNI файл успешно импортирован</translation>\n        </message>\n        <message>\n            <source>Failed to import SNI file</source>\n            <translation>Не удалось импортировать SNI файл</translation>\n        </message>\n        <message>\n            <source>Delete this file</source>\n            <translation>Удалить этот файл</translation>\n        </message>\n        <message>\n            <source>No SNI files imported</source>\n            <translation>Нет импортированных SNI файлов</translation>\n        </message>\n\n        <message>\n            <source>Routing</source>\n            <translation>Маршрутизация</translation>\n        </message>\n        <message>\n            <source>Blacklist domains</source>\n            <translation>Черный список доменов</translation>\n        </message>\n        <message>\n            <source>Completely block access to the main domain AND all its subdomains. Format: domain:example.com (one per line)</source>\n            <translation>Полностью блокировать доступ к основному домену и всем его поддоменам. Формат: domain:example.com (по одному в строке)</translation>\n        </message>\n        <message>\n            <source>Exclude tunnel networks</source>\n            <translation>Исключить сети из туннеля</translation>\n        </message>\n        <message>\n            <source>Networks that always bypass VPN tunnel. Traffic to these networks goes directly, never through VPN</source>\n            <translation>Сети, которые всегда обходят VPN-туннель. Трафик к этим сетям идет напрямую, никогда через VPN</translation>\n        </message>\n        <message>\n            <source>Include tunnel networks</source>\n            <translation>Включить сети в туннель</translation>\n        </message>\n        <message>\n            <source>Networks that always use VPN tunnel. Traffic to these networks always goes through VPN</source>\n            <translation>Сети, которые всегда используют VPN-туннель. Трафик к этим сетям всегда идет через VPN</translation>\n        </message>\n        <message>\n            <source>Enable split tunnel</source>\n            <translation>Раздельное туннелирование (экспериментально)</translation>\n        </message>\n        <message>\n            <source>When enabled, you can configure which sites use VPN and which go directly.</source>\n            <translation>Когда включено, вы можете настроить, какие сайты используют VPN, а какие идут напрямую.</translation>\n        </message>\n        <message>\n            <source>Split tunnel mode</source>\n            <translation>Режим раздельного туннеля</translation>\n        </message>\n        <message>\n            <source>Defines traffic routing strategy for split tunneling.</source>\n            <translation>Определяет стратегию маршрутизации трафика для раздельного туннелирования.</translation>\n        </message>\n        <message>\n            <source>Exclude</source>\n            <translation>Исключить</translation>\n        </message>\n        <message>\n            <source>Include</source>\n            <translation>Включить</translation>\n        </message>\n        <message>\n            <source>Domains to route through VPN</source>\n            <translation>Домены для маршрутизации через VPN</translation>\n        </message>\n            <message>\n            <source>Domains to bypass VPN</source>\n        <translation>Домены для обхода VPN</translation>\n        </message>\n        <message>\n            <source>List domains that should use VPN tunnel. Only these domains will go through VPN, all other traffic bypasses VPN</source>\n            <translation>Список доменов, которые должны использовать VPN-туннель. Только эти домены будут проходить через VPN, весь остальной трафик мимо VPN</translation>\n        </message>\n        <message>\n            <source>List domains that should bypass VPN tunnel. These domains will go directly, all other traffic uses VPN</source>\n            <translation>Список доменов, которые не пойдут через VPN-туннель. Эти домены будут идти напрямую, весь остальной трафик пойдет в VPN</translation>\n        </message>\n\n        <message>\n            <source>Enable advanced DNS management</source>\n            <translation>Разрешить расширенное управление DNS (экспериментально)</translation>\n        </message>\n        <message>\n            <source>Enables advanced DNS configuration to prevent leaks. Recommended when using split tunneling. Use with caution!</source>\n            <translation>Включает расширенную конфигурацию DNS для защиты от утечек. Рекомендуется активировать при использовании раздельного туннелирования. Используйте с осторожностью!</translation>\n        </message>\n    </context>\n</TS>\n"
  },
  {
    "path": "src/fptn-client/gui/server_menu_item_widget/server_menu_item_widget.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"gui/server_menu_item_widget/server_menu_item_widget.h\"\n\n#include <utility>\n\n#include <QHBoxLayout>  // NOLINT(build/include_order)\n\nnamespace {\n\nconst QPixmap& GetPingIcon(const int ping_ms) {\n  static const QPixmap kRedCircle(\":/icons/ping_red_circle.png\");\n  static const QPixmap kGreenCircle(\":/icons/ping_green_circle.png\");\n  static const QPixmap kYellowCircle(\":/icons/ping_yellow_circle.png\");\n  static const QPixmap kOrangeCircle(\":/icons/ping_orange_circle.png\");\n  if (ping_ms == -1) {\n    return kRedCircle;\n  }\n  if (ping_ms < 200) {\n    return kGreenCircle;\n  }\n  if (ping_ms < 300) {\n    return kYellowCircle;\n  }\n  if (ping_ms < 500) {\n    return kOrangeCircle;\n  }\n  return kRedCircle;\n}\n}  // namespace\n\nnamespace fptn::gui {\n\n#ifdef __APPLE__\nServerMenuItemWidget::ServerMenuItemWidget(\n    QString name, int ping_ms, QObject* parent)\n    : QAction(parent), name_(std::move(name)) {\n  setIconVisibleInMenu(true);\n  UpdatePing(ping_ms);\n}\n\n// macos\nvoid ServerMenuItemWidget::UpdatePing(int ping_ms) {\n  const QString ping = (ping_ms == -1) ? \" \" : QString(\"%1ms\").arg(ping_ms);\n\n  QString result = name_;\n\n  const QFontMetrics kfm(this->font());\n  const int target_width = kfm.horizontalAdvance(\"A\") * 25;\n  int current_width = kfm.horizontalAdvance(name_);\n  while (current_width < target_width) {\n    result.append(' ');\n    current_width = kfm.horizontalAdvance(result);\n  }\n\n  result.append(ping);\n\n  setText(result);\n  setIcon(GetPingIcon(ping_ms));\n}\n#else\n\nServerMenuItemWidget::ServerMenuItemWidget(\n    QString name, int ping_ms, QObject* parent)\n    : QWidgetAction(parent), name_(std::move(name)) {\n  auto* widget = new QWidget();\n  widget->setAttribute(Qt::WA_Hover);\n  widget->setMouseTracking(true);\n  widget->setStyleSheet(R\"(\n    QWidget:hover {\n      background-color: #e0e0e0;\n    }\n  )\");\n\n  auto* layout = new QHBoxLayout(widget);\n  layout->setContentsMargins(2, 2, 2, 2);\n  layout->setSpacing(2);\n\n  icon_label_ = new QLabel();\n  icon_label_->setFixedSize(16, 16);\n  icon_label_->setScaledContents(false);\n  icon_label_->setAlignment(Qt::AlignCenter);\n  icon_label_->setStyleSheet(\"background-color: transparent;\");\n\n  name_label_ = new QLabel(name_);\n  name_label_->setStyleSheet(\n      \"background-color: transparent;padding-right: 10px;\");\n  name_label_->setSizePolicy(\n      QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);\n  name_label_->setMinimumWidth(\n      QFontMetrics(name_label_->font()).horizontalAdvance(name_) + 40);\n\n  ping_label_ = new QLabel();\n  ping_label_->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred);\n  ping_label_->setAlignment(Qt::AlignRight);\n  ping_label_->setStyleSheet(\"background-color: transparent;\");\n\n  layout->addWidget(icon_label_);\n  layout->addWidget(name_label_);\n  layout->addWidget(ping_label_);\n\n  widget->setLayout(layout);\n  setDefaultWidget(widget);\n\n  UpdatePing(ping_ms);\n}\n\nvoid ServerMenuItemWidget::UpdatePing(int ping_ms) {\n  const QString ping = (ping_ms == -1) ? \"\" : QString(\"%1ms\").arg(ping_ms);\n  ping_label_->setText(ping);\n  icon_label_->setPixmap(GetPingIcon(ping_ms));\n}\n\n#endif\n\nQString ServerMenuItemWidget::ServerName() const { return name_; }\n\n}  // namespace fptn::gui\n"
  },
  {
    "path": "src/fptn-client/gui/server_menu_item_widget/server_menu_item_widget.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <QAction>        // NOLINT(build/include_order)\n#include <QLabel>         // NOLINT(build/include_order)\n#include <QMouseEvent>    // NOLINT(build/include_order)\n#include <QWidgetAction>  // NOLINT(build/include_order)\n\nnamespace fptn::gui {\n\n#ifdef __APPLE__\n// QWidgetAction doesn't work fopr macos\nclass ServerMenuItemWidget : public QAction {\n#else\nclass ServerMenuItemWidget : public QWidgetAction {\n#endif\n  Q_OBJECT\n public:\n  explicit ServerMenuItemWidget(\n      QString name, int ping_ms, QObject* parent = nullptr);\n  void UpdatePing(int ping_ms);\n  QString ServerName() const;\n\n private:\n  QString name_;\n\n  QLabel* icon_label_{nullptr};\n  QLabel* name_label_{nullptr};\n  QLabel* ping_label_{nullptr};\n};\n\n}  // namespace fptn::gui\n"
  },
  {
    "path": "src/fptn-client/gui/settingsmodel/settingsmodel.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"gui/settingsmodel/settingsmodel.h\"\n\n#if _WIN32\n#include <Windows.h>   // NOLINT(build/include_order)\n#include <Ws2tcpip.h>  // NOLINT(build/include_order)\n#include <shlobj.h>    // NOLINT(build/include_order)\n#elif defined(__linux__)\n#include <linux/limits.h>  // NOLINT(build/include_order)\n#include <unistd.h>        // NOLINT(build/include_order)\n#endif\n\n#include <memory>\n#include <string>\n#include <utility>\n#include <vector>\n\n#include <boost/asio.hpp>\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\n#include <QDir>               // NOLINT(build/include_order)\n#include <QFile>              // NOLINT(build/include_order)\n#include <QJsonArray>         // NOLINT(build/include_order)\n#include <QJsonDocument>      // NOLINT(build/include_order)\n#include <QJsonObject>        // NOLINT(build/include_order)\n#include <QNetworkInterface>  // NOLINT(build/include_order)\n#include <QStandardPaths>     // NOLINT(build/include_order)\n#include <QTcpSocket>         // NOLINT(build/include_order)\n\n#include \"routing//route_manager.h\"\n#include \"utils/brotli/brotli.h\"\n\nusing fptn::gui::ServerConfig;\nusing fptn::gui::ServiceConfig;\nusing fptn::gui::SettingsModel;\n\nnamespace {\nQVector<ServerConfig> ParseServers(const QJsonArray& servers_array) {\n  QVector<ServerConfig> servers;\n  for (const auto& server_value : servers_array) {\n    const QJsonObject server_obj = server_value.toObject();\n    bool status = false;\n    auto server = ServerConfig::parse(server_obj, status);\n    if (status) {\n      servers.push_back(std::move(server));\n    } else {\n      QString error = QObject::tr(\n          \"Missing required fields in configuration. Generate and apply a new \"\n          \"token.\");\n      throw std::runtime_error(error.toStdString());\n    }\n  }\n  return servers;\n}\n\nQVector<QString> SplitStringToVector(const QString& str) {\n  QVector<QString> result;\n  if (str.isEmpty()) {\n    return result;\n  }\n  const auto parts = str.split(',', Qt::SkipEmptyParts);\n  for (const auto& part : parts) {\n    result.append(part.trimmed());\n  }\n  return result;\n}\n\nQString JoinVectorToString(const QVector<QString>& vec) {\n  return vec.join(',');\n}\n\n};  // namespace\n\nSettingsModel::SettingsModel(const QMap<QString, QString>& languages,\n    const QString& default_language,\n    std::size_t ping_thread_pool_size,\n    QObject* parent)\n    : QObject(parent),\n      languages_(languages),\n      default_language_(default_language),\n      selected_language_(default_language),\n      ping_thread_pool_(ping_thread_pool_size),\n      ping_timer_(this),\n#if _WIN32\n      enable_advanced_dns_management_(false),\n#endif\n      client_autostart_(false),\n      enable_split_tunnel_(false) {\n#if _WIN32\n  wchar_t exe_path[MAX_PATH] = {};\n  if (GetModuleFileNameW(nullptr, exe_path, MAX_PATH) != 0) {\n    std::filesystem::path exe_dir =\n        std::filesystem::path(exe_path).parent_path();\n    std::string sni_folder = (exe_dir / \"SNI\").string();\n    sni_manager_ = std::make_shared<SNIManager>(sni_folder);\n  } else {\n    const auto settings_folder = GetSettingsFolderPath();\n    const std::string sni_folder = settings_folder.toStdString() + \"/\" + \"SNI\";\n    sni_manager_ = std::make_shared<SNIManager>(sni_folder);\n  }\n#elif __linux__\n  char exe_path[PATH_MAX] = {};\n  ssize_t count = readlink(\"/proc/self/exe\", exe_path, PATH_MAX);\n  if (count != -1) {\n    exe_path[count] = '\\0';\n    std::filesystem::path exe_dir =\n        std::filesystem::path(exe_path).parent_path();\n    std::string sni_folder = (exe_dir / \"SNI\").string();\n    sni_manager_ = std::make_shared<SNIManager>(sni_folder);\n  } else {\n    const auto settings_folder = GetSettingsFolderPath();\n    const std::string sni_folder = settings_folder.toStdString() + \"/\" + \"SNI\";\n    sni_manager_ = std::make_shared<SNIManager>(sni_folder);\n  }\n#else\n  const auto settings_folder = GetSettingsFolderPath();\n  const std::string sni_folder = settings_folder.toStdString() + \"/\" + \"SNI\";\n  sni_manager_ = std::make_shared<SNIManager>(sni_folder);\n#endif\n  Load(true);\n}\n\nSettingsModel::~SettingsModel() {\n  StopPingMonitoring();\n\n  ping_thread_pool_.stop();\n  ping_thread_pool_.join();\n}\n\nQString SettingsModel::GetSettingsFilePath() const {\n  const QString directory = GetSettingsFolderPath();\n  return directory + \"/fptn-settings-4.json\";\n}\n\n// NOLINTNEXTLINE(readability-convert-member-functions-to-static)\nQString SettingsModel::GetSettingsFolderPath() const {\n#ifdef __APPLE__\n  const QString directory =\n      QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation);\n#else\n  const QString directory =\n      QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);\n#endif\n  QDir dir(directory);\n  if (!dir.exists()) {\n    dir.mkpath(directory);\n  }\n  return directory;\n}\n\nvoid SettingsModel::Load(bool dont_load_server) {\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  services_.clear();\n\n  const QString file_path = GetSettingsFilePath();\n  QFile file(file_path);\n  if (!file.open(QIODevice::ReadOnly)) {\n    SPDLOG_WARN(\"Failed to open file for reading: {}\", file_path.toStdString());\n    return;\n  }\n\n  const QByteArray data = file.readAll();\n  file.close();\n  const QJsonDocument document = QJsonDocument::fromJson(data);\n  const QJsonObject service_obj = document.object();\n\n  if (service_obj.contains(\"services\")) {\n    QJsonArray services_array = service_obj[\"services\"].toArray();\n    for (const auto& service_value : services_array) {\n      QJsonObject jsonservice_obj = service_value.toObject();\n      ServiceConfig service;\n\n      service.service_name = jsonservice_obj[\"service_name\"].toString();\n      service.username = jsonservice_obj[\"username\"].toString();\n      service.password = jsonservice_obj[\"password\"].toString();\n\n      if (!dont_load_server) {\n        service.servers = ParseServers(jsonservice_obj[\"servers\"].toArray());\n        if (jsonservice_obj.contains(\"censored_zone_servers\")) {\n          service.censored_zone_servers =\n              ParseServers(jsonservice_obj[\"censored_zone_servers\"].toArray());\n        }\n      }\n      services_.push_back(service);\n    }\n  }\n  if (service_obj.contains(\"network_interface\")) {\n    network_interface_ = service_obj[\"network_interface\"].toString();\n  }\n  if (network_interface_.isEmpty()) {\n    network_interface_ = \"auto\";\n  }\n\n  if (service_obj.contains(\"language\")) {\n    selected_language_ = service_obj[\"language\"].toString();\n  }\n  if (service_obj.contains(\"autostart\")) {\n    client_autostart_ = service_obj[\"autostart\"].toBool();\n  }\n\n#if _WIN32\n  if (service_obj.contains(\"enable_advanced_dns_management\")) {\n    enable_advanced_dns_management_ =\n        service_obj[\"enable_advanced_dns_management\"].toBool();\n  }\n#endif\n\n  if (service_obj.contains(\"gateway_ip\")) {\n    gateway_ip_ = service_obj[\"gateway_ip\"].toString();\n  }\n  if (gateway_ip_.isEmpty()) {\n    gateway_ip_ = \"auto\";\n  }\n\n  if (service_obj.contains(\"sni\")) {\n    sni_ = service_obj[\"sni\"].toString();\n  }\n  if (sni_.isEmpty()) {\n    sni_ = FPTN_DEFAULT_SNI;\n  }\n\n  if (service_obj.contains(\"bypass_method\")) {\n    bypass_method_ = service_obj[\"bypass_method\"].toString();\n  }\n\n  /* Replace DEPRECATED METHODS */\n  if (bypass_method_ == kBypassMethodSni ||\n      bypass_method_ == kBypassMethodSniReality) {\n    bypass_method_ = kBypassMethodSniRealityYandex25;\n  }\n\n  if (bypass_method_.isEmpty() ||\n      (bypass_method_ != kBypassMethodSni &&\n          bypass_method_ != kBypassMethodObfuscation &&\n          bypass_method_ != kBypassMethodSniReality &&\n          /* Chrome */\n          bypass_method_ != kBypassMethodSniRealityChrome147 &&\n          bypass_method_ != kBypassMethodSniRealityChrome146 &&\n          bypass_method_ != kBypassMethodSniRealityChrome145 &&\n          /* Firefox */\n          bypass_method_ != kBypassMethodSniRealityFirefox149 &&\n          /* Yandex Browser */\n          bypass_method_ != kBypassMethodSniRealityYandex26 &&\n          bypass_method_ != kBypassMethodSniRealityYandex25 &&\n          bypass_method_ != kBypassMethodSniRealityYandex24 &&\n          /* Safari */\n          bypass_method_ != kBypassMethodSniRealitySafari26)) {\n    bypass_method_ = kBypassMethodSniRealityYandex25;  // BYDEFAULT\n  }\n\n  if (service_obj.contains(\"blacklist_domains\")) {\n    blacklist_domains_ = service_obj[\"blacklist_domains\"].toString();\n  }\n  if (blacklist_domains_.isEmpty()) {\n    blacklist_domains_ =\n        \"domain:solovev-live.ru,domain:ria.ru,domain:tass.ru,domain:1tv.ru,\"\n        \"domain:ntv.ru,domain:rt.com\";\n  }\n\n  if (service_obj.contains(\"exclude_tunnel_networks\")) {\n    exclude_tunnel_networks_ =\n        service_obj[\"exclude_tunnel_networks\"].toString();\n  }\n  if (exclude_tunnel_networks_.isEmpty()) {\n    exclude_tunnel_networks_ = \"10.0.0.0/8,172.16.0.0/12,192.168.0.0/16\";\n  }\n\n  if (service_obj.contains(\"include_tunnel_networks\")) {\n    include_tunnel_networks_ =\n        service_obj[\"include_tunnel_networks\"].toString();\n  }\n\n  if (service_obj.contains(\"enable_split_tunnel\")) {\n    enable_split_tunnel_ = service_obj[\"enable_split_tunnel\"].toBool();\n  }\n\n  if (service_obj.contains(\"split_tunnel_mode\")) {\n    split_tunnel_mode_ = service_obj[\"split_tunnel_mode\"].toString();\n  }\n  if (split_tunnel_mode_.isEmpty() ||\n      (split_tunnel_mode_ != kSplitTunnelModeExclude &&\n          split_tunnel_mode_ != kSplitTunnelModeInclude)) {\n    split_tunnel_mode_ = kSplitTunnelModeExclude;\n  }\n\n  if (service_obj.contains(\"split_tunnel_domains\")) {\n    split_tunnel_domains_ = service_obj[\"split_tunnel_domains\"].toString();\n  }\n  if (split_tunnel_domains_.isEmpty()) {\n    split_tunnel_domains_ =\n        \"domain:ru,domain:su,domain:рф,domain:vk.com,domain:yandex.com,\"\n        \"domain:userapi.com,domain:yandex.net,domain:clstorage.net\";\n  }\n}\n\nQString SettingsModel::LanguageName() const {\n  for (auto it = languages_.begin(); it != languages_.end(); ++it) {\n    if (it.key() == selected_language_) {\n      return it.value();\n    }\n  }\n  return \"English\";\n}\n\nconst QString& SettingsModel::LanguageCode() const {\n  return selected_language_;\n}\n\nconst QString& SettingsModel::DefaultLanguageCode() const {\n  return default_language_;\n}\n\nvoid SettingsModel::SetLanguage(const QString& language_name) {\n  for (auto it = languages_.begin(); it != languages_.end(); ++it) {\n    if (language_name == it.value()) {\n      selected_language_ = it.key();\n    }\n  }\n  Save();\n}\n\nvoid SettingsModel::SetLanguageCode(const QString& language_code) {\n  for (auto it = languages_.begin(); it != languages_.end(); ++it) {\n    if (language_code == it.key()) {\n      selected_language_ = language_code;\n    }\n  }\n  Save();\n}\n\nQVector<QString> SettingsModel::GetLanguages() const {\n  QVector<QString> languages;\n  for (auto it = languages_.begin(); it != languages_.end(); ++it) {\n    languages.push_back(it.value());\n  }\n  return languages;\n}\n\nbool SettingsModel::ExistsTranslation(const QString& language_code) const {\n  return languages_.contains(language_code);\n}\n\nbool SettingsModel::Save() {\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  QString file_path = GetSettingsFilePath();\n  QFile file(file_path);\n  if (!file.open(QIODevice::WriteOnly)) {\n    SPDLOG_ERROR(\n        \"Failed to open file for writing: {}\", file_path.toStdString());\n    return false;\n  }\n\n  QJsonObject json_object;\n  QJsonArray services_array;\n  for (const auto& service : services_) {\n    QJsonObject service_obj;\n    service_obj[\"service_name\"] = service.service_name;\n    service_obj[\"username\"] = service.username;\n    service_obj[\"password\"] = service.password;\n\n    QJsonArray servers_array;\n    for (const auto& server : service.servers) {\n      QJsonObject server_obj;\n      server_obj[\"name\"] = server.name;\n      server_obj[\"host\"] = server.host;\n      server_obj[\"port\"] = server.port;\n      server_obj[\"is_using\"] = server.is_using;\n      server_obj[\"md5_fingerprint\"] = server.md5_fingerprint;\n      servers_array.append(server_obj);\n    }\n    service_obj[\"servers\"] = servers_array;\n\n    QJsonArray censored_zone_servers;\n    for (const auto& server : service.censored_zone_servers) {\n      QJsonObject server_obj;\n      server_obj[\"name\"] = server.name;\n      server_obj[\"host\"] = server.host;\n      server_obj[\"port\"] = server.port;\n      server_obj[\"is_using\"] = server.is_using;\n      server_obj[\"md5_fingerprint\"] = server.md5_fingerprint;\n      censored_zone_servers.append(server_obj);\n    }\n    service_obj[\"censored_zone_servers\"] = censored_zone_servers;\n    services_array.append(service_obj);\n  }\n\n  json_object[\"language\"] = selected_language_;\n  json_object[\"services\"] = services_array;\n  json_object[\"network_interface\"] = network_interface_;\n  json_object[\"gateway_ip\"] = gateway_ip_;\n  json_object[\"autostart\"] = client_autostart_ ? 1 : 0;\n  json_object[\"sni\"] = sni_;\n  json_object[\"bypass_method\"] = bypass_method_;\n\n#if _WIN32\n  json_object[\"enable_advanced_dns_management\"] =\n      enable_advanced_dns_management_;\n#endif\n\n  json_object[\"blacklist_domains\"] = blacklist_domains_;\n  json_object[\"exclude_tunnel_networks\"] = exclude_tunnel_networks_;\n  json_object[\"include_tunnel_networks\"] = include_tunnel_networks_;\n  json_object[\"enable_split_tunnel\"] = enable_split_tunnel_;\n  json_object[\"split_tunnel_mode\"] = split_tunnel_mode_;\n  json_object[\"split_tunnel_domains\"] = split_tunnel_domains_;\n\n  QJsonDocument document(json_object);\n  auto len = file.write(document.toJson());\n  file.close();\n\n  emit dataChanged();\n\n  return len > 0;\n}\n\n// NOLINTNEXTLINE(readability-convert-member-functions-to-static)\nServiceConfig SettingsModel::ParseToken(const QString& token) {\n  QJsonParseError parse_error;\n  const QByteArray token_data = token.toUtf8();\n  QJsonDocument json_doc = QJsonDocument::fromJson(token_data, &parse_error);\n\n  if (parse_error.error != QJsonParseError::NoError) {\n    throw std::runtime_error(\n        \"JSON parsing error: \" + parse_error.errorString().toStdString());\n  }\n\n  QJsonObject json_object = json_doc.object();\n  if (!json_object.contains(\"service_name\") ||\n      !json_object.contains(\"username\") || !json_object.contains(\"password\") ||\n      !json_object.contains(\"servers\")) {\n    throw std::runtime_error(\"Missing required fields in JSON.\");\n  }\n  ServiceConfig service;\n  service.service_name = json_object[\"service_name\"].toString();\n  service.username = json_object[\"username\"].toString();\n  service.password = json_object[\"password\"].toString();\n\n  service.servers = ParseServers(json_object[\"servers\"].toArray());\n  if (json_object.contains(\"censored_zone_servers\")) {\n    service.censored_zone_servers =\n        ParseServers(json_object[\"censored_zone_servers\"].toArray());\n  }\n  return service;\n}\n\nQString SettingsModel::UsingNetworkInterface() const {\n  return network_interface_;\n}\n\nvoid SettingsModel::SetUsingNetworkInterface(const QString& iface) {\n  network_interface_ = (iface.isEmpty() ? \"auto\" : iface);\n}\n\nQString SettingsModel::GatewayIp() const {\n  return gateway_ip_.isEmpty() ? \"auto\" : gateway_ip_;\n}\n\nvoid SettingsModel::SetGatewayIp(const QString& ip) {\n  gateway_ip_ = ip.isEmpty() ? \"auto\" : ip;\n  Save();\n}\n\nQString SettingsModel::SNI() const {\n  return sni_.isEmpty() ? FPTN_DEFAULT_SNI : sni_;\n}\n\nvoid SettingsModel::SetSNI(const QString& sni) {\n  sni_ = sni;\n  Save();\n}\n\nbool SettingsModel::Autostart() const { return client_autostart_; }\n\nvoid SettingsModel::SetAutostart(bool value) {\n  client_autostart_ = value;\n  Save();\n}\n\nconst QVector<ServiceConfig>& SettingsModel::Services() const {\n  return services_;\n}\n\nvoid SettingsModel::AddService(const ServiceConfig& server) {\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  services_.append(server);\n}\n\nvoid SettingsModel::RemoveServer(int index) {\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  if (index >= 0 && index < services_.size()) {\n    services_.removeAt(index);\n  }\n}\n\nvoid SettingsModel::Clear() { services_.clear(); }\n\n// NOLINTNEXTLINE(readability-convert-member-functions-to-static)\nQVector<QString> SettingsModel::GetNetworkInterfaces() const {\n  QVector<QString> interfaces;\n  interfaces.append(\"auto\");\n\n  QList<QNetworkInterface> network_interfaces =\n      QNetworkInterface::allInterfaces();\n\n  for (const QNetworkInterface& network_interface : network_interfaces) {\n    if (!network_interface.flags().testFlag(QNetworkInterface::IsLoopBack)) {\n      const QString iface_name = network_interface.humanReadableName();\n      if (!iface_name.isEmpty()) {\n        interfaces.append(iface_name);\n      }\n    }\n  }\n  return interfaces;\n}\n\nint SettingsModel::GetExistServiceIndex(const QString& name) const {\n  for (int i = 0; i < services_.size(); i++) {\n    if (services_[i].service_name == name) {\n      return i;\n    }\n  }\n  return -1;\n}\n\nQString SettingsModel::BypassMethod() const {\n  return bypass_method_.isEmpty() ? kBypassMethodSni : bypass_method_;\n}\n\nvoid SettingsModel::SetBypassMethod(const QString& method) {\n  bypass_method_ = method;\n  Save();\n}\n\nfptn::gui::SNIManagerSPtr SettingsModel::SniManager() const {\n  return sni_manager_;\n}\n\nQVector<QString> SettingsModel::BlacklistDomains() const {\n  if (blacklist_domains_.isEmpty()) {\n    return SplitStringToVector(FPTN_CLIENT_DEFAULT_BLACKLIST_DOMAINS);\n  }\n  return SplitStringToVector(blacklist_domains_);\n}\n\nvoid SettingsModel::SetBlacklistDomains(const QVector<QString>& domains) {\n  blacklist_domains_ = JoinVectorToString(domains);\n  Save();\n}\n\nQVector<QString> SettingsModel::ExcludeTunnelNetworks() const {\n  if (exclude_tunnel_networks_.isEmpty()) {\n    return SplitStringToVector(FPTN_CLIENT_DEFAULT_EXCLUDE_NETWORKS);\n  }\n  return SplitStringToVector(exclude_tunnel_networks_);\n}\n\nvoid SettingsModel::SetExcludeTunnelNetworks(const QVector<QString>& networks) {\n  exclude_tunnel_networks_ = JoinVectorToString(networks);\n  Save();\n}\n\nQVector<QString> SettingsModel::IncludeTunnelNetworks() const {\n  return SplitStringToVector(include_tunnel_networks_);\n}\n\nvoid SettingsModel::SetIncludeTunnelNetworks(const QVector<QString>& networks) {\n  include_tunnel_networks_ = JoinVectorToString(networks);\n  Save();\n}\n\nbool SettingsModel::EnableSplitTunnel() const { return enable_split_tunnel_; }\n\nvoid SettingsModel::SetEnableSplitTunnel(bool enable) {\n  enable_split_tunnel_ = enable;\n  Save();\n}\n\nQString SettingsModel::SplitTunnelMode() const {\n  return split_tunnel_mode_.isEmpty() ? kSplitTunnelModeExclude\n                                      : split_tunnel_mode_;\n}\n\nvoid SettingsModel::SetSplitTunnelMode(const QString& mode) {\n  split_tunnel_mode_ = mode;\n  Save();\n}\n\nQVector<QString> SettingsModel::SplitTunnelDomains() {\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  if (split_tunnel_domains_.isEmpty()) {\n    return SplitStringToVector(FPTN_CLIENT_DEFAULT_SPLIT_TUNNEL_DOMAINS);\n  }\n  return SplitStringToVector(split_tunnel_domains_);\n}\n\nvoid SettingsModel::SetSplitTunnelDomains(const QVector<QString>& domains) {\n  split_tunnel_domains_ = JoinVectorToString(domains);\n  Save();\n}\n#if _WIN32\nbool SettingsModel::EnableAdvancedDnsManagement() const {\n  return enable_advanced_dns_management_;\n}\n\nvoid SettingsModel::SetEnableAdvancedDnsManagement(const bool enable) {\n  enable_advanced_dns_management_ = enable;\n}\n#endif\n\nvoid SettingsModel::StartPingMonitoring() {\n  const std::unique_lock<std::mutex> lock(mutex_);\n\n  if (start_pinging_) {\n    return;\n  }\n\n  start_pinging_ = true;\n  connect(&ping_timer_, &QTimer::timeout, [this]() {\n    if (!start_pinging_ || pending_pings_ > 0) {\n      return;\n    }\n\n    QSet<QPair<QString, int>> servers_to_check;\n    {\n      const std::unique_lock<std::mutex> lock(mutex_);\n      for (const auto& service : services_) {\n        for (const auto& server : service.servers) {\n          servers_to_check.insert({server.host, server.port});\n        }\n        for (const auto& server : service.censored_zone_servers) {\n          servers_to_check.insert({server.host, server.port});\n        }\n      }\n    }\n\n    pending_pings_ = servers_to_check.size();\n\n    for (const auto& [host, port] : servers_to_check) {\n      boost::asio::post(ping_thread_pool_, [this, host, port]() {\n        PingServer(host, port);\n        pending_pings_--;\n      });\n    }\n  });\n\n  if (!ping_timer_.isActive()) {\n    ping_timer_.start(1000);\n  }\n}\n\nvoid SettingsModel::StopPingMonitoring() {\n  if (!start_pinging_) {\n    return;\n  }\n\n  {\n    const std::unique_lock<std::mutex> lock(mutex_);\n\n    // cppcheck-suppress identicalConditionAfterEarlyExit\n    if (!start_pinging_) {\n      return;\n    }\n    start_pinging_ = false;\n  }\n}\n\nvoid SettingsModel::PingServer(const QString& host, int port) {\n  std::vector<int> results;\n\n  for (int i = 0; start_pinging_ && i < 3; ++i) {\n    const auto start_time = std::chrono::steady_clock::now();\n    int ping_ms = -1;\n\n    QTcpSocket socket;\n    socket.connectToHost(host, port);\n    if (socket.waitForConnected(2000)) {\n      const auto end_time = std::chrono::steady_clock::now();\n      ping_ms = std::chrono::duration_cast<std::chrono::milliseconds>(\n          end_time - start_time)\n                    .count();\n    }\n    socket.close();\n    results.push_back(ping_ms);\n  }\n\n  const bool has_error =\n      std::ranges::any_of(results, [](int ping) { return ping == -1; });\n\n  int final_ping_ms = -1;\n  if (!has_error && !results.empty()) {\n    const int sum = std::accumulate(results.begin(), results.end(), 0);\n    final_ping_ms = sum / static_cast<int>(results.size());\n  }\n\n  const std::unique_lock<std::mutex> lock(mutex_);\n\n  if (start_pinging_) {\n    for (auto& service : services_) {\n      for (auto& server : service.servers) {\n        if (server.host == host && server.port == port) {\n          server.ping_ms = final_ping_ms;\n        }\n      }\n      for (auto& server : service.censored_zone_servers) {\n        if (server.host == host && server.port == port) {\n          server.ping_ms = final_ping_ms;\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/fptn-client/gui/settingsmodel/settingsmodel.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <memory>\n#include <mutex>\n\n#include <boost/asio/post.hpp>\n#include <boost/asio/thread_pool.hpp>\n\n#include <QFile>          // NOLINT(build/include_order)\n#include <QJsonArray>     // NOLINT(build/include_order)\n#include <QJsonDocument>  // NOLINT(build/include_order)\n#include <QJsonObject>    // NOLINT(build/include_order)\n#include <QMap>           // NOLINT(build/include_order)\n#include <QMutex>         // NOLINT(build/include_order)\n#include <QObject>        // NOLINT(build/include_order)\n#include <QString>        // NOLINT(build/include_order)\n#include <QTimer>         // NOLINT(build/include_order)\n#include <QVector>        // NOLINT(build/include_order)\n\n#include \"gui/sni_manager/sni_manager.h\"\n\nnamespace fptn::gui {\n/*\n{\n    \"gateway_ip\": \"auto\",\n    \"language\": \"en\",\n    \"network_interface\": \"auto\",\n    \"services\": [\n        {\n            \"version\": 2,\n            \"service_name\": \"FPTN.ONLINE\",\n            \"username\": \"test\",\n            \"password\": \"test\",\n            \"servers\": [\n                    {\n                        \"name\": \"pq1\",\n                        \"host\": \"74.119.195.151\",\n                        \"md5_fingerprint\": \"5c903603cbcfbf0601193c4cc859292c\",\n                        \"port\": 443\n                    }\n                ],\n            \"censored_zone_servers\": [\n                    {\n                        \"name\": \"Server1\",\n                        \"host\": \"127.0.0.1\",\n                        \"port\": 443,\n                        \"md5_fingerprint\": \"5c903603cbcfbf0601193c4cc859292c\"\n                    }\n                ]\n            }\n        }\n    ],\n    \"blacklist_domains\":\n\"domain:solovev-live.ru,domain:ria.ru,domain:tass.ru,domain:1tv.ru,domain:ntv.ru,domain:rt.com\",\n    \"exclude_tunnel_networks\": \"10.0.0.0/8,172.16.0.0/12,192.168.0.0/16\",\n    \"include_tunnel_networks\": \"\",\n    \"enable_split_tunnel\": true,\n    \"split_tunnel_mode\": \"exclude\",\n    \"split_tunnel_domains\":\n\"domain:ru,domain:su,domain:рф,domain:vk.com,domain:yandex.com,domain:userapi.com,domain:yandex.net,domain:clstorage.net\"\n}\n*/\n\nstruct ServerConfig {\n  QString name;\n  QString host;\n  int port;\n  bool is_using;\n  QString md5_fingerprint;\n  int ping_ms = -1;\n\n  static ServerConfig parse(const QJsonObject& server_obj, bool& status) {\n    status = false;\n    if (!server_obj.contains(\"name\") || !server_obj.contains(\"host\") ||\n        !server_obj.contains(\"port\") ||\n        !server_obj.contains(\"md5_fingerprint\")) {\n      return {};\n    }\n    ServerConfig server = {};\n    server.name = server_obj[\"name\"].toString();\n    server.host = server_obj[\"host\"].toString();\n    server.port = server_obj[\"port\"].toInt();\n    server.md5_fingerprint = server_obj[\"md5_fingerprint\"].toString();\n    server.is_using = true;\n    server.ping_ms = -1;\n    status = true;\n    return server;\n  }\n};\n\nstruct ServiceConfig {\n  QString service_name;\n  QString username;\n  QString password;\n  QVector<ServerConfig> servers;\n  QVector<ServerConfig> censored_zone_servers;\n  QString language;\n};\n\nclass SettingsModel : public QObject {\n  Q_OBJECT\n\n public:\n  static constexpr const char* kSplitTunnelModeExclude = \"exclude\";\n  static constexpr const char* kSplitTunnelModeInclude = \"include\";\n\n  // DEPRECATED\n  static constexpr const char* kBypassMethodSni = \"SNI\";\n\n  static constexpr const char* kBypassMethodObfuscation = \"OBFUSCATION\";\n\n  // DEPRECATED\n  static constexpr const char* kBypassMethodSniReality = \"SNI-REALITY\";\n\n  /* chrome */\n  static constexpr const char* kBypassMethodSniRealityChrome147 =\n      \"SNI-REALITY-CHROME-147\";\n  static constexpr const char* kBypassMethodSniRealityChrome146 =\n      \"SNI-REALITY-CHROME-146\";\n  static constexpr const char* kBypassMethodSniRealityChrome145 =\n      \"SNI-REALITY-CHROME-145\";\n  /* Firefox */\n  static constexpr const char* kBypassMethodSniRealityFirefox149 =\n      \"SNI-REALITY-FIREFOX-149\";\n  /* Yandex Browser */\n  static constexpr const char* kBypassMethodSniRealityYandex26 =\n      \"SNI-REALITY-YANDEX-26\";\n  static constexpr const char* kBypassMethodSniRealityYandex25 =\n      \"SNI-REALITY-YANDEX-25\";\n  static constexpr const char* kBypassMethodSniRealityYandex24 =\n      \"SNI-REALITY-YANDEX-24\";\n  /* Safari */\n  static constexpr const char* kBypassMethodSniRealitySafari26 =\n      \"SNI-REALITY-SAFARI-26\";\n\n public:\n  explicit SettingsModel(const QMap<QString, QString>& languages,\n      const QString& default_language = \"en\",\n      std::size_t ping_thread_pool_size = 4,\n      QObject* parent = nullptr);\n\n  ~SettingsModel() override;\n\n  void Load(bool dont_load_server = false);\n  bool Save();\n\n  void StartPingMonitoring();\n  void StopPingMonitoring();\n\n  QString UsingNetworkInterface() const;\n\n  void SetUsingNetworkInterface(const QString&);\n\n  QString GatewayIp() const;\n  void SetGatewayIp(const QString& ip);\n\n  QString SNI() const;\n  void SetSNI(const QString& sni);\n\n  QVector<QString> GetNetworkInterfaces() const;\n\n  const QVector<ServiceConfig>& Services() const;\n  void AddService(const ServiceConfig& server);\n  void RemoveServer(int index);\n  int GetExistServiceIndex(const QString& name) const;\n  ServiceConfig ParseToken(const QString& token);\n  void Clear();\n\n  QString LanguageName() const;\n  void SetLanguage(const QString& language);\n  void SetLanguageCode(const QString& language_code);\n\n  QVector<QString> GetLanguages() const;\n\n  const QString& DefaultLanguageCode() const;\n  const QString& LanguageCode() const;\n\n  bool ExistsTranslation(const QString& language_code) const;\n\n  bool Autostart() const;\n  void SetAutostart(bool value);\n\n  QString GetSettingsFilePath() const;\n  QString GetSettingsFolderPath() const;\n\n  QString BypassMethod() const;\n  void SetBypassMethod(const QString& method);\n\n  SNIManagerSPtr SniManager() const;\n\n  QVector<QString> BlacklistDomains() const;\n  void SetBlacklistDomains(const QVector<QString>& domains);\n\n  QVector<QString> ExcludeTunnelNetworks() const;\n  void SetExcludeTunnelNetworks(const QVector<QString>& networks);\n\n  QVector<QString> IncludeTunnelNetworks() const;\n  void SetIncludeTunnelNetworks(const QVector<QString>& networks);\n\n  bool EnableSplitTunnel() const;\n  void SetEnableSplitTunnel(bool enable);\n\n  QString SplitTunnelMode() const;\n  void SetSplitTunnelMode(const QString& mode);\n\n  QVector<QString> SplitTunnelDomains();\n  void SetSplitTunnelDomains(const QVector<QString>& domains);\n\n#if _WIN32\n  bool EnableAdvancedDnsManagement() const;\n  void SetEnableAdvancedDnsManagement(bool enable);\n#endif\n\n protected:\n  void PingServer(const QString& host, int port);\n\n signals:\n  void dataChanged();\n\n private:\n  std::mutex mutex_;\n\n  QMap<QString, QString> languages_;\n\n  QString default_language_;\n\n  QString selected_language_;\n\n  boost::asio::thread_pool ping_thread_pool_;\n  QTimer ping_timer_;\n  std::atomic<bool> start_pinging_{false};\n  std::atomic<int> pending_pings_{0};\n\n  QVector<ServiceConfig> services_;\n  QString network_interface_;\n  QString gateway_ip_;\n  QString sni_;\n\n#if _WIN32\n  bool enable_advanced_dns_management_;\n#endif\n  bool client_autostart_;\n\n  QString bypass_method_;\n\n  QString blacklist_domains_;\n  QString exclude_tunnel_networks_;\n  QString include_tunnel_networks_;\n  bool enable_split_tunnel_;\n  QString split_tunnel_mode_;\n  QString split_tunnel_domains_;\n\n  SNIManagerSPtr sni_manager_;\n};\n\nusing SettingsModelPtr = std::shared_ptr<SettingsModel>;\n}  // namespace fptn::gui\n"
  },
  {
    "path": "src/fptn-client/gui/settingswidget/settings.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"gui/settingswidget/settings.h\"\n\n#include \"gui/sni_autoscan_dialog/sni_autoscan_dialog.h\"\n\n#if _WIN32\n#include <Ws2tcpip.h>  // NOLINT(build/include_order)\n#include <windows.h>   // NOLINT(build/include_order)\n#endif\n\n#include <utility>\n\n#include <QFileDialog>       // NOLINT(build/include_order)\n#include <QGridLayout>       // NOLINT(build/include_order)\n#include <QHeaderView>       // NOLINT(build/include_order)\n#include <QLabel>            // NOLINT(build/include_order)\n#include <QLineEdit>         // NOLINT(build/include_order)\n#include <QMessageBox>       // NOLINT(build/include_order)\n#include <QPushButton>       // NOLINT(build/include_order)\n#include <QScrollArea>       // NOLINT(build/include_order)\n#include <QSystemTrayIcon>   // NOLINT(build/include_order)\n#include <QTableWidgetItem>  // NOLINT(build/include_order)\n\n#include \"gui/autostart/autostart.h\"\n#include \"gui/tokendialog/tokendialog.h\"\n#include \"gui/translations/translations.h\"\n\nnamespace {\nQString CleanDomain(const QString& domain) {\n  if (domain.isEmpty()) {\n    return domain;\n  }\n\n  QString cleaned;\n  cleaned.reserve(domain.length());\n\n  static QRegularExpression valid_chars(\"[a-zA-Z0-9.-]\");\n\n  for (int i = 0; i < domain.length(); ++i) {\n    QChar ch = domain[i];\n\n    if (valid_chars.match(ch).hasMatch()) {\n      cleaned.append(ch.toLower());\n    }\n  }\n  return cleaned;\n}\n\nQString VectorToText(const QVector<QString>& items) { return items.join('\\n'); }\n\nQVector<QString> TextToVector(const QString& text) {\n  QVector<QString> result;\n  const auto lines = text.split('\\n', Qt::SkipEmptyParts);\n  for (const auto& line : lines) {\n    result.append(line.trimmed());\n  }\n  return result;\n}\n}  // namespace\n\nusing fptn::gui::SettingsWidget;\n\nSettingsWidget::SettingsWidget(SettingsModelPtr settings, QWidget* parent)\n    : QDialog(parent), settings_(std::move(settings)) {\n  SetupUi();\n  setWindowIcon(QIcon(\":/icons/app.ico\"));\n  // show on top\n  setWindowFlags(Qt::Window | Qt::WindowStaysOnTopHint);\n  setModal(true);\n  show();\n  activateWindow();\n  raise();\n  setWindowTitle(QObject::tr(\"Settings\"));\n}\n\nvoid SettingsWidget::SetupUi() {\n  tab_widget_ = new QTabWidget(this);\n  tab_widget_->setContextMenuPolicy(Qt::ActionsContextMenu);\n\n  // ==================== Settings Tab ====================\n  settings_tab_ = new QWidget();\n  auto* main_settings_layout = new QVBoxLayout(settings_tab_);\n  main_settings_layout->setContentsMargins(0, 0, 0, 0);\n  auto* settings_scroll_area = new QScrollArea(this);\n  settings_scroll_area->setWidgetResizable(true);\n  settings_scroll_area->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);\n  settings_scroll_area->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);\n  settings_scroll_area->setFrameShape(QFrame::NoFrame);\n\n  auto* settings_content_widget = new QWidget();\n  settings_content_widget->setMinimumWidth(600);\n  auto* settings_layout = new QVBoxLayout(settings_content_widget);\n  settings_layout->setContentsMargins(5, 5, 5, 5);\n\n  grid_layout_ = new QGridLayout();\n  grid_layout_->setContentsMargins(0, 0, 0, 0);\n  grid_layout_->setHorizontalSpacing(10);\n  grid_layout_->setVerticalSpacing(10);\n  grid_layout_->setColumnStretch(0, 1);\n  grid_layout_->setColumnStretch(1, 3);\n  grid_layout_->setColumnMinimumWidth(0, 380);\n\n#ifdef __linux__\n  autostart_label_ = new QLabel(QObject::tr(\"Autostart\"), this);\n  autostart_checkbox_ = new QCheckBox(\" \", this);\n  autostart_checkbox_->setChecked(settings_->Autostart());\n  connect(autostart_checkbox_, &QCheckBox::toggled, this,\n      &SettingsWidget::onAutostartChanged);\n  grid_layout_->addWidget(autostart_label_, 0, 0, Qt::AlignLeft);\n  grid_layout_->addWidget(autostart_checkbox_, 0, 1, Qt::AlignLeft);\n#endif\n\n  language_label_ = new QLabel(QObject::tr(\"Language\"), this);\n  language_combo_box_ = new QComboBox(this);\n  language_combo_box_->addItems(settings_->GetLanguages());\n  language_combo_box_->setCurrentText(settings_->LanguageName());\n  connect(language_combo_box_, &QComboBox::currentTextChanged, this,\n      &SettingsWidget::onLanguageChanged);\n  grid_layout_->addWidget(language_label_, 1, 0, Qt::AlignLeft);\n  grid_layout_->addWidget(language_combo_box_, 1, 1, Qt::AlignLeft);\n\n  interface_label_ =\n      new QLabel(QObject::tr(\"Network Interface (adapter)\"), this);\n  interface_combo_box_ = new QComboBox(this);\n  interface_combo_box_->addItems(settings_->GetNetworkInterfaces());\n  interface_combo_box_->setCurrentText(settings_->UsingNetworkInterface());\n  connect(interface_combo_box_, &QComboBox::currentTextChanged, this,\n      &SettingsWidget::onInterfaceChanged);\n  grid_layout_->addWidget(interface_label_, 2, 0, Qt::AlignLeft);\n  grid_layout_->addWidget(interface_combo_box_, 2, 1, Qt::AlignLeft);\n\n  gateway_label_ = new QLabel(\n      QObject::tr(\"Gateway IP Address (typically your router's address)\"),\n      this);\n  gateway_auto_checkbox_ = new QCheckBox(QObject::tr(\"Auto\"), this);\n  gateway_line_edit_ = new QLineEdit(this);\n  if (settings_->GatewayIp().toLower() != \"auto\") {\n    gateway_auto_checkbox_->setChecked(false);\n    gateway_line_edit_->setText(settings_->GatewayIp());\n    gateway_line_edit_->setEnabled(true);\n  } else {\n    gateway_auto_checkbox_->setChecked(true);\n    gateway_line_edit_->setDisabled(true);\n  }\n  connect(gateway_auto_checkbox_, &QCheckBox::toggled, this,\n      &SettingsWidget::onAutoGatewayChanged);\n\n  auto* gateway_layout = new QHBoxLayout();\n  gateway_layout->addWidget(gateway_auto_checkbox_);\n  gateway_layout->addWidget(gateway_line_edit_);\n  gateway_layout->setStretch(0, 0);\n  gateway_layout->setStretch(1, 1);\n\n  grid_layout_->addWidget(gateway_label_, 3, 0, Qt::AlignLeft);\n  grid_layout_->addLayout(gateway_layout, 3, 1);\n\n  bypass_method_label_ =\n      new QLabel(QObject::tr(\"Bypass blocking method\"), this);\n  bypass_method_combo_box_ = new QComboBox(this);\n  bypass_method_combo_box_->addItem(\n      QObject::tr(\"OBFUSCATION\"), SettingsModel::kBypassMethodObfuscation);\n  /* Chrome */\n  bypass_method_combo_box_->addItem(QObject::tr(\"SNI-REALITY (Chrome 147)\"),\n      SettingsModel::kBypassMethodSniRealityChrome147);\n  bypass_method_combo_box_->addItem(QObject::tr(\"SNI-REALITY (Chrome 146)\"),\n      SettingsModel::kBypassMethodSniRealityChrome146);\n  bypass_method_combo_box_->addItem(QObject::tr(\"SNI-REALITY (Chrome 145)\"),\n      SettingsModel::kBypassMethodSniRealityChrome145);\n  /* Firefox */\n  bypass_method_combo_box_->addItem(QObject::tr(\"SNI-REALITY (Firefox 149)\"),\n      SettingsModel::kBypassMethodSniRealityFirefox149);\n  /* Yandex */\n  bypass_method_combo_box_->addItem(QObject::tr(\"SNI-REALITY (Yandex 26)\"),\n      SettingsModel::kBypassMethodSniRealityYandex26);\n  bypass_method_combo_box_->addItem(QObject::tr(\"SNI-REALITY (Yandex 25)\"),\n      SettingsModel::kBypassMethodSniRealityYandex25);\n  bypass_method_combo_box_->addItem(QObject::tr(\"SNI-REALITY (Yandex 24)\"),\n      SettingsModel::kBypassMethodSniRealityYandex24);\n  /* Safari */\n  bypass_method_combo_box_->addItem(QObject::tr(\"SNI-REALITY (Safari 26)\"),\n      SettingsModel::kBypassMethodSniRealitySafari26);\n\n  bypass_method_combo_box_->setSizePolicy(\n      QSizePolicy::Expanding, QSizePolicy::Fixed);\n  bypass_method_combo_box_->setMinimumWidth(200);\n\n  const QString current_method = settings_->BypassMethod();\n  if (current_method == SettingsModel::kBypassMethodObfuscation) {\n    bypass_method_combo_box_->setCurrentText(QObject::tr(\"OBFUSCATION\"));\n  }\n  /* Chrome */\n  else if (current_method == SettingsModel::kBypassMethodSniRealityChrome147) {\n    bypass_method_combo_box_->setCurrentText(\n        QObject::tr(\"SNI-REALITY (Chrome 147)\"));\n  } else if (current_method ==\n             SettingsModel::kBypassMethodSniRealityChrome146) {\n    bypass_method_combo_box_->setCurrentText(\n        QObject::tr(\"SNI-REALITY (Chrome 146)\"));\n  } else if (current_method ==\n             SettingsModel::kBypassMethodSniRealityChrome145) {\n    bypass_method_combo_box_->setCurrentText(\n        QObject::tr(\"SNI-REALITY (Chrome 145)\"));\n  }\n  /* Firefox */\n  else if (current_method == SettingsModel::kBypassMethodSniRealityFirefox149) {\n    bypass_method_combo_box_->setCurrentText(\n        QObject::tr(\"SNI-REALITY (Firefox 149)\"));\n  }\n  /* Yandex */\n  else if (current_method == SettingsModel::kBypassMethodSniRealityYandex26) {\n    bypass_method_combo_box_->setCurrentText(\n        QObject::tr(\"SNI-REALITY (Yandex 26)\"));\n  } else if (\n      current_method ==\n      SettingsModel::\n          kBypassMethodSniRealityYandex25) {  // NOLINT(bugprone-branch-clone)\n    bypass_method_combo_box_->setCurrentText(\n        QObject::tr(\"SNI-REALITY (Yandex 25)\"));\n  } else if (current_method == SettingsModel::kBypassMethodSniRealityYandex24) {\n    bypass_method_combo_box_->setCurrentText(\n        QObject::tr(\"SNI-REALITY (Yandex 24)\"));\n  }\n  /* Safari */\n  else if (current_method == SettingsModel::kBypassMethodSniRealitySafari26) {\n    bypass_method_combo_box_->setCurrentText(\n        QObject::tr(\"SNI-REALITY (Safari 26)\"));\n  }\n  /* Default */\n  else {\n    bypass_method_combo_box_->setCurrentText(\n        QObject::tr(\"SNI-REALITY (Yandex 25)\"));\n  }\n\n  connect(bypass_method_combo_box_, &QComboBox::currentTextChanged, this,\n      &SettingsWidget::onBypassMethodChanged);\n\n  grid_layout_->addWidget(bypass_method_label_, 4, 0, Qt::AlignLeft);\n  grid_layout_->addWidget(bypass_method_combo_box_, 4, 1);\n\n  sni_label_ = new QLabel(this);\n  if (settings_->BypassMethod() == SettingsModel::kBypassMethodSniReality) {\n    sni_label_->setText(QObject::tr(\"Fake domain to bypass blocking\"));\n  }\n  sni_label_->setMinimumHeight(40);\n  sni_label_->setWordWrap(true);\n  sni_line_edit_ = new QLineEdit(this);\n  sni_line_edit_->setText(settings_->SNI());\n  sni_line_edit_->setMinimumWidth(200);\n  sni_label_->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);\n  sni_line_edit_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);\n  connect(sni_line_edit_, &QLineEdit::textChanged, this,\n      [this](const QString& text) {\n        if (text.isEmpty()) {\n          settings_->SetSNI(FPTN_DEFAULT_SNI);\n          return;\n        }\n        QString normalized = CleanDomain(text.toLower());\n        if (normalized != text) {\n          sni_line_edit_->blockSignals(true);\n          sni_line_edit_->setText(normalized);\n          sni_line_edit_->blockSignals(false);\n        }\n        settings_->SetSNI(normalized);\n      });\n\n  grid_layout_->addWidget(sni_label_, 5, 0, Qt::AlignLeft | Qt::AlignVCenter);\n  grid_layout_->addWidget(sni_line_edit_, 5, 1);\n\n  sni_files_list_widget_ = new QListWidget(this);\n  sni_files_list_widget_->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);\n  sni_files_list_widget_->setMaximumHeight(80);\n\n  sni_buttons_layout_ = new QHBoxLayout();\n\n  sni_autoscan_button_ = new QPushButton(QObject::tr(\"Autoscan SNI\"), this);\n  sni_import_button_ = new QPushButton(QObject::tr(\"Import SNI file\"), this);\n\n  sni_buttons_layout_->addWidget(sni_autoscan_button_);\n  sni_buttons_layout_->addSpacing(10);\n  sni_buttons_layout_->addWidget(sni_import_button_);\n  sni_buttons_layout_->addStretch(1);\n\n  sni_autoscan_button_->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);\n  sni_import_button_->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);\n\n  grid_layout_->addLayout(sni_buttons_layout_, 7, 0, 1, 2);\n  grid_layout_->addWidget(sni_files_list_widget_, 8, 0, 1, 2);\n  connect(sni_autoscan_button_, &QPushButton::clicked, this,\n      &SettingsWidget::onAutoscanClicked);\n\n  connect(sni_import_button_, &QPushButton::clicked, this,\n      &SettingsWidget::onImportSniFile);\n\n  settings_layout->addLayout(grid_layout_);\n\n  server_table_ = new QTableWidget(0, 4, this);\n  server_table_->setHorizontalHeaderLabels({QObject::tr(\"Name\"),\n      QObject::tr(\"User\"), QObject::tr(\"Servers\"), QObject::tr(\"Action\")});\n  server_table_->horizontalHeader()->setStretchLastSection(false);\n  server_table_->horizontalHeader()->setSectionResizeMode(\n      0, QHeaderView::Stretch);\n  server_table_->horizontalHeader()->setSectionResizeMode(\n      1, QHeaderView::Stretch);\n  server_table_->horizontalHeader()->setSectionResizeMode(\n      2, QHeaderView::Stretch);\n  server_table_->horizontalHeader()->setSectionResizeMode(\n      3, QHeaderView::ResizeToContents);\n\n  server_table_->setEditTriggers(QAbstractItemView::NoEditTriggers);\n  server_table_->setSelectionBehavior(QAbstractItemView::SelectRows);\n  server_table_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);\n  server_table_->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);\n  server_table_->verticalHeader()->setSectionResizeMode(\n      QHeaderView::ResizeToContents);\n  server_table_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);\n  server_table_->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);\n\n  settings_layout->addWidget(server_table_);\n  settings_layout->addStretch(1);\n\n  settings_scroll_area->setWidget(settings_content_widget);\n  main_settings_layout->addWidget(settings_scroll_area);\n\n  tab_widget_->addTab(settings_tab_, QObject::tr(\"Settings\"));\n\n  // ==================== Routing Tab ====================\n  routing_tab_ = new QWidget();\n  auto* main_routing_layout = new QVBoxLayout(routing_tab_);\n  main_routing_layout->setContentsMargins(0, 0, 0, 0);\n\n  auto* routing_scroll_area = new QScrollArea(this);\n  routing_scroll_area->setWidgetResizable(true);\n  routing_scroll_area->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);\n  routing_scroll_area->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);\n  routing_scroll_area->setFrameShape(QFrame::NoFrame);\n\n  auto* routing_content_widget = new QWidget();\n  auto* routing_layout = new QVBoxLayout(routing_content_widget);\n  routing_layout->setContentsMargins(10, 10, 10, 10);\n  routing_layout->setSpacing(5);\n\n  routing_grid_layout_ = new QGridLayout();\n  routing_grid_layout_->setContentsMargins(0, 0, 0, 0);\n  routing_grid_layout_->setHorizontalSpacing(10);\n  routing_grid_layout_->setVerticalSpacing(5);\n  routing_grid_layout_->setColumnStretch(0, 1);\n  routing_grid_layout_->setColumnStretch(1, 2);\n\n  int current_row = 0;\n\n#ifdef _WIN32\n  constexpr char kInfoLabelStyle[] = \"color: #111111; font-size: 7pt;\";\n#elif defined(__APPLE__)\n  constexpr char kInfoLabelStyle[] = \"color: #888888; font-size: 9pt;\";\n#elif defined(__linux__)\n  constexpr char kInfoLabelStyle[] = \"color: #111111; font-size: 8pt;\";\n#endif\n\n// Routing\n#if _WIN32\n  // DNS Management\n  enable_dns_management_label_ =\n      new QLabel(QObject::tr(\"Enable advanced DNS management\"), this);\n  enable_dns_management_info_label_ = new QLabel(\n      QObject::tr(\"Enables advanced DNS configuration to prevent leaks. \"\n                  \"Recommended when using split tunneling. Use with caution!\"),\n      this);\n  enable_dns_management_info_label_->setWordWrap(true);\n  enable_dns_management_info_label_->setStyleSheet(kInfoLabelStyle);\n  enable_dns_management_info_label_->setMinimumHeight(70);\n  auto* dns_label_container = new QWidget(this);\n  auto* dns_label_layout = new QVBoxLayout(dns_label_container);\n  dns_label_layout->setContentsMargins(0, 0, 0, 0);\n  dns_label_layout->addWidget(\n      enable_dns_management_label_, 0, Qt::AlignLeft | Qt::AlignTop);\n  dns_label_layout->addWidget(\n      enable_dns_management_info_label_, 0, Qt::AlignLeft | Qt::AlignTop);\n  dns_label_layout->addStretch(1);\n\n  enable_dns_management_checkbox_ = new QCheckBox(\" \", this);\n  enable_dns_management_checkbox_->setChecked(\n      settings_->EnableAdvancedDnsManagement());\n  connect(enable_dns_management_checkbox_, &QCheckBox::toggled, this,\n      [this](bool checked) {\n        settings_->SetEnableAdvancedDnsManagement(checked);\n      });\n\n  routing_grid_layout_->addWidget(\n      dns_label_container, current_row, 0, Qt::AlignLeft | Qt::AlignTop);\n  routing_grid_layout_->addWidget(enable_dns_management_checkbox_, current_row,\n      1, Qt::AlignLeft | Qt::AlignTop);\n  current_row++;\n#endif\n\n  blacklist_domains_label_ = new QLabel(QObject::tr(\"Blacklist domains\"), this);\n  blacklist_domains_info_label_ = new QLabel(\n      QObject::tr(\"Completely block access to the main domain AND all its \"\n                  \"subdomains. Format: domain:example.com (one per line)\"),\n      this);\n  blacklist_domains_info_label_->setWordWrap(true);\n  blacklist_domains_info_label_->setMinimumHeight(60);\n  blacklist_domains_info_label_->setStyleSheet(kInfoLabelStyle);\n\n  auto* blacklist_label_container = new QWidget(this);\n  auto* blacklist_label_layout = new QVBoxLayout(blacklist_label_container);\n  blacklist_label_layout->setContentsMargins(0, 0, 0, 0);\n  blacklist_label_layout->addWidget(\n      blacklist_domains_label_, 0, Qt::AlignLeft | Qt::AlignTop);\n  blacklist_label_layout->addWidget(\n      blacklist_domains_info_label_, 0, Qt::AlignLeft | Qt::AlignTop);\n\n  blacklist_domains_text_edit_ = new QTextEdit(this);\n  blacklist_domains_text_edit_->setPlainText(\n      VectorToText(settings_->BlacklistDomains()));\n  blacklist_domains_text_edit_->setSizePolicy(\n      QSizePolicy::Expanding, QSizePolicy::Fixed);\n  blacklist_domains_text_edit_->setMaximumHeight(60);\n  connect(\n      blacklist_domains_text_edit_, &QTextEdit::textChanged, this, [this]() {\n        settings_->SetBlacklistDomains(\n            TextToVector(blacklist_domains_text_edit_->toPlainText()));\n      });\n\n  routing_grid_layout_->addWidget(\n      blacklist_label_container, current_row, 0, Qt::AlignLeft | Qt::AlignTop);\n  routing_grid_layout_->addWidget(blacklist_domains_text_edit_, current_row, 1);\n  routing_grid_layout_->setRowStretch(current_row, 1);\n  current_row++;\n\n  exclude_tunnel_networks_label_ =\n      new QLabel(QObject::tr(\"Exclude tunnel networks\"), this);\n  exclude_tunnel_networks_info_label_ = new QLabel(\n      QObject::tr(\"Networks that always bypass VPN tunnel. \"\n                  \"Traffic to these networks goes directly, never through VPN\"),\n      this);\n  exclude_tunnel_networks_info_label_->setWordWrap(true);\n  exclude_tunnel_networks_info_label_->setMinimumHeight(60);\n  exclude_tunnel_networks_info_label_->setStyleSheet(kInfoLabelStyle);\n\n  auto* exclude_label_container = new QWidget(this);\n  auto* exclude_label_layout = new QVBoxLayout(exclude_label_container);\n  exclude_label_layout->setContentsMargins(0, 0, 0, 0);\n  exclude_label_layout->addWidget(\n      exclude_tunnel_networks_label_, 0, Qt::AlignLeft | Qt::AlignTop);\n  exclude_label_layout->addWidget(\n      exclude_tunnel_networks_info_label_, 0, Qt::AlignLeft | Qt::AlignTop);\n\n  exclude_tunnel_networks_text_edit_ = new QTextEdit(this);\n  exclude_tunnel_networks_text_edit_->setPlainText(\n      VectorToText(settings_->ExcludeTunnelNetworks()));\n  exclude_tunnel_networks_text_edit_->setSizePolicy(\n      QSizePolicy::Expanding, QSizePolicy::Fixed);\n  exclude_tunnel_networks_text_edit_->setMaximumHeight(60);\n  connect(exclude_tunnel_networks_text_edit_, &QTextEdit::textChanged, this,\n      [this]() {\n        settings_->SetExcludeTunnelNetworks(\n            TextToVector(exclude_tunnel_networks_text_edit_->toPlainText()));\n      });\n\n  routing_grid_layout_->addWidget(\n      exclude_label_container, current_row, 0, Qt::AlignLeft | Qt::AlignTop);\n  routing_grid_layout_->addWidget(\n      exclude_tunnel_networks_text_edit_, current_row, 1);\n  current_row++;\n\n  include_tunnel_networks_label_ =\n      new QLabel(QObject::tr(\"Include tunnel networks\"), this);\n  include_tunnel_networks_info_label_ = new QLabel(\n      QObject::tr(\"Networks that always use VPN tunnel. \"\n                  \"Traffic to these networks always goes through VPN\"),\n      this);\n  include_tunnel_networks_info_label_->setWordWrap(true);\n  include_tunnel_networks_info_label_->setMinimumHeight(60);\n  include_tunnel_networks_info_label_->setStyleSheet(kInfoLabelStyle);\n\n  auto* include_label_container = new QWidget(this);\n  auto* include_label_layout = new QVBoxLayout(include_label_container);\n  include_label_layout->setContentsMargins(0, 0, 0, 0);\n  include_label_layout->addWidget(\n      include_tunnel_networks_label_, 0, Qt::AlignLeft | Qt::AlignTop);\n  include_label_layout->addWidget(\n      include_tunnel_networks_info_label_, 0, Qt::AlignLeft | Qt::AlignTop);\n\n  include_tunnel_networks_text_edit_ = new QTextEdit(this);\n  include_tunnel_networks_text_edit_->setPlainText(\n      VectorToText(settings_->IncludeTunnelNetworks()));\n  include_tunnel_networks_text_edit_->setSizePolicy(\n      QSizePolicy::Expanding, QSizePolicy::Fixed);\n  include_tunnel_networks_text_edit_->setMaximumHeight(60);\n  include_tunnel_networks_text_edit_->setPlaceholderText(\n      QObject::tr(\"192.168.99.0/24\"));\n  connect(include_tunnel_networks_text_edit_, &QTextEdit::textChanged, this,\n      [this]() {\n        settings_->SetIncludeTunnelNetworks(\n            TextToVector(include_tunnel_networks_text_edit_->toPlainText()));\n      });\n\n  routing_grid_layout_->addWidget(\n      include_label_container, current_row, 0, Qt::AlignLeft | Qt::AlignTop);\n  routing_grid_layout_->addWidget(\n      include_tunnel_networks_text_edit_, current_row, 1);\n  current_row++;\n\n  enable_split_tunnel_label_ =\n      new QLabel(QObject::tr(\"Enable split tunnel\"), this);\n  enable_split_tunnel_info_label_ =\n      new QLabel(QObject::tr(\"When enabled, you can configure which sites use \"\n                             \"VPN and which go directly.\"),\n          this);\n  enable_split_tunnel_info_label_->setWordWrap(true);\n  enable_split_tunnel_info_label_->setMinimumHeight(60);\n  enable_split_tunnel_info_label_->setStyleSheet(kInfoLabelStyle);\n  enable_split_tunnel_info_label_->setSizePolicy(\n      QSizePolicy::Expanding, QSizePolicy::Fixed);\n  enable_split_tunnel_info_label_->setFixedHeight(40);\n\n  auto* enable_split_label_container = new QWidget(this);\n  auto* enable_split_label_layout =\n      new QVBoxLayout(enable_split_label_container);\n  enable_split_label_layout->setContentsMargins(0, 0, 0, 0);\n  enable_split_label_layout->addWidget(\n      enable_split_tunnel_label_, 0, Qt::AlignLeft | Qt::AlignTop);\n  enable_split_label_layout->addWidget(\n      enable_split_tunnel_info_label_, 0, Qt::AlignLeft | Qt::AlignTop);\n  enable_split_label_layout->addStretch(1);\n\n  enable_split_tunnel_checkbox_ = new QCheckBox(\" \", this);\n  enable_split_tunnel_checkbox_->setChecked(settings_->EnableSplitTunnel());\n  connect(enable_split_tunnel_checkbox_, &QCheckBox::toggled, this,\n      [this](bool checked) {\n        split_tunnel_mode_label_->setVisible(checked);\n        split_tunnel_mode_info_label_->setVisible(checked);\n        split_tunnel_mode_combo_box_->setVisible(checked);\n        split_tunnel_domains_label_->setVisible(checked);\n        split_tunnel_domains_info_label_->setVisible(checked);\n        split_tunnel_domains_text_edit_->setVisible(checked);\n        settings_->SetEnableSplitTunnel(checked);\n      });\n\n  routing_grid_layout_->addWidget(enable_split_label_container, current_row, 0,\n      Qt::AlignLeft | Qt::AlignTop);\n  routing_grid_layout_->addWidget(enable_split_tunnel_checkbox_, current_row, 1,\n      Qt::AlignLeft | Qt::AlignTop);\n  current_row++;\n\n  split_tunnel_mode_label_ = new QLabel(QObject::tr(\"Split tunnel mode\"), this);\n  split_tunnel_mode_info_label_ = new QLabel(\n      QObject::tr(\"Defines traffic routing strategy for split tunneling.\"),\n      this);\n  split_tunnel_mode_info_label_->setWordWrap(true);\n  split_tunnel_mode_info_label_->setSizePolicy(\n      QSizePolicy::Expanding, QSizePolicy::Fixed);\n  split_tunnel_mode_info_label_->setFixedHeight(40);\n  split_tunnel_mode_info_label_->setStyleSheet(kInfoLabelStyle);\n\n  auto* split_mode_label_container = new QWidget(this);\n  auto* split_mode_label_layout = new QVBoxLayout(split_mode_label_container);\n  split_mode_label_layout->setContentsMargins(0, 0, 0, 0);\n  split_mode_label_layout->addWidget(\n      split_tunnel_mode_label_, 0, Qt::AlignLeft | Qt::AlignTop);\n  split_mode_label_layout->addWidget(\n      split_tunnel_mode_info_label_, 0, Qt::AlignLeft | Qt::AlignTop);\n  split_mode_label_layout->addStretch(1);\n\n  split_tunnel_mode_combo_box_ = new QComboBox(this);\n  split_tunnel_mode_combo_box_->addItem(\n      QObject::tr(\"Exclude\"), SettingsModel::kSplitTunnelModeExclude);\n  split_tunnel_mode_combo_box_->addItem(\n      QObject::tr(\"Include\"), SettingsModel::kSplitTunnelModeInclude);\n  split_tunnel_mode_combo_box_->setCurrentText(\n      settings_->SplitTunnelMode() == SettingsModel::kSplitTunnelModeInclude\n          ? QObject::tr(\"Include\")\n          : QObject::tr(\"Exclude\"));\n\n  connect(split_tunnel_mode_combo_box_, &QComboBox::currentTextChanged, this,\n      [this](const QString& mode) {\n        if (mode == QObject::tr(\"Include\") ||\n            mode == SettingsModel::kSplitTunnelModeInclude) {\n          settings_->SetSplitTunnelMode(SettingsModel::kSplitTunnelModeInclude);\n          split_tunnel_domains_label_->setText(\n              QObject::tr(\"Domains to route through VPN\"));\n          split_tunnel_domains_info_label_->setText(\n              QObject::tr(\"List domains that should use VPN tunnel. \"\n                          \"Only these domains will go through VPN, \"\n                          \"all other traffic bypasses VPN\"));\n        } else {\n          settings_->SetSplitTunnelMode(SettingsModel::kSplitTunnelModeExclude);\n          split_tunnel_domains_label_->setText(\n              QObject::tr(\"Domains to bypass VPN\"));\n\n          split_tunnel_domains_info_label_->setText(\n              QObject::tr(\"List domains that should bypass VPN tunnel. \"\n                          \"These domains will go directly, \"\n                          \"all other traffic uses VPN\"));\n        }\n      });\n\n  routing_grid_layout_->addWidget(\n      split_mode_label_container, current_row, 0, Qt::AlignLeft | Qt::AlignTop);\n  routing_grid_layout_->addWidget(split_tunnel_mode_combo_box_, current_row, 1,\n      Qt::AlignLeft | Qt::AlignTop);\n  current_row++;\n\n  split_tunnel_domains_label_ = new QLabel(this);\n  if (settings_->SplitTunnelMode() == SettingsModel::kSplitTunnelModeInclude) {\n    split_tunnel_domains_label_->setText(\n        QObject::tr(\"Domains to route through VPN\"));\n  } else {\n    split_tunnel_domains_label_->setText(QObject::tr(\"Domains to bypass VPN\"));\n  }\n\n  split_tunnel_domains_info_label_ = new QLabel(this);\n  if (settings_->SplitTunnelMode() == SettingsModel::kSplitTunnelModeInclude) {\n    split_tunnel_domains_info_label_->setText(QObject::tr(\n        \"List domains that should use VPN tunnel. Only these domains will go \"\n        \"through VPN, all other traffic bypasses VPN\"));\n  } else {\n    split_tunnel_domains_info_label_->setText(\n        QObject::tr(\"List domains that should bypass VPN tunnel. These domains \"\n                    \"will go directly, all other traffic uses VPN\"));\n  }\n  split_tunnel_domains_info_label_->setWordWrap(true);\n  split_tunnel_domains_info_label_->setStyleSheet(kInfoLabelStyle);\n\n  auto* split_domains_label_container = new QWidget(this);\n  auto* split_domains_label_layout =\n      new QVBoxLayout(split_domains_label_container);\n  split_domains_label_layout->setContentsMargins(0, 0, 0, 0);\n  split_domains_label_layout->addWidget(\n      split_tunnel_domains_label_, 0, Qt::AlignLeft | Qt::AlignTop);\n  split_domains_label_layout->addWidget(\n      split_tunnel_domains_info_label_, 0, Qt::AlignLeft | Qt::AlignTop);\n\n  split_tunnel_domains_text_edit_ = new QTextEdit(this);\n  split_tunnel_domains_text_edit_->setPlainText(\n      VectorToText(settings_->SplitTunnelDomains()));\n  split_tunnel_domains_text_edit_->setSizePolicy(\n      QSizePolicy::Expanding, QSizePolicy::Expanding);\n  split_tunnel_domains_text_edit_->setMinimumHeight(80);\n  split_tunnel_domains_text_edit_->setPlaceholderText(\n      QObject::tr(\"domain:com\\ndomain:another.com\\ndomain:sub.domainname.com\"));\n  connect(\n      split_tunnel_domains_text_edit_, &QTextEdit::textChanged, this, [this]() {\n        settings_->SetSplitTunnelDomains(\n            TextToVector(split_tunnel_domains_text_edit_->toPlainText()));\n      });\n\n  routing_grid_layout_->addWidget(split_domains_label_container, current_row, 0,\n      Qt::AlignLeft | Qt::AlignTop);\n  routing_grid_layout_->addWidget(\n      split_tunnel_domains_text_edit_, current_row, 1);\n  routing_grid_layout_->setRowStretch(current_row, 1);\n  current_row++;\n\n  bool split_enabled = settings_->EnableSplitTunnel();\n  split_tunnel_mode_label_->setVisible(split_enabled);\n  split_tunnel_mode_info_label_->setVisible(split_enabled);\n  split_tunnel_mode_combo_box_->setVisible(split_enabled);\n  split_tunnel_domains_label_->setVisible(split_enabled);\n  split_tunnel_domains_info_label_->setVisible(split_enabled);\n  split_tunnel_domains_text_edit_->setVisible(split_enabled);\n\n  routing_layout->addLayout(routing_grid_layout_);\n\n  routing_layout->addStretch(1);\n\n  routing_scroll_area->setWidget(routing_content_widget);\n  main_routing_layout->addWidget(routing_scroll_area);\n\n  tab_widget_->addTab(routing_tab_, QObject::tr(\"Routing\"));\n\n  // ==================== About Tab ====================\n  about_tab_ = new QWidget();\n  auto* main_about_layout = new QVBoxLayout(about_tab_);\n  main_about_layout->setContentsMargins(0, 0, 0, 0);\n\n  auto* about_scroll_area = new QScrollArea(this);\n  about_scroll_area->setWidgetResizable(true);\n  about_scroll_area->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);\n  about_scroll_area->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);\n  about_scroll_area->setFrameShape(QFrame::NoFrame);\n\n  auto* about_content_widget = new QWidget();\n  auto* about_layout = new QVBoxLayout(about_content_widget);\n  about_layout->setContentsMargins(5, 5, 5, 5);\n  about_layout->setSpacing(10);\n\n  auto* fptn_label = new QLabel(\"FPTN\", this);\n  fptn_label->setAlignment(Qt::AlignCenter);\n  about_layout->addWidget(fptn_label);\n\n  version_label_ = new QLabel(\n      QString(QObject::tr(\"Version\") + \": %1\").arg(FPTN_VERSION), this);\n  version_label_->setAlignment(Qt::AlignCenter);\n  about_layout->addWidget(version_label_);\n\n  project_info_label_ = new QLabel(QObject::tr(\"FPTN_DESCRIPTION\"), this);\n  project_info_label_->setWordWrap(true);\n  project_info_label_->setAlignment(Qt::AlignJustify);\n  about_layout->addWidget(project_info_label_);\n\n  website_link_label_ =\n      new QLabel(QObject::tr(\"FPTN_WEBSITE_DESCRIPTION\"), this);\n  website_link_label_->setOpenExternalLinks(true);\n  about_layout->addWidget(website_link_label_);\n\n  telegram_group_label_ =\n      new QLabel(QObject::tr(\"FPTN_TELEGRAM_DESCRIPTION\"), this);\n  telegram_group_label_->setTextFormat(Qt::RichText);\n  telegram_group_label_->setTextInteractionFlags(Qt::TextBrowserInteraction);\n  telegram_group_label_->setOpenExternalLinks(true);\n  about_layout->addWidget(telegram_group_label_);\n\n  boosty_link_label_ =\n      new QLabel(QObject::tr(\"Support the project on\") +\n                     \" <a href=\\\"https://boosty.to/fptn\\\">Boosty</a>\",\n          this);\n  boosty_link_label_->setOpenExternalLinks(true);\n  boosty_link_label_->setAlignment(Qt::AlignLeft);\n  about_layout->addWidget(boosty_link_label_);\n\n  sponsors_label_ = new QLabel(QObject::tr(\"Project Sponsors\"), this);\n  sponsors_label_->setAlignment(Qt::AlignLeft);\n  about_layout->addWidget(sponsors_label_);\n\n  const QString sponsors_list =\n      \"  - Brebor<br>\"\n      \"  - miklefox<br>\"\n      \"  - usrbb<br>\"\n      \"  - Secret_Agent_001<br>\"\n      \"  - ragdollmaster<br>\"\n      \"  - slimefrozik<br>\"\n      \"  - HooLigaN<br>\"\n      \"  - Dima<br>\"\n      \"  - Kori<br>\"\n      \"  - DrowASD<br>\"\n      \"  - GΣG 5952<br>\"\n      \"  - NikVas<br>\"\n      \"  - Сергей<br>\"\n      \"  - Frizgy<br>\"\n      \"  - Tired Smi1e<br>\"\n      \"  - Teya Aster<br>\"\n      \"  - loftynite<br>\"\n      \"  - vlz78<br>\"\n      \"  - Erranted<br>\"\n      \"  - Kotishqua<br>\"\n      \"  - Neiros<br>\"\n      \"  - Кабан из AYAYANII<br>\"\n      \"  - Stasyan<br>\"\n      \"  - Daptepik<br>\"\n      \"  - Cu6ic<br>\"\n      \"  - FC<br>\"\n      \"  - Temikin<br>\"\n      \"  - Azeasy<br>\"\n      \"  - NekoDark<br>\"\n      \"  - Alin Zoberg<br>\"\n      \"  - zsergey<br>\"\n      \"  - OlegPaRe<br>\"\n      \"  - Norelax<br>\"\n      \"  - Alligator<br>\"\n      \"  - vblll<br>\"\n      \"  - Ayuemin<br>\"\n      \"  - Semchuk<br>\"\n      \"  - Barzas153<br>\"\n      \"  - machinefactor<br>\"\n      \"  - mahovmm<br>\"\n      \"  - KOTleta<br>\"\n      \"  - Arelost<br>\"\n      \"  - Хмурый<br>\"\n      \"  - 弐式炎雷<br>\"\n      \"  - ☸️Bhagos☸️<br>\"\n      \"  - Pavel<br>\"\n      \"  - zoomzoom<br>\"\n      \"  - Kovalskij<br>\"\n      \"  - Yumarictx<br>\"\n      \"  - ББ<br>\"\n      \"  - huko<br>\"\n      \"  - @UNBREAKABLE189<br>\"\n      \"  - TheChosenOne<br>\";\n\n  sponsors_names_label_ = new QLabel(sponsors_list, this);\n  sponsors_names_label_->setAlignment(Qt::AlignLeft);\n  sponsors_names_label_->setTextInteractionFlags(Qt::TextSelectableByMouse);\n  sponsors_names_label_->setWordWrap(true);\n  about_layout->addWidget(sponsors_names_label_);\n\n  about_layout->addStretch(1);\n\n  about_scroll_area->setWidget(about_content_widget);\n  main_about_layout->addWidget(about_scroll_area);\n\n  tab_widget_->addTab(about_tab_, QObject::tr(\"About\"));\n\n  // Setup tabs\n  auto* main_layout = new QVBoxLayout(this);\n  main_layout->setContentsMargins(5, 5, 5, 5);\n  main_layout->addWidget(tab_widget_);\n\n  auto* button_layout = new QHBoxLayout();\n  button_layout->addStretch();\n\n  load_new_token_button_ =\n      new QPushButton(\"  \" + QObject::tr(\"Add token\") + \"  \", this);\n  connect(load_new_token_button_, &QPushButton::clicked, this,\n      &SettingsWidget::onLoadNewConfig);\n  button_layout->addWidget(load_new_token_button_);\n\n  exit_button_ = new QPushButton(\"  \" + QObject::tr(\"Close\") + \"  \", this);\n  connect(exit_button_, &QPushButton::clicked, this, &SettingsWidget::onExit);\n  button_layout->addWidget(exit_button_);\n\n  main_layout->addLayout(button_layout);\n\n  setLayout(main_layout);\n\n  const QVector<ServiceConfig>& services = settings_->Services();\n  if (server_table_) {\n    server_table_->setRowCount(services.size());\n    for (int i = 0; i < services.size(); ++i) {\n      const ServiceConfig& service = services[i];\n      server_table_->setItem(i, 0, new QTableWidgetItem(service.service_name));\n      server_table_->setItem(i, 1, new QTableWidgetItem(service.username));\n\n      QString servers_text_list = \"\";\n      for (const auto& s : service.servers) {\n        servers_text_list += QString(\"%1\\n\").arg(s.name);\n      }\n      auto* item = new QTableWidgetItem(servers_text_list);\n      item->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);\n      item->setFlags(item->flags() | Qt::ItemIsEnabled);\n      item->setData(Qt::DisplayRole, servers_text_list);\n      server_table_->setItem(i, 2, item);\n\n      auto* delete_button = new QPushButton(QObject::tr(\"X\"), this);\n      delete_button->setFixedSize(24, 24);\n      delete_button->setStyleSheet(R\"(\n        QPushButton {\n            background-color: #444444;\n            color: white;\n            border: none;\n            border-radius: 12px;\n            font-weight: bold;\n            padding: 0px;\n        }\n        QPushButton:hover {\n            background-color: #cc0000;\n        }\n        QPushButton:pressed {\n            background-color: #990000;\n        }\n    )\");\n      delete_button->setToolTip(QObject::tr(\"Delete\"));\n      connect(delete_button, &QPushButton::clicked,\n          [this, i]() { onRemoveServer(i); });\n\n      auto* button_container = new QWidget(this);\n      auto* action_layout = new QHBoxLayout(button_container);\n      action_layout->setContentsMargins(0, 0, 0, 0);\n      action_layout->setAlignment(Qt::AlignCenter);\n      action_layout->addWidget(delete_button);\n      server_table_->setCellWidget(i, 3, button_container);\n    }\n  }\n\n  onBypassMethodChanged(bypass_method_combo_box_->currentText());\n\n  UpdateSniFilesList();\n\n  resize(680, 500);\n  if (tab_widget_) {\n    tab_widget_->setCurrentIndex(0);\n  }\n  UpdateServerTableVisibility();\n}\n\n// NOLINTNEXTLINE(bugprone-branch-clone)\nvoid SettingsWidget::onExit() {\n  settings_->SetUsingNetworkInterface(interface_combo_box_->currentText());\n  settings_->SetLanguage(language_combo_box_->currentText());\n  settings_->SetGatewayIp(gateway_line_edit_->text());\n  settings_->SetSNI(sni_line_edit_->text());\n\n  const QString current_method = bypass_method_combo_box_->currentText();\n\n  if (current_method == QObject::tr(\"OBFUSCATION\") ||\n      current_method == SettingsModel::kBypassMethodObfuscation) {\n    settings_->SetBypassMethod(SettingsModel::kBypassMethodObfuscation);\n  }\n  /* Chrome */\n  else if (current_method == QObject::tr(\"SNI-REALITY (Chrome 147)\") ||\n           current_method == SettingsModel::kBypassMethodSniRealityChrome147) {\n    settings_->SetBypassMethod(SettingsModel::kBypassMethodSniRealityChrome147);\n  } else if (current_method == QObject::tr(\"SNI-REALITY (Chrome 146)\") ||\n             current_method ==\n                 SettingsModel::kBypassMethodSniRealityChrome146) {\n    settings_->SetBypassMethod(SettingsModel::kBypassMethodSniRealityChrome146);\n  } else if (current_method == QObject::tr(\"SNI-REALITY (Chrome 145)\") ||\n             current_method ==\n                 SettingsModel::kBypassMethodSniRealityChrome145) {\n    settings_->SetBypassMethod(SettingsModel::kBypassMethodSniRealityChrome145);\n  }\n  /* Firefox */\n  else if (current_method == QObject::tr(\"SNI-REALITY (Firefox 149)\") ||\n           current_method == SettingsModel::kBypassMethodSniRealityFirefox149) {\n    settings_->SetBypassMethod(\n        SettingsModel::kBypassMethodSniRealityFirefox149);\n  }\n  /* Yandex */\n  else if (current_method == QObject::tr(\"SNI-REALITY (Yandex 26)\") ||\n           current_method == SettingsModel::kBypassMethodSniRealityYandex26) {\n    settings_->SetBypassMethod(SettingsModel::kBypassMethodSniRealityYandex26);\n  }\n  /* default\n  else if (current_method == QObject::tr(\"SNI-REALITY (Yandex 25)\") ||\n             current_method == SettingsModel::kBypassMethodSniRealityYandex25) {\n    settings_->SetBypassMethod(SettingsModel::kBypassMethodSniRealityYandex25);\n  }\n  */\n  else if (current_method == QObject::tr(\"SNI-REALITY (Yandex 24)\") ||\n           current_method == SettingsModel::kBypassMethodSniRealityYandex24) {\n    settings_->SetBypassMethod(SettingsModel::kBypassMethodSniRealityYandex24);\n  }\n\n  /* Safari */\n  else if (current_method == QObject::tr(\"SNI-REALITY (Safari 26)\") ||\n           current_method == SettingsModel::kBypassMethodSniRealitySafari26) {\n    settings_->SetBypassMethod(SettingsModel::kBypassMethodSniRealitySafari26);\n  }\n  /* Default */\n  else {\n    settings_->SetBypassMethod(SettingsModel::kBypassMethodSniRealityYandex25);\n  }\n\n  if (!settings_->Save()) {\n    QMessageBox::critical(this, QObject::tr(\"Save Failed\"),\n        QObject::tr(\"An error occurred while saving the data.\"));\n  }\n  this->close();\n}\n\nvoid SettingsWidget::onLoadNewConfig() {\n  TokenDialog dialog(this);\n  dialog.exec();\n  const QString token = dialog.Token();\n\n  // show on top\n  show();\n  activateWindow();\n  raise();\n\n  if (!token.isEmpty()) {\n    try {\n      ServiceConfig config = settings_->ParseToken(token);\n      int exists_index = settings_->GetExistServiceIndex(config.service_name);\n      if (exists_index != -1 && server_table_ != nullptr) {\n        // remove previous settings\n        settings_->RemoveServer(exists_index);\n        server_table_->removeRow(exists_index);\n      }\n      settings_->AddService(config);\n      const bool saving_status = settings_->Save();\n      if (saving_status && server_table_ != nullptr) {\n        // Insert a new row into the server table\n        const int new_row = server_table_->rowCount();\n        server_table_->insertRow(new_row);\n\n        server_table_->setItem(\n            new_row, 0, new QTableWidgetItem(config.service_name));\n        server_table_->setItem(\n            new_row, 1, new QTableWidgetItem(config.username));\n\n        QString servers_text_list = \"\";\n        for (const auto& s : config.servers) {\n          servers_text_list += QString(\"%1\\n\").arg(s.name);\n        }\n\n        for (const auto& s : config.censored_zone_servers) {\n          servers_text_list += QString(\"* %1\\n\").arg(s.name);\n        }\n\n        auto* item = new QTableWidgetItem(servers_text_list);\n        item->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);\n        item->setFlags(item->flags() | Qt::ItemIsEnabled);\n        item->setData(Qt::DisplayRole, servers_text_list);\n        server_table_->setItem(new_row, 2, item);\n\n        auto* delete_button = new QPushButton(QObject::tr(\"X\"), this);\n        delete_button->setFixedSize(24, 24);\n        delete_button->setStyleSheet(R\"(\n            QPushButton {\n                background-color: #444444;\n                color: white;\n                border: none;\n                border-radius: 12px;\n                font-weight: bold;\n                padding: 0px;\n            }\n            QPushButton:hover {\n                background-color: #cc0000;\n            }\n            QPushButton:pressed {\n                background-color: #990000;\n            }\n        )\");\n        delete_button->setToolTip(QObject::tr(\"Delete\"));\n\n        auto* button_container = new QWidget();\n        auto* button_layout = new QHBoxLayout(button_container);\n        button_layout->setContentsMargins(0, 0, 0, 0);\n        button_layout->setAlignment(Qt::AlignCenter);\n        button_layout->addWidget(delete_button);\n        server_table_->setCellWidget(new_row, 3, button_container);\n\n        QMessageBox::information(this, QObject::tr(\"Save Successful\"),\n            QObject::tr(\"Data has been successfully saved.\"));\n      } else {\n        QMessageBox::critical(this, QObject::tr(\"Save Failed\"),\n            QObject::tr(\"An error occurred while saving the data.\"));\n      }\n    } catch (const std::exception& err) {\n      QMessageBox::critical(this, QObject::tr(\"Error!\"), err.what());\n    }\n  }\n  UpdateServerTableVisibility();\n}\n\nvoid SettingsWidget::onRemoveServer(int row) {\n  if (row >= 0 && row < server_table_->rowCount() && server_table_ != nullptr) {\n    server_table_->removeRow(row);\n    settings_->RemoveServer(row);\n    QMessageBox::information(this, QObject::tr(\"Delete Successful\"),\n        QObject::tr(\"The data has been successfully removed\"));\n  }\n  UpdateServerTableVisibility();\n}\n\nvoid SettingsWidget::closeEvent(QCloseEvent* event) {\n  onExit();\n  event->accept();  // Accept the event to proceed with the closing\n}\n\nvoid SettingsWidget::onLanguageChanged(const QString&) {\n  // set language\n  settings_->SetLanguage(language_combo_box_->currentText());\n  fptn::gui::SetTranslation(settings_->LanguageCode());\n  if (!settings_->Save()) {\n    QMessageBox::critical(this, QObject::tr(\"Save Failed\"),\n        QObject::tr(\"An error occurred while saving the data.\"));\n  }\n\n  setWindowTitle(QObject::tr(\"Settings\"));\n  if (tab_widget_) {\n    tab_widget_->setTabText(0, QObject::tr(\"Settings\"));\n    tab_widget_->setTabText(1, QObject::tr(\"Routing\"));\n    tab_widget_->setTabText(2, QObject::tr(\"About\"));\n  }\n  if (language_label_) {\n    language_label_->setText(QObject::tr(\"Language\"));\n  }\n  if (interface_label_) {\n    interface_label_->setText(QObject::tr(\"Network Interface (adapter)\"));\n  }\n  if (gateway_label_) {\n    gateway_label_->setText(\n        QObject::tr(\"Gateway IP Address (typically your router's address)\"));\n  }\n  if (server_table_) {\n    server_table_->setHorizontalHeaderLabels({QObject::tr(\"Name\"),\n        QObject::tr(\"User\"), QObject::tr(\"Servers\"), QObject::tr(\"Action\")});\n  }\n  if (load_new_token_button_) {\n    load_new_token_button_->setText(\"  \" + QObject::tr(\"Add token\") + \"  \");\n  }\n  if (exit_button_) {\n    exit_button_->setText(\"  \" + QObject::tr(\"Close\") + \"  \");\n  }\n  if (gateway_auto_checkbox_) {\n    gateway_auto_checkbox_->setText(QObject::tr(\"Auto\"));\n  }\n  // AUTOSTART (show only for Linux)\n#ifdef __linux__\n  if (autostart_label_) {\n    autostart_label_->setText(QObject::tr(\"Autostart\"));\n  }\n#endif\n\n  // Bypass blocking\n  if (bypass_method_label_) {\n    bypass_method_label_->setText(QObject::tr(\"Bypass blocking method\"));\n  }\n\n  const auto current_method = settings_->BypassMethod();\n  if (bypass_method_combo_box_) {\n    bypass_method_combo_box_->clear();\n    // bypass_method_combo_box_->addItem(\n    //     QObject::tr(\"SNI\"), SettingsModel::kBypassMethodSni);\n    bypass_method_combo_box_->addItem(\n        QObject::tr(\"OBFUSCATION\"), SettingsModel::kBypassMethodObfuscation);\n    // bypass_method_combo_box_->addItem(QObject::tr(\"SNI-REALITY (Generic)\"),\n    //     SettingsModel::kBypassMethodSniReality);\n    /* Chrome */\n    bypass_method_combo_box_->addItem(QObject::tr(\"SNI-REALITY (Chrome 147)\"),\n        SettingsModel::kBypassMethodSniRealityChrome147);\n    bypass_method_combo_box_->addItem(QObject::tr(\"SNI-REALITY (Chrome 146)\"),\n        SettingsModel::kBypassMethodSniRealityChrome146);\n    bypass_method_combo_box_->addItem(QObject::tr(\"SNI-REALITY (Chrome 145)\"),\n        SettingsModel::kBypassMethodSniRealityChrome145);\n    /* Firefox */\n    bypass_method_combo_box_->addItem(QObject::tr(\"SNI-REALITY (Firefox 149)\"),\n        SettingsModel::kBypassMethodSniRealityFirefox149);\n    /* Yandex */\n    bypass_method_combo_box_->addItem(QObject::tr(\"SNI-REALITY (Yandex 26)\"),\n        SettingsModel::kBypassMethodSniRealityYandex26);\n    bypass_method_combo_box_->addItem(QObject::tr(\"SNI-REALITY (Yandex 25)\"),\n        SettingsModel::kBypassMethodSniRealityYandex25);\n    bypass_method_combo_box_->addItem(QObject::tr(\"SNI-REALITY (Yandex 24)\"),\n        SettingsModel::kBypassMethodSniRealityYandex24);\n    /* Safari */\n    bypass_method_combo_box_->addItem(QObject::tr(\"SNI-REALITY (Safari 26)\"),\n        SettingsModel::kBypassMethodSniRealitySafari26);\n\n    /* Chrome */\n    if (current_method == SettingsModel::kBypassMethodSniRealityChrome147) {\n      bypass_method_combo_box_->setCurrentText(\n          QObject::tr(\"SNI-REALITY (Chrome 147)\"));\n    } else if (current_method ==\n               SettingsModel::kBypassMethodSniRealityChrome146) {\n      bypass_method_combo_box_->setCurrentText(\n          QObject::tr(\"SNI-REALITY (Chrome 146)\"));\n    } else if (current_method ==\n               SettingsModel::kBypassMethodSniRealityChrome145) {\n      bypass_method_combo_box_->setCurrentText(\n          QObject::tr(\"SNI-REALITY (Chrome 145)\"));\n    }\n    /* Firefox */\n    else if (current_method ==\n             SettingsModel::kBypassMethodSniRealityFirefox149) {\n      bypass_method_combo_box_->setCurrentText(\n          QObject::tr(\"SNI-REALITY (Firefox 149)\"));\n    }\n    /* Yandex */\n    else if (current_method == SettingsModel::kBypassMethodSniRealityYandex26) {\n      bypass_method_combo_box_->setCurrentText(\n          QObject::tr(\"SNI-REALITY (Yandex 26)\"));\n    } else if (\n        current_method ==\n        SettingsModel::\n            kBypassMethodSniRealityYandex25) {  // NOLINT(bugprone-branch-clone)\n      bypass_method_combo_box_->setCurrentText(\n          QObject::tr(\"SNI-REALITY (Yandex 25)\"));\n    } else if (current_method ==\n               SettingsModel::kBypassMethodSniRealityYandex24) {\n      bypass_method_combo_box_->setCurrentText(\n          QObject::tr(\"SNI-REALITY (Yandex 24)\"));\n    }\n    /* Safari */\n    else if (current_method == SettingsModel::kBypassMethodSniRealitySafari26) {\n      bypass_method_combo_box_->setCurrentText(\n          QObject::tr(\"SNI-REALITY (Safari 26)\"));\n    }\n    /* Default */\n    else {\n      bypass_method_combo_box_->setCurrentText(\n          QObject::tr(\"SNI-REALITY (Yandex 25)\"));\n    }\n  }\n\n  if (sni_label_) {\n    if (settings_->BypassMethod() == SettingsModel::kBypassMethodSniReality) {\n      sni_label_->setText(QObject::tr(\"Fake domain to bypass blocking\"));\n    }\n  }\n  if (sni_autoscan_button_) {\n    sni_autoscan_button_->setText(QObject::tr(\"Autoscan SNI\"));\n  }\n  if (sni_import_button_) {\n    sni_import_button_->setText(QObject::tr(\"Import SNI file\"));\n  }\n\n  // Routing tab\n  if (enable_dns_management_label_) {\n    enable_dns_management_label_->setText(\n        QObject::tr(\"Enable advanced DNS management\"));\n  }\n  if (enable_dns_management_info_label_) {\n    enable_dns_management_info_label_->setText(QObject::tr(\n        \"Enables advanced DNS configuration to prevent leaks. \"\n        \"Recommended when using split tunneling. Use with caution!\"));\n  }\n  if (blacklist_domains_label_) {\n    blacklist_domains_label_->setText(QObject::tr(\"Blacklist domains\"));\n  }\n  if (blacklist_domains_info_label_) {\n    blacklist_domains_info_label_->setText(\n        QObject::tr(\"Completely block access to the main domain AND all its \"\n                    \"subdomains. Format: domain:example.com (one per line)\"));\n  }\n  if (blacklist_domains_text_edit_) {\n    blacklist_domains_text_edit_->setPlaceholderText(\n        QObject::tr(\"domain:example.com\\ndomain:another.com\"));\n  }\n\n  if (exclude_tunnel_networks_label_) {\n    exclude_tunnel_networks_label_->setText(\n        QObject::tr(\"Exclude tunnel networks\"));\n  }\n  if (exclude_tunnel_networks_info_label_) {\n    exclude_tunnel_networks_info_label_->setText(QObject::tr(\n        \"Networks that always bypass VPN tunnel. \"\n        \"Traffic to these networks goes directly, never through VPN\"));\n  }\n\n  if (include_tunnel_networks_label_) {\n    include_tunnel_networks_label_->setText(\n        QObject::tr(\"Include tunnel networks\"));\n  }\n  if (include_tunnel_networks_info_label_) {\n    include_tunnel_networks_info_label_->setText(\n        QObject::tr(\"Networks that always use VPN tunnel. \"\n                    \"Traffic to these networks always goes through VPN\"));\n  }\n\n  if (enable_split_tunnel_label_) {\n    enable_split_tunnel_label_->setText(QObject::tr(\"Enable split tunnel\"));\n  }\n  if (enable_split_tunnel_info_label_) {\n    enable_split_tunnel_info_label_->setText(\n        QObject::tr(\"When enabled, you can configure which sites use VPN and \"\n                    \"which go directly.\"));\n  }\n\n  if (split_tunnel_mode_label_) {\n    split_tunnel_mode_label_->setText(QObject::tr(\"Split tunnel mode\"));\n  }\n  if (split_tunnel_mode_info_label_) {\n    split_tunnel_mode_info_label_->setText(\n        QObject::tr(\"Defines traffic routing strategy for split tunneling.\"));\n  }\n  if (split_tunnel_mode_combo_box_) {\n    QString current_mode = split_tunnel_mode_combo_box_->currentText();\n    split_tunnel_mode_combo_box_->clear();\n    split_tunnel_mode_combo_box_->addItem(\n        QObject::tr(\"Exclude\"), SettingsModel::kSplitTunnelModeExclude);\n    split_tunnel_mode_combo_box_->addItem(\n        QObject::tr(\"Include\"), SettingsModel::kSplitTunnelModeInclude);\n\n    if (current_mode == QObject::tr(\"Include\") ||\n        current_mode == SettingsModel::kSplitTunnelModeInclude) {\n      split_tunnel_mode_combo_box_->setCurrentText(QObject::tr(\"Include\"));\n    } else {\n      split_tunnel_mode_combo_box_->setCurrentText(QObject::tr(\"Exclude\"));\n    }\n  }\n\n  if (split_tunnel_domains_label_ && split_tunnel_domains_info_label_) {\n    if (settings_->SplitTunnelMode() ==\n        SettingsModel::kSplitTunnelModeInclude) {\n      split_tunnel_domains_label_->setText(\n          QObject::tr(\"Domains to route through VPN\"));\n      split_tunnel_domains_info_label_->setText(QObject::tr(\n          \"List domains that should use VPN tunnel. Only these domains will \"\n          \"go through VPN, all other traffic bypasses VPN\"));\n    } else {\n      split_tunnel_domains_label_->setText(\n          QObject::tr(\"Domains to bypass VPN\"));\n      split_tunnel_domains_info_label_->setText(\n          QObject::tr(\"List domains that should bypass VPN tunnel. These \"\n                      \"domains will go directly, all other traffic uses VPN\"));\n    }\n  }\n  if (split_tunnel_domains_text_edit_) {\n    split_tunnel_domains_text_edit_->setPlaceholderText(QObject::tr(\n        \"domain:com\\ndomain:another.com\\ndomain:sub.domainname.com\"));\n  }\n\n  // about\n  if (version_label_) {\n    version_label_->setText(\n        QString(QObject::tr(\"Version\") + \": %1\").arg(FPTN_VERSION));\n  }\n  if (project_info_label_) {\n    project_info_label_->setText(QObject::tr(\"FPTN_DESCRIPTION\"));\n  }\n  if (website_link_label_) {\n    website_link_label_->setText(QObject::tr(\"FPTN_WEBSITE_DESCRIPTION\"));\n  }\n  if (telegram_group_label_) {\n    telegram_group_label_->setText(QObject::tr(\"FPTN_TELEGRAM_DESCRIPTION\"));\n  }\n  // sponsors section\n  if (boosty_link_label_) {\n    boosty_link_label_->setText(\n        QObject::tr(\"Support the project on\") +\n        \" <a href=\\\"https://boosty.to/fptn\\\">Boosty</a>\");\n  }\n  if (sponsors_label_) {\n    sponsors_label_->setText(QObject::tr(\"Project Sponsors\"));\n  }\n}\n\nvoid SettingsWidget::onInterfaceChanged(const QString&) {\n  settings_->SetUsingNetworkInterface(interface_combo_box_->currentText());\n  if (!settings_->Save()) {\n    QMessageBox::critical(this, QObject::tr(\"Save Failed\"),\n        QObject::tr(\"An error occurred while saving the data.\"));\n  }\n}\n\nvoid SettingsWidget::onAutostartChanged(bool checked) {\n  if (checked) {\n    fptn::gui::autostart::enable();\n    settings_->SetAutostart(true);\n  } else {\n    fptn::gui::autostart::disable();\n    settings_->SetAutostart(false);\n  }\n}\n\nvoid SettingsWidget::onAutoGatewayChanged(bool checked) {\n  if (checked) {\n    gateway_line_edit_->setDisabled(true);\n    gateway_line_edit_->setText(\"\");\n    settings_->SetGatewayIp(\"auto\");\n  } else {\n    gateway_line_edit_->setEnabled(true);\n  }\n}\nvoid SettingsWidget::onBypassMethodChanged(const QString& method) {\n  const bool is_reality_mode =\n      /* Chrome */\n      method == QObject::tr(\"SNI-REALITY (Chrome 147)\") ||\n      method == SettingsModel::kBypassMethodSniRealityChrome147 ||\n      method == QObject::tr(\"SNI-REALITY (Chrome 146)\") ||\n      method == SettingsModel::kBypassMethodSniRealityChrome146 ||\n      method == QObject::tr(\"SNI-REALITY (Chrome 145)\") ||\n      method == SettingsModel::kBypassMethodSniRealityChrome145 ||\n      /* Firefox */\n      method == QObject::tr(\"SNI-REALITY (Firefox 149)\") ||\n      /* Yandex */\n      method == SettingsModel::kBypassMethodSniRealityFirefox149 ||\n      method == QObject::tr(\"SNI-REALITY (Yandex 26)\") ||\n      method == SettingsModel::kBypassMethodSniRealityYandex26 ||\n      method == QObject::tr(\"SNI-REALITY (Yandex 25)\") ||\n      method == SettingsModel::kBypassMethodSniRealityYandex25 ||\n      method == QObject::tr(\"SNI-REALITY (Yandex 24)\") ||\n      method == SettingsModel::kBypassMethodSniRealityYandex24 ||\n      /* Safari */\n      method == QObject::tr(\"SNI-REALITY (Safari 26)\") ||\n      method == SettingsModel::kBypassMethodSniRealitySafari26;\n\n  // Show/hide SNI field\n  sni_label_->setVisible(is_reality_mode);\n  sni_line_edit_->setVisible(is_reality_mode);\n\n  // Show/hide SNI files section based on mode\n  sni_files_list_widget_->setVisible(is_reality_mode);\n  sni_autoscan_button_->setVisible(is_reality_mode);\n  sni_import_button_->setVisible(is_reality_mode);\n\n  if (is_reality_mode) {\n    grid_layout_->addWidget(sni_label_, 5, 0, Qt::AlignLeft | Qt::AlignVCenter);\n    grid_layout_->addWidget(sni_line_edit_, 5, 1, 1, 2);\n    grid_layout_->addLayout(sni_buttons_layout_, 7, 0);\n    grid_layout_->addWidget(sni_files_list_widget_, 7, 1, 1, 2);\n  } else {\n    grid_layout_->removeWidget(sni_label_);\n    grid_layout_->removeWidget(sni_line_edit_);\n    grid_layout_->removeItem(sni_buttons_layout_);\n    grid_layout_->removeWidget(sni_files_list_widget_);\n  }\n\n  // Set the bypass method\n  if (method == QObject::tr(\"OBFUSCATION\") ||\n      method == SettingsModel::kBypassMethodObfuscation) {\n    settings_->SetBypassMethod(SettingsModel::kBypassMethodObfuscation);\n  }\n  /* Chrome */\n  else if (method == QObject::tr(\"SNI-REALITY (Chrome 147)\") ||\n           method == SettingsModel::kBypassMethodSniRealityChrome147) {\n    settings_->SetBypassMethod(SettingsModel::kBypassMethodSniRealityChrome147);\n  } else if (method == QObject::tr(\"SNI-REALITY (Chrome 146)\") ||\n             method == SettingsModel::kBypassMethodSniRealityChrome146) {\n    settings_->SetBypassMethod(SettingsModel::kBypassMethodSniRealityChrome146);\n  } else if (method == QObject::tr(\"SNI-REALITY (Chrome 145)\") ||\n             method == SettingsModel::kBypassMethodSniRealityChrome145) {\n    settings_->SetBypassMethod(SettingsModel::kBypassMethodSniRealityChrome145);\n  }\n  /* Firefox */\n  else if (method == QObject::tr(\"SNI-REALITY (Firefox 149)\") ||\n           method == SettingsModel::kBypassMethodSniRealityFirefox149) {\n    settings_->SetBypassMethod(\n        SettingsModel::kBypassMethodSniRealityFirefox149);\n  }\n  /* Yandex */\n  else if (method == QObject::tr(\"SNI-REALITY (Yandex 26)\") ||\n           method == SettingsModel::kBypassMethodSniRealityYandex26) {\n    settings_->SetBypassMethod(SettingsModel::kBypassMethodSniRealityYandex26);\n  }\n  /*\n   * default\n  else if (method == QObject::tr(\"SNI-REALITY (Yandex 25)\") ||\n             method == SettingsModel::kBypassMethodSniRealityYandex25) {\n    settings_->SetBypassMethod(SettingsModel::kBypassMethodSniRealityYandex25);\n  }\n  */\n  else if (method == QObject::tr(\"SNI-REALITY (Yandex 24)\") ||\n           method == SettingsModel::kBypassMethodSniRealityYandex24) {\n    settings_->SetBypassMethod(SettingsModel::kBypassMethodSniRealityYandex24);\n  }\n  /* Safari */\n  else if (method == QObject::tr(\"SNI-REALITY (Safari 26)\") ||\n           method == SettingsModel::kBypassMethodSniRealitySafari26) {\n    settings_->SetBypassMethod(SettingsModel::kBypassMethodSniRealitySafari26);\n  }\n  /* Default */\n  else {\n    settings_->SetBypassMethod(SettingsModel::kBypassMethodSniRealityYandex25);\n  }\n\n  if (sni_label_) {\n    if (settings_->BypassMethod() != SettingsModel::kBypassMethodSni) {\n      sni_label_->setText(QObject::tr(\"Fake domain to bypass blocking\"));\n    }\n  }\n}\n\nvoid SettingsWidget::UpdateSniFilesList() {\n  sni_files_list_widget_->clear();\n\n  auto files = settings_->SniManager()->SniFileList();\n  for (const auto& file : files) {\n    QString file_name = QString::fromStdString(file);\n\n    auto* item_widget = new QWidget(this);\n    auto* layout = new QHBoxLayout(item_widget);\n    layout->setContentsMargins(10, 5, 10, 5);\n    layout->setSpacing(10);\n\n    auto* name_label = new QLabel(file_name);\n    name_label->setStyleSheet(\"QLabel { font-weight: bold; }\");\n    name_label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);\n\n    layout->addWidget(name_label);\n\n    item_widget->setLayout(layout);\n\n    auto* item = new QListWidgetItem(sni_files_list_widget_);\n    item->setSizeHint(item_widget->sizeHint());\n    sni_files_list_widget_->setItemWidget(item, item_widget);\n  }\n\n  if (files.empty()) {\n    auto* empty_item = new QListWidgetItem(\n        QObject::tr(\"No SNI files imported\"), sni_files_list_widget_);\n    empty_item->setFlags(empty_item->flags() & ~Qt::ItemIsEnabled);\n    empty_item->setTextAlignment(Qt::AlignCenter);\n  }\n}\n\nvoid SettingsWidget::onImportSniFile() {\n  QString file_path =\n      QFileDialog::getOpenFileName(this, QObject::tr(\"Select SNI file\"), \"\",\n          QObject::tr(\"SNI files (*.sni);;All files (*)\"));\n\n  if (!file_path.isEmpty()) {\n    QFileInfo file_info(file_path);\n    QString file_name = file_info.fileName();\n\n    auto existing_files = settings_->SniManager()->SniFileList();\n    bool file_exists = false;\n    for (const auto& existing_file : existing_files) {\n      if (QString::fromStdString(existing_file) == file_name) {\n        file_exists = true;\n        break;\n      }\n    }\n\n    if (file_exists) {\n      QMessageBox::StandardButton reply = QMessageBox::question(this,\n          QObject::tr(\"File exists\"),\n          QObject::tr(\"File \\\"%1\\\" already exists. Overwrite?\").arg(file_name),\n          QMessageBox::Yes | QMessageBox::No);\n      if (reply != QMessageBox::Yes) {\n        return;\n      }\n    }\n\n    if (settings_->SniManager()->AddSniFile(file_path.toStdString())) {\n      UpdateSniFilesList();\n      QMessageBox::information(this, QObject::tr(\"Success\"),\n          QObject::tr(\"SNI file imported successfully\"));\n    } else {\n      QMessageBox::warning(\n          this, QObject::tr(\"Error\"), QObject::tr(\"Failed to import SNI file\"));\n    }\n  }\n}\n\nvoid SettingsWidget::onAutoscanClicked() {\n  SniAutoscanDialog dialog(settings_, this);\n  dialog.exec();\n  sni_line_edit_->setText(settings_->SNI());\n}\n\nvoid SettingsWidget::UpdateServerTableVisibility() {\n  if (server_table_) {\n    const bool has_data = (server_table_->rowCount() > 0);\n    server_table_->setVisible(has_data);\n  }\n}\n"
  },
  {
    "path": "src/fptn-client/gui/settingswidget/settings.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <QCheckBox>\n#include <QCloseEvent>\n#include <QComboBox>\n#include <QDialog>\n#include <QGridLayout>\n#include <QLabel>\n#include <QLineEdit>\n#include <QListWidget>\n#include <QPushButton>\n#include <QTableWidget>\n#include <QTextEdit>\n#include <QToolButton>\n#include <QWidget>\n\n#include \"gui/settingsmodel/settingsmodel.h\"\n\nnamespace fptn::gui {\nclass SettingsWidget : public QDialog {\n  Q_OBJECT\n\n public:\n  explicit SettingsWidget(SettingsModelPtr settings, QWidget* parent = nullptr);\n\n protected:\n  void closeEvent(QCloseEvent* event) override;\n\n protected:\n  void SetupUi();\n  void UpdateSniFilesList();\n  void UpdateServerTableVisibility();\n\n  // cppcheck-suppress unknownMacro\n private slots:\n  void onExit();\n  void onLoadNewConfig();\n  void onRemoveServer(int row);\n  void onLanguageChanged(const QString& new_language);\n  void onInterfaceChanged(const QString& new_language);\n  void onAutostartChanged(bool checked);\n  void onAutoGatewayChanged(bool checked);\n  void onBypassMethodChanged(const QString& method);\n\n  // cppcheck-suppress unknownMacro\n private slots:\n  void onImportSniFile();\n  void onAutoscanClicked();\n\n private:\n  SettingsModelPtr settings_;\n\n  QTabWidget* tab_widget_ = nullptr;\n  QWidget* settings_tab_ = nullptr;\n  QWidget* routing_tab_ = nullptr;\n  QWidget* about_tab_ = nullptr;\n  QTableWidget* server_table_ = nullptr;\n\n// AUTOSTART (show only for Linux)\n#ifdef __linux__\n  QLabel* autostart_label_ = nullptr;\n  QCheckBox* autostart_checkbox_ = nullptr;\n#endif\n  QLabel* language_label_ = nullptr;\n  QComboBox* language_combo_box_ = nullptr;\n\n  QGridLayout* grid_layout_ = nullptr;\n  QGridLayout* routing_grid_layout_ = nullptr;\n\n  QComboBox* interface_combo_box_ = nullptr;\n  QLabel* interface_label_ = nullptr;\n\n  QLineEdit* gateway_line_edit_ = nullptr;\n  QCheckBox* gateway_auto_checkbox_ = nullptr;\n  QLabel* gateway_label_ = nullptr;\n\n  QLabel* bypass_method_label_ = nullptr;\n  QComboBox* bypass_method_combo_box_ = nullptr;\n\n  QHBoxLayout* sni_buttons_layout_ = nullptr;\n\n  QLabel* sni_label_ = nullptr;\n  QLineEdit* sni_line_edit_ = nullptr;\n\n  QListWidget* sni_files_list_widget_ = nullptr;\n  QPushButton* sni_import_button_ = nullptr;\n  QPushButton* sni_autoscan_button_ = nullptr;\n\n  // New fields widgets for routing tab\n  QLabel* enable_dns_management_label_ = nullptr;\n  QLabel* enable_dns_management_info_label_ = nullptr;\n  QCheckBox* enable_dns_management_checkbox_ = nullptr;\n\n  QLabel* blacklist_domains_label_ = nullptr;\n  QLabel* blacklist_domains_info_label_ = nullptr;\n  QTextEdit* blacklist_domains_text_edit_ = nullptr;\n\n  QLabel* exclude_tunnel_networks_label_ = nullptr;\n  QLabel* exclude_tunnel_networks_info_label_ = nullptr;\n  QTextEdit* exclude_tunnel_networks_text_edit_ = nullptr;\n\n  QLabel* include_tunnel_networks_label_ = nullptr;\n  QLabel* include_tunnel_networks_info_label_ = nullptr;\n  QTextEdit* include_tunnel_networks_text_edit_ = nullptr;\n\n  QLabel* enable_split_tunnel_label_ = nullptr;\n  QLabel* enable_split_tunnel_info_label_ = nullptr;\n  QCheckBox* enable_split_tunnel_checkbox_ = nullptr;\n\n  QLabel* split_tunnel_mode_label_ = nullptr;\n  QLabel* split_tunnel_mode_info_label_ = nullptr;\n  QComboBox* split_tunnel_mode_combo_box_ = nullptr;\n\n  QLabel* split_tunnel_domains_label_ = nullptr;\n  QLabel* split_tunnel_domains_info_label_ = nullptr;\n  QTextEdit* split_tunnel_domains_text_edit_ = nullptr;\n\n  QPushButton* load_new_token_button_ = nullptr;\n\n  QPushButton* exit_button_ = nullptr;\n\n  QLabel* version_label_ = nullptr;\n\n  QLabel* project_info_label_ = nullptr;\n  QLabel* website_link_label_ = nullptr;\n  QLabel* telegram_group_label_ = nullptr;\n  QLabel* boosty_link_label_ = nullptr;\n  QLabel* sponsors_label_ = nullptr;\n  QLabel* sponsors_names_label_ = nullptr;\n};\n}  // namespace fptn::gui\n"
  },
  {
    "path": "src/fptn-client/gui/sni_autoscan_dialog/sni_autoscan_dialog.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"gui/sni_autoscan_dialog/sni_autoscan_dialog.h\"\n\n#include <algorithm>\n#include <random>\n#include <string>\n#include <thread>\n#include <utility>\n#include <vector>\n\n#include <QApplication>   // NOLINT(build/include_order)\n#include <QFontDatabase>  // NOLINT(build/include_order)\n#include <QMessageBox>    // NOLINT(build/include_order)\n#include <QScrollBar>     // NOLINT(build/include_order)\n#include <QVBoxLayout>    // NOLINT(build/include_order)\n\n#include \"fptn-protocol-lib/https/api_client/api_client.h\"\n\nnamespace fptn::gui {\n\nSniAutoscanDialog::SniAutoscanDialog(SettingsModelPtr settings, QWidget* parent)\n    : QDialog(parent), settings_(std::move(settings)) {\n  SetupUi();\n}\n\nSniAutoscanDialog::~SniAutoscanDialog() { StopScanning(); }\n\nvoid SniAutoscanDialog::SetupUi() {\n  setMinimumSize(650, 400);\n  setWindowTitle(QObject::tr(\"Autoscan SNI\"));\n  setModal(true);\n\n  auto* main_layout = new QVBoxLayout(this);\n  main_layout->setSpacing(3);\n  main_layout->setContentsMargins(3, 3, 3, 3);\n\n  auto* top_layout = new QHBoxLayout(this);\n  top_layout->setAlignment(Qt::AlignVCenter);\n\n  server_combo_box_ = new QComboBox(this);\n  server_combo_box_->addItem(QObject::tr(\"All\"));\n  const QVector<ServiceConfig>& services = settings_->Services();\n  for (const auto& service : services) {\n    for (const auto& server : service.servers) {\n      server_combo_box_->addItem(server.name);\n    }\n    for (const auto& server : service.censored_zone_servers) {\n      server_combo_box_->addItem(\"* \" + server.name);\n    }\n  }\n\n  sni_file_combo_box_ = new QComboBox(this);\n  sni_file_combo_box_->addItem(QObject::tr(\"All\"));\n  auto sni_files = settings_->SniManager()->SniFileList();\n  for (const auto& file : sni_files) {\n    sni_file_combo_box_->addItem(QString::fromStdString(file));\n  }\n\n  progress_label_ = new QLabel(\"0/0\", this);\n  progress_label_->setMinimumWidth(80);\n  progress_label_->setAlignment(Qt::AlignCenter);\n\n  start_stop_button_ = new QPushButton(QObject::tr(\"Start\"), this);\n  connect(start_stop_button_, &QPushButton::clicked, this,\n      &SniAutoscanDialog::onStartStopClicked);\n\n  close_button_ = new QPushButton(QObject::tr(\"Close\"), this);\n  connect(close_button_, &QPushButton::clicked, this, [this]() {\n    if (is_scanning_) {\n      StopScanning();\n    }\n    reject();\n  });\n\n  top_layout->addWidget(server_combo_box_);\n  top_layout->addWidget(sni_file_combo_box_);\n  top_layout->addWidget(progress_label_);\n  top_layout->addWidget(start_stop_button_);\n  top_layout->addWidget(close_button_);\n\n  log_text_edit_ = new QTextEdit(this);\n  log_text_edit_->setReadOnly(true);\n  log_text_edit_->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);\n  QFont log_font = QFontDatabase::systemFont(QFontDatabase::FixedFont);\n  log_font.setPointSize(8);\n  log_text_edit_->setFont(log_font);\n  connect(log_text_edit_->verticalScrollBar(), &QScrollBar::rangeChanged, this,\n      [this](int min, int max) {\n        (void)min;\n        if (auto_scroll_ && is_scanning_) {\n          log_text_edit_->verticalScrollBar()->setValue(max);\n        }\n      });\n  connect(log_text_edit_->verticalScrollBar(), &QScrollBar::valueChanged, this,\n      [this](int value) {\n        auto_scroll_ =\n            (value == log_text_edit_->verticalScrollBar()->maximum());\n      });\n\n  main_layout->addLayout(top_layout);\n  main_layout->addWidget(log_text_edit_, 1);\n\n  progress_timer_ = new QTimer(this);\n  connect(progress_timer_, &QTimer::timeout, this,\n      &SniAutoscanDialog::onUpdateProgress);\n}\n\nvoid SniAutoscanDialog::onStartStopClicked() {\n  if (!is_scanning_) {\n    StartScanning();\n  } else {\n    StopScanning();\n  }\n}\n\nvoid SniAutoscanDialog::onUpdateProgress() {\n  if (!is_scanning_) {\n    return;\n  }\n\n  const auto total = sni_vector_.size();\n  const auto tested = static_cast<std::size_t>(tested_count_);\n\n  if (total > 0) {\n    progress_label_->setText(QString(\"%1/%2\").arg(tested).arg(total));\n  } else {\n    progress_label_->setText(\"0/0\");\n  }\n\n  if (working_sni_found_ > 0 && !found_working_sni_.empty()) {\n    StopScanning();\n\n    settings_->SetSNI(QString::fromStdString(found_working_sni_));\n    settings_->Save();\n\n    QMessageBox::information(this, QObject::tr(\"Scan completed\"),\n        QObject::tr(\"Working SNI found: %1\")\n            .arg(QString::fromStdString(found_working_sni_)));\n    return;\n  }\n\n  if (static_cast<std::size_t>(tested_count_) >= sni_vector_.size()) {\n    StopScanning();\n    if (working_sni_found_ == 0) {\n      QMessageBox::information(this, QObject::tr(\"Scan completed\"),\n          QObject::tr(\"No working SNI found.\"));\n    }\n  }\n}\n\nvoid SniAutoscanDialog::StartScanning() {\n  if (sni_file_combo_box_->currentText() == QObject::tr(\"All\")) {\n    sni_vector_ = CollectAllSni();\n  } else {\n    sni_vector_ = CollectSniFromSelectedFile();\n  }\n\n  if (sni_vector_.empty()) {\n    QMessageBox::warning(this, QObject::tr(\"Error\"),\n        QObject::tr(\"No SNI available for scanning.\"));\n    return;\n  }\n\n  target_servers_ = CollectTargetServers();\n  if (target_servers_.isEmpty()) {\n    QMessageBox::warning(this, QObject::tr(\"Error\"),\n        QObject::tr(\"No servers available for scanning.\"));\n    return;\n  }\n\n  std::random_device rd;\n  std::mt19937 g(rd());\n  std::ranges::shuffle(sni_vector_, g);\n\n  is_scanning_ = true;\n  stop_requested_ = false;\n  tested_count_ = 0;\n  working_sni_found_ = 0;\n  current_sni_index_ = 0;\n  found_working_sni_.clear();\n\n  start_stop_button_->setText(QObject::tr(\"Cancel\"));\n  server_combo_box_->setEnabled(false);\n  sni_file_combo_box_->setEnabled(false);\n  progress_label_->setText(\"0/0\");\n\n  constexpr int kThreadCount = 8;\n  for (int i = 0; i < kThreadCount; ++i) {\n    worker_threads_.emplace_back(&SniAutoscanDialog::WorkerThread, this, i);\n  }\n  progress_timer_->start(100);\n}\n\nvoid SniAutoscanDialog::StopScanning() {\n  if (!is_scanning_) return;\n\n  stop_requested_ = true;\n\n  for (auto& thread : worker_threads_) {\n    if (thread.joinable()) {\n      thread.join();\n    }\n  }\n  worker_threads_.clear();\n\n  is_scanning_ = false;\n  progress_timer_->stop();\n\n  start_stop_button_->setText(QObject::tr(\"Start\"));\n  server_combo_box_->setEnabled(true);\n  sni_file_combo_box_->setEnabled(true);\n}\n\nstd::string SniAutoscanDialog::GetNextSni() {\n  const std::unique_lock<std::mutex> lock(mutex_);\n\n  if (current_sni_index_ >= sni_vector_.size()) {\n    return std::string();\n  }\n  return sni_vector_[current_sni_index_++];\n}\n\nvoid SniAutoscanDialog::WorkerThread(int thread_id) {\n  (void)thread_id;\n\n  while (!stop_requested_) {\n    std::string sni = GetNextSni();\n    if (sni.empty()) {\n      break;\n    }\n\n    bool sni_works = false;\n\n    for (const auto& server : target_servers_) {\n      if (stop_requested_) {\n        break;\n      }\n\n      bool handshake_ok = false;\n      bool http_ok = false;\n\n      constexpr int kHandshakeTimeout = 2;\n      fptn::protocol::https::ApiClient client(server.host.toStdString(),\n          server.port, sni, server.md5_fingerprint.toStdString(),\n          protocol::https::CensorshipStrategy::kSni);\n\n      handshake_ok = client.TestHandshake(kHandshakeTimeout);\n      if (handshake_ok) {\n        constexpr int kHttpTimeout = 5;\n        const auto response = client.Get(\"/api/v1/dns\", kHttpTimeout);\n        http_ok = (response.code == 200);\n\n        if (http_ok) {\n          sni_works = true;\n        }\n      }\n\n      AddLogEntry(\n          server.name, QString::fromStdString(sni), handshake_ok, http_ok);\n\n      if (sni_works) {\n        break;\n      }\n    }\n\n    ++tested_count_;\n\n    if (sni_works) {\n      found_working_sni_ = sni;\n      ++working_sni_found_;\n      break;\n    }\n  }\n}\n\nstd::vector<std::string> SniAutoscanDialog::CollectAllSni() const {\n  std::vector<std::string> all_sni;\n\n  auto files = settings_->SniManager()->SniFileList();\n  for (const auto& file : files) {\n    auto sni_list = settings_->SniManager()->GetSniList(file);\n    for (const auto& sni : sni_list) {\n      all_sni.push_back(sni);\n    }\n  }\n\n  return all_sni;\n}\n\nstd::vector<std::string> SniAutoscanDialog::CollectSniFromSelectedFile() const {\n  std::vector<std::string> sni_list;\n\n  QString selected_file = sni_file_combo_box_->currentText();\n  if (selected_file != QObject::tr(\"All\")) {\n    sni_list = settings_->SniManager()->GetSniList(selected_file.toStdString());\n  }\n\n  return sni_list;\n}\n\nQVector<ServerConfig> SniAutoscanDialog::CollectTargetServers() const {\n  QVector<ServerConfig> servers;\n  QString selected = server_combo_box_->currentText();\n\n  const QVector<ServiceConfig>& services = settings_->Services();\n\n  if (selected == QObject::tr(\"All\")) {\n    for (const auto& service : services) {\n      for (const auto& server : service.servers) {\n        servers.append(server);\n      }\n      for (const auto& server : service.censored_zone_servers) {\n        servers.append(server);\n      }\n    }\n  } else {\n    for (const auto& service : services) {\n      for (const auto& server : service.servers) {\n        if (server.name == selected) {\n          servers.append(server);\n          break;\n        }\n      }\n\n      // specific servers\n      QString clean_name = selected;\n      if (clean_name.startsWith(\"* \")) {\n        clean_name = clean_name.mid(2);\n      }\n      for (const auto& server : service.censored_zone_servers) {\n        if (server.name == clean_name) {\n          servers.append(server);\n          break;\n        }\n      }\n    }\n  }\n  return servers;\n}\n\nvoid SniAutoscanDialog::AddLogEntry(const QString& server,\n    const QString& sni,\n    bool handshake_ok,\n    bool http_ok) {\n  QMetaObject::invokeMethod(this, [this, server, sni, handshake_ok, http_ok]() {\n    const QString handshake_status =\n        handshake_ok ? QString(\"<font color=\\\"green\\\">YES</font>\")\n                     : QString(\"<font color=\\\"red\\\">NO</font>\");\n\n    const QString http_status =\n        http_ok ? QString(\"<font color=\\\"green\\\">YES</font>\")\n                : QString(\"<font color=\\\"red\\\">NO</font>\");\n\n    const QString log_entry = QString(R\"(\n        <table style=\"width: 100%; font-family: monospace; table-layout: fixed; font-size: 9px;\">\n            <tr>\n                <td width=\"25%\" style=\"white-space: nowrap;\">%1</td>\n                <td width=\"45%\" style=\"white-space: nowrap;\">%2</td>\n                <td width=\"15%\">Handshake: %3</td>\n                <td width=\"15%\" style=\"padding-left: 10px;\">HTTP: %4</td>\n            </tr>\n        </table>\n    )\")\n                                  .arg(server.toHtmlEscaped())\n                                  .arg(sni.toHtmlEscaped())\n                                  .arg(handshake_status)\n                                  .arg(http_status);\n\n    {\n      const std::unique_lock<std::mutex> lock(mutex_);\n\n      constexpr int kMaxLogSize = 2048;\n\n      if (log_text_edit_->document()->lineCount() > kMaxLogSize) {\n        QTextCursor cursor(log_text_edit_->document());\n        cursor.movePosition(QTextCursor::Start);\n        cursor.select(QTextCursor::LineUnderCursor);\n        cursor.removeSelectedText();\n      }\n\n      log_text_edit_->moveCursor(QTextCursor::End);\n      log_text_edit_->insertHtml(log_entry);\n\n      QTextCursor cursor(log_text_edit_->textCursor());\n      cursor.movePosition(QTextCursor::End);\n      log_text_edit_->setTextCursor(cursor);\n    }\n  });\n}\n\n}  // namespace fptn::gui\n"
  },
  {
    "path": "src/fptn-client/gui/sni_autoscan_dialog/sni_autoscan_dialog.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <atomic>\n#include <mutex>\n#include <random>\n#include <string>\n#include <thread>\n#include <vector>\n\n#include <QComboBox>    // NOLINT(build/include_order)\n#include <QDialog>      // NOLINT(build/include_order)\n#include <QLabel>       // NOLINT(build/include_order)\n#include <QPushButton>  // NOLINT(build/include_order)\n#include <QTextEdit>    // NOLINT(build/include_order)\n#include <QTimer>       // NOLINT(build/include_order)\n\n#include \"fptn-protocol-lib/https/obfuscator/methods/obfuscator_interface.h\"\n#include \"gui/settingsmodel/settingsmodel.h\"\n\nnamespace fptn::gui {\n\nclass SniAutoscanDialog : public QDialog {\n  Q_OBJECT\n\n public:\n  explicit SniAutoscanDialog(\n      SettingsModelPtr settings, QWidget* parent = nullptr);\n  ~SniAutoscanDialog() override;\n\n  // cppcheck-suppress unknownMacro\n public slots:\n  void onStartStopClicked();\n  void onUpdateProgress();\n\n protected:\n  void SetupUi();\n\n  void StartScanning();\n  void StopScanning();\n  void WorkerThread(int thread_id);\n\n  std::vector<std::string> CollectAllSni() const;\n  std::vector<std::string> CollectSniFromSelectedFile() const;\n  QVector<ServerConfig> CollectTargetServers() const;\n  std::string GetNextSni();\n\n  void AddLogEntry(const QString& server,\n      const QString& sni,\n      bool handshake_ok,\n      bool http_ok);\n\n private:\n  mutable std::mutex mutex_;\n\n  std::vector<std::string> sni_vector_;\n  std::size_t current_sni_index_ = 0;\n\n  std::atomic<bool> is_scanning_{false};\n  std::atomic<bool> stop_requested_{false};\n  std::atomic<int> tested_count_{0};\n  std::atomic<int> working_sni_found_{0};\n  std::string found_working_sni_;\n\n  QVector<ServerConfig> target_servers_;\n  std::vector<std::thread> worker_threads_;\n\n  SettingsModelPtr settings_;\n\n  QComboBox* server_combo_box_ = nullptr;\n  QComboBox* sni_file_combo_box_ = nullptr;\n  QLabel* progress_label_ = nullptr;\n  QPushButton* start_stop_button_ = nullptr;\n  QPushButton* close_button_ = nullptr;\n  QTextEdit* log_text_edit_ = nullptr;\n  QTimer* progress_timer_ = nullptr;\n\n  bool auto_scroll_ = true;\n};\n\n}  // namespace fptn::gui\n"
  },
  {
    "path": "src/fptn-client/gui/sni_manager/sni_manager.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"gui/sni_manager/sni_manager.h\"\n\n#include <algorithm>\n#include <filesystem>\n#include <fstream>\n#include <string>\n#include <utility>\n#include <vector>\n\nnamespace fptn::gui {\n\nSNIManager::SNIManager(std::string sni_folder)\n    : sni_folder_(std::move(sni_folder)) {\n  std::error_code ec;\n  std::filesystem::create_directories(sni_folder_, ec);\n}\n\nstd::vector<std::string> SNIManager::SniFileList() const {\n  std::vector<std::string> result;\n\n  std::error_code ec;\n  auto dir_iter = std::filesystem::directory_iterator(sni_folder_, ec);\n  if (ec) {\n    return {};\n  }\n  for (const auto& entry : dir_iter) {\n    if (entry.is_regular_file() && entry.path().extension() == \".sni\") {\n      result.push_back(entry.path().filename().string());\n    }\n  }\n\n  std::ranges::sort(result);\n  return result;\n}\n\nbool SNIManager::AddSniFile(const std::string& path) {\n  std::error_code ec;\n  if (!std::filesystem::exists(path, ec) || ec) {\n    return false;\n  }\n\n  std::filesystem::path source(path);\n  std::filesystem::path dest = sni_folder_ + \"/\" + source.filename().string();\n\n  std::filesystem::copy_file(\n      source, dest, std::filesystem::copy_options::overwrite_existing, ec);\n  return !ec;\n}\n\nbool SNIManager::RemoveFile(const std::string& file_name) {\n  std::filesystem::path file_path = sni_folder_ + \"/\" + file_name;\n  std::error_code ec;\n  return std::filesystem::remove(file_path, ec) && !ec;\n}\n\nstd::vector<std::string> SNIManager::GetSniList(\n    const std::string& file_name) const {\n  std::vector<std::string> result;\n\n  std::filesystem::path file_path = sni_folder_ + \"/\" + file_name;\n  std::ifstream file(file_path);\n\n  if (!file.is_open()) {\n    return result;\n  }\n\n  std::string line;\n  while (std::getline(file, line)) {\n    if (!line.empty()) {\n      result.push_back(line);\n    }\n  }\n\n  return result;\n}\n\n}  // namespace fptn::gui\n"
  },
  {
    "path": "src/fptn-client/gui/sni_manager/sni_manager.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <memory>\n#include <string>\n#include <vector>\n\nnamespace fptn::gui {\n\nclass SNIManager {\n public:\n  explicit SNIManager(std::string sni_folder);\n\n  std::vector<std::string> SniFileList() const;\n  bool AddSniFile(const std::string& path);\n  bool RemoveFile(const std::string& file_name);\n  std::vector<std::string> GetSniList(const std::string& file_name) const;\n\n private:\n  const std::string sni_folder_;\n};\n\nusing SNIManagerSPtr = std::shared_ptr<SNIManager>;\n\n}  // namespace fptn::gui\n"
  },
  {
    "path": "src/fptn-client/gui/speedwidget/speedwidget.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"gui/speedwidget/speedwidget.h\"\n\nusing fptn::gui::SpeedWidget;\n\nnamespace {\n\nQString FormatSpeed(std::size_t bytes_per_sec) {\n  QString speed_str;\n  double bits_per_sec = bytes_per_sec * 8.0;\n  if (bits_per_sec >= 1e9) {\n    speed_str = QString::asprintf(\"%.2f Gbps\", bits_per_sec / 1e9);\n  } else if (bits_per_sec >= 1e6) {\n    speed_str = QString::asprintf(\"%.2f Mbps\", bits_per_sec / 1e6);\n  } else if (bits_per_sec >= 1e3) {\n    speed_str = QString::asprintf(\"%.2f Kbps\", bits_per_sec / 1e3);\n  } else {\n    speed_str = QString::asprintf(\"%.2f bps\", bits_per_sec);\n  }\n  if (speed_str.size() >= 20) {\n    return speed_str;\n  }\n  return speed_str.leftJustified(25);\n}\n\nQString FormatSpeedLabel(const QString& text, std::size_t speed) {\n  return \"       \" + text + \": \" + FormatSpeed(speed);\n}\n\n}  // namespace\n\nSpeedWidget::SpeedWidget(QWidget* parent)\n    : QWidget(parent),\n      upload_speed_label_(\n          new QLabel(FormatSpeedLabel(QObject::tr(\"Upload speed\"), 0), this)),\n      download_speed_label_(new QLabel(\n          FormatSpeedLabel(QObject::tr(\"Download speed\"), 0), this)) {\n  auto* layout = new QVBoxLayout();\n  layout->setContentsMargins(4, 4, 4, 4);\n  layout->addWidget(download_speed_label_);\n  layout->addWidget(upload_speed_label_);\n  setLayout(layout);\n}\n\nvoid SpeedWidget::UpdateSpeed(\n    std::size_t upload_speed, std::size_t download_speed) {\n  upload_speed_label_->setText(\n      FormatSpeedLabel(QObject::tr(\"Upload speed\"), upload_speed));\n  download_speed_label_->setText(\n      FormatSpeedLabel(QObject::tr(\"Download speed\"), download_speed));\n}\n"
  },
  {
    "path": "src/fptn-client/gui/speedwidget/speedwidget.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <QHBoxLayout>  // NOLINT(build/include_order)\n#include <QLabel>       // NOLINT(build/include_order)\n#include <QStyle>       // NOLINT(build/include_order)\n#include <QVBoxLayout>  // NOLINT(build/include_order)\n#include <QWidget>      // NOLINT(build/include_order)\n\nnamespace fptn::gui {\nclass SpeedWidget : public QWidget {\n  Q_OBJECT\n\n public:\n  explicit SpeedWidget(QWidget* parent = nullptr);\n  void UpdateSpeed(std::size_t upload_speed, std::size_t download_speed);\n\n private:\n  QLabel* upload_speed_label_;\n  QLabel* download_speed_label_;\n};\n\n}  // namespace fptn::gui\n"
  },
  {
    "path": "src/fptn-client/gui/style/style.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"gui/style/style.h\"\n\nnamespace fptn::gui {\n\nQString GetMacStyleSheet() {\n  static const QString kStyleSheet = R\"(\nQMenu {\n    background-color: #333;\n    color: #fff;\n    border: 1px solid #555;\n}\nQMenu::item {\n    background-color: #333;\n    color: #fff;\n    padding: 5px 5px;\n}\nQMenu::item:selected {\n    background-color: #555;\n    color: #fff;\n}\nQMenu::icon {\n    margin-right: 4px;\n}\nQAction {\n    padding: 2px 2px;\n    color: #fff;\n}\nQWidgetAction {\n    padding: 5px;\n}\n)\";\n  return kStyleSheet;\n}\n\nQString GetUbuntuStyleSheet() {\n  static const QString kStyleSheet = R\"(\nQMenu {\n    background-color: #ffffff;\n    color: #333333;\n    border: 1px solid #d0d0d0;\n    border-radius: 8px;\n    padding: 5px;\n}\nQMenu::item {\n    background-color: #ffffff;\n    color: #333333;\n    padding: 2px 3px;\n    border-radius: 4px;\n}\nQMenu::item:selected {\n    background-color: #e0e0e0;\n    color: #333333;\n}\nQMenu::item:hover {\n    background-color: #e0e0e0;\n}\nQMenu::icon {\n    margin-right: 4px;\n}\nQAction {\n    color: #333333;\n}\nQWidgetAction {\n    padding: 2px 4px;\n}\nQWidget {\n    font-family: 'Ubuntu', 'Segoe UI', Tahoma, Verdana, Arial, sans-serif;\n    font-size: 10pt;\n    color: #333333;\n    background-color: #f0f0f0;\n}\nQPushButton {\n    background-color: #ffffff;\n    color: #333333;\n    border: 1px solid #d0d0d0;\n    border-radius: 4px;\n    padding: 6px 12px;\n}\nQPushButton:hover {\n    background-color: #e0e0e0;\n}\nQPushButton:pressed {\n    background-color: #d0d0d0;\n}\nQLineEdit, QTextEdit {\n    background-color: #ffffff;\n    color: #333333;\n    border: 1px solid #d0d0d0;\n    border-radius: 4px;\n    padding: 4px 8px;\n}\nQCheckBox, QRadioButton {\n    color: #333333;\n}\nQSlider::groove:horizontal {\n    border: 1px solid #d0d0d0;\n    height: 8px;\n    background: #ffffff;\n    border-radius: 4px;\n}\nQSlider::handle:horizontal {\n    background: #333333;\n    border: 1px solid #d0d0d0;\n    width: 16px;\n    border-radius: 4px;\n}\nQScrollBar:vertical {\n    border: 1px solid #d0d0d0;\n    background: #ffffff;\n    width: 16px;\n}\nQScrollBar::handle:vertical {\n    background: #c0c0c0;\n    min-height: 20px;\n    border-radius: 8px;\n}\nQTabBar::tab {\n    background: #e0e0e0;\n    color: #333333;\n    padding: 6px 12px;\n    border: 1px solid #d0d0d0;\n    border-bottom: 1px solid #ffffff;\n    border-radius: 4px 4px 0 0;\n}\nQTabBar::tab:selected {\n    background: #ffffff;\n    color: #333333;\n    border: 1px solid #d0d0d0;\n    border-bottom: 1px solid #ffffff;\n    border-radius: 4px 4px 0 0;\n    font-weight: bold;\n}\nQTabBar::tab:!selected {\n    background: #f0f0f0;\n}\nQTabWidget::pane {\n    border: 1px solid #d0d0d0;\n    border-radius: 4px;\n    background: #ffffff;\n}\nQMenu::item:disabled {\n    background-color: #ffffff;\n    color: #a0a0a0;\n}\nQAction:disabled {\n    color: #a0a0a0;\n}\n)\";\n  return kStyleSheet;\n}\n\nQString GetWindowsStyleSheet() {\n  static const QString kStyleSheet = R\"(\nQMenu {\n    background-color: #ffffff;\n    color: #000000;\n    border: 1px solid #bfbfbf;\n    border-radius: 4px;\n    padding: 5px;\n}\nQPushButton {\n    padding: 6px 12px;\n}\nQMenu::item {\n    background-color: #ffffff;\n    color: #000000;\n    padding: 2px 1px;\n    border-radius: 3px;\n}\nQMenu::item:selected {\n    background-color: #e0e0e0;\n    color: #000000;\n}\nQMenu::item:hover {\n    background-color: #e0e0e0;\n}\nQMenu::icon {\n    margin-right: 4px;\n}\nQAction {\n    color: #000000;\n}\nQMenu QWidget {\n    background-color: #ffffff;\n    color: #000000;\n    border: none;\n    padding: 1px 4px;\n}\nQMenu::item:disabled {\n    background-color: #ffffff;\n    color: #a0a0a0;\n}\nQAction:disabled {\n    color: #a0a0a0;\n}\n\n)\";\n  return kStyleSheet;\n}\n\n}  // namespace fptn::gui\n"
  },
  {
    "path": "src/fptn-client/gui/style/style.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <QString>\n\nnamespace fptn::gui {\n\nQString GetMacStyleSheet();\nQString GetUbuntuStyleSheet();\nQString GetWindowsStyleSheet();\n\n}  // namespace fptn::gui\n"
  },
  {
    "path": "src/fptn-client/gui/tokendialog/tokendialog.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"gui/tokendialog/tokendialog.h\"\n\n#include <iostream>\n#include <string>\n\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\n#include \"common/utils/base64.h\"\n#include \"common/utils/utils.h\"\n\n#include \"utils/brotli/brotli.h\"\n#include \"utils/utils.h\"\n\nusing fptn::gui::TokenDialog;\n\nTokenDialog::TokenDialog(QWidget* parent) : QDialog(parent) {\n  setWindowTitle(\"Token\");\n  label_ = new QLabel(QObject::tr(\"Paste your token\") + \": \", this);\n  token_field_ = new QLineEdit(this);\n  token_field_->setPlaceholderText(QObject::tr(\"Token\") + \"...\");\n  token_field_->setMinimumWidth(350);\n\n  token_layout_ = new QHBoxLayout();\n  token_layout_->addWidget(label_);\n  token_layout_->addWidget(token_field_);\n\n  save_button_ = new QPushButton(QObject::tr(\"Save\"), this);\n  cancel_button_ = new QPushButton(QObject::tr(\"Cancel\"), this);\n\n  // Layout for buttons\n  button_layout_ = new QHBoxLayout();\n  button_layout_->addStretch();\n  button_layout_->addWidget(save_button_);\n  button_layout_->addWidget(cancel_button_);\n\n  // Main layout\n  main_layout_ = new QVBoxLayout(this);\n  main_layout_->addLayout(token_layout_);\n  main_layout_->addLayout(button_layout_);\n\n  setLayout(main_layout_);\n\n  connect(cancel_button_, &QPushButton::clicked, this, &QDialog::reject);\n  connect(save_button_, &QPushButton::clicked, this, &TokenDialog::onOkClicked);\n\n  // show on top\n  setWindowFlags(Qt::Window | Qt::WindowStaysOnTopHint);\n  setModal(true);\n  show();\n  activateWindow();\n  raise();\n  setWindowModality(Qt::ApplicationModal);\n}\n\nconst QString& TokenDialog::Token() const { return token_; }\n\nvoid TokenDialog::onOkClicked() {\n  try {\n    const std::string entered_token =\n        token_field_->text().trimmed().toStdString();\n    const std::string token = fptn::common::utils::RemoveSubstring(\n        entered_token, {\" \", \"\\n\", \"\\r\", \"\\t\"});\n\n    std::string decoded_token;\n    if (token.starts_with(\"fptnb:\") || token.starts_with(\"fptnb//\")) {\n      const std::string clean_token =\n          common::utils::RemoveSubstring(token, {\"fptnb:\", \"fptnb//\"});\n      decoded_token = fptn::utils::brotli::Decompress(\n          fptn::common::utils::base64::decode(clean_token));\n    } else {\n      const std::string clean_token = fptn::common::utils::RemoveSubstring(\n          entered_token, {\"fptn:\", \"fptn://\"});\n      decoded_token = fptn::common::utils::base64::decode(clean_token);\n    }\n\n    const QString t = QString::fromStdString(decoded_token);\n    if (t.isEmpty()) {\n      QMessageBox::warning(this, QObject::tr(\"Validation Error\"),\n          QObject::tr(\"Token cannot be empty\") + \"!\");\n    } else {\n      token_ = t;\n      accept();\n    }\n  } catch (const std::runtime_error& err) {\n    SPDLOG_WARN(\"Wrong token: {}\", err.what());\n    QMessageBox::warning(this, QObject::tr(\"Wrong token\"),\n        QObject::tr(\"Wrong token\") + \": \" + err.what());\n  }\n}\n"
  },
  {
    "path": "src/fptn-client/gui/tokendialog/tokendialog.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <QDialog>      // NOLINT(build/include_order)\n#include <QHBoxLayout>  // NOLINT(build/include_order)\n#include <QLabel>       // NOLINT(build/include_order)\n#include <QLineEdit>    // NOLINT(build/include_order)\n#include <QMessageBox>  // NOLINT(build/include_order)\n#include <QPushButton>  // NOLINT(build/include_order)\n#include <QVBoxLayout>  // NOLINT(build/include_order)\n\nnamespace fptn::gui {\nclass TokenDialog final : public QDialog {\n  Q_OBJECT\n public:\n  explicit TokenDialog(QWidget* parent = nullptr);\n  const QString& Token() const;\n\n  // cppcheck-suppress unknownMacro\n private slots:\n  void onOkClicked();\n\n private:\n  QLabel* label_;\n  QLineEdit* token_field_;\n  QHBoxLayout* token_layout_;\n\n  QPushButton* save_button_;\n  QPushButton* cancel_button_;\n  QHBoxLayout* button_layout_;\n\n  QVBoxLayout* main_layout_;\n\n  QString token_;\n};\n}  // namespace fptn::gui\n"
  },
  {
    "path": "src/fptn-client/gui/translations/translations.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"gui/translations/translations.h\"\n\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\n#include <QApplication>  // NOLINT(build/include_order)\n#include <QTranslator>   // NOLINT(build/include_order)\n\n#include \"common/logger/logger.h\"\n\nnamespace {\nQTranslator& getTranslator() {\n  static QTranslator translator;\n  return translator;\n}\n}  // namespace\n\nbool fptn::gui::SetTranslation(const QString& language_code) {\n  const QString translation_file = QString(\"fptn_%1.qm\").arg(language_code);\n  QTranslator& translator = getTranslator();\n  qApp->removeTranslator(&translator);\n  if (translator.load(translation_file, \":/translations\")) {\n    if (!qApp->installTranslator(&translator)) {\n      SPDLOG_WARN(\"Failed to install translator for language: {}\",\n          language_code.toStdString());\n    } else {\n      return true;\n    }\n  } else {\n    SPDLOG_WARN(\n        \"Translation file not found: {}\", translation_file.toStdString());\n  }\n  return false;\n}\n"
  },
  {
    "path": "src/fptn-client/gui/translations/translations.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <QString>  // NOLINT(build/include_order)\n\nnamespace fptn::gui {\nbool SetTranslation(const QString& language_code);\n}\n"
  },
  {
    "path": "src/fptn-client/gui/tray/tray.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"gui/tray/tray.h\"\n\n#include <memory>\n#include <numeric>\n#include <string>\n#include <tuple>\n#include <utility>\n#include <vector>\n\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\n#include <QDesktopServices>  // NOLINT(build/include_order)\n#include <QFuture>           // NOLINT(build/include_order)\n#include <QFutureWatcher>    // NOLINT(build/include_order)\n#include <QIcon>             // NOLINT(build/include_order)\n#include <QMessageBox>       // NOLINT(build/include_order)\n#include <QStyleFactory>     // NOLINT(build/include_order)\n#include <QStyleHints>       // NOLINT(build/include_order)\n#include <QtConcurrent>      // NOLINT(build/include_order)\n\n#include \"common/network/ip_packet.h\"\n#include \"common/system/command.h\"\n\n#include \"fptn-protocol-lib/https/obfuscator/methods/tls/tls_obfuscator.h\"\n#include \"fptn-protocol-lib/time/time_provider.h\"\n#include \"gui/autoupdate/autoupdate.h\"\n#include \"gui/server_menu_item_widget/server_menu_item_widget.h\"\n#include \"gui/style/style.h\"\n#include \"gui/translations/translations.h\"\n#include \"plugins/blacklist/domain_blacklist.h\"\n\n#ifdef _WIN32\n#include \"utils/windows/vpn_conflict.h\"\n#endif\n\nusing fptn::gui::TrayApp;\n\nnamespace {\n\nQPixmap LoadIcon(const QString& icon_path, int size = 12) {\n  QPixmap pixmap(icon_path);\n  if (pixmap.isNull()) {\n    return QPixmap();\n  }\n  return pixmap.scaled(\n      size, size, Qt::KeepAspectRatio, Qt::SmoothTransformation);\n}\n\nvoid ShowError(const QString& title, const QString& msg) {\n  QMessageBox msg_box;\n  msg_box.setWindowIcon(QIcon(\":/icons/app.ico\"));\n  msg_box.setIcon(QMessageBox::Critical);\n  msg_box.setWindowTitle(title);\n#ifdef _WIN32\n  msg_box.setText(msg.toUtf8());\n#else\n  msg_box.setText(msg);\n#endif\n  msg_box.exec();\n}\n\n#ifdef _WIN32\nvoid ShowWarning(const QString& title, const QString& msg) {\n  QMessageBox msg_box;\n  msg_box.setWindowIcon(QIcon(\":/icons/app.ico\"));\n  msg_box.setIcon(QMessageBox::Warning);\n  msg_box.setWindowTitle(title);\n  msg_box.setText(msg);\n  msg_box.exec();\n}\n#endif\n\n}  // namespace\n\nTrayApp::TrayApp(const SettingsModelPtr& settings, QObject* parent)\n    : settings_(settings),\n      tray_icon_(new QSystemTrayIcon(this)),\n      tray_menu_(new QMenu(this)),\n      connect_menu_(new QMenu(QObject::tr(\"Connect\") + \"    \", tray_menu_)),\n      speed_widget_(new SpeedWidget(tray_menu_)),\n      update_timer_(new QTimer(this)),\n      active_icon_path_(\":/icons/active.ico\"),\n      inactive_icon_path_(\":/icons/inactive.ico\") {\n  (void)parent;\n#ifdef __linux__\n  qApp->setStyleSheet(fptn::gui::GetUbuntuStyleSheet());\n#elif __APPLE__\n  qApp->setStyleSheet(fptn::gui::GetMacStyleSheet());\n#elif _WIN32\n  qApp->setStyleSheet(fptn::gui::GetWindowsStyleSheet());\n#else\n#error \"Unsupported system!\"\n#endif\n\n#if __linux__\n  connect(tray_icon_, &QSystemTrayIcon::activated,\n      [this](QSystemTrayIcon::ActivationReason reason) {\n        if (reason == QSystemTrayIcon::Context) {\n          tray_menu_->popup(tray_icon_->geometry().bottomLeft());\n        } else {\n          tray_menu_->close();\n        }\n      });\n#elif _WIN32\n  connect(tray_icon_, &QSystemTrayIcon::activated,\n      [this](QSystemTrayIcon::ActivationReason reason) {\n        if (reason == QSystemTrayIcon::Context) {\n          tray_menu_->show();\n          tray_menu_->exec(QCursor::pos());\n        } else {\n          tray_menu_->close();\n        }\n      });\n#endif\n  const QString selected_language = settings->LanguageCode();\n  if (selected_language.isEmpty()) {  // save default language for first start\n    const QString system_language = GetSystemLanguageCode();\n    if (settings->ExistsTranslation(system_language)) {\n      settings->SetLanguageCode(system_language);\n    } else {\n      settings->SetLanguageCode(settings->DefaultLanguageCode());\n    }\n  } else {\n    fptn::gui::SetTranslation(selected_language);\n  }\n\n  // State\n  connect(this, &TrayApp::defaultState, this, &TrayApp::handleDefaultState);\n  connect(this, &TrayApp::connecting, this, &TrayApp::handleConnecting);\n  connect(this, &TrayApp::connected, this, &TrayApp::handleConnected);\n  connect(this, &TrayApp::disconnecting, this, &TrayApp::handleDisconnecting);\n  connect(this, &TrayApp::vpnStarted, this, &TrayApp::handleVpnStarted);\n\n  // Show connection... label\n  connecting_label_action_ = new QAction(QObject::tr(\"Connecting...\"), this);\n  connecting_label_action_->setIcon(LoadIcon(\":/icons/menu_connection.png\"));\n  connect(connecting_label_action_, &QAction::triggered, this,\n      &TrayApp::handleDefaultState);\n\n  // Show Disconnecting... label\n  disconnecting_label_action_ =\n      new QAction(QObject::tr(\"Disconnecting...\"), this);\n\n  // Disconect\n  disconnect_action_ = new QAction(QObject::tr(\"Disconnect\"), this);\n  disconnect_action_->setIcon(LoadIcon(\":/icons/menu_disconnect.png\"));\n  connect(disconnect_action_, &QAction::triggered, this,\n      &TrayApp::onDisconnectFromServer);\n\n  speed_widget_action_ = new QWidgetAction(this);\n  speed_widget_action_->setDefaultWidget(speed_widget_);\n\n  // Settings\n  connect(settings_.get(), &SettingsModel::dataChanged, this,\n      &TrayApp::UpdateTrayMenu);\n  connect(update_timer_, &QTimer::timeout, this, &TrayApp::handleTimer);\n  update_timer_->start(1000);\n\n  // Settings\n  settings_action_ = new QAction(QObject::tr(\"Settings\"), this);\n  settings_action_->setIcon(LoadIcon(\":/icons/menu_settings.png\"));\n  connect(\n      settings_action_, &QAction::triggered, this, &TrayApp::onShowSettings);\n\n  // Autoupdate\n  auto_update_action_ = new QAction(\n      QObject::tr(\"New version available\") + \" \" + auto_available_version_,\n      this);\n  auto_update_action_->setIcon(\n      LoadIcon(\":/icons/menu_new_version_download.png\"));\n  connect(auto_update_action_, &QAction::triggered, this,\n      [this] { OpenWebBrowser(FPTN_GITHUB_PAGE_LINK); });\n  auto_update_action_->setVisible(false);\n\n  // Quit\n  quit_action_ = new QAction(QObject::tr(\"Quit\"), this);\n  quit_action_->setIcon(LoadIcon(\":/icons/menu_exit.png\"));\n  connect(quit_action_, &QAction::triggered, this, &QCoreApplication::quit);\n\n  // Show menu\n  // tray_menu_->addAction(connecting_action_);\n  tray_menu_->addAction(disconnect_action_);\n  tray_menu_->addAction(connecting_label_action_);\n  tray_menu_->addAction(disconnecting_label_action_);\n  tray_menu_->addAction(speed_widget_action_);\n  tray_menu_->addSeparator();\n  tray_menu_->addAction(settings_action_);\n  tray_menu_->addSeparator();\n  tray_menu_->addAction(auto_update_action_);\n  tray_menu_->addSeparator();\n  tray_menu_->addAction(quit_action_);\n\n  tray_icon_->setContextMenu(tray_menu_);\n\n  tray_icon_->show();\n\n  // check update\n  CheckForUpdatesAsync();\n\n  try {\n    settings_->Load(false);  // use this to show notification about change\n                             // structure v1 and v2 config\n  } catch (std::runtime_error& err) {\n    ShowError(QObject::tr(\"Settings\"), err.what());\n  }\n  UpdateTrayMenu();\n\n#ifdef _WIN32\n  std::string found_adapters;\n  if (fptn::utils::windows::HasVpnConflicts(found_adapters)) {\n    SPDLOG_WARN(\n        \"Detected conflicting VPN network adapters: {}\", found_adapters);\n    const QString message = QObject::tr(\n        \"A conflicting VPN connection is currently active on your system: %1\\n\"\n        \"This may cause network connectivity issues or prevent proper \"\n        \"operation of FPTN.\")\n                                .arg(QString::fromStdString(found_adapters));\n\n    ShowWarning(QObject::tr(\"VPN Conflict Detected\"), message);\n  }\n#endif\n  // start pinging\n  settings_->StartPingMonitoring();\n\n  // Show pings\n  ping_update_timer_ = new QTimer(this);\n  connect(ping_update_timer_, &QTimer::timeout, [this]() { UpdatePings(); });\n  ping_update_timer_->start(1000);\n}\n\nvoid TrayApp::CheckForUpdatesAsync() {\n  (void)QtConcurrent::run([this]() {\n    try {\n      SPDLOG_DEBUG(\"Checking for updates in background thread\");\n\n      const auto update_result = fptn::gui::autoupdate::Check();\n      const bool is_available = update_result.first;\n      const std::string version_name = update_result.second;\n\n      SPDLOG_INFO(\"Update check completed: available={}, version={}\",\n          is_available, version_name);\n      if (is_available && !version_name.empty()) {\n        QMetaObject::invokeMethod(\n            this,\n            // NOLINTNEXTLINE(bugprone-exception-escape)\n            [this, version_name]() noexcept {\n              try {\n                auto_available_version_ = QString::fromStdString(version_name);\n                auto_update_action_->setText(\n                    QObject::tr(\"New version available\") + \" \" +\n                    auto_available_version_);\n                auto_update_action_->setVisible(true);\n                RetranslateUi();\n              } catch (...) {\n                SPDLOG_WARN(\"Failed to update UI with new version info\");\n              }\n            },\n            Qt::QueuedConnection);\n      } else {\n        SPDLOG_DEBUG(\"No updates available or version name is empty\");\n      }\n    } catch (const std::exception& e) {\n      SPDLOG_WARN(\"Failed to check for updates: {}\", e.what());\n    } catch (...) {\n      SPDLOG_WARN(\"Unknown error during update check\");\n    }\n  });\n}\n\nvoid TrayApp::UpdateTrayMenu() {\n  if (limited_zone_connect_menu_) {\n    limited_zone_connect_menu_->clear();\n  }\n  if (connect_menu_) {\n    connect_menu_->clear();\n  }\n  if (tray_menu_ && connect_menu_) {\n    tray_menu_->removeAction(connect_menu_->menuAction());\n    smart_connect_action_ = nullptr;\n    empty_configuration_action_ = nullptr;\n\n    limited_zone_connect_menu_ = nullptr;\n  }\n\n  switch (connection_state_) {\n    case ConnectionState::None: {\n      tray_icon_->setIcon(QIcon(inactive_icon_path_));\n      const auto& services = settings_->Services();\n\n      // calculate services\n      const std::size_t servers_number =\n          std::accumulate(services.begin(), services.end(), std::size_t{0},\n              [](std::size_t sum, const auto& service) {\n                return sum + service.servers.size();\n              });\n\n      if (0 != servers_number) {\n        smart_connect_action_ =\n            new QAction(QObject::tr(\"Smart Connect\"), connect_menu_);\n        smart_connect_action_->setIcon(QIcon(\":/icons/ping_green_circle.png\"));\n        connect(smart_connect_action_, &QAction::triggered, [this]() {\n          smart_connect_ = true;\n          onConnectToServer();\n        });\n\n        connect_menu_->addAction(smart_connect_action_);\n        connect_menu_->addSeparator();\n        // servers\n        for (const auto& service : services) {\n          // usual servers\n          for (const auto& server : service.servers) {\n            auto* action = new ServerMenuItemWidget(\n                server.name, server.ping_ms, connect_menu_);\n            // auto* widget_action = new QWidgetAction(connect_menu_);\n            // widget_action->setDefaultWidget(widget);\n            connect_menu_->addAction(action);\n\n            // FIXME\n            connect(action, &QAction::triggered, [this, server, service]() {\n              smart_connect_ = false;\n              fptn::utils::speed_estimator::ServerInfo cfg_server;\n              {\n                cfg_server.name = server.name.toStdString();\n                cfg_server.host = server.host.toStdString();\n                cfg_server.port = server.port;\n                cfg_server.is_using = server.is_using;\n                cfg_server.service_name = service.service_name.toStdString();\n                cfg_server.username = service.username.toStdString();\n                cfg_server.password = service.password.toStdString();\n                cfg_server.md5_fingerprint =\n                    server.md5_fingerprint.toStdString();\n              }\n              selected_server_ = cfg_server;\n              onConnectToServer();\n            });\n          }\n          // Censored zone servers\n          for (const auto& server : service.censored_zone_servers) {\n            if (!limited_zone_connect_menu_) {\n              limited_zone_connect_menu_ = new QMenu(\n                  QObject::tr(\"Limited access servers\") + \"  \", connect_menu_);\n              connect_menu_->setIcon(LoadIcon(\":/icons/menu_server_list.png\"));\n              connect_menu_->addMenu(limited_zone_connect_menu_);\n            }\n            auto* server_connect =\n                new QAction(server.name, limited_zone_connect_menu_);\n            limited_zone_connect_menu_->addAction(server_connect);\n\n            // FIXME\n            connect(\n                server_connect, &QAction::triggered, [this, server, service]() {\n                  smart_connect_ = false;\n                  fptn::utils::speed_estimator::ServerInfo cfg_server;\n                  {\n                    cfg_server.name = server.name.toStdString();\n                    cfg_server.host = server.host.toStdString();\n                    cfg_server.port = server.port;\n                    cfg_server.is_using = server.is_using;\n                    cfg_server.service_name =\n                        service.service_name.toStdString();\n                    cfg_server.username = service.username.toStdString();\n                    cfg_server.password = service.password.toStdString();\n                    cfg_server.md5_fingerprint =\n                        server.md5_fingerprint.toStdString();\n                  }\n                  selected_server_ = cfg_server;\n                  onConnectToServer();\n                });\n          }\n        }\n      } else {\n        empty_configuration_action_ =\n            new QAction(QObject::tr(\"No servers\"), connect_menu_);\n        connect_menu_->addAction(empty_configuration_action_);\n        empty_configuration_action_->setEnabled(false);\n      }\n      tray_menu_->insertMenu(settings_action_, connect_menu_);\n      if (connect_menu_) {\n        connect_menu_->setVisible(false);\n      }\n      if (disconnect_action_) {\n        disconnect_action_->setVisible(false);\n      }\n      if (speed_widget_action_) {\n        speed_widget_action_->setVisible(false);\n      }\n      if (settings_action_) {\n        settings_action_->setEnabled(true);\n      }\n      if (speed_widget_) {\n        speed_widget_->setVisible(false);\n      }\n      if (connecting_label_action_) {\n        connecting_label_action_->setVisible(false);\n      }\n      if (disconnecting_label_action_) {\n        disconnecting_label_action_->setVisible(false);\n      }\n      if (quit_action_) {\n        quit_action_->setEnabled(true);\n      }\n      break;\n    }\n    case ConnectionState::Connecting: {\n      tray_icon_->setIcon(QIcon(inactive_icon_path_));\n      if (connecting_label_action_) {\n        connecting_label_action_->setVisible(true);\n      }\n      if (disconnecting_label_action_) {\n        disconnecting_label_action_->setVisible(false);\n      }\n      if (speed_widget_action_) {\n        speed_widget_action_->setVisible(false);\n      }\n      if (settings_action_) {\n        settings_action_->setEnabled(false);\n      }\n      if (disconnect_action_) {\n        disconnect_action_->setVisible(false);\n      }\n      if (quit_action_) {\n        quit_action_->setEnabled(false);\n      }\n      break;\n    }\n    case ConnectionState::Connected: {\n      tray_icon_->setIcon(QIcon(active_icon_path_));\n      if (disconnect_action_) {\n        disconnect_action_->setText(QString(QObject::tr(\"Disconnect\") + \": %1\")\n                .arg(QString::fromStdString(selected_server_.name)));\n        disconnect_action_->setVisible(true);\n      }\n      if (speed_widget_) {\n        speed_widget_->setVisible(true);\n      }\n      if (settings_action_) {\n        settings_action_->setEnabled(false);\n      }\n      if (speed_widget_action_) {\n        speed_widget_action_->setVisible(true);\n      }\n      if (connecting_label_action_) {\n        connecting_label_action_->setVisible(false);\n      }\n      if (disconnecting_label_action_) {\n        disconnecting_label_action_->setVisible(false);\n      }\n      if (quit_action_) {\n        quit_action_->setEnabled(true);\n      }\n      break;\n    }\n    case ConnectionState::Disconnecting: {\n      tray_icon_->setIcon(QIcon(inactive_icon_path_));\n      if (disconnect_action_) {\n        disconnect_action_->setVisible(false);\n      }\n      if (speed_widget_action_) {\n        speed_widget_action_->setVisible(false);\n      }\n      if (settings_action_) {\n        settings_action_->setEnabled(false);\n      }\n      if (connecting_label_action_) {\n        connecting_label_action_->setVisible(false);\n      }\n      if (disconnecting_label_action_) {\n        disconnecting_label_action_->setVisible(true);\n      }\n      if (quit_action_) {\n        quit_action_->setEnabled(false);\n      }\n      break;\n    }\n  }\n\n  // Apply the language translation based on the user's settings\n  const QString selected_language = settings_->LanguageCode();\n  if (!selected_language.isEmpty()) {\n    fptn::gui::SetTranslation(selected_language);\n  }\n  RetranslateUi();\n}\n\nvoid TrayApp::onConnectToServer() {\n  SPDLOG_INFO(\"Signal: connecting to server\");\n  {\n    const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n    connection_state_ = ConnectionState::Connecting;\n    UpdateTrayMenu();\n  }\n  emit connecting();\n}\n\nvoid TrayApp::onDisconnectFromServer() {\n  SPDLOG_INFO(\"Signal: disconnected from server\");\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  connection_state_ = ConnectionState::None;\n  if (route_manager_) {\n    route_manager_->Clean();\n    route_manager_.reset();\n  }\n  if (vpn_client_) {\n    vpn_client_->Stop();\n    vpn_client_.reset();\n  }\n\n  settings_->StartPingMonitoring();\n\n  UpdateTrayMenu();\n}\n\nvoid TrayApp::onShowSettings() {\n  auto dialog = std::make_unique<SettingsWidget>(settings_);\n  QMetaObject::invokeMethod(dialog.get(), \"setFocus\", Qt::QueuedConnection);\n  dialog->exec();\n}\n\nvoid TrayApp::handleDefaultState() {\n  SPDLOG_INFO(\"Signal: entering default state\");\n  {\n    const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n    cancel_connecting_ = true;\n    settings_->StartPingMonitoring();\n\n    connection_state_ = ConnectionState::None;\n    if (route_manager_) {\n      route_manager_->Clean();\n      route_manager_.reset();\n    }\n    if (vpn_client_) {\n      vpn_client_->Stop();\n      vpn_client_.reset();\n    }\n  }\n  UpdateTrayMenu();\n}\n\nvoid TrayApp::handleConnecting() {\n  SPDLOG_INFO(\"Signal: connecting to server\");\n\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  settings_->StopPingMonitoring();\n\n  connection_state_ = ConnectionState::Connecting;\n  UpdateTrayMenu();\n\n  if (!connecting_in_progress_) {  // only once!\n    cancel_connecting_ = false;\n    connecting_in_progress_ = true;\n\n    QFuture<std::tuple<bool, QString>> future = QtConcurrent::run([this]() {\n      QString err_msg;\n      const auto status = startVpn(err_msg);\n      return std::make_tuple(status, std::move(err_msg));\n    });\n\n    auto* watcher = new QFutureWatcher<std::tuple<bool, QString>>(this);\n    connect(watcher, &QFutureWatcher<std::tuple<bool, QString>>::finished, this,\n        [this, watcher]() {\n          const std::tuple<bool, QString> result = watcher->result();\n          watcher->deleteLater();\n\n          if (!cancel_connecting_) {\n            const bool status = std::get<0>(result);\n            const QString err_msg = std::get<1>(result);\n            emit this->vpnStarted(status, err_msg);\n          }\n          connecting_in_progress_ = false;\n        });\n    watcher->setFuture(future);\n  }\n}\n\nvoid TrayApp::handleConnected() {\n  SPDLOG_INFO(\"Signal: connected to server\");\n  {\n    const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n    connection_state_ = ConnectionState::Connected;\n  }\n  UpdateTrayMenu();\n}\n\nvoid TrayApp::handleDisconnecting() {\n  {\n    const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n    settings_->StartPingMonitoring();\n\n    connection_state_ = ConnectionState::None;\n    UpdateTrayMenu();\n\n    stopVpn();\n  }\n  emit defaultState();\n}\n\nvoid TrayApp::handleTimer() {\n  static bool reconnection_in_progress = false;\n  static auto last_reconnection_time = std::chrono::steady_clock::now();\n\n  // check connection state\n  bool is_disconnected = false;\n  if (connection_state_ == ConnectionState::Connected && vpn_client_) {\n    const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n    // cppcheck-suppress identicalConditionAfterEarlyExit\n    if (connection_state_ == ConnectionState::Connected && vpn_client_) {\n      if (!vpn_client_->IsStarted()) {\n        // check reconnection\n        auto now = std::chrono::steady_clock::now();\n        auto time_since_last = std::chrono::duration_cast<std::chrono::seconds>(\n            now - last_reconnection_time);\n\n        if (!reconnection_in_progress &&\n            time_since_last > std::chrono::seconds(3)) {\n          reconnection_in_progress = true;\n          last_reconnection_time = now;\n          is_disconnected = true;\n        }\n      } else if (speed_widget_) {\n        speed_widget_->UpdateSpeed(\n            vpn_client_->GetReceiveRate(), vpn_client_->GetSendRate());\n      }\n    }\n  }\n\n  if (is_disconnected) {\n    // show error\n    ShowError(QObject::tr(\"FPTN Connection Error\"),\n        QObject::tr(\"The VPN connection was unexpectedly closed.\"));\n    SPDLOG_INFO(\"FPTN Connection Error\");\n    emit disconnecting();\n  }\n}\n\n// NOLINTNEXTLINE(readability-convert-member-functions-to-static)\nQString TrayApp::GetSystemLanguageCode() const {\n  const QLocale locale;\n  const QString locale_name = locale.name();\n  if (locale_name.contains('_')) {\n    const QString language_code = locale.name().split('_').first();\n    return language_code;\n  }\n  return \"en\";\n}\n\nvoid TrayApp::RetranslateUi() {\n  if (connect_menu_) {\n    connect_menu_->setTitle(QObject::tr(\"Connect\") + \"    \");\n  }\n  if (settings_action_) {\n    settings_action_->setText(QObject::tr(\"Settings\"));\n  }\n  if (quit_action_) {\n    quit_action_->setText(QObject::tr(\"Quit\"));\n  }\n  if (connecting_label_action_) {\n    connecting_label_action_->setText(QObject::tr(\"Connecting...\"));\n  }\n  if (empty_configuration_action_) {\n    empty_configuration_action_->setText(QObject::tr(\"No servers\"));\n  }\n  if (smart_connect_action_) {\n    smart_connect_action_->setText(QObject::tr(\"Smart Connect\"));\n  }\n  if (limited_zone_connect_menu_) {\n    limited_zone_connect_menu_->setTitle(\n        QObject::tr(\"Limited access servers\") + \"  \");\n  }\n  if (connecting_label_action_) {\n    connecting_label_action_->setText(QObject::tr(\"Connecting...\"));\n  }\n  if (disconnecting_label_action_) {\n    disconnecting_label_action_->setText(QObject::tr(\"Disconnecting...\"));\n  }\n\n  if (disconnect_action_) {\n    const QString disconnect_text =\n        QString(QObject::tr(\"Disconnect\") + \": %1\")\n            .arg(QString::fromStdString(selected_server_.name));\n    disconnect_action_->setText(disconnect_text);\n  }\n  if (auto_update_action_) {\n    auto_update_action_->setText(\n        QObject::tr(\"New version available\") + \" \" + auto_available_version_);\n  }\n}\n\nvoid TrayApp::stop() {\n  SPDLOG_INFO(\"Stopping TrayApp\");\n  settings_->StopPingMonitoring();\n\n  if (route_manager_) {\n    route_manager_->Clean();\n    route_manager_.reset();\n  }\n  if (vpn_client_) {\n    vpn_client_->Stop();\n    vpn_client_.reset();\n  }\n}\n\n// NOLINTNEXTLINE(readability-convert-member-functions-to-static)\nvoid TrayApp::OpenWebBrowser(const std::string& url) {\n#if __APPLE__\n  QDesktopServices::openUrl(QString::fromStdString(url));\n#elif __linux__\n  const std::string command = fmt::format(\n      R\"(bash -c \"xhost +SI:localuser:root && (xdg-open \\\"{0}\\\" || sensible-browser \\\"{0}\\\" || x-www-browser \\\"{0}\\\" || gnome-open \\\"{0}\\\" ) \"  )\",\n      url);\n  fptn::common::system::command::run(command);\n#elif _WIN32\n  const std::string command = fmt::format(R\"(explorer \"{}\" )\", url);\n  fptn::common::system::command::run(command);\n#endif\n}\n\nbool TrayApp::startVpn(QString& err_msg) {\n  SPDLOG_DEBUG(\"Handling connecting state\");\n\n  const fptn::common::network::IPv4Address tun_interface_address_ipv4(\n      FPTN_CLIENT_DEFAULT_ADDRESS_IP4);\n  const fptn::common::network::IPv6Address tun_interface_address_ipv6(\n      FPTN_CLIENT_DEFAULT_ADDRESS_IP6);\n  const std::string tun_interface_name = \"tun0\";\n\n  /* check gateway address */\n  const auto gateway_ip = (settings_->GatewayIp() == \"auto\"\n                               ? fptn::routing::GetDefaultGatewayIPAddress()\n                               : fptn::common::network::IPv4Address(\n                                     settings_->GatewayIp().toStdString()));\n\n  const auto gateway_ipv6 = fptn::routing::GetDefaultGatewayIPv6Address();\n\n  if (gateway_ip.IsEmpty()) {\n    err_msg = QObject::tr(\n        \"Unable to find the default gateway IP address. \"\n        \"Please check your connection and make sure no other VPN \"\n        \"is active. \"\n        \"If the error persists, specify the gateway address in the \"\n        \"FPTN settings using your router's IP address, \"\n        \"and ensure that an active internet interface (adapter) is \"\n        \"selected. If the issue remains unresolved, \"\n        \"please contact the developer via Telegram @fptn_chat.\");\n    return false;\n  }\n\n  /* config */\n  const std::string network_interface =\n      (settings_->UsingNetworkInterface() == \"auto\"\n              ? \"\"\n              : settings_->UsingNetworkInterface().toStdString());\n\n  const std::string sni = !settings_->SNI().isEmpty()\n                              ? settings_->SNI().toStdString()\n                              : FPTN_DEFAULT_SNI;\n  fptn::protocol::https::CensorshipStrategy censorship_strategy =\n      fptn::protocol::https::CensorshipStrategy::kSniRealityModeYandex25;\n\n  const auto& bypass_method = settings_->BypassMethod();\n  if (bypass_method == SettingsModel::kBypassMethodObfuscation) {\n    SPDLOG_INFO(\"Using obfuscation to bypass censorship\");\n    censorship_strategy =\n        fptn::protocol::https::CensorshipStrategy::kTlsObfuscator;\n  } else if (bypass_method == SettingsModel::kBypassMethodSniReality) {\n    // DEPRECATED\n    SPDLOG_INFO(\"Using generic reality mode to bypass censorship\");\n    censorship_strategy =\n        fptn::protocol::https::CensorshipStrategy::kSniRealityMode;\n  }\n  /* chrome */\n  else if (bypass_method == SettingsModel::kBypassMethodSniRealityChrome147) {\n    SPDLOG_INFO(\"Using Chrome 147 reality mode to bypass censorship\");\n    censorship_strategy =\n        fptn::protocol::https::CensorshipStrategy::kSniRealityModeChrome147;\n  } else if (bypass_method == SettingsModel::kBypassMethodSniRealityChrome146) {\n    SPDLOG_INFO(\"Using Chrome 146 reality mode to bypass censorship\");\n    censorship_strategy =\n        fptn::protocol::https::CensorshipStrategy::kSniRealityModeChrome146;\n  } else if (bypass_method == SettingsModel::kBypassMethodSniRealityChrome145) {\n    SPDLOG_INFO(\"Using Chrome 145 reality mode to bypass censorship\");\n    censorship_strategy =\n        fptn::protocol::https::CensorshipStrategy::kSniRealityModeChrome145;\n  }\n  /* firefox */\n  else if (bypass_method == SettingsModel::kBypassMethodSniRealityFirefox149) {\n    SPDLOG_INFO(\"Using Firefox 149 reality mode to bypass censorship\");\n    censorship_strategy =\n        fptn::protocol::https::CensorshipStrategy::kSniRealityModeFirefox149;\n  }\n  /* Yandex */\n  else if (bypass_method == SettingsModel::kBypassMethodSniRealityYandex26) {\n    SPDLOG_INFO(\"Using Yandex 26 reality mode to bypass censorship\");\n    censorship_strategy =\n        fptn::protocol::https::CensorshipStrategy::kSniRealityModeYandex26;\n  } else if (bypass_method == SettingsModel::kBypassMethodSniRealityYandex25) {\n    SPDLOG_INFO(\"Using Yandex 25 reality mode to bypass censorship\");\n    censorship_strategy =\n        fptn::protocol::https::CensorshipStrategy::kSniRealityModeYandex25;\n  } else if (bypass_method == SettingsModel::kBypassMethodSniRealityYandex24) {\n    SPDLOG_INFO(\"Using Yandex 24 reality mode to bypass censorship\");\n    censorship_strategy =\n        fptn::protocol::https::CensorshipStrategy::kSniRealityModeYandex24;\n  }\n  /* Safari */\n  else if (bypass_method == SettingsModel::kBypassMethodSniRealitySafari26) {\n    SPDLOG_INFO(\"Using Safari 26 reality mode to bypass censorship\");\n    censorship_strategy =\n        fptn::protocol::https::CensorshipStrategy::kSniRealityModeSafari26;\n  }\n  /* Default */\n  else {\n    SPDLOG_INFO(\"Using default SNI spoofing to bypass censorship\");\n    censorship_strategy =\n        fptn::protocol::https::CensorshipStrategy::kSniRealityModeYandex25;\n  }\n\n  if (cancel_connecting_) {\n    return false;\n  }\n\n  fptn::config::ConfigFile config(sni, censorship_strategy);  // SET SNI\n  if (smart_connect_) {  // find the best server\n    for (const auto& service : settings_->Services()) {\n      for (const auto& s : service.servers) {\n        fptn::utils::speed_estimator::ServerInfo cfg_server;\n        {\n          cfg_server.name = s.name.toStdString();\n          cfg_server.host = s.host.toStdString();\n          cfg_server.port = s.port;\n          cfg_server.is_using = s.is_using;\n          cfg_server.service_name = service.service_name.toStdString();\n          cfg_server.username = service.username.toStdString();\n          cfg_server.password = service.password.toStdString();\n          cfg_server.md5_fingerprint = s.md5_fingerprint.toStdString();\n        }\n        config.AddServer(cfg_server);\n      }\n    }\n    try {\n      selected_server_ = config.FindFastestServer(30);\n    } catch (std::runtime_error& err) {\n      err_msg = QObject::tr(\"Config error: \") + err.what();\n      return false;\n    }\n  }\n  /*\n  else {\n    // check connection to selected server\n    const std::uint64_t time = config.GetDownloadTimeMs(\n        selected_server_, sni, 30, selected_server_.md5_fingerprint);\n    if (time == UINT64_MAX) {\n      err_msg = QObject::tr(\n          \"The server is unavailable. Please select another server \"\n          \"or use Auto-connect to find the best available server.\");\n      return false;\n    }\n  }\n  */\n\n  const auto server_ip = fptn::routing::ResolveDomain(selected_server_.host);\n  if (server_ip == fptn::common::network::IPv4Address()) {\n    err_msg = QObject::tr(\n        \"The server is unavailable. Please select another server \"\n        \"or use Auto-connect to find the best available server.\");\n    return false;\n  }\n\n  if (cancel_connecting_) {\n    return false;\n  }\n\n  auto http_client = std::make_unique<fptn::vpn::http::Client>(server_ip,\n      selected_server_.port, tun_interface_address_ipv4,\n      tun_interface_address_ipv6, sni, selected_server_.md5_fingerprint,\n      censorship_strategy);\n  // login\n  bool login_status =\n      http_client->Login(selected_server_.username, selected_server_.password);\n  if (!login_status) {\n    const std::string error = http_client->LatestError();\n    err_msg = QObject::tr(\n                  \"Unable to connect to the server. Please use the Telegram \"\n                  \"bot to generate a new TOKEN with your personal settings, \"\n                  \"then try again.\") +\n              \"\\n\\n\" + QObject::tr(\"Error message: \") +\n              QString::fromStdString(error);\n    return false;\n  }\n\n  if (cancel_connecting_) {\n    return false;\n  }\n\n  // get dns\n  const auto [dns_server_ipv4, dns_server_ipv6] = http_client->GetDns();\n  if (dns_server_ipv4.IsEmpty() || dns_server_ipv6.IsEmpty()) {\n    const std::string error = http_client->LatestError();\n    err_msg = QObject::tr(\"DNS server error! Check your connection!\") + \"\\n\\n\" +\n              QObject::tr(\"Error message: \") + QString::fromStdString(error);\n    return false;\n  }\n\n  if (cancel_connecting_) {\n    return false;\n  }\n\n  const auto blacklist_domains = settings_->BlacklistDomains();\n  const auto exclude_networks = settings_->ExcludeTunnelNetworks();\n  const auto include_networks = settings_->IncludeTunnelNetworks();\n  const bool enable_split_tunnel = settings_->EnableSplitTunnel();\n  const QString split_tunnel_mode = settings_->SplitTunnelMode();\n  const auto split_tunnel_domains = settings_->SplitTunnelDomains();\n\n  // route manager\n  route_manager_ = std::make_unique<fptn::routing::RouteManager>(\n      network_interface, tun_interface_name, server_ip, dns_server_ipv4,\n      dns_server_ipv6, gateway_ip, gateway_ipv6, tun_interface_address_ipv4,\n      tun_interface_address_ipv6\n#if _WIN32\n      ,\n      settings_->EnableAdvancedDnsManagement()\n#endif\n  );  // NOLINT\n\n  if (cancel_connecting_) {\n    return false;\n  }\n\n  // setup plugins\n  std::vector<fptn::plugin::BasePluginPtr> client_plugins;\n  if (!blacklist_domains.empty()) {\n    std::vector<std::string> blacklist_domains_std;\n    for (const auto& domain : blacklist_domains) {\n      blacklist_domains_std.push_back(domain.toStdString());\n    }\n    auto blacklist_plugin = std::make_unique<fptn::plugin::DomainBlacklist>(\n        blacklist_domains_std, route_manager_);\n    client_plugins.push_back(std::move(blacklist_plugin));\n  }\n  if (enable_split_tunnel) {\n    std::vector<std::string> split_domains_std;\n    for (const auto& domain : split_tunnel_domains) {\n      split_domains_std.push_back(domain.toStdString());\n    }\n\n    const auto policy = (split_tunnel_mode == \"exclude\")\n                            ? fptn::routing::RoutingPolicy::kExcludeFromVpn\n                            : fptn::routing::RoutingPolicy::kIncludeInVpn;\n\n    auto split_tunnel_plugin = std::make_unique<fptn::plugin::Tunneling>(\n        split_domains_std, route_manager_, policy);\n    client_plugins.push_back(std::move(split_tunnel_plugin));\n  }\n\n  if (cancel_connecting_) {\n    return false;\n  }\n\n  // setup tun interface\n  auto virtual_network_interface =\n      std::make_unique<fptn::common::network::TunInterface>(\n          fptn::common::network::TunInterface::Config{\n              .name = tun_interface_name,\n              .ipv4_addr = tun_interface_address_ipv4,\n              .ipv4_netmask = 30,  // IPv4 netmask\n              .ipv6_addr = tun_interface_address_ipv6,\n              .ipv6_netmask = 126  // IPv6 netmask\n          });\n\n  // setup vpn client\n  vpn_client_ = std::make_unique<fptn::vpn::VpnClient>(std::move(http_client),\n      std::move(virtual_network_interface), dns_server_ipv4, dns_server_ipv6,\n      std::move(client_plugins));\n\n  if (cancel_connecting_) {\n    return false;\n  }\n\n  // Wait for the WebSocket tunnel to establish\n  vpn_client_->Start();\n\n  if (cancel_connecting_) {\n    return false;\n  }\n\n  // Update tun name to actual device name (may differ on macOS)\n  route_manager_->UpdateTunInterfaceName(vpn_client_->GetInterfaceName());\n\n  constexpr auto kTimeout = std::chrono::seconds(10);\n  const auto start = std::chrono::steady_clock::now();\n  while (!vpn_client_->IsStarted()) {\n    if (std::chrono::steady_clock::now() - start > kTimeout) {\n      err_msg = QObject::tr(\"Failed to connect to the server!\");\n      return false;\n    }\n    std::this_thread::sleep_for(std::chrono::microseconds(300));\n  }\n\n  if (cancel_connecting_) {\n    return false;\n  }\n\n  route_manager_->Apply();\n\n  if (!exclude_networks.empty()) {\n    std::vector<std::string> exclude_networks_std;\n    for (const auto& network : exclude_networks) {\n      exclude_networks_std.push_back(network.toStdString());\n    }\n    route_manager_->AddExcludeNetworks(exclude_networks_std);\n  }\n\n  if (!include_networks.empty()) {\n    std::vector<std::string> include_networks_std;\n    for (const auto& network : include_networks) {\n      include_networks_std.push_back(network.toStdString());\n    }\n    route_manager_->AddIncludeNetworks(include_networks_std);\n  }\n  if (cancel_connecting_) {\n    return false;\n  }\n\n  return true;\n}\n\nbool TrayApp::stopVpn() {\n  SPDLOG_INFO(\"Stopping vpn\");\n  if (route_manager_) {\n    route_manager_->Clean();\n    route_manager_.reset();\n  }\n  if (vpn_client_) {\n    vpn_client_->Stop();\n    vpn_client_.reset();\n  }\n  return true;\n}\n\nvoid TrayApp::handleVpnStarted(bool success, const QString& err_msg) {\n  cancel_connecting_ = false;\n  if (success) {\n    emit connected();\n  } else {\n    ShowError(QObject::tr(\"FPTN Connection Error\"), err_msg);\n    emit disconnecting();\n\n    settings_->StartPingMonitoring();\n  }\n}\n\nvoid TrayApp::UpdatePings() {\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  if (connection_state_ == ConnectionState::Connected ||\n      connection_state_ == ConnectionState::Connecting ||\n      connection_state_ == ConnectionState::Disconnecting) {\n    return;\n  }\n\n  for (auto* action : connect_menu_->actions()) {\n    if (auto* server_action = qobject_cast<ServerMenuItemWidget*>(action)) {\n      for (const auto& service : settings_->Services()) {\n        for (const auto& server : service.servers) {\n          if (server.name == server_action->ServerName()) {\n            server_action->UpdatePing(server.ping_ms);\n            break;\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/fptn-client/gui/tray/tray.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <future>\n#include <mutex>\n#include <string>\n#include <tuple>\n\n#include <QAction>          // NOLINT(build/include_order)\n#include <QApplication>     // NOLINT(build/include_order)\n#include <QMenu>            // NOLINT(build/include_order)\n#include <QMouseEvent>      // NOLINT(build/include_order)\n#include <QObject>          // NOLINT(build/include_order)\n#include <QString>          // NOLINT(build/include_order)\n#include <QSystemTrayIcon>  // NOLINT(build/include_order)\n#include <QTimer>           // NOLINT(build/include_order)\n#include <QWidgetAction>    // NOLINT(build/include_order)\n\n#include \"common/data/channel.h\"\n#include \"common/network/ip_address.h\"\n#include \"common/network/net_interface.h\"\n\n#include \"config/config_file.h\"\n#include \"gui/settingsmodel/settingsmodel.h\"\n#include \"gui/settingswidget/settings.h\"\n#include \"gui/speedwidget/speedwidget.h\"\n#include \"gui/tray/tray.h\"\n#include \"routing/route_manager.h\"\n#include \"utils/speed_estimator/server_info.h\"\n#include \"vpn/http/client.h\"\n#include \"vpn/vpn_client.h\"\n\nnamespace fptn::gui {\nclass TrayApp : public QWidget {\n  Q_OBJECT\n\n protected:\n  enum class ConnectionState { None, Connecting, Connected, Disconnecting };\n\n public:\n  explicit TrayApp(const SettingsModelPtr& settings, QObject* parent = nullptr);\n  void stop();\n\n protected:\n  QString GetSystemLanguageCode() const;\n  void RetranslateUi();\n signals:\n  void defaultState();\n  void connecting();\n  void connected();\n  void disconnecting();\n  void vpnStarted(bool success, const QString& err_msg);\n\n  // cppcheck-suppress unknownMacro\n protected slots:\n  void onConnectToServer();\n  void onDisconnectFromServer();\n  void onShowSettings();\n\n  // cppcheck-suppress unknownMacro\n protected slots:\n  void handleDefaultState();\n  void handleConnecting();\n  void handleConnected();\n  void handleDisconnecting();\n  void handleTimer();\n  void handleVpnStarted(bool success, const QString& err_msg);\n\n protected:\n  void UpdateTrayMenu();\n  void UpdatePings();\n  void OpenWebBrowser(const std::string& url);\n\n protected:\n  bool startVpn(QString& err_msg);\n  bool stopVpn();\n\n  void CheckForUpdatesAsync();\n\n private:\n  mutable std::mutex mutex_;\n\n  bool smart_connect_ = false;\n  fptn::utils::speed_estimator::ServerInfo selected_server_;\n\n  SettingsModelPtr settings_;\n\n  QSystemTrayIcon* tray_icon_ = nullptr;\n  QMenu* tray_menu_ = nullptr;\n  QMenu* connect_menu_ = nullptr;\n  QAction* smart_connect_action_ = nullptr;\n  QMenu* limited_zone_connect_menu_ = nullptr;\n  QAction* empty_configuration_action_ = nullptr;\n  QAction* disconnect_action_ = nullptr;\n  //  QAction* connecting_action_ = nullptr;\n  QAction* settings_action_ = nullptr;\n\n  QAction* auto_update_action_ = nullptr;\n  QString auto_available_version_;\n\n  QAction* quit_action_ = nullptr;\n  QAction* connecting_label_action_ = nullptr;\n  QAction* disconnecting_label_action_ = nullptr;\n  QWidgetAction* speed_widget_action_ = nullptr;\n  SpeedWidget* speed_widget_ = nullptr;\n  QTimer* update_timer_ = nullptr;\n  ConnectionState connection_state_ = ConnectionState::None;\n  QString connected_server_address_;\n\n  QString active_icon_path_;\n  QString inactive_icon_path_;\n\n  fptn::vpn::VpnClientPtr vpn_client_;\n  fptn::routing::RouteManagerSPtr route_manager_;\n\n  // connecting\n  std::atomic<bool> connecting_in_progress_{false};\n\n  QTimer* ping_update_timer_{nullptr};\n\n  std::atomic<bool> cancel_connecting_{false};\n};\n}  // namespace fptn::gui\n"
  },
  {
    "path": "src/fptn-client/plugins/base_plugin.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <memory>\n#include <utility>\n#include <vector>\n\n#include \"common/network/ip_packet.h\"\n\nnamespace fptn::plugin {\nclass BasePlugin {\n public:\n  virtual ~BasePlugin() = default;\n  virtual std::pair<fptn::common::network::IPPacketPtr, bool> HandlePacket(\n      fptn::common::network::IPPacketPtr packet) = 0;\n};\n\nusing BasePluginPtr = std::unique_ptr<BasePlugin>;\nusing PluginList = std::vector<BasePluginPtr>;\n\n}  // namespace fptn::plugin\n"
  },
  {
    "path": "src/fptn-client/plugins/blacklist/domain_blacklist.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"plugins/blacklist/domain_blacklist.h\"\n\n#include <memory>\n#include <ranges>\n#include <string>\n#include <utility>\n#include <vector>\n\n#include \"common/utils/utils.h\"\n\n#include \"utils/utils.h\"\n\nnamespace fptn::plugin {\n\nDomainBlacklist::DomainBlacklist(const std::vector<std::string>& rules,\n    routing::RouteManagerSPtr route_manager)\n    : route_manager_(std::move(route_manager)) {\n  RE2::Options re_options;\n  re_options.set_case_sensitive(false);\n  re_options.set_log_errors(false);\n\n  for (const auto& rule : rules) {\n    const std::string regex_pattern = fptn::utils::DomainToRegex(rule);\n    if (!regex_pattern.empty()) {\n      auto re = std::make_unique<RE2>(regex_pattern, re_options);\n      if (re->ok()) {\n        SPDLOG_INFO(\"Added blacklist rule: '{}' -> '{}'\", rule, regex_pattern);\n        rules_.push_back(std::move(re));\n      } else {\n        SPDLOG_WARN(\"Invalid regex pattern: {}, item={}\", re->error(), rule);\n      }\n    } else {\n      SPDLOG_WARN(\"Wrong pattern {}\", rule);\n    }\n  }\n}\n\nstd::pair<fptn::common::network::IPPacketPtr, bool>\nDomainBlacklist::HandlePacket(fptn::common::network::IPPacketPtr packet) {\n  bool triggered = false;\n  if (packet->IsDns()) {\n    const auto domain_opt = packet->GetDnsDomain();\n    if (domain_opt.has_value()) {\n      const std::string& domain = domain_opt.value();\n\n      if (std::ranges::any_of(rules_, [&domain](const auto& re) {\n            return RE2::PartialMatch(domain, *re);\n          })) {\n        SPDLOG_INFO(\"Domain {} is blacklisted\", domain);\n\n        const auto ipv4_addresses = packet->GetDnsIPv4Addresses();\n        const auto ipv6_addresses = packet->GetDnsIPv6Addresses();\n\n        // save\n        const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n        {\n          for (const auto& ipv4_address : ipv4_addresses) {\n            if (!ipv4_addresses_.contains(ipv4_address.ToInt())) {\n              SPDLOG_INFO(\n                  \"Added IPv4 to blacklist: {}\", ipv4_address.ToString());\n              ipv4_addresses_.insert(ipv4_address.ToInt());\n            }\n          }\n          for (const auto& ipv6_address : ipv6_addresses) {\n            if (ipv6_addresses_.contains(ipv6_address.ToString())) {\n              SPDLOG_INFO(\n                  \"Added IPv6 to blacklist: {}\", ipv6_address.ToString());\n              ipv6_addresses_.insert(ipv6_address.ToString());\n            }\n          }\n        }\n        triggered = true;\n      }\n    }\n  } else if (packet->IsIPv4()) {\n    const std::uint32_t src_ipv4 =\n        packet->IPv4Layer()->getSrcIPAddress().getIPv4().toInt();\n\n    const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n    if (ipv4_addresses_.contains(src_ipv4)) {\n      SPDLOG_INFO(\"Blocked IPv4 packet from {}\",\n          packet->IPv4Layer()->getSrcIPAddress().getIPv4().toString());\n      return {nullptr, true};\n    }\n  } else if (packet->IsIPv6()) {\n    const std::string src_ipv6 =\n        packet->IPv6Layer()->getSrcIPAddress().getIPv6().toString();\n\n    const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n    if (ipv6_addresses_.contains(src_ipv6)) {\n      SPDLOG_INFO(\"Blocked IPv6 packet from {}\", src_ipv6);\n      return {nullptr, true};\n    }\n  }\n  return {std::move(packet), triggered};\n}\n\n}  // namespace fptn::plugin\n"
  },
  {
    "path": "src/fptn-client/plugins/blacklist/domain_blacklist.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <memory>\n#include <mutex>\n#include <regex>\n#include <string>\n#include <unordered_set>\n#include <utility>\n#include <vector>\n\n#include <re2/re2.h>  // NOLINT(build/include_order)\n\n#include \"plugins/base_plugin.h\"\n#include \"routing/route_manager.h\"\n\nnamespace fptn::plugin {\nclass DomainBlacklist final : public BasePlugin {\n public:\n  explicit DomainBlacklist(const std::vector<std::string>& rules,\n      routing::RouteManagerSPtr route_manager);\n\n  ~DomainBlacklist() override = default;\n\n  std::pair<fptn::common::network::IPPacketPtr, bool> HandlePacket(\n      fptn::common::network::IPPacketPtr packet) override;\n\n private:\n  mutable std::mutex mutex_;\n\n  const routing::RouteManagerSPtr route_manager_;\n  std::vector<std::unique_ptr<RE2>> rules_;\n\n  std::unordered_set<std::uint32_t> ipv4_addresses_;\n  std::unordered_set<std::string> ipv6_addresses_;\n};\n\nusing DomainBlacklistPtr = std::unique_ptr<DomainBlacklist>;\n\n}  // namespace fptn::plugin\n"
  },
  {
    "path": "src/fptn-client/plugins/split/tunneling.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"plugins/split/tunneling.h\"\n\n#include <algorithm>\n#include <memory>\n#include <ranges>\n#include <string>\n#include <utility>\n#include <vector>\n\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\n#include \"utils/utils.h\"\n\nnamespace fptn::plugin {\n\nTunneling::Tunneling(const std::vector<std::string>& rules,\n    routing::RouteManagerSPtr route_manager,\n    fptn::routing::RoutingPolicy policy)\n    : route_manager_(std::move(route_manager)), policy_(policy) {\n  RE2::Options re_options;\n  re_options.set_case_sensitive(false);\n  re_options.set_log_errors(false);\n\n  for (const auto& rule : rules) {\n    const std::string regex_pattern = fptn::utils::DomainToRegex(rule);\n    if (!regex_pattern.empty()) {\n      auto re = std::make_unique<RE2>(regex_pattern, re_options);\n      if (re->ok()) {\n        SPDLOG_INFO(\"Added tunneling rule: '{}' -> '{}'\", rule, regex_pattern);\n        rules_.push_back(std::move(re));\n      } else {\n        SPDLOG_WARN(\"Invalid regex pattern: {}, item={}\", re->error(), rule);\n      }\n    } else {\n      SPDLOG_WARN(\"Wrong pattern {}\", rule);\n    }\n  }\n}\n\nstd::pair<fptn::common::network::IPPacketPtr, bool> Tunneling::HandlePacket(\n    fptn::common::network::IPPacketPtr packet) {\n  bool triggered = false;\n  if (packet->IsDns()) {\n    const auto domain_opt = packet->GetDnsDomain();\n    if (domain_opt.has_value()) {\n      const std::string& domain = domain_opt.value();\n      const bool domain_matched = std::ranges::any_of(rules_,\n          [&domain](const auto& re) { return RE2::PartialMatch(domain, *re); });\n\n      const auto ipv4_addresses = packet->GetDnsIPv4Addresses();\n      if (policy_ == routing::RoutingPolicy::kIncludeInVpn) {\n        if (!domain_matched) {\n          triggered = true;\n          route_manager_->AddDnsRoutesIPv4(\n              ipv4_addresses, routing::RoutingPolicy::kExcludeFromVpn);\n          SPDLOG_INFO(\n              \"Domain '{}' -> EXCLUDE from VPN (policy: INCLUDE only selected)\",\n              domain);\n        }\n      } else if (policy_ == routing::RoutingPolicy::kExcludeFromVpn) {\n        if (domain_matched) {\n          triggered = true;\n          route_manager_->AddDnsRoutesIPv4(\n              ipv4_addresses, routing::RoutingPolicy::kExcludeFromVpn);\n          SPDLOG_INFO(\n              \"Domain '{}' -> EXCLUDE from VPN (policy: EXCLUDE selected)\",\n              domain);\n        }\n      }\n#ifndef __APPLE__\n      const auto ipv6_addresses = packet->GetDnsIPv6Addresses();\n      if (!ipv6_addresses.empty()) {\n        if (policy_ == routing::RoutingPolicy::kIncludeInVpn) {\n          if (!domain_matched) {\n            triggered = true;\n            route_manager_->AddDnsRoutesIPv6(\n                ipv6_addresses, routing::RoutingPolicy::kExcludeFromVpn);\n            SPDLOG_INFO(\n                \"Domain '{}' -> EXCLUDE from VPN (policy: INCLUDE only \"\n                \"selected)\",\n                domain);\n          }\n        } else if (policy_ == routing::RoutingPolicy::kExcludeFromVpn) {\n          if (domain_matched) {\n            triggered = true;\n            route_manager_->AddDnsRoutesIPv6(\n                ipv6_addresses, routing::RoutingPolicy::kExcludeFromVpn);\n            SPDLOG_INFO(\n                \"Domain '{}' -> EXCLUDE from VPN (policy: EXCLUDE selected)\",\n                domain);\n          }\n        }\n      }\n#endif\n    }\n  }\n  return {std::move(packet), triggered};\n}\n\n}  // namespace fptn::plugin\n"
  },
  {
    "path": "src/fptn-client/plugins/split/tunneling.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <memory>\n#include <string>\n#include <vector>\n#include <utility>\n\n#include <re2/re2.h>  // NOLINT(build/include_order)\n\n#include \"common/network/ip_packet.h\"\n\n#include \"plugins/base_plugin.h\"\n#include \"routing/route_manager.h\"\n\nnamespace fptn::plugin {\nclass Tunneling final : public BasePlugin {\n public:\n  explicit Tunneling(const std::vector<std::string>& rules,\n      routing::RouteManagerSPtr route_manager,\n      fptn::routing::RoutingPolicy policy);\n\n  ~Tunneling() override = default;\n\n  std::pair<fptn::common::network::IPPacketPtr, bool> HandlePacket(\n      fptn::common::network::IPPacketPtr packet) override;\n\n private:\n  const routing::RouteManagerSPtr route_manager_;\n  const fptn::routing::RoutingPolicy policy_;\n\n  std::vector<std::unique_ptr<RE2>> rules_;\n};\n\nusing TunnelingPtr = std::unique_ptr<Tunneling>;\n\n}  // namespace fptn::plugin\n"
  },
  {
    "path": "src/fptn-client/routing/route_manager.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"routing/route_manager.h\"\n\n#include <algorithm>\n#include <memory>\n#include <string>\n#include <utility>\n#include <vector>\n\n#include <boost/asio/ip/address.hpp>\n#include <boost/asio/ip/tcp.hpp>\n\n#include \"common/network/net_interface.h\"\n#include \"common/system/command.h\"\n\nnamespace {\n#ifdef _WIN32\nstd::string GetWindowsInterfaceNumber(const std::string& interface_name) {\n  if (interface_name.empty()) {\n    return {};\n  }\n\n  ULONG out_buf_len = 15000;\n  ULONG flags = GAA_FLAG_INCLUDE_PREFIX | GAA_FLAG_INCLUDE_GATEWAYS;\n\n  std::unique_ptr<IP_ADAPTER_ADDRESSES[]> adapter_addresses;\n  DWORD ret = ERROR_BUFFER_OVERFLOW;\n\n  for (int i = 0; i < 3 && ret == ERROR_BUFFER_OVERFLOW; i++) {\n    adapter_addresses = std::make_unique<IP_ADAPTER_ADDRESSES[]>(\n        out_buf_len / sizeof(IP_ADAPTER_ADDRESSES) + 1);\n\n    ret = GetAdaptersAddresses(\n        AF_UNSPEC, flags, nullptr, adapter_addresses.get(), &out_buf_len);\n\n    if (ret == ERROR_BUFFER_OVERFLOW) {\n      adapter_addresses.reset();\n    }\n  }\n\n  if (ret == NO_ERROR && adapter_addresses) {\n    PIP_ADAPTER_ADDRESSES current = adapter_addresses.get();\n    DWORD if_index = 0;\n\n    while (current) {\n      std::string adapter_name = current->AdapterName;\n\n      int size_need = WideCharToMultiByte(\n          CP_UTF8, 0, current->FriendlyName, -1, nullptr, 0, nullptr, nullptr);\n      std::string friendly_name(size_need - 1, 0);\n      WideCharToMultiByte(CP_UTF8, 0, current->FriendlyName, -1,\n          &friendly_name[0], size_need, nullptr, nullptr);\n\n      size_need = WideCharToMultiByte(\n          CP_UTF8, 0, current->Description, -1, nullptr, 0, nullptr, nullptr);\n      std::string description(size_need - 1, 0);\n      WideCharToMultiByte(CP_UTF8, 0, current->Description, -1, &description[0],\n          size_need, nullptr, nullptr);\n\n      if (interface_name == adapter_name || interface_name == friendly_name ||\n          interface_name == description) {\n        if_index = current->IfIndex;\n        break;\n      }\n      current = current->Next;\n    }\n\n    return if_index > 0 ? std::to_string(if_index) : std::string();\n  }\n\n  return {};\n}\n\nstd::pair<std::string, std::string> ParseIPv4CIDR(const std::string& network) {\n  std::string ip = network;\n  std::string mask = \"255.255.255.255\";\n\n  std::size_t slash_pos = network.find('/');\n  if (slash_pos != std::string::npos) {\n    ip = network.substr(0, slash_pos);\n    std::string cidr_str = network.substr(slash_pos + 1);\n\n    try {\n      int cidr = std::stoi(cidr_str);\n      if (cidr >= 0 && cidr <= 32) {\n        std::uint32_t mask_value = 0;\n        if (cidr > 0) {\n          mask_value = ~0u << (32 - cidr);\n        }\n        mask = fmt::format(\"{}.{}.{}.{}\", (mask_value >> 24) & 0xFF,\n            (mask_value >> 16) & 0xFF, (mask_value >> 8) & 0xFF,\n            mask_value & 0xFF);\n      }\n    } catch (...) {\n      SPDLOG_WARN(\"Warning: Failed to parse CIDR: {}\", network);\n    }\n  }\n  return {ip, mask};\n}\n\nstd::pair<std::string, int> ParseIPv6CIDR(const std::string& network) {\n  std::string ip = network;\n  int prefix = 128;\n\n  size_t slash_pos = network.find('/');\n  if (slash_pos != std::string::npos) {\n    ip = network.substr(0, slash_pos);\n    std::string cidr_str = network.substr(slash_pos + 1);\n\n    try {\n      int cidr = std::stoi(cidr_str);\n      if (cidr >= 0 && cidr <= 128) {\n        prefix = cidr;\n      }\n    } catch (...) {\n      SPDLOG_WARN(\"Warning: Failed to parse IPv6 CIDR: {}\", network);\n    }\n  }\n  return {ip, prefix};\n}\n#elif __linux__\n\nstd::vector<std::string> GetLinuxDnsServers(const std::string& interface) {\n  std::vector<std::string> dns_servers;\n\n  const std::string command = fmt::format(\n      \"resolvectl status {} | grep 'DNS Servers:' | awk -F': ' '{{print $2}}'\",\n      interface);\n\n  std::vector<std::string> output;\n  fptn::common::system::command::run(command, output);\n\n  if (!output.empty() && !output[0].empty()) {\n    std::istringstream iss(output[0]);\n    std::string server;\n    while (iss >> server) {\n      if (!server.empty()) {\n        dns_servers.push_back(server);\n      }\n    }\n  }\n  return dns_servers;\n}\n#endif\n\nbool AddIPv4RouteToSystem(const std::string& destination,\n    const std::string& gateway_ip,\n    const std::string& out_interface) {\n  (void)gateway_ip;\n  (void)out_interface;\n  try {\n#ifdef __linux__\n    const std::string command =\n        fmt::format(R\"(ip route add {} via \"{}\" dev \"{}\" )\", destination,\n            gateway_ip, out_interface);\n#elif __APPLE__\n    const std::string command =\n        fmt::format(\"route add -net {} {}\", destination, gateway_ip);\n#elif _WIN32\n    auto [ip, mask] = ParseIPv4CIDR(destination);\n    std::string interface_param = \"\";\n    if (!out_interface.empty()) {\n      std::string interface_number = GetWindowsInterfaceNumber(out_interface);\n      if (!interface_number.empty()) {\n        interface_param = \"if \" + interface_number;\n      }\n    }\n    const std::string command =\n        fmt::format(\"route add {} mask {} {} METRIC 2 {}\", ip, mask, gateway_ip,\n            interface_param);\n#else\n    return false;\n#endif\n    fptn::common::system::command::run(command);\n    return true;\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"Failed to add IPv4 route {}: {}\", destination, e.what());\n    return false;\n  } catch (...) {\n    SPDLOG_ERROR(\"Unknown error adding IPv4 route: {}\", destination);\n    return false;\n  }\n}\n\nbool AddIPv6RouteToSystem(const std::string& destination,\n    const std::string& gateway_ip,\n    const std::string& out_interface) {\n  (void)gateway_ip;\n  (void)out_interface;\n  try {\n#ifdef __linux__\n    const std::string command =\n        fmt::format(R\"(ip -6 route add {} via \"{}\" dev \"{}\" )\", destination,\n            gateway_ip, out_interface);\n#elif __APPLE__\n    const std::string command =\n        fmt::format(\"route add -inet6 {} {}\", destination, gateway_ip);\n#elif _WIN32\n    auto [ip, prefix] = ParseIPv6CIDR(destination);\n    std::string interface_name = out_interface;\n    if (interface_name.empty()) {\n      SPDLOG_ERROR(\"Interface name required for IPv6 route on Windows\");\n      return false;\n    }\n    const std::string command =\n        fmt::format(\"netsh interface ipv6 add route {}/{} \\\"{}\\\" {}\", ip,\n            prefix, interface_name, gateway_ip);\n#else\n    return false;\n#endif\n    fptn::common::system::command::run(command);\n    return true;\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"Failed to add IPv6 route {}: {}\", destination, e.what());\n    return false;\n  } catch (...) {\n    SPDLOG_ERROR(\"Unknown error adding IPv6 route: {}\", destination);\n    return false;\n  }\n}\n\nbool RemoveIPv4RouteFromSystem(const std::string& destination,\n    const std::string& gateway_ip,\n    const std::string& out_interface) {\n  (void)gateway_ip;\n  (void)out_interface;\n  try {\n#ifdef __linux__\n    const std::string command = fmt::format(\"ip route del {} via {} dev {}\",\n        destination, gateway_ip, out_interface);\n#elif __APPLE__\n    const std::string command =\n        fmt::format(\"route delete -net {} {}\", destination, gateway_ip);\n#elif _WIN32\n    auto [ip, mask] = ParseIPv4CIDR(destination);\n    std::string interface_param = \"\";\n    if (!out_interface.empty()) {\n      std::string interface_number = GetWindowsInterfaceNumber(out_interface);\n      if (!interface_number.empty()) {\n        interface_param = \"if \" + interface_number;\n      }\n    }\n    const std::string command = fmt::format(\n        \"route delete {} mask {} {} {}\", ip, mask, gateway_ip, interface_param);\n#else\n    return false;\n#endif\n    fptn::common::system::command::run(command);\n    return true;\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"Failed to remove IPv4 route {}: {}\", destination, e.what());\n    return false;\n  } catch (...) {\n    SPDLOG_ERROR(\"Unknown error removing IPv4 route: {}\", destination);\n    return false;\n  }\n}\n\nbool RemoveIPv6RouteFromSystem(const std::string& destination,\n    const std::string& gateway_ip,\n    const std::string& out_interface) {\n  (void)gateway_ip;\n  (void)out_interface;\n  try {\n#ifdef __linux__\n    const std::string command = fmt::format(\"ip -6 route del {} via {} dev {}\",\n        destination, gateway_ip, out_interface);\n#elif __APPLE__\n    const std::string command =\n        fmt::format(\"route delete -inet6 {} {}\", destination, gateway_ip);\n#elif _WIN32\n    auto [ip, prefix] = ParseIPv6CIDR(destination);\n    std::string interface_name = out_interface;\n    if (interface_name.empty()) {\n      SPDLOG_ERROR(\"Interface name required for IPv6 route removal on Windows\");\n      return false;\n    }\n    const std::string command =\n        fmt::format(\"netsh interface ipv6 delete route {}/{} \\\"{}\\\"\", ip,\n            prefix, interface_name);\n#else\n    return false;\n#endif\n    fptn::common::system::command::run(command);\n    return true;\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"Failed to remove IPv6 route {}: {}\", destination, e.what());\n    return false;\n  } catch (...) {\n    SPDLOG_ERROR(\"Unknown error removing IPv6 route: {}\", destination);\n    return false;\n  }\n}\n\n}  // namespace\n\nusing fptn::routing::RouteManager;\n\nRouteManager::RouteManager(std::string out_interface_name,\n    std::string tun_interface_name,\n    fptn::common::network::IPv4Address vpn_server_ip,\n    fptn::common::network::IPv4Address dns_server_ipv4,\n    fptn::common::network::IPv6Address dns_server_ipv6,\n    fptn::common::network::IPv4Address gateway_ipv4,\n    fptn::common::network::IPv6Address gateway_ipv6,\n    fptn::common::network::IPv4Address tun_interface_address_ipv4,\n    fptn::common::network::IPv6Address tun_interface_address_ipv6\n#if _WIN32\n    ,\n    bool enable_advanced_dns_management\n#endif\n\n    )\n    : running_(false),\n      out_interface_name_(std::move(out_interface_name)),\n      tun_interface_name_(std::move(tun_interface_name)),\n      vpn_server_ip_(std::move(vpn_server_ip)),\n      dns_server_ipv4_(std::move(dns_server_ipv4)),\n      dns_server_ipv6_(std::move(dns_server_ipv6)),\n      gateway_ipv4_(std::move(gateway_ipv4)),\n      gateway_ipv6_(std::move(gateway_ipv6)),\n      tun_interface_address_ipv4_(std::move(tun_interface_address_ipv4)),\n      tun_interface_address_ipv6_(std::move(tun_interface_address_ipv6))\n#if _WIN32\n      ,\n      enable_advanced_dns_management_(enable_advanced_dns_management)\n#endif\n{\n}\n\nRouteManager::~RouteManager() {  // NOLINT(bugprone-exception-escape)\n  if (running_) {\n    Clean();\n  }\n}\n\nbool RouteManager::Apply() {\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  running_ = true;\n#if defined(__APPLE__) || defined(__linux__)\n  detected_out_interface_name_ =\n      (out_interface_name_.empty() ? GetDefaultNetworkInterfaceName()\n                                   : out_interface_name_);\n#endif\n  detected_out_interface_name_ =\n      (out_interface_name_.empty() ? GetDefaultNetworkInterfaceName()\n                                   : out_interface_name_);\n  detected_gateway_ipv4_ =\n      gateway_ipv4_.IsEmpty() ? GetDefaultGatewayIPAddress() : gateway_ipv4_;\n\n  SPDLOG_INFO(\"=== Setting up routing ===\");\n  SPDLOG_INFO(\"IPTABLES VPN SERVER IP:         {}\", vpn_server_ip_.ToString());\n  SPDLOG_INFO(\n      \"IPTABLES OUT NETWORK INTERFACE: {}\", detected_out_interface_name_);\n  SPDLOG_INFO(\n      \"IPTABLES GATEWAY IP:            {}\", detected_gateway_ipv4_.ToString());\n  SPDLOG_INFO(\n      \"IPTABLES DNS SERVER:            {}\", dns_server_ipv4_.ToString());\n#ifdef __linux__\n  original_dns_servers_ = GetLinuxDnsServers(detected_out_interface_name_);\n  for (const auto& dns : original_dns_servers_) {\n    SPDLOG_INFO(\"Saved dns: {}\", dns);\n  }\n  std::vector<std::string> commands = {fmt::format(\"systemctl start sysctl\"),\n      fmt::format(\"sysctl -w net.ipv4.ip_forward=1\"),\n      fmt::format(\"sysctl -w net.ipv6.conf.default.disable_ipv6=0\"),\n      fmt::format(\"sysctl -w net.ipv6.conf.all.disable_ipv6=0\"),\n      fmt::format(\"sysctl -w net.ipv6.conf.lo.disable_ipv6=0\"),\n      fmt::format(\"sysctl -w net.ipv6.conf.all.forward=1\"),\n      fmt::format(\"sysctl -p\"),\n      // iptables\n      fmt::format(\"iptables -t nat -A POSTROUTING -o {} -j MASQUERADE\",\n          detected_out_interface_name_),\n      fmt::format(\"iptables -A FORWARD -i {} -o {} -m state --state \"\n                  \"RELATED,ESTABLISHED -j ACCEPT\",\n          detected_out_interface_name_, tun_interface_name_),\n      fmt::format(\"iptables -A FORWARD -i {} -o {} -j ACCEPT\",\n          tun_interface_name_, detected_out_interface_name_),\n      fmt::format(\"iptables -A OUTPUT -o {} -d {} -j ACCEPT\",\n          detected_out_interface_name_, vpn_server_ip_.ToString()),\n      fmt::format(\"iptables -A INPUT -i {} -s {} -j ACCEPT\",\n          detected_out_interface_name_, vpn_server_ip_.ToString()),\n      // IPv4 default & DNS route\n      fmt::format(\"ip route add default dev {}\", tun_interface_name_),\n      fmt::format(\"ip route add {} dev {}\", dns_server_ipv4_.ToString(),\n          tun_interface_name_),  // via TUN\n                                 // IPv6 default\n      fmt::format(\"ip -6 route add {} dev {}\", dns_server_ipv6_.ToString(),\n          tun_interface_name_),\n      fmt::format(\"ip -6 route add default via {} dev {}\",\n          dns_server_ipv6_.ToString(), tun_interface_name_),\n      // exclude vpn server\n      fmt::format(\"ip route add {} via {} dev {}\", vpn_server_ip_.ToString(),\n          detected_gateway_ipv4_.ToString(), detected_out_interface_name_),\n      // Allow DNS responses from TUN (sport 53, not dport 53)\n      fmt::format(\"iptables -A OUTPUT -o {} -p udp --sport 53 -j ACCEPT\",\n          tun_interface_name_),\n      fmt::format(\"iptables -A OUTPUT -o {} -p tcp --sport 53 -j ACCEPT\",\n          tun_interface_name_),\n      fmt::format(\"ip6tables -A OUTPUT -o {} -p udp --sport 53 -j ACCEPT\",\n          tun_interface_name_),\n      fmt::format(\"ip6tables -A OUTPUT -o {} -p tcp --sport 53 -j ACCEPT\",\n          tun_interface_name_),\n      // Block DNS requests on physical interface\n      fmt::format(\"iptables -A OUTPUT -o {} -p udp --dport 53 -j DROP\",\n          detected_out_interface_name_),\n      fmt::format(\"iptables -A OUTPUT -o {} -p tcp --dport 53 -j DROP\",\n          detected_out_interface_name_),\n      // Block DNS IPv6\n      fmt::format(\"ip6tables -A OUTPUT -o {} -p udp --dport 53 -j DROP\",\n          detected_out_interface_name_),\n      fmt::format(\"ip6tables -A OUTPUT -o {} -p tcp --dport 53 -j DROP\",\n          detected_out_interface_name_),\n      // Block DoT IPv4\n      fmt::format(\"iptables -A OUTPUT -o {} -p udp --dport 853 -j DROP\",\n          detected_out_interface_name_),\n      fmt::format(\"iptables -A OUTPUT -o {} -p tcp --dport 853 -j DROP\",\n          detected_out_interface_name_),\n      // Block DoT IPv6\n      fmt::format(\"ip6tables -A OUTPUT -o {} -p udp --dport 853 -j DROP\",\n          detected_out_interface_name_),\n      fmt::format(\"ip6tables -A OUTPUT -o {} -p tcp --dport 853 -j DROP\",\n          detected_out_interface_name_),\n      // Also allow DNS to specific DNS server IP\n      fmt::format(\"iptables -A OUTPUT -d {} -p udp --dport 53 -j ACCEPT\",\n          dns_server_ipv4_.ToString()),\n      fmt::format(\"iptables -A OUTPUT -d {} -p tcp --dport 53 -j ACCEPT\",\n          dns_server_ipv4_.ToString()),\n      // DNS via resolvectl\n      fmt::format(\"resolvectl resolv-conf false\"),\n      fmt::format(\"resolvectl dns {} {}\", detected_out_interface_name_,\n          dns_server_ipv4_.ToString()),\n      fmt::format(\n          \"resolvectl default-route {} false\", detected_out_interface_name_),\n      fmt::format(\"resolvectl dns {} {}\", tun_interface_name_,\n          dns_server_ipv4_.ToString()),\n      fmt::format(\"resolvectl default-route {} true\", tun_interface_name_),\n      fmt::format(\"resolvectl domain {} ~.\", tun_interface_name_),\n      fmt::format(R\"(bash -c \"chattr -i /etc/resolv.conf\")\"),\n      fmt::format(\n          R\"(bash -c \"grep -q '^nameserver {}$' /etc/resolv.conf || sed -i '1i nameserver {}' /etc/resolv.conf\")\",\n          dns_server_ipv6_.ToString(), dns_server_ipv6_.ToString()),\n      fmt::format(\n          R\"(bash -c \"grep -q '^nameserver {}$' /etc/resolv.conf || sed -i '1i nameserver {}' /etc/resolv.conf\")\",\n          dns_server_ipv4_.ToString(), dns_server_ipv4_.ToString()),\n      fmt::format(R\"(bash -c \"chattr +i /etc/resolv.conf\")\"),\n      fmt::format(\"resolvectl flush-caches\")};\n\n#elif __APPLE__\n  const std::vector<std::string> commands = {\n      fmt::format(\n          R\"(bash -c \"networksetup -listallnetworkservices | grep -v '^An asterisk' | grep -v '^\\* ' | xargs -I {{}} networksetup -setdnsservers '{{}}' empty\")\",\n          dns_server_ipv4_.ToString()),  // clean DNS\n      fmt::format(\"sysctl -w net.inet.ip.forwarding=1\"),\n      fmt::format(\"sysctl -w net.inet6.ip6.forwarding=1\"),\n      fmt::format(\n          R\"(bash -c \"printf 'nat on {findOutInterfaceName} from {tunInterfaceName}:network to any -> ({findOutInterfaceName})\nnat on {findOutInterfaceName} inet6 from {tunInterfaceName}:network to any -> ({findOutInterfaceName})\npass out on {findOutInterfaceName} proto tcp from any to {vpnServerIP}\npass in on {findOutInterfaceName} proto tcp from {vpnServerIP} to any\npass in on {tunInterfaceName} proto tcp from any to any\npass out on {tunInterfaceName} proto tcp from any to any\npass in on {tunInterfaceName} proto udp from any to any\npass out on {tunInterfaceName} proto udp from any to any\npass in on {tunInterfaceName} proto udp from any to any port 53\npass out on {tunInterfaceName} proto udp from any to any port 53\npass in on {tunInterfaceName} proto tcp from any to any port 53\npass out on {tunInterfaceName} proto tcp from any to any port 53\n' > /tmp/pf.conf\")\",\n          fmt::arg(\"findOutInterfaceName\", detected_out_interface_name_),\n          fmt::arg(\"tunInterfaceName\", tun_interface_name_),\n          fmt::arg(\"vpnServerIP\", vpn_server_ip_.ToString())),\n      fmt::format(\"pfctl -ef /tmp/pf.conf\"),\n      // IPv4 default & DNS route\n      fmt::format(\n          \"route add -net 0.0.0.0/1 -interface {}\", tun_interface_name_),\n      fmt::format(\n          \"route add -net 128.0.0.0/1 -interface {}\", tun_interface_name_),\n      fmt::format(\"route add -host {} -interface {}\",\n          dns_server_ipv4_.ToString(), tun_interface_name_),  // via TUN\n      // IPv6 routes\n      fmt::format(\n          \"route add -inet6 -net ::0/1 -interface {}\", tun_interface_name_),\n      fmt::format(\n          \"route add -inet6 -net 8000::/1 -interface {}\", tun_interface_name_),\n      fmt::format(\"route add -inet6 default -interface {} 2>/dev/null || true\",\n          tun_interface_name_),\n      fmt::format(\"route add -inet6 -host {} -interface {}\",\n          dns_server_ipv6_.ToString(), tun_interface_name_),\n      // DNS IPv6 route\n      fmt::format(\"route add -inet6 -host {} -interface {}\",\n          dns_server_ipv6_.ToString(), tun_interface_name_),\n      // exclude vpn server & networks\n      fmt::format(\"route add -host {} {}\", vpn_server_ip_.ToString(),\n          detected_gateway_ipv4_.ToString()),\n      // DNS\n      fmt::format(\"dscacheutil -flushcache\"),\n      fmt::format(\n          R\"(bash -c \"networksetup -listallnetworkservices | grep -v '^An asterisk' | grep -v '^\\* ' | xargs -I {{}} networksetup -setdnsservers '{{}}' {} {}\")\",\n          dns_server_ipv6_.ToString(), dns_server_ipv4_.ToString())};\n\n#elif _WIN32\n  const std::string win_interface_number =\n      GetWindowsInterfaceNumber(tun_interface_name_);\n  const std::string interface_info =\n      win_interface_number.empty() ? \"\" : \" if \" + win_interface_number;\n  const std::string backup_dns_cmd = R\"PSHELL(powershell -Command \"\n    if (-not (Test-Path \\\"$env:TEMP\\\\fptn_orig_dns.txt\\\")) {\n      $interface = ')PSHELL\" + detected_out_interface_name_ +\n                                     R\"PSHELL(';\n      if (-not $interface) { $interface = ''; }\n      if ($interface) {\n        # IPv4\n        $netshIPv4 = netsh interface ipv4 show dnsservers \\\"$interface\\\" 2>`$null;\n        if ($netshIPv4 -match 'DHCP') {\n          $output = @{IPv4='DHCP'};\n        } else {\n          $dns4 = Get-DnsClientServerAddress -InterfaceAlias $interface -AddressFamily IPv4 2>`$null | Select-Object -ExpandProperty ServerAddresses;\n          if ($dns4) {\n            $output = @{IPv4=($dns4 -join ',')};\n          }\n        }\n        # IPv6\n        $netshIPv6 = netsh interface ipv6 show dnsservers \\\"$interface\\\" 2>`$null;\n        if ($netshIPv6 -match 'DHCP') {\n          $output.IPv6 = 'DHCP';\n        } else {\n          $dns6 = Get-DnsClientServerAddress -InterfaceAlias $interface -AddressFamily IPv6 2>`$null | Select-Object -ExpandProperty ServerAddresses;\n          if ($dns6) {\n            $output.IPv6 = $dns6 -join ',';\n          }\n        }\n        if ($output) {\n          $output | ConvertTo-Json | Out-File \\\"$env:TEMP\\\\fptn_orig_dns.txt\\\" -Encoding UTF8;\n        }\n      }\n    }\")PSHELL\";\n\n  const std::string configure_dns_cmd = R\"PSHELL(powershell -Command \"\n    $dns4 = ')PSHELL\" + dns_server_ipv4_.ToString() +\n                                        R\"PSHELL(';\n    $dns6 = ')PSHELL\" + dns_server_ipv6_.ToString() +\n                                        R\"PSHELL(';\n    $interface = ')PSHELL\" + detected_out_interface_name_ +\n                                        R\"PSHELL(';\n    if (-not $interface) { $interface = ''; }\n    if ($interface) {\n      # IPv4\n      Set-DnsClientServerAddress -InterfaceAlias $interface -ServerAddresses $dns4 -ErrorAction SilentlyContinue;\n      netsh interface ipv4 set dnsservers name=\\\"$interface\\\" source=static address=$dns4 validate=no register=no 2>`$null;\n      # IPv6\n      Set-DnsClientServerAddress -InterfaceAlias $interface -ServerAddresses $dns6 -ErrorAction SilentlyContinue;\n      netsh interface ipv6 set dnsservers name=\\\"$interface\\\" source=static address=$dns6 validate=no register=no 2>`$null;\n  }\")PSHELL\";\n\n  const std::vector<std::string> commands = {\n      fmt::format(\"route add {} mask 255.255.255.255 {} METRIC 2\",\n          vpn_server_ip_.ToString(), detected_gateway_ipv4_.ToString()),\n      // Default gateway & dns\n      fmt::format(\"route add 0.0.0.0 mask 0.0.0.0 {} METRIC 1 {}\",\n          tun_interface_address_ipv4_.ToString(), interface_info),\n      fmt::format(\"route add {} mask 255.255.255.255 {} METRIC 2 {}\",\n          dns_server_ipv4_.ToString(), tun_interface_address_ipv4_.ToString(),\n          interface_info),  // via TUN\n      // DNS\n      enable_advanced_dns_management_ ? backup_dns_cmd\n                                      : \"echo \\\"No advanced DNS management\\\" \",\n      enable_advanced_dns_management_ ? configure_dns_cmd\n                                      : \"echo \\\"No advanced DNS management\\\" \",\n      fmt::format(\"netsh interface ip set dns name=\\\"{}\\\" static {}\",\n          tun_interface_name_, dns_server_ipv4_.ToString()),\n      // IPv6\n      fmt::format(\"netsh interface ipv6 add route ::/0 \\\"{}\\\" \\\"{}\\\" \",\n          tun_interface_name_, tun_interface_address_ipv6_.ToString()),\n      fmt::format(\"netsh interface ipv6 add dnsservers=\\\"{}\\\" \\\"{}\\\" index=1\",\n          tun_interface_name_, dns_server_ipv6_.ToString()),\n      // Flush DNS cache\n      \"ipconfig /flushdns\"};\n\n#else\n#error \"Unsupported system!\"\n#endif\n  try {\n    for (const auto& cmd : commands) {\n      fptn::common::system::command::run(cmd);\n    }\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"IPTables error: {}\", e.what());\n  } catch (...) {\n    SPDLOG_ERROR(\"Undefined error\");\n  }\n  SPDLOG_INFO(\"=== Routing setup completed successfully ===\");\n  return true;\n}\n\nbool RouteManager::Clean() {  // NOLINT(bugprone-exception-escape)\n  if (!running_) {\n    SPDLOG_INFO(\"No need to clean rules!\");\n    return true;\n  }\n\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  running_ = false;\n\n  // clean dns ipv4\n  for (const auto& ip : dns_routes_ipv4_) {\n    std::string interface_name;\n    if (ip.policy == RoutingPolicy::kExcludeFromVpn) {\n      if (!detected_out_interface_name_.empty()) {\n        interface_name = detected_out_interface_name_;\n      } else if (!out_interface_name_.empty()) {\n        interface_name = out_interface_name_;\n      } else {\n        interface_name = GetDefaultNetworkInterfaceName();\n      }\n    } else {\n      interface_name = tun_interface_name_;\n    }\n    RemoveIPv4RouteFromSystem(\n        ip.destination, gateway_ipv4_.ToString(), interface_name);\n  }\n  dns_routes_ipv4_.clear();\n\n  // clean dns ipv6\n  for (const auto& ip : dns_routes_ipv6_) {\n    std::string interface_name;\n    if (ip.policy == RoutingPolicy::kExcludeFromVpn) {\n      if (!detected_out_interface_name_.empty()) {\n        interface_name = detected_out_interface_name_;\n      } else if (!out_interface_name_.empty()) {\n        interface_name = out_interface_name_;\n      } else {\n        interface_name = GetDefaultNetworkInterfaceName();\n      }\n    } else {\n      interface_name = tun_interface_name_;\n    }\n    RemoveIPv6RouteFromSystem(\n        ip.destination, gateway_ipv6_.ToString(), interface_name);\n  }\n  dns_routes_ipv6_.clear();\n\n  // clean route ipv4\n  for (const auto& route : additional_routes_ipv4_) {\n    if (route.policy == RoutingPolicy::kExcludeFromVpn) {\n      RemoveIPv4RouteFromSystem(\n          route.destination, gateway_ipv4_.ToString(), out_interface_name_);\n    } else {\n      // Include route - remove through VPN interface\n      RemoveIPv4RouteFromSystem(route.destination,\n          tun_interface_address_ipv4_.ToString(), tun_interface_name_);\n    }\n  }\n  additional_routes_ipv4_.clear();\n\n  // Remove additional IPv6 routes\n  for (const auto& route : additional_routes_ipv6_) {\n    if (route.policy == RoutingPolicy::kExcludeFromVpn) {\n      RemoveIPv6RouteFromSystem(\n          route.destination, gateway_ipv6_.ToString(), out_interface_name_);\n    } else {\n      // Include route - remove through VPN interface\n      RemoveIPv6RouteFromSystem(route.destination,\n          tun_interface_address_ipv6_.ToString(), tun_interface_name_);\n    }\n  }\n  additional_routes_ipv6_.clear();\n\n#ifdef __linux__\n  std::vector<std::string> commands = {\n      fmt::format(\"iptables -t nat -D POSTROUTING -o {} -j MASQUERADE\",\n          detected_out_interface_name_),\n      fmt::format(\"iptables -D FORWARD -i {} -o {} -m state --state \"\n                  \"RELATED,ESTABLISHED -j ACCEPT\",\n          detected_out_interface_name_, tun_interface_name_),\n      fmt::format(\"iptables -D FORWARD -i {} -o {} -j ACCEPT\",\n          tun_interface_name_, detected_out_interface_name_),\n      fmt::format(\"iptables -D OUTPUT -o {} -d {} -j ACCEPT\",\n          detected_out_interface_name_, vpn_server_ip_.ToString()),\n      fmt::format(\"iptables -D INPUT -i {} -s {} -j ACCEPT\",\n          detected_out_interface_name_, vpn_server_ip_.ToString()),\n      // del routes\n      fmt::format(\"ip route del default dev {}\", tun_interface_name_),\n      fmt::format(\"ip route del {} via {} dev {}\", vpn_server_ip_.ToString(),\n          detected_gateway_ipv4_.ToString(), detected_out_interface_name_),\n      // Delete DNS server route\n      fmt::format(\"ip route del {} dev {}\", dns_server_ipv4_.ToString(),\n          tun_interface_name_),\n      fmt::format(\n          R\"(bash -c \"chattr -i /etc/resolv.conf; sed -i '/^nameserver {}$/d' /etc/resolv.conf; sed -i '/^nameserver {}$/d' /etc/resolv.conf\")\",\n          dns_server_ipv4_.ToString(), dns_server_ipv6_.ToString()),\n      // Delete DNS to specific DNS server IP rules\n      fmt::format(\"iptables -D OUTPUT -d {} -p udp --dport 53 -j ACCEPT\",\n          dns_server_ipv4_.ToString()),\n      fmt::format(\"iptables -D OUTPUT -d {} -p tcp --dport 53 -j ACCEPT\",\n          dns_server_ipv4_.ToString()),\n      // Delete DNS block rules IPv4\n      fmt::format(\"iptables -D OUTPUT -o {} -p udp --dport 53 -j DROP\",\n          detected_out_interface_name_),\n      fmt::format(\"iptables -D OUTPUT -o {} -p tcp --dport 53 -j DROP\",\n          detected_out_interface_name_),\n      fmt::format(\"iptables -D OUTPUT -o {} -p udp --dport 853 -j DROP\",\n          detected_out_interface_name_),\n      fmt::format(\"iptables -D OUTPUT -o {} -p tcp --dport 853 -j DROP\",\n          detected_out_interface_name_),\n      // Delete DNS block rules IPv6\n      fmt::format(\"ip6tables -D OUTPUT -o {} -p udp --dport 53 -j DROP\",\n          detected_out_interface_name_),\n      fmt::format(\"ip6tables -D OUTPUT -o {} -p tcp --dport 53 -j DROP\",\n          detected_out_interface_name_),\n      fmt::format(\"ip6tables -D OUTPUT -o {} -p udp --dport 853 -j DROP\",\n          detected_out_interface_name_),\n      fmt::format(\"ip6tables -D OUTPUT -o {} -p tcp --dport 853 -j DROP\",\n          detected_out_interface_name_),\n      // Delete TUN allow rules IPv4\n      fmt::format(\"iptables -D OUTPUT -o {} -p udp --sport 53 -j ACCEPT\",\n          tun_interface_name_),\n      fmt::format(\"iptables -D OUTPUT -o {} -p tcp --sport 53 -j ACCEPT\",\n          tun_interface_name_),\n      // Delete TUN allow rules IPv6\n      fmt::format(\"ip6tables -D OUTPUT -o {} -p udp --sport 53 -j ACCEPT\",\n          tun_interface_name_),\n      fmt::format(\"ip6tables -D OUTPUT -o {} -p tcp --sport 53 -j ACCEPT\",\n          tun_interface_name_)};\n\n  // Restore DNS\n  if (!original_dns_servers_.empty()) {\n    std::string all_dns;\n    for (const auto& dns : original_dns_servers_) {\n      if (!all_dns.empty()) {\n        all_dns += \" \";\n      }\n      all_dns += dns;\n    }\n    commands.push_back(fmt::format(\n        \"resolvectl dns {} {}\", detected_out_interface_name_, all_dns));\n    commands.push_back(\n        fmt::format(\"resolvectl domain {} .\", detected_out_interface_name_));\n    commands.push_back(fmt::format(\n        \"resolvectl default-route {} true\", detected_out_interface_name_));\n    SPDLOG_INFO(\"Restoring {} DNS servers for {}\", original_dns_servers_.size(),\n        detected_out_interface_name_);\n  } else {\n    commands.push_back(\n        fmt::format(\"resolvectl revert {}\", detected_out_interface_name_));\n    SPDLOG_INFO(\"Reverting DNS to DHCP for {}\", detected_out_interface_name_);\n  }\n  commands.emplace_back(\"resolvectl flush-caches\");\n\n#elif __APPLE__\n  const std::vector<std::string> commands = {\n      fmt::format(\n          R\"(bash -c \"networksetup -listallnetworkservices | grep -v '^An asterisk' | grep -v '^\\* ' | xargs -I {{}} networksetup -setdnsservers '{{}}' empty\")\"),  // clean DNS\n      fmt::format(\"pfctl -F all -f /etc/pf.conf\"),\n      // del routes\n      fmt::format(\"route delete -host {} -interface {}\",\n          dns_server_ipv4_.ToString(),\n          tun_interface_name_),  // via TUN\n      fmt::format(\n          \"route delete -net 0.0.0.0/1 -interface {}\", tun_interface_name_),\n      fmt::format(\n          \"route delete -net 128.0.0.0/1 -interface {}\", tun_interface_name_),\n      // del IPv6 routes\n      fmt::format(\n          \"route delete -inet6 -net ::0/1 -interface {}\", tun_interface_name_),\n      fmt::format(\"route delete -inet6 -net 8000::/1 -interface {}\",\n          tun_interface_name_),\n      fmt::format(\"route delete -host {} {}\", vpn_server_ip_.ToString(),\n          detected_gateway_ipv4_.ToString()),\n      // DNS\n      fmt::format(\n          R\"(bash -c \"networksetup -listallnetworkservices | grep -v '^An asterisk' | grep -v '^\\* ' | xargs -I {{}} networksetup -setdnsservers '{{}}' empty\")\")  // clean DNS\n  };\n#elif _WIN32\n  std::string current_interface_name = detected_out_interface_name_;\n  if (current_interface_name.empty()) {\n    current_interface_name = out_interface_name_;\n  }\n  if (current_interface_name.empty()) {\n    current_interface_name = GetDefaultNetworkInterfaceName();\n  }\n  const std::string restore_dns_cmd = R\"PSHELL(powershell -Command \"\n    $interface = ')PSHELL\" + current_interface_name +\n                                      R\"PSHELL(';\n    if ($interface) {\n        if (Test-Path \\\"$env:TEMP\\\\fptn_orig_dns.txt\\\") {\n            $config = Get-Content \\\"$env:TEMP\\\\fptn_orig_dns.txt\\\" -Raw | ConvertFrom-Json;\n            # IPv4\n            if ($config.IPv4 -eq 'DHCP') {\n                netsh interface ip set dns \\\"$interface\\\" dhcp\n            } elseif ($config.IPv4) {\n                $dns4Servers = $config.IPv4 -split ',' | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne '' };\n                if ($dns4Servers.Count -gt 0) {\n                    netsh interface ip set dns \\\"$interface\\\" static $($dns4Servers[0])\n                    if ($dns4Servers.Count -gt 1) {\n                        netsh interface ip add dns \\\"$interface\\\" $($dns4Servers[1]) index=2\n                    }\n                }\n            }\n            # IPv6\n            if ($config.IPv6 -eq 'DHCP') {\n                netsh interface ipv6 set dnsservers \\\"$interface\\\" dhcp\n            } elseif ($config.IPv6) {\n                $dns6Servers = $config.IPv6 -split ',' | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne '' };\n                if ($dns6Servers.Count -gt 0) {\n                    netsh interface ipv6 set dnsservers \\\"$interface\\\" static $($dns6Servers[0]) primary\n                    if ($dns6Servers.Count -gt 1) {\n                        netsh interface ipv6 add dnsservers \\\"$interface\\\" $($dns6Servers[1]) index=2\n                    }\n                }\n            }\n            Remove-Item \\\"$env:TEMP\\\\fptn_orig_dns.txt\\\" -Force\n        } else {\n            netsh interface ip set dns \\\"$interface\\\" dhcp\n            netsh interface ipv6 set dnsservers \\\"$interface\\\" dhcp\n        }\n    }\")PSHELL\";\n\n  const std::vector<std::string> commands = {\n      enable_advanced_dns_management_ ? restore_dns_cmd\n                                      : \"echo \\\"No advanced DNS management\\\" \",\n      // Remove routes\n      fmt::format(\n          \"route delete {} mask 255.255.255.255\", vpn_server_ip_.ToString()),\n      fmt::format(\"route delete 0.0.0.0 mask 0.0.0.0\"),\n      fmt::format(\n          \"route delete {} mask 255.255.255.255\", dns_server_ipv4_.ToString()),\n      fmt::format(\n          \"netsh interface ipv6 delete route ::/0 \\\"{}\\\"\", tun_interface_name_),\n\n      // Final cleanup\n      \"ipconfig /flushdns\",\n\n      // restore routing\n      fmt::format(\"route add 0.0.0.0 mask 0.0.0.0 {} METRIC 1\",\n          detected_gateway_ipv4_.ToString())};\n\n#else\n#error \"Unsupported system!\"\n#endif\n  try {\n    for (const auto& cmd : commands) {\n      fptn::common::system::command::run(cmd);\n    }\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"IPTables error: {}\", e.what());\n  } catch (...) {\n    SPDLOG_ERROR(\"Undefined error\");\n  }\n  running_ = false;\n  return true;\n}\n\nbool RouteManager::AddDnsRoutesIPv4(\n    const std::vector<fptn::common::network::IPv4Address>& ips,\n    const RoutingPolicy policy) {\n  std::string interface_name;\n  std::string gateway_ip;\n\n  if (policy == RoutingPolicy::kExcludeFromVpn) {\n    if (!detected_out_interface_name_.empty()) {\n      interface_name = detected_out_interface_name_;\n    } else if (!out_interface_name_.empty()) {\n      interface_name = out_interface_name_;\n    } else {\n      interface_name = GetDefaultNetworkInterfaceName();\n    }\n    gateway_ip = gateway_ipv4_.ToString();\n  } else {\n    interface_name = tun_interface_name_;\n    gateway_ip = tun_interface_address_ipv4_.ToString();\n  }\n  if (interface_name.empty()) {\n    interface_name = fptn::routing::GetDefaultNetworkInterfaceName();\n  }\n\n  if (interface_name.empty()) {\n    SPDLOG_WARN(\n        \"Cannot add DNS IPv4 routes: interface name is empty for policy {}\",\n        policy == RoutingPolicy::kExcludeFromVpn ? \"EXCLUDE\" : \"INCLUDE\");\n    return false;\n  }\n\n  std::vector<RouteEntry> entries_to_add;\n  {\n    const std::unique_lock<std::mutex> lock(mutex_);\n\n    for (const auto& ip : ips) {\n      std::string ip_str = ip.ToString();\n      RouteEntry entry{.destination = ip_str, .policy = policy};\n\n      if (!dns_routes_ipv4_.contains(entry)) {\n        dns_routes_ipv4_.insert(entry);\n        entries_to_add.push_back(std::move(entry));\n      }\n    }\n  }\n\n  if (entries_to_add.empty()) {\n    return true;\n  }\n\n  bool status = true;\n  for (const auto& entry : entries_to_add) {\n    try {\n      const bool rv =\n          AddIPv4RouteToSystem(entry.destination, gateway_ip, interface_name);\n\n      if (rv) {\n        const std::string policy_str = (policy == RoutingPolicy::kExcludeFromVpn\n                                            ? \"EXCLUDE (bypass VPN)\"\n                                            : \"INCLUDE (through VPN)\");\n        SPDLOG_INFO(\"DNS route added: {} [{}]\", entry.destination, policy_str);\n      } else {\n        SPDLOG_WARN(\"Failed to add DNS route: {}\", entry.destination);\n\n        const std::unique_lock<std::mutex> lock(mutex_);\n        dns_routes_ipv4_.erase(entry);\n        status = false;\n      }\n    } catch (const std::exception& e) {\n      SPDLOG_WARN(\"Exception adding DNS IPv4 route {}: {}\", entry.destination,\n          e.what());\n\n      const std::unique_lock<std::mutex> lock(mutex_);\n      dns_routes_ipv4_.erase(entry);\n      status = false;\n    }\n  }\n\n  return status;\n}\n\nbool RouteManager::AddDnsRoutesIPv6(\n    const std::vector<fptn::common::network::IPv6Address>& ips,\n    const RoutingPolicy policy) {\n  std::string interface_name;\n  std::string gateway_ip;\n\n  if (policy == RoutingPolicy::kExcludeFromVpn) {\n    if (!detected_out_interface_name_.empty()) {\n      interface_name = detected_out_interface_name_;\n    } else if (!out_interface_name_.empty()) {\n      interface_name = out_interface_name_;\n    } else {\n      interface_name = GetDefaultNetworkInterfaceName();\n    }\n    gateway_ip = gateway_ipv6_.ToString();\n  } else {\n    interface_name = tun_interface_name_;\n    gateway_ip = tun_interface_address_ipv6_.ToString();\n  }\n\n  if (interface_name.empty()) {\n    SPDLOG_WARN(\n        \"Cannot add DNS IPv6 routes: interface name is empty for policy {}\",\n        policy == RoutingPolicy::kExcludeFromVpn ? \"EXCLUDE\" : \"INCLUDE\");\n    return false;\n  }\n\n  if (gateway_ip.empty()) {\n    SPDLOG_WARN(\"Cannot add DNS IPv6 routes: gateway IP is empty for policy {}\",\n        policy == RoutingPolicy::kExcludeFromVpn ? \"EXCLUDE\" : \"INCLUDE\");\n    return false;\n  }\n\n  std::vector<RouteEntry> entries_to_add;\n  {\n    const std::unique_lock<std::mutex> lock(mutex_);\n\n    for (const auto& ip : ips) {\n      std::string ip_str = ip.ToString();\n      RouteEntry entry{.destination = ip_str, .policy = policy};\n\n      if (!dns_routes_ipv6_.contains(entry)) {\n        dns_routes_ipv6_.insert(entry);\n        entries_to_add.push_back(std::move(entry));\n      }\n    }\n  }\n\n  if (entries_to_add.empty()) {\n    return true;\n  }\n\n  bool status = true;\n  for (const auto& entry : entries_to_add) {\n    try {\n      const bool rv =\n          AddIPv6RouteToSystem(entry.destination, gateway_ip, interface_name);\n\n      if (rv) {\n        const std::string policy_str = (policy == RoutingPolicy::kExcludeFromVpn\n                                            ? \"EXCLUDE (bypass VPN)\"\n                                            : \"INCLUDE (through VPN)\");\n        SPDLOG_INFO(\n            \"DNS IPv6 route added: {} [{}]\", entry.destination, policy_str);\n      } else {\n        SPDLOG_WARN(\"Failed to add DNS IPv6 route: {}\", entry.destination);\n        status = false;\n      }\n    } catch (const std::exception& e) {\n      SPDLOG_WARN(\"Exception adding DNS IPv6 route {}: {}\", entry.destination,\n          e.what());\n      status = false;\n    }\n  }\n  return status;\n}\n\nbool RouteManager::AddExcludeNetworks(\n    const std::vector<std::string>& networks) {\n  std::vector<std::pair<std::string, bool>> networks_to_add;\n  {\n    const std::unique_lock<std::mutex> lock(mutex_);\n\n    for (const auto& network : networks) {\n      if (network.empty()) {\n        continue;\n      }\n\n      const bool is_ipv6 = network.find(':') != std::string::npos;  // NOLINT\n      RouteEntry entry{\n          .destination = network, .policy = RoutingPolicy::kExcludeFromVpn};\n\n      if (is_ipv6) {\n        if (!additional_routes_ipv6_.contains(entry)) {\n          networks_to_add.emplace_back(network, true);\n          additional_routes_ipv6_.insert(entry);\n        }\n      } else {\n        if (!additional_routes_ipv4_.contains(entry)) {\n          networks_to_add.emplace_back(network, false);\n          additional_routes_ipv4_.insert(entry);\n        }\n      }\n    }\n    if (networks_to_add.empty()) {\n      return true;\n    }\n  }\n\n  const std::string interface_name = !detected_out_interface_name_.empty()\n                                         ? detected_out_interface_name_\n                                         : out_interface_name_;\n\n  bool all_success = true;\n  for (const auto& [network, is_ipv6] : networks_to_add) {\n    try {\n      bool success = false;\n\n      if (is_ipv6) {\n        success = AddIPv6RouteToSystem(\n            network, gateway_ipv6_.ToString(), interface_name);\n      } else {\n        success = AddIPv4RouteToSystem(\n            network, gateway_ipv4_.ToString(), interface_name);\n      }\n\n      if (success) {\n        SPDLOG_INFO(\n            \"Added {} exclude network: {}\", is_ipv6 ? \"IPv6\" : \"IPv4\", network);\n      } else {\n        SPDLOG_WARN(\"Failed to add route: {}\", network);\n        all_success = false;\n      }\n    } catch (const std::exception& e) {\n      SPDLOG_WARN(\"Failed to add exclude network '{}': {}\", network, e.what());\n\n      const std::unique_lock<std::mutex> lock(mutex_);\n      RouteEntry entry{\n          .destination = network, .policy = RoutingPolicy::kExcludeFromVpn};\n      if (is_ipv6) {\n        additional_routes_ipv6_.erase(entry);\n      } else {\n        additional_routes_ipv4_.erase(entry);\n      }\n      all_success = false;\n    }\n  }\n  return all_success;\n}\n\nbool RouteManager::AddIncludeNetworks(\n    const std::vector<std::string>& networks) {\n  std::vector<std::pair<std::string, bool>> networks_to_add;\n  {\n    const std::unique_lock<std::mutex> lock(mutex_);\n\n    for (const auto& network : networks) {\n      if (network.empty()) {\n        continue;\n      }\n\n      const bool is_ipv6 = network.find(':') != std::string::npos;  // NOLINT\n      RouteEntry entry{\n          .destination = network, .policy = RoutingPolicy::kIncludeInVpn};\n\n      if (is_ipv6) {\n        if (!additional_routes_ipv6_.contains(entry)) {\n          networks_to_add.emplace_back(network, true);\n          additional_routes_ipv6_.insert(entry);\n        }\n      } else {\n        if (!additional_routes_ipv4_.contains(entry)) {\n          networks_to_add.emplace_back(network, false);\n          additional_routes_ipv4_.insert(entry);\n        }\n      }\n    }\n    if (networks_to_add.empty()) {\n      return true;\n    }\n  }\n\n  bool all_success = true;\n  for (const auto& [network, is_ipv6] : networks_to_add) {\n    try {\n      bool success = false;\n\n      if (is_ipv6) {\n        success = AddIPv6RouteToSystem(network,\n            tun_interface_address_ipv6_.ToString(), tun_interface_name_);\n      } else {\n        success = AddIPv4RouteToSystem(network,\n            tun_interface_address_ipv4_.ToString(), tun_interface_name_);\n      }\n\n      if (success) {\n        SPDLOG_INFO(\n            \"Added {} include network: {}\", is_ipv6 ? \"IPv6\" : \"IPv4\", network);\n      } else {\n        SPDLOG_ERROR(\"Failed to add route: {}\", network);\n        all_success = false;\n      }\n    } catch (const std::exception& e) {\n      SPDLOG_WARN(\"Failed to add include network '{}': {}\", network, e.what());\n      all_success = false;\n    }\n  }\n\n  return all_success;\n}\n\n// NOLINT(bugprone-exception-escape)\nfptn::common::network::IPv4Address fptn::routing::ResolveDomain(\n    const std::string& domain) {\n  try {\n    try {\n      // error test\n      boost::asio::ip::make_address(domain);\n      return fptn::common::network::IPv4Address::Create(domain);\n    } catch (const std::exception&) {  // NOLINT(bugprone-empty-catch)\n      // Not a valid IP address, proceed with domain name resolution\n    }\n    boost::asio::io_context io_context;\n    boost::asio::ip::tcp::resolver resolver(io_context);\n    boost::asio::ip::tcp::resolver::results_type endpoints =\n        resolver.resolve(domain, \"\");\n    for (const auto& endpoint : endpoints) {\n      return fptn::common::network::IPv4Address(\n          endpoint.endpoint().address().to_string());\n    }\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"Error resolving domain: {}\", e.what());\n  }\n  return fptn::common::network::IPv4Address(domain);\n}\n\nfptn::common::network::IPv4Address fptn::routing::GetDefaultGatewayIPAddress() {\n  try {\n#ifdef __linux__\n    const std::string command = \"ip route get 8.8.8.8 | awk '{print $3; exit}'\";\n#elif __APPLE__\n    const std::string command =\n        \"route get 8.8.8.8 | grep gateway | awk '{print $2}' \";\n#elif _WIN32\n    const std::string command =\n        R\"(cmd.exe /c FOR /f \"tokens=3\" %i in ('route print ^| find \"0.0.0.0\"') do @echo %i)\";\n#else\n#error \"Unsupported system!\"\n#endif\n    std::vector<std::string> cmd_stdout;\n    fptn::common::system::command::run(command, cmd_stdout);\n    for (const auto& line : cmd_stdout) {\n      std::string result = line;\n      result.erase(\n          // NOLINTNEXTLINE(modernize-use-ranges)\n          std::remove_if(result.begin(), result.end(),\n              [](char c) {\n                /* Allow: a-z, A-Z, 0-9, dot, dash */\n                return !std::isalnum(c) && c != '.' && c != '-' && c != '_';\n              }),\n          result.end());\n      if (!result.empty()) {\n        return ResolveDomain(result);\n      }\n    }\n  } catch (const std::exception& ex) {\n    SPDLOG_ERROR(\"Error: Failed to retrieve the default gateway IP address. {}\",\n        ex.what());\n  }\n  return {};\n}\n\nfptn::common::network::IPv6Address\nfptn::routing::GetDefaultGatewayIPv6Address() {\n  try {\n#ifdef __linux__\n    const std::string command =\n        \"ip -6 route | grep default | head -1 | awk '{print $3}'\";\n#elif __APPLE__\n    const std::string command =\n        \"route get -inet6 default | grep gateway | awk '{print $2}'\";\n#elif _WIN32\n    const std::string command =\n        R\"(netsh interface ipv6 show routes | find \"::/0\" | head -1 | awk \"{print $3}\")\";\n#else\n    return {};\n#endif\n    std::vector<std::string> cmd_stdout;\n    fptn::common::system::command::run(command, cmd_stdout);\n\n    for (const auto& line : cmd_stdout) {\n      std::string result = line;\n      std::erase_if(result, [](const char c) {\n        return !std::isalnum(c) && c != ':' && c != '.' && c != '-';\n      });\n      if (!result.empty()) {\n        return fptn::common::network::IPv6Address::Create(result);\n      }\n    }\n  } catch (const std::exception& ex) {\n    SPDLOG_ERROR(\"Error getting IPv6 gateway: {}\", ex.what());\n  }\n  return {};\n}\n\nstd::string fptn::routing::GetDefaultNetworkInterfaceName() {\n  std::string result;\n  try {\n#ifdef __linux__\n    const std::string command =\n        \"ip route get 8.8.8.8 | awk '{print $5; exit}' \";\n#elif __APPLE__\n    const std::string command =\n        \"route get 8.8.8.8 | grep interface | awk '{print $2}' \";\n#elif _WIN32\n    const std::string command =\n        R\"(powershell -Command \"(Get-NetRoute -DestinationPrefix '0.0.0.0/0' | Where-Object {$_.NextHop -ne '0.0.0.0'} | Select-Object -First 1).InterfaceAlias\")\";\n#endif\n    std::vector<std::string> cmd_stdout;\n    fptn::common::system::command::run(command, cmd_stdout);\n    if (cmd_stdout.empty()) {\n      SPDLOG_WARN(\"Warning: Default gateway IP address not found.\");\n      return {};\n    }\n    for (const auto& line : cmd_stdout) {\n      result = line;\n      result.erase(result.find_last_not_of(\" \\n\\r\\t\") + 1);\n      result.erase(0, result.find_first_not_of(\" \\n\\r\\t\"));\n    }\n  } catch (const std::exception& ex) {\n    SPDLOG_ERROR(\"Error: Failed to retrieve the default gateway IP address. {}\",\n        ex.what());\n  }\n  return result;\n}\n"
  },
  {
    "path": "src/fptn-client/routing/route_manager.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <atomic>\n#include <memory>\n#include <mutex>\n#include <string>\n#include <unordered_set>\n#include <vector>\n\n#include \"common/network/ip_address.h\"\n\nnamespace fptn::routing {\nstd::string GetDefaultNetworkInterfaceName();\nfptn::common::network::IPv4Address GetDefaultGatewayIPAddress();\nfptn::common::network::IPv4Address ResolveDomain(const std::string& domain);\n\nfptn::common::network::IPv6Address GetDefaultGatewayIPv6Address();\n\nenum class RoutingPolicy {\n  kExcludeFromVpn,  // Traffic bypasses VPN\n  kIncludeInVpn     // Traffic goes through VPN\n};\n\nclass RouteManager final {\n protected:\n  struct RouteEntry {\n    std::string destination;\n    RoutingPolicy policy;\n\n    bool operator==(const RouteEntry& other) const {\n      return destination == other.destination && policy == other.policy;\n    }\n\n    struct Hash {\n      std::size_t operator()(const RouteEntry& entry) const {\n        return std::hash<std::string>{}(entry.destination) ^\n               (std::hash<int>{}(static_cast<int>(entry.policy)) << 1);\n      }\n    };\n  };\n\n public:\n  RouteManager(std::string out_interface_name,\n      std::string tun_interface_name,\n      fptn::common::network::IPv4Address vpn_server_ip,\n      fptn::common::network::IPv4Address dns_server_ipv4,\n      fptn::common::network::IPv6Address dns_server_ipv6,\n      fptn::common::network::IPv4Address gateway_ipv4,\n      fptn::common::network::IPv6Address gateway_ipv6,\n      fptn::common::network::IPv4Address tun_interface_address_ipv4,\n      fptn::common::network::IPv6Address tun_interface_address_ipv6\n#if _WIN32\n      ,\n      bool enable_advanced_dns_management_\n#endif\n  );  // NOLINT\n  ~RouteManager();\n\n  void UpdateTunInterfaceName(const std::string& name) {\n    tun_interface_name_ = name;\n  }\n\n  bool Apply();\n  bool Clean();\n\n  bool AddDnsRoutesIPv4(\n      const std::vector<fptn::common::network::IPv4Address>& ips,\n      RoutingPolicy policy);\n\n  bool AddDnsRoutesIPv6(\n      const std::vector<fptn::common::network::IPv6Address>& ips,\n      RoutingPolicy policy);\n\n  bool AddExcludeNetworks(const std::vector<std::string>& networks);\n  bool AddIncludeNetworks(const std::vector<std::string>& networks);\n\n private:\n  mutable std::mutex mutex_;\n  std::atomic<bool> running_;\n\n  const std::string out_interface_name_;\n  std::string tun_interface_name_;\n  const fptn::common::network::IPv4Address vpn_server_ip_;\n  const fptn::common::network::IPv4Address dns_server_ipv4_;\n  const fptn::common::network::IPv6Address dns_server_ipv6_;\n  const fptn::common::network::IPv4Address gateway_ipv4_;\n  const fptn::common::network::IPv6Address gateway_ipv6_;\n  const fptn::common::network::IPv4Address tun_interface_address_ipv4_;\n  const fptn::common::network::IPv6Address tun_interface_address_ipv6_;\n\n#if _WIN32\n  const bool enable_advanced_dns_management_;\n#endif\n\n  std::unordered_set<RouteEntry, RouteEntry::Hash> dns_routes_ipv4_;\n  std::unordered_set<RouteEntry, RouteEntry::Hash> dns_routes_ipv6_;\n\n  std::unordered_set<RouteEntry, RouteEntry::Hash> additional_routes_ipv4_;\n  std::unordered_set<RouteEntry, RouteEntry::Hash> additional_routes_ipv6_;\n\n private:\n  std::string detected_out_interface_name_;\n  fptn::common::network::IPv4Address detected_gateway_ipv4_;\n\n#ifdef __linux__\n  std::vector<std::string> original_dns_servers_;\n#endif\n};\n\nusing RouteManagerSPtr = std::shared_ptr<RouteManager>;\n}  // namespace fptn::routing\n"
  },
  {
    "path": "src/fptn-client/utils/brotli/brotli.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <string>\n#include <vector>\n\n#include <brotli/decode.h>  // NOLINT(build/include_order)\n\nnamespace fptn::utils::brotli {\ninline std::string Decompress(const std::string& compressed_data) {\n  const std::size_t encoded_size = compressed_data.size();\n  std::size_t decoded_size = encoded_size * 30;\n\n  while (true) {\n    std::vector<std::uint8_t> decoded_buffer(decoded_size);\n    std::size_t available_out = decoded_size;\n\n    const BROTLI_BOOL result = BrotliDecoderDecompress(encoded_size,\n        reinterpret_cast<const uint8_t*>(compressed_data.data()),\n        &available_out, decoded_buffer.data());\n    if (result == BROTLI_TRUE) {\n      return std::string(\n          reinterpret_cast<char*>(decoded_buffer.data()), available_out);\n    }\n    decoded_size *= 2;\n  }\n}\n}  // namespace fptn::utils::brotli\n"
  },
  {
    "path": "src/fptn-client/utils/macos/admin.h",
    "content": "#pragma once\n\n/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include <string>\n#include <iostream>\n\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\n#ifdef __APPLE__\n\n#include <Security/Authorization.h>      // NOLINT(build/include_order)\n#include <Security/AuthorizationTags.h>  // NOLINT(build/include_order)\n#include <libgen.h>                      // NOLINT(build/include_order)\n#include <libproc.h>                     // NOLINT(build/include_order)\n#include <mach-o/dyld.h>                 // NOLINT(build/include_order)\n#include <sys/sysctl.h>                  // NOLINT(build/include_order)\n\nnamespace fptn::utils::macos {\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated-declarations\"\n\nbool RestartApplicationWithAdminRights() {\n  // Already running as root? No need to restart.\n  if (geteuid() == 0) {\n    return true;\n  }\n\n  // Initialize AuthorizationRef\n  AuthorizationRef auth_ref = nullptr;\n  OSStatus status = AuthorizationCreate(nullptr, kAuthorizationEmptyEnvironment,\n      kAuthorizationFlagDefaults, &auth_ref);\n\n  if (status != errAuthorizationSuccess) {\n    std::cerr << \"Failed to create authorization reference.\\n\";\n    return false;\n  }\n\n  // Request admin rights\n  const char* kAdminRights[] = {kAuthorizationRightExecute,\n      \"system.preferences\", \"system.preferences.network\",\n      \"system.services.systemconfiguration.network\"};\n\n  AuthorizationItem rights[4] = {};\n  for (size_t i = 0; i < 4; ++i) {\n    rights[i] = {kAdminRights[i], 0, nullptr, 0};\n  }\n\n  AuthorizationRights rights_set = {4, rights};\n  AuthorizationFlags flags = kAuthorizationFlagDefaults |\n                             kAuthorizationFlagInteractionAllowed |\n                             kAuthorizationFlagExtendRights;\n\n  status =\n      AuthorizationCopyRights(auth_ref, &rights_set, nullptr, flags, nullptr);\n  if (status != errAuthorizationSuccess) {\n    AuthorizationFree(auth_ref, kAuthorizationFlagDefaults);\n    std::cerr << \"Failed to obtain admin rights.\\n\";\n    return false;\n  }\n\n  // Get current executable path\n  char executablePath[PATH_MAX] = {};\n  uint32_t pathSize = sizeof(executablePath);\n  if (_NSGetExecutablePath(executablePath, &pathSize) != 0) {\n    AuthorizationFree(auth_ref, kAuthorizationFlagDefaults);\n    std::cerr << \"Failed to get executable path.\\n\";\n    return false;\n  }\n\n  // Restart with privileges\n  char* args[] = {const_cast<char*>(executablePath), nullptr};\n  status = AuthorizationExecuteWithPrivileges(\n      auth_ref, executablePath, kAuthorizationFlagDefaults, args, nullptr);\n\n  AuthorizationFree(auth_ref, kAuthorizationFlagDefaults);\n\n  if (status != errAuthorizationSuccess) {\n    std::cerr << \"Failed to restart with admin rights.\\n\";\n    return false;\n  }\n  // Exit the current instance (only the elevated one will continue)\n  exit(EXIT_SUCCESS);\n  return true;\n}\n#pragma clang diagnostic pop\n\n}  // namespace fptn::utils::macos\n\n#endif\n"
  },
  {
    "path": "src/fptn-client/utils/signal/main_loop.h",
    "content": "#pragma once\n\n/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include <boost/asio.hpp>\n#include <boost/process.hpp>\n\n#include \"vpn/vpn_client.h\"\n\nnamespace fptn::utils {\n\nvoid WaitForSignal(fptn::vpn::VpnClient& vpn_client) {\n  boost::asio::io_context io_context;\n  boost::asio::signal_set signals(io_context, SIGINT, SIGTERM);\n\n  boost::asio::steady_timer check_timer(io_context);\n\n  std::function<void()> check_connection = [&]() {\n    if (!vpn_client.IsStarted()) {\n      SPDLOG_ERROR(\"VPN connection lost! Exiting...\");\n      io_context.stop();\n      return;\n    }\n\n    check_timer.expires_after(std::chrono::seconds(1));\n    check_timer.async_wait([&](const boost::system::error_code& ec) {\n      if (!ec) {\n        check_connection();\n      }\n    });\n  };\n\n  signals.async_wait([&](auto, auto) { io_context.stop(); });\n  check_timer.expires_after(std::chrono::seconds(1));\n  check_timer.async_wait([&](const boost::system::error_code& ec) {\n    if (!ec) {\n      check_connection();\n    }\n  });\n  io_context.run();\n}\n}  // namespace fptn::utils\n"
  },
  {
    "path": "src/fptn-client/utils/speed_estimator/server_info.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <string>\n#include <utility>\n\nnamespace fptn::utils::speed_estimator {\n\nstruct ServerInfo {\n  std::string name;\n  std::string host;\n  int port;\n  bool is_using;\n  std::string md5_fingerprint;\n\n  std::string username;\n  std::string password;\n  std::string service_name;\n\n  ServerInfo() : port(0), is_using(false) {}\n\n  ServerInfo(std::string _name,\n      std::string _host,\n      int _port,\n      std::string _md5_fingerprint)\n      : name(std::move(_name)),\n        host(std::move(_host)),\n        port(_port),\n        is_using(false),\n        md5_fingerprint(std::move(_md5_fingerprint)) {}\n};\n\n}  // namespace fptn::utils::speed_estimator\n"
  },
  {
    "path": "src/fptn-client/utils/speed_estimator/speed_estimator.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"fptn-client/utils/speed_estimator/speed_estimator.h\"\n\n#include <algorithm>\n#include <atomic>\n#include <condition_variable>\n#include <future>\n#include <memory>\n#include <mutex>\n#include <random>\n#include <string>\n#include <thread>\n#include <vector>\n\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\n#include \"fptn-protocol-lib/https/api_client/api_client.h\"\n\nusing fptn::protocol::https::ApiClient;\nusing fptn::utils::speed_estimator::ServerInfo;\n\nconstexpr std::uint64_t kMaxTimeout = UINT64_MAX;\n\nnamespace fptn::utils::speed_estimator {\n\nstd::uint64_t GetDownloadTimeMs(const ServerInfo& server,\n    const std::string& sni,\n    int timeout,\n    const std::string& md5_fingerprint,\n    fptn::protocol::https::CensorshipStrategy censorship_strategy) {\n  try {\n    auto const start = std::chrono::high_resolution_clock::now();\n    ApiClient cli(\n        server.host, server.port, sni, md5_fingerprint, censorship_strategy);\n    auto const resp = cli.Get(\"/api/v1/test/file.bin\", timeout);\n    if (resp.code == 200) {\n      auto const end = std::chrono::high_resolution_clock::now();\n      const std::uint64_t ms =\n          std::chrono::duration_cast<std::chrono::milliseconds>(end - start)\n              .count();\n      return ms;\n    }\n  } catch (const std::exception& ex) {\n    SPDLOG_WARN(\"Exception in GetDownloadTimeMs: {}\", ex.what());\n  } catch (...) {\n    SPDLOG_WARN(\"Unknown exception in GetDownloadTimeMs\");\n  }\n  return kMaxTimeout;\n}\n\nServerInfo FindFastestServer(const std::string& sni,\n    const std::vector<ServerInfo>& servers,\n    fptn::protocol::https::CensorshipStrategy censorship_strategy,\n    int timeout_sec) {\n  // randomly select half of the servers\n  std::vector<ServerInfo> shuffled_servers = servers;\n  std::random_device rd;\n  std::mt19937 generator(rd());\n  std::ranges::shuffle(shuffled_servers, generator);\n  const std::size_t half_size =\n      std::max<std::size_t>(1, shuffled_servers.size() / 2);\n  std::vector<ServerInfo> selected_servers(\n      shuffled_servers.begin(), shuffled_servers.begin() + half_size);\n\n  // Create promises and futures for all requests\n  std::vector<std::promise<std::uint64_t>> promises(selected_servers.size());\n  std::vector<std::future<std::uint64_t>> futures;\n  futures.reserve(selected_servers.size());\n\n  for (auto& promise : promises) {\n    // cppcheck-suppress useStlAlgorithm\n    futures.push_back(promise.get_future());\n  }\n\n  // Launch all requests\n  for (std::size_t i = 0; i < selected_servers.size(); ++i) {\n    // NOLINTNEXTLINE(bugprone-exception-escape)\n    std::thread([&promise = promises[i], server = selected_servers[i], sni,\n                    timeout_sec, censorship_strategy]() {\n      try {\n        const auto time_ms = GetDownloadTimeMs(server, sni, timeout_sec,\n            server.md5_fingerprint, censorship_strategy);\n        promise.set_value(time_ms);\n      } catch (...) {  // NOLINT\n        // Set max timeout in case of exception\n        promise.set_value(kMaxTimeout);\n      }\n    }).detach();\n  }\n\n  // Wait for all futures with timeout\n  std::vector<std::uint64_t> times;\n  times.reserve(futures.size());\n\n  const auto deadline =\n      std::chrono::steady_clock::now() + std::chrono::seconds(timeout_sec + 2);\n\n  for (auto& future : futures) {\n    if (future.wait_until(deadline) == std::future_status::ready) {\n      times.push_back(future.get());\n    } else {\n      // Timeout for this future\n      times.push_back(kMaxTimeout);\n    }\n  }\n\n  // Find fastest server\n  const auto min_it = std::ranges::min_element(times);\n  if (min_it == times.end() || *min_it == kMaxTimeout) {\n    throw std::runtime_error(\"All servers unavailable!\");\n  }\n\n  return selected_servers[std::distance(times.begin(), min_it)];\n}\n\n}  // namespace fptn::utils::speed_estimator\n"
  },
  {
    "path": "src/fptn-client/utils/speed_estimator/speed_estimator.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <cstdint>\n#include <string>\n#include <vector>\n\n#include \"fptn-client/utils/speed_estimator/server_info.h\"\n#include \"fptn-protocol-lib/https/censorship_strategy.h\"\n#include \"fptn-protocol-lib/https/obfuscator/methods/obfuscator_interface.h\"\n\nnamespace fptn::utils::speed_estimator {\n\nstd::uint64_t GetDownloadTimeMs(const ServerInfo& server,\n    const std::string& sni,\n    int timeout,\n    const std::string& md5_fingerprint,\n    fptn::protocol::https::CensorshipStrategy censorship_strategy);\n\nServerInfo FindFastestServer(const std::string& sni,\n    const std::vector<ServerInfo>& servers,\n    fptn::protocol::https::CensorshipStrategy censorship_strategy,\n    int timeout_sec = 15);\n\n};  // namespace fptn::utils::speed_estimator\n"
  },
  {
    "path": "src/fptn-client/utils/utils.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <string>\n\n#include <re2/re2.h>  // NOLINT(build/include_order)\n\n#include \"common/utils/utils.h\"\n\nnamespace fptn::utils {\n\ninline std::string DomainToRegex(const std::string& pattern) {\n  const std::string domain_prefix = \"domain:\";\n  const std::string trimmed = fptn::common::utils::Trim(pattern);\n\n  if (!trimmed.starts_with(domain_prefix)) {\n    return {};\n  }\n\n  const std::string domain = trimmed.substr(domain_prefix.length());\n  if (domain.empty()) {\n    return {};\n  }\n\n  std::string escaped;\n  escaped.reserve(domain.length() * 2);\n  for (const char c : fptn::common::utils::ToLowerCase(domain)) {\n    if (c == '.') {\n      escaped += \"\\\\.\";\n    } else {\n      escaped += c;\n    }\n  }\n  // return R\"(\\.)\" + escaped + R\"($)\";\n  // return R\"((?:^|\\.))\" + escaped + R\"((?:\\.|$)?)\";\n  return R\"((?:^|\\.))\" + escaped + R\"($)\";\n}\n}  // namespace fptn::utils\n"
  },
  {
    "path": "src/fptn-client/utils/windows/vpn_conflict.h",
    "content": "#pragma once\n\n/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include <string>\n#include <vector>\n\n#include \"common/system/command.h\"\n\nnamespace fptn::utils::windows {\n\ninline bool HasVpnConflicts(std::string& found_adapters) {\n  found_adapters = \"\";\n\n  // Command to list network interfaces that might indicate VPN conflicts\n  constexpr char command[] =\n      \"powershell.exe -Command \\\"Get-NetAdapter | Where-Object { \"\n      \"$_.InterfaceDescription -match 'VPN|TAP|WireGuard|OpenVPN|Tunnel' -and \"\n      \"$_.Status -eq 'Up' } | Select-Object -ExpandProperty Name\\\"\";\n\n\n  std::vector<std::string> adapter_names;\n  fptn::common::system::command::run(command, adapter_names);\n\n  // Check if any VPN-related interfaces were found\n  for (const auto& name : adapter_names) {\n    if (!name.empty()) {\n      if (found_adapters.empty()) {\n        found_adapters = name;\n      } else {\n        found_adapters += \", \" + name;\n      }\n    }\n  }\n  return !found_adapters.empty();\n}\n\n}  // namespace fptn::utils::windows\n"
  },
  {
    "path": "src/fptn-client/vpn/http/client.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"vpn/http/client.h\"\n\n#include <memory>\n#include <string>\n#include <utility>\n\n#include <boost/process/v1/io.hpp>\n#include <fmt/format.h>  // NOLINT(build/include_order)\n#include <nlohmann/json.hpp>\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\n#include \"common/network/ip_address.h\"\n\n#include \"fptn-protocol-lib/https/api_client/api_client.h\"\n#include \"fptn-protocol-lib/https/obfuscator/methods/tls/tls_obfuscator.h\"\n#include \"routing/route_manager.h\"\n\nusing fptn::common::network::IPv4Address;\nusing fptn::common::network::IPv6Address;\nusing fptn::protocol::https::ApiClient;\nusing fptn::vpn::http::Client;\n\nClient::Client(IPv4Address server_ip,\n    int server_port,\n    IPv4Address tun_interface_address_ipv4,\n    IPv6Address tun_interface_address_ipv6,\n    std::string sni,\n    std::string md5_fingerprint,\n    fptn::protocol::https::CensorshipStrategy censorship_strategy,\n    NewIPPacketCallback new_ip_pkt_callback)\n    : running_(false),\n      server_ip_(std::move(server_ip)),\n      server_port_(server_port),\n      tun_interface_address_ipv4_(std::move(tun_interface_address_ipv4)),\n      tun_interface_address_ipv6_(std::move(tun_interface_address_ipv6)),\n      sni_(std::move(sni)),\n      md5_fingerprint_(std::move(md5_fingerprint)),\n      censorship_strategy_(censorship_strategy),\n      new_ip_pkt_callback_(std::move(new_ip_pkt_callback)),\n      reconnection_attempts_(kMaxReconnectionAttempts_) {}\n\nClient::~Client() { Stop(); }\n\nbool Client::Login(\n    const std::string& username, const std::string& password, int timeout_sec) {\n  const std::string request = fmt::format(\n      R\"({{ \"username\": \"{}\", \"password\": \"{}\" }})\", username, password);\n\n  const std::string ip = server_ip_.ToString();\n  ApiClient cli(ip, server_port_, sni_, md5_fingerprint_, censorship_strategy_);\n\n  const auto resp =\n      cli.Post(\"/api/v1/login\", request, \"application/json\", timeout_sec);\n  if (resp.code == 200) {\n    try {\n      const auto msg = resp.Json();\n      if (!msg.contains(\"access_token\")) {\n        SPDLOG_ERROR(\n            \"Error: Access token not found in the response. Check your \"\n            \"conection\");\n      } else {\n        access_token_ = msg[\"access_token\"];\n        SPDLOG_INFO(\"Login successful\");\n        return true;\n      }\n    } catch (const nlohmann::json::parse_error& e) {\n      latest_error_ = e.what();\n      SPDLOG_ERROR(\"Error parsing JSON response: {} \", e.what());\n    } catch (const std::exception& ex) {\n      latest_error_ = ex.what();\n      SPDLOG_ERROR(\"Exception: {}\", ex.what());\n    }\n  } else {\n    latest_error_ = resp.errmsg;\n    SPDLOG_ERROR(\n        \"Error: Request failed code: {} msg: {}\", resp.code, resp.errmsg);\n  }\n  return false;\n}\n\nstd::pair<IPv4Address, IPv6Address> Client::GetDns() {\n  SPDLOG_INFO(\"Obtained DNS server address. Connecting to {}:{}\",\n      server_ip_.ToString(), server_port_);\n\n  const std::string ip = server_ip_.ToString();\n  ApiClient cli(ip, server_port_, sni_, md5_fingerprint_, censorship_strategy_);\n\n  const auto resp = cli.Get(\"/api/v1/dns\");\n  if (resp.code == 200) {\n    try {\n      const auto msg = resp.Json();\n      if (!msg.contains(\"dns\")) {\n        SPDLOG_ERROR(\n            \"Error: dns not found in the response. Check your connection\");\n      } else {\n        const std::string dns_ipv4 = msg[\"dns\"];\n        const std::string dns_ipv6 =\n            (msg.contains(\"dns_ipv6\") ? msg[\"dns_ipv6\"]\n                                      : FPTN_SERVER_DEFAULT_ADDRESS_IP6);\n        return {IPv4Address(dns_ipv4), IPv6Address(dns_ipv6)};\n      }\n    } catch (const nlohmann::json::parse_error& e) {\n      latest_error_ = e.what();\n      SPDLOG_ERROR(\"Error parsing JSON response: {}\", e.what());\n    } catch (const std::exception& ex) {\n      latest_error_ = ex.what();\n      SPDLOG_ERROR(\"Exception: {}\", ex.what());\n    }\n  } else {\n    latest_error_ = resp.errmsg;\n    SPDLOG_ERROR(\n        \"Error: Request failed code: {} msg: {}\", resp.code, resp.errmsg);\n  }\n  return {IPv4Address(), IPv6Address()};\n}\n\nvoid Client::SetRecvIPPacketCallback(\n    const NewIPPacketCallback& callback) noexcept {\n  new_ip_pkt_callback_ = callback;\n}\n\nbool Client::Send(fptn::common::network::IPPacketPtr packet) const {\n  try {\n    const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n    if (ws_ && running_) {\n      ws_->Send(std::move(packet));\n      return true;\n    }\n  } catch (const std::runtime_error& err) {\n    SPDLOG_ERROR(\"Send error: {}\", err.what());\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"Exception occurred: {}\", e.what());\n  }\n  return false;\n}\n\nvoid Client::Run() {\n  // Time window for counting attempts (1 minute)\n  constexpr auto kReconnectionWindow = std::chrono::seconds(120);\n  // Delay between reconnection attempts\n  constexpr auto kReconnectionDelay = std::chrono::milliseconds(300);\n\n  // Current count of reconnection attempts\n  reconnection_attempts_ = kMaxReconnectionAttempts_;\n  auto window_start_time = std::chrono::steady_clock::now();\n\n  while (running_ && reconnection_attempts_ > 0) {\n    {\n      const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n      // cppcheck-suppress identicalInnerCondition\n      if (running_) {  // Double-check after acquiring lock\n        ws_ = std::make_shared<fptn::protocol::https::WebsocketClient>(\n            server_ip_, server_port_, tun_interface_address_ipv4_,\n            tun_interface_address_ipv6_, new_ip_pkt_callback_, sni_,\n            access_token_, md5_fingerprint_, censorship_strategy_, nullptr, 32);\n      }\n    }\n\n    if (running_ && ws_) {\n      ws_->Run();  // Start the WebSocket client\n    }\n\n    if (!running_) {\n      break;\n    }\n\n    // clean\n    if (ws_) {\n      const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n      // cppcheck-suppress knownConditionTrueFalse\n      if (ws_ && running_) {\n        ws_->Stop();\n        ws_.reset();\n      }\n    }\n\n    // Calculate time since last window start\n    const auto current_time = std::chrono::steady_clock::now();\n    const auto elapsed = current_time - window_start_time;\n\n    // Reconnection attempt counting logic\n    if (elapsed >= kReconnectionWindow) {\n      // Reset counter if we're past the time window\n      SPDLOG_INFO(\"Reconnection window reset. New attempt window started\");\n      reconnection_attempts_ = kMaxReconnectionAttempts_;\n      window_start_time = current_time;\n    }\n    if (reconnection_attempts_ > 0) {\n      --reconnection_attempts_;\n    }\n    // Log connection failure and wait before retrying\n    SPDLOG_ERROR(\n        \"Connection closed (attempt {}/{} in current window). Reconnecting in \"\n        \"{}ms...\",\n        kMaxReconnectionAttempts_ - reconnection_attempts_,\n        kMaxReconnectionAttempts_, kReconnectionDelay.count());\n\n    std::this_thread::sleep_for(kReconnectionDelay);\n  }\n\n  if (running_ && !reconnection_attempts_) {\n    SPDLOG_ERROR(\"Connection failure: Could not establish connection\");\n  }\n}\n\nbool Client::Start() {\n  running_ = true;\n  th_ = std::thread(&Client::Run, this);\n  return th_.joinable();\n}\n\nbool Client::Stop() {\n  if (!running_) {\n    return false;\n  }\n\n  SPDLOG_INFO(\"Stopping client\");\n  {\n    const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n    if (!running_) {  // Double-check after acquiring lock\n      return false;\n    }\n    running_ = false;\n  }\n\n  if (ws_) {\n    ws_->Stop();\n  }\n\n  if (th_.joinable()) {\n    try {\n      th_.join();\n    } catch (...) {\n      SPDLOG_WARN(\"Unexpected exception during thread join\");\n    }\n  }\n\n  ws_.reset();\n  return true;\n}\n\nbool Client::IsStarted() const {\n  return running_ && reconnection_attempts_ > 0;\n}\n\nconst std::string& Client::LatestError() const { return latest_error_; }\n"
  },
  {
    "path": "src/fptn-client/vpn/http/client.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <functional>\n#include <memory>\n#include <mutex>\n#include <string>\n#include <thread>\n#include <utility>\n\n#include \"common/network/ip_address.h\"\n#include \"common/network/ip_packet.h\"\n\n#include \"fptn-protocol-lib/https/censorship_strategy.h\"\n#include \"fptn-protocol-lib/https/websocket_client/websocket_client.h\"\n\nnamespace fptn::vpn::http {\n\nusing IPv4Address = fptn::common::network::IPv4Address;\nusing IPv6Address = fptn::common::network::IPv6Address;\n\nclass Client final {\n public:\n  using NewIPPacketCallback =\n      std::function<void(fptn::common::network::IPPacketPtr packet)>;\n\n public:\n  Client(IPv4Address server_ip,\n      int server_port,\n      IPv4Address tun_interface_address_ipv4,\n      IPv6Address tun_interface_address_ipv6,\n      std::string sni,\n      std::string md5_fingerprint,\n      fptn::protocol::https::CensorshipStrategy censorship_strategy,\n      NewIPPacketCallback new_ip_pkt_callback = nullptr);\n  ~Client();\n  bool Login(const std::string& username,\n      const std::string& password,\n      int timeout_sec = 15);\n  std::pair<IPv4Address, IPv6Address> GetDns();\n  bool Start();\n  bool Stop();\n  bool Send(fptn::common::network::IPPacketPtr packet) const;\n  void SetRecvIPPacketCallback(const NewIPPacketCallback& callback) noexcept;\n  bool IsStarted() const;\n\n  const std::string& LatestError() const;\n\n protected:\n  void Run();\n\n private:\n  const int kMaxReconnectionAttempts_ = 15;\n\n  std::thread th_;\n  mutable std::mutex mutex_;\n  std::atomic<bool> running_;\n\n  const IPv4Address server_ip_;\n  const int server_port_;\n\n  const IPv4Address tun_interface_address_ipv4_;\n  const IPv6Address tun_interface_address_ipv6_;\n  const std::string sni_;\n  const std::string md5_fingerprint_;\n\n  fptn::protocol::https::CensorshipStrategy censorship_strategy_;\n\n  NewIPPacketCallback new_ip_pkt_callback_;\n\n  std::string access_token_;\n  fptn::protocol::https::WebsocketClientSPtr ws_;\n\n  std::string latest_error_;\n\n  std::atomic<int> reconnection_attempts_;\n};\n\nusing ClientPtr = std::unique_ptr<Client>;\n}  // namespace fptn::vpn::http\n"
  },
  {
    "path": "src/fptn-client/vpn/vpn_client.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"vpn/vpn_client.h\"\n\n#include <functional>\n#include <memory>\n#include <string>\n#include <utility>\n\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\nnamespace fptn::vpn {\n\nVpnClient::VpnClient(fptn::vpn::http::ClientPtr http_client,\n    fptn::common::network::TunInterfacePtr virtual_net_interface,\n    fptn::common::network::IPv4Address dns_server_ipv4,\n    fptn::common::network::IPv6Address dns_server_ipv6,\n    fptn::plugin::PluginList plugins,\n    std::size_t thread_pool_size)\n    : running_(false),\n      http_client_(std::move(http_client)),\n      virtual_net_interface_(std::move(virtual_net_interface)),\n      dns_server_ipv4_(std::move(dns_server_ipv4)),\n      dns_server_ipv6_(std::move(dns_server_ipv6)),\n      plugins_(std::move(plugins)),\n      thread_pool_size_(thread_pool_size) {}  // NOLINT\n\nVpnClient::~VpnClient() { Stop(); }\n\nbool VpnClient::IsStarted() {\n  if (!running_) {\n    return false;\n  }\n\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  return running_ && http_client_ && http_client_->IsStarted();\n}\n\nbool VpnClient::Start() {\n  if (running_) {\n    return false;\n  }\n\n  {\n    const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n    // cppcheck-suppress identicalConditionAfterEarlyExit\n    if (running_) {\n      return false;\n    }\n  }\n\n  // NOLINTNEXTLINE(modernize-avoid-bind)\n  http_client_->SetRecvIPPacketCallback(std::bind(\n      &VpnClient::HandlePacketFromWebSocket, this, std::placeholders::_1));\n\n  virtual_net_interface_->SetRecvIPPacketCallback(\n      // NOLINTNEXTLINE(modernize-avoid-bind)\n      std::bind(&VpnClient::HandlePacketFromVirtualNetworkInterface, this,\n          std::placeholders::_1));\n\n  http_client_->Start();\n  virtual_net_interface_->Start();\n  running_ = true;\n\n  // Start workers\n  worker_threads_.reserve(thread_pool_size_);\n  for (std::size_t i = 0; i < thread_pool_size_; ++i) {\n    worker_threads_.emplace_back(&VpnClient::ProcessWebSocketPackets, this);\n  }\n\n  return true;\n}\n\nbool VpnClient::Stop() {\n  if (!running_) {\n    return false;\n  }\n  {\n    const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n    // cppcheck-suppress identicalConditionAfterEarlyExit\n    if (!running_) {\n      return false;\n    }\n\n    running_ = false;\n  }\n\n  ws_queue_cv_.notify_all();\n\n  SPDLOG_INFO(\"Stopping VPN Websocket-workers...\");\n\n  for (auto& thread : worker_threads_) {\n    if (thread.joinable()) {\n      thread.join();\n    }\n  }\n  worker_threads_.clear();\n\n  SPDLOG_INFO(\"Stopping VPN client...\");\n\n  if (virtual_net_interface_) {\n    SPDLOG_INFO(\"Stopping virtual network interface\");\n    virtual_net_interface_->Stop();\n    virtual_net_interface_.reset();\n    SPDLOG_DEBUG(\"Virtual network interface stopped successfully\");\n  }\n\n  if (http_client_) {\n    SPDLOG_INFO(\"Stopping HTTP client\");\n    http_client_->Stop();\n    http_client_.reset();\n    SPDLOG_DEBUG(\"HTTP client stopped successfully\");\n  }\n  return true;\n}\n\nstd::size_t VpnClient::GetSendRate() {\n  if (!running_) {\n    return 0;\n  }\n\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  if (running_ && virtual_net_interface_) {\n    return virtual_net_interface_->GetSendRate();\n  }\n  return 0;\n}\n\nstd::size_t VpnClient::GetReceiveRate() {\n  if (!running_) {\n    return 0;\n  }\n\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  if (running_ && virtual_net_interface_) {\n    return virtual_net_interface_->GetReceiveRate();\n  }\n  return 0;\n}\n\nstd::string VpnClient::GetInterfaceName() const {\n  if (virtual_net_interface_) {\n    return virtual_net_interface_->Name();\n  }\n  return {};\n}\n\nvoid VpnClient::HandlePacketFromVirtualNetworkInterface(\n    fptn::common::network::IPPacketPtr packet) {\n  if (!running_) {\n    return;\n  }\n\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  if (running_ && http_client_) {\n    http_client_->Send(std::move(packet));\n  }\n}\n\nvoid VpnClient::HandlePacketFromWebSocket(\n    fptn::common::network::IPPacketPtr packet) {\n  if (!running_ || !packet) {\n    return;\n  }\n\n  constexpr std::size_t kMaxQueueSize = 128;\n\n  std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  if (ws_packet_queue_.size() >= kMaxQueueSize) {\n    SPDLOG_WARN(\"WebSocket packet queue is full, dropping packet\");\n    return;\n  }\n\n  ws_packet_queue_.push(std::move(packet));\n  lock.unlock();\n  ws_queue_cv_.notify_one();\n}\n\nvoid VpnClient::ProcessWebSocketPackets() {\n  fptn::common::network::IPPacketPtr packet;\n  while (running_) {\n    {\n      std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n      ws_queue_cv_.wait(\n          lock, [this]() { return !ws_packet_queue_.empty() || !running_; });\n      if (!running_ && ws_packet_queue_.empty()) {\n        break;\n      }\n      if (!ws_packet_queue_.empty()) {\n        packet = std::move(ws_packet_queue_.front());\n        ws_packet_queue_.pop();\n      }\n    }\n\n    if (!packet) {\n      continue;\n    }\n\n    // Обрабатываем пакет через плагины\n    if (running_ && !plugins_.empty()) {\n      for (const auto& plugin : plugins_) {\n        if (packet) {\n          auto [processed_packet, triggered] =\n              plugin->HandlePacket(std::move(packet));\n          packet = std::move(processed_packet);\n          if (triggered) {\n            break;\n          }\n        }\n      }\n    }\n\n    if (running_ && packet) {\n      const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n      // cppcheck-suppress knownConditionTrueFalse\n      if (running_ && virtual_net_interface_) {\n        virtual_net_interface_->Send(std::move(packet));\n      }\n    }\n  }\n}\n}  // namespace fptn::vpn\n"
  },
  {
    "path": "src/fptn-client/vpn/vpn_client.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <condition_variable>\n#include <memory>\n#include <mutex>\n#include <queue>\n#include <string>\n#include <vector>\n\n#include <openssl/base.h>  // NOLINT(build/include_order)\n#include \"common/network/ip_address.h\"\n#include \"common/network/ip_packet.h\"\n#include \"common/network/net_interface.h\"\n\n#include \"http/client.h\"\n#include \"plugins/split/tunneling.h\"\n\nnamespace fptn::vpn {\nclass VpnClient final {\n public:\n  explicit VpnClient(fptn::vpn::http::ClientPtr http_client,\n      fptn::common::network::TunInterfacePtr virtual_net_interface,\n      fptn::common::network::IPv4Address dns_server_ipv4,\n      fptn::common::network::IPv6Address dns_server_ipv6,\n      fptn::plugin::PluginList plugins,\n      std::size_t thread_pool_size = 4);\n  ~VpnClient();\n  bool Start();\n  bool Stop();\n  std::size_t GetSendRate();\n  std::size_t GetReceiveRate();\n  bool IsStarted();\n  [[nodiscard]] std::string GetInterfaceName() const;\n\n protected:\n  void HandlePacketFromVirtualNetworkInterface(\n      fptn::common::network::IPPacketPtr packet);\n  void HandlePacketFromWebSocket(fptn::common::network::IPPacketPtr packet);\n\n  void ProcessWebSocketPackets();\n\n private:\n  mutable std::mutex mutex_;\n  std::atomic<bool> running_;\n\n  fptn::vpn::http::ClientPtr http_client_;\n  fptn::common::network::TunInterfacePtr virtual_net_interface_;\n  const fptn::common::network::IPv4Address dns_server_ipv4_;\n  const fptn::common::network::IPv6Address dns_server_ipv6_;\n\n  const fptn::plugin::PluginList plugins_;\n\n  const std::size_t thread_pool_size_;\n  std::vector<std::thread> worker_threads_;\n  std::condition_variable ws_queue_cv_;\n  std::queue<fptn::common::network::IPPacketPtr> ws_packet_queue_;\n};\n\nusing VpnClientPtr = std::unique_ptr<fptn::vpn::VpnClient>;\n}  // namespace fptn::vpn\n"
  },
  {
    "path": "src/fptn-passwd/CMakeLists.txt",
    "content": "project(fptn-passwd)\n\ninclude_directories(${CMAKE_CURRENT_SOURCE_DIR})\n\nfind_package(Boost REQUIRED)\nfind_package(OpenSSL REQUIRED)\nfind_package(argparse REQUIRED)\n\nadd_executable(\"${PROJECT_NAME}\" fptn-passwd.cpp)\n\ntarget_link_libraries(\"${PROJECT_NAME}\" PRIVATE OpenSSL::SSL OpenSSL::Crypto argparse::argparse)\n"
  },
  {
    "path": "src/fptn-passwd/fptn-passwd.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include <iostream>\n#include <string>\n#include <termios.h>  // NOLINT(build/include_order)\n#include <unistd.h>   // NOLINT(build/include_order)\n\n#include <argparse/argparse.hpp>\n\n#include \"common/user/common_user_manager.h\"\n\nnamespace {\nstd::string GetPassword(const std::string& prompt) {\n  std::string password;\n  struct termios oldt = {};\n\n  std::cout << prompt;\n  tcgetattr(STDIN_FILENO, &oldt);\n  struct termios newt = oldt;\n  newt.c_lflag &= ~(ECHO);  // Turn off echo\n  tcsetattr(STDIN_FILENO, TCSANOW, &newt);\n  std::getline(std::cin, password);\n  tcsetattr(STDIN_FILENO, TCSANOW, &oldt);\n  std::cout << std::endl;\n\n  return password;\n}\n}  // namespace\n\nint main(int argc, char* argv[]) {\n  if (geteuid() != 0) {\n    std::cerr << \"You must be root to run this program.\" << std::endl;\n    return EXIT_FAILURE;\n  }\n  try {\n    argparse::ArgumentParser parser(\"fptn-passwd\", FPTN_VERSION);\n    parser.add_argument(\"--add-user\").help(\"Username to add\");\n    parser.add_argument(\"--del-user\").help(\"Username to delete\");\n    parser.add_argument(\"--bandwidth\")\n        .help(\"Bandwidth limit for the user in Megabit (default: 100)\")\n        .default_value(100)\n        .scan<'i', int>();\n    parser.add_argument(\"--userfile\")\n        .help(\"Path to users file (default: /etc/fptn/users.list)\")\n        .default_value(\"/etc/fptn/users.list\");\n    parser.add_argument(\"--list\")\n        .help(\"List all users\")\n        .default_value(false)\n        .implicit_value(true);\n    parser.add_argument(\"--get-bandwidth\")\n        .help(\"Get bandwidth limit for a user\");\n    parser.parse_args(argc, argv);\n    const auto add_user =\n        parser.present<std::string>(\"--add-user\").value_or(\"\");\n    const auto del_user =\n        parser.present<std::string>(\"--del-user\").value_or(\"\");\n    const auto bandwidth = parser.get<int>(\"--bandwidth\");\n    const auto file_path = parser.get<std::string>(\"--userfile\");\n    const bool list = parser.get<bool>(\"--list\");\n    const auto get_bandwidth_user =\n        parser.present<std::string>(\"--get-bandwidth\").value_or(\"\");\n\n    fptn::common::user::CommonUserManager user_manager(file_path);\n\n    if (!add_user.empty()) {\n      const std::string password = GetPassword(\"Type password: \");\n      const std::string retype_password = GetPassword(\"Retype password: \");\n      if (password != retype_password) {\n        std::cout << \"Passwords do not match.\" << std::endl;\n        return 1;\n      }\n      user_manager.AddUser(add_user, password, bandwidth);\n    } else if (!del_user.empty()) {\n      std::string confirm;\n      std::cout << \"Are you sure you want to delete user \" << del_user\n                << \"? (Y/N): \";\n      std::cin >> confirm;\n      if (confirm == \"Y\" || confirm == \"y\") {\n        user_manager.DeleteUser(del_user);\n      } else {\n        std::cout << \"Deletion cancelled.\" << std::endl;\n      }\n    } else if (list) {\n      user_manager.ListUsers();\n    } else if (!get_bandwidth_user.empty()) {\n      const int bw = user_manager.GetUserBandwidth(get_bandwidth_user);\n      if (bw != -1) {\n        std::cout << \"Bandwidth for user \" << get_bandwidth_user << \": \" << bw\n                  << \" MB\" << std::endl;\n      }\n    } else {\n      std::cerr << \"No command specified. Use --help for usage information.\"\n                << std::endl;\n      return EXIT_FAILURE;\n    }\n    return EXIT_SUCCESS;\n  } catch (const std::runtime_error& err) {\n    std::cerr << \"Argument parsing error: \" << err.what() << std::endl;\n  } catch (const std::exception& ex) {\n    std::cerr << \"An error occurred: \" << ex.what() << \" Exiting...\"\n              << std::endl;\n  } catch (...) {\n    std::cerr << \"An unknown error occurred. Exiting...\" << std::endl;\n  }\n  return EXIT_FAILURE;\n}\n"
  },
  {
    "path": "src/fptn-protocol-lib/CMakeLists.txt",
    "content": "project(fptn-protocol-lib LANGUAGES CXX)\n\ninclude_directories(${CMAKE_CURRENT_SOURCE_DIR})\n\ninclude(../../depends/cmake/NtpClient.cmake)\ninclude(../../depends/cmake/CamouflageTLS.cmake)\nif (IOS)\n  find_library(SECURITY Security)\n  find_library(CFNETWORK CFNetwork)\n  find_library(SYSTEMCONFIGURATION SystemConfiguration)\n\n  add_compile_definitions(FPTN_USER_OS=\\\"iOS\\\")\nelseif(__ANDROID__)\n  add_compile_definitions(FPTN_USER_OS=\\\"Android\\\")\nelseif(APPLE)\n  add_compile_definitions(FPTN_USER_OS=\\\"MacOS\\\")\nelseif(WIN32)\n  add_compile_definitions(FPTN_USER_OS=\\\"Windows\\\")\nelseif(UNIX)\n  add_compile_definitions(FPTN_USER_OS=\\\"Linux\\\")\nelse()\n  message(FATAL_ERROR \"Unsupported platform\")\nendif()\n\nfind_package(absl REQUIRED)\nfind_package(protobuf REQUIRED)\nfind_package(OpenSSL REQUIRED)\nfind_package(spdlog REQUIRED)\nfind_package(fmt REQUIRED)\nfind_package(re2 REQUIRED)\n\nfind_package(Boost REQUIRED COMPONENTS random filesystem nowide locale)\nfind_package(ZLIB REQUIRED)\nfind_package(nlohmann_json REQUIRED)\n\nif (FPTN_BUILD_ONLY_FPTN_LIB)\n  # build fptnlib without pcappp\n  set(FPTN_IP_ADDRESS_WITHOUT_PCAP ON)\nendif()\n\nif (FPTN_WITH_LIBIDN2)\n  find_package(libidn2 REQUIRED)\nendif ()\n\nif(NOT FPTN_IP_ADDRESS_WITHOUT_PCAP)\n  find_package(PcapPlusPlus REQUIRED)\nendif()\n\ninclude_directories(${nlohmann_json_INCLUDE_DIRS})\n\n# include\nif(ABSL_INCLUDE_DIRS)\n  include_directories(${ABSL_INCLUDE_DIRS})\nendif()\nif(absl_INCLUDE_DIRS)\n  include_directories(${absl_INCLUDE_DIRS})\nendif()\n\nif(PROTOBUF_INCLUDE_DIR)\n  include_directories(${PROTOBUF_INCLUDE_DIR})\nendif()\nif(protobuf_INCLUDE_DIRS)\n  include_directories(${protobuf_INCLUDE_DIRS})\nendif()\nif(Protobuf_INCLUDE_DIRS)\n  include_directories(${Protobuf_INCLUDE_DIRS})\nendif()\nif(CONAN_INCLUDE_DIRS_PROTOBUF)\n  include_directories(${CONAN_INCLUDE_DIRS_PROTOBUF})\nendif()\ninclude_directories(${SOURCE_DIR} ${INCLUDE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/fptn_protocol)\ninclude_directories(${CMAKE_BINARY_DIR}/src/fptn-protocol-lib/protobuf)\ninclude_directories(\"${CMAKE_CURRENT_BINARY_DIR}/protobuf\")\n\n# Generate C++ source and header files from the .proto files\nset(protobuf_files protobuf/protocol.proto)\nprotobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${protobuf_files})\n\n# --- disable clang-tidy for protobuf generated code ---\nset_source_files_properties($<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/protocol.pb.h> PROPERTIES SKIP_CLANG_TIDY ON)\nset_source_files_properties($<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/protocol.pb.сс> PROPERTIES SKIP_CLANG_TIDY ON)\nset(DISABLE_TIDY_DIR \"${CMAKE_BINARY_DIR}/src/fptn-protocol-lib/protobuf/\")\nfile(MAKE_DIRECTORY \"${DISABLE_TIDY_DIR}\")\nfile(\n  WRITE \"${DISABLE_TIDY_DIR}/.clang-tidy\"\n  \"Checks: '-*,readability-inconsistent-declaration-parameter-name'\nWarningsAsErrors: ''\n    \")\n\nset(FPTN_CLIENT_PROTOCOL_SOURCES\n    ${PROTO_SRCS}\n    ${PROTO_HDRS}\n    https/api_client/api_client.h\n    https/api_client/api_client.cpp\n    https/obfuscator/methods/tls/tls_obfuscator.cpp\n    https/obfuscator/methods/tls/tls_obfuscator.h\n    https/obfuscator/methods/tls2/tls_obfuscator2.cpp\n    https/obfuscator/methods/tls2/tls_obfuscator2.h\n    https/obfuscator/methods/obfuscator_interface.h\n    https/obfuscator/tcp_stream/tcp_stream.h\n    https/utils/tls/tls.h\n    https/utils/tls/tls.cpp\n    https/websocket_client/websocket_client.h\n    https/websocket_client/websocket_client.cpp\n    protobuf/protocol.h\n    protobuf/protocol.cpp\n    time/time_provider.h\n    time/time_provider.cpp\n    https/obfuscator/methods/detector.h)\n\nadd_library(\"${PROJECT_NAME}_static\" STATIC ${FPTN_CLIENT_PROTOCOL_SOURCES})\n\nforeach(target \"${PROJECT_NAME}_static\")\n  if(FPTN_IP_ADDRESS_WITHOUT_PCAP)\n    set(PCAP_LIB \"\")\n  else()\n    set(PCAP_LIB PcapPlusPlus::PcapPlusPlus)\n  endif()\n\n  if(FPTN_WITH_LIBIDN2)\n    set(LIBIDN2_LIB libidn2::libidn2)\n  else()\n    set(LIBIDN2_LIB \"\")\n  endif()\n  \n  if(MSVC)\n    target_compile_options(${target} PRIVATE /wd4100 /wd4702) # disable warning C4100\n  endif()\n\n  if(IOS)\n    set(IOS_LIBS \"${SECURITY} ${CFNETWORK} ${SYSTEMCONFIGURATION} -framework Foundation z resolv\")\n  else()\n    set(IOS_LIBS \"\")\n  endif()\n\n  if (IOS)\n    set_target_properties(${target}\n      PROPERTIES\n          CXX_STANDARD 17\n          CXX_STANDARD_REQUIRED ON\n          CXX_EXTENSIONS OFF\n          XCODE_ATTRIBUTE_ENABLE_BITCODE \"NO\"\n          XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH \"NO\"\n          XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY \"\"\n    )\n  endif()\n\n  target_include_directories(${target} INTERFACE ${CMAKE_CURRENT_BINARY_DIR} protobuf::protobuf)\n  target_link_libraries(\n    ${target}\n    ${Protobuf_LIBRARIES}\n    ${protobuf_LIBRARIES}\n    protobuf::protobuf\n    ZLIB::ZLIB\n    Boost::boost\n    Boost::nowide\n    Boost::random\n    Boost::locale\n    OpenSSL::SSL\n    OpenSSL::Crypto\n    nlohmann_json::nlohmann_json\n    spdlog::spdlog\n    fmt::fmt\n    re2::re2\n    ntp_client\n    camouflage-tls\n    ${PCAP_LIB}\n    ${LIBIDN2_LIB}\n    ${IOS_LIBS}\n  )\nendforeach()\n"
  },
  {
    "path": "src/fptn-protocol-lib/https/api_client/api_client.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"fptn-protocol-lib/https/api_client/api_client.h\"\n\n#include <atomic>\n#include <chrono>\n#include <condition_variable>\n#include <iostream>\n#include <memory>\n#include <mutex>\n#include <string>\n#include <thread>\n#include <unordered_map>\n#include <utility>\n#include <vector>\n\n#include <fmt/format.h>     // NOLINT(build/include_order)\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n#include <zlib.h>           // NOLINT(build/include_order)\n\n#include \"common/network/utils.h\"\n\n#ifdef _WIN32\n#pragma warning(push)\n#pragma warning(disable : 4996)\n#pragma warning(disable : 4267)\n#pragma warning(disable : 4244)\n#pragma warning(disable : 4702)\n#endif\n\n#include <boost/asio/buffer.hpp>\n#include <boost/asio/connect.hpp>\n#include <boost/asio/ip/tcp.hpp>\n#include <boost/asio/ssl/detail/openssl_types.hpp>\n#include <boost/asio/ssl/error.hpp>\n#include <boost/asio/ssl/stream.hpp>\n#include <boost/asio/strand.hpp>\n#include <boost/beast/core.hpp>\n#include <boost/beast/http.hpp>\n#include <boost/beast/ssl.hpp>\n#include <boost/nowide/convert.hpp>\n#include <camouflage/tls/builder.hpp>\n\n#include \"common/network/resolv.h\"\n\n#include \"fptn-protocol-lib/https/obfuscator/methods/tls2/tls_obfuscator2.h\"\n#include \"fptn-protocol-lib/https/obfuscator/tcp_stream/tcp_stream.h\"\n#include \"fptn-protocol-lib/https/utils/change_cipher_spec.h\"\n#include \"fptn-protocol-lib/https/utils/tls/tls.h\"\n\n#ifdef _WIN32\n#pragma warning(pop)\n#endif\n\nnamespace {\n\nstd::string DecompressGzip(const std::string& compressed) {\n  constexpr std::size_t kChunkSize = 4096;\n\n  std::vector<char> buffer(kChunkSize);\n\n  ::z_stream strm{};\n  strm.next_in = reinterpret_cast<Bytef*>(const_cast<char*>(compressed.data()));\n  strm.avail_in = static_cast<unsigned int>(compressed.size());\n\n  if (::inflateInit2(&strm, 16 + MAX_WBITS) != Z_OK) {\n    return {};\n  }\n\n  std::string decompressed;\n  int ret = 0;\n  do {\n    strm.next_out = reinterpret_cast<Bytef*>(buffer.data());\n    strm.avail_out = static_cast<unsigned int>(buffer.size());\n    ret = inflate(&strm, Z_NO_FLUSH);\n\n    if (ret == Z_STREAM_ERROR || ret == Z_DATA_ERROR || ret == Z_MEM_ERROR) {\n      inflateEnd(&strm);\n      return {};\n    }\n    decompressed.append(buffer.data(), buffer.size() - strm.avail_out);\n  } while (ret != Z_STREAM_END);\n\n  inflateEnd(&strm);\n  return decompressed;\n}\n\nstd::string GetHttpBody(\n    const boost::beast::http::response<boost::beast::http::dynamic_body>& res) {\n  auto body = boost::beast::buffers_to_string(res.body().data());\n  if (res[boost::beast::http::field::content_encoding] == \"gzip\") {\n    return DecompressGzip(body);\n  }\n  return body;\n}\n\nvoid SetSocketTimeouts(\n    boost::asio::ip::tcp::socket& socket, int timeout_seconds) {\n  auto native_socket = socket.native_handle();\n\n#ifdef _WIN32\n  DWORD timeout_ms = timeout_seconds * 1000;\n  ::setsockopt(native_socket, SOL_SOCKET, SO_RCVTIMEO,\n      reinterpret_cast<const char*>(&timeout_ms), sizeof(timeout_ms));\n  ::setsockopt(native_socket, SOL_SOCKET, SO_SNDTIMEO,\n      reinterpret_cast<const char*>(&timeout_ms), sizeof(timeout_ms));\n#else\n  timeval tv = {};\n  tv.tv_sec = timeout_seconds;\n  tv.tv_usec = 0;\n  ::setsockopt(native_socket, SOL_SOCKET, SO_RCVTIMEO,\n      reinterpret_cast<const char*>(&tv), sizeof(tv));\n  ::setsockopt(native_socket, SOL_SOCKET, SO_SNDTIMEO,\n      reinterpret_cast<const char*>(&tv), sizeof(tv));\n#endif\n}\n\nusing Headers = std::unordered_map<std::string, std::string>;\n\nHeaders RealBrowserHeaders() {\n  /* Just to ensure that FPTN is as similar to a web browser as possible. */\n#ifdef __linux__  // chromium ubuntu arm\n  return {{\"User-Agent\",\n              \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like \"\n              \"Gecko) Chrome/134.0.0.0 Safari/537.36\"},\n      {\"Accept-Language\", \"en-US,en;q=0.9\"},\n      {\"Accept\",\n          \"text/html,application/xhtml+xml,application/xml;q=0.9,image/\"\n          \"avif,image/webp,image/apng,*/*;q=0.8,application/\"\n          \"signed-exchange;v=b3;q=0.7\"},\n      {\"Referer\", \"https://www.google.com/\"},\n      {\"Accept-Encoding\", \"gzip, deflate, br, zstd\"},\n      {\"Sec-Ch-Ua\", R\"(\"Not:A-Brand\";v=\"24\", \"Chromium\";v=\"134\")\"},\n      {\"Sec-Ch-Ua-Mobile\", \"?0\"}, {\"Sec-Ch-Ua-Platform\", R\"(\"Linux\")\"},\n      {\"Upgrade-Insecure-Requests\", \"1\"}, {\"Sec-Fetch-Site\", \"cross-site\"},\n      {\"Sec-Fetch-Mode\", \"navigate\"}, {\"Sec-Fetch-User\", \"?1\"},\n      {\"Sec-Fetch-Dest\", \"document\"}, {\"Priority\", \"u=0, i\"}};\n#elif __APPLE__\n  // apple silicon chrome\n  return {\n      {\"sec-ch-ua\",\n          R\"(\"Chromium\";v=\"128\", \"Not;A=Brand\";v=\"24\", \"Google Chrome\";v=\"128\")\"},\n      {\"sec-ch-ua-platform\", \"\\\"macOS\\\"\"}, {\"sec-ch-ua-mobile\", \"?0\"},\n      {\"upgrade-insecure-requests\", \"1\"},\n      {\"User-Agent\",\n          \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) \"\n          \"AppleWebKit/537.36 \"\n          \"(KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\"},\n      {\"Accept\",\n          \"text/html,application/xhtml+xml,application/xml;q=0.9,image/\"\n          \"avif,image/webp,image/apng,*/*;q=0.8,application/\"\n          \"signed-exchange;v=b3;q=0.7\"},\n      {\"sec-fetch-site\", \"none\"}, {\"sec-fetch-mode\", \"no-cors\"},\n      {\"sec-fetch-dest\", \"empty\"}, {\"Referer\", \"https://www.google.com/\"},\n      {\"Accept-Encoding\", \"gzip, deflate, br\"},\n      {\"Accept-Language\", \"ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7\"},\n      {\"priority\", \"u=4, i\"}};\n#elif _WIN32\n  // chrome windows amd64\n  return {\n      {\"sec-ch-ua\",\n          R\"(\"Chromium\";v=\"128\", \"Not;A=Brand\";v=\"24\", \"Google Chrome\";v=\"128\")\"},\n      {\"sec-ch-ua-mobile\", \"?0\"}, {\"sec-ch-ua-platform\", \"\\\"Windows\\\"\"},\n      {\"upgrade-insecure-requests\", \"1\"},\n      {\"User-Agent\",\n          \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n          \"(KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\"},\n      {\"Accept\",\n          \"text/html,application/xhtml+xml,application/xml;q=0.9,image/\"\n          \"avif,image/webp,image/apng,*/*;q=0.8,application/\"\n          \"signed-exchange;v=b3;q=0.7\"},\n      {\"sec-fetch-site\", \"cross-site\"}, {\"sec-fetch-mode\", \"navigate\"},\n      {\"sec-fetch-user\", \"?1\"}, {\"sec-fetch-dest\", \"document\"},\n      {\"Referer\", \"https://www.google.com/\"},\n      {\"Accept-Encoding\", \"gzip, deflate, br, zstd\"},\n      {\"Accept-Language\", \"en-US,en;q=0.9,ru;q=0.8\"}, {\"priority\", \"u=0, i\"}};\n#else\n#error Undefined platform\n#endif\n}\n\ntemplate <typename TResult>\nTResult ExecuteWithTimeout(const std::function<TResult()>& operation,\n    int timeout,\n    const std::string& operation_name,\n    const std::string& handle,\n    const std::string& host,\n    const TResult& timeout_result) {\n  try {\n    // Shared state\n    struct SharedState {\n      std::mutex mutex;\n      std::condition_variable cv;\n      bool ready = false;\n      TResult result;\n      std::atomic<bool> cancelled{false};\n    };\n\n    const auto start_time = std::chrono::steady_clock::now();\n\n    auto state = std::make_shared<SharedState>();\n\n    // NOLINTNEXTLINE(bugprone-exception-escape)\n    std::weak_ptr<SharedState> weak_state = state;\n    std::thread([weak_state, operation]() {\n      TResult impl_result = operation();\n      // check state\n      if (auto state = weak_state.lock()) {\n        const std::scoped_lock<std::mutex> lock(state->mutex);\n        if (!state->cancelled) {\n          state->result = impl_result;\n          state->ready = true;\n          state->cv.notify_one();\n        }\n      }\n    }).detach();\n\n    std::unique_lock<std::mutex> lock(state->mutex);  // mutex\n    if (!state->cv.wait_for(lock, std::chrono::seconds(timeout),\n            [state]() { return state->ready; })) {\n      const auto end_time = std::chrono::steady_clock::now();\n      const auto duration =\n          std::chrono::duration_cast<std::chrono::milliseconds>(\n              end_time - start_time);\n\n      state->cancelled = true;\n\n      SPDLOG_WARN(\"{} [{}] - Timeout after {} ms for server {}\", operation_name,\n          handle, duration.count(), host);\n      return timeout_result;\n    }\n    return state->result;\n  } catch (...) {\n    SPDLOG_ERROR(\"Undefined error: {} {}\", operation_name, handle);\n  }\n  return timeout_result;\n}\n\n};  // namespace\n\nnamespace fptn::protocol::https {\n\nusing tcp_stream_type = boost::beast::tcp_stream;\nusing obfuscator_socket_type = obfuscator::TcpStream<tcp_stream_type>;\nusing ssl_stream_type = boost::beast::ssl_stream<obfuscator_socket_type>;\n\nApiClient::ApiClient(\n    const std::string& host, int port, CensorshipStrategy censorship_strategy)\n    : host_(host),\n      port_(port),\n      sni_(host),\n      censorship_strategy_(censorship_strategy) {}  // NOLINT\n\nApiClient::ApiClient(std::string host,\n    int port,\n    std::string sni,\n    CensorshipStrategy censorship_strategy)\n    : host_(std::move(host)),\n      port_(port),\n      sni_(std::move(sni)),\n      censorship_strategy_(censorship_strategy) {}  // NOLINT\n\nApiClient::ApiClient(std::string host,\n    int port,\n    std::string sni,\n    std::string md5_fingerprint,\n    CensorshipStrategy censorship_strategy)\n    : host_(std::move(host)),\n      port_(port),\n      sni_(std::move(sni)),\n      expected_md5_fingerprint_(std::move(md5_fingerprint)),\n      censorship_strategy_(censorship_strategy) {}  // NOLINT\n\nResponse ApiClient::Get(const std::string& handle, int timeout) const {\n  // NOLINTNEXTLINE(bugprone-exception-escape)\n  return ExecuteWithTimeout<Response>(\n      // NOLINTNEXTLINE(bugprone-exception-escape)\n      [this, handle, timeout]() {\n        const ApiClient cloned_client = Clone();\n        return cloned_client.GetImpl(handle, timeout);\n      },\n      timeout, \"GET\", handle, host_, Response{\"\", 608, \"Operation timeout\"});\n}\n\nResponse ApiClient::Post(const std::string& handle,\n    const std::string& request,\n    const std::string& content_type,\n    int timeout) const {\n  // NOLINTNEXTLINE(bugprone-exception-escape)\n  return ExecuteWithTimeout<Response>(\n      // NOLINTNEXTLINE(bugprone-exception-escape)\n      [this, handle, request, content_type, timeout]() {\n        const ApiClient cloned_client = Clone();\n        return cloned_client.PostImpl(handle, request, content_type, timeout);\n      },\n      timeout, \"POST\", handle, host_, Response{\"\", 608, \"Operation timeout\"});\n}\n\nbool ApiClient::TestHandshake(int timeout) const {\n  // NOLINTNEXTLINE(bugprone-exception-escape)\n  return ExecuteWithTimeout<bool>(\n      // NOLINTNEXTLINE(bugprone-exception-escape)\n      [this, timeout]() {\n        const ApiClient cloned_client = Clone();\n        return cloned_client.TestHandshakeImpl(timeout);\n      },\n      timeout, \"TestHandshake\", \"\", host_, false);\n}\n\nApiClient ApiClient::Clone() const {\n  ApiClient temp_client(\n      host_, port_, sni_, expected_md5_fingerprint_, censorship_strategy_);\n  return temp_client;\n}\n\nbool ApiClient::PerformFakeHandshake2(\n    boost::asio::ip::tcp::socket& socket) const {\n  try {\n    SPDLOG_INFO(\"Fake TLS handshake started for SNI: {}\", sni_);\n\n    /* Send client hello */\n    const auto client_hello = GenerateHandshakePacket();\n    if (client_hello.empty()) {\n      SPDLOG_WARN(\"Failed to generate ClientHello for SNI: {}\", sni_);\n      return false;\n    }\n    const std::size_t client_hello_bytes_size =\n        boost::asio::write(socket, boost::asio::buffer(client_hello));\n    if (client_hello_bytes_size != client_hello.size()) {\n      SPDLOG_ERROR(\"Error ClientHello sent: {} of {} bytes\",\n          client_hello_bytes_size, client_hello.size());\n      return false;\n    }\n\n    /* Wait for server answer */\n    const auto server_hello = common::network::WaitForServerTlsHello(socket);\n    if (!server_hello.has_value()) {\n      SPDLOG_ERROR(\"Failed to receive ServerHello from {}\", sni_);\n      return false;\n    }\n\n    // clean\n    common::network::CleanSocket(socket);\n\n    /* Send change cipher spec */\n    const auto change_cipher_spec =\n        fptn::protocol::https::utils::MakeClientChangeCipherSpec();\n    const std::size_t change_cipher_spec_size =\n        boost::asio::write(socket, boost::asio::buffer(change_cipher_spec));\n    if (change_cipher_spec_size != change_cipher_spec.size()) {\n      SPDLOG_ERROR(\"Failed to send ClientHello to {}: {}\",\n          change_cipher_spec_size, change_cipher_spec.size());\n      return false;\n    }\n\n    // timeout\n    std::this_thread::sleep_for(std::chrono::milliseconds(150));\n\n    SPDLOG_INFO(\n        \"Fake TLS handshake completed for {}, received {} bytes from server\",\n        sni_, server_hello.value().size());\n    return true;\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"Fake TLS handshake exception for {}: {}\", sni_, e.what());\n  }\n  return false;\n}\n\nResponse ApiClient::GetImpl(const std::string& handle, int timeout) const {\n  std::string body;\n  std::string error;\n  int respcode = 400;\n\n  const auto start_time = std::chrono::steady_clock::now();\n\n  SSL* ssl = nullptr;\n  std::string server_ip;\n  try {\n    boost::asio::io_context ioc;\n\n    auto* ssl_ctx = fptn::protocol::https::utils::CreateNewSslCtx();\n    boost::asio::ssl::context ctx(ssl_ctx);\n\n    fptn::protocol::https::obfuscator::IObfuscatorSPtr obfuscator = nullptr;\n    if (censorship_strategy_ == CensorshipStrategy::kTlsObfuscator) {\n      obfuscator =\n          std::make_shared<fptn::protocol::https::obfuscator::TlsObfuscator2>();\n    }\n\n    tcp_stream_type tcp_stream(ioc);\n    obfuscator_socket_type obfuscator_stream(std::move(tcp_stream), obfuscator);\n    ssl_stream_type stream(std::move(obfuscator_stream), ctx);\n\n    const std::string port_str = std::to_string(port_);\n    auto resolve_result = fptn::common::network::ResolveWithTimeout(\n        ioc, host_, port_str, timeout);\n\n    if (!resolve_result) {\n      error = resolve_result.error.message();\n      respcode = 603;\n      SPDLOG_ERROR(\"GET [{}] - DNS resolution failed for {}:{}: {}\", handle,\n          host_, port_, error);\n    } else {\n      SPDLOG_INFO(\n          \"GET [{}] - Connecting to server: {}:{}\", handle, host_, port_);\n\n      boost::beast::get_lowest_layer(stream).expires_after(\n          std::chrono::seconds(timeout));\n      stream.next_layer().next_layer().expires_after(\n          std::chrono::seconds(timeout));\n\n      auto connected_endpoint = boost::beast::get_lowest_layer(stream).connect(\n          resolve_result.results);\n      server_ip = connected_endpoint.address().to_string();\n\n      SPDLOG_INFO(\"GET [{}] - Successfully connected to {}\", handle, host_);\n\n      auto& socket = boost::beast::get_lowest_layer(stream).socket();\n      SetSocketTimeouts(socket, timeout);\n\n      // Perform fake handshake if enabled\n      if (IsRealityModeWithFakeHandshake(censorship_strategy_)) {\n        const bool perform_status = PerformFakeHandshake2(socket);\n        if (!perform_status) {\n          SPDLOG_WARN(\n              \"GET [{}] - Fake handshake failed, continuing with real \"\n              \"handshake\",\n              handle);\n        }\n        // For Reality Mode we use TLS obfuscator after fake handshake\n        // This provides additional encryption layer for the real connection\n        stream.next_layer().set_obfuscator(\n            std::make_shared<protocol::https::obfuscator::TlsObfuscator2>());\n      }\n\n      utils::SetHandshakeSessionID(stream.native_handle());\n      utils::SetHandshakeSni(stream.native_handle(), sni_);\n      if (!expected_md5_fingerprint_.empty()) {\n        ssl = stream.native_handle();\n        utils::AttachCertificateVerificationCallback(\n            ssl, [this, &error](const std::string& md5_fingerprint) {\n              return onVerifyCertificate(md5_fingerprint, error);\n            });\n      } else {\n        ctx.set_verify_mode(boost::asio::ssl::verify_none);\n      }\n\n      stream.handshake(boost::asio::ssl::stream_base::client);\n\n      // Reset obfuscator after TLS-handshake\n      stream.next_layer().set_obfuscator(nullptr);\n\n      // Clean\n      common::network::CleanSocket(socket);\n      common::network::CleanSsl(ssl);\n      // timeout\n      std::this_thread::sleep_for(std::chrono::milliseconds(150));\n\n      boost::beast::http::request<boost::beast::http::string_body> req{\n          boost::beast::http::verb::get, handle, 11};\n\n      // set http headers\n      const auto headers = RealBrowserHeaders();\n      for (const auto& [key, value] : headers) {\n        req.set(key, value);\n      }\n\n      boost::beast::http::write(stream, req);\n\n      boost::beast::flat_buffer buffer;\n      boost::beast::http::response<boost::beast::http::dynamic_body> res;\n\n      boost::beast::http::read(stream, buffer, res);\n\n      respcode = static_cast<int>(res.result_int());\n      body = GetHttpBody(res);\n\n      boost::system::error_code ec;\n      stream.shutdown(ec);\n      try {\n        boost::beast::get_lowest_layer(stream).close();\n      } catch (boost::system::system_error const& e) {\n        SPDLOG_ERROR(\n            \"GET [{}] - Exception during connection close for server {}: {}\",\n            handle, host_, e.what());\n      }\n    }\n  } catch (const boost::system::system_error& err) {\n#ifdef _WIN32\n    error = boost::nowide::narrow(boost::nowide::widen(err.what()));\n#else\n    error = err.what();\n#endif\n    respcode = 600;\n    SPDLOG_ERROR(\"GET [{}] - System error for server {} (IP: {}): {}\", handle,\n        host_, server_ip, error);\n  } catch (const std::exception& e) {\n#ifdef _WIN32\n    error = boost::nowide::narrow(boost::nowide::widen(e.what()));\n#else\n    error = e.what();\n#endif\n    respcode = 601;\n    SPDLOG_ERROR(\"GET [{}] - Exception for server {} (IP: {}): {}\", handle,\n        host_, server_ip, error);\n  } catch (...) {\n    error = \"Unknown exception\";\n    respcode = 602;\n    SPDLOG_ERROR(\"GET [{}] - Unknown exception for server {} (IP: {})\", handle,\n        host_, server_ip);\n  }\n  if (ssl) {\n    utils::AttachCertificateVerificationCallbackDelete(ssl);\n  }\n\n  const auto end_time = std::chrono::steady_clock::now();\n  const auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(\n      end_time - start_time);\n\n  if (respcode >= 200 && respcode < 300) {\n    SPDLOG_INFO(\n        \"GET [{}] - Success from server {} (IP: {}) in {} ms - Status: {}, \"\n        \"Body size: {} bytes\",\n        handle, host_, server_ip, duration.count(), respcode, body.size());\n  } else {\n    SPDLOG_WARN(\n        \"GET [{}] - Failed from server {} (IP: {}) in {} ms - Status: {}, \"\n        \"Error: {}, Body size: {} bytes\",\n        handle, host_, server_ip, duration.count(), respcode, error,\n        body.size());\n  }\n  return {body, respcode, error};\n}\n\nResponse ApiClient::PostImpl(const std::string& handle,\n    const std::string& request,\n    const std::string& content_type,\n    int timeout) const {\n  std::string body;\n  std::string error;\n  int respcode = 400;\n\n  const auto start_time = std::chrono::steady_clock::now();\n\n  SSL* ssl = nullptr;\n  std::string server_ip;\n\n  try {\n    boost::asio::io_context ioc;\n    auto* ssl_ctx = utils::CreateNewSslCtx();\n    boost::asio::ssl::context ctx(ssl_ctx);\n\n    fptn::protocol::https::obfuscator::IObfuscatorSPtr obfuscator = nullptr;\n    if (censorship_strategy_ == CensorshipStrategy::kTlsObfuscator) {\n      obfuscator =\n          std::make_shared<fptn::protocol::https::obfuscator::TlsObfuscator2>();\n    }\n\n    tcp_stream_type tcp_stream(ioc);\n    obfuscator_socket_type obfuscator_stream(std::move(tcp_stream), obfuscator);\n    ssl_stream_type stream(std::move(obfuscator_stream), ctx);\n\n    const std::string port_str = std::to_string(port_);\n    auto resolve_result = fptn::common::network::ResolveWithTimeout(\n        ioc, host_, port_str, timeout);\n\n    if (!resolve_result) {\n      error = resolve_result.error.message();\n      respcode = 603;\n      SPDLOG_ERROR(\"POST [{}] - DNS resolution failed for {}:{}: {}\", handle,\n          host_, port_, error);\n    } else {\n      SPDLOG_INFO(\n          \"POST [{}] - Connecting to server: {}:{}\", handle, host_, port_);\n\n      boost::beast::get_lowest_layer(stream).expires_after(\n          std::chrono::seconds(timeout));\n      stream.next_layer().next_layer().expires_after(\n          std::chrono::seconds(timeout));\n\n      auto connected_endpoint = boost::beast::get_lowest_layer(stream).connect(\n          resolve_result.results);\n      server_ip = connected_endpoint.address().to_string();\n\n      SPDLOG_INFO(\"POST [{}] - Successfully connected to {}\", handle, host_);\n\n      auto& socket = boost::beast::get_lowest_layer(stream).socket();\n      SetSocketTimeouts(socket, timeout);\n\n      // Perform fake handshake if enabled\n      if (IsRealityModeWithFakeHandshake(censorship_strategy_)) {\n        const bool perform_status = PerformFakeHandshake2(socket);\n        if (!perform_status) {\n          SPDLOG_WARN(\n              \"GET [{}] - Fake handshake failed, continuing with real \"\n              \"handshake\",\n              handle);\n        }\n        // For Reality Mode we use TLS obfuscator after fake handshake\n        // This provides additional encryption layer for the real connection\n        stream.next_layer().set_obfuscator(\n            std::make_shared<protocol::https::obfuscator::TlsObfuscator2>());\n      }\n\n      utils::SetHandshakeSessionID(stream.native_handle());\n      utils::SetHandshakeSni(stream.native_handle(), sni_);\n      if (!expected_md5_fingerprint_.empty()) {\n        ssl = stream.native_handle();\n        utils::AttachCertificateVerificationCallback(\n            ssl, [this, &error](const std::string& md5_fingerprint) {\n              return onVerifyCertificate(md5_fingerprint, error);\n            });\n      } else {\n        ctx.set_verify_mode(boost::asio::ssl::verify_none);\n      }\n\n      stream.handshake(boost::asio::ssl::stream_base::client);\n\n      // Reset obfuscator after TLS-handshake\n      stream.next_layer().set_obfuscator(nullptr);\n\n      // Clean\n      common::network::CleanSocket(socket);\n      common::network::CleanSsl(ssl);\n      // timeout\n      std::this_thread::sleep_for(std::chrono::milliseconds(150));\n\n      boost::beast::http::request<boost::beast::http::string_body> req{\n          boost::beast::http::verb::post, handle, 11};\n      req.set(boost::beast::http::field::host, host_);\n      req.set(boost::beast::http::field::accept, \"*/*\");\n      req.set(boost::beast::http::field::content_type, content_type);\n      req.set(boost::beast::http::field::content_length,\n          std::to_string(request.size()));\n\n      // set http headers\n      const auto headers = RealBrowserHeaders();\n      for (const auto& [key, value] : headers) {\n        req.set(key, value);\n      }\n\n      req.body() = request;\n      req.prepare_payload();\n\n      boost::beast::http::write(stream, req);\n\n      boost::beast::flat_buffer buffer;\n      boost::beast::http::response<boost::beast::http::dynamic_body> res;\n      boost::beast::http::read(stream, buffer, res);\n\n      respcode = static_cast<int>(res.result_int());\n      body = GetHttpBody(res);\n\n      boost::system::error_code ec;\n      stream.shutdown(ec);\n      try {\n        boost::beast::get_lowest_layer(stream).close();\n      } catch (boost::system::system_error const& e) {\n        SPDLOG_ERROR(\n            \"POST [{}] - Exception during connection close for server {}: {}\",\n            handle, host_, e.what());\n      }\n    }\n  } catch (const boost::system::system_error& err) {\n#ifdef _WIN32\n    error = boost::nowide::narrow(boost::nowide::widen(err.what()));\n#else\n    error = err.what();\n#endif\n    respcode = 600;\n    SPDLOG_ERROR(\"POST [{}] - System error for server {} (IP: {}): {}\", handle,\n        host_, server_ip, error);\n  } catch (const std::exception& e) {\n#ifdef _WIN32\n    error = boost::nowide::narrow(boost::nowide::widen(e.what()));\n#else\n    error = e.what();\n#endif\n    respcode = 601;\n    SPDLOG_ERROR(\"POST [{}] - Exception for server {} (IP: {}): {}\", handle,\n        host_, server_ip, error);\n  } catch (...) {\n    error = \"Unknown exception\";\n    respcode = 602;\n    SPDLOG_ERROR(\"POST [{}] - Unknown exception for server {} (IP: {})\", handle,\n        host_, server_ip);\n  }\n  if (ssl) {\n    utils::AttachCertificateVerificationCallbackDelete(ssl);\n  }\n\n  const auto end_time = std::chrono::steady_clock::now();\n  const auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(\n      end_time - start_time);\n\n  if (respcode >= 200 && respcode < 300) {\n    SPDLOG_INFO(\n        \"POST [{}] - Success from server {} (IP: {}) in {} ms - Status: {}, \"\n        \"Request: {} bytes, Response: {} bytes\",\n        handle, host_, server_ip, duration.count(), respcode, request.size(),\n        body.size());\n  } else {\n    SPDLOG_WARN(\n        \"POST [{}] - Failed from server {} (IP: {}) in {} ms - Status: {}, \"\n        \"Error: {}, Request: {} bytes, Response: {} bytes\",\n        handle, host_, server_ip, duration.count(), respcode, error,\n        request.size(), body.size());\n  }\n  return {body, respcode, error};\n}\n\nbool ApiClient::TestHandshakeImpl(int timeout) const {\n  const auto start_time = std::chrono::steady_clock::now();\n  std::string server_ip;\n  SSL* ssl = nullptr;\n\n  try {\n    boost::asio::io_context ioc;\n    auto* ssl_ctx = utils::CreateNewSslCtx();\n    boost::asio::ssl::context ctx(ssl_ctx);\n\n    fptn::protocol::https::obfuscator::IObfuscatorSPtr obfuscator = nullptr;\n    if (censorship_strategy_ == CensorshipStrategy::kTlsObfuscator) {\n      obfuscator =\n          std::make_shared<fptn::protocol::https::obfuscator::TlsObfuscator2>();\n    }\n\n    tcp_stream_type tcp_stream(ioc);\n    obfuscator_socket_type obfuscator_stream(std::move(tcp_stream), obfuscator);\n    ssl_stream_type stream(std::move(obfuscator_stream), ctx);\n\n    const std::string port_str = std::to_string(port_);\n    auto resolve_result = fptn::common::network::ResolveWithTimeout(\n        ioc, host_, port_str, timeout);\n\n    if (!resolve_result) {\n      SPDLOG_WARN(\"TestHandshake - DNS resolution failed for {}:{}: {}\", host_,\n          port_, resolve_result.error.message());\n\n      const auto end_time = std::chrono::steady_clock::now();\n      const auto duration =\n          std::chrono::duration_cast<std::chrono::milliseconds>(\n              end_time - start_time);\n\n      SPDLOG_WARN(\n          \"Handshake failed for server {} in {} ms - DNS resolution error\",\n          host_, duration.count());\n      return false;\n    }\n\n    SPDLOG_INFO(\"TestHandshake - Connecting to server: {}:{}\", host_, port_);\n\n    boost::beast::get_lowest_layer(stream).expires_after(\n        std::chrono::seconds(timeout));\n    stream.next_layer().next_layer().expires_after(\n        std::chrono::seconds(timeout));\n\n    auto connected_endpoint =\n        boost::beast::get_lowest_layer(stream).connect(resolve_result.results);\n    server_ip = connected_endpoint.address().to_string();\n\n    SPDLOG_INFO(\"TestHandshake - Successfully connected to {} (IP: {})\", host_,\n        server_ip);\n\n    auto& socket = boost::beast::get_lowest_layer(stream).socket();\n    SetSocketTimeouts(socket, timeout);\n\n    // Perform fake handshake if enabled\n    if (IsRealityModeWithFakeHandshake(censorship_strategy_)) {\n      SPDLOG_INFO(\"TestHandshake - Performing fake handshake\");\n      if (!PerformFakeHandshake2(socket)) {\n        SPDLOG_WARN(\n            \"TestHandshake - Fake handshake failed, continuing with real \"\n            \"handshake\");\n      }\n    }\n    utils::SetHandshakeSessionID(stream.native_handle());\n    utils::SetHandshakeSni(stream.native_handle(), sni_);\n\n    if (!expected_md5_fingerprint_.empty()) {\n      ssl = stream.native_handle();\n      std::string error;\n      utils::AttachCertificateVerificationCallback(\n          ssl, [this, &error](const std::string& md5_fingerprint) {\n            return onVerifyCertificate(md5_fingerprint, error);\n          });\n    } else {\n      ctx.set_verify_mode(boost::asio::ssl::verify_none);\n    }\n\n    // Perform TLS handshake\n    stream.handshake(boost::asio::ssl::stream_base::client);\n\n    // Clean shutdown\n    boost::system::error_code ec;\n    stream.shutdown(ec);\n\n    // Close connection\n    boost::beast::get_lowest_layer(stream).close();\n\n    const auto end_time = std::chrono::steady_clock::now();\n    const auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(\n        end_time - start_time);\n\n    SPDLOG_INFO(\"Handshake successful for server {} (IP: {}) in {} ms\", host_,\n        server_ip, duration.count());\n\n    if (ssl) {\n      utils::AttachCertificateVerificationCallbackDelete(ssl);\n    }\n    return true;\n  } catch (const boost::system::system_error& err) {\n    std::string host_copy = host_;\n    std::string server_ip_copy = server_ip;\n    std::string error_msg;\n\n#ifdef _WIN32\n    error_msg = boost::nowide::narrow(boost::nowide::widen(err.what()));\n#else\n    error_msg = err.what();\n#endif\n\n    SPDLOG_WARN(\"Handshake failed for server {} (IP: {}): {}\", host_copy,\n        server_ip_copy, error_msg);\n  } catch (const std::exception& e) {\n    // Создаем копии строк перед использованием в логгере\n    std::string host_copy = host_;\n    std::string server_ip_copy = server_ip;\n    std::string error_msg;\n\n#ifdef _WIN32\n    error_msg = boost::nowide::narrow(boost::nowide::widen(e.what()));\n#else\n    error_msg = e.what();\n#endif\n\n    SPDLOG_WARN(\"Handshake failed for server {} (IP: {}): {}\", host_copy,\n        server_ip_copy, error_msg);\n  } catch (...) {\n    // Создаем копии строк перед использованием в логгере\n    std::string host_copy = host_;\n    std::string server_ip_copy = server_ip;\n\n    SPDLOG_WARN(\"Handshake failed for server {} (IP: {}): Unknown exception\",\n        host_copy, server_ip_copy);\n  }\n\n  if (ssl) {\n    utils::AttachCertificateVerificationCallbackDelete(ssl);\n  }\n\n  const auto end_time = std::chrono::steady_clock::now();\n  const auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(\n      end_time - start_time);\n\n  SPDLOG_WARN(\"Handshake failed for server {} (IP: {}) in {} ms\", host_,\n      server_ip, duration.count());\n\n  return false;\n}\n\nbool ApiClient::onVerifyCertificate(\n    const std::string& md5_fingerprint, std::string& error) const {\n  if (expected_md5_fingerprint_.empty()) {\n    return true;\n  }\n  if (md5_fingerprint == expected_md5_fingerprint_) {\n    return true;\n  }\n  error = fmt::format(\n      \"Certificate MD5 mismatch. Expected: {}, got: {}. \"\n      \"Please update your token.\",\n      expected_md5_fingerprint_, md5_fingerprint);\n  SPDLOG_ERROR(\n      \"Certificate verification failed for server {}: {}\", host_, error);\n  return false;\n}\n\nstd::vector<std::uint8_t> ApiClient::GenerateHandshakePacket() const {\n  auto builder = camouflage::tls::Builder::Create();\n\n  switch (censorship_strategy_) {\n    case CensorshipStrategy::kSniRealityModeChrome147:\n      builder.GoogleChrome(\n          camouflage::tls::google_chrome::Version::kV_147_0_7727_56);\n      break;\n\n    case CensorshipStrategy::kSniRealityModeChrome146:\n      builder.GoogleChrome(\n          camouflage::tls::google_chrome::Version::kV_146_0_7680_178);\n      break;\n    case CensorshipStrategy::kSniRealityModeChrome145:\n      builder.GoogleChrome(\n          camouflage::tls::google_chrome::Version::kV_145_0_7632_46);\n      break;\n\n    case CensorshipStrategy::kSniRealityModeFirefox149:\n      builder.Firefox(camouflage::tls::firefox::Version::kV_149_0);\n      break;\n\n    case CensorshipStrategy::kSniRealityModeSafari26:\n      builder.Safari(camouflage::tls::safari::Version::kV_26_4);\n      break;\n\n    case CensorshipStrategy::kSniRealityModeYandex26:\n      builder.YandexBrowser(\n          camouflage::tls::yandex_browser::Version::kV_26_3_3_881);\n      break;\n\n    case CensorshipStrategy::kSniRealityModeYandex25:\n      builder.YandexBrowser(\n          camouflage::tls::yandex_browser::Version::kV_25_8_3_828);\n      break;\n\n    case CensorshipStrategy::kSniRealityModeYandex24:\n      builder.YandexBrowser(\n          camouflage::tls::yandex_browser::Version::kV_24_12_0_1772);\n      break;\n\n    default:\n      SPDLOG_DEBUG(\"Using fallback handshake generator for SNI: {}\", sni_);\n      return utils::GenerateDecoyTlsHandshake(sni_);\n  }\n\n  SPDLOG_INFO(\"Generating handshake for SNI: {}\", sni_);\n\n  const auto session_id = utils::GenerateDecoyTlsSessionId2();\n  if (!session_id.has_value()) {\n    SPDLOG_WARN(\"Session ID generation failed for handshake, using fallback\");\n    return utils::GenerateDecoyTlsHandshake(sni_);\n  }\n\n  const auto handshake =\n      builder.SetSNI(sni_).SetSessionId(session_id.value()).Generate();\n  if (!handshake.has_value()) {\n    SPDLOG_WARN(\n        \"Handshake generation failed for SNI: {}, using fallback\", sni_);\n    return utils::GenerateDecoyTlsHandshake(sni_);\n  }\n\n  SPDLOG_INFO(\"Handshake generated: SNI={}, size={} bytes\", sni_,\n      handshake->handshake_packet_size);\n  return std::vector<std::uint8_t>(handshake->handshake_packet,\n      handshake->handshake_packet + handshake->handshake_packet_size);\n}\n}  // namespace fptn::protocol::https\n"
  },
  {
    "path": "src/fptn-protocol-lib/https/api_client/api_client.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <memory>\n#include <string>\n#include <utility>\n#include <vector>\n\n#include <boost/asio/ip/tcp.hpp>\n#include <nlohmann/json.hpp>\n\n#include \"fptn-protocol-lib/https/censorship_strategy.h\"\n\nnamespace fptn::protocol::https {\n\nstruct Response final {\n  std::string body;\n  int code;\n  std::string errmsg;\n\n  Response() : code(600) {}\n\n  Response(std::string b, int c, std::string e)\n      : body(std::move(b)), code(c), errmsg(std::move(e)) {}\n\n  Response(const Response& other)\n      : body(other.body), code(other.code), errmsg(other.errmsg) {}\n\n  Response& operator=(const Response& other) {\n    if (this != &other) {\n      this->~Response();\n      new (this) Response(other);\n    }\n    return *this;\n  }\n\n  Response(Response&& other) = delete;\n  Response& operator=(Response&& other) = delete;\n\n  nlohmann::json Json() const { return nlohmann::json::parse(body); }\n};\n\nclass ApiClient {\n public:\n  ApiClient(const std::string& host,\n      int port,\n      CensorshipStrategy censorship_strategy);\n\n  ApiClient(std::string host,\n      int port,\n      std::string sni,\n      CensorshipStrategy censorship_strategy);\n\n  ApiClient(std::string host,\n      int port,\n      std::string sni,\n      std::string md5_fingerprint,\n      CensorshipStrategy censorship_strategy);\n\n  Response Get(const std::string& handle, int timeout = 15) const;\n  Response Post(const std::string& handle,\n      const std::string& request,\n      const std::string& content_type = \"application/json\",\n      int timeout = 15) const;\n  bool TestHandshake(int timeout = 10) const;\n\n protected:\n  ApiClient Clone() const;\n\n  Response GetImpl(const std::string& handle, int timeout) const;\n\n  Response PostImpl(const std::string& handle,\n      const std::string& request,\n      const std::string& content_type,\n      int timeout) const;\n\n  bool TestHandshakeImpl(int timeout) const;\n\n  bool PerformFakeHandshake2(boost::asio::ip::tcp::socket& socket) const;\n\n  bool onVerifyCertificate(\n      const std::string& md5_fingerprint, std::string& error) const;\n\n  std::vector<std::uint8_t> GenerateHandshakePacket() const;\n\n private:\n  const std::string host_;\n  const int port_;\n  const std::string sni_;\n  const std::string expected_md5_fingerprint_;\n  const CensorshipStrategy censorship_strategy_;\n};\n\nusing HttpsClientPtr = std::unique_ptr<ApiClient>;\n\n}  // namespace fptn::protocol::https\n"
  },
  {
    "path": "src/fptn-protocol-lib/https/censorship_strategy.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\nnamespace fptn::protocol::https {\nenum class CensorshipStrategy : int {\n  kSni = 0,\n  kTlsObfuscator = 1,\n  kSniRealityMode = 2,\n  /* Chrome */\n  kSniRealityModeChrome147 = 20,\n  kSniRealityModeChrome146 = 21,\n  kSniRealityModeChrome145 = 22,\n  /* Firefox */\n  kSniRealityModeFirefox149 = 60,\n  /* Yandex Browser */\n  kSniRealityModeYandex26 = 80,\n  kSniRealityModeYandex25 = 81,\n  kSniRealityModeYandex24 = 82,\n  /* Safari */\n  kSniRealityModeSafari26 = 100,\n};\n\ninline bool IsRealityModeWithFakeHandshake(const CensorshipStrategy& strategy) {\n  return strategy == CensorshipStrategy::kSniRealityMode ||\n         strategy == CensorshipStrategy::kSniRealityModeChrome147 ||\n         strategy == CensorshipStrategy::kSniRealityModeChrome146 ||\n         strategy == CensorshipStrategy::kSniRealityModeChrome145 ||\n         strategy == CensorshipStrategy::kSniRealityModeFirefox149 ||\n         strategy == CensorshipStrategy::kSniRealityModeYandex26 ||\n         strategy == CensorshipStrategy::kSniRealityModeYandex25 ||\n         strategy == CensorshipStrategy::kSniRealityModeYandex24 ||\n         strategy == CensorshipStrategy::kSniRealityModeSafari26;\n}\n\n}  // namespace fptn::protocol::https\n"
  },
  {
    "path": "src/fptn-protocol-lib/https/obfuscator/methods/detector.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <memory>\n#include <optional>\n#include <string>\n#include <vector>\n\n#include \"fptn-protocol-lib/https/obfuscator/methods/obfuscator_interface.h\"\n#include \"fptn-protocol-lib/https/obfuscator/methods/tls/tls_obfuscator.h\"\n#include \"fptn-protocol-lib/https/obfuscator/methods/tls2/tls_obfuscator2.h\"\n\nnamespace fptn::protocol::https::obfuscator {\n\ninline IObfuscatorSPtr DetectObfuscator(\n    const std::uint8_t* data, std::size_t size) {\n  auto tls_obfuscator2 = std::make_shared<TlsObfuscator2>();\n  if (tls_obfuscator2->CheckProtocol(data, size)) {\n    return tls_obfuscator2;\n  }\n\n  // deprecated\n  auto tls_obfuscator = std::make_shared<TlsObfuscator>();\n  if (tls_obfuscator->CheckProtocol(data, size)) {\n    return tls_obfuscator;\n  }\n  return nullptr;\n}\n\ninline std::vector<std::string> GetObfuscatorNames() { return {\"tls\", \"none\"}; }\n\ninline std::optional<IObfuscatorSPtr> GetObfuscatorByName(\n    const std::string& name) {\n  if (name == \"tls\") {\n    return std::make_shared<TlsObfuscator>();\n  }\n  if (name == \"none\") {\n    return nullptr;\n  }\n  return std::nullopt;\n}\n\n};  // namespace fptn::protocol::https::obfuscator\n"
  },
  {
    "path": "src/fptn-protocol-lib/https/obfuscator/methods/obfuscator_interface.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <cstdint>\n#include <memory>\n#include <optional>\n#include <vector>\n\nnamespace fptn::protocol::https::obfuscator {\n\nusing PreparedData = std::optional<std::vector<std::uint8_t>>;\n\nclass IObfuscator {\n public:\n  virtual ~IObfuscator() = default;\n\n  virtual bool AddData(const std::uint8_t* data, std::size_t size) = 0;\n\n  virtual PreparedData Deobfuscate() = 0;\n\n  virtual PreparedData Obfuscate(\n      const std::uint8_t* data, std::size_t size) = 0;\n  virtual void Reset() = 0;\n\n  virtual bool HasPendingData() const = 0;\n\n  virtual bool CheckProtocol(const std::uint8_t* data, std::size_t size) = 0;\n\n  virtual std::shared_ptr<IObfuscator> Clone() const = 0;\n};\n\nusing IObfuscatorSPtr = std::shared_ptr<IObfuscator>;\n\n};  // namespace fptn::protocol::https::obfuscator\n"
  },
  {
    "path": "src/fptn-protocol-lib/https/obfuscator/methods/tls/tls_obfuscator.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"fptn-protocol-lib/https/obfuscator/methods/tls/tls_obfuscator.h\"\n\n#include <cstring>\n#include <memory>\n#include <random>\n#include <utility>\n#include <vector>\n\n#include <boost/fusion/container/list/cons.hpp>\n\n#ifdef _WIN32\n#include <winsock2.h>\n#else\n#include <arpa/inet.h>\n#endif\n\nnamespace {\n\nconstexpr std::size_t kMmaxBufferSize = 65536;\n\nenum {\n  kFptnTlsApplicationHeaderType = 0x17,\n  kFptnTlsApplicationHeaderMajor = 0x03,\n  kFptnTlsApplicationHeaderMinor = 0x03,\n\n  kFptnTlsApplicationProtocolVersion = 0x01,\n  kFptnTlsApplicationMagicFlag = 0x9763\n};\n\n#pragma pack(push, 1)\nstruct TLSAppDataRecordHeader {\n  /* Standard TLS header */\n  std::uint8_t headertype;\n  std::uint8_t headermajor;\n  std::uint8_t headerminor;\n  std::uint16_t content_length;  // Must be in network byte order!\n\n  /* FPTN TLS obfuscator protocol */\n  std::uint64_t random_data;\n  std::uint16_t magic_flag;  // Must be in network byte order!\n  std::uint8_t protocol_version;\n  std::uint8_t xor_key;\n  std::uint16_t payload_length;  // Must be in network byte order!\n  std::uint8_t padding_length;\n  // std::uint8_t xor_payload[payload_length];\n  // std::uint8_t padding[padding_length]\n};\n\n#pragma pack(pop)\n\nstd::uint16_t HostToNetwork16(const std::uint16_t value) {\n  return htons(value);\n}\n\nstd::uint16_t NetworkToHost16(const std::uint16_t value) {\n  return ntohs(value);\n}\n\nstd::uint64_t GetRandomData() {\n  static std::mt19937 gen{std::random_device {} ()};\n  std::uniform_int_distribution<std::uint64_t> dist(1024, UINT64_MAX);\n  return dist(gen);\n}\n\nstd::uint8_t GetRandomByte(\n    const std::uint8_t min = 0, const std::uint8_t max = UINT8_MAX) {\n  static std::mt19937 gen{std::random_device {}()};\n  std::uniform_int_distribution<std::uint16_t> dist(min, max);\n  return static_cast<std::uint8_t>(dist(gen));\n}\n\nstd::vector<std::uint8_t> GenerateRandomPadding(const std::size_t length) {\n  std::vector<std::uint8_t> padding(length);\n  for (std::size_t i = 0; i < length; ++i) {\n    padding[i] = GetRandomByte();\n  }\n  return padding;\n}\n\nvoid ApplyXorTransform(\n    std::uint8_t* data, const std::size_t size, const std::uint8_t key) {\n  for (std::size_t i = 0; i < size; ++i) {\n    data[i] ^= key;\n  }\n}\n\n}  // namespace\n\nnamespace fptn::protocol::https::obfuscator {\n\nbool TlsObfuscator::AddData(const std::uint8_t* data, std::size_t size) {\n  const std::scoped_lock<std::mutex> lock(mutex_);  // mutex\n\n  if (data && size > 0) {\n    // Limit total buffer size to 64KB to prevent memory exhaustion\n    if (input_buffer_.size() + size > kMmaxBufferSize) {\n      // If buffer would exceed 64KB, only add what fits\n      std::size_t available_space = kMmaxBufferSize - input_buffer_.size();\n      if (available_space > 0) {\n        input_buffer_.insert(input_buffer_.end(), data, data + available_space);\n        return true;\n      }\n      return false;\n    }\n    // Normal case - add all data\n    input_buffer_.insert(input_buffer_.end(), data, data + size);\n    return true;\n  }\n  return false;\n}\n\nPreparedData TlsObfuscator::Deobfuscate() {\n  const std::scoped_lock<std::mutex> lock(mutex_);  // mutex\n\n  if (input_buffer_.size() < sizeof(TLSAppDataRecordHeader)) {\n    return std::nullopt;\n  }\n\n  std::size_t total_processed = 0;\n  std::size_t search_offset = 0;\n\n  std::vector<std::uint8_t> output;\n\n  // Search for valid TLS records in the buffer\n  while (\n      input_buffer_.size() - search_offset >= sizeof(TLSAppDataRecordHeader)) {\n    // Read potential header at current search offset\n    TLSAppDataRecordHeader header = {};\n    std::memcpy(&header, input_buffer_.data() + search_offset,\n        sizeof(TLSAppDataRecordHeader));\n\n    const std::uint16_t total_content_length =\n        NetworkToHost16(header.content_length);\n    const std::uint16_t magic_flag = NetworkToHost16(header.magic_flag);\n    const std::uint16_t payload_length = NetworkToHost16(header.payload_length);\n    const std::uint8_t padding_length = header.padding_length;\n\n    const bool is_fptn_protocol =\n        (magic_flag == kFptnTlsApplicationMagicFlag) &&\n        (header.protocol_version == kFptnTlsApplicationProtocolVersion) &&\n        (header.headermajor == kFptnTlsApplicationHeaderMajor) &&\n        (header.headerminor == kFptnTlsApplicationHeaderMinor);\n\n    // Если данные не нашего протокола - возвращаем как есть\n    if (!is_fptn_protocol) {\n      std::vector<std::uint8_t> result = std::move(input_buffer_);\n      input_buffer_.clear();\n      return result;\n    }\n\n    // Validate header fields\n    const bool is_valid_header =\n        is_fptn_protocol &&\n        (total_content_length >= 11 + sizeof(header.xor_key) +\n                                     sizeof(header.payload_length) +\n                                     sizeof(header.padding_length));\n    if (!is_valid_header) {\n      // Invalid header - shift search position by 1 byte and continue searching\n      search_offset++;\n      continue;\n    }\n\n    // Calculate full record size including padding\n    const size_t full_record_size =\n        sizeof(TLSAppDataRecordHeader) + payload_length + padding_length;\n\n    // Check if we have a complete record at this position\n    if (input_buffer_.size() - search_offset < full_record_size) {\n      // Incomplete record - wait for more data\n      break;\n    }\n\n    // Extract and process payload data\n    const std::uint8_t* encrypted_payload =\n        input_buffer_.data() + search_offset + sizeof(TLSAppDataRecordHeader);\n\n    // Copy encrypted payload to temporary buffer for XOR processing\n    std::vector<std::uint8_t> decrypted_payload(\n        encrypted_payload, encrypted_payload + payload_length);\n\n    // Apply XOR decryption\n    ApplyXorTransform(\n        decrypted_payload.data(), decrypted_payload.size(), header.xor_key);\n\n    // Add decrypted payload to output\n    output.insert(\n        output.end(), decrypted_payload.begin(), decrypted_payload.end());\n\n    // Remove the processed record from buffer starting from search_offset\n    input_buffer_.erase(input_buffer_.begin() + search_offset,\n        input_buffer_.begin() + search_offset + full_record_size);\n    total_processed += full_record_size;\n    break;\n  }\n\n  // If we searched through the entire buffer without finding valid headers,\n  // clear the processed portion to prevent infinite growth\n  if (search_offset > 0 && total_processed == 0) {\n    // We found only invalid data - remove the searched portion\n    input_buffer_.erase(\n        input_buffer_.begin(), input_buffer_.begin() + search_offset);\n  }\n  if (!output.empty()) {\n    return output;\n  }\n  return std::nullopt;\n}\n\nPreparedData TlsObfuscator::Obfuscate(\n    const std::uint8_t* data, std::size_t size) {\n  const std::scoped_lock<std::mutex> lock(mutex_);  // mutex\n\n  // Generate random padding (0-255 bytes)\n  const std::uint8_t padding_length = GetRandomByte(64, 255);\n  std::vector<std::uint8_t> random_padding =\n      GenerateRandomPadding(padding_length);\n\n  // Generate XOR key\n  const std::uint8_t xor_key = GetRandomByte();\n\n  // Prepare payload for XOR encryption\n  std::vector<std::uint8_t> encrypted_payload(data, data + size);\n  ApplyXorTransform(\n      encrypted_payload.data(), encrypted_payload.size(), xor_key);\n\n  const std::uint16_t total_content_length =\n      sizeof(TLSAppDataRecordHeader::random_data) +\n      sizeof(TLSAppDataRecordHeader::magic_flag) +\n      sizeof(TLSAppDataRecordHeader::protocol_version) +\n      sizeof(TLSAppDataRecordHeader::xor_key) +\n      sizeof(TLSAppDataRecordHeader::payload_length) +\n      sizeof(TLSAppDataRecordHeader::padding_length) +\n      static_cast<std::uint16_t>(size) + padding_length;\n\n  TLSAppDataRecordHeader header = {};\n  header.headertype = kFptnTlsApplicationHeaderType;\n  header.headermajor = kFptnTlsApplicationHeaderMajor;\n  header.headerminor = kFptnTlsApplicationHeaderMinor;\n\n  // Convert to network byte order\n  header.content_length = HostToNetwork16(total_content_length);\n  header.random_data = GetRandomData();\n  header.magic_flag = HostToNetwork16(kFptnTlsApplicationMagicFlag);\n  header.protocol_version = kFptnTlsApplicationProtocolVersion;\n  header.xor_key = xor_key;\n  header.payload_length = HostToNetwork16(static_cast<std::uint16_t>(size));\n  header.padding_length = padding_length;\n\n  std::vector<std::uint8_t> result;\n  result.resize(sizeof(TLSAppDataRecordHeader) + size + padding_length);\n\n  // Copy header\n  std::memcpy(result.data(), &header, sizeof(TLSAppDataRecordHeader));\n\n  // Copy encrypted payload\n  if (size > 0) {\n    std::memcpy(result.data() + sizeof(TLSAppDataRecordHeader),\n        encrypted_payload.data(), size);\n  }\n\n  // Copy random padding\n  if (padding_length > 0) {\n    std::memcpy(result.data() + sizeof(TLSAppDataRecordHeader) + size,\n        random_padding.data(), padding_length);\n  }\n\n  if (!result.empty()) {\n    return result;\n  }\n  return std::nullopt;\n}\n\nvoid TlsObfuscator::Reset() { input_buffer_.clear(); }\n\nbool TlsObfuscator::CheckProtocol(const std::uint8_t* data, std::size_t size) {\n  const std::scoped_lock<std::mutex> lock(mutex_);  // mutex\n\n  if (data == nullptr || size < sizeof(TLSAppDataRecordHeader)) {\n    return false;\n  }\n\n  TLSAppDataRecordHeader header = {};\n  std::memcpy(&header, data, sizeof(TLSAppDataRecordHeader));\n\n  const std::uint16_t magic_flag = NetworkToHost16(header.magic_flag);\n  const std::uint16_t content_length = NetworkToHost16(header.content_length);\n  const std::uint16_t payload_length = NetworkToHost16(header.payload_length);\n\n  const bool is_valid_protocol =\n      (header.headertype == kFptnTlsApplicationHeaderType) &&\n      (header.headermajor == kFptnTlsApplicationHeaderMajor) &&\n      (header.headerminor == kFptnTlsApplicationHeaderMinor) &&\n      (header.protocol_version == kFptnTlsApplicationProtocolVersion) &&\n      (magic_flag == kFptnTlsApplicationMagicFlag) &&\n      (content_length >= 11 + sizeof(header.xor_key) +\n                             sizeof(header.payload_length) +\n                             sizeof(header.padding_length)) &&\n      (content_length <= 16384) &&\n      (payload_length <= content_length - 11 - sizeof(header.xor_key) -\n                             sizeof(header.payload_length) -\n                             sizeof(header.padding_length));\n  return is_valid_protocol;\n}\n\nbool TlsObfuscator::HasPendingData() const {\n  const std::scoped_lock<std::mutex> lock(mutex_);  // mutex\n\n  bool result = !input_buffer_.empty();\n  return result;\n}\n\nstd::shared_ptr<IObfuscator> TlsObfuscator::Clone() const {\n  return std::make_shared<TlsObfuscator>();\n}\n\n};  // namespace fptn::protocol::https::obfuscator\n"
  },
  {
    "path": "src/fptn-protocol-lib/https/obfuscator/methods/tls/tls_obfuscator.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <cstdint>\n#include <memory>\n#include <mutex>\n#include <vector>\n\n#include \"fptn-protocol-lib/https/obfuscator/methods/obfuscator_interface.h\"\n\nnamespace fptn::protocol::https::obfuscator {\n\n\n// DEPRECATED\nclass TlsObfuscator : public IObfuscator {\n public:\n  TlsObfuscator() = default;\n  ~TlsObfuscator() override = default;\n\n  bool AddData(const std::uint8_t* data, std::size_t size) override;\n\n  PreparedData Deobfuscate() override;\n  PreparedData Obfuscate(const std::uint8_t* data, std::size_t size) override;\n  void Reset() override;\n\n  bool HasPendingData() const override;\n\n  bool CheckProtocol(const std::uint8_t* data, std::size_t size) override;\n\n  std::shared_ptr<IObfuscator> Clone() const override;\n\n private:\n  mutable std::mutex mutex_;\n\n  std::vector<uint8_t> input_buffer_;\n};\n\n};  // namespace fptn::protocol::https::obfuscator\n"
  },
  {
    "path": "src/fptn-protocol-lib/https/obfuscator/methods/tls2/tls_obfuscator2.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"fptn-protocol-lib/https/obfuscator/methods/tls2/tls_obfuscator2.h\"\n\n#include <cstring>\n#include <memory>\n#include <random>\n#include <utility>\n#include <vector>\n\n#ifdef _WIN32\n#include <winsock2.h>\n#else\n#include <arpa/inet.h>\n#endif\n\n#include \"fptn-protocol-lib/time/time_provider.h\"\n\nnamespace {\n\nconstexpr std::size_t kMmaxBufferSize = 65536;\n\nenum {\n  kFptnTlsApplicationHeaderType = 0x17,\n  kFptnTlsApplicationHeaderMajor = 0x03,\n  kFptnTlsApplicationHeaderMinor = 0x03\n};\n\n#pragma pack(push, 1)\nstruct TLSAppDataRecordHeader {\n  /* Standard TLS header */\n  std::uint8_t headertype;\n  std::uint8_t headermajor;\n  std::uint8_t headerminor;\n  std::uint16_t content_length;  // Must be in network byte order!\n\n  /* FPTN TLS obfuscator protocol */\n  std::uint64_t random_data;\n  std::uint32_t timestamp;  // Must be in network byte order!\n  std::uint8_t xor_key;\n  std::uint16_t payload_length;  // Must be in network byte order!\n  std::uint16_t padding_length;  // Must be in network byte order!\n  // std::uint8_t xor_payload[payload_length];\n  // std::uint8_t padding[padding_length]\n};\n#pragma pack(pop)\n\nstd::uint16_t HostToNetwork16(const std::uint16_t value) {\n  return htons(value);\n}\n\nstd::uint16_t NetworkToHost16(const std::uint16_t value) {\n  return ntohs(value);\n}\n\nstd::uint32_t HostToNetwork32(const std::uint32_t value) {\n  return htonl(value);\n}\n\nstd::uint32_t NetworkToHost32(const std::uint32_t value) {\n  return ntohl(value);\n}\n\nbool IsValidTimestamp(const std::uint32_t timestamp) {\n  const auto now = fptn::time::TimeProvider::Instance()->NowTimestamp();\n  constexpr std::uint32_t kTimeShiftSeconds = 10;\n\n  return (timestamp <= now + kTimeShiftSeconds) &&\n         (timestamp + kTimeShiftSeconds >= now);\n}\n\nstd::uint64_t GetRandomData() {\n  static std::mt19937 gen{std::random_device {}()};\n  std::uniform_int_distribution<std::uint64_t> dist(1024, UINT64_MAX);\n  return dist(gen);\n}\n\nstd::uint8_t GetRandomByte(\n    const std::uint8_t min = 0, const std::uint8_t max = UINT8_MAX) {\n  static std::mt19937 gen{std::random_device {}()};\n  std::uniform_int_distribution<std::uint16_t> dist(min, max);\n  return static_cast<std::uint8_t>(dist(gen));\n}\n\nstd::uint16_t GetRandomPaddingLength() {\n  static std::mt19937 gen{std::random_device {}()};\n  std::uniform_int_distribution<std::uint16_t> dist(4095, 8192);\n  return dist(gen);\n}\n\nstd::vector<std::uint8_t> GenerateRandomPadding(const std::size_t length) {\n  std::vector<std::uint8_t> padding(length);\n  for (std::size_t i = 0; i < length; ++i) {\n    padding[i] = GetRandomByte();\n  }\n  return padding;\n}\n\nvoid ApplyXorTransform(\n    std::uint8_t* data, const std::size_t size, const std::uint8_t key) {\n  for (std::size_t i = 0; i < size; ++i) {\n    data[i] ^= key;\n  }\n}\n\n}  // namespace\n\nnamespace fptn::protocol::https::obfuscator {\n\nbool TlsObfuscator2::AddData(const std::uint8_t* data, std::size_t size) {\n  const std::scoped_lock<std::mutex> lock(mutex_);\n\n  if (data && size > 0) {\n    if (input_buffer_.size() + size > kMmaxBufferSize) {\n      std::size_t available_space = kMmaxBufferSize - input_buffer_.size();\n      if (available_space > 0) {\n        input_buffer_.insert(input_buffer_.end(), data, data + available_space);\n        return true;\n      }\n      return false;\n    }\n    input_buffer_.insert(input_buffer_.end(), data, data + size);\n    return true;\n  }\n  return false;\n}\n\nPreparedData TlsObfuscator2::Deobfuscate() {\n  const std::scoped_lock<std::mutex> lock(mutex_);\n\n  if (input_buffer_.size() < sizeof(TLSAppDataRecordHeader)) {\n    return std::nullopt;\n  }\n\n  std::size_t total_processed = 0;\n  std::size_t search_offset = 0;\n  std::vector<std::uint8_t> output;\n\n  while (\n      input_buffer_.size() - search_offset >= sizeof(TLSAppDataRecordHeader)) {\n    TLSAppDataRecordHeader header = {};\n    std::memcpy(&header, input_buffer_.data() + search_offset,\n        sizeof(TLSAppDataRecordHeader));\n\n    const std::uint16_t total_content_length =\n        NetworkToHost16(header.content_length);\n    const std::uint32_t timestamp = NetworkToHost32(header.timestamp);\n    const std::uint16_t payload_length = NetworkToHost16(header.payload_length);\n    const std::uint16_t padding_length = NetworkToHost16(header.padding_length);\n\n    const bool is_fptn_protocol =\n        IsValidTimestamp(timestamp) &&\n        (header.headermajor == kFptnTlsApplicationHeaderMajor) &&\n        (header.headerminor == kFptnTlsApplicationHeaderMinor);\n\n    if (!is_fptn_protocol) {\n      search_offset++;\n      continue;\n    }\n\n    const bool is_valid_header =\n        (total_content_length >=\n            sizeof(TLSAppDataRecordHeader::random_data) +\n                sizeof(TLSAppDataRecordHeader::timestamp) +\n                sizeof(TLSAppDataRecordHeader::xor_key) +\n                sizeof(TLSAppDataRecordHeader::payload_length) +\n                sizeof(TLSAppDataRecordHeader::padding_length) +\n                payload_length + padding_length);\n\n    if (!is_valid_header) {\n      search_offset++;\n      continue;\n    }\n\n    const size_t full_record_size =\n        sizeof(TLSAppDataRecordHeader) + payload_length + padding_length;\n\n    if (input_buffer_.size() - search_offset < full_record_size) {\n      break;\n    }\n\n    const std::uint8_t* encrypted_payload =\n        input_buffer_.data() + search_offset + sizeof(TLSAppDataRecordHeader);\n\n    std::vector<std::uint8_t> decrypted_payload(\n        encrypted_payload, encrypted_payload + payload_length);\n\n    ApplyXorTransform(\n        decrypted_payload.data(), decrypted_payload.size(), header.xor_key);\n\n    output.insert(\n        output.end(), decrypted_payload.begin(), decrypted_payload.end());\n\n    input_buffer_.erase(input_buffer_.begin() + search_offset,\n        input_buffer_.begin() + search_offset + full_record_size);\n    total_processed += full_record_size;\n    break;\n  }\n\n  if (search_offset > 0 && total_processed == 0) {\n    input_buffer_.erase(\n        input_buffer_.begin(), input_buffer_.begin() + search_offset);\n  }\n  if (!output.empty()) {\n    return output;\n  }\n  return std::nullopt;\n}\n\nPreparedData TlsObfuscator2::Obfuscate(\n    const std::uint8_t* data, std::size_t size) {\n  const std::scoped_lock<std::mutex> lock(mutex_);\n\n  const std::uint16_t padding_length = GetRandomPaddingLength();\n  const std::vector<std::uint8_t> random_padding =\n      GenerateRandomPadding(padding_length);\n\n  const std::uint8_t xor_key = GetRandomByte();\n\n  std::vector<std::uint8_t> encrypted_payload(data, data + size);\n  ApplyXorTransform(\n      encrypted_payload.data(), encrypted_payload.size(), xor_key);\n\n  const std::uint16_t total_content_length =\n      sizeof(TLSAppDataRecordHeader::random_data) +\n      sizeof(TLSAppDataRecordHeader::timestamp) +\n      sizeof(TLSAppDataRecordHeader::xor_key) +\n      sizeof(TLSAppDataRecordHeader::payload_length) +\n      sizeof(TLSAppDataRecordHeader::padding_length) +\n      static_cast<std::uint16_t>(size) + padding_length;\n\n  TLSAppDataRecordHeader header = {};\n  header.headertype = kFptnTlsApplicationHeaderType;\n  header.headermajor = kFptnTlsApplicationHeaderMajor;\n  header.headerminor = kFptnTlsApplicationHeaderMinor;\n\n  header.content_length = HostToNetwork16(total_content_length);\n  header.random_data = GetRandomData();\n\n  const std::uint32_t current_timestamp =\n      fptn::time::TimeProvider::Instance()->NowTimestamp();\n  header.timestamp = HostToNetwork32(current_timestamp);\n\n  header.xor_key = xor_key;\n  header.payload_length = HostToNetwork16(static_cast<std::uint16_t>(size));\n  header.padding_length = HostToNetwork16(padding_length);\n\n  std::vector<std::uint8_t> result;\n  result.resize(sizeof(TLSAppDataRecordHeader) + size + padding_length);\n\n  std::memcpy(result.data(), &header, sizeof(TLSAppDataRecordHeader));\n\n  if (size > 0) {\n    std::memcpy(result.data() + sizeof(TLSAppDataRecordHeader),\n        encrypted_payload.data(), size);\n  }\n\n  if (padding_length > 0) {\n    std::memcpy(result.data() + sizeof(TLSAppDataRecordHeader) + size,\n        random_padding.data(), padding_length);\n  }\n\n  if (!result.empty()) {\n    return result;\n  }\n  return std::nullopt;\n}\n\nvoid TlsObfuscator2::Reset() { input_buffer_.clear(); }\n\nbool TlsObfuscator2::CheckProtocol(const std::uint8_t* data, std::size_t size) {\n  const std::scoped_lock<std::mutex> lock(mutex_);\n\n  if (data == nullptr || size < sizeof(TLSAppDataRecordHeader)) {\n    return false;\n  }\n\n  TLSAppDataRecordHeader header = {};\n  std::memcpy(&header, data, sizeof(TLSAppDataRecordHeader));\n\n  const std::uint32_t timestamp = NetworkToHost32(header.timestamp);\n  const std::uint16_t content_length = NetworkToHost16(header.content_length);\n  const std::uint16_t payload_length = NetworkToHost16(header.payload_length);\n  const std::uint16_t padding_length = NetworkToHost16(header.padding_length);\n\n  const bool is_valid_protocol =\n      (header.headertype == kFptnTlsApplicationHeaderType) &&\n      (header.headermajor == kFptnTlsApplicationHeaderMajor) &&\n      (header.headerminor == kFptnTlsApplicationHeaderMinor) &&\n      IsValidTimestamp(timestamp) &&\n      (content_length >= sizeof(TLSAppDataRecordHeader::random_data) +\n                             sizeof(TLSAppDataRecordHeader::timestamp) +\n                             sizeof(TLSAppDataRecordHeader::xor_key) +\n                             sizeof(TLSAppDataRecordHeader::payload_length) +\n                             sizeof(TLSAppDataRecordHeader::padding_length) +\n                             payload_length + padding_length) &&\n      (content_length <= 16384);\n\n  return is_valid_protocol;\n}\n\nbool TlsObfuscator2::HasPendingData() const {\n  const std::scoped_lock<std::mutex> lock(mutex_);\n  return !input_buffer_.empty();\n}\n\nstd::shared_ptr<IObfuscator> TlsObfuscator2::Clone() const {\n  return std::make_shared<TlsObfuscator2>();\n}\n\n};  // namespace fptn::protocol::https::obfuscator\n"
  },
  {
    "path": "src/fptn-protocol-lib/https/obfuscator/methods/tls2/tls_obfuscator2.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <cstdint>\n#include <memory>\n#include <mutex>\n#include <vector>\n\n#include \"fptn-protocol-lib/https/obfuscator/methods/obfuscator_interface.h\"\n\nnamespace fptn::protocol::https::obfuscator {\n\nclass TlsObfuscator2 : public IObfuscator {\n public:\n  TlsObfuscator2() = default;\n  ~TlsObfuscator2() override = default;\n\n  bool AddData(const std::uint8_t* data, std::size_t size) override;\n\n  PreparedData Deobfuscate() override;\n  PreparedData Obfuscate(const std::uint8_t* data, std::size_t size) override;\n  void Reset() override;\n\n  bool HasPendingData() const override;\n\n  bool CheckProtocol(const std::uint8_t* data, std::size_t size) override;\n\n  std::shared_ptr<IObfuscator> Clone() const override;\n\n private:\n  mutable std::mutex mutex_;\n\n  std::vector<uint8_t> input_buffer_;\n};\n\n};  // namespace fptn::protocol::https::obfuscator\n"
  },
  {
    "path": "src/fptn-protocol-lib/https/obfuscator/tcp_stream/tcp_stream.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <memory>\n#include <utility>\n#include <vector>\n\n#include <boost/asio.hpp>\n#include <boost/asio/strand.hpp>\n#include <boost/beast/core.hpp>\n#include <boost/beast/ssl.hpp>\n\n#include \"fptn-protocol-lib/https/obfuscator/methods/obfuscator_interface.h\"\n\nnamespace fptn::protocol::https::obfuscator {\n\ntemplate <typename Stream>\nclass TcpStream {\n public:\n  using executor_type = typename Stream::executor_type;\n  using next_layer_type = Stream;\n  using lowest_layer_type = Stream;\n\n  explicit TcpStream(executor_type ex)\n      : stream_(ex), strand_(ex), obfuscator_(nullptr) {}\n\n  explicit TcpStream(executor_type ex, IObfuscatorSPtr obfuscator = nullptr)\n      : stream_(ex), strand_(ex), obfuscator_(std::move(obfuscator)) {}\n\n  explicit TcpStream(Stream&& stream, IObfuscatorSPtr obfuscator = nullptr)\n      : stream_(std::move(stream)),\n        strand_(stream_.get_executor()),\n        obfuscator_(std::move(obfuscator)) {}\n\n  TcpStream(const TcpStream&) = delete;\n  TcpStream& operator=(const TcpStream&) = delete;\n\n  TcpStream(TcpStream&& other) noexcept\n      : stream_(std::move(other.stream_)),\n        strand_(std::move(other.strand_)),\n        obfuscator_(std::move(other.obfuscator_)) {}\n\n  TcpStream& operator=(TcpStream&& other) noexcept {\n    if (this != &other) {\n      stream_ = std::move(other.stream_);\n      strand_ = std::move(other.strand_);\n      obfuscator_ = std::move(other.obfuscator_);\n    }\n    return *this;\n  }\n\n  executor_type get_executor() { return stream_.get_executor(); }\n\n  next_layer_type& next_layer() { return stream_; }\n\n  const next_layer_type& next_layer() const { return stream_; }\n\n  lowest_layer_type& lowest_layer() { return stream_; }\n\n  const lowest_layer_type& lowest_layer() const { return stream_; }\n\n  template <typename MutableBufferSequence>\n  std::size_t read_some(\n      const MutableBufferSequence& buffers, boost::system::error_code& ec) {\n    if (!obfuscator_) {\n      return stream_.read_some(buffers, ec);\n    }\n\n    constexpr std::size_t kTempBufferSize = 16 * 1024;\n    std::array<std::uint8_t, kTempBufferSize> temp_buffer;\n\n    while (true) {\n      if (obfuscator_->HasPendingData()) {\n        auto deobfuscated = obfuscator_->Deobfuscate();\n        if (deobfuscated.has_value()) {\n          return boost::asio::buffer_copy(buffers,\n              boost::asio::buffer(deobfuscated->data(), deobfuscated->size()));\n        }\n      }\n\n      const std::size_t bytes_read =\n          stream_.read_some(boost::asio::buffer(temp_buffer), ec);\n\n      if (ec) {\n        return bytes_read;\n      }\n\n      if (bytes_read == 0) {\n        return 0;\n      }\n\n      obfuscator_->AddData(temp_buffer.data(), bytes_read);\n\n      auto deobfuscated = obfuscator_->Deobfuscate();\n      if (deobfuscated.has_value()) {\n        return boost::asio::buffer_copy(buffers,\n            boost::asio::buffer(deobfuscated->data(), deobfuscated->size()));\n      }\n    }\n  }\n\n  template <typename MutableBufferSequence, typename ReadHandler>\n  void async_read_some(\n      const MutableBufferSequence& buffers, ReadHandler&& handler) {\n    if (!obfuscator_) {\n      boost::asio::dispatch(\n          strand_, [this, buffers,\n                       handler = std::forward<ReadHandler>(handler)]() mutable {\n            stream_.async_read_some(buffers, std::move(handler));\n          });\n      return;\n    }\n\n    boost::asio::dispatch(strand_, [this, buffers,\n                                       handler = std::forward<ReadHandler>(\n                                           handler)]() mutable {\n      if (obfuscator_->HasPendingData()) {\n        auto deobfuscated = obfuscator_->Deobfuscate();\n        if (deobfuscated.has_value()) {\n          const std::size_t bytes_copied = boost::asio::buffer_copy(\n              buffers, boost::asio::buffer(deobfuscated.value()));\n          handler(boost::system::error_code{}, bytes_copied);\n          return;\n        }\n      }\n      stream_.async_read_some(buffers,\n          [this, buffers, handler = std::move(handler)](\n              boost::system::error_code ec, std::size_t bytes_read) mutable {\n            if (ec || bytes_read == 0) {\n              handler(ec, bytes_read);\n              return;\n            }\n\n            if (has_single_buffer(buffers)) {\n              const auto& it = boost::asio::buffer_sequence_begin(buffers);\n              const boost::asio::mutable_buffer& first_buffer = *it;\n              const std::uint8_t* data_ptr =\n                  static_cast<std::uint8_t*>(first_buffer.data());\n\n              obfuscator_->AddData(data_ptr, bytes_read);\n\n              auto deobfuscated = obfuscator_->Deobfuscate();\n\n              if (deobfuscated.has_value()) {\n                const std::size_t bytes_copied = boost::asio::buffer_copy(\n                    buffers, boost::asio::buffer(deobfuscated.value()));\n                handler(ec, bytes_copied);\n              } else {\n                this->async_read_some(buffers, std::move(handler));\n              }\n            } else {\n              std::vector<std::uint8_t> temp_data(bytes_read);\n              boost::asio::buffer_copy(boost::asio::buffer(temp_data), buffers);\n              obfuscator_->AddData(temp_data.data(), bytes_read);\n\n              auto deobfuscated = obfuscator_->Deobfuscate();\n\n              if (deobfuscated.has_value()) {\n                const std::size_t bytes_copied = boost::asio::buffer_copy(\n                    buffers, boost::asio::buffer(deobfuscated.value()));\n                handler(ec, bytes_copied);\n              } else {\n                boost::asio::dispatch(strand_,\n                    [this, buffers,\n                        handler =\n                            std::forward<ReadHandler>(handler)]() mutable {\n                      this->async_read_some(buffers, std::move(handler));\n                    });\n              }\n            }\n          });\n    });\n  }\n\n  template <typename ConstBufferSequence>\n  std::size_t write_some(\n      const ConstBufferSequence& buffers, boost::system::error_code& ec) {\n    if (!obfuscator_) {\n      return stream_.write_some(buffers, ec);\n    }\n\n    std::vector<std::uint8_t> plain_data(boost::asio::buffer_size(buffers));\n    boost::asio::buffer_copy(boost::asio::buffer(plain_data), buffers);\n\n    auto obfuscated =\n        obfuscator_->Obfuscate(plain_data.data(), plain_data.size());\n\n    if (!obfuscated.has_value()) {\n      ec = boost::asio::error::eof;\n      return 0;\n    }\n    return stream_.write_some(boost::asio::buffer(obfuscated.value()), ec);\n  }\n\n  template <typename ConstBufferSequence, typename WriteHandler>\n  void async_write_some(\n      const ConstBufferSequence& buffers, WriteHandler&& handler) {\n    if (!obfuscator_) {\n      boost::asio::dispatch(strand_,\n          [this, buffers,\n              handler = std::forward<WriteHandler>(handler)]() mutable {\n            stream_.async_write_some(buffers, std::move(handler));\n          });\n      return;\n    }\n\n    const std::size_t total_size = boost::asio::buffer_size(buffers);\n    auto plain_data = std::make_shared<std::vector<std::uint8_t>>(total_size);\n    boost::asio::buffer_copy(boost::asio::buffer(*plain_data), buffers);\n\n    boost::asio::dispatch(\n        strand_, [this, plain_data,\n                     handler = std::forward<WriteHandler>(handler)]() mutable {\n          auto obfuscated_data =\n              obfuscator_->Obfuscate(plain_data->data(), plain_data->size());\n          if (!obfuscated_data.has_value()) {\n            handler(boost::system::error_code(boost::asio::error::eof), 0);\n            return;\n          }\n          stream_.async_write_some(\n              boost::asio::buffer(obfuscated_data.value()), std::move(handler));\n        });\n  }\n\n  template <typename... Args>\n  auto async_connect(Args&&... args) {\n    return stream_.async_connect(std::forward<Args>(args)...);\n  }\n\n  void close() { stream_.close(); }\n\n  void close(boost::system::error_code& ec) { stream_.close(ec); }\n\n  template <typename Option>\n  void set_option(const Option& option) {\n    stream_.set_option(option);\n  }\n\n  void expires_after(std::chrono::steady_clock::duration expiry_time) {\n    stream_.expires_after(expiry_time);\n  }\n\n  void expires_never() { stream_.expires_never(); }\n\n  bool is_open() const { return stream_.is_open(); }\n\n  auto remote_endpoint() { return stream_.socket().remote_endpoint(); }\n\n  auto remote_endpoint(boost::system::error_code& ec) {\n    return stream_.socket().remote_endpoint(ec);\n  }\n\n  auto local_endpoint() { return stream_.socket().local_endpoint(); }\n\n  auto local_endpoint(boost::system::error_code& ec) {\n    return stream_.socket().local_endpoint(ec);\n  }\n\n  void set_obfuscator(IObfuscatorSPtr obfuscator) {\n    obfuscator_ = std::move(obfuscator);\n  }\n\n  IObfuscatorSPtr get_obfuscator() const { return obfuscator_; }\n\n protected:\n  template <typename Sequence>\n  static bool has_single_buffer(const Sequence& buffers) {\n    std::size_t count = 0;\n    auto end = boost::asio::buffer_sequence_end(buffers);\n    for (auto it = boost::asio::buffer_sequence_begin(buffers); it != end;\n        ++it) {\n      ++count;\n    }\n    return count == 1;\n  }\n\n private:\n  Stream stream_;\n  boost::asio::strand<executor_type> strand_;\n  IObfuscatorSPtr obfuscator_;\n};\n\n}  // namespace fptn::protocol::https::obfuscator\n\nnamespace boost::beast {\n\ntemplate <typename AsyncStream>\ninline void teardown(boost::beast::role_type role,\n    fptn::protocol::https::obfuscator::TcpStream<AsyncStream>& stream,\n    boost::system::error_code& ec) {\n  teardown(role, stream.next_layer(), ec);\n}\n\ntemplate <typename AsyncStream, typename TeardownHandler>\ninline void async_teardown(boost::beast::role_type role,\n    fptn::protocol::https::obfuscator::TcpStream<AsyncStream>& stream,\n    TeardownHandler&& handler) {\n  async_teardown(\n      role, stream.next_layer(), std::forward<TeardownHandler>(handler));\n}\n\n}  // namespace boost::beast\n"
  },
  {
    "path": "src/fptn-protocol-lib/https/utils/change_cipher_spec.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <vector>\n\nnamespace fptn::protocol::https::utils {\n\ninline std::vector<std::uint8_t> MakeClientChangeCipherSpec() {\n    return {0x14, 0x03, 0x03, 0x00, 0x01, 0x01};\n}\n\n}  // namespace fptn::protocol::https::utils\n"
  },
  {
    "path": "src/fptn-protocol-lib/https/utils/tls/tls.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"fptn-protocol-lib/https/utils/tls/tls.h\"\n\n#include <algorithm>\n#include <string>\n#include <unordered_map>\n#include <utility>\n#include <vector>\n\n#include <boost/asio/ssl/detail/openssl_types.hpp>\n#include <boost/asio/ssl/error.hpp>\n#include <boost/asio/ssl/stream.hpp>\n#include <boost/beast/http.hpp>\n#include <fmt/format.h>  // NOLINT(build/include_order)\n#include <nlohmann/json.hpp>\n#include <openssl/evp.h>    // NOLINT(build/include_order)\n#include <openssl/md5.h>    // NOLINT(build/include_order)\n#include <openssl/rand.h>   // NOLINT(build/include_order)\n#include <openssl/sha.h>    // NOLINT(build/include_order)\n#include <openssl/ssl.h>    // NOLINT(build/include_order)\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\n#include \"fptn-protocol-lib/time/time_provider.h\"\n\nnamespace fptn::protocol::https::utils {\n\nconstexpr int kSessionLen = 32;\nconstexpr std::size_t kFptnKeyLength = 4;\nconstexpr int kDecoyHandshakeSessionIDShift = 10;\nconstexpr int kDecoyHandshakeSessionIDShift2 = 14;\n\nstd::string GetSHA1Hash(std::uint32_t number) {\n  EVP_MD_CTX* mdctx = EVP_MD_CTX_new();\n  if (!mdctx) {\n    return {};\n  }\n\n  const EVP_MD* md = EVP_get_digestbyname(\"SHA1\");\n  if (!md) {\n    EVP_MD_CTX_free(mdctx);\n    return {};\n  }\n\n  if (!EVP_DigestInit_ex(mdctx, md, nullptr)) {\n    EVP_MD_CTX_free(mdctx);\n    return {};\n  }\n\n  if (!EVP_DigestUpdate(mdctx, &number, sizeof(number))) {\n    EVP_MD_CTX_free(mdctx);\n    return {};\n  }\n\n  unsigned int outlen = 0;\n  unsigned char buffer[EVP_MAX_MD_SIZE] = {0};\n  if (!EVP_DigestFinal_ex(mdctx, buffer, &outlen)) {\n    EVP_MD_CTX_free(mdctx);\n    return {};\n  }\n  EVP_MD_CTX_free(mdctx);\n  return std::string(reinterpret_cast<const char*>(buffer), outlen);\n}\n\nstd::string GenerateFptnKey(std::uint32_t timestamp) {\n  std::string result = GetSHA1Hash(htonl(timestamp));\n  if (result.size() > kFptnKeyLength) {  //  key len\n    return result.substr(0, kFptnKeyLength);\n  }\n  throw boost::beast::system_error(\n      boost::beast::error_code(static_cast<int>(::ERR_get_error()),\n          boost::asio::error::get_ssl_category()),\n      \"Error generate Session ID\");\n}\n\nbool SetDecoyHandshakeSessionID(SSL* ssl) {\n  // random\n  std::uint8_t session_id[kSessionLen] = {0};\n  if (::RAND_bytes(session_id, sizeof(session_id)) != 1) {\n    return false;\n  }\n\n  // copy timestamp\n  const auto timestamp = fptn::time::TimeProvider::Instance()->NowTimestamp();\n  const std::string key = GenerateFptnKey(timestamp);\n  std::memcpy(\n      &session_id[kDecoyHandshakeSessionIDShift], key.c_str(), key.size());\n  return 0 != ::SSL_set_tls_hello_custom_session_id(\n                  ssl, session_id, sizeof(session_id));\n}\n\nbool IsDecoyHandshakeSessionID(\n    const std::uint8_t* session, std::size_t session_len) {\n  (void)session_len;\n  char data[kFptnKeyLength] = {0};\n  std::memcpy(&data, &session[kDecoyHandshakeSessionIDShift], sizeof(data));\n  const std::string recv_key(data, sizeof(data));\n\n  const auto now_timestamp =\n      fptn::time::TimeProvider::Instance()->NowTimestamp();\n\n  constexpr std::uint32_t kTimeShiftSeconds = 10;  // ten seconds\n\n  const std::uint32_t timestamp = now_timestamp + (kTimeShiftSeconds / 2);\n\n  for (std::uint32_t shift = 0; shift <= kTimeShiftSeconds; shift++) {\n    const std::string key = GenerateFptnKey(timestamp - shift);\n    if (recv_key == key) {\n      return true;\n    }\n  }\n  return false;\n}\n\nbool IsDecoyHandshakeSessionID2(\n    const std::uint8_t* session, std::size_t session_len) {\n  (void)session_len;\n  char data[kFptnKeyLength] = {0};\n  std::memcpy(&data, &session[kDecoyHandshakeSessionIDShift2], sizeof(data));\n  const std::string recv_key(data, sizeof(data));\n\n  const auto now_timestamp =\n      fptn::time::TimeProvider::Instance()->NowTimestamp();\n\n  constexpr std::uint32_t kTimeShiftSeconds = 10;  // ten seconds\n\n  const std::uint32_t timestamp = now_timestamp + (kTimeShiftSeconds / 2);\n\n  for (std::uint32_t shift = 0; shift <= kTimeShiftSeconds; shift++) {\n    const std::string key = GenerateFptnKey(timestamp - shift);\n    if (recv_key == key) {\n      return true;\n    }\n  }\n  return false;\n}\n\nbool SetHandshakeSessionID(SSL* ssl) {\n  // random\n  std::uint8_t session_id[kSessionLen] = {0};\n  if (::RAND_bytes(session_id, sizeof(session_id)) != 1) {\n    return false;\n  }\n  // copy timestamp\n  const auto timestamp = fptn::time::TimeProvider::Instance()->NowTimestamp();\n\n  const std::string key = GenerateFptnKey(timestamp);\n  std::memcpy(&session_id[kSessionLen - key.size()], key.c_str(), key.size());\n\n  return 0 != ::SSL_set_tls_hello_custom_session_id(\n                  ssl, session_id, sizeof(session_id));\n}\n\nbool IsFptnClientSessionID(\n    const std::uint8_t* session, std::size_t session_len) {\n  char data[kFptnKeyLength] = {0};\n  std::memcpy(&data, &session[session_len - sizeof(data)], sizeof(data));\n  const std::string recv_key(data, sizeof(data));\n\n  const auto now_timestamp =\n      fptn::time::TimeProvider::Instance()->NowTimestamp();\n\n  constexpr std::uint32_t kTimeShiftSeconds = 10;  // ten seconds\n\n  const std::uint32_t timestamp = now_timestamp + (kTimeShiftSeconds / 2);\n\n  for (std::uint32_t shift = 0; shift <= kTimeShiftSeconds; shift++) {\n    const std::string key = GenerateFptnKey(timestamp - shift);\n    if (recv_key == key) {\n      return true;\n    }\n  }\n  return false;\n}\n\nbool SetHandshakeSni(SSL* ssl, const std::string& sni) {\n  // Set SNI (Server Name)\n  if (1 != ::SSL_set_tlsext_host_name(ssl, sni.c_str())) {\n    throw boost::beast::system_error(\n        boost::beast::error_code(static_cast<int>(::ERR_get_error()),\n            boost::asio::error::get_ssl_category()),\n        fmt::format(R\"(Failed to set SNI \"{}\")\", sni));\n  }\n  // Add Chrome-like padding (to match packet size)\n  SSL_set_options(ssl, SSL_OP_LEGACY_SERVER_CONNECT);\n  return true;\n}\n\nSSL_CTX* CreateNewSslCtx() {\n  SSL_CTX* handle = ::SSL_CTX_new(::TLS_client_method());\n  if (!handle) {\n    throw boost::beast::system_error(\n        boost::beast::error_code(static_cast<int>(::ERR_get_error()),\n            boost::asio::error::get_ssl_category()),\n        \"Failed to create SSL context\");\n  }\n\n  if (0 == ::SSL_CTX_set_min_proto_version(handle, TLS1_2_VERSION)) {\n    ::SSL_CTX_free(handle);\n    throw boost::beast::system_error(\n        boost::beast::error_code(static_cast<int>(::ERR_get_error()),\n            boost::asio::error::get_ssl_category()),\n        \"Failed to set min TLS version\");\n  }\n\n  if (0 == ::SSL_CTX_set_max_proto_version(handle, TLS1_3_VERSION)) {\n    ::SSL_CTX_free(handle);\n    throw boost::beast::system_error(\n        boost::beast::error_code(static_cast<int>(::ERR_get_error()),\n            boost::asio::error::get_ssl_category()),\n        \"Failed to set max TLS version\");\n  }\n\n  SSL_CTX_set_grease_enabled(handle, 1);\n  SSL_CTX_enable_ocsp_stapling(handle);\n  SSL_CTX_enable_signed_cert_timestamps(handle);\n\n  // Set ciphers ТОЧНО КАК В RUST КОДЕ\n  const std::string ciphers_list = ChromeCiphers();\n  if (0 == ::SSL_CTX_set_cipher_list(handle, ciphers_list.c_str())) {\n    ::SSL_CTX_free(handle);\n    throw boost::beast::system_error(\n        boost::beast::error_code(static_cast<int>(::ERR_get_error()),\n            boost::asio::error::get_ssl_category()),\n        \"Failed to set ciphers\");\n  }\n\n  const char* groups = \"X25519MLKEM768:X25519:secp256r1:secp384r1\";\n  SSL_CTX_set1_groups_list(handle, groups);\n\n  static unsigned char alpn[] = {\n      0x02, 'h', '2', 0x08, 'h', 't', 't', 'p', '/', '1', '.', '1'};\n  if (0 != ::SSL_CTX_set_alpn_protos(handle, alpn, sizeof(alpn))) {\n    ::SSL_CTX_free(handle);\n    throw boost::beast::system_error(\n        boost::beast::error_code(static_cast<int>(::ERR_get_error()),\n            boost::asio::error::get_ssl_category()),\n        \"Failed to set ALPN\");\n  }\n\n  const std::string sigalgs_list =\n      \"ecdsa_secp256r1_sha256:\"\n      \"rsa_pss_rsae_sha256:\"\n      \"rsa_pkcs1_sha256:\"\n      \"ecdsa_secp384r1_sha384:\"\n      \"rsa_pss_rsae_sha384:\"\n      \"rsa_pkcs1_sha384:\"\n      \"rsa_pss_rsae_sha512:\"\n      \"rsa_pkcs1_sha512\";\n\n  if (1 != SSL_CTX_set1_sigalgs_list(handle, sigalgs_list.c_str())) {\n    ::SSL_CTX_free(handle);\n    throw boost::beast::system_error(\n        boost::beast::error_code(static_cast<int>(::ERR_get_error()),\n            boost::asio::error::get_ssl_category()),\n        \"Failed to set signature algorithms\");\n  }\n\n  SSL_CTX_set_mode(handle, SSL_MODE_RELEASE_BUFFERS);\n  return handle;\n}\n\nstd::string ChromeCiphers() {\n  return \"TLS_AES_128_GCM_SHA256:\"\n         \"TLS_AES_256_GCM_SHA384:\"\n         \"TLS_CHACHA20_POLY1305_SHA256:\"\n         \"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:\"\n         \"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:\"\n         \"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:\"\n         \"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:\"\n         \"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256:\"\n         \"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256:\"\n         \"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA:\"\n         \"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA:\"\n         \"TLS_RSA_WITH_AES_128_GCM_SHA256:\"\n         \"TLS_RSA_WITH_AES_256_GCM_SHA384:\"\n         \"TLS_RSA_WITH_AES_128_CBC_SHA:\"\n         \"TLS_RSA_WITH_AES_256_CBC_SHA\";\n}\n\nstd::string GetCertificateMD5Fingerprint(const X509* cert) {\n  unsigned char md[MD5_DIGEST_LENGTH] = {};\n  if (X509_digest(cert, EVP_md5(), md, nullptr) != 1) {\n    SPDLOG_ERROR(\"Failed to compute MD5 digest\");\n    return {};\n  }\n\n  std::stringstream ss;\n  // NOLINTNEXTLINE(modernize-loop-convert)\n  for (int i = 0; i < MD5_DIGEST_LENGTH; i++) {\n    ss << std::hex << std::setw(2) << std::setfill('0')\n       << static_cast<int>(md[i]);\n  }\n  return ss.str();\n}\n\nstd::vector<std::uint8_t> GenerateDecoyTlsHandshake(const std::string& sni) {\n  std::vector<std::uint8_t> handshake_data;\n  try {\n    SSL_CTX* ssl_ctx = CreateNewSslCtx();\n    SSL* ssl = ::SSL_new(ssl_ctx);\n\n    BIO* bio_out = ::BIO_new(BIO_s_mem());\n    BIO* bio_in = ::BIO_new(BIO_s_mem());\n    ::SSL_set_bio(ssl, bio_in, bio_out);\n\n    SetHandshakeSni(ssl, sni);\n    SetDecoyHandshakeSessionID(ssl);\n\n    ::SSL_set_connect_state(ssl);\n\n    int handshake_result;\n    int retry_count = 0;\n    constexpr int kMaxRetries = 10;\n\n    do {\n      handshake_result = ::SSL_do_handshake(ssl);\n\n      char* bio_data = nullptr;\n      auto bio_length = ::BIO_get_mem_data(bio_out, &bio_data);\n\n      if (bio_data && bio_length > 0) {\n        handshake_data.insert(\n            handshake_data.end(), bio_data, bio_data + bio_length);\n        BIO_reset(bio_out);\n      }\n      retry_count++;\n    } while (handshake_result <= 0 &&\n             SSL_get_error(ssl, handshake_result) == SSL_ERROR_WANT_WRITE &&\n             retry_count < kMaxRetries);\n\n    if (handshake_data.empty()) {\n      SPDLOG_WARN(\"No handshake data was generated for SNI: {}\", sni);\n    } else {\n      SPDLOG_INFO(\n          \"Successfully generated {} bytes of TLS handshake for SNI: {}\",\n          handshake_data.size(), sni);\n    }\n    ::SSL_free(ssl);\n    ::SSL_CTX_free(ssl_ctx);\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\n        \"GenerateTlsHandshake exception for SNI {}: {}\", sni, e.what());\n  }\n  return handshake_data;\n}\n\nstd::optional<std::array<std::uint8_t, 32>> GenerateDecoyTlsSessionId() {\n  std::array<std::uint8_t, kSessionLen> session_id{};\n  if (::RAND_bytes(session_id.data(), session_id.size()) != 1) {\n    return std::nullopt;\n  }\n\n  // Get timestamp and generate key\n  const auto timestamp = fptn::time::TimeProvider::Instance()->NowTimestamp();\n  const std::string key = GenerateFptnKey(timestamp);\n  const std::size_t copy_size =\n      std::min(key.size(), session_id.size() - kDecoyHandshakeSessionIDShift);\n  std::memcpy(session_id.data() + kDecoyHandshakeSessionIDShift, key.c_str(),\n      copy_size);\n  return session_id;\n}\n\nstd::optional<std::array<std::uint8_t, 32>> GenerateDecoyTlsSessionId2() {\n  std::array<std::uint8_t, kSessionLen> session_id{};\n  if (::RAND_bytes(session_id.data(), session_id.size()) != 1) {\n    return std::nullopt;\n  }\n\n  // Get timestamp and generate key\n  const auto timestamp = fptn::time::TimeProvider::Instance()->NowTimestamp();\n  const std::string key = GenerateFptnKey(timestamp);\n  const std::size_t copy_size =\n      std::min(key.size(), session_id.size() - kDecoyHandshakeSessionIDShift2);\n  std::memcpy(session_id.data() + kDecoyHandshakeSessionIDShift2, key.c_str(),\n      copy_size);\n  return session_id;\n}\n\n// MAYBE IT WILL REFACTOR\nnamespace {\nstd::unordered_map<SSL*, CertificateVerificationCallback*> attach_callbacks;\nstd::mutex attach_callback_mutex;\n}  // namespace\n\nvoid AttachCertificateVerificationCallback(\n    SSL* ssl, const CertificateVerificationCallback& callback) {\n  auto* func_ptr = new CertificateVerificationCallback(callback);\n  {\n    const std::scoped_lock lock(attach_callback_mutex);  // mutex\n    attach_callbacks[ssl] = func_ptr;\n  }\n\n  ::SSL_set_verify(\n      ssl, SSL_VERIFY_PEER, [](int preverified, X509_STORE_CTX* ctx) -> int {\n        (void)preverified;\n\n        const X509* cert = ::X509_STORE_CTX_get_current_cert(ctx);\n        if (!cert) {\n          return 0;\n        }\n\n        SSL* ssl = static_cast<SSL*>(::X509_STORE_CTX_get_ex_data(\n            ctx, ::SSL_get_ex_data_X509_STORE_CTX_idx()));\n        if (!ssl) {\n          return 0;\n        }\n\n        const std::string md5_fingerprint = GetCertificateMD5Fingerprint(cert);\n        if (md5_fingerprint.empty()) {\n          return 0;\n        }\n\n        const std::scoped_lock lock(attach_callback_mutex);  // mutex\n        {\n          const auto it = attach_callbacks.find(ssl);\n          if (it == attach_callbacks.end()) {\n            return 0;\n          }\n          return (it->second && (*it->second)(md5_fingerprint) ? 1 : 0);\n        }\n      });\n}\n\nvoid AttachCertificateVerificationCallbackDelete(SSL* ssl) {\n  const std::scoped_lock lock(attach_callback_mutex);  // mutex\n\n  auto it = attach_callbacks.find(ssl);\n  if (it != attach_callbacks.end()) {\n    delete it->second;  // Clean up the allocated callback\n    attach_callbacks.erase(it);\n  }\n}\n\n}  // namespace fptn::protocol::https::utils\n"
  },
  {
    "path": "src/fptn-protocol-lib/https/utils/tls/tls.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <array>\n#include <cstdint>\n#include <functional>\n#include <optional>\n#include <string>\n#include <vector>\n\n#include <openssl/ssl.h>  // NOLINT(build/include_order)\n\nnamespace fptn::protocol::https::utils {\n\nstd::string GetSHA1Hash(std::uint32_t number);\nstd::string GenerateFptnKey(std::uint32_t timestamp);\n\nbool SetDecoyHandshakeSessionID(SSL* ssl);\n\n// DEPRECATED\nbool IsDecoyHandshakeSessionID(\n    const std::uint8_t* session, std::size_t session_len);\n\n\nbool IsDecoyHandshakeSessionID2(\n    const std::uint8_t* session, std::size_t session_len);\n\nbool SetHandshakeSessionID(SSL* ssl);\n\nbool IsFptnClientSessionID(\n    const std::uint8_t* session, std::size_t session_len);\n\nbool SetHandshakeSni(SSL* ssl, const std::string& sni);\n\nSSL_CTX* CreateNewSslCtx();\n\nstd::string ChromeCiphers();\n\nstd::string GetCertificateMD5Fingerprint(const X509* cert);\n\nstd::vector<std::uint8_t> GenerateDecoyTlsHandshake(const std::string& sni);\n\n// DEPRECATED\nstd::optional<std::array<std::uint8_t, 32>> GenerateDecoyTlsSessionId();\n\nstd::optional<std::array<std::uint8_t, 32>> GenerateDecoyTlsSessionId2();\n\n// Callbacks\nusing CertificateVerificationCallback = std::function<bool(const std::string&)>;\nvoid AttachCertificateVerificationCallback(\n    SSL* ssl, const CertificateVerificationCallback& callback);\n\nvoid AttachCertificateVerificationCallbackDelete(SSL* ssl);\n\n}  // namespace fptn::protocol::https::utils\n"
  },
  {
    "path": "src/fptn-protocol-lib/https/websocket_client/websocket_client.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"fptn-protocol-lib/https/websocket_client/websocket_client.h\"\n\n#include <https/utils/change_cipher_spec.h>\n#include <memory>\n#include <string>\n#include <utility>\n#include <vector>\n\n#include <camouflage/tls/builder.hpp>\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\n#include \"common/network/utils.h\"  // NOLINT(build/include_order)\n\n#include \"fptn-protocol-lib/https/api_client/api_client.h\"\n#include \"fptn-protocol-lib/https/obfuscator/methods/tls2/tls_obfuscator2.h\"\n\nnamespace fptn::protocol::https {\n\nWebsocketClient::WebsocketClient(fptn::common::network::IPv4Address server_ip,\n    int server_port,\n    fptn::common::network::IPv4Address tun_interface_address_ipv4,\n    fptn::common::network::IPv6Address tun_interface_address_ipv6,\n    NewIPPacketCallback new_ip_pkt_callback,\n    std::string sni,\n    std::string access_token,\n    std::string expected_md5_fingerprint,\n    CensorshipStrategy censorship_strategy,\n    OnConnectedCallback on_connected_callback,\n    int thread_number)\n    : ioc_(thread_number),\n      ctx_(https::utils::CreateNewSslCtx()),\n      resolver_(boost::asio::make_strand(ioc_)),\n      censorship_strategy_(censorship_strategy),\n      ws_(ssl_stream_type(\n          obfuscator_socket_type(boost::asio::make_strand(ioc_), nullptr),\n          ctx_)),\n      strand_(boost::asio::make_strand(ioc_)),\n      watchdog_timer_(strand_),\n      write_channel_(strand_, kMaxSizeOutQueue_),\n      server_ip_(std::move(server_ip)),\n      server_port_str_(std::to_string(server_port)),\n      tun_interface_address_ipv4_(std::move(tun_interface_address_ipv4)),\n      tun_interface_address_ipv6_(std::move(tun_interface_address_ipv6)),\n      new_ip_pkt_callback_(std::move(new_ip_pkt_callback)),\n      sni_(std::move(sni)),\n      access_token_(std::move(access_token)),\n      expected_md5_fingerprint_(std::move(expected_md5_fingerprint)),\n      on_connected_callback_(std::move(on_connected_callback)) {\n  auto* ssl = ws_.next_layer().native_handle();\n  https::utils::SetHandshakeSni(ssl, sni_);\n  https::utils::SetHandshakeSessionID(ssl);\n\n  // Set SSL buffer sizes\n  SSL_set_mode(ssl, SSL_MODE_RELEASE_BUFFERS);\n\n  if (censorship_strategy_ == CensorshipStrategy::kSni) {\n    obfuscator_ = nullptr;\n  }\n  if (censorship_strategy_ == CensorshipStrategy::kTlsObfuscator) {\n    obfuscator_ =\n        std::make_shared<fptn::protocol::https::obfuscator::TlsObfuscator2>();\n    ws_.next_layer().next_layer().set_obfuscator(obfuscator_);\n  }\n\n  if (censorship_strategy_ == CensorshipStrategy::kSniRealityMode) {\n    obfuscator_ = nullptr;\n  }\n\n  https::utils::AttachCertificateVerificationCallback(\n      ssl, [this](const std::string& md5_fingerprint) mutable {\n        if (expected_md5_fingerprint_.empty()) {\n          return true;\n        }\n        if (md5_fingerprint == expected_md5_fingerprint_) {\n          return true;\n        }\n        SPDLOG_ERROR(\"Certificate MD5 mismatch. Expected: {}, got: {}.\",\n            expected_md5_fingerprint_, md5_fingerprint);\n        return false;\n      });\n\n  ws_.text(false);\n  ws_.binary(true);\n  ws_.auto_fragment(true);\n  ws_.read_message_max(256 * 1024);\n  ws_.set_option(boost::beast::websocket::stream_base::timeout::suggested(\n      boost::beast::role_type::client));\n}\n\nWebsocketClient::~WebsocketClient() {\n  try {\n    Stop();\n  } catch (...) {\n    SPDLOG_WARN(\"Unknown error in ~WebsocketClient\");\n  }\n\n  // Stop io_context\n  try {\n    if (!ioc_.stopped()) {\n      SPDLOG_INFO(\"Stopping io_context...\");\n      ioc_.stop();\n    }\n  } catch (const boost::system::system_error& err) {\n    SPDLOG_ERROR(\"Exception while stopping io_context: {}\", err.what());\n  } catch (...) {\n    SPDLOG_ERROR(\"Unknown exception while stopping io_context\");\n  }\n  SPDLOG_INFO(\"WebsocketClient removed\");\n}\n\nvoid WebsocketClient::Run() {\n  if (running_.exchange(true)) {\n    SPDLOG_WARN(\"WebsocketClient is already running\");\n    return;\n  }\n\n  SPDLOG_INFO(\"Connecting to {}:{}\", server_ip_.ToString(), server_port_str_);\n\n  auto self = weak_from_this();\n  boost::asio::co_spawn(\n      ioc_,\n      [self]() -> boost::asio::awaitable<void> {\n        if (auto shared_self = self.lock()) {\n          const bool status = co_await shared_self->RunInternal();\n          if (!status) {\n            shared_self->Stop();\n          }\n        }\n      },\n      boost::asio::detached);\n  try {\n    ioc_.restart();\n    while (running_) {\n      ioc_.run_one();\n    }\n  } catch (...) {\n    SPDLOG_WARN(\"Exception while running\");\n  }\n}\n\nbool WebsocketClient::Stop() {\n  if (!running_) {\n    return false;\n  }\n\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  // cppcheck-suppress identicalConditionAfterEarlyExit\n  if (!running_) {  // Double-check after acquiring lock\n    return false;\n  }\n\n  SPDLOG_INFO(\"Marked client as stopped and disconnected\");\n\n  running_ = false;\n  was_connected_ = false;\n\n  new_ip_pkt_callback_ = nullptr;\n  on_connected_callback_ = nullptr;\n\n  boost::system::error_code ec;\n\n  try {\n    watchdog_timer_.cancel();\n  } catch (const boost::system::system_error&) {\n    SPDLOG_WARN(\"Cancellation timer error\");\n  } catch (...) {\n    SPDLOG_ERROR(\"Unknown exception while stopping timer\");\n  }\n\n  try {\n    SPDLOG_INFO(\"Emit cancel signal\");\n    if (was_inited_) {\n      cancel_signal_.emit(boost::asio::cancellation_type::all);\n    }\n  } catch (const std::exception&) {\n    SPDLOG_DEBUG(\"Exception during cancellation\");\n  } catch (...) {\n    SPDLOG_ERROR(\"Unknown exception during cancellation\");\n  }\n\n  try {\n    SPDLOG_INFO(\"Closing write_channel\");\n    if (was_inited_) {\n      write_channel_.close();\n    }\n  } catch (const std::exception&) {\n    SPDLOG_DEBUG(\"Exception closing write channel\");\n  } catch (...) {\n    SPDLOG_ERROR(\"Unknown exception during closing write channel\");\n  }\n\n  try {\n    SPDLOG_INFO(\"Closing resolver\");\n    if (was_inited_) {\n      resolver_.cancel();\n    }\n  } catch (const std::exception&) {\n    SPDLOG_DEBUG(\"Exception cancelling resolver\");\n  } catch (...) {\n    SPDLOG_ERROR(\"Unknown exception during closing resolver\");\n  }\n\n  // Close TCP connection\n  try {\n    if (was_inited_) {\n      SPDLOG_INFO(\"Shutting down TCP socket...\");\n\n      auto& tcp = boost::beast::get_lowest_layer(ws_);\n\n      boost::asio::socket_base::linger linger(true, 0);\n      tcp.socket().set_option(linger);\n\n      if (tcp.socket().is_open()) {\n        tcp.socket().shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec);\n        if (ec && ec != boost::asio::error::not_connected) {\n          SPDLOG_WARN(\"TCP socket shutdown error: {}\", ec.message());\n        } else {\n          SPDLOG_INFO(\"TCP socket shutdown successfully\");\n        }\n\n        tcp.socket().close(ec);\n        if (ec) {\n          SPDLOG_WARN(\"TCP socket close error: {}\", ec.message());\n        } else {\n          SPDLOG_INFO(\"TCP socket closed successfully\");\n        }\n      }\n    }\n  } catch (const boost::system::system_error& err) {\n    SPDLOG_ERROR(\"Exception during TCP shutdown: {}\", err.what());\n  } catch (...) {\n    SPDLOG_ERROR(\"Unknown exception during TCP shutdown\");\n  }\n\n  // Close SSL\n  try {\n    if (was_inited_) {\n      SPDLOG_INFO(\"Shutting down SSL layer...\");\n      auto& ssl = ws_.next_layer();\n      if (ssl.native_handle()) {\n        // More robust SSL shutdown\n        ::SSL_set_quiet_shutdown(ssl.native_handle(), 1);\n        ::SSL_shutdown(ssl.native_handle());\n      }\n      ssl.shutdown(ec);\n    }\n  } catch (const boost::system::system_error& err) {\n    SPDLOG_ERROR(\"Exception during SSL shutdown: {}\", err.what());\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"Unexpected exception during SSL shutdown: {}\", e.what());\n  } catch (...) {\n    SPDLOG_ERROR(\"Unknown exception occurred during SSL shutdown\");\n  }\n\n  if (auto* ssl = ws_.next_layer().native_handle()) {\n    https::utils::AttachCertificateVerificationCallbackDelete(ssl);\n  }\n\n  was_stopped_ = true;\n  SPDLOG_INFO(\"WebSocket client stopped successfully\");\n\n  return true;\n}\n\nbool WebsocketClient::Send(fptn::common::network::IPPacketPtr packet) {\n  if (!running_ || !was_connected_) {\n    return false;\n  }\n  try {\n    return write_channel_.try_send(\n        boost::system::error_code(), std::move(packet));\n  } catch (...) {\n    return false;\n  }\n}\n\nbool WebsocketClient::IsStarted() const { return running_ && was_connected_; }\n\nboost::asio::awaitable<bool> WebsocketClient::RunInternal() {\n  try {\n    const bool connected = co_await Connect();\n    if (!connected) {\n      co_return false;\n    }\n\n    // Optimize socket buffer sizes\n    try {\n      boost::beast::get_lowest_layer(ws_).socket().set_option(\n          boost::asio::socket_base::receive_buffer_size(1 * 1024 * 1024));\n      boost::beast::get_lowest_layer(ws_).socket().set_option(\n          boost::asio::socket_base::send_buffer_size(1 * 1024 * 1024));\n    } catch (const boost::system::system_error& e) {\n      SPDLOG_WARN(\"Failed to set socket options: {}\", e.what());\n    }\n\n    boost::beast::get_lowest_layer(ws_).expires_after(std::chrono::hours(24));\n\n    // Start timer\n    StartWatchdog();\n\n    // Start reader and sender\n    was_inited_ = true;\n    auto self = shared_from_this();\n    boost::asio::co_spawn(\n        strand_, [self]() { return self->RunReader(); }, boost::asio::detached);\n    boost::asio::co_spawn(\n        strand_, [self]() { return self->RunSender(); }, boost::asio::detached);\n    co_return true;\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"RunInternal exception: {}\", e.what());\n  } catch (...) {\n    SPDLOG_ERROR(\"Unknown exception while running\");\n  }\n  co_return false;\n}\n\nboost::asio::awaitable<bool> WebsocketClient::Connect() {\n  try {\n    boost::system::error_code ec;\n\n    // DNS resolution\n    boost::beast::get_lowest_layer(ws_).expires_after(std::chrono::seconds(30));\n    const auto results = co_await resolver_.async_resolve(server_ip_.ToString(),\n        server_port_str_,\n        boost::asio::redirect_error(boost::asio::use_awaitable, ec));\n    if (ec) {\n      SPDLOG_ERROR(\"Resolve error: {}\", ec.message());\n      co_return false;\n    }\n\n    // TCP connect\n    co_await boost::beast::get_lowest_layer(ws_).async_connect(\n        results, boost::asio::redirect_error(boost::asio::use_awaitable, ec));\n    if (ec) {\n      SPDLOG_ERROR(\"Connect error: {}\", ec.message());\n      co_return false;\n    }\n\n    auto& socket = boost::beast::get_lowest_layer(ws_).socket();\n    if (!socket.is_open()) {\n      SPDLOG_ERROR(\"Socket not open after connect\");\n      co_return false;\n    }\n\n    const auto remote_ep = socket.remote_endpoint(ec);\n    if (ec) {\n      SPDLOG_ERROR(\"Socket reported connected but remote_endpoint() failed: {}\",\n          ec.message());\n      co_return false;\n    }\n\n    SPDLOG_INFO(\"Successfully connected to {}:{}\",\n        remote_ep.address().to_string(), remote_ep.port());\n\n    // TCP options\n    socket.set_option(boost::asio::ip::tcp::no_delay(true));\n    socket.set_option(boost::asio::socket_base::reuse_address(true));\n\n    // Optimize socket buffers\n    try {\n      constexpr int kBufferSize = 4 * 1024 * 1024;\n      socket.set_option(\n          boost::asio::socket_base::receive_buffer_size(kBufferSize));\n      socket.set_option(\n          boost::asio::socket_base::send_buffer_size(kBufferSize));\n    } catch (...) {\n      SPDLOG_WARN(\"Failed to set socket buffer sizes in Connect()\");\n    }\n\n    // Reality Mode: Enhanced stealth connection protocol\n    // First, establishes a genuine TLS handshake as a decoy to bypass deep\n    // packet inspection Then resets the connection state and activates\n    // obfuscation for the real encrypted tunnel This dual-handshake approach\n    // makes traffic analysis significantly more difficult\n    if (IsRealityModeWithFakeHandshake(censorship_strategy_)) {\n      const bool status = co_await PerformFakeHandshake2();\n      if (!status) {\n        co_return false;\n      }\n      // For Reality Mode we use TLS obfuscator after fake handshake\n      // This provides additional encryption layer for the real connection\n      ws_.next_layer().next_layer().set_obfuscator(\n          std::make_shared<protocol::https::obfuscator::TlsObfuscator2>());\n    } else if (obfuscator_ != nullptr) {  // Set obfuscator\n      ws_.next_layer().next_layer().set_obfuscator(obfuscator_);\n    }\n\n    // SSL handshake\n    boost::beast::get_lowest_layer(ws_).expires_after(std::chrono::seconds(10));\n\n    // timeout\n    co_await boost::asio::steady_timer{\n        co_await boost::asio::this_coro::executor,\n        std::chrono::milliseconds(150)}\n        .async_wait(boost::asio::use_awaitable);\n\n    co_await ws_.next_layer().async_handshake(\n        boost::asio::ssl::stream_base::client,\n        boost::asio::redirect_error(boost::asio::use_awaitable, ec));\n\n    if (ec) {\n      SPDLOG_ERROR(\"SSL handshake error: {}\", ec.message());\n      co_return false;\n    }\n\n    // CLEAN WEBSOCKET\n    common::network::CleanSocket(socket);\n    common::network::CleanSsl(ws_.next_layer().native_handle());\n\n    // Reset obfuscator after TLS-handshake\n    ws_.next_layer().next_layer().set_obfuscator(nullptr);\n\n    // timeout\n    co_await boost::asio::steady_timer{\n        co_await boost::asio::this_coro::executor,\n        std::chrono::milliseconds(150)}\n        .async_wait(boost::asio::use_awaitable);\n\n    SPDLOG_INFO(\"SSL handshake completed\");\n\n    // WebSocket connection options\n    try {\n      boost::beast::websocket::stream_base::timeout timeout_option;\n      timeout_option.handshake_timeout = std::chrono::seconds(10);\n      timeout_option.idle_timeout = std::chrono::seconds(10);\n      timeout_option.keep_alive_pings = true;\n      ws_.set_option(timeout_option);\n    } catch (const std::exception& e) {\n      SPDLOG_ERROR(\"Failed to set timeout: {}\", e.what());\n    }\n    // WebSocket handshake\n    ws_.set_option(boost::beast::websocket::stream_base::decorator(\n        [this](boost::beast::websocket::request_type& req) {\n          req.set(\"Authorization\", \"Bearer \" + access_token_);\n          req.set(\"ClientIP\", tun_interface_address_ipv4_.ToString());\n          req.set(\"ClientIPv6\", tun_interface_address_ipv6_.ToString());\n          req.set(\"Client-Agent\",\n              fmt::format(\"FptnClient({}/{})\", FPTN_USER_OS, FPTN_VERSION));\n        }));\n    // Websocket handshake\n    co_await ws_.async_handshake(server_ip_.ToString(), kUrlWebSocket_,\n        boost::asio::redirect_error(boost::asio::use_awaitable, ec));\n    if (ec) {\n      SPDLOG_ERROR(\"WebSocket handshake error: {}\", ec.message());\n      co_return false;\n    }\n\n    was_connected_ = true;\n    SPDLOG_INFO(\"WebSocket connection established successfully\");\n\n    if (on_connected_callback_) {\n      on_connected_callback_();\n    }\n\n    // WebSocket options\n    try {\n      boost::beast::websocket::stream_base::timeout timeout_option;\n      timeout_option.handshake_timeout = std::chrono::seconds(10);\n      timeout_option.idle_timeout = std::chrono::seconds(4);\n      timeout_option.keep_alive_pings = true;\n      ws_.set_option(timeout_option);\n    } catch (const std::exception& e) {\n      SPDLOG_ERROR(\"Failed to set timeout: {}\", e.what());\n    }\n\n    // timeout\n    co_await boost::asio::steady_timer{\n        co_await boost::asio::this_coro::executor,\n        std::chrono::milliseconds(10)}\n        .async_wait(boost::asio::use_awaitable);\n\n    co_return true;\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"Connect exception: {}\", e.what());\n  } catch (...) {\n    SPDLOG_ERROR(\"Unknown exception\");\n  }\n  co_return false;\n}\n\nboost::asio::awaitable<void> WebsocketClient::RunReader() {\n  boost::beast::flat_buffer buffer;\n  buffer.reserve(4 * 1024 * 1024);\n  try {\n    boost::system::error_code ec;\n    while (running_ && was_connected_ && ws_.is_open()) {\n      co_await ws_.async_read(\n          buffer, boost::asio::redirect_error(boost::asio::use_awaitable, ec));\n\n      if (ec) {\n        if (ec != boost::beast::websocket::error::closed) {\n          SPDLOG_DEBUG(\"WebSocket read error: {}\", ec.message());\n        }\n        break;\n      }\n      if (!buffer.size()) {\n        continue;\n      }\n      try {\n        auto raw_ip = protobuf::GetProtoPayload(buffer);\n        if (raw_ip.has_value()) {\n          auto packet =\n              fptn::common::network::IPPacket::Parse(std::move(raw_ip.value()));\n          if (running_ && packet && new_ip_pkt_callback_) {\n            new_ip_pkt_callback_(std::move(packet));\n          }\n        }\n      } catch (const std::exception& e) {\n        SPDLOG_WARN(\"IP packet error: {}\", e.what());\n      }\n      buffer.consume(buffer.size());\n    }\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"RunReader exception: {}\", e.what());\n  } catch (...) {\n    SPDLOG_ERROR(\"RunReader unknown exception\");\n  }\n  was_connected_ = false;\n  co_return;\n}\n\nboost::asio::awaitable<void> WebsocketClient::RunSender() {\n  try {\n    while (running_ && was_connected_ && ws_.is_open()) {\n      auto [ec, packet] = co_await write_channel_.async_receive(\n          boost::asio::bind_cancellation_slot(cancel_signal_.slot(),\n              boost::asio::as_tuple(boost::asio::use_awaitable)));\n\n      if (packet != nullptr && running_ && ws_.is_open() && !ec) {\n        auto msg =\n            fptn::protocol::protobuf::CreateProtoPayload(std::move(packet));\n        if (msg.has_value()) {\n          co_await ws_.async_write(boost::asio::buffer(std::move(msg.value())),\n              boost::asio::redirect_error(boost::asio::use_awaitable, ec));\n        }\n      }\n\n      if (ec) {\n        SPDLOG_ERROR(\"WebSocket error: {}\", ec.message());\n        break;\n      }\n    }\n  } catch (const boost::system::system_error& err) {\n    if (err.code() != boost::asio::error::operation_aborted) {\n      SPDLOG_ERROR(\"RunSender error: {}\", err.what());\n    }\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"RunSender exception: {}\", e.what());\n  } catch (...) {\n    SPDLOG_ERROR(\"RunSender unknown exception\");\n  }\n  was_connected_ = false;\n  co_return;\n}\n\nboost::asio::awaitable<bool> WebsocketClient::PerformFakeHandshake2() {\n  try {\n    boost::system::error_code ec;\n    auto& tcp_layer = boost::beast::get_lowest_layer(ws_);\n    auto& tcp_socket = tcp_layer.socket();\n\n    SPDLOG_INFO(\"Fake TLS handshake started for SNI: {}\", sni_);\n\n    /* Send client hello */\n    const auto client_hello = GenerateHandshakePacket();\n    if (client_hello.empty()) {\n      SPDLOG_WARN(\"Failed to generate ClientHello for SNI: {}\", sni_);\n      co_return false;\n    }\n    const std::size_t client_hello_bytes_size =\n        co_await boost::asio::async_write(tcp_socket,\n            boost::asio::buffer(client_hello),\n            boost::asio::redirect_error(boost::asio::use_awaitable, ec));\n    if (ec) {\n      SPDLOG_ERROR(\"Failed to send ClientHello to {}: {}\", sni_, ec.message());\n      co_return false;\n    }\n    if (client_hello_bytes_size != client_hello.size()) {\n      SPDLOG_ERROR(\"Error ClientHello sent: {} of {} bytes\",\n          client_hello_bytes_size, client_hello.size());\n      co_return false;\n    }\n\n    /* Wait for server answer */\n    const auto server_hello =\n        co_await common::network::WaitForServerTlsHelloAsync(tcp_socket);\n    if (!server_hello.has_value()) {\n      SPDLOG_ERROR(\"Failed to receive ServerHello from {}\", sni_);\n      co_return false;\n    }\n\n    /* Send change cipher spec */\n    const auto change_cipher_spec =\n        fptn::protocol::https::utils::MakeClientChangeCipherSpec();\n    const std::size_t change_cipher_spec_size =\n        co_await boost::asio::async_write(tcp_socket,\n            boost::asio::buffer(change_cipher_spec),\n            boost::asio::redirect_error(boost::asio::use_awaitable, ec));\n    if (ec) {\n      SPDLOG_ERROR(\"Failed to send ClientHello to {}: {}\", sni_, ec.message());\n      co_return false;\n    }\n    if (change_cipher_spec_size != change_cipher_spec.size()) {\n      SPDLOG_ERROR(\"Failed to send ClientHello to {}: {}\",\n          change_cipher_spec_size, change_cipher_spec.size());\n      co_return false;\n    }\n\n    // timeout\n    boost::asio::steady_timer timer(co_await boost::asio::this_coro::executor,\n        std::chrono::milliseconds(150));\n    co_await timer.async_wait(boost::asio::use_awaitable);\n\n    SPDLOG_INFO(\n        \"Fake TLS handshake completed for {}, received {} bytes from server\",\n        sni_, server_hello.value().size());\n    co_return true;\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"Fake TLS handshake exception for {}: {}\", sni_, e.what());\n  }\n  co_return false;\n}\n\nvoid WebsocketClient::StartWatchdog() {\n  if (!running_) {\n    return;\n  }\n\n  constexpr std::chrono::milliseconds kTimeout(300);\n  watchdog_timer_.expires_after(kTimeout);\n  watchdog_timer_.async_wait([self = weak_from_this()](\n                                 const boost::system::error_code& ec) {\n    if (auto shared_self = self.lock()) {\n      if (!ec && shared_self->running_) {\n        // cppcheck-suppress knownConditionTrueFalse\n        if (!shared_self->was_connected_.load() && shared_self->running_) {\n          SPDLOG_INFO(\"Watchdog detected disconnected state, calling Stop()\");\n          shared_self->Stop();\n        } else {\n          shared_self->StartWatchdog();\n        }\n      }\n    }\n  });\n}\n\nstd::vector<std::uint8_t> WebsocketClient::GenerateHandshakePacket() const {\n  auto builder = camouflage::tls::Builder::Create();\n  switch (censorship_strategy_) {\n    /* Chrome */\n    case CensorshipStrategy::kSniRealityModeChrome147:\n      builder.GoogleChrome(\n          camouflage::tls::google_chrome::Version::kV_147_0_7727_56);\n      break;\n    case CensorshipStrategy::kSniRealityModeChrome146:\n      builder.GoogleChrome(\n          camouflage::tls::google_chrome::Version::kV_146_0_7680_178);\n      break;\n    case CensorshipStrategy::kSniRealityModeChrome145:\n      builder.GoogleChrome(\n          camouflage::tls::google_chrome::Version::kV_145_0_7632_46);\n      break;\n    /* Firefox */\n    case CensorshipStrategy::kSniRealityModeFirefox149:\n      builder.Firefox(camouflage::tls::firefox::Version::kV_149_0);\n      break;\n    /* Yandex */\n    case CensorshipStrategy::kSniRealityModeYandex26:\n      builder.YandexBrowser(\n          camouflage::tls::yandex_browser::Version::kV_26_3_3_881);\n      break;\n    case CensorshipStrategy::kSniRealityModeYandex25:\n      builder.YandexBrowser(\n          camouflage::tls::yandex_browser::Version::kV_25_8_3_828);\n      break;\n    case CensorshipStrategy::kSniRealityModeYandex24:\n      builder.YandexBrowser(\n          camouflage::tls::yandex_browser::Version::kV_24_12_0_1772);\n      break;\n    /* Safari */\n    case CensorshipStrategy::kSniRealityModeSafari26:\n      builder.Safari(camouflage::tls::safari::Version::kV_26_4);\n      break;\n    /* Default */\n    default:\n      SPDLOG_DEBUG(\"Using fallback handshake generator for SNI: {}\", sni_);\n      return utils::GenerateDecoyTlsHandshake(sni_);\n  }\n\n  const auto session_id = utils::GenerateDecoyTlsSessionId2();\n  if (!session_id.has_value()) {\n    SPDLOG_WARN(\"Session ID generation failed\");\n    return utils::GenerateDecoyTlsHandshake(sni_);\n  }\n\n  const auto handshake =\n      builder.SetSNI(sni_).SetSessionId(session_id.value()).Generate();\n  if (!handshake.has_value()) {\n    SPDLOG_WARN(\n        \"Handshake generation failed for SNI: {}, using fallback\", sni_);\n    return utils::GenerateDecoyTlsHandshake(sni_);\n  }\n\n  SPDLOG_INFO(\"Handshake generated: SNI={}, size={} bytes\", sni_,\n      handshake->handshake_packet_size);\n\n  return std::vector<std::uint8_t>(handshake->handshake_packet,\n      handshake->handshake_packet + handshake->handshake_packet_size);\n}\n\n}  // namespace fptn::protocol::https\n"
  },
  {
    "path": "src/fptn-protocol-lib/https/websocket_client/websocket_client.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <memory>\n#include <string>\n#include <vector>\n\n#include <boost/asio.hpp>\n#include <boost/asio/awaitable.hpp>\n#include <boost/asio/co_spawn.hpp>\n#include <boost/asio/detached.hpp>\n#include <boost/asio/experimental/concurrent_channel.hpp>\n#include <boost/asio/ssl.hpp>\n#include <boost/asio/steady_timer.hpp>\n#include <boost/beast.hpp>\n#include <boost/beast/ssl.hpp>\n#include <boost/beast/websocket.hpp>\n\n#include \"common/network/ip_address.h\"\n#include \"common/network/ip_packet.h\"\n\n#include \"fptn-protocol-lib/https/censorship_strategy.h\"\n#include \"fptn-protocol-lib/https/obfuscator/tcp_stream/tcp_stream.h\"\n#include \"fptn-protocol-lib/https/utils/tls/tls.h\"\n#include \"fptn-protocol-lib/protobuf/protocol.h\"\n\nnamespace fptn::protocol::https {\n\nclass WebsocketClient : public std::enable_shared_from_this<WebsocketClient> {\n public:\n  using NewIPPacketCallback =\n      std::function<void(fptn::common::network::IPPacketPtr packet)>;\n  using OnConnectedCallback = std::function<void()>;\n\n  explicit WebsocketClient(fptn::common::network::IPv4Address server_ip,\n      int server_port,\n      fptn::common::network::IPv4Address tun_interface_address_ipv4,\n      fptn::common::network::IPv6Address tun_interface_address_ipv6,\n      NewIPPacketCallback new_ip_pkt_callback,\n      std::string sni,\n      std::string access_token,\n      std::string expected_md5_fingerprint,\n      CensorshipStrategy censorship_strategy,\n      OnConnectedCallback on_connected_callback = nullptr,\n      int thread_number = 4);\n\n  virtual ~WebsocketClient();\n\n  WebsocketClient(const WebsocketClient&) = delete;\n  WebsocketClient& operator=(const WebsocketClient&) = delete;\n  WebsocketClient(WebsocketClient&&) = delete;\n  WebsocketClient& operator=(WebsocketClient&&) = delete;\n\n  void Run();\n  bool Stop();\n  bool Send(fptn::common::network::IPPacketPtr packet);\n  bool IsStarted() const;\n\n protected:\n  boost::asio::awaitable<bool> RunInternal();\n  boost::asio::awaitable<void> RunReader();\n  boost::asio::awaitable<void> RunSender();\n  boost::asio::awaitable<bool> Connect();\n\n  boost::asio::awaitable<bool> PerformFakeHandshake2();\n\n  void StartWatchdog();\n\n  std::vector<std::uint8_t> GenerateHandshakePacket() const;\n\n private:\n  const std::string kUrlWebSocket_ = \"/fptn\";\n  const std::size_t kMaxSizeOutQueue_ = 128;\n\n  mutable std::mutex mutex_;\n  std::atomic<bool> running_{false};\n  std::atomic<bool> was_stopped_{false};\n  std::atomic<bool> was_inited_{false};\n  std::atomic<bool> was_connected_{false};\n\n  boost::asio::io_context ioc_;\n  boost::asio::ssl::context ctx_;\n  boost::asio::ip::tcp::resolver resolver_;\n\n  const CensorshipStrategy censorship_strategy_;\n\n  // TCP -> obfuscator -> SSL -> WebSocket\n  using tcp_stream_type = boost::beast::tcp_stream;\n  using obfuscator_socket_type = obfuscator::TcpStream<tcp_stream_type>;\n  using ssl_stream_type = boost::beast::ssl_stream<obfuscator_socket_type>;\n  using websocket_type = boost::beast::websocket::stream<ssl_stream_type>;\n\n  websocket_type ws_;\n\n  boost::asio::strand<boost::asio::io_context::executor_type> strand_;\n\n  boost::asio::steady_timer watchdog_timer_;\n\n  boost::asio::experimental::concurrent_channel<void(\n      boost::system::error_code, fptn::common::network::IPPacketPtr)>\n      write_channel_;\n\n  const fptn::common::network::IPv4Address server_ip_;\n  const std::string server_port_str_;\n\n  const fptn::common::network::IPv4Address tun_interface_address_ipv4_;\n  const fptn::common::network::IPv6Address tun_interface_address_ipv6_;\n\n  NewIPPacketCallback new_ip_pkt_callback_;\n\n  const std::string sni_;\n  const std::string access_token_;\n  const std::string expected_md5_fingerprint_;\n\n  OnConnectedCallback on_connected_callback_;\n\n  boost::asio::cancellation_signal cancel_signal_;\n\n  obfuscator::IObfuscatorSPtr obfuscator_;\n};\n\nusing WebsocketClientSPtr = std::shared_ptr<WebsocketClient>;\n\n}  // namespace fptn::protocol::https\n"
  },
  {
    "path": "src/fptn-protocol-lib/protobuf/protocol.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"fptn-protocol-lib/protobuf/protocol.h\"\n\n#include <algorithm>\n#include <ctime>\n#include <random>\n#include <string>\n#include <utility>\n#include <vector>\n\n#include <boost/beast/core/flat_buffer.hpp>\n#include <protocol.pb.h>    // NOLINT(build/include_order)\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\n#include \"common/network/ip_packet.h\"\n#include \"common/utils/utils.h\"\n\nnamespace fptn::protocol::protobuf {\nProtoPayloadOpt GetProtoPayload(const boost::beast::flat_buffer& buffer) {\n  const std::size_t total_size = buffer.size();\n  if (total_size == 0) {\n    SPDLOG_ERROR(\"Failed to parse Protobuf message: empty buffer\");\n    return std::nullopt;\n  }\n\n  const void* data_ptr = static_cast<const char*>(buffer.cdata().data());\n\n  fptn::protocol::Message message;\n  if (!message.ParseFromArray(data_ptr, static_cast<int>(total_size))) {\n    SPDLOG_ERROR(\"Failed to parse Protobuf message: parse error\");\n    return std::nullopt;\n  }\n\n  if (message.protocol_version() != FPTN_PROTOBUF_PROTOCOL_VERSION) {\n    SPDLOG_ERROR(\n        \"Unsupported protocol version: {}\", message.protocol_version());\n    return std::nullopt;\n  }\n\n  switch (message.msg_type()) {\n    case fptn::protocol::MSG_IP_PACKET:\n      if (message.has_packet()) {\n        const auto& payload = message.packet().payload();\n        std::vector<std::uint8_t> result;\n        result.reserve(payload.size());\n        result.assign(payload.begin(), payload.end());\n        return result;\n      }\n      SPDLOG_ERROR(\"Malformed IP packet: no packet field\");\n      break;\n    case fptn::protocol::MSG_ERROR:\n      if (message.has_error()) {\n        SPDLOG_ERROR(\"Message error: {}\", message.error().error_msg());\n      } else {\n        SPDLOG_ERROR(\"Malformed error message: no error field\");\n      }\n      break;\n    default:\n      SPDLOG_ERROR(\"Unknown message type\");\n  }\n  return std::nullopt;\n}\n\nProtoPayloadOpt CreateProtoPayload(fptn::common::network::IPPacketPtr packet) {\n  if (!packet) {\n    SPDLOG_ERROR(\"Cannot create proto payload: packet is null\");\n    return std::nullopt;\n  }\n\n  fptn::protocol::Message message;\n  message.set_protocol_version(FPTN_PROTOBUF_PROTOCOL_VERSION);\n  message.set_msg_type(fptn::protocol::MSG_IP_PACKET);\n\n  const auto* raw_packet = packet->GetRawPacket();\n  if (!raw_packet) {\n    SPDLOG_ERROR(\"Cannot create proto payload: raw packet is null\");\n    return std::nullopt;\n  }\n\n  const void* data = raw_packet->getRawData();\n  const auto current_size =\n      static_cast<std::size_t>(raw_packet->getRawDataLen());\n\n  if (!data || current_size == 0) {\n    SPDLOG_ERROR(\"Cannot create proto payload: invalid packet data\");\n    return std::nullopt;\n  }\n\n  message.mutable_packet()->set_payload(data, current_size);\n\n#ifdef FPTN_ENABLE_PACKET_PADDING\n  /**\n   * Fill with random data to prevent issues related to TLS-inside-TLS.\n   */\n  if (current_size < FPTN_IP_PACKET_MAX_SIZE) {\n    constexpr std::size_t kMaxPaddingBytes = FPTN_IP_PACKET_MAX_SIZE;\n    const std::size_t available_space = FPTN_IP_PACKET_MAX_SIZE - current_size;\n    const std::size_t max_padding = std::min(kMaxPaddingBytes, available_space);\n\n    if (max_padding > 0) {\n      static thread_local std::mt19937 gen{std::random_device {}()};\n      std::uniform_int_distribution<std::size_t> dist(0, max_padding);\n\n      const std::size_t padding_size = dist(gen);\n      if (padding_size > 0) {\n        std::string padding_buffer;\n        padding_buffer.resize(padding_size);\n\n        fptn::common::utils::GenerateRandomBytes(\n            reinterpret_cast<std::uint8_t*>(padding_buffer.data()),\n            padding_size);\n\n        message.mutable_packet()->set_padding_data(\n            padding_buffer.data(), padding_size);\n      }\n    }\n  }\n#endif\n\n  const std::size_t estimated_size = message.ByteSizeLong();\n  if (estimated_size == 0) {\n    SPDLOG_ERROR(\"Failed to serialize Message: estimated size is 0\");\n    return std::nullopt;\n  }\n\n  std::vector<std::uint8_t> serialized_data(estimated_size);\n  if (!message.SerializeToArray(\n          serialized_data.data(), static_cast<int>(estimated_size))) {\n    SPDLOG_ERROR(\"Failed to serialize Message.\");\n    return std::nullopt;\n  }\n  return serialized_data;\n}\n\n}  // namespace fptn::protocol::protobuf\n"
  },
  {
    "path": "src/fptn-protocol-lib/protobuf/protocol.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <optional>\n#include <string>\n\n#include <boost/beast/core/flat_buffer.hpp>\n\n#include \"common/network/ip_packet.h\"\n#include \"common/utils/utils.h\"\n\nnamespace fptn::protocol::protobuf {\n\nusing ProtoPayloadOpt = std::optional<std::vector<std::uint8_t>>;\n\nProtoPayloadOpt GetProtoPayload(const boost::beast::flat_buffer& buffer);\nProtoPayloadOpt CreateProtoPayload(fptn::common::network::IPPacketPtr packet);\n}  // namespace fptn::protocol::protobuf\n"
  },
  {
    "path": "src/fptn-protocol-lib/protobuf/protocol.proto",
    "content": "syntax = \"proto3\";\n\npackage fptn.protocol;\noption java_package = \"org.fptn.protocol\";\n\n\nenum MessageType {\n    MSG_ERROR = 0;\n    MSG_IP_PACKET = 1;\n}\n\nenum ErrorType {\n    ERROR_DEFAULT = 0;\n    ERROR_WRONG_VERSION = 1;\n    ERROR_SESSION_EXPIRED = 2;\n}\n\nmessage ErrorMessage {\n    ErrorType error_type = 1;\n    string error_msg = 2;\n}\n\nmessage IPPacket {\n    bytes payload = 1;\n    bytes padding_data = 2;\n}\n\nmessage Message {\n    int32 protocol_version = 1;\n    MessageType msg_type = 2;\n\n    oneof message_content {\n        ErrorMessage error = 3;\n        IPPacket packet = 4;\n    }\n}\n"
  },
  {
    "path": "src/fptn-protocol-lib/time/time_provider.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"fptn-protocol-lib/time/time_provider.h\"\n\n#include <string>\n#include <utility>\n\n#include <ntp_client.hpp>\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\nnamespace fptn::time {\n\nTimeProvider::TimeProvider(NtpServers servers)\n    : servers_(std::move(servers)), offset_seconds_(0) {\n  SyncWithNtp();\n}\n\nstd::string TimeProvider::Rfc7231Date() {\n  const std::uint32_t timestamp = NowTimestamp();\n  const auto now = static_cast<std::time_t>(timestamp);\n  char buf[128] = {0};\n#ifdef _WIN32\n  std::tm tm{};\n  if (gmtime_s(&tm, &now) == 0) {\n    if (std::strftime(buf, sizeof(buf), \"%a, %d %b %Y %H:%M:%S GMT\", &tm)) {\n      return std::string(buf);\n    }\n  }\n#else\n  std::tm tm{};\n  if (gmtime_r(&now, &tm)) {\n    if (std::strftime(buf, sizeof(buf), \"%a, %d %b %Y %H:%M:%S GMT\", &tm)) {\n      return std::string(buf);\n    }\n  }\n#endif\n  return {};\n}\n\nstd::int32_t TimeProvider::OffsetSeconds() const {\n  return offset_seconds_.load();\n}\n\nstd::uint32_t TimeProvider::NowTimestamp() {\n  const std::scoped_lock lock(mutex_);  // mutex\n\n  const auto now = std::chrono::steady_clock::now();\n  if (now - last_sync_time_.load() > kSyncInterval_) {\n    Refresh();\n  }\n\n  return static_cast<std::uint32_t>(\n      std::time(nullptr) + offset_seconds_.load());\n}\n\nbool TimeProvider::SyncWithNtp() {\n  const std::scoped_lock lock(mutex_);  // mutex\n\n  return Refresh();\n}\n\nbool TimeProvider::Refresh() {\n  for (const auto& [server, port] : servers_) {\n    try {\n      ntp::NTPClient ntp_client(server, port);\n      if (const auto epoch_server_ms = ntp_client.request_time()) {\n        const auto server_timestamp =\n            static_cast<std::uint64_t>(epoch_server_ms / 1000);\n        const auto client_timestamp =\n            static_cast<std::int64_t>(std::time(nullptr));\n        offset_seconds_ =\n            static_cast<std::int32_t>(server_timestamp - client_timestamp);\n        last_sync_time_ = std::chrono::steady_clock::now();\n        SPDLOG_INFO(\n            \"Successfully synchronized with NTP server '{}'. \"\n            \"Server timestamp: {}, \"\n            \"local timestamp: {}, \"\n            \"calculated offset: {} seconds\",\n            server, server_timestamp, client_timestamp, offset_seconds_.load());\n        return true;\n      }\n    } catch (...) {\n      SPDLOG_WARN(\"Unknown error during NTP request to {}:{}\", server, port);\n    }\n  }\n  SPDLOG_ERROR(\n      \"Failed to get time from NTP server. \"\n      \"Using local system time without synchronization\");\n  return false;\n}\n\n}  // namespace fptn::time\n"
  },
  {
    "path": "src/fptn-protocol-lib/time/time_provider.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <atomic>\n#include <chrono>\n#include <cstdint>\n#include <ctime>\n#include <mutex>\n#include <string>\n#include <utility>\n#include <vector>\n\nnamespace fptn::time {\n\nusing NtpServers = std::vector<std::pair<std::string, std::uint16_t>>;\n\nclass TimeProvider final {\n public:\n  static TimeProvider* Instance() {\n    static TimeProvider provider;\n    return &provider;\n  }\n\n  std::string Rfc7231Date();\n  std::int32_t OffsetSeconds() const;\n  std::uint32_t NowTimestamp();\n  bool SyncWithNtp();\n\n protected:\n  explicit TimeProvider(\n      NtpServers servers = {\n        {\"pool.ntp.org\", 123},\n        {\"ru.pool.ntp.org\", 123},\n        {\"ntp.ix.ru\", 123}\n      });\n  bool Refresh();\n\n private:\n  const std::chrono::hours kSyncInterval_{1};\n\n  mutable std::mutex mutex_;\n  const NtpServers servers_;\n\n  std::atomic<std::int32_t> offset_seconds_;\n  std::atomic<std::chrono::steady_clock::time_point> last_sync_time_;\n};\n\n}  // namespace fptn::time\n"
  },
  {
    "path": "src/fptn-server/.gitignore",
    "content": "keys/\ntmp/"
  },
  {
    "path": "src/fptn-server/CMakeLists.txt",
    "content": "project(fptn-server)\n\ninclude_directories(${CMAKE_CURRENT_SOURCE_DIR})\ninclude_directories(\"${CMAKE_CURRENT_BINARY_DIR}/depends/protobuf/fptn_protocol/\")\n\nif(APPLE)\n  set(CMAKE_CXX_STANDARD 20)\nelse()\n  add_definitions(-DBOOST_ASIO_HAS_CO_AWAIT)\n  add_definitions(-DBOOST_ASIO_HAS_CO_SPAWN)\n  add_definitions(-DBOOST_ASIO_HAS_COROUTINES)\n  set(CMAKE_INCLUDE_CURRENT_DIR ON)\n  set(CMAKE_CXX_STANDARD 20)\n  set(CMAKE_CXX_STANDARD_REQUIRED ON)\n  if(CMAKE_CXX_COMPILER_ID STREQUAL \"Clang\")\n    set(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} -Wno-unused-command-line-argumen\")\n  endif()\nendif()\n\nfind_package(Boost REQUIRED COMPONENTS asio coroutines future process locale)\nfind_package(ZLIB REQUIRED)\nfind_package(OpenSSL REQUIRED)\nfind_package(argparse REQUIRED)\nfind_package(spdlog REQUIRED)\nfind_package(fmt REQUIRED)\nfind_package(PcapPlusPlus REQUIRED)\nfind_package(nlohmann_json REQUIRED)\nfind_package(jwt-cpp REQUIRED)\nfind_package(prometheus-cpp REQUIRED)\n\n\n# Include Boost directory\ninclude_directories(${Boost_INCLUDE_DIRS})\n\nadd_executable(\n  \"${PROJECT_NAME}\"\n  fptn-server.cpp\n  nat/table.h\n  nat/table.cpp\n  client/session.h\n  client/session.cpp\n  network/virtual_interface.h\n  network/virtual_interface.cpp\n  traffic_shaper/leaky_bucket.h\n  traffic_shaper/leaky_bucket.cpp\n  routing/iptables.h\n  routing/iptables.cpp\n  web/listener/listener.h\n  web/listener/listener.cpp\n  web/session/session.h\n  web/session/session.cpp\n  web/server.h\n  web/server.cpp\n  web/handshake/handshake_cache_manager.h\n  web/handshake/handshake_cache_manager.cpp\n  filter/manager.h\n  filter/manager.cpp\n  filter/filters/base_filter.h\n  filter/filters/antiscan/antiscan.h\n  filter/filters/antiscan/antiscan.cpp\n  filter/filters/bittorrent/bittorrent.h\n  filter/filters/bittorrent/bittorrent.cpp\n  vpn/manager.h\n  vpn/manager.cpp\n  statistic/metrics.h\n  statistic/metrics.cpp\n  config/command_line_config.cpp\n  config/command_line_config.h\n  user/user_manager.cpp\n  user/user_manager.h)\n\ntarget_link_libraries(\n  \"${PROJECT_NAME}\"\n  PRIVATE ZLIB::ZLIB\n          Boost::boost\n          Boost::random\n          Boost::filesystem\n          Boost::process\n          Boost::locale\n          OpenSSL::SSL\n          OpenSSL::Crypto\n          argparse::argparse\n          nlohmann_json::nlohmann_json\n          jwt-cpp::jwt-cpp\n          spdlog::spdlog\n          fmt::fmt\n          PcapPlusPlus::PcapPlusPlus\n          tuntap++\n          fptn-protocol-lib_static\n          prometheus-cpp::prometheus-cpp)\n"
  },
  {
    "path": "src/fptn-server/client/session.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"client/session.h\"\n\n#include <string>\n#include <utility>\n\nusing fptn::client::Session;\nusing fptn::common::network::IPv4Address;\nusing fptn::common::network::IPv6Address;\n\nSession::Session(ClientID client_id,\n    std::string user_name,\n    IPv4Address client_ipv4,\n    IPv4Address fake_client_ipv4,\n    IPv6Address client_ipv6,\n    IPv6Address fake_client_ipv6,\n    fptn::traffic_shaper::LeakyBucketSPtr to_client,\n    fptn::traffic_shaper::LeakyBucketSPtr from_client)\n    : client_id_(client_id),\n      user_name_(std::move(user_name)),\n      client_ipv4_(std::move(client_ipv4)),\n      fake_client_ipv4_(std::move(fake_client_ipv4)),\n      client_ipv6_(std::move(client_ipv6)),\n      fake_client_ipv6_(std::move(fake_client_ipv6)),\n      to_client_(std::move(to_client)),\n      from_client_(std::move(from_client)) {}\n\nconst fptn::ClientID& Session::ClientId() const noexcept { return client_id_; }\n\nconst std::string& Session::UserName() const noexcept { return user_name_; }\n\nconst IPv4Address& Session::ClientIPv4() const noexcept { return client_ipv4_; }\n\nconst IPv4Address& Session::FakeClientIPv4() const noexcept {\n  return fake_client_ipv4_;\n}\n\nconst IPv6Address& Session::ClientIPv6() const noexcept { return client_ipv6_; }\n\nconst IPv6Address& Session::FakeClientIPv6() const noexcept {\n  return fake_client_ipv6_;\n}\n\nfptn::traffic_shaper::LeakyBucketSPtr&\nSession::TrafficShaperToClient() noexcept {\n  return to_client_;\n}\n\nfptn::traffic_shaper::LeakyBucketSPtr&\nSession::TrafficShaperFromClient() noexcept {\n  return from_client_;\n}\n\nfptn::common::network::IPPacketPtr Session::ChangeIPAddressToClientIP(\n    fptn::common::network::IPPacketPtr packet) noexcept {\n  packet->SetClientId(client_id_);\n\n#ifdef FPTN_IP_ADDRESS_WITHOUT_PCAP\n  if (packet->IsIPv4()) {\n    packet->SetDstIPv4Address(client_ipv4_.ToString());\n  } else if (packet->IsIPv6()) {\n    packet->SetDstIPv6Address(client_ipv6_.ToString());\n  }\n#else\n  if (packet->IsIPv4()) {\n    packet->SetDstIPv4Address(client_ipv4_.Get());\n  } else if (packet->IsIPv6()) {\n    packet->SetDstIPv6Address(client_ipv6_.Get());\n  }\n#endif\n  packet->ComputeCalculateFields();\n  return packet;\n}\n\nfptn::common::network::IPPacketPtr Session::ChangeIPAddressToFakeIP(\n    fptn::common::network::IPPacketPtr packet) noexcept {\n  packet->SetClientId(client_id_);\n#ifdef FPTN_IP_ADDRESS_WITHOUT_PCAP\n  if (packet->IsIPv4()) {\n    packet->SetSrcIPv4Address(fake_client_ipv4_.ToString());\n  } else if (packet->IsIPv6()) {\n    packet->SetSrcIPv6Address(fake_client_ipv6_.ToString());\n  }\n#else\n  if (packet->IsIPv4()) {\n    packet->SetSrcIPv4Address(fake_client_ipv4_.Get());\n  } else if (packet->IsIPv6()) {\n    packet->SetSrcIPv6Address(fake_client_ipv6_.Get());\n  }\n#endif\n  packet->ComputeCalculateFields();\n  return packet;\n}\n"
  },
  {
    "path": "src/fptn-server/client/session.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n#pragma once\n\n#include <iostream>\n#include <memory>\n#include <string>\n\n#include <pcapplusplus/EthLayer.h>   // NOLINT(build/include_order)\n#include <pcapplusplus/IPv4Layer.h>  // NOLINT(build/include_order)\n#include <pcapplusplus/Packet.h>     // NOLINT(build/include_order)\n\n#include \"common/client_id.h\"\n#include \"common/network/ip_address.h\"\n\n#include \"traffic_shaper/leaky_bucket.h\"\n\nnamespace fptn::client {\n\nusing fptn::common::network::IPv4Address;\nusing fptn::common::network::IPv6Address;\n\nclass Session final {\n public:\n  Session(ClientID client_id,\n      std::string user_name,\n      IPv4Address client_ipv4,\n      IPv4Address fake_client_ipv4,\n      IPv6Address client_ipv6,\n      IPv6Address fake_client_ipv6,\n      fptn::traffic_shaper::LeakyBucketSPtr to_client,\n      fptn::traffic_shaper::LeakyBucketSPtr from_client);\n  [[nodiscard]] const ClientID& ClientId() const noexcept;\n\n  [[nodiscard]] const std::string& UserName() const noexcept;\n\n  [[nodiscard]] const IPv4Address& ClientIPv4() const noexcept;\n  [[nodiscard]] const IPv4Address& FakeClientIPv4() const noexcept;\n\n  [[nodiscard]] const IPv6Address& ClientIPv6() const noexcept;\n  [[nodiscard]] const IPv6Address& FakeClientIPv6() const noexcept;\n\n  fptn::traffic_shaper::LeakyBucketSPtr& TrafficShaperToClient() noexcept;\n  fptn::traffic_shaper::LeakyBucketSPtr& TrafficShaperFromClient() noexcept;\n\n  fptn::common::network::IPPacketPtr ChangeIPAddressToClientIP(\n      fptn::common::network::IPPacketPtr packet) noexcept;\n  fptn::common::network::IPPacketPtr ChangeIPAddressToFakeIP(\n      fptn::common::network::IPPacketPtr packet) noexcept;\n\n private:\n  const ClientID client_id_;\n  const std::string user_name_;\n  const IPv4Address client_ipv4_;\n  const IPv4Address fake_client_ipv4_;\n  const IPv6Address client_ipv6_;\n  const IPv6Address fake_client_ipv6_;\n\n  fptn::traffic_shaper::LeakyBucketSPtr to_client_;\n  fptn::traffic_shaper::LeakyBucketSPtr from_client_;\n};\n\nusing SessionSPtr = std::shared_ptr<Session>;\n\n}  // namespace fptn::client\n"
  },
  {
    "path": "src/fptn-server/config/command_line_config.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"config/command_line_config.h\"\n\n#include <algorithm>\n#include <memory>\n#include <string>\n#include <vector>\n\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\n#include \"common/utils/utils.h\"\n\nnamespace {\nbool ParseBoolean(std::string value) noexcept {\n  try {\n    // С++17\n    // NOLINTNEXTLINE(modernize-use-ranges)\n    std::transform(value.begin(), value.end(), value.begin(),\n        [](unsigned char c) { return std::tolower(c); });\n    return value == \"true\";\n  } catch (...) {\n    return false;\n  }\n}\n}  // namespace\n\nnamespace fptn::config {\n\nusing fptn::common::network::IPv4Address;\nusing fptn::common::network::IPv6Address;\n\nCommandLineConfig::CommandLineConfig(int argc, char* argv[])\n    : argc_(argc), argv_(argv), args_(\"fptn-server\", FPTN_VERSION) {\n  // Required arguments\n  args_.add_argument(\"--server-crt\").required().help(\"Path to server.crt file\");\n  args_.add_argument(\"--server-key\").required().help(\"Path to server.key file\");\n  args_.add_argument(\"--out-network-interface\")\n      .required()\n      .help(\"Network out interface\");\n  // Optional arguments\n  args_.add_argument(\"--server-port\")\n      .default_value(443)\n      .help(\"Port number\")\n      .scan<'i', int>();\n  args_.add_argument(\"--tun-interface-name\")\n      .default_value(\"tun0\")\n      .help(\"Network interface name\");\n  /* IPv4 */\n  args_.add_argument(\"--tun-interface-ip\")\n      .default_value(FPTN_SERVER_DEFAULT_ADDRESS_IP4)\n      .help(\"IP address of the virtual interface\");\n  args_.add_argument(\"--tun-interface-network-address\")\n      .default_value(FPTN_SERVER_DEFAULT_NET_ADDRESS_IP4)\n      .help(\"IP network of the virtual interface\");\n  args_.add_argument(\"--tun-interface-network-mask\")\n      .default_value(16)\n      .help(\"Network mask\")\n      .scan<'i', int>();\n  /* IPv6 */\n  args_.add_argument(\"--tun-interface-ipv6\")\n      .default_value(FPTN_SERVER_DEFAULT_ADDRESS_IP6)\n      .help(\"IPv6 address of the virtual interface\");\n  args_.add_argument(\"--tun-interface-network-ipv6-address\")\n      .default_value(FPTN_SERVER_DEFAULT_NET_ADDRESS_IP6)\n      .help(\"IPv6 network address of the virtual interface\");\n  args_.add_argument(\"--tun-interface-network-ipv6-mask\")\n      .default_value(64)\n      .help(\"IPv6 network mask\")\n      .scan<'i', int>();\n  args_.add_argument(\"--userfile\")\n      .help(\"Path to users file (default: /etc/fptn/users.list)\")\n      .default_value(\"/etc/fptn/users.list\");\n  // Packet filters\n  args_.add_argument(\"--disable-bittorrent\")\n      .help(\n          \"Disable BitTorrent traffic filtering. Use this flag to disable \"\n          \"filtering.\")\n      .default_value(\"false\");\n  // Allow prometheus metric\n  args_.add_argument(\"--prometheus-access-key\")\n      .help(\n          \"Secret key required for accessing Prometheus metrics. Set this to a \"\n          \"secret value if metrics is needed.\")\n      .default_value(\"\");\n  // Remote server auth\n  args_.add_argument(\"--use-remote-server-auth\")\n      .help(\n          \"Enable remote server authentication. Set to 'true' to use a remote \"\n          \"server for authentication.\")\n      .default_value(\"false\");\n  args_.add_argument(\"--remote-server-auth-host\")\n      .help(\n          \"Specify the remote server's IP address or hostname for \"\n          \"authentication.\")\n      .default_value(\"1.1.1.1\");\n  args_.add_argument(\"--remote-server-auth-port\")\n      .help(\n          \"Specify the port number for the remote server authentication. Set \"\n          \"to 0 to use the default port.\")\n      .default_value(443)\n      .scan<'i', int>();\n  args_.add_argument(\"--max-active-sessions-per-user\")\n      .help(\"Maximum number of active sessions allowed per VPN user\")\n      .default_value(3)\n      .scan<'i', int>();\n  // Probing\n  args_.add_argument(\"--enable-detect-probing\")\n      .help(\n          \"Enable detection of non-FPTN clients or probing attempts during SSL \"\n          \"handshake. \")\n      .default_value(\"false\");\n  args_.add_argument(\"--default-proxy-domain\")\n      .help(\"Default domain for proxying non-VPN clients.\")\n      .default_value(FPTN_DEFAULT_SNI);\n  args_.add_argument(\"--allowed-sni-list\")\n      .help(\n          \"Comma-separated list of allowed SNI hostnames for non-VPN clients.\\n\"\n          \"Behavior logic:\\n\"\n          \" - List is empty (default): proxy all non-VPN traffic to \"\n          \"--default-proxy-domain\\n\"\n          \" - List is NOT empty: use as whitelist:\\n\"\n          \"   - Client SNI in list -> proxy to client's SNI\\n\"\n          \"   - Client SNI not in list -> proxy to --default-proxy-domain\")\n      .default_value(\"\");\n  // Prevent self-proxy\n  args_.add_argument(\"--server-external-ips\")\n      .help(\n          \"Public IPv4 address of this VPN server. \"\n          \"Prevents proxy loops when clients connect via IP. \"\n          \"Example: --server-external-ip 1.2.3.4,5.6.7.8\")\n      .default_value(\"\");\n}\n\nbool CommandLineConfig::Parse() noexcept {  // NOLINT(bugprone-exception-escape)\n  try {\n    args_.parse_args(argc_, argv_);\n    return true;\n  } catch (const std::runtime_error& err) {\n    const std::string help = args_.help().str();\n    SPDLOG_ERROR(\"Argument parsing error: {}\\n{}\", err.what(), help);\n  } catch (...) {\n    SPDLOG_ERROR(\"Undefined parser error\");\n  }\n  return false;\n}\n\nstd::string CommandLineConfig::ServerCrt() const {\n  return args_.get<std::string>(\"--server-crt\");\n}\n\nstd::string CommandLineConfig::ServerKey() const {\n  return args_.get<std::string>(\"--server-key\");\n}\n\nstd::string CommandLineConfig::OutNetworkInterface() const {\n  return args_.get<std::string>(\"--out-network-interface\");\n}\n\nint CommandLineConfig::ServerPort() const {\n  return args_.get<int>(\"--server-port\");\n}\n\nstd::string CommandLineConfig::TunInterfaceName() const {\n  return args_.get<std::string>(\"--tun-interface-name\");\n}\n\nIPv4Address CommandLineConfig::TunInterfaceIPv4() const {\n  return IPv4Address(args_.get<std::string>(\"--tun-interface-ip\"));\n}\n\nIPv4Address CommandLineConfig::TunInterfaceNetworkIPv4Address() const {\n  return IPv4Address(args_.get<std::string>(\"--tun-interface-network-address\"));\n}\n\nint CommandLineConfig::TunInterfaceNetworkIPv4Mask() const {\n  return args_.get<int>(\"--tun-interface-network-mask\");\n}\n\nIPv6Address CommandLineConfig::TunInterfaceIPv6() const {\n  return IPv6Address(args_.get<std::string>(\"--tun-interface-ipv6\"));\n}\n\nIPv6Address CommandLineConfig::TunInterfaceNetworkIPv6Address() const {\n  return IPv6Address(\n      args_.get<std::string>(\"--tun-interface-network-ipv6-address\"));\n}\n\nint CommandLineConfig::TunInterfaceNetworkIPv6Mask() const {\n  return args_.get<int>(\"--tun-interface-network-ipv6-mask\");\n}\n\nstd::string CommandLineConfig::UserFile() const {\n  return args_.get<std::string>(\"--userfile\");\n}\n\nbool CommandLineConfig::DisableBittorrent() const {\n  return ParseBoolean(args_.get<std::string>(\"--disable-bittorrent\"));\n}\n\nstd::string CommandLineConfig::PrometheusAccessKey() const {\n  return args_.get<std::string>(\"--prometheus-access-key\");\n}\n\nbool CommandLineConfig::UseRemoteServerAuth() const {\n  return ParseBoolean(args_.get<std::string>(\"--use-remote-server-auth\"));\n}\n\nstd::string CommandLineConfig::RemoteServerAuthHost() const {\n  return args_.get<std::string>(\"--remote-server-auth-host\");\n}\n\nint CommandLineConfig::RemoteServerAuthPort() const {\n  return args_.get<int>(\"--remote-server-auth-port\");\n}\n\nbool CommandLineConfig::EnableDetectProbing() const {\n  return ParseBoolean(args_.get<std::string>(\"--enable-detect-probing\"));\n}\n\n[[nodiscard]]\nstd::string CommandLineConfig::DefaultProxyDomain() const {\n  auto default_domain = args_.get<std::string>(\"--default-proxy-domain\");\n  if (default_domain.empty()) {\n    return FPTN_DEFAULT_SNI;\n  }\n  return default_domain;\n}\n\n[[nodiscard]]\nstd::vector<std::string> CommandLineConfig::AllowedSniList() const {\n  const auto allowed_sni = args_.get<std::string>(\"--allowed-sni-list\");\n  if (!allowed_sni.empty()) {\n    return common::utils::SplitCommaSeparated(\n        allowed_sni + \",\" + DefaultProxyDomain());\n  }\n  return {};\n}\n\nstd::size_t CommandLineConfig::MaxActiveSessionsPerUser() const {\n  return static_cast<std::size_t>(\n      args_.get<int>(\"--max-active-sessions-per-user\"));\n}\n\n[[nodiscard]]\nstd::string CommandLineConfig::ServerExternalIPs() const {\n  return args_.get<std::string>(\"--server-external-ips\");\n}\n\n}  // namespace fptn::config\n"
  },
  {
    "path": "src/fptn-server/config/command_line_config.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <string>\n#include <vector>\n\n#include <argparse/argparse.hpp>  // NOLINT(build/include_order)\n\n#include \"common/network/ip_address.h\"\n\nnamespace fptn::config {\n\nusing fptn::common::network::IPv4Address;\nusing fptn::common::network::IPv6Address;\n\nclass CommandLineConfig {\n public:\n  explicit CommandLineConfig(int argc, char* argv[]);\n  bool Parse() noexcept;\n\n public:\n  /* options */\n  [[nodiscard]] std::string ServerCrt() const;\n  [[nodiscard]] std::string ServerKey() const;\n  [[nodiscard]] std::string OutNetworkInterface() const;\n  [[nodiscard]] int ServerPort() const;\n\n  [[nodiscard]] std::string TunInterfaceName() const;\n  /* IPv4 */\n  [[nodiscard]] IPv4Address TunInterfaceIPv4() const;\n  [[nodiscard]] IPv4Address TunInterfaceNetworkIPv4Address() const;\n  [[nodiscard]] int TunInterfaceNetworkIPv4Mask() const;\n  /* IPv6 */\n  [[nodiscard]] IPv6Address TunInterfaceIPv6() const;\n  [[nodiscard]] IPv6Address TunInterfaceNetworkIPv6Address() const;\n  [[nodiscard]] int TunInterfaceNetworkIPv6Mask() const;\n\n  [[nodiscard]] std::string UserFile() const;\n  [[nodiscard]] bool DisableBittorrent() const;\n  [[nodiscard]] std::string PrometheusAccessKey() const;\n\n  [[nodiscard]] bool UseRemoteServerAuth() const;\n  [[nodiscard]] std::string RemoteServerAuthHost() const;\n  [[nodiscard]] int RemoteServerAuthPort() const;\n\n  [[nodiscard]] bool EnableDetectProbing() const;\n\n  [[nodiscard]] std::string DefaultProxyDomain() const;\n  [[nodiscard]] std::vector<std::string> AllowedSniList() const;\n\n  [[nodiscard]] std::size_t MaxActiveSessionsPerUser() const;\n\n  [[nodiscard]] std::string ServerExternalIPs() const;\n\n private:\n  int argc_;\n  char** argv_;\n  argparse::ArgumentParser args_;\n};\n\n}  // namespace fptn::config\n"
  },
  {
    "path": "src/fptn-server/filter/filters/antiscan/antiscan.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"filter/filters/antiscan/antiscan.h\"\n\n#if defined(__APPLE__) || defined(__linux__)\n#include <arpa/inet.h>\n#elif _WIN32\n#pragma warning(disable : 4996)\n#include <Winsock2.h>\n#pragma warning(default : 4996)\n#endif\n\n#include <common/network/ipv6_utils.h>\n\nusing fptn::common::network::IPPacketPtr;\nusing fptn::filter::AntiScan;\n\nAntiScan::AntiScan(\n    /* IPv4 */\n    const fptn::common::network::IPv4Address& server_ipv4,\n    const fptn::common::network::IPv4Address& server_ipv4_net,\n    const int serverIPv4Mask,\n    /* IPv6 */\n    const fptn::common::network::IPv6Address& server_ipv6,\n    const fptn::common::network::IPv6Address& server_ipv6_net,\n    const int serverIPv6Mask)\n    : server_ipv4_(ntohl(server_ipv4.ToInt())),\n      server_ipv4_net_(ntohl(server_ipv4_net.ToInt())),\n      server_ipv4_mask_((0xFFFFFFFF << (32 - serverIPv4Mask))),\n      server_ipv6_(\n          fptn::common::network::ipv6::toUInt128(server_ipv6.ToString())),\n      server_ipv6_net_(\n          fptn::common::network::ipv6::toUInt128(server_ipv6_net.ToString())),\n      server_ipv6_mask_(\n          (boost::multiprecision::uint128_t(1) << (128 - serverIPv6Mask)) - 1) {\n}\n\nIPPacketPtr AntiScan::apply(IPPacketPtr packet) const {\n  // Prevent sending requests to the VPN virtual network from the client\n  static fptn::common::network::IPv4Address ipv4_broadcast(\"255.255.255.255\");\n  static std::uint32_t ipv4_broadcast_int = ntohl(ipv4_broadcast.ToInt());\n\n  if (packet->IsIPv4()) {\n    const std::uint32_t dst =\n        ntohl(packet->IPv4Layer()->getDstIPv4Address().toInt());\n    const bool is_in_network =\n        (dst & server_ipv4_mask_) == (server_ipv4_net_ & server_ipv4_mask_);\n    if (server_ipv4_ == dst || (!is_in_network && ipv4_broadcast_int != dst)) {\n      return packet;\n    }\n  } else if (packet->IsIPv6()) {\n    const auto dst = fptn::common::network::ipv6::toUInt128(\n        packet->IPv6Layer()->getDstIPv6Address());\n    const auto max_addr = server_ipv6_net_ | server_ipv6_mask_;\n    const bool is_in_network = (server_ipv6_net_ <= dst && dst <= max_addr);\n    if (server_ipv6_ == dst || !is_in_network) {\n      return packet;\n    }\n  }\n  return nullptr;\n}\n"
  },
  {
    "path": "src/fptn-server/filter/filters/antiscan/antiscan.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <filter/filters/base_filter.h>\n\n#include <boost/multiprecision/cpp_int.hpp>\n\n#include \"common/network/ip_address.h\"\n\nnamespace fptn::filter {\n\n/**\n * @class AntiScanFilter\n * @brief A filter class that blocks packets from IP addresses belonging to a\n * specific network.\n *\n * This class is used to block IP packets that match a given network address and\n * subnet mask. It compares the destination IP address of the packet against the\n * specified network and mask. If the packet belongs to the network, it is\n * blocked.\n *\n * @note This filter does not modify the packets that are not blocked. It simply\n * returns `nullptr` for blocked packets.\n */\nclass AntiScan : public BaseFilter {\n public:\n  AntiScan(\n      /* IPv4 */\n      const fptn::common::network::IPv4Address& server_ipv4,\n      const fptn::common::network::IPv4Address& server_ipv4_net,\n      const int serverIPv4Mask,\n      /* IPv6 */\n      const fptn::common::network::IPv6Address& server_ipv6,\n      const fptn::common::network::IPv6Address& server_ipv6_net,\n      const int serverIPv6Mask);\n  fptn::common::network::IPPacketPtr apply(\n      fptn::common::network::IPPacketPtr packet) const override;\n  ~AntiScan() override = default;\n\n private:\n  /* IPv4 */\n  const std::uint32_t server_ipv4_;\n  const std::uint32_t server_ipv4_net_;\n  const int server_ipv4_mask_;\n\n  /* IPv6 */\n  const boost::multiprecision::uint128_t server_ipv6_;\n  const boost::multiprecision::uint128_t server_ipv6_net_;\n  const boost::multiprecision::uint128_t server_ipv6_mask_;\n};\n}  // namespace fptn::filter\n"
  },
  {
    "path": "src/fptn-server/filter/filters/base_filter.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <memory>\n\n#include \"common/network/ip_packet.h\"\n\nnamespace fptn::filter {\n\nclass BaseFilter {\n public:\n  virtual fptn::common::network::IPPacketPtr apply(\n      fptn::common::network::IPPacketPtr packet) const = 0;\n  virtual ~BaseFilter() = default;\n};\n\nusing BaseFilterSPtr = std::shared_ptr<BaseFilter>;\n}  // namespace fptn::filter\n"
  },
  {
    "path": "src/fptn-server/filter/filters/bittorrent/bittorrent.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"filter/filters/bittorrent/bittorrent.h\"\n\n#include <cstdint>\n#include <cstring>\n\nusing fptn::common::network::IPPacketPtr;\nusing fptn::filter::BitTorrent;\n\nstatic constexpr std::uint8_t kClassic[] = {0x13, 'B', 'i', 't', 'T', 'o', 'r',\n    'r', 'e', 'n', 't', ' ', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l'};\n\nstatic constexpr std::uint8_t kExtensionProtocol[] = {\n    0x14, 'e', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n'};\n\nstatic constexpr std::uint8_t kDht[] = {\n    'd', '1', ':', 'a', 'd', '2', ':', 'i', 'd', '2'};\n\nnamespace {\n\nbool DetectBitTorrent(const std::uint8_t* payload, std::size_t payload_size) {\n  if (!payload_size) {\n    return false;\n  }\n  const std::uint8_t first_byte = payload[0];\n  // Classic Protocol\n  if (first_byte == kClassic[0]) {\n    constexpr std::size_t kClassicSignatureSize = sizeof(kClassic);\n    return payload_size >= kClassicSignatureSize &&\n           std::memcmp(payload, kClassic, kClassicSignatureSize) == 0;\n  }\n\n  // Extension Protocol\n  if (first_byte == kExtensionProtocol[0]) {\n    constexpr std::size_t kExtProtocolSignSize = sizeof(kExtensionProtocol);\n    return payload_size >= kExtProtocolSignSize &&\n           std::memcmp(payload, kExtensionProtocol, kExtProtocolSignSize) == 0;\n  }\n\n  // BT-DHT\n  if (first_byte == kDht[0]) {\n    constexpr std::size_t kDhtSignatureSize = sizeof(kDht);\n    return payload_size >= kDhtSignatureSize &&\n           std::memcmp(payload, kDht, kDhtSignatureSize) == 0;\n  }\n  return false;\n}\n\n}  // namespace\n\nIPPacketPtr BitTorrent::apply(IPPacketPtr packet) const {\n  if (const auto* tcp = packet->Pkt().getLayerOfType<pcpp::TcpLayer>()) {\n    if (DetectBitTorrent(tcp->getLayerPayload(), tcp->getLayerPayloadSize())) {\n      return nullptr;\n    }\n  } else if (const auto* udp = packet->Pkt().getLayerOfType<pcpp::UdpLayer>()) {\n    if (DetectBitTorrent(udp->getLayerPayload(), udp->getLayerPayloadSize())) {\n      return nullptr;\n    }\n  }\n  return packet;\n}\n"
  },
  {
    "path": "src/fptn-server/filter/filters/bittorrent/bittorrent.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include \"filter/filters/base_filter.h\"\n\nnamespace fptn::filter {\nclass BitTorrent : public BaseFilter {\n public:\n  BitTorrent() = default;\n  ~BitTorrent() override = default;\n  fptn::common::network::IPPacketPtr apply(\n      fptn::common::network::IPPacketPtr packet) const override;\n};\n}  // namespace fptn::filter\n"
  },
  {
    "path": "src/fptn-server/filter/manager.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"filter/manager.h\"\n\n#include <utility>\n\nusing fptn::common::network::IPPacketPtr;\nusing fptn::filter::Manager;\n\nvoid Manager::Add(BaseFilterSPtr filter) noexcept {\n  try {\n    filters_.push_back(std::move(filter));\n  } catch (const std::bad_alloc& err) {\n    SPDLOG_ERROR(\n        \"Memory allocation failed while adding filter: {}\", err.what());\n  } catch (...) {\n    SPDLOG_ERROR(\"An unknown exception occurred while adding a filter.\");\n  }\n}\n\nIPPacketPtr Manager::Apply(IPPacketPtr packet) const noexcept {\n  for (const auto& filter : filters_) {\n    packet = filter->apply(std::move(packet));\n    if (!packet) {\n      return nullptr;  // packet was filtered\n    }\n  }\n  return packet;\n}\n"
  },
  {
    "path": "src/fptn-server/filter/manager.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <memory>\n#include <vector>\n\n#include \"common/network/ip_packet.h\"\n\n#include \"filters/base_filter.h\"\n\nnamespace fptn::filter {\n\nclass Manager {\n public:\n  Manager() = default;\n  void Add(BaseFilterSPtr filter) noexcept;\n\n  [[nodiscard]] fptn::common::network::IPPacketPtr Apply(\n      fptn::common::network::IPPacketPtr packet) const noexcept;\n\n private:\n  std::vector<BaseFilterSPtr> filters_;\n};\n\nusing ManagerSPtr = std::shared_ptr<Manager>;\n}  // namespace fptn::filter\n"
  },
  {
    "path": "src/fptn-server/fptn-server.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include <filesystem>\n#include <iostream>\n#include <memory>\n#include <utility>\n\n#include <boost/asio.hpp>\n#include <fmt/ranges.h>  // NOLINT(build/include_order)\n\n#include \"common/jwt_token/token_manager.h\"\n#include \"common/logger/logger.h\"\n#include \"common/network/ip_address.h\"\n\n#include \"config/command_line_config.h\"\n#include \"filter/filters/antiscan/antiscan.h\"\n#include \"filter/filters/bittorrent/bittorrent.h\"\n#include \"filter/manager.h\"\n#include \"nat/table.h\"\n#include \"network/virtual_interface.h\"\n#include \"routing/iptables.h\"\n#include \"statistic/metrics.h\"\n#include \"user/user_manager.h\"\n#include \"vpn/manager.h\"\n#include \"web/server.h\"\n\nnamespace {\n\nvoid WaitForSignal() {\n  boost::asio::io_context io_context;\n  boost::asio::signal_set signals(io_context, SIGINT, SIGTERM /*,SIGQUIT*/);\n  signals.async_wait([&](auto, auto) { io_context.stop(); });\n  io_context.run();\n}\n}  // namespace\n\nint main(int argc, char* argv[]) {\n#if defined(__linux__) || defined(__APPLE__)\n  if (geteuid() != 0) {\n    std::cerr << \"You must be root to run this program.\" << std::endl;\n    return EXIT_FAILURE;\n  }\n#endif\n  try {\n    /* Check options */\n    fptn::config::CommandLineConfig config(argc, argv);\n    if (!config.Parse()) {\n      return EXIT_FAILURE;\n    }\n    if (!std::filesystem::exists(config.ServerCrt()) ||\n        !std::filesystem::exists(config.ServerKey())) {\n      SPDLOG_ERROR(\"SSL certificate or key file does not exist!\");\n      return EXIT_FAILURE;\n    }\n\n    /* Init logger */\n    if (fptn::logger::init(\"fptn-server\")) {\n      SPDLOG_INFO(\"Application started successfully.\");\n    } else {\n      std::cerr << \"Logger initialization failed. Exiting application.\"\n                << std::endl;\n      return EXIT_FAILURE;\n    }\n\n    /* Init iptables */\n    auto iptables = std::make_unique<fptn::routing::RouteManager>(\n        config.OutNetworkInterface(), config.TunInterfaceName());\n    /* Init virtual network interface */\n\n    auto virtual_network_interface =\n        std::make_unique<fptn::network::VirtualInterface>(\n            fptn::common::network::TunInterface::Config{\n                .name = config.TunInterfaceName(),\n                .ipv4_addr = config.TunInterfaceIPv4(),\n                .ipv4_netmask = config.TunInterfaceNetworkIPv4Mask(),\n                .ipv6_addr = config.TunInterfaceIPv6(),\n                .ipv6_netmask = config.TunInterfaceNetworkIPv6Mask(),\n            },\n            std::move(iptables));\n\n    /* Init web server */\n    auto token_manager =\n        std::make_shared<fptn::common::jwt_token::TokenManager>(\n            config.ServerCrt(), config.ServerKey());\n    /* Init user manager */\n    auto user_manager = std::make_shared<fptn::user::UserManager>(\n        config.UserFile(), config.UseRemoteServerAuth(),\n        config.RemoteServerAuthHost(), config.RemoteServerAuthPort());\n    /* Init NAT */\n    auto nat_table = std::make_shared<fptn::nat::Table>(\n        /* IPv4 */\n        config.TunInterfaceIPv4(), config.TunInterfaceNetworkIPv4Address(),\n        config.TunInterfaceNetworkIPv4Mask(),\n        /* IPv6 */\n        config.TunInterfaceIPv6(), config.TunInterfaceNetworkIPv6Address(),\n        config.TunInterfaceNetworkIPv6Mask());\n    /* Init prometheus */\n    auto prometheus = std::make_shared<fptn::statistic::Metrics>();\n    /* Init webserver */\n    auto web_server = std::make_unique<fptn::web::Server>(config.ServerPort(),\n        nat_table, user_manager, token_manager, prometheus,\n        config.PrometheusAccessKey(), config.TunInterfaceIPv4(),\n        config.TunInterfaceIPv6(),\n        /* probing */\n        config.EnableDetectProbing(), config.DefaultProxyDomain(),\n        config.AllowedSniList(),\n        /* sessions */\n        config.MaxActiveSessionsPerUser(),\n        /* External IPs */\n        config.ServerExternalIPs());\n\n    /* init packet filter */\n    auto filter_manager = std::make_shared<fptn::filter::Manager>();\n    if (config.DisableBittorrent()) {  // block bittorrent traffic\n      filter_manager->Add(std::make_shared<fptn::filter::BitTorrent>());\n    }\n    // Prevent sending requests to the VPN virtual network from the client\n    filter_manager->Add(std::make_shared<fptn::filter::AntiScan>(\n        /* IPv4 */\n        config.TunInterfaceIPv4(), config.TunInterfaceNetworkIPv4Address(),\n        config.TunInterfaceNetworkIPv4Mask(),\n        /* IPv6 */\n        config.TunInterfaceIPv6(), config.TunInterfaceNetworkIPv6Address(),\n        config.TunInterfaceNetworkIPv6Mask()));\n\n    SPDLOG_INFO(\n        \"\\n--- Starting server---\\n\"\n        \"VERSION:           {}\\n\"\n        \"NETWORK INTERFACE: {}\\n\"\n        \"VPN NETWORK IPv4:  {}\\n\"\n        \"VPN NETWORK IPv6:  {}\\n\"\n        \"VPN SERVER PORT:   {}\\n\"\n        \"DETECT_PROBING:    {}\\n\"\n        \"DEFAULT_PROXY_DOMAIN: {}\\n\"\n        \"ALLOWED_SNI_LIST:     {}\\n\"\n        \"MAX_ACTIVE_SESSIONS_PER_USER: {}\\n\",\n        FPTN_VERSION,\n        // Network settings\n        config.OutNetworkInterface(),\n        config.TunInterfaceNetworkIPv4Address().ToString(),\n        config.TunInterfaceNetworkIPv6Address().ToString(), config.ServerPort(),\n        // Probing settings\n        config.EnableDetectProbing() ? \"YES\" : \"NO\",\n        config.DefaultProxyDomain(),\n        fmt::format(\"[{}]\", fmt::join(config.AllowedSniList(), \", \")),\n        // max session\n        config.MaxActiveSessionsPerUser());\n\n    // Init vpn manager\n    fptn::vpn::Manager manager(std::move(web_server),\n        std::move(virtual_network_interface), nat_table, filter_manager,\n        prometheus);\n\n    /* start/wait/stop */\n    manager.Start();\n    WaitForSignal();\n    manager.Stop();\n\n    return EXIT_SUCCESS;\n  } catch (const std::exception& ex) {\n    SPDLOG_ERROR(\"An error occurred: {}. Exiting...\", ex.what());\n  } catch (...) {\n    SPDLOG_ERROR(\"An unknown error occurred. Exiting...\");\n  }\n  return EXIT_FAILURE;\n}\n"
  },
  {
    "path": "src/fptn-server/nat/table.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"nat/table.h\"\n\n#include <memory>\n#include <string>\n#include <utility>\n\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\nusing fptn::nat::Table;\n\nTable::Table(fptn::common::network::IPv4Address tun_ipv4,\n    fptn::common::network::IPv4Address tun_ipv4_network_address,\n    std::uint32_t tun_network_ipv4_mask,\n    fptn::common::network::IPv6Address tun_ipv6,\n    fptn::common::network::IPv6Address tun_ipv6_network_address,\n    std::uint32_t tun_network_ipv6_mask)\n    : client_number_(0),\n      tun_ipv4_(std::move(tun_ipv4)),\n      tun_ipv4_network_address_(std::move(tun_ipv4_network_address)),\n      tun_network_ipv4_mask_(tun_network_ipv4_mask),\n      tun_ipv6_(std::move(tun_ipv6)),\n      tun_ipv6_network_address_(std::move(tun_ipv6_network_address)),\n      tun_network_ipv6_mask_(tun_network_ipv6_mask),\n      ipv4_generator_(tun_ipv4_network_address_, tun_network_ipv4_mask_),\n      ipv6_generator_(tun_ipv6_network_address_, tun_network_ipv6_mask_) {}\n\nfptn::client::SessionSPtr Table::CreateClientSession(ClientID client_id,\n    const std::string& user_name,\n    const fptn::common::network::IPv4Address& client_ipv4,\n    const fptn::common::network::IPv6Address& client_ipv6,\n    const fptn::traffic_shaper::LeakyBucketSPtr& to_client,\n    const fptn::traffic_shaper::LeakyBucketSPtr& from_client) {\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  if (!client_id_to_sessions_.contains(client_id)) {\n    if (client_number_ >= ipv4_generator_.NumAvailableAddresses()) {\n      /* ||  client_number_ >= client_ipv6.NumAvailableAddresses() */\n      SPDLOG_INFO(\"Client limit was exceeded\");\n      return nullptr;\n    }\n    client_number_ += 1;\n    try {\n      const auto fake_ipv4 = GetUniqueIPv4Address();\n      const auto fake_ipv6 = GetUniqueIPv6Address();\n      auto session = std::make_shared<fptn::client::Session>(client_id,\n          user_name, client_ipv4, fake_ipv4, client_ipv6, fake_ipv6, to_client,\n          from_client);\n      client_id_to_sessions_.insert({client_id, session});\n      ipv4_to_sessions_.insert(\n          {fake_ipv4.ToInt(), session});  // ipv4 -> session\n      ipv6_to_sessions_.insert(\n          {fake_ipv6.ToString(), session});  // ipv6 -> session\n      return session;\n    } catch (const std::runtime_error& err) {\n      SPDLOG_INFO(\"Client error: {}\", err.what());\n    } catch (const std::exception& e) {\n      SPDLOG_ERROR(\n          \"Standard exception while creating client session: {}\", e.what());\n    } catch (...) {\n      SPDLOG_ERROR(\"An unknown error occurred while creating client session.\");\n    }\n  }\n  return nullptr;\n}\n\nbool Table::DelClientSession(ClientID client_id) {\n  fptn::client::SessionSPtr ipv4_session;\n  fptn::client::SessionSPtr ipv6_session;\n  {\n    const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n    auto it = client_id_to_sessions_.find(client_id);\n    if (it != client_id_to_sessions_.end()) {\n      const IPv4INT ipv4_int = it->second->FakeClientIPv4().ToInt();\n      const std::string ipv6_str = it->second->FakeClientIPv6().ToString();\n      client_id_to_sessions_.erase(it);\n\n      // delete ipv4 -> session\n      {\n        auto it_ipv4 = ipv4_to_sessions_.find(ipv4_int);\n        if (it_ipv4 != ipv4_to_sessions_.end()) {\n          ipv4_session = std::move(it_ipv4->second);\n          ipv4_to_sessions_.erase(it_ipv4);\n        }\n      }\n      // delete ipv6 -> session\n      {\n        auto it_ipv6 = ipv6_to_sessions_.find(ipv6_str);\n        if (it_ipv6 != ipv6_to_sessions_.end()) {\n          ipv6_session = std::move(it_ipv6->second);\n          ipv6_to_sessions_.erase(it_ipv6);\n        }\n      }\n    }\n  }\n  return ipv4_session != nullptr && ipv6_session != nullptr;\n}\n\nfptn::client::SessionSPtr Table::GetSessionByFakeIPv4(\n    const fptn::common::network::IPv4Address& ip) noexcept {\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  const auto it = ipv4_to_sessions_.find(ip.ToInt());\n  if (it != ipv4_to_sessions_.end()) {\n    return it->second;\n  }\n  return nullptr;\n}\n\nfptn::client::SessionSPtr Table::GetSessionByFakeIPv6(\n    const fptn::common::network::IPv6Address& ip) noexcept {\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  auto it = ipv6_to_sessions_.find(ip.ToString());\n  if (it != ipv6_to_sessions_.end()) {\n    return it->second;\n  }\n  return nullptr;\n}\n\nfptn::client::SessionSPtr Table::GetSessionByClientId(\n    ClientID clientId) noexcept {\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  auto it = client_id_to_sessions_.find(clientId);\n  if (it != client_id_to_sessions_.end()) {\n    return it->second;\n  }\n  return nullptr;\n}\n\nstd::size_t Table::GetNumberActiveSessionByUsername(\n    const std::string& username) {\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  return std::count_if(ipv4_to_sessions_.begin(), ipv4_to_sessions_.end(),\n      [&username](\n          const auto& pair) { return pair.second->UserName() == username; });\n}\n\nfptn::common::network::IPv4Address Table::GetUniqueIPv4Address() {\n  for (std::uint32_t i = 0; i < ipv4_generator_.NumAvailableAddresses(); i++) {\n    const auto ip = ipv4_generator_.GetNextAddress();\n    if (ip != tun_ipv4_ && !ipv4_to_sessions_.contains(ip.ToInt())) {\n      return ip;\n    }\n  }\n  throw std::runtime_error(\"No available address\");\n}\n\nfptn::common::network::IPv6Address Table::GetUniqueIPv6Address() {\n  for (int i = 0; i < ipv6_generator_.NumAvailableAddresses(); i++) {\n    const auto ip = ipv6_generator_.GetNextAddress();\n    if (ip != tun_ipv6_ && !ipv6_to_sessions_.contains(ip.ToString())) {\n      return ip;\n    }\n  }\n  throw std::runtime_error(\"No available address\");\n}\n\nvoid Table::UpdateStatistic(const fptn::statistic::MetricsSPtr& prometheus) {\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  prometheus->UpdateActiveSessions(client_id_to_sessions_.size());\n  for (const auto& client : client_id_to_sessions_) {\n    auto client_id = client.first;\n    const auto& session = client.second;\n    prometheus->UpdateStatistics(client_id, session->UserName(),\n        session->TrafficShaperToClient()->FullDataAmount(),\n        session->TrafficShaperFromClient()->FullDataAmount());\n  }\n}\n"
  },
  {
    "path": "src/fptn-server/nat/table.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <chrono>\n#include <memory>\n#include <string>\n#include <unordered_map>\n\n#include <pcapplusplus/EthLayer.h>   // NOLINT(build/include_order)\n#include <pcapplusplus/IPv4Layer.h>  // NOLINT(build/include_order)\n#include <pcapplusplus/Packet.h>     // NOLINT(build/include_order)\n\n#include \"common/network/ip_address.h\"\n#include \"common/network/ipv4_generator.h\"\n#include \"common/network/ipv6_generator.h\"\n\n#include \"client/session.h\"\n#include \"statistic/metrics.h\"\n#include \"traffic_shaper/leaky_bucket.h\"\n\nnamespace fptn::nat {\n\nclass Table final {\n  using IPv4INT = std::uint32_t;\n\n public:\n  Table(fptn::common::network::IPv4Address tun_ipv4,\n      fptn::common::network::IPv4Address tun_ipv4_network_address,\n      std::uint32_t tun_network_ipv4_mask,\n      fptn::common::network::IPv6Address tun_ipv6,\n      fptn::common::network::IPv6Address tun_ipv6_network_address,\n      std::uint32_t tun_network_ipv6_mask);\n\n  fptn::client::SessionSPtr CreateClientSession(ClientID client_id,\n      const std::string& user_name,\n      const fptn::common::network::IPv4Address& client_ipv4,\n      const fptn::common::network::IPv6Address& client_ipv6,\n      const fptn::traffic_shaper::LeakyBucketSPtr& to_client,\n      const fptn::traffic_shaper::LeakyBucketSPtr& from_client);\n  bool DelClientSession(ClientID client_id);\n  void UpdateStatistic(const fptn::statistic::MetricsSPtr& prometheus);\n\n public:\n  fptn::client::SessionSPtr GetSessionByFakeIPv4(\n      const fptn::common::network::IPv4Address& ip) noexcept;\n  fptn::client::SessionSPtr GetSessionByFakeIPv6(\n      const fptn::common::network::IPv6Address& ip) noexcept;\n  fptn::client::SessionSPtr GetSessionByClientId(ClientID clientId) noexcept;\n\n  std::size_t GetNumberActiveSessionByUsername(const std::string& username);\n\n protected:\n  fptn::common::network::IPv4Address GetUniqueIPv4Address();\n  fptn::common::network::IPv6Address GetUniqueIPv6Address();\n\n private:\n  mutable std::mutex mutex_;\n  std::uint32_t client_number_;\n\n  const fptn::common::network::IPv4Address tun_ipv4_;\n  const fptn::common::network::IPv4Address tun_ipv4_network_address_;\n  const std::uint32_t tun_network_ipv4_mask_;\n\n  const fptn::common::network::IPv6Address tun_ipv6_;\n  const fptn::common::network::IPv6Address tun_ipv6_network_address_;\n\n  const std::uint32_t tun_network_ipv6_mask_;\n\n  fptn::common::network::IPv4AddressGenerator ipv4_generator_;\n  fptn::common::network::IPv6AddressGenerator ipv6_generator_;\n\n\n  std::unordered_map<IPv4INT, fptn::client::SessionSPtr>\n      ipv4_to_sessions_;  // ipv4\n  std::unordered_map<std::string, fptn::client::SessionSPtr>\n      ipv6_to_sessions_;  // ipv6\n  std::unordered_map<ClientID, fptn::client::SessionSPtr>\n      client_id_to_sessions_;\n};\n\ntypedef std::shared_ptr<Table> TableSPtr;\n\n}  // namespace fptn::nat\n"
  },
  {
    "path": "src/fptn-server/network/virtual_interface.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"network/virtual_interface.h\"\n\n#include <memory>\n#include <string>\n#include <utility>\n\nusing fptn::common::network::TunInterface;\nusing fptn::network::VirtualInterface;\n\nVirtualInterface::VirtualInterface(\n    fptn::common::network::TunInterface::Config config,\n    fptn::routing::RouteManagerPtr iptables)\n    : running_(false), iptables_(std::move(iptables)) {\n  // NOLINTNEXTLINE(modernize-avoid-bind)\n  auto callback = std::bind(\n      &VirtualInterface::IPPacketFromNetwork, this, std::placeholders::_1);\n  virtual_network_interface_ =\n      std::make_unique<TunInterface>(std::move(config));\n  virtual_network_interface_->SetRecvIPPacketCallback(callback);\n}\n\nVirtualInterface::~VirtualInterface() { Stop(); }\n\nbool VirtualInterface::Check() noexcept { return thread_.joinable(); }\n\nbool VirtualInterface::Start() noexcept {\n  running_ = true;\n  virtual_network_interface_->Start();\n  thread_ = std::thread(&VirtualInterface::Run, this);\n  return thread_.joinable();\n}\n\nbool VirtualInterface::Stop() noexcept {\n  running_ = false;\n  virtual_network_interface_->Stop();\n  if (thread_.joinable()) {\n    iptables_->Clean();\n    thread_.join();\n    return true;\n  }\n  return false;\n}\n\nvoid VirtualInterface::Send(\n    fptn::common::network::IPPacketPtr packet) noexcept {\n  try {\n    to_network_.Push(std::move(packet));\n  } catch (const std::bad_alloc& err) {\n    SPDLOG_ERROR(\n        \"Memory allocation failed while sending packet: {}\", err.what());\n  } catch (...) {\n    SPDLOG_ERROR(\"Unknown exception occurred while sending packet.\");\n  }\n}\n\nfptn::common::network::IPPacketPtr VirtualInterface::WaitForPacket(\n    const std::chrono::milliseconds& duration) noexcept {\n  return from_network_.WaitForPacket(duration);\n}\n\nvoid VirtualInterface::Run() noexcept {\n  const auto timeout = std::chrono::milliseconds(300);\n\n  iptables_->Apply();  // activate route\n  while (running_) {\n    auto packet = to_network_.WaitForPacket(timeout);\n    if (packet != nullptr) {\n      virtual_network_interface_->Send(std::move(packet));\n    }\n  }\n}\n\nvoid VirtualInterface::IPPacketFromNetwork(\n    fptn::common::network::IPPacketPtr packet) noexcept {\n  from_network_.Push(std::move(packet));\n}\n"
  },
  {
    "path": "src/fptn-server/network/virtual_interface.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <chrono>\n#include <memory>\n#include <string>\n#include <thread>\n\n#include \"common/data/channel.h\"\n#include \"common/network/ip_packet.h\"\n#include \"common/network/net_interface.h\"\n\n#include \"routing/iptables.h\"\n\nnamespace fptn::network {\n\nclass VirtualInterface final {\n public:\n  VirtualInterface(fptn::common::network::TunInterface::Config config,\n      fptn::routing::RouteManagerPtr iptables);\n  ~VirtualInterface();\n\n  bool Check() noexcept;\n  bool Start() noexcept;\n  bool Stop() noexcept;\n  void Send(fptn::common::network::IPPacketPtr packet) noexcept;\n  fptn::common::network::IPPacketPtr WaitForPacket(\n      const std::chrono::milliseconds& duration) noexcept;\n\n protected:\n  void Run() noexcept;\n  void IPPacketFromNetwork(fptn::common::network::IPPacketPtr packet) noexcept;\n\n private:\n  std::thread thread_;\n  std::atomic<bool> running_;\n\n  const fptn::routing::RouteManagerPtr iptables_;\n\n  fptn::common::data::Channel to_network_;\n  fptn::common::data::Channel from_network_;\n  fptn::common::network::TunInterfacePtr virtual_network_interface_;\n};\n\nusing VirtualInterfacePtr = std::unique_ptr<VirtualInterface>;\n}  // namespace fptn::network\n"
  },
  {
    "path": "src/fptn-server/routing/iptables.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"routing/iptables.h\"\n\n#ifdef __linux__\n#include <cerrno>\n#include <cstring>\n#include <sys/resource.h>  // NOLINT(build/include_order)\n#endif\n\n#include <string>\n#include <utility>\n#include <vector>\n\n#include <boost/process.hpp>\n#include <boost/process/v1/child.hpp>\n#include <boost/process/v1/io.hpp>\n#include <boost/process/v1/search_path.hpp>\n#include <fmt/format.h>     // NOLINT(build/include_order)\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\nusing fptn::routing::RouteManager;\n\nnamespace {\nbool RunCommand(const std::string& command) noexcept {\n  try {\n    boost::process::v1::child child(command,\n        boost::process::v1::std_out > stdout,\n        boost::process::v1::std_err > stderr);\n    child.wait();\n    if (child.exit_code() == 0) {\n      return true;\n    }\n  } catch (const std::exception& e) {\n    SPDLOG_WARN(\"IPTables warning: {}\", e.what());\n  } catch (...) {\n    SPDLOG_WARN(\"Undefined warning\");\n  }\n  return false;\n}\n\n#ifdef __linux__\nbool SetMaxFileDescriptors() {\n  struct rlimit current_limits = {};\n  if (getrlimit(RLIMIT_NOFILE, &current_limits) != 0) {\n    SPDLOG_WARN(\n        \"Failed to get current file descriptor limits: {}\", strerror(errno));\n    return false;\n  }\n\n  SPDLOG_INFO(\"Current file descriptor limits: soft={}, hard={}\",\n      current_limits.rlim_cur, current_limits.rlim_max);\n\n  struct rlimit new_limits = {};\n  new_limits.rlim_cur = current_limits.rlim_max;\n  new_limits.rlim_max = current_limits.rlim_max;\n\n  // Try to set the new limits\n  if (setrlimit(RLIMIT_NOFILE, &new_limits) != 0) {\n    SPDLOG_WARN(\"Failed to set file descriptor limits: {}\", strerror(errno));\n    return false;\n  }\n\n  // Verify the changes were applied\n  struct rlimit verified_limits;\n  if (getrlimit(RLIMIT_NOFILE, &verified_limits) != 0) {\n    SPDLOG_WARN(\n        \"Failed to verify new file descriptor limits: {}\", strerror(errno));\n    return false;\n  }\n\n  SPDLOG_INFO(\"New file descriptor limits: soft={}, hard={}\",\n      verified_limits.rlim_cur, verified_limits.rlim_max);\n  return true;\n}\n#endif\n\n}  // namespace\n\nRouteManager::RouteManager(\n    std::string out_net_interface_name, std::string tun_net_interface_name)\n    : out_net_interface_name_(std::move(out_net_interface_name)),\n      tun_net_interface_name_(std::move(tun_net_interface_name)),\n      running_(false) {}\n\nRouteManager::~RouteManager() {\n  try {\n    Clean();\n  } catch (const std::exception& ex) {\n    SPDLOG_ERROR(\"Exception in IPTables destructor: {}\", ex.what());\n  } catch (...) {\n    SPDLOG_ERROR(\"Unknown error in IPTables destructor\");\n  }\n}\n\nbool RouteManager::Apply() {  // NOLINT(bugprone-exception-escape)\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n#ifdef __linux__\n  SetMaxFileDescriptors();\n#endif\n\n  running_ = true;\n#ifdef __linux__\n  const std::vector<std::string> commands = {\"systemctl start sysctl\",\n      \"sysctl -w net.ipv4.ip_forward=1\",\n      \"sysctl -w net.ipv4.conf.all.rp_filter=0\",\n      \"sysctl -w net.ipv4.conf.default.rp_filter=0\",\n      \"sysctl -w net.ipv6.conf.default.disable_ipv6=0\",\n      \"sysctl -w net.ipv6.conf.all.disable_ipv6=0\",\n      \"sysctl -w net.ipv6.conf.lo.disable_ipv6=0\",\n      \"sysctl -w net.ipv6.conf.all.forwarding=1\", \"sysctl -p\",\n      /* IPv4 */\n      \"iptables -P INPUT ACCEPT\", \"iptables -P FORWARD ACCEPT\",\n      \"iptables -P OUTPUT ACCEPT\",\n      fmt::format(\"iptables -A FORWARD -i {} -o {} -j ACCEPT\",\n          tun_net_interface_name_, out_net_interface_name_),\n      fmt::format(\"iptables -A FORWARD -i {} -o {} -j ACCEPT\",\n          out_net_interface_name_, tun_net_interface_name_),\n      fmt::format(\"iptables -t nat -A POSTROUTING -o {} -j MASQUERADE\",\n          out_net_interface_name_),\n      /* IPv6 */\n      \"ip6tables -P INPUT ACCEPT\", \"ip6tables -P FORWARD ACCEPT\",\n      \"ip6tables -P OUTPUT ACCEPT\",\n      fmt::format(\"ip6tables -A FORWARD -i {} -o {} -j ACCEPT\",\n          tun_net_interface_name_, out_net_interface_name_),\n      fmt::format(\"ip6tables -A FORWARD -i {} -o {} -j ACCEPT\",\n          out_net_interface_name_, tun_net_interface_name_),\n      fmt::format(\"ip6tables -t nat -A POSTROUTING -o {} -j MASQUERADE\",\n          out_net_interface_name_)};\n#elif __APPLE__\n  // NEED CHECK\n  const std::vector<std::string> commands = {\n      fmt::format(\"echo 'set skip on lo0' > /tmp/pf.conf\"),\n      fmt::format(\"echo 'block in all' >> /tmp/pf.conf\"),\n      fmt::format(\"echo 'pass out all' >> /tmp/pf.conf\"),\n      fmt::format(\"echo 'block in on {} from any to any' >> /tmp/pf.conf\",\n          out_net_interface_name_),\n      \"pfctl -ef /tmp/pf.conf\",\n  };\n#else\n#error \"Unsupported system!\"\n#endif\n  SPDLOG_INFO(\"=== Setting up routing ===\");\n  try {\n    for (const auto& cmd : commands) {\n      if (!RunCommand(cmd)) {\n        SPDLOG_ERROR(\"COMMAND ERROR: {}\", cmd);\n      }\n    }\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"Exception occurred while applying routing: {}\", e.what());\n    return false;\n  } catch (...) {\n    SPDLOG_ERROR(\"Unknown exception occurred while applying routing.\");\n    return false;\n  }\n  SPDLOG_INFO(\"=== Routing setup completed successfully ===\");\n  return true;\n}\n\n// NOLINT(bugprone-exception-escape)\nbool RouteManager::Clean() {\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  if (!running_) {\n    return true;\n  }\n#ifdef __linux__\n  const std::vector<std::string> commands = {\n      fmt::format(\"iptables -D FORWARD -i {} -o {} -j ACCEPT\",\n          tun_net_interface_name_, out_net_interface_name_),\n      fmt::format(\"iptables -D FORWARD -i {} -o {} -j ACCEPT\",\n          out_net_interface_name_, tun_net_interface_name_),\n      fmt::format(\"iptables -t nat -D POSTROUTING -o {} -j MASQUERADE\",\n          out_net_interface_name_)};\n#elif __APPLE__\n  const std::vector<std::string> commands = {\n      \"echo 'set skip on lo0' > /tmp/pf.conf\",\n      \"echo 'block in all' >> /tmp/pf.conf\",\n      \"echo 'pass out all' >> /tmp/pf.conf\",\n      fmt::format(\"echo 'pass in on {} from any to any' >> /tmp/pf.conf\",\n          out_net_interface_name_),\n      fmt::format(\"echo 'pass in on {} from {} to any' >> /tmp/pf.conf\",\n          tun_net_interface_name_, tun_net_interface_name_),\n      \"pfctl -f /tmp/pf.conf\", \"pfctl -e\"};\n#else\n#error \"Unsupported system!\"\n#endif\n  try {\n    for (const auto& cmd : commands) {\n      RunCommand(cmd);\n    }\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"IPTables error: {}\", e.what());\n  } catch (...) {\n    SPDLOG_ERROR(\"Undefined error\");\n  }\n  running_ = false;\n  return true;\n}\n"
  },
  {
    "path": "src/fptn-server/routing/iptables.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <memory>\n#include <mutex>\n#include <string>\n\nnamespace fptn::routing {\nclass RouteManager final {\n public:\n  RouteManager(\n      std::string out_net_interface_name, std::string tun_net_interface_name);\n  ~RouteManager();\n  bool Apply();\n  bool Clean();\n\n private:\n  mutable std::mutex mutex_;\n\n  const std::string out_net_interface_name_;\n  const std::string tun_net_interface_name_;\n\n  bool running_;\n};\n\nusing RouteManagerPtr = std::unique_ptr<RouteManager>;\n}  // namespace fptn::routing\n"
  },
  {
    "path": "src/fptn-server/statistic/metrics.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"statistic/metrics.h\"\n\n#include <memory>\n#include <sstream>\n#include <string>\n\n#include <prometheus/text_serializer.h>  // NOLINT(build/include_order)\n\nusing fptn::statistic::Metrics;\n\nMetrics::Metrics() : registry_(std::make_shared<prometheus::Registry>()) {\n  active_sessions_ = &prometheus::BuildGauge()\n                          .Name(\"fptn_active_sessions\")\n                          .Help(\"Number of active VPN sessions\")\n                          .Register(*registry_)\n                          .Add({});\n  incoming_bytes_counter_ =\n      &prometheus::BuildCounter()\n           .Name(\"fptn_user_incoming_traffic_bytes\")\n           .Help(\"Incoming traffic for each user session in bytes\")\n           .Register(*registry_);\n  outgoing_bytes_counter_ =\n      &prometheus::BuildCounter()\n           .Name(\"fptn_user_outgoing_traffic_bytes\")\n           .Help(\"Outgoing traffic for each user session in bytes\")\n           .Register(*registry_);\n}\n\nvoid Metrics::UpdateStatistics(fptn::ClientID session_id,\n    const std::string& username,\n    std::size_t incoming_bytes,\n    std::size_t outgoing_bytes) noexcept {\n  const std::scoped_lock lock(mutex_);  // mutex\n\n  auto& incoming_metric = incoming_bytes_counter_->Add(\n      {{\"username\", username}, {\"session_id\", std::to_string(session_id)}});\n  auto& outgoing_metric = outgoing_bytes_counter_->Add(\n      {{\"username\", username}, {\"session_id\", std::to_string(session_id)}});\n  incoming_metric.Increment(\n      static_cast<double>(incoming_bytes) - incoming_metric.Value());\n  outgoing_metric.Increment(\n      static_cast<double>(outgoing_bytes) - outgoing_metric.Value());\n}\n\nvoid Metrics::UpdateActiveSessions(std::size_t count) noexcept {\n  const std::scoped_lock lock(mutex_);  // mutex\n\n  active_sessions_->Set(static_cast<double>(count));\n}\n\nstd::string Metrics::Collect() noexcept {\n  const std::scoped_lock lock(mutex_);  // mutex\n\n  try {\n    std::ostringstream result;\n    prometheus::TextSerializer serializer;\n    serializer.Serialize(result, registry_->Collect());\n    return result.str();\n  } catch (const std::exception& e) {\n    return \"Error collecting metrics: \" + std::string(e.what());\n  }\n}\n"
  },
  {
    "path": "src/fptn-server/statistic/metrics.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <memory>\n#include <mutex>\n#include <string>\n\n#include <prometheus/counter.h>   // NOLINT(build/include_order)\n#include <prometheus/exposer.h>   // NOLINT(build/include_order)\n#include <prometheus/gauge.h>     // NOLINT(build/include_order)\n#include <prometheus/registry.h>  // NOLINT(build/include_order)\n\n#include \"common/client_id.h\"\n\nnamespace fptn::statistic {\nclass Metrics {\n public:\n  Metrics();\n  void UpdateStatistics(fptn::ClientID session_id,\n      const std::string& username,\n      std::size_t incoming_bytes,\n      std::size_t outgoing_bytes) noexcept;\n  void UpdateActiveSessions(std::size_t count) noexcept;\n  std::string Collect() noexcept;\n\n public:\n  Metrics(const Metrics&) = delete;\n  Metrics& operator=(const Metrics&) = delete;\n\n private:\n  mutable std::mutex mutex_;\n\n  std::unique_ptr<prometheus::Exposer> exposer_;\n  std::shared_ptr<prometheus::Registry> registry_;\n\n  prometheus::Gauge* active_sessions_;\n\n  prometheus::Family<prometheus::Counter>* incoming_bytes_counter_;\n  prometheus::Family<prometheus::Counter>* outgoing_bytes_counter_;\n};\n\nusing MetricsSPtr = std::shared_ptr<Metrics>;\n\n}  // namespace fptn::statistic\n"
  },
  {
    "path": "src/fptn-server/traffic_shaper/leaky_bucket.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"traffic_shaper/leaky_bucket.h\"\n\nusing fptn::traffic_shaper::LeakyBucket;\n\nLeakyBucket::LeakyBucket(std::size_t max_bites_per_second)\n    : current_amount_(0),\n      max_bytes_per_second_(max_bites_per_second / 8),\n      last_leak_time_(std::chrono::steady_clock::now()),\n      full_data_amount_(0) {}\n\nstd::size_t LeakyBucket::FullDataAmount() const noexcept {\n  return full_data_amount_;\n}\n\nbool LeakyBucket::CheckSpeedLimit(std::size_t packet_size) noexcept {\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  const auto now = std::chrono::steady_clock::now();\n  const auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(\n      now - last_leak_time_).count();\n  if (elapsed < 1000) {\n    if (current_amount_ + packet_size < max_bytes_per_second_) {\n      current_amount_ += packet_size;\n      full_data_amount_ += packet_size;\n      return true;\n    }\n    return false;\n  }\n  last_leak_time_ = now;\n  current_amount_ = packet_size;\n  return true;\n}\n"
  },
  {
    "path": "src/fptn-server/traffic_shaper/leaky_bucket.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <chrono>\n#include <memory>\n#include <mutex>\n\n#include \"common/network/ip_packet.h\"\n\nnamespace fptn::traffic_shaper {\nclass LeakyBucket final {\n public:\n  explicit LeakyBucket(std::size_t max_bites_per_second);\n  bool CheckSpeedLimit(std::size_t packet_size) noexcept;\n  std::size_t FullDataAmount() const noexcept;\n\n private:\n  mutable std::mutex mutex_;\n  std::size_t current_amount_;\n  std::size_t max_bytes_per_second_;\n  std::chrono::steady_clock::time_point last_leak_time_;\n\n  std::size_t full_data_amount_;\n};\n\nusing LeakyBucketSPtr = std::shared_ptr<LeakyBucket>;\n}  // namespace fptn::traffic_shaper\n"
  },
  {
    "path": "src/fptn-server/user/user_manager.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"user/user_manager.h\"\n\n#include <memory>\n#include <string>\n#include <utility>\n\n#include <fmt/format.h>     // NOLINT(build/include_order)\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\nusing fptn::user::UserManager;\n\nUserManager::UserManager(const std::string& userfile,\n    bool use_remote_server,\n    std::string remote_server_ip,\n    int remote_server_port)\n    : use_remote_server_(use_remote_server),\n      remote_server_ip_(std::move(remote_server_ip)),\n      remote_server_port_(remote_server_port) {\n  if (use_remote_server_) {\n    // remote user list\n    http_api_client_ =\n        std::make_unique<fptn::protocol::https::ApiClient>(remote_server_ip_,\n            remote_server_port, protocol::https::CensorshipStrategy::kSni);\n  } else {\n    // local user list\n    common_manager_ =\n        std::make_unique<fptn::common::user::CommonUserManager>(userfile);\n  }\n}\n\nbool UserManager::Login(const std::string& username,\n    const std::string& password,\n    int& bandwidth_bit) const {\n  bandwidth_bit = 0;  // reset\n  if (use_remote_server_) {\n    SPDLOG_INFO(\n        \"Login request to {}:{}\", remote_server_ip_, remote_server_port_);\n\n    const std::string request = fmt::format(\n        R\"({{ \"username\": \"{}\", \"password\": \"{}\" }})\", username, password);\n    const auto resp =\n        http_api_client_->Post(\"/api/v1/login\", request, \"application/json\");\n\n    if (resp.code == 200) {\n      try {\n        const auto msg = resp.Json();\n        if (msg.contains(\"access_token\") && msg.contains(\"bandwidth_bit\")) {\n          bandwidth_bit = msg[\"bandwidth_bit\"].get<int>();\n          return true;\n        }\n        SPDLOG_INFO(\n            \"User manager error: Access token not found in the response. \"\n            \"Check your connection\");\n      } catch (const nlohmann::json::parse_error& e) {\n        SPDLOG_INFO(\"User manager: Error parsing JSON response: {}\\n{}\",\n            e.what(), resp.body);\n      }\n    } else {\n      SPDLOG_INFO(\n          \"User manager: request failed or response is null. Code: {} Msg: {}\",\n          resp.code, resp.errmsg);\n    }\n  } else if (common_manager_->Authenticate(username, password)) {\n    bandwidth_bit = common_manager_->GetUserBandwidthBit(username);\n    return true;\n  }\n  return false;\n}\n"
  },
  {
    "path": "src/fptn-server/user/user_manager.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <memory>\n#include <string>\n\n#include \"common/user/common_user_manager.h\"\n\n#include \"fptn-protocol-lib/https/api_client/api_client.h\"\n\nnamespace fptn::user {\n\n/**\n * @class Manager\n * @brief Handles user authentication and bandwidth retrieval for both local and\n * remote servers.\n */\nclass UserManager {\n public:\n  /**\n   * @brief Constructs a Manager object.\n   *\n   * @param userfile Path to the local user file for authentication.\n   * @param use_remote_server Flag indicating whether to use remote server\n   * authentication.\n   * @param remote_server_ip IP address of the remote authentication server.\n   * @param remote_server_port Port number of the remote authentication server.\n   */\n  explicit UserManager(const std::string& userfile,\n      bool use_remote_server,\n      std::string remote_server_ip,\n      int remote_server_port);\n\n  /**\n   * @brief Authenticates the user and retrieves the bandwidth limit.\n   *\n   * If the remote server is enabled, the credentials will be checked against\n   * the remote server. Otherwise, local authentication will be used.\n   *\n   * @param username The username of the user.\n   * @param password The password of the user.\n   * @param bandwidth_bit The bandwidth limit in bits for the user. Set upon\n   * successful login.\n   *\n   * @return `true` if the login is successful, `false` otherwise.\n   */\n  bool Login(const std::string& username,\n      const std::string& password,\n      int& bandwidth_bit) const;\n\n private:\n  /// Indicates whether to use remote server authentication.\n  const bool use_remote_server_;\n\n  /// IP address of the remote authentication server.\n  const std::string remote_server_ip_;\n\n  /// Port number of the remote authentication server.\n  const int remote_server_port_;\n\n  /// HTTP client for sending requests to the remote authentication server.\n  fptn::protocol::https::HttpsClientPtr http_api_client_;\n\n  /// Local user manager for handling authentication using a local user file.\n  fptn::common::user::CommonUserManagerPtr common_manager_;\n};\n\nusing UserManagerSPtr = std::shared_ptr<UserManager>;\n}  // namespace fptn::user\n"
  },
  {
    "path": "src/fptn-server/vpn/manager.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"vpn/manager.h\"\n\n#include <utility>\n\nusing fptn::vpn::Manager;\n\nManager::Manager(fptn::web::ServerPtr web_server,\n    fptn::network::VirtualInterfacePtr network_interface,\n    fptn::nat::TableSPtr nat,\n    fptn::filter::ManagerSPtr filter,\n    fptn::statistic::MetricsSPtr prometheus,\n    std::size_t thread_pool_size)\n    : web_server_(std::move(web_server)),\n      network_interface_(std::move(network_interface)),\n      nat_(std::move(nat)),\n      filter_(std::move(filter)),\n      prometheus_(std::move(prometheus)),\n      thread_pool_size_(thread_pool_size > 0 ? thread_pool_size : 1) {\n  read_to_client_threads_.reserve(thread_pool_size_);\n  read_from_client_threads_.reserve(thread_pool_size_);\n}\n\nManager::~Manager() { Stop(); }\n\nbool Manager::Stop() {\n  running_ = false;\n\n  network_interface_->Stop();\n  web_server_->Stop();\n\n  for (auto& thread : read_to_client_threads_) {\n    if (thread.joinable()) {\n      thread.join();\n    }\n  }\n  read_to_client_threads_.clear();\n\n  for (auto& thread : read_from_client_threads_) {\n    if (thread.joinable()) {\n      thread.join();\n    }\n  }\n  read_from_client_threads_.clear();\n\n  if (collect_statistics_.joinable()) {\n    collect_statistics_.join();\n  }\n  return true;\n}\n\nbool Manager::Start() {\n  running_ = true;\n  web_server_->Start();\n  network_interface_->Start();\n\n  for (size_t i = 0; i < thread_pool_size_; ++i) {\n    read_to_client_threads_.emplace_back(&Manager::RunToClient, this);\n  }\n\n  for (size_t i = 0; i < thread_pool_size_; ++i) {\n    read_from_client_threads_.emplace_back(&Manager::RunFromClient, this);\n  }\n\n  collect_statistics_ = std::thread(&Manager::RunCollectStatistics, this);\n  const bool collect_statistic_status = collect_statistics_.joinable();\n  return collect_statistic_status;\n}\n\nvoid Manager::RunToClient() const noexcept {\n  constexpr std::chrono::milliseconds kTimeout{100};\n\n  while (running_) {\n    auto packet = network_interface_->WaitForPacket(kTimeout);\n    if (!packet || !running_) {\n      continue;\n    }\n    if (!packet->IsIPv4() && !packet->IsIPv6()) {\n      continue;\n    }\n    // get session using \"fake\" client address\n    fptn::client::SessionSPtr session = nullptr;\n    if (packet->IsIPv4()) {\n      session = nat_->GetSessionByFakeIPv4(fptn::common::network::IPv4Address(\n          packet->IPv4Layer()->getDstIPv4Address()));\n    } else if (packet->IsIPv6()) {\n      session = nat_->GetSessionByFakeIPv6(fptn::common::network::IPv6Address(\n          packet->IPv6Layer()->getDstIPv6Address()));\n    }\n    if (!session || !running_) {\n      continue;\n    }\n    // check shaper\n    auto& shaper = session->TrafficShaperToClient();\n    if (shaper && !shaper->CheckSpeedLimit(packet->Size())) {\n      continue;\n    }\n    // send\n    if (running_) {\n      web_server_->Send(session->ChangeIPAddressToClientIP(std::move(packet)));\n    }\n  }\n}\n\nvoid Manager::RunFromClient() const noexcept {\n  constexpr std::chrono::milliseconds kTimeout{100};\n\n  while (running_) {\n    auto packet = web_server_->WaitForPacket(kTimeout);\n    if (!packet || !running_) {\n      continue;\n    }\n    if (!packet->IsIPv4() && !packet->IsIPv6()) {\n      continue;\n    }\n    // get session\n    const auto session = nat_->GetSessionByClientId(packet->ClientId());\n    if (!session || !running_) {\n      continue;\n    }\n    // check shaper\n    auto shaper = session->TrafficShaperFromClient();\n    if (shaper && !shaper->CheckSpeedLimit(packet->Size())) {\n      continue;\n    }\n    // filter\n    packet = filter_->Apply(std::move(packet));\n    if (!packet || !running_) {\n      continue;\n    }\n    // send\n    if (running_) {\n      network_interface_->Send(\n          session->ChangeIPAddressToFakeIP(std::move(packet)));\n    }\n  }\n}\n\nvoid Manager::RunCollectStatistics() noexcept {\n  const std::chrono::milliseconds timeout{300};\n  const std::chrono::seconds collect_interval{2};\n\n  std::chrono::steady_clock::time_point last_collection_time;\n  while (running_) {\n    auto now = std::chrono::steady_clock::now();\n    if (now - last_collection_time > collect_interval) {\n      nat_->UpdateStatistic(prometheus_);\n      last_collection_time = now;\n    }\n    std::this_thread::sleep_for(timeout);\n  }\n}\n"
  },
  {
    "path": "src/fptn-server/vpn/manager.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <atomic>\n#include <memory>\n#include <thread>\n#include <vector>\n\n#include \"filter/manager.h\"\n#include \"nat/table.h\"\n#include \"network/virtual_interface.h\"\n#include \"web/server.h\"\n\nnamespace fptn::vpn {\nclass Manager final {\n public:\n  Manager(fptn::web::ServerPtr web_server,\n      fptn::network::VirtualInterfacePtr network_interface,\n      fptn::nat::TableSPtr nat,\n      fptn::filter::ManagerSPtr filter,\n      fptn::statistic::MetricsSPtr prometheus,\n      std::size_t thread_pool_size = 4);\n  ~Manager();\n  bool Stop();\n  bool Start();\n\n protected:\n  void RunToClient() const noexcept;\n  void RunFromClient() const noexcept;\n  void RunCollectStatistics() noexcept;\n\n private:\n  std::atomic<bool> running_ = false;\n\n  const fptn::web::ServerPtr web_server_;\n  const fptn::network::VirtualInterfacePtr network_interface_;\n  const fptn::nat::TableSPtr nat_;\n  const fptn::filter::ManagerSPtr filter_;\n  const fptn::statistic::MetricsSPtr prometheus_;\n  const std::size_t thread_pool_size_;\n\n  std::vector<std::thread> read_to_client_threads_;\n  std::vector<std::thread> read_from_client_threads_;\n  std::thread collect_statistics_;\n};\n\nusing UserManagerSPtr = std::shared_ptr<fptn::user::UserManager>;\n}  // namespace fptn::vpn\n"
  },
  {
    "path": "src/fptn-server/web/api/handle.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <memory>\n#include <string>\n#include <unordered_map>\n\n#include <boost/asio.hpp>\n#include <boost/asio/ssl.hpp>\n#include <boost/beast.hpp>\n#include <boost/beast/ssl.hpp>\n\n#include \"common/client_id.h\"\n#include \"common/network/ip_address.h\"\n#include \"common/network/ip_packet.h\"\n\nnamespace fptn::web {\nnamespace http {\nusing request = boost::beast::http::request<boost::beast::http::string_body>;\nusing response = boost::beast::http::response<boost::beast::http::string_body>;\n}  // namespace http\n\nusing ApiHandle = std::function<int(const http::request&, http::response&)>;\n\nusing ApiHandleMap = std::unordered_map<std::string, ApiHandle>;\n\ninline std::string GetApiKey(\n    const std::string& url, const std::string& method) {\n  return method + \" \" + url;\n}\n\ninline void AddApiHandle(ApiHandleMap& m,\n    const std::string& url,\n    const std::string& method,\n    const ApiHandle& handle) noexcept {\n  const std::string key = GetApiKey(url, method);\n  m[key] = handle;\n}\n\ninline ApiHandle GetApiHandle(const ApiHandleMap& m,\n    const std::string& url,\n    const std::string& method) noexcept {\n  const std::string key = GetApiKey(url, method);\n  const auto& it = m.find(key);\n  if (it != m.end()) {\n    return it->second;\n  }\n  return nullptr;\n}\n\nclass Session;\n\nusing WebSocketOpenConnectionCallback = std::function<bool(\n    fptn::ClientID client_id,\n    const fptn::common::network::IPv4Address& client_ip,\n    const fptn::common::network::IPv4Address& client_vpn_ipv4,\n    const fptn::common::network::IPv6Address& client_vpn_ipv6,\n    const std::shared_ptr<Session>& session,\n    const std::string& url,\n    const std::string& access_token)>;\n\nusing WebSocketNewIPPacketCallback = std::function<void(\n  fptn::common::network::IPPacketPtr packet)>;\n\nusing WebSocketCloseConnectionCallback = std::function<void(\n  fptn::ClientID client_id)>;\n}  // namespace fptn::web\n"
  },
  {
    "path": "src/fptn-server/web/handshake/handshake_cache_manager.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"web/handshake/handshake_cache_manager.h\"\n\n#include <iostream>\n#include <memory>\n#include <string>\n#include <utility>\n#include <vector>\n\n#include <boost/asio.hpp>\n#include <boost/asio/ip/tcp.hpp>\n#include <boost/beast.hpp>\n#include <pcapplusplus/SSLHandshake.h>  // NOLINT(build/include_order)\n#include <pcapplusplus/SSLLayer.h>      // NOLINT(build/include_order)\n#include <spdlog/spdlog.h>              // NOLINT(build/include_order)\n\n#include \"common/network/resolv.h\"\n#include \"common/network/utils.h\"\n\nnamespace fptn::web {\n\nHandshakeCacheManager::HandshakeCacheManager(boost::asio::io_context& ioc,\n    std::string default_domain,\n    std::chrono::seconds cache_ttl)\n    : ioc_(ioc),\n      cache_ttl_(cache_ttl),\n      default_domain_(std::move(default_domain)) {}  // NOLINT\n\nHandshakeResponse HandshakeCacheManager::CheckCache(\n    const std::string& cache_key) {\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  const auto it = cache_.find(cache_key);\n  if (it != cache_.end()) {\n    const auto& entry = it->second;\n    const auto now = std::chrono::steady_clock::now();\n    if (now - entry.timestamp < cache_ttl_) {\n      return it->second.data;\n    }\n    cache_.erase(it);\n  }\n  return nullptr;\n}\n\nboost::asio::awaitable<HandshakeResponse> HandshakeCacheManager::GetHandshake(\n    const std::string& sni,\n    const std::uint8_t* buffer_ptr,\n    std::size_t size,\n    const std::chrono::seconds& timeout) {\n  std::vector<std::uint8_t> client_handshake_data(\n      buffer_ptr, buffer_ptr + size);\n\n  const auto cached_response = CheckCache(sni);\n  if (cached_response) {\n    SPDLOG_INFO(\"Cache hit for SNI: {} (TLS fingerprint size: {})\", sni,\n        cached_response->size());\n    co_return cached_response;\n  }\n\n  HandshakeResponse response =\n      co_await FetchRealHandshake(sni, client_handshake_data, timeout);\n  if (!response) {\n    SPDLOG_WARN(\n        \"Failed to fetch handshake from original SNI: {}, trying default \"\n        \"domain: {}\",\n        sni, default_domain_);\n\n    // RET\n    const auto default_cached_response = CheckCache(default_domain_);\n    if (default_cached_response) {\n      SPDLOG_INFO(\"Returning cached handshake for SNI: {} (using cache)\",\n          default_domain_);\n      co_return default_cached_response;\n    }\n\n    // Get new\n    response = co_await FetchRealHandshake(\n        default_domain_, client_handshake_data, timeout);\n    if (response) {\n      const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n      cache_[default_domain_] = CacheEntry{\n          .data = response, .timestamp = std::chrono::steady_clock::now()};\n      SPDLOG_INFO(\"Successfully fetched handshake from default domain: {}\",\n          default_domain_);\n    }\n  }\n\n  if (response) {\n    const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n    cache_[sni] = CacheEntry{\n        .data = response, .timestamp = std::chrono::steady_clock::now()};\n    SPDLOG_INFO(\n        \"Cached handshake response for SNI: {}, \"\n        \"size: {} bytes\",\n        sni, response->size());\n    co_return response;\n  }\n  SPDLOG_WARN(\"Failed to fetch handshake from real server for SNI: {}\", sni);\n  co_return HandshakeResponse();\n}\n\nboost::asio::awaitable<HandshakeResponse>\nHandshakeCacheManager::FetchRealHandshake(const std::string& sni,\n    const std::vector<std::uint8_t>& client_handshake_data,\n    const std::chrono::seconds& timeout) const {\n  boost::asio::ip::tcp::socket target_socket(ioc_);\n\n  constexpr std::size_t kMaxTotalSize = 65536;\n  auto full_response = std::make_shared<std::vector<std::uint8_t>>();\n  full_response->reserve(kMaxTotalSize);\n  try {\n    // DNS resolution\n    boost::asio::io_context resolve_ioc;\n    const auto resolve_result = fptn::common::network::ResolveWithTimeout(\n        resolve_ioc, sni, \"443\", timeout.count());\n\n    if (!resolve_result.success()) {\n      SPDLOG_WARN(\"DNS failed for {}: {}\", sni, resolve_result.error.message());\n      co_return nullptr;\n    }\n\n    // Connect to real server\n    co_await boost::asio::async_connect(\n        target_socket, resolve_result.results, boost::asio::use_awaitable);\n\n    // Send client handshake\n    co_await boost::asio::async_write(target_socket,\n        boost::asio::buffer(client_handshake_data), boost::asio::use_awaitable);\n\n    const auto server_response =\n        co_await common::network::WaitForServerTlsHelloAsync(\n            target_socket, timeout);\n    if (server_response.has_value()) {\n      *full_response = server_response.value();\n    }\n    SPDLOG_INFO(\"Received {} bytes from {}\", full_response->size(), sni);\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"Error fetching handshake from {}: {}\", sni, e.what());\n  }\n\n  boost::system::error_code close_ec;\n  target_socket.close(close_ec);\n\n  co_return full_response;\n}\n\n}  // namespace fptn::web\n"
  },
  {
    "path": "src/fptn-server/web/handshake/handshake_cache_manager.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <chrono>\n#include <memory>\n#include <mutex>\n#include <optional>\n#include <string>\n#include <unordered_map>\n#include <vector>\n\n#include <boost/asio.hpp>\n\nnamespace fptn::web {\n\nusing HandshakeResponse = std::shared_ptr<std::vector<std::uint8_t>>;\n\nclass HandshakeCacheManager final {\n public:\n  explicit HandshakeCacheManager(boost::asio::io_context& ioc,\n      std::string default_domain,\n      std::chrono::seconds cache_ttl = std::chrono::seconds(1200));\n\n  boost::asio::awaitable<HandshakeResponse> GetHandshake(const std::string& sni,\n      const std::uint8_t* buffer_ptr,\n      std::size_t size,\n      const std::chrono::seconds& timeout);\n\n protected:\n  boost::asio::awaitable<HandshakeResponse> FetchRealHandshake(\n      const std::string& sni,\n      const std::vector<std::uint8_t>& client_handshake_data,\n      const std::chrono::seconds& timeout) const;\n\n  HandshakeResponse CheckCache(const std::string& cache_key);\n\n private:\n  struct CacheEntry {\n    HandshakeResponse data;\n    std::chrono::steady_clock::time_point timestamp;\n  };\n\n  mutable std::mutex mutex_;\n\n  boost::asio::io_context& ioc_;\n  std::chrono::seconds cache_ttl_;\n\n  const std::string default_domain_;\n\n  std::unordered_map<std::string, CacheEntry> cache_;\n};\n\nusing HandshakeCacheManagerSPtr = std::shared_ptr<HandshakeCacheManager>;\n\n}  // namespace fptn::web\n"
  },
  {
    "path": "src/fptn-server/web/listener/listener.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"web/listener/listener.h\"\n\n#include <memory>\n#include <string>\n#include <utility>\n#include <vector>\n\n#include <boost/asio.hpp>\n#include <boost/asio/awaitable.hpp>\n#include <boost/asio/co_spawn.hpp>\n#include <boost/asio/detached.hpp>\n#include <boost/asio/ssl.hpp>\n#include <boost/beast.hpp>\n#include <boost/beast/core.hpp>\n#include <boost/beast/websocket.hpp>\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\nusing fptn::web::Listener;\n\nListener::Listener(std::uint16_t port,\n    bool enable_detect_probing,\n    std::string default_proxy_domain,\n    std::vector<std::string> allowed_sni_list,\n    boost::asio::io_context& ioc,\n    fptn::common::jwt_token::TokenManagerSPtr token_manager,\n    HandshakeCacheManagerSPtr handshake_cache_manager,\n    std::string server_external_ips,\n    WebSocketOpenConnectionCallback ws_open_callback,\n    WebSocketNewIPPacketCallback ws_new_ippacket_callback,\n    WebSocketCloseConnectionCallback ws_close_callback)\n    : port_(port),\n      enable_detect_probing_(enable_detect_probing),\n      default_proxy_domain_(std::move(default_proxy_domain)),\n      allowed_sni_list_(std::move(allowed_sni_list)),\n      ioc_(ioc),\n      ctx_(boost::asio::ssl::context::tlsv13_server),\n      acceptor_(ioc_),\n      token_manager_(std::move(token_manager)),\n      handshake_cache_manager_(std::move(handshake_cache_manager)),\n      server_external_ips_(std::move(server_external_ips)),\n      ws_open_callback_(std::move(ws_open_callback)),\n      ws_new_ippacket_callback_(std::move(ws_new_ippacket_callback)),\n      ws_close_callback_(std::move(ws_close_callback)),\n      endpoint_(\n          boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)),\n      running_(false) {\n  ctx_.set_options(boost::asio::ssl::context::default_workarounds |\n                   boost::asio::ssl::context::no_sslv2 |\n                   boost::asio::ssl::context::no_sslv3 |\n                   boost::asio::ssl::context::single_dh_use);\n  ctx_.use_certificate_chain_file(token_manager_->ServerCrtPath());\n  ctx_.use_private_key_file(\n      token_manager_->ServerKeyPath(), boost::asio::ssl::context::pem);\n  ctx_.set_verify_mode(boost::asio::ssl::verify_none);\n}\n\nvoid Listener::AddApiHandle(const std::string& url,\n    const std::string& method,\n    const ApiHandle& handle) {\n  fptn::web::AddApiHandle(api_handles_, url, method, handle);\n}\n\nboost::asio::awaitable<void> Listener::Run() {\n  constexpr int kBufferSize = 4 * 1024 * 1024;\n  try {\n    acceptor_.open(endpoint_.protocol());\n    acceptor_.set_option(boost::asio::ip::tcp::no_delay(true));\n    acceptor_.set_option(boost::asio::socket_base::reuse_address(true));\n\n    // Optimize socket buffers for high throughput (1 Gbit/s+)\n    // Set send/recv buffers to 4MB (typical for high-speed WAN)\n    acceptor_.set_option(\n        boost::asio::socket_base::receive_buffer_size(kBufferSize));\n    acceptor_.set_option(\n        boost::asio::socket_base::send_buffer_size(kBufferSize));\n\n    acceptor_.bind(endpoint_);\n    acceptor_.listen(boost::asio::socket_base::max_listen_connections);\n  } catch (boost::system::system_error& err) {\n    SPDLOG_ERROR(\"Listener::prepare error: {}\", err.what());\n    co_return;\n  }\n  running_ = true;\n\n  boost::system::error_code ec;\n  while (running_) {\n    try {\n      boost::asio::ip::tcp::socket socket(ioc_);\n      co_await acceptor_.async_accept(\n          socket, boost::asio::redirect_error(boost::asio::use_awaitable, ec));\n\n      if (!ec) {\n        // Propagate buffer settings to the accepted socket\n        socket.set_option(boost::asio::ip::tcp::no_delay(true));\n        socket.set_option(\n            boost::asio::socket_base::receive_buffer_size(kBufferSize));\n        socket.set_option(\n            boost::asio::socket_base::send_buffer_size(kBufferSize));\n\n        auto session = std::make_shared<Session>(port_,\n            // probing settings\n            enable_detect_probing_, default_proxy_domain_, allowed_sni_list_,\n            server_external_ips_, std::move(socket), ctx_,\n            // handlers\n            api_handles_, handshake_cache_manager_, ws_open_callback_,\n            ws_new_ippacket_callback_, ws_close_callback_);\n        // run coroutine\n        boost::asio::co_spawn(\n            ioc_,\n            [session]() mutable -> boost::asio::awaitable<void> {\n              co_await session->Run();\n            },\n            boost::asio::detached);\n      } else if (running_) {\n        SPDLOG_ERROR(\"Error onAccept: {}\", ec.message());\n        // Add delay after exception\n        boost::asio::steady_timer timer(ioc_);\n        timer.expires_after(std::chrono::milliseconds(300));\n        co_await timer.async_wait(boost::asio::use_awaitable);\n      }\n    } catch (boost::system::system_error& err) {\n      if (running_) {\n        SPDLOG_ERROR(\"Listener::run error: {}\", err.what());\n      }\n      co_return;\n    }\n  }\n  co_return;\n}\n\nbool Listener::Stop() {\n  try {\n    running_ = false;\n    acceptor_.close();\n  } catch (boost::system::system_error& err) {\n    SPDLOG_ERROR(\"Listener::stop error: {}\", err.what());\n    return false;\n  }\n  return true;\n}\n"
  },
  {
    "path": "src/fptn-server/web/listener/listener.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <memory>\n#include <string>\n#include <unordered_map>\n#include <vector>\n\n#include <boost/asio.hpp>\n#include <boost/asio/ssl.hpp>\n#include <boost/beast.hpp>\n#include <boost/beast/ssl.hpp>\n\n#include \"common/jwt_token/token_manager.h\"\n\n#include \"web/api/handle.h\"\n#include \"web/handshake/handshake_cache_manager.h\"\n#include \"web/session/session.h\"\n\nnamespace fptn::web {\n\nclass Listener final {\n public:\n  explicit Listener(std::uint16_t port,\n      bool enable_detect_probing,\n      std::string default_proxy_domain,\n      std::vector<std::string> allowed_sni_list,\n      boost::asio::io_context& ioc,\n      fptn::common::jwt_token::TokenManagerSPtr token_manager,\n      HandshakeCacheManagerSPtr handshake_cache_manager,\n      std::string server_external_ips,\n      WebSocketOpenConnectionCallback ws_open_callback,\n      WebSocketNewIPPacketCallback ws_new_ippacket_callback,\n      WebSocketCloseConnectionCallback ws_close_callback);\n\n  boost::asio::awaitable<void> Run();\n  bool Stop();\n  void AddApiHandle(const std::string& url,\n      const std::string& method,\n      const ApiHandle& handle);\n\n protected:\n  const std::uint16_t port_;\n  const bool enable_detect_probing_;\n  const std::string default_proxy_domain_;\n  const std::vector<std::string> allowed_sni_list_;\n\n  boost::asio::io_context& ioc_;\n  boost::asio::ssl::context ctx_;\n  boost::asio::ip::tcp::acceptor acceptor_;\n\n  const fptn::common::jwt_token::TokenManagerSPtr token_manager_;\n\n  HandshakeCacheManagerSPtr handshake_cache_manager_;\n\n  const std::string server_external_ips_;\n\n  const WebSocketOpenConnectionCallback ws_open_callback_;\n  const WebSocketNewIPPacketCallback ws_new_ippacket_callback_;\n  const WebSocketCloseConnectionCallback ws_close_callback_;\n\n  boost::asio::ip::tcp::endpoint endpoint_;\n  std::atomic<bool> running_;\n\n  ApiHandleMap api_handles_;\n};\n\nusing ListenerSPtr = std::shared_ptr<Listener>;\n}  // namespace fptn::web\n"
  },
  {
    "path": "src/fptn-server/web/server.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"web/server.h\"\n\n#include <algorithm>\n#include <functional>\n#include <memory>\n#include <string>\n#include <utility>\n#include <vector>\n\n#include <spdlog/spdlog.h>  // NOLINT(build/include_order)\n\n#include \"common/utils/utils.h\"\n\nusing fptn::web::Server;\n\nServer::Server(std::uint16_t port,\n    const fptn::nat::TableSPtr& nat_table,\n    const fptn::user::UserManagerSPtr& user_manager,\n    const fptn::common::jwt_token::TokenManagerSPtr& token_manager,\n    const fptn::statistic::MetricsSPtr& prometheus,\n    const std::string& prometheus_access_key,\n    fptn::common::network::IPv4Address dns_server_ipv4,\n    fptn::common::network::IPv6Address dns_server_ipv6,\n    bool enable_detect_probing,\n    std::string default_proxy_domain,\n    std::vector<std::string> allowed_sni_list,\n    std::size_t max_active_sessions_per_user,\n    std::string server_external_ips,\n    int thread_number)\n    : running_(false),\n      port_(port),\n      nat_table_(nat_table),\n      user_manager_(user_manager),\n      token_manager_(token_manager),\n      prometheus_(prometheus),\n      prometheus_access_key_(prometheus_access_key),\n      dns_server_ipv4_(std::move(dns_server_ipv4)),\n      dns_server_ipv6_(std::move(dns_server_ipv6)),\n      enable_detect_probing_(enable_detect_probing),\n      default_proxy_domain_(std::move(default_proxy_domain)),\n      allowed_sni_list_(std::move(allowed_sni_list)),\n      max_active_sessions_per_user_(max_active_sessions_per_user),\n      server_external_ips_(std::move(server_external_ips)),\n      thread_number_(std::max<std::size_t>(1, thread_number)),\n      ioc_(thread_number),\n      from_client_(std::make_unique<fptn::common::data::Channel>()),\n      to_client_(std::make_unique<fptn::common::data::ChannelAsync>(ioc_)) {\n  using std::placeholders::_1;\n  using std::placeholders::_2;\n  using std::placeholders::_3;\n  using std::placeholders::_4;\n  using std::placeholders::_5;\n  using std::placeholders::_6;\n  using std::placeholders::_7;\n\n  handshake_cache_manager_ =\n      std::make_shared<HandshakeCacheManager>(ioc_, default_proxy_domain_);\n\n  listener_ = std::make_shared<Listener>(port_,\n      // proxy settings\n      enable_detect_probing_, default_proxy_domain_, allowed_sni_list_,\n      // ioc\n      ioc_, token_manager, handshake_cache_manager_, server_external_ips_,\n      // NOLINTNEXTLINE(modernize-avoid-bind)\n      std::bind(\n          &Server::HandleWsOpenConnection, this, _1, _2, _3, _4, _5, _6, _7),\n      // NOLINTNEXTLINE(modernize-avoid-bind)\n      std::bind(&Server::HandleWsNewIPPacket, this, _1),\n      // NOLINTNEXTLINE(modernize-avoid-bind)\n      std::bind(&Server::HandleWsCloseConnection, this, _1));\n  listener_->AddApiHandle(\n      // NOLINTNEXTLINE(modernize-avoid-bind)\n      kUrlDns_, \"GET\", std::bind(&Server::HandleApiDns, this, _1, _2));\n  listener_->AddApiHandle(\n      // NOLINTNEXTLINE(modernize-avoid-bind)\n      kUrlLogin_, \"POST\", std::bind(&Server::HandleApiLogin, this, _1, _2));\n  listener_->AddApiHandle(kUrlTestFileBin_, \"GET\",\n      // NOLINTNEXTLINE(modernize-avoid-bind)\n      std::bind(&Server::HandleApiTestFile, this, _1, _2));\n  if (!prometheus_access_key.empty()) {\n    // Construct the URL for accessing Prometheus statistics by appending the\n    // access key\n    const std::string metrics = kUrlMetrics_ + '/' + prometheus_access_key;\n    listener_->AddApiHandle(\n        // NOLINTNEXTLINE(modernize-avoid-bind)\n        metrics, \"GET\", std::bind(&Server::HandleApiMetrics, this, _1, _2));\n  }\n}\n\nServer::~Server() { Stop(); }\n\nbool Server::Start() {\n  running_ = true;\n  try {\n    // run listener\n    boost::asio::co_spawn(\n        ioc_,\n        [this]() -> boost::asio::awaitable<void> { co_await listener_->Run(); },\n        boost::asio::detached);\n    // run senders\n    boost::asio::co_spawn(\n        ioc_,\n        [this]() -> boost::asio::awaitable<void> { co_await RunSender(); },\n        boost::asio::detached);\n    // run threads\n    ioc_threads_.reserve(thread_number_);\n    for (std::size_t i = 0; i < thread_number_; ++i) {\n      ioc_threads_.emplace_back([this]() { ioc_.run(); });\n    }\n  } catch (boost::system::system_error& err) {\n    SPDLOG_ERROR(\"Server::start error: {}\", err.what());\n    running_ = false;\n    return false;\n  }\n  return true;\n}\n\nboost::asio::awaitable<void> Server::RunSender() {\n  constexpr std::chrono::milliseconds kTimeout{10};\n\n  while (running_) {\n    auto optpacket = co_await to_client_->WaitForPacketAsync(kTimeout);\n    if (optpacket && running_) {\n      SessionSPtr session;\n\n      {\n        const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n        auto it = sessions_.find(optpacket->get()->ClientId());\n        if (it != sessions_.end()) {\n          session = it->second;\n        }\n      }\n      if (session) {\n        const bool status = co_await session->Send(std::move(*optpacket));\n        if (!status) {\n          session->Close();\n        }\n      }\n    }\n  }\n  co_return;\n}\n\nbool Server::Stop() {\n  if (running_) {\n    running_ = false;\n    SPDLOG_INFO(\"Server stop\");\n\n    listener_->Stop();\n\n    for (auto& session : sessions_) {\n      if (session.second) {\n        session.second->Close();\n      }\n    }\n    sessions_.clear();\n    if (!ioc_.stopped()) {\n      ioc_.stop();\n    }\n    for (auto& th : ioc_threads_) {\n      if (th.joinable()) {\n        th.join();\n      }\n    }\n    return true;\n  }\n  return false;\n}\n\nvoid Server::Send(fptn::common::network::IPPacketPtr packet) {\n  to_client_->Push(std::move(packet));\n}\n\nfptn::common::network::IPPacketPtr Server::WaitForPacket(\n    const std::chrono::milliseconds& duration) {\n  return from_client_->WaitForPacket(duration);\n}\n\n// NOLINTNEXTLINE(readability-convert-member-functions-to-static)\nint Server::HandleApiDns(const http::request& req, http::response& resp) {\n  (void)req;\n\n  resp.body() = fmt::format(R\"({{\"dns\": \"{}\", \"dns_ipv6\": \"{}\" }})\",\n      dns_server_ipv4_.ToString(), dns_server_ipv6_.ToString());\n  resp.set(boost::beast::http::field::content_type,\n      \"application/json; charset=utf-8\");\n  return 200;\n}\n\n// NOLINTNEXTLINE(readability-convert-member-functions-to-static)\nint Server::HandleApiLogin(const http::request& req, http::response& resp) {\n  try {\n    const auto request = nlohmann::json::parse(req.body());\n    const auto username = request.at(\"username\").get<std::string>();\n    const auto password = request.at(\"password\").get<std::string>();\n    int bandwidth_bit = 0;\n    if (user_manager_->Login(username, password, bandwidth_bit)) {\n      SPDLOG_INFO(\"Successful login for user {}\", username);\n      const auto tokens = token_manager_->Generate(username, bandwidth_bit);\n      resp.body() = fmt::format(\n          R\"({{ \"access_token\": \"{}\", \"refresh_token\": \"{}\", \"bandwidth_bit\": {} }})\",\n          tokens.first, tokens.second, std::to_string(bandwidth_bit));\n      return 200;\n    }\n    SPDLOG_WARN(\"Wrong password for user: \\\"{}\\\" \", username);\n    resp.body() =\n        R\"({\"status\": \"error\", \"message\": \"Invalid login or password.\"})\";\n  } catch (const nlohmann::json::exception& e) {\n    SPDLOG_ERROR(\"HTTP JSON AUTH ERROR: {}\", e.what());\n    resp.body() = R\"({\"status\": \"error\", \"message\": \"Invalid JSON format.\"})\";\n    return 400;\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"HTTP AUTH ERROR: {}\", e.what());\n    resp.body() =\n        R\"({\"status\": \"error\", \"message\": \"An unexpected error occurred.\"})\";\n    return 500;\n  } catch (...) {\n    SPDLOG_ERROR(\"UNDEFINED SERVER ERROR\");\n    resp.body() = R\"({\"status\": \"error\", \"message\": \"Undefined server error\"})\";\n    return 501;\n  }\n  return 401;\n}\n\n// NOLINTNEXTLINE(readability-convert-member-functions-to-static)\nint Server::HandleApiMetrics(const http::request& req, http::response& resp) {\n  (void)req;\n\n  resp.set(boost::beast::http::field::content_type, \"text/html; charset=utf-8\");\n  resp.body() = prometheus_->Collect();\n  return 200;\n}\n\n// NOLINTNEXTLINE(readability-convert-member-functions-to-static)\nint Server::HandleApiTestFile(const http::request& req, http::response& resp) {\n  (void)req;\n\n  static const std::string kData =\n      fptn::common::utils::GenerateRandomString(100 * 1024);  // 100KB\n\n  resp.set(boost::beast::http::field::content_type, \"application/octet-stream\");\n  resp.body() = kData;\n  return 200;\n}\n\nbool Server::HandleWsOpenConnection(fptn::ClientID client_id,\n    const fptn::common::network::IPv4Address& client_ip,\n    const fptn::common::network::IPv4Address& client_vpn_ipv4,\n    const fptn::common::network::IPv6Address& client_vpn_ipv6,\n    const SessionSPtr& session,\n    const std::string& url,\n    const std::string& access_token) {\n  if (!running_) {\n    SPDLOG_ERROR(\"Server is not running\");\n    return false;\n  }\n  if (url != kUrlWebSocket_) {\n    SPDLOG_ERROR(\"Wrong URL \\\"{}\\\"\", url);\n    return false;\n  }\n  if (!client_vpn_ipv4.IsEmpty() && !client_vpn_ipv6.IsEmpty()) {\n    std::string username;\n    std::size_t bandwidth_bites_seconds = 0;\n    if (token_manager_->Validate(\n            access_token, username, bandwidth_bites_seconds)) {\n      const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n      const auto active_sessions =\n          nat_table_->GetNumberActiveSessionByUsername(username);\n\n      if (active_sessions > max_active_sessions_per_user_) {\n        SPDLOG_WARN(\n            \"Session limit exceeded for user '{}': {} active (limit: {})\",\n            username, active_sessions, max_active_sessions_per_user_);\n        return false;\n      }\n\n      if (sessions_.contains(client_id)) {\n        SPDLOG_WARN(\"Client with same ID already exists!\");\n      } else {\n        const auto shaper_to_client =\n            std::make_shared<fptn::traffic_shaper::LeakyBucket>(\n                bandwidth_bites_seconds);\n        const auto shaper_from_client =\n            std::make_shared<fptn::traffic_shaper::LeakyBucket>(\n                bandwidth_bites_seconds);\n        const auto nat_session = nat_table_->CreateClientSession(client_id,\n            username, client_vpn_ipv4, client_vpn_ipv6, shaper_to_client,\n            shaper_from_client);\n        SPDLOG_INFO(\n            \"NEW SESSION! Username={} client_id={} Bandwidth={} ClientIP={} \"\n            \"VirtualIPv4={} VirtualIPv6={}\",\n            username, client_id, bandwidth_bites_seconds, client_ip.ToString(),\n            nat_session->FakeClientIPv4().ToString(),\n            nat_session->FakeClientIPv6().ToString());\n        if (running_) {\n          sessions_.insert({client_id, session});\n          return true;\n        }\n        return false;\n      }\n    } else {\n      SPDLOG_WARN(\"WRONG TOKEN: {}\", username);\n    }\n  } else {\n    SPDLOG_WARN(\"Wrong ClientIP or ClientIPv6\");\n  }\n  return false;\n}\n\nvoid Server::HandleWsNewIPPacket(\n    fptn::common::network::IPPacketPtr packet) noexcept {\n  from_client_->Push(std::move(packet));\n}\n\nvoid Server::HandleWsCloseConnection(fptn::ClientID client_id) noexcept {\n  SessionSPtr session;\n  if (running_) {\n    const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n    auto it = sessions_.find(client_id);\n    if (it != sessions_.end()) {\n      session = std::move(it->second);\n      sessions_.erase(it);\n    }\n  }\n  if (session != nullptr) {\n    session->Close();\n    SPDLOG_INFO(\"Session closed and removed (client_id={})\", client_id);\n  } else {\n    SPDLOG_WARN(\n        \"Attempted to close non-existent session (client_id={})\", client_id);\n  }\n  nat_table_->DelClientSession(client_id);\n}\n"
  },
  {
    "path": "src/fptn-server/web/server.h",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <memory>\n#include <mutex>\n#include <string>\n#include <unordered_map>\n#include <vector>\n\n#include <boost/asio.hpp>\n#include <boost/asio/ssl.hpp>\n#include <boost/beast.hpp>\n#include <boost/beast/ssl.hpp>\n\n#include \"common/data/channel.h\"\n#include \"common/data/channel_async.h\"\n#include \"common/jwt_token/token_manager.h\"\n#include \"common/network/ip_packet.h\"\n\n#include \"handshake/handshake_cache_manager.h\"\n#include \"listener/listener.h\"\n#include \"nat/table.h\"\n#include \"user/user_manager.h\"\n\nnamespace fptn::web {\nclass Server final {\n public:\n  Server(std::uint16_t port,\n      const fptn::nat::TableSPtr& nat_table,\n      const fptn::user::UserManagerSPtr& user_manager,\n      const fptn::common::jwt_token::TokenManagerSPtr& token_manager,\n      const fptn::statistic::MetricsSPtr& prometheus,\n      const std::string& prometheus_access_key,\n      fptn::common::network::IPv4Address dns_server_ipv4,\n      fptn::common::network::IPv6Address dns_server_ipv6,\n      bool enable_detect_probing,\n      std::string default_proxy_domain,\n      std::vector<std::string> allowed_sni_list,\n      std::size_t max_active_sessions_per_user,\n      std::string server_external_ips,\n      int thread_number = 8);\n  ~Server();\n  bool Start();\n  bool Stop();\n\n  void Send(fptn::common::network::IPPacketPtr packet);\n  fptn::common::network::IPPacketPtr WaitForPacket(\n      const std::chrono::milliseconds& duration);\n\n protected:\n  boost::asio::awaitable<void> RunSender();\n\n protected:\n  // http\n  int HandleApiDns(const http::request& req, http::response& resp);\n  int HandleApiLogin(const http::request& req, http::response& resp);\n  int HandleApiMetrics(const http::request& req, http::response& resp);\n  int HandleApiTestFile(const http::request& req, http::response& resp);\n\n protected:\n  // websocket\n  bool HandleWsOpenConnection(fptn::ClientID client_id,\n      const fptn::common::network::IPv4Address& client_ip,\n      const fptn::common::network::IPv4Address& client_vpn_ipv4,\n      const fptn::common::network::IPv6Address& client_vpn_ipv6,\n      const SessionSPtr& session,\n      const std::string& url,\n      const std::string& access_token);\n  void HandleWsNewIPPacket(fptn::common::network::IPPacketPtr packet) noexcept;\n  void HandleWsCloseConnection(fptn::ClientID client_id) noexcept;\n\n private:\n  const std::string kUrlDns_ = \"/api/v1/dns\";\n  const std::string kUrlLogin_ = \"/api/v1/login\";\n  const std::string kUrlMetrics_ = \"/api/v1/metrics\";\n  const std::string kUrlTestFileBin_ = \"/api/v1/test/file.bin\";\n  const std::string kUrlWebSocket_ = \"/fptn\";\n\n  mutable std::mutex mutex_;\n  std::atomic<bool> running_;\n\n  const std::uint16_t port_;\n  const fptn::nat::TableSPtr& nat_table_;\n  const fptn::user::UserManagerSPtr& user_manager_;\n  const fptn::common::jwt_token::TokenManagerSPtr token_manager_;\n  const fptn::statistic::MetricsSPtr& prometheus_;\n  const std::string prometheus_access_key_;\n  const fptn::common::network::IPv4Address dns_server_ipv4_;\n  const fptn::common::network::IPv6Address dns_server_ipv6_;\n  const bool enable_detect_probing_;\n  const std::string default_proxy_domain_;\n  const std::vector<std::string> allowed_sni_list_;\n\n  const std::size_t max_active_sessions_per_user_;\n  const std::string server_external_ips_;\n  const std::size_t thread_number_;\n\n  boost::asio::io_context ioc_;\n  fptn::common::data::ChannelPtr from_client_;\n  fptn::common::data::ChannelAsyncPtr to_client_;\n\n  ListenerSPtr listener_;\n\n  HandshakeCacheManagerSPtr handshake_cache_manager_;\n\n  std::vector<std::thread> ioc_threads_;\n  std::unordered_map<fptn::ClientID, SessionSPtr> sessions_;\n};\n\nusing ServerPtr = std::unique_ptr<Server>;\n}  // namespace fptn::web\n"
  },
  {
    "path": "src/fptn-server/web/session/session.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include \"web/session/session.h\"\n\n#include <atomic>\n#include <memory>\n#include <string>\n#include <tuple>\n#include <unordered_set>\n#include <utility>\n#include <vector>\n\n#include <boost/algorithm/string/replace.hpp>\n#include <boost/asio.hpp>\n#include <boost/asio/awaitable.hpp>\n#include <boost/asio/co_spawn.hpp>\n#include <boost/asio/detached.hpp>\n#include <boost/asio/ssl.hpp>\n#include <boost/beast.hpp>\n#include <boost/beast/core.hpp>\n#include <boost/beast/websocket.hpp>\n#include <pcapplusplus/SSLHandshake.h>  // NOLINT(build/include_order)\n#include <pcapplusplus/SSLLayer.h>      // NOLINT(build/include_order)\n#include <spdlog/spdlog.h>              // NOLINT(build/include_order)\n\n#include \"common/network/resolv.h\"\n#include \"common/network/utils.h\"\n\n#include \"fptn-protocol-lib/https/obfuscator/methods/detector.h\"\n#include \"fptn-protocol-lib/https/obfuscator/methods/tls/tls_obfuscator.h\"\n#include \"fptn-protocol-lib/https/obfuscator/methods/tls2/tls_obfuscator2.h\"\n#include \"fptn-protocol-lib/https/utils/tls/tls.h\"\n#include \"fptn-protocol-lib/protobuf/protocol.h\"\n#include \"fptn-protocol-lib/time/time_provider.h\"\n\nnamespace {\nstd::atomic<fptn::ClientID> client_id_counter = 0;\n\nstd::vector<std::string> GetServerIpAddresses(\n    const std::string& server_external_ips) {\n  static std::mutex ip_mutex;\n  static std::vector<std::string> server_ips;\n\n  const std::scoped_lock lock(ip_mutex);  // mutex\n\n  if (server_ips.empty()) {\n    server_ips = fptn::common::network::GetServerIpAddresses();\n\n    if (!server_external_ips.empty()) {\n      const auto external_ips =\n          fptn::common::utils::SplitCommaSeparated(server_external_ips);\n      std::ranges::copy_if(external_ips, std::back_inserter(server_ips),\n          [](const std::string& ip) {\n            return fptn::common::network::IsIpAddress(ip);\n          });\n    }\n  }\n  return server_ips;\n}\n\nvoid SetSocketTimeouts(boost::asio::ip::tcp::socket& socket, int timeout_sec) {\n  timeval tv = {};\n  tv.tv_sec = timeout_sec;\n  tv.tv_usec = 0;\n  const int socket_fd = socket.native_handle();\n  ::setsockopt(socket_fd, SOL_SOCKET, SO_RCVTIMEO,\n      reinterpret_cast<const char*>(&tv), sizeof(tv));\n  ::setsockopt(socket_fd, SOL_SOCKET, SO_SNDTIMEO,\n      reinterpret_cast<const char*>(&tv), sizeof(tv));\n}\n\n}  // namespace\n\nnamespace fptn::web {\n\nSession::Session(std::uint16_t port,\n    bool enable_detect_probing,\n    std::string default_proxy_domain,\n    std::vector<std::string> allowed_sni_list,\n    std::string server_external_ips,\n    boost::asio::ip::tcp::socket&& socket,\n    boost::asio::ssl::context& ctx,\n    const ApiHandleMap& api_handles,\n    HandshakeCacheManagerSPtr handshake_cache_manager,\n    WebSocketOpenConnectionCallback ws_open_callback,\n    WebSocketNewIPPacketCallback ws_new_ippacket_callback,\n    WebSocketCloseConnectionCallback ws_close_callback)\n    : port_(port),\n      enable_detect_probing_(enable_detect_probing),\n      default_proxy_domain_(std::move(default_proxy_domain)),\n      allowed_sni_list_(std::move(allowed_sni_list)),\n      server_external_ips_(std::move(server_external_ips)),\n      ws_(ssl_stream_type(\n          obfuscator_socket_type(tcp_stream_type(std::move(socket))), ctx)),\n      strand_(boost::asio::make_strand(ws_.get_executor())),\n      write_channel_(strand_, 8192),\n      api_handles_(api_handles),\n      handshake_cache_manager_(std::move(handshake_cache_manager)),\n      ws_open_callback_(std::move(ws_open_callback)),\n      ws_new_ippacket_callback_(std::move(ws_new_ippacket_callback)),\n      ws_close_callback_(std::move(ws_close_callback)),\n      running_(false),\n      init_completed_(false),\n      ws_session_was_opened_(false),\n      full_queue_(false) {\n  try {\n    client_id_ = ++client_id_counter;\n\n    boost::beast::get_lowest_layer(ws_).socket().set_option(\n        boost::asio::ip::tcp::no_delay(true));\n\n    ws_.text(false);\n    ws_.binary(true);\n    ws_.auto_fragment(false);\n    ws_.read_message_max(4 * 1024 * 1024);  // 4MB\n    ws_.set_option(boost::beast::websocket::stream_base::timeout::suggested(\n        boost::beast::role_type::server));\n    ws_.set_option(boost::beast::websocket::stream_base::timeout{\n        .handshake_timeout = std::chrono::seconds(60),\n        .idle_timeout = std::chrono::seconds(60),\n        .keep_alive_pings = true});\n\n    boost::beast::get_lowest_layer(ws_).expires_after(std::chrono::seconds(15));\n    init_completed_ = true;\n  } catch (const boost::system::system_error& err) {\n    SPDLOG_ERROR(\"Session::init failed (client_id={}): {} [{}]\", client_id_,\n        err.what(), err.code().message());\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"Session::init unexpected exception (client_id={}): {}\",\n        client_id_, e.what());\n  } catch (...) {\n    SPDLOG_ERROR(\n        \"Session::init unknown fatal error (client_id={})\", client_id_);\n  }\n}\n\nSession::~Session() { Close(); }\n\nboost::asio::awaitable<void> Session::Run() {\n  boost::system::error_code ec;\n\n  running_ = true;\n  if (!init_completed_) {\n    SPDLOG_ERROR(\"Session not initialized. Closing connection (client_id={})\",\n        client_id_);\n    Close();\n    co_return;\n  }\n\n  // Setup traffic obfuscator\n  auto obfuscator_opt = co_await DetectObfuscator();\n  if (!obfuscator_opt.has_value()) {\n    SPDLOG_ERROR(\"Failed to initialize traffic obfuscator\");\n    Close();\n    co_return;\n  }\n  ws_.next_layer().next_layer().set_obfuscator(obfuscator_opt.value());\n\n  // Detect probing (only for null obfuscator)\n  if (enable_detect_probing_ && obfuscator_opt.value() == nullptr) {\n    const auto probing_result = co_await DetectProbing();\n    if (probing_result.should_close) {\n      SPDLOG_WARN(\n          \"Connection rejected during probing (client_id={})\", client_id_);\n      Close();\n      co_return;\n    }\n    if (probing_result.is_probing) {\n      SPDLOG_WARN(\n          \"Probing detected. Redirecting to proxy (client_id={}, SNI={}, \"\n          \"port={})\",\n          client_id_, probing_result.sni, port_);\n      co_await HandleProxy(probing_result.sni, port_);\n      Close();\n      co_return;\n    }\n    SPDLOG_INFO(\"SESSION ID correct. Continue setup connection (client_id={})\",\n        client_id_);\n  }\n\n  // Check for Reality Mode handshake (only when no obfuscator is detected)\n  if (obfuscator_opt.value() == nullptr) {\n    const auto result = co_await IsRealityHandshake();\n    if (result.should_close) {\n      SPDLOG_WARN(\n          \"Reality Mode handshake check failed (client_id={})\", client_id_);\n      Close();\n      co_return;\n    }\n\n    // Process Reality Mode connection if detected\n    if (result.is_reality_mode || result.is_reality_mode2) {\n      if (result.is_reality_mode) {\n        SPDLOG_INFO(\"Processing Reality Mode connection sni={} (client_id={}) \",\n            result.sni, client_id_);\n      }\n      if (result.is_reality_mode2) {\n        SPDLOG_INFO(\n            \"Processing Reality Mode2 connection sni={} (client_id={}) \",\n            result.sni, client_id_);\n      }\n\n      // Prevent recursive proxy attempts for Reality Mode\n      const auto self_proxy = co_await IsSniSelfProxyAttempt(result.sni);\n      if (self_proxy) {\n        co_await HandleProxy(default_proxy_domain_, port_);\n        Close();\n        co_return;\n      }\n\n      bool reality_success = false;\n      if (result.is_reality_mode) {\n        // DEPRECATED\n        reality_success = co_await PerformFakeHandshake(result.sni);\n        // For Reality Mode we use TLS obfuscator after fake handshake\n        // This provides additional encryption layer for the real connection\n        ws_.next_layer().next_layer().set_obfuscator(\n            std::make_shared<protocol::https::obfuscator::TlsObfuscator>());\n      } else {\n        reality_success = co_await PerformFakeHandshake2(result.sni);\n        // For Reality Mode we use TLS obfuscator after fake handshake\n        // This provides additional encryption layer for the real connection\n        ws_.next_layer().next_layer().set_obfuscator(\n            std::make_shared<protocol::https::obfuscator::TlsObfuscator2>());\n      }\n\n      if (!reality_success) {\n        SPDLOG_WARN(\"Reality mode handshake failed (client_id={})\", client_id_);\n        Close();\n        co_return;\n      }\n    }\n  }\n  // SSL handshake\n  boost::beast::get_lowest_layer(ws_).expires_after(std::chrono::seconds(10));\n  co_await ws_.next_layer().async_handshake(\n      boost::asio::ssl::stream_base::server,\n      boost::asio::redirect_error(boost::asio::use_awaitable, ec));\n  if (ec) {\n    SPDLOG_WARN(\"TLS-Handshake error (client_id={})\", client_id_);\n    Close();\n    co_return;\n  }\n\n  // Reset obfuscator after TLS handshake\n  ws_.next_layer().next_layer().set_obfuscator(nullptr);\n\n  // Process request (HTTP or WebSocket)\n  const bool status = co_await ProcessRequest();\n  if (status) {\n    auto self = shared_from_this();\n    boost::asio::co_spawn(\n        strand_,\n        [self]() mutable -> boost::asio::awaitable<void> {\n          return self->RunReader();\n        },\n        boost::asio::detached);\n    boost::asio::co_spawn(\n        strand_,\n        [self]() mutable -> boost::asio::awaitable<void> {\n          return self->RunSender();\n        },\n        boost::asio::detached);\n  } else {\n    Close();\n  }\n  co_return;\n}\n\nboost::asio::awaitable<Session::ProbingResult> Session::DetectProbing() {\n  try {\n    auto& tcp_socket = boost::beast::get_lowest_layer(ws_).socket();\n    // Peek data without consuming it from the socket buffer!!!\n    // This allows inspection without affecting subsequent reads!!!\n    std::array<std::uint8_t, 16384> buffer;\n\n    // Set socket timeout for peek\n    boost::system::error_code ec;\n    const std::size_t bytes_read = co_await tcp_socket.async_receive(\n        boost::asio::buffer(buffer), boost::asio::socket_base::message_peek,\n        boost::asio::redirect_error(boost::asio::use_awaitable, ec));\n\n    if (ec || !bytes_read) {\n      SPDLOG_ERROR(\"Peeked zero bytes from socket (client_id={})\", client_id_);\n      co_return ProbingResult{.is_probing = true,\n          .sni = default_proxy_domain_,\n          .should_close = true};\n    }\n    // Check ssl\n    if (!pcpp::SSLLayer::IsSSLMessage(\n            0, 0, buffer.data(), buffer.size(), true)) {\n      SPDLOG_ERROR(\n          \"Not an SSL message, closing connection (client_id={})\", client_id_);\n      co_return ProbingResult{.is_probing = true,\n          .sni = default_proxy_domain_,\n          .should_close = true};\n    }\n    // Create SslLayer\n    pcpp::SSLLayer* ssl_layer = pcpp::SSLLayer::createSSLMessage(\n        buffer.data(), buffer.size(), nullptr, nullptr);\n    if (!ssl_layer) {\n      SPDLOG_ERROR(\n          \"Failed to create SSL layer from handshake data (client_id={})\",\n          client_id_);\n      co_return ProbingResult{.is_probing = true,\n          .sni = default_proxy_domain_,\n          .should_close = true};\n    }\n\n    // Check handshake\n    // https://github.com/wiresock/ndisapi/blob/master/examples/cpp/pcapplusplus/pcapplusplus.cpp#L40\n    const auto* handshake = dynamic_cast<pcpp::SSLHandshakeLayer*>(ssl_layer);\n\n    // Cleanup memory!\n    // std::unique_ptr<pcpp::SSLLayer> ssl_layer_ptr(ssl_layer);\n\n    if (!handshake) {\n      SPDLOG_ERROR(\"Failed to cast to SSLHandshakeLayer\");\n      co_return ProbingResult{.is_probing = true,\n          .sni = default_proxy_domain_,\n          .should_close = true};\n    }\n\n    // Get TTL-HELLO\n    auto* hello =\n        // cppcheck-suppress nullPointerRedundantCheck\n        handshake->getHandshakeMessageOfType<pcpp::SSLClientHelloMessage>();\n    if (!hello) {\n      SPDLOG_ERROR(\n          \"Failed to extract SSLClientHelloMessage from handshake \"\n          \"(client_id={})\",\n          client_id_);\n      co_return ProbingResult{.is_probing = true,\n          .sni = default_proxy_domain_,\n          .should_close = true};\n    }\n\n    // Set SNI\n    std::string sni = default_proxy_domain_;\n    auto* sni_ext =\n        // cppcheck-suppress nullPointerRedundantCheck\n        hello->getExtensionOfType<pcpp::SSLServerNameIndicationExtension>();\n    if (sni_ext) {\n      std::string tls_sni = sni_ext->getHostName();\n      if (!tls_sni.empty()) {\n        sni = std::move(tls_sni);\n      }\n    }\n    // Validate allowed sni\n    if (!allowed_sni_list_.empty()) {\n      const bool sni_allowed = std::ranges::any_of(\n          allowed_sni_list_, [&sni](const std::string& allowed_sni) {\n            if (sni == allowed_sni) {\n              return true;\n            }\n            // check subdomains\n            if (sni.size() > allowed_sni.size() + 1) {\n              return sni.ends_with(\".\" + allowed_sni);\n            }\n            return false;\n          });\n      if (!sni_allowed) {\n        sni = default_proxy_domain_;\n        SPDLOG_WARN(\n            \"SNI '{}' not in allowed list, using default domain: {} \"\n            \"(client_id={})\",\n            sni, default_proxy_domain_, client_id_);\n      }\n    }\n\n    // Detect and prevent recursive proxying to the local server\n    if (sni != default_proxy_domain_) {\n      const bool is_recursive_attempt = co_await IsSniSelfProxyAttempt(sni);\n      if (is_recursive_attempt) {\n        SPDLOG_WARN(\n            \"Detected recursive proxy attempt! \"\n            \"Client: {}, SNI: {}, Redirecting to default SNI: {}\",\n            client_id_, sni, default_proxy_domain_);\n        sni = default_proxy_domain_;\n      }\n    }\n\n    // Get Session ID\n    constexpr std::size_t kSessionLen = 32;\n    std::size_t session_len = std::min(\n        static_cast<std::uint8_t>(kSessionLen), hello->getSessionIDLength());\n    if (session_len != kSessionLen) {\n      SPDLOG_ERROR(\n          \"Invalid session ID length: expected {}, got {} (client_id={})\",\n          kSessionLen, session_len, client_id_);\n      co_return ProbingResult{\n          .is_probing = true, .sni = sni, .should_close = false};\n    }\n    std::uint8_t session_id[kSessionLen] = {0};\n    std::memcpy(session_id, hello->getSessionID(), session_len);\n\n    // Check Session ID\n    const bool is_fptn_session_id =\n        protocol::https::utils::IsFptnClientSessionID(session_id, session_len);\n    const bool is_decoy_session_id =\n        protocol::https::utils::IsDecoyHandshakeSessionID(\n            session_id, session_len);\n    const bool is_decoy_session_id2 =\n        protocol::https::utils::IsDecoyHandshakeSessionID2(\n            session_id, session_len);\n    if (!is_fptn_session_id && !is_decoy_session_id && !is_decoy_session_id2) {\n      SPDLOG_ERROR(\n          \"Session ID does not match FPTN client format (client_id={})\",\n          client_id_);\n      co_return ProbingResult{\n          .is_probing = true, .sni = sni, .should_close = false};\n    }\n    // Valid FPTN client\n    co_return ProbingResult{\n        .is_probing = false, .sni = sni, .should_close = false};\n  } catch (const boost::system::system_error& e) {\n    SPDLOG_ERROR(\n        \"System error during probing: {} (client_id={})\", e.what(), client_id_);\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\n        \"Exception during probing: {} (client_id={})\", e.what(), client_id_);\n  } catch (...) {\n    SPDLOG_ERROR(\"Unknown exception during probing (client_id={})\", client_id_);\n  }\n  co_return ProbingResult{\n      .is_probing = true, .sni = default_proxy_domain_, .should_close = true};\n}\n\n// NOLINTNEXTLINE(readability-convert-member-functions-to-static)\nboost::asio::awaitable<bool> Session::IsSniSelfProxyAttempt(\n    const std::string& sni) const {\n  // First check if SNI is already an IP address\n  if (fptn::common::network::IsIpAddress(sni)) {\n    // FIXME\n    SPDLOG_WARN(\"SNI is IP address, treating as potential self-proxy: {}\", sni);\n    co_return true;\n  }\n\n  // Not an IP address - proceed with DNS resolution using our new function\n  try {\n    const auto server_ips = GetServerIpAddresses(server_external_ips_);\n\n    boost::asio::io_context ioc;\n    const auto resolve_result =\n        fptn::common::network::ResolveWithTimeout(ioc, sni, \"\", 5);\n\n    if (!resolve_result.success()) {\n      SPDLOG_WARN(\"DNS resolution failed for {}: {}\", sni,\n          resolve_result.error.message());\n    }\n\n    // Iterate through resolved endpoints\n    for (const auto& endpoint : resolve_result.results) {\n      const auto ip = endpoint.endpoint().address().to_string();\n      if (ip.empty()) {\n        continue;\n      }\n      // check server interfaces\n      if (std::ranges::find(server_ips, ip) != server_ips.end()) {\n        SPDLOG_WARN(\n            \"SNI {} resolves to server interface IP {}, blocking self-proxy\",\n            sni, ip);\n        co_return true;\n      }\n    }\n  } catch (const std::exception& e) {\n    SPDLOG_WARN(\"Exception during DNS resolution for {}: {}\", sni, e.what());\n    co_return true;\n  }\n\n  co_return false;\n}\n\nboost::asio::awaitable<Session::RealityResult> Session::IsRealityHandshake() {\n  try {\n    auto& tcp_socket = boost::beast::get_lowest_layer(ws_).socket();\n\n    // Peek data without consuming it\n    std::array<std::uint8_t, 16384> buffer{};\n    const std::size_t bytes_read =\n        co_await tcp_socket.async_receive(boost::asio::buffer(buffer),\n            boost::asio::socket_base::message_peek, boost::asio::use_awaitable);\n\n    if (!bytes_read) {\n      co_return RealityResult{.is_reality_mode = false,\n          .is_reality_mode2 = false,\n          .sni = \"\",\n          .should_close = true};\n    }\n\n    // Check if it's SSL/TLS handshake\n    if (!pcpp::SSLLayer::IsSSLMessage(\n            0, 0, buffer.data(), buffer.size(), true)) {\n      co_return RealityResult{.is_reality_mode = false,\n          .is_reality_mode2 = false,\n          .sni = \"\",\n          .should_close = true};\n    }\n\n    // Parse SSL handshake\n    pcpp::SSLLayer* ssl_layer = pcpp::SSLLayer::createSSLMessage(\n        buffer.data(), buffer.size(), nullptr, nullptr);\n    if (!ssl_layer) {\n      co_return RealityResult{.is_reality_mode = false,\n          .is_reality_mode2 = false,\n          .sni = \"\",\n          .should_close = true};\n    }\n\n    // Check handshake\n    // https://github.com/wiresock/ndisapi/blob/master/examples/cpp/pcapplusplus/pcapplusplus.cpp#L40\n    auto* handshake = dynamic_cast<pcpp::SSLHandshakeLayer*>(ssl_layer);\n    if (!handshake) {\n      co_return RealityResult{.is_reality_mode = false,\n          .is_reality_mode2 = false,\n          .sni = \"\",\n          .should_close = true};\n    }\n\n    auto* hello =\n        // cppcheck-suppress nullPointerRedundantCheck\n        handshake->getHandshakeMessageOfType<pcpp::SSLClientHelloMessage>();\n    if (!hello) {\n      co_return RealityResult{.is_reality_mode = false,\n          .is_reality_mode2 = false,\n          .sni = \"\",\n          .should_close = true};\n    }\n\n    // Get SNI\n    std::string sni = default_proxy_domain_;\n    auto* sni_ext =\n        // cppcheck-suppress nullPointerRedundantCheck\n        hello->getExtensionOfType<pcpp::SSLServerNameIndicationExtension>();\n    if (sni_ext) {\n      std::string tls_sni = sni_ext->getHostName();\n      if (!tls_sni.empty()) {\n        sni = std::move(tls_sni);\n      }\n    }\n\n    // Check if this is a reality mode handshake by examining session ID\n    constexpr std::size_t kSessionLen = 32;\n    std::size_t session_len = std::min(\n        static_cast<std::uint8_t>(kSessionLen), hello->getSessionIDLength());\n\n    if (session_len == kSessionLen) {\n      std::uint8_t session_id[kSessionLen] = {0};\n      std::memcpy(session_id, hello->getSessionID(), session_len);\n\n      // Check if it's a decoy handshake (reality mode)\n      const bool is_reality = protocol::https::utils::IsDecoyHandshakeSessionID(\n          session_id, session_len);\n      const bool is_reality2 =\n          protocol::https::utils::IsDecoyHandshakeSessionID2(\n              session_id, session_len);\n      if (is_reality || is_reality2) {\n        co_return RealityResult{.is_reality_mode = is_reality,\n            .is_reality_mode2 = is_reality2,\n            .sni = sni,\n            .should_close = false};\n      }\n      co_return RealityResult{.is_reality_mode = false,\n          .is_reality_mode2 = false,\n          .sni = sni,\n          .should_close = false};\n    }\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"IsRealityHandshake exception (client_id={}): {}\", client_id_,\n        e.what());\n  }\n  co_return RealityResult{.is_reality_mode = true,\n      .is_reality_mode2 = false,\n      .sni = \"\",\n      .should_close = true};\n}\n\n// DEPRECATED\nboost::asio::awaitable<bool> Session::PerformFakeHandshake(\n    const std::string& sni) {\n  try {\n    auto& tcp_socket = boost::beast::get_lowest_layer(ws_).socket();\n\n    std::vector<std::uint8_t> buffer(16384, '\\0');\n    // std::string buffer(16384, '\\0');\n    const std::size_t bytes_read = co_await tcp_socket.async_receive(\n        boost::asio::buffer(buffer), boost::asio::use_awaitable);\n    if (!bytes_read || !handshake_cache_manager_) {\n      co_return false;\n    }\n    buffer.resize(bytes_read);\n\n    const auto handshake_answer =\n        co_await handshake_cache_manager_->GetHandshake(\n            sni, buffer.data(), bytes_read, std::chrono::seconds(3));\n\n    if (!handshake_answer) {\n      co_return false;\n    }\n\n    const std::size_t bytes_wrote =\n        co_await boost::asio::async_write(tcp_socket,\n            boost::asio::buffer(*handshake_answer), boost::asio::use_awaitable);\n\n    SPDLOG_INFO(\n        \"Reality mode completed, ready for real handshake (client_id={}) \"\n        \"request_size = {} response_size: {}\",\n        client_id_, bytes_read, bytes_wrote);\n    co_return true;\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\n        \"HandleRealityMode exception (client_id={}): {}\", client_id_, e.what());\n  }\n  co_return false;\n}\n\nboost::asio::awaitable<bool> Session::PerformFakeHandshake2(\n    const std::string& sni) {\n  try {\n    auto& tcp_socket = boost::beast::get_lowest_layer(ws_).socket();\n    /* Wait for client hello */\n    const auto client_hello =\n        co_await common::network::WaitForClientTlsHelloAsync(tcp_socket);\n    if (!client_hello.has_value()) {\n      SPDLOG_ERROR(\"Empty client hello\");\n      co_return false;\n    }\n\n    const auto client_hello_size = client_hello.value().size();\n\n    common::network::CleanSocket(tcp_socket);\n\n    /* Send server hello */\n    const auto handshake_answer =\n        co_await handshake_cache_manager_->GetHandshake(sni,\n            client_hello.value().data(), client_hello_size,\n            std::chrono::seconds(5));\n    if (!handshake_answer) {\n      co_return false;\n    }\n\n    const std::size_t handshake_answer_size =\n        co_await boost::asio::async_write(tcp_socket,\n            boost::asio::buffer(*handshake_answer), boost::asio::use_awaitable);\n\n    /* Wait for ChangeCipherSpec */\n    const bool change_cipher_spec_size =\n        co_await common::network::WaitForClientChangeCipherSpec(tcp_socket);\n    if (!change_cipher_spec_size) {\n      SPDLOG_ERROR(\"Failed to receive Client ChangeCipherSpec\");\n      co_return false;\n    }\n\n    SPDLOG_INFO(\n        \"Reality mode2 completed, ready for real handshake (client_id={}) \"\n        \"request_size = {} response_size: {}\",\n        client_id_, client_hello_size, handshake_answer_size);\n    co_return true;\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"HandleRealityMode2 exception (client_id={}): {}\", client_id_,\n        e.what());\n  }\n  co_return false;\n}\n\nboost::asio::awaitable<bool> Session::HandleProxy(\n    const std::string& sni, int port) {\n  auto& tcp_socket = boost::beast::get_lowest_layer(ws_).socket();\n  boost::asio::ip::tcp::socket target_socket(\n      co_await boost::asio::this_coro::executor);\n\n  constexpr int kTimeout = 10;\n  boost::beast::get_lowest_layer(ws_).expires_after(\n      std::chrono::seconds(kTimeout));\n\n  bool status = false;\n  try {\n    const std::string port_str = std::to_string(port);\n\n    boost::asio::io_context ioc;\n    auto resolve_result =\n        fptn::common::network::ResolveWithTimeout(ioc, sni, port_str, kTimeout);\n\n    if (!resolve_result.success()) {\n      SPDLOG_ERROR(\"Proxy DNS resolution failed for {}:{}: {}\", sni, port_str,\n          resolve_result.error.message());\n      co_return false;\n    }\n\n    co_await boost::asio::async_connect(\n        target_socket, resolve_result.results, boost::asio::use_awaitable);\n\n    const auto ep = target_socket.remote_endpoint();\n    SPDLOG_INFO(\"Proxying {}:{} <-> {}:{} (client_id={})\",\n        ep.address().to_string(), ep.port(), sni, port_str, client_id_);\n\n    auto self = shared_from_this();\n    auto forward = [self](\n                       auto& from, auto& to) -> boost::asio::awaitable<void> {\n      try {\n        boost::system::error_code ec;\n        std::array<std::uint8_t, 16384> buf{};\n        while (self->running_) {\n          const auto n = co_await from.async_read_some(boost::asio::buffer(buf),\n              boost::asio::redirect_error(boost::asio::use_awaitable, ec));\n          if (ec || n == 0) {\n            break;\n          }\n          co_await boost::asio::async_write(to,\n              boost::asio::buffer(buf.data(), n),\n              boost::asio::redirect_error(boost::asio::use_awaitable, ec));\n          if (ec) {\n            break;\n          }\n        }\n        from.close();\n      } catch (const boost::system::system_error& e) {\n        SPDLOG_ERROR(\"Coroutine system error: {} [{}] (client_id={})\", e.what(),\n            e.code().message(), self->client_id_);\n      }\n      co_return;\n    };\n\n    // Set socket timeout\n    SetSocketTimeouts(tcp_socket, kTimeout);\n    SetSocketTimeouts(target_socket, kTimeout);\n\n    auto [client_to_server_result, server_to_client_result, completion_status] =\n        co_await boost::asio::experimental::make_parallel_group(\n            boost::asio::co_spawn(co_await boost::asio::this_coro::executor,\n                forward(tcp_socket, target_socket), boost::asio::deferred),\n            boost::asio::co_spawn(co_await boost::asio::this_coro::executor,\n                forward(target_socket, tcp_socket), boost::asio::deferred))\n            .async_wait(boost::asio::experimental::wait_for_all(),\n                boost::asio::use_awaitable);\n    (void)client_to_server_result;\n    (void)server_to_client_result;\n    (void)completion_status;\n    status = true;\n  } catch (const boost::system::system_error& e) {\n    SPDLOG_ERROR(\"Proxy system error: {} [{}] (client_id={})\", e.what(),\n        e.code().message(), client_id_);\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\"Proxy error (client_id={}): {} \", e.what(), client_id_);\n  }\n\n  // close socket\n  try {\n    tcp_socket.close();\n  } catch (const boost::system::system_error& e) {\n    SPDLOG_ERROR(\n        \"Failed to close the socket after proxy completion (client_id={}): \"\n        \"{} \"\n        \"[{}]\",\n        client_id_, e.what(), e.code().message());\n  }\n  // close target socket\n  boost::system::error_code ec;\n  target_socket.close(ec);\n\n  SPDLOG_INFO(\"Close proxy (client_id={})\", client_id_);\n\n  co_return status;\n}\n\nboost::asio::awaitable<void> Session::RunReader() {\n  boost::system::error_code ec;\n  boost::beast::flat_buffer buffer;\n  buffer.reserve(4 * 1024 * 1024);\n  auto token = boost::asio::redirect_error(boost::asio::use_awaitable, ec);\n  try {\n    while (running_ && ws_.is_open()) {\n      co_await ws_.async_read(buffer, token);\n      if (ec) {\n        break;\n      }\n      if (buffer.size() > 0 && running_ && ws_.is_open()) {\n        auto raw_ip = fptn::protocol::protobuf::GetProtoPayload(buffer);\n        if (raw_ip.has_value() && running_) {\n          auto packet = fptn::common::network::IPPacket::Parse(\n              std::move(raw_ip.value()), client_id_);\n          if (packet != nullptr) {\n            ws_new_ippacket_callback_(std::move(packet));\n          }\n        }\n      }\n      buffer.consume(buffer.size());\n    }\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\n        \"RunReader exception (client_id={}): {}\", client_id_, e.what());\n  }\n\n  Close();\n  co_return;\n}\n\nboost::asio::awaitable<void> Session::RunSender() {\n  try {\n    while (running_ && ws_.is_open()) {\n      auto [ec, packet] = co_await write_channel_.async_receive(\n          boost::asio::bind_cancellation_slot(cancel_signal_.slot(),\n              boost::asio::as_tuple(boost::asio::use_awaitable)));\n      if (running_ && ws_.is_open() && !ec && packet != nullptr) {\n        auto msg =\n            fptn::protocol::protobuf::CreateProtoPayload(std::move(packet));\n        if (msg.has_value()) {\n          co_await ws_.async_write(boost::asio::buffer(std::move(msg.value())),\n              boost::asio::use_awaitable);\n        }\n      }\n    }\n  } catch (const boost::system::system_error& err) {\n    if (err.code() != boost::asio::error::operation_aborted &&\n        err.code() != boost::beast::websocket::error::closed) {\n      SPDLOG_ERROR(\n          \"RunSender error (client_id={}): {}\", client_id_, err.what());\n    }\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\n        \"RunSender exception (client_id={}): {}\", client_id_, e.what());\n  }\n\n  Close();\n  co_return;\n}\n\nboost::asio::awaitable<bool> Session::ProcessRequest() {\n  bool status = false;\n\n  try {\n    boost::system::error_code ec;\n    boost::beast::flat_buffer buffer;\n    boost::beast::http::request<boost::beast::http::string_body> request;\n\n    co_await boost::beast::http::async_read(ws_.next_layer(), buffer, request,\n        boost::asio::redirect_error(boost::asio::use_awaitable, ec));\n\n    if (boost::beast::websocket::is_upgrade(request)) {\n      status = co_await HandleWebSocket(request);\n      if (status) {\n        co_await ws_.async_accept(request,\n            boost::asio::redirect_error(boost::asio::use_awaitable, ec));\n      }\n    } else {\n      status = co_await HandleHttp(request);\n    }\n  } catch (const boost::system::system_error& err) {\n    SPDLOG_ERROR(\"Session::handshake failed (client_id={}): {} [{}]\",\n        client_id_, err.what(), err.code().message());\n  }\n  co_return status;\n}\n\nboost::asio::awaitable<bool> Session::HandleHttp(\n    const boost::beast::http::request<boost::beast::http::string_body>&\n        request) {\n  const std::string url = request.target();\n  const std::string method = request.method_string();\n\n  boost::beast::get_lowest_layer(ws_).expires_after(std::chrono::seconds(30));\n\n  if (method.empty() && url.empty()) {\n    SPDLOG_WARN(\n        \"HTTP request has empty method or URL (client_id={}): method='{}', \"\n        \"url='{}'\",\n        client_id_, method, url);\n    co_return false;\n  }\n\n  if (url.find(\"metrics\") == std::string::npos) {  // NOLINT\n    SPDLOG_INFO(\"HTTP request (client_id={}): {} {}\", client_id_, method, url);\n  } else {\n    SPDLOG_INFO(\"HTTP request (client_id={}): {} {}\", client_id_, method,\n        \"/api/v1/metrics/<hidden>\");\n  }\n\n  const auto server_info = fmt::format(\"fptn/{}\", FPTN_VERSION);\n  const auto http_date = fptn::time::TimeProvider::Instance()->Rfc7231Date();\n\n  boost::beast::http::response<boost::beast::http::string_body> resp;\n  resp.set(boost::beast::http::field::server, server_info);\n  resp.set(boost::beast::http::field::content_type,\n      \"application/json; charset=utf-8\");\n  resp.set(boost::beast::http::field::cache_control,\n      \"no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0\");\n  resp.set(boost::beast::http::field::pragma, \"no-cache\");\n  resp.set(boost::beast::http::field::expires, \"0\");\n  resp.set(boost::beast::http::field::date, http_date);\n\n  const ApiHandle handler = GetApiHandle(api_handles_, url, method);\n  if (handler) {\n    int status = handler(request, resp);\n    resp.result(status);\n  } else {\n    resp.result(boost::beast::http::status::not_found);\n    resp.body() = \"404 Not Found\";\n  }\n  resp.prepare_payload();\n\n  auto res_ptr = std::make_shared<\n      boost::beast::http::response<boost::beast::http::string_body>>(\n      std::move(resp));\n  try {\n    co_await boost::beast::http::async_write(\n        ws_.next_layer(), *res_ptr, boost::asio::use_awaitable);\n  } catch (const boost::beast::system_error& e) {\n    SPDLOG_ERROR(\"Session::HandleHttp write error (client_id={}): {}\",\n        client_id_, e.what());\n  } catch (...) {\n    SPDLOG_ERROR(\n        \"Session::HandleHttp write unknown error (client_id={})\", client_id_);\n  }\n  co_return false;\n}\n\nboost::asio::awaitable<bool> Session::HandleWebSocket(\n    const boost::beast::http::request<boost::beast::http::string_body>&\n        request) {\n  boost::beast::get_lowest_layer(ws_).expires_after(std::chrono::hours(12));\n\n  if (request.contains(\"Authorization\") && request.contains(\"ClientIP\")) {\n    std::string token = request[\"Authorization\"];\n    boost::replace_first(token, \"Bearer \", \"\");\n\n    const std::string client_vpn_ipv4_str = request[\"ClientIP\"];\n\n    boost::system::error_code ec;\n    const std::string client_ip_str = boost::beast::get_lowest_layer(ws_)\n                                          .socket()\n                                          .remote_endpoint(ec)\n                                          .address()\n                                          .to_string();\n    if (ec) {\n      SPDLOG_ERROR(\"Failed to get remote endpoint: {}\", ec.message());\n      co_return false;\n    }\n\n    try {\n      const common::network::IPv4Address client_ip(client_ip_str);\n      const common::network::IPv4Address client_vpn_ipv4(client_vpn_ipv4_str);\n\n      const std::string client_vpn_ipv6_str =\n          (request.contains(\"ClientIPv6\") ? request[\"ClientIPv6\"]\n                                          : FPTN_CLIENT_DEFAULT_ADDRESS_IP6);\n      const common::network::IPv6Address client_vpn_ipv6(client_vpn_ipv6_str);\n\n      const bool status =\n          ws_open_callback_(client_id_, client_ip, client_vpn_ipv4,\n              client_vpn_ipv6, shared_from_this(), request.target(), token);\n      ws_session_was_opened_ = true;\n      co_return status;\n    } catch (const std::exception& ex) {\n      SPDLOG_ERROR(\n          \"Session::Open (client_id={}): Exception caught while creating IP \"\n          \"addresses or running callback: {}\",\n          client_id_, ex.what());\n    } catch (...) {\n      SPDLOG_ERROR(\n          \"Session::Open (client_id={}): Unknown fatal error caught while \"\n          \"creating IP addresses or running callback\",\n          client_id_);\n    }\n  }\n  co_return false;\n}\n\nvoid Session::Close() {\n  if (!running_) {\n    return;\n  }\n\n  const std::unique_lock<std::mutex> lock(mutex_);  // mutex\n\n  // cppcheck-suppress identicalConditionAfterEarlyExit\n  if (!running_) {  // Double-check after acquiring lock\n    return;\n  }\n\n  SPDLOG_INFO(\"Close session {}\", client_id_);\n  running_ = false;\n\n  try {\n    cancel_signal_.emit(boost::asio::cancellation_type::all);\n    write_channel_.close();\n  } catch (const std::exception& err) {\n    SPDLOG_WARN(\n        \"Failed to cancel session or close write_channel: {}\", err.what());\n  } catch (...) {\n    SPDLOG_WARN(\n        \"Session::Close unknown fatal error (client_id={})\", client_id_);\n  }\n\n  // Close TCP socket first\n  try {\n    auto& tcp_layer = boost::beast::get_lowest_layer(ws_);\n    if (tcp_layer.socket().is_open()) {\n      boost::system::error_code ec;\n      tcp_layer.expires_after(std::chrono::milliseconds(50));\n\n      tcp_layer.socket().shutdown(\n          boost::asio::ip::tcp::socket::shutdown_both, ec);\n      tcp_layer.socket().close(ec);\n    }\n  } catch (const std::exception& err) {\n    SPDLOG_WARN(\"Session::Close TCP socket error (client_id={}): {}\",\n        client_id_, err.what());\n  } catch (...) {\n    SPDLOG_WARN(\n        \"Session::Close TCP socket unknown error (client_id={})\", client_id_);\n  }\n\n  // Close WebSocket\n  try {\n    if (ws_.is_open()) {\n      boost::system::error_code ec;\n      ws_.close(boost::beast::websocket::close_code::normal, ec);\n    }\n  } catch (const std::exception& err) {\n    SPDLOG_WARN(\"Session::Close WebSocket error (client_id={}): {}\", client_id_,\n        err.what());\n  } catch (...) {\n    SPDLOG_WARN(\n        \"Session::Close WebSocket unknown error (client_id={})\", client_id_);\n  }\n\n  // Close SSL\n  try {\n    auto& ssl_layer = ws_.next_layer();\n    if (ssl_layer.native_handle()) {\n      ::SSL_set_quiet_shutdown(ssl_layer.native_handle(), 1);\n    }\n  } catch (const std::exception& err) {\n    SPDLOG_ERROR(\"Session::Close SSL shutdown exception (client_id={}): {}\",\n        client_id_, err.what());\n  } catch (...) {\n    SPDLOG_ERROR(\n        \"Session::Close SSL shutdown unknown error (client_id={})\", client_id_);\n  }\n\n  if (ws_close_callback_ && ws_session_was_opened_) {\n    try {\n      ws_close_callback_(client_id_);\n    } catch (const std::exception& e) {\n      SPDLOG_WARN(\"WebSocket close callback threw exception (client_id={}): {}\",\n          client_id_, e.what());\n    } catch (...) {\n      SPDLOG_WARN(\n          \"WebSocket close callback threw unknown exception (client_id={})\",\n          client_id_);\n    }\n  }\n}\n\nboost::asio::awaitable<bool> Session::Send(common::network::IPPacketPtr pkt) {\n  auto self = shared_from_this();\n  boost::asio::post(strand_, [self, pkt = std::move(pkt)]() mutable {\n    if (self->running_ && self->write_channel_.is_open()) {\n      const bool status = self->write_channel_.try_send(\n          boost::system::error_code(), std::move(pkt));\n      if (!status && !self->full_queue_) {\n        self->full_queue_ = true;\n        SPDLOG_WARN(\n            \"Session::send queue is full (client_id={})\", self->client_id_);\n      }\n    }\n  });\n  co_return true;\n}\n\nboost::asio::awaitable<IObfuscator> Session::DetectObfuscator() {\n  try {\n    auto& tcp_socket = boost::beast::get_lowest_layer(ws_).socket();\n\n    // Peek data without consuming it from the socket buffer\n    // This allows inspection without affecting subsequent reads\n    std::array<std::uint8_t, 16384> buffer{};\n    const std::size_t bytes_read =\n        co_await tcp_socket.async_receive(boost::asio::buffer(buffer),\n            boost::asio::socket_base::message_peek, boost::asio::use_awaitable);\n\n    if (!bytes_read) {\n      SPDLOG_WARN(\"No data received for obfuscator detection [client_id: {}]\",\n          client_id_);\n      co_return std::nullopt;\n    }\n\n    // Detect the appropriate obfuscator based on the peeked data\n    auto obfuscator = fptn::protocol::https::obfuscator::DetectObfuscator(\n        buffer.data(), bytes_read);\n    co_return obfuscator;\n  } catch (const boost::system::system_error& e) {\n    SPDLOG_ERROR(\n        \"System error during obfuscator setup [client_id: {}, error: '{}', \"\n        \"code: {}]\",\n        client_id_, e.what(), e.code().message());\n  } catch (const std::exception& e) {\n    SPDLOG_ERROR(\n        \"Exception during obfuscator setup [client_id: {}, error: '{}']\",\n        client_id_, e.what());\n  } catch (...) {\n    SPDLOG_ERROR(\n        \"Unknown error during obfuscator setup [client_id: {}]\", client_id_);\n  }\n  co_return std::nullopt;\n}\n\n};  // namespace fptn::web\n"
  },
  {
    "path": "src/fptn-server/web/session/session.h",
    "content": "\n/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#pragma once\n\n#include <memory>\n#include <string>\n#include <vector>\n\n#include <boost/asio.hpp>\n#include <boost/asio/awaitable.hpp>\n#include <boost/asio/co_spawn.hpp>\n#include <boost/asio/detached.hpp>\n#include <boost/asio/experimental/awaitable_operators.hpp>\n#include <boost/asio/experimental/channel.hpp>\n#include <boost/asio/experimental/concurrent_channel.hpp>\n#include <boost/asio/ssl.hpp>\n#include <boost/beast.hpp>\n#include <boost/beast/core.hpp>\n#include <boost/beast/websocket.hpp>\n\n#include \"common/jwt_token/token_manager.h\"\n\n#include \"fptn-protocol-lib/https/obfuscator/tcp_stream/tcp_stream.h\"\n#include \"web/api/handle.h\"\n#include \"web/handshake/handshake_cache_manager.h\"\n\nnamespace fptn::web {\n\nusing IObfuscator = std::optional<protocol::https::obfuscator::IObfuscatorSPtr>;\n\nclass Session : public std::enable_shared_from_this<Session> {\n public:\n  explicit Session(std::uint16_t port,\n      bool enable_detect_probing,\n      std::string default_proxy_domain,\n      std::vector<std::string> allowed_sni_list,\n      std::string server_external_ips,\n      boost::asio::ip::tcp::socket&& socket,\n      boost::asio::ssl::context& ctx,\n      const ApiHandleMap& api_handles,\n      HandshakeCacheManagerSPtr handshake_cache_manager,\n      WebSocketOpenConnectionCallback ws_open_callback,\n      WebSocketNewIPPacketCallback ws_new_ippacket_callback,\n      WebSocketCloseConnectionCallback ws_close_callback);\n  virtual ~Session();\n  void Close();\n\n  // async\n  boost::asio::awaitable<void> Run();\n  boost::asio::awaitable<bool> Send(fptn::common::network::IPPacketPtr pkt);\n\n protected:\n  boost::asio::awaitable<void> RunReader();\n  boost::asio::awaitable<void> RunSender();\n\n protected:\n  struct ProbingResult {\n    bool is_probing;\n    std::string sni;\n    bool should_close;\n  };\n\n  boost::asio::awaitable<ProbingResult> DetectProbing();\n\n protected:\n  boost::asio::awaitable<bool> IsSniSelfProxyAttempt(\n      const std::string& sni) const;\n\n  struct RealityResult {\n    bool is_reality_mode;  // DEPRICATED\n    bool is_reality_mode2;\n    std::string sni;\n    bool should_close;\n  };\n\n  boost::asio::awaitable<RealityResult> IsRealityHandshake();\n\n  // DEPRECATED\n  boost::asio::awaitable<bool> PerformFakeHandshake(const std::string& sni);\n\n  boost::asio::awaitable<bool> PerformFakeHandshake2(const std::string& sni);\n\n  boost::asio::awaitable<bool> HandleProxy(const std::string& sni, int port);\n\n  boost::asio::awaitable<IObfuscator> DetectObfuscator();\n\n protected:\n  boost::asio::awaitable<bool> ProcessRequest();\n  boost::asio::awaitable<bool> HandleHttp(\n      const boost::beast::http::request<boost::beast::http::string_body>&\n          request);\n  boost::asio::awaitable<bool> HandleWebSocket(\n      const boost::beast::http::request<boost::beast::http::string_body>&\n          request);\n\n private:\n  mutable std::mutex mutex_;\n\n  fptn::ClientID client_id_ = MAX_CLIENT_ID;\n\n  const std::uint16_t port_;\n  const bool enable_detect_probing_;\n  const std::string default_proxy_domain_;\n  const std::vector<std::string> allowed_sni_list_;\n\n  const std::string server_external_ips_;\n\n  // TCP -> obfuscator -> SSL -> WebSocket\n  using tcp_stream_type = boost::beast::tcp_stream;\n  using obfuscator_socket_type =\n      fptn::protocol::https::obfuscator::TcpStream<tcp_stream_type>;\n  using ssl_stream_type = boost::beast::ssl_stream<obfuscator_socket_type>;\n  using websocket_type = boost::beast::websocket::stream<ssl_stream_type>;\n\n  websocket_type ws_;\n\n  boost::asio::strand<boost::asio::any_io_executor> strand_;\n  boost::asio::experimental::concurrent_channel<void(\n      boost::system::error_code, fptn::common::network::IPPacketPtr)>\n      write_channel_;\n\n  const ApiHandleMap& api_handles_;\n\n  HandshakeCacheManagerSPtr handshake_cache_manager_;\n\n  const WebSocketOpenConnectionCallback ws_open_callback_;\n  const WebSocketNewIPPacketCallback ws_new_ippacket_callback_;\n  const WebSocketCloseConnectionCallback ws_close_callback_;\n\n  std::atomic<bool> running_;\n  std::atomic<bool> init_completed_;\n  std::atomic<bool> ws_session_was_opened_;\n  std::atomic<bool> full_queue_;\n\n  boost::asio::cancellation_signal cancel_signal_;\n};\n\nusing SessionSPtr = std::shared_ptr<Session>;\n}  // namespace fptn::web\n"
  },
  {
    "path": "sysadmin-tools/grafana/.gitignore",
    "content": ".env\ndocker-compose-data/"
  },
  {
    "path": "sysadmin-tools/grafana/README.md",
    "content": "## Grafana\n\nGrafana is used for monitoring server activity, including traffic amount and active users.\n\n<img src=\"images/grafana-1.jpg\" alt=\"Grafana\"/>\n\n<img src=\"images/grafana-2.jpg\" alt=\"Grafana\"/>\n\n#### To set it up:\n\n1. **Clone the repository:**\n\n```bash\ngit clone https://github.com/batchar2/fptn.git\n```\n\n2. **Navigate to the Grafana configuration folder:**\n\n```bash\ncd sysadmin-tools/grafana\n```\n\n3. **Copy and configure the environment file:**\n    - Copy the `.env.demo` file to `.env`:\n\n      ```bash\n      cp .env.demo .env\n      ```\n\n    - Open the `.env` file in a text editor and fill in all required fields.\n    - Set your piblic ip for `FPTN_HOST` and your fptn port for `FPTN_PORT`\n    - Pay special attention to the `PROMETHEUS_SECRET_ACCESS_KEY` parameter:\n        - This value **must match** the access key defined in your `fptn-server` config at `/etc/fptn/server.conf`.\n        - Use a **secure, random string** of **at least 30 characters** for this value.\n\n4. **Run Docker Compose:**\n   - Need install docker. To install it on ubuntu use [this docs](https://docs.docker.com/engine/install/ubuntu/)\n   - Start Grafana and its dependencies using Docker Compose:\n   \n        ```bash\n        docker compose down && docker compose up -d\n        ```\n5. **Access Grafana:**\n    - Open your browser and navigate to the Grafana interface using the selected port (**3000 by default**).\n    - Log in using the default credentials: `admin` / `admin`.\n    - After logging in, Grafana will prompt you to change the default password — **do it immediately and avoid using default credentials going forward!**\n\n#### Notes:\n\nEnsure that all parameters in the .env file are correctly configured before starting the services.\nThe `PROMETHEUS_SECRET_ACCESS_KEY` parameter must be consistent with the key used in fptn-server to allow proper access to metrics.\n\n\n#### 🐳 Building and Running the Docker Image (Optional)\n\nTo build the image:\n\n```bash\ndocker compose build -f docker-compose.build.yml\n```\n\nTo run the services:\n\n```bash\ndocker compose build -f docker-compose.build.yml up -d\n```\n\nTo stop the services:\n\n```bash\ndocker compose build -f docker-compose.build.yml down\n```\n"
  },
  {
    "path": "sysadmin-tools/grafana/configs/grafana/dashboards/dashboards.yaml",
    "content": "apiVersion: 1\n\nproviders:\n  - name: 'default'\n    orgId: 1\n    folder: ''\n    type: file\n    disableDeletion: false\n    editable: true\n    options:\n      path: /etc/grafana/provisioning/dashboards"
  },
  {
    "path": "sysadmin-tools/grafana/configs/grafana/dashboards/fptn_dashboard.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 1,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 6,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"11.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"disableTextWrap\": false,\n          \"editorMode\": \"builder\",\n          \"expr\": \"fptn_active_sessions\",\n          \"fullMetaSearch\": false,\n          \"includeNullMetadata\": true,\n          \"instant\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\",\n          \"useBackend\": false\n        }\n      ],\n      \"title\": \"Active VPN sessions\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 0\n      },\n      \"id\": 7,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"11.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"disableTextWrap\": false,\n          \"editorMode\": \"builder\",\n          \"expr\": \"fptn_active_sessions\",\n          \"fullMetaSearch\": false,\n          \"includeNullMetadata\": true,\n          \"instant\": false,\n          \"legendFormat\": \"USERS\",\n          \"range\": true,\n          \"refId\": \"A\",\n          \"useBackend\": false\n        }\n      ],\n      \"title\": \"Sessions history\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"binbps\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 8\n      },\n      \"id\": 5,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum(rate(fptn_user_outgoing_traffic_bytes[$__rate_interval])*8) \",\n          \"hide\": false,\n          \"instant\": false,\n          \"legendFormat\": \"TOTAL\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"User outgoing traffic\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"binbps\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 8\n      },\n      \"id\": 4,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"disableTextWrap\": false,\n          \"editorMode\": \"code\",\n          \"expr\": \"sum(rate(fptn_user_incoming_traffic_bytes[$__rate_interval])*8)\",\n          \"fullMetaSearch\": false,\n          \"includeNullMetadata\": true,\n          \"instant\": false,\n          \"legendFormat\": \"TOTAL\",\n          \"range\": true,\n          \"refId\": \"A\",\n          \"useBackend\": false\n        }\n      ],\n      \"title\": \"User incoming traffic\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"fillOpacity\": 80,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineWidth\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"bytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 16\n      },\n      \"id\": 8,\n      \"interval\": \"1h\",\n      \"options\": {\n        \"barRadius\": 0,\n        \"barWidth\": 0.97,\n        \"fullHighlight\": false,\n        \"groupWidth\": 0.7,\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"orientation\": \"auto\",\n        \"showValue\": \"auto\",\n        \"stacking\": \"none\",\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        },\n        \"xTickLabelRotation\": 0,\n        \"xTickLabelSpacing\": 0\n      },\n      \"pluginVersion\": \"11.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"disableTextWrap\": false,\n          \"editorMode\": \"code\",\n          \"expr\": \"sum(increase(fptn_user_outgoing_traffic_bytes[$__rate_interval]))\",\n          \"fullMetaSearch\": false,\n          \"includeNullMetadata\": true,\n          \"instant\": false,\n          \"legendFormat\": \"TOTAL\",\n          \"range\": true,\n          \"refId\": \"A\",\n          \"useBackend\": false\n        }\n      ],\n      \"title\": \"Total  Outgoing Traffic for 1h\",\n      \"type\": \"barchart\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"fillOpacity\": 80,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineWidth\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"bytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 16\n      },\n      \"id\": 9,\n      \"interval\": \"1h\",\n      \"options\": {\n        \"barRadius\": 0,\n        \"barWidth\": 0.97,\n        \"fullHighlight\": false,\n        \"groupWidth\": 0.7,\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"orientation\": \"auto\",\n        \"showValue\": \"auto\",\n        \"stacking\": \"none\",\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        },\n        \"xTickLabelRotation\": 0,\n        \"xTickLabelSpacing\": 0\n      },\n      \"pluginVersion\": \"11.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"disableTextWrap\": false,\n          \"editorMode\": \"code\",\n          \"expr\": \"sum(increase(fptn_user_incoming_traffic_bytes[1h]))\",\n          \"fullMetaSearch\": false,\n          \"includeNullMetadata\": true,\n          \"instant\": false,\n          \"legendFormat\": \"TOTAL\",\n          \"range\": true,\n          \"refId\": \"A\",\n          \"useBackend\": false\n        }\n      ],\n      \"title\": \"Total Incoming Traffic for the  1h\",\n      \"type\": \"barchart\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 24\n      },\n      \"id\": 14,\n      \"panels\": [],\n      \"title\": \"Additional info\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"default\": false,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"binbps\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 25\n      },\n      \"id\": 12,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"disableTextWrap\": false,\n          \"editorMode\": \"code\",\n          \"expr\": \"sum(rate(fptn_user_outgoing_traffic_bytes[$__rate_interval])*8) by (username) > 0\",\n          \"fullMetaSearch\": false,\n          \"includeNullMetadata\": true,\n          \"instant\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\",\n          \"useBackend\": false\n        }\n      ],\n      \"title\": \"User outgoing Traffic Rate \",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": false,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"binbps\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 25\n      },\n      \"id\": 13,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"disableTextWrap\": false,\n          \"editorMode\": \"code\",\n          \"expr\": \"sum(rate(fptn_user_incoming_traffic_bytes[$__rate_interval])*8) by (username) > 0\",\n          \"fullMetaSearch\": false,\n          \"includeNullMetadata\": true,\n          \"instant\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\",\n          \"useBackend\": false\n        }\n      ],\n      \"title\": \"User Incoming Traffic Rate\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": false,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"bytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 33\n      },\n      \"id\": 10,\n      \"interval\": \"1h\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"11.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"disableTextWrap\": false,\n          \"editorMode\": \"code\",\n          \"expr\": \"sum(increase(fptn_user_outgoing_traffic_bytes[$__rate_interval])) by (username) > 0\",\n          \"fullMetaSearch\": false,\n          \"includeNullMetadata\": true,\n          \"instant\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\",\n          \"useBackend\": false\n        }\n      ],\n      \"title\": \"Outgoing traffic by user for 1h\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": false,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"bytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 33\n      },\n      \"id\": 11,\n      \"interval\": \"1h\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"disableTextWrap\": false,\n          \"editorMode\": \"code\",\n          \"expr\": \"sum(increase(fptn_user_incoming_traffic_bytes[$__rate_interval])) by (username) > 0 \",\n          \"fullMetaSearch\": false,\n          \"includeNullMetadata\": true,\n          \"instant\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\",\n          \"useBackend\": false\n        }\n      ],\n      \"title\": \"incoming traffic by user for 1h\",\n      \"type\": \"timeseries\"\n    }\n  ],\n  \"refresh\": \"5s\",\n  \"schemaVersion\": 39,\n  \"tags\": [],\n  \"templating\": {\n    \"list\": []\n  },\n  \"time\": {\n    \"from\": \"now-6h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"3h\",\n      \"6h\",\n      \"12h\",\n      \"24h\"\n    ]\n  },\n  \"timezone\": \"browser\",\n  \"title\": \"FPTN Metrics Dashboard\",\n  \"uid\": \"fptn-metrics-dashboard\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}"
  },
  {
    "path": "sysadmin-tools/grafana/configs/grafana/dashboards/node-exporter-full.json",
    "content": "{\n  \"__inputs\": [\n    {\n      \"name\": \"DS_PROMETHEUS\",\n      \"label\": \"Prometheus\",\n      \"description\": \"\",\n      \"type\": \"datasource\",\n      \"pluginId\": \"prometheus\",\n      \"pluginName\": \"Prometheus\"\n    }\n  ],\n  \"__elements\": {},\n  \"__requires\": [\n    {\n      \"type\": \"panel\",\n      \"id\": \"bargauge\",\n      \"name\": \"Bar gauge\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"gauge\",\n      \"name\": \"Gauge\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"grafana\",\n      \"id\": \"grafana\",\n      \"name\": \"Grafana\",\n      \"version\": \"9.4.3\"\n    },\n    {\n      \"type\": \"datasource\",\n      \"id\": \"prometheus\",\n      \"name\": \"Prometheus\",\n      \"version\": \"1.0.0\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"stat\",\n      \"name\": \"Stat\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"timeseries\",\n      \"name\": \"Time series\",\n      \"version\": \"\"\n    }\n  ],\n  \"annotations\": {\n    \"list\": [\n      {\n        \"$$hashKey\": \"object:1058\",\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"gnetId\": 1860,\n  \"graphTooltip\": 1,\n  \"id\": null,\n  \"links\": [\n    {\n      \"icon\": \"external link\",\n      \"tags\": [],\n      \"targetBlank\": true,\n      \"title\": \"GitHub\",\n      \"type\": \"link\",\n      \"url\": \"https://github.com/rfmoz/grafana-dashboards\"\n    },\n    {\n      \"icon\": \"external link\",\n      \"tags\": [],\n      \"targetBlank\": true,\n      \"title\": \"Grafana\",\n      \"type\": \"link\",\n      \"url\": \"https://grafana.com/grafana/dashboards/1860\"\n    }\n  ],\n  \"liveNow\": false,\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"000000001\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 261,\n      \"panels\": [],\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"000000001\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Quick CPU / Mem / Disk\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"Resource pressure via PSI\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 1,\n          \"links\": [],\n          \"mappings\": [],\n          \"max\": 1,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"percentage\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"dark-yellow\",\n                \"value\": 70\n              },\n              {\n                \"color\": \"dark-red\",\n                \"value\": 90\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 3,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 323,\n      \"links\": [],\n      \"options\": {\n        \"displayMode\": \"basic\",\n        \"minVizHeight\": 10,\n        \"minVizWidth\": 0,\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showUnfilled\": true,\n        \"text\": {}\n      },\n      \"pluginVersion\": \"9.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"irate(node_pressure_cpu_waiting_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"instant\": true,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"CPU\",\n          \"range\": false,\n          \"refId\": \"CPU some\",\n          \"step\": 240\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"irate(node_pressure_memory_waiting_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"instant\": true,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"Mem\",\n          \"range\": false,\n          \"refId\": \"Memory some\",\n          \"step\": 240\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"irate(node_pressure_io_waiting_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"instant\": true,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"I/O\",\n          \"range\": false,\n          \"refId\": \"I/O some\",\n          \"step\": 240\n        }\n      ],\n      \"title\": \"Pressure\",\n      \"type\": \"bargauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"Busy state of all CPU cores together\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 1,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"rgba(50, 172, 45, 0.97)\",\n                \"value\": null\n              },\n              {\n                \"color\": \"rgba(237, 129, 40, 0.89)\",\n                \"value\": 85\n              },\n              {\n                \"color\": \"rgba(245, 54, 54, 0.9)\",\n                \"value\": 95\n              }\n            ]\n          },\n          \"unit\": \"percent\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 3,\n        \"x\": 3,\n        \"y\": 1\n      },\n      \"id\": 20,\n      \"links\": [],\n      \"options\": {\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showThresholdLabels\": false,\n        \"showThresholdMarkers\": true\n      },\n      \"pluginVersion\": \"9.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"100 * (1 - avg(rate(node_cpu_seconds_total{mode=\\\"idle\\\", instance=\\\"$node\\\"}[$__rate_interval])))\",\n          \"hide\": false,\n          \"instant\": true,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"range\": false,\n          \"refId\": \"A\",\n          \"step\": 240\n        }\n      ],\n      \"title\": \"CPU Busy\",\n      \"type\": \"gauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"System load  over all CPU cores together\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 1,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"rgba(50, 172, 45, 0.97)\",\n                \"value\": null\n              },\n              {\n                \"color\": \"rgba(237, 129, 40, 0.89)\",\n                \"value\": 85\n              },\n              {\n                \"color\": \"rgba(245, 54, 54, 0.9)\",\n                \"value\": 95\n              }\n            ]\n          },\n          \"unit\": \"percent\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 3,\n        \"x\": 6,\n        \"y\": 1\n      },\n      \"id\": 155,\n      \"links\": [],\n      \"options\": {\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showThresholdLabels\": false,\n        \"showThresholdMarkers\": true\n      },\n      \"pluginVersion\": \"9.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"scalar(node_load1{instance=\\\"$node\\\",job=\\\"$job\\\"}) * 100 / count(count(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}) by (cpu))\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"instant\": true,\n          \"intervalFactor\": 1,\n          \"range\": false,\n          \"refId\": \"A\",\n          \"step\": 240\n        }\n      ],\n      \"title\": \"Sys Load\",\n      \"type\": \"gauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"Non available RAM memory\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 1,\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"rgba(50, 172, 45, 0.97)\",\n                \"value\": null\n              },\n              {\n                \"color\": \"rgba(237, 129, 40, 0.89)\",\n                \"value\": 80\n              },\n              {\n                \"color\": \"rgba(245, 54, 54, 0.9)\",\n                \"value\": 90\n              }\n            ]\n          },\n          \"unit\": \"percent\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 3,\n        \"x\": 9,\n        \"y\": 1\n      },\n      \"hideTimeOverride\": false,\n      \"id\": 16,\n      \"links\": [],\n      \"options\": {\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showThresholdLabels\": false,\n        \"showThresholdMarkers\": true\n      },\n      \"pluginVersion\": \"9.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"((node_memory_MemTotal_bytes{instance=\\\"$node\\\", job=\\\"$job\\\"} - node_memory_MemFree_bytes{instance=\\\"$node\\\", job=\\\"$job\\\"}) / node_memory_MemTotal_bytes{instance=\\\"$node\\\", job=\\\"$job\\\"}) * 100\",\n          \"format\": \"time_series\",\n          \"hide\": true,\n          \"instant\": true,\n          \"intervalFactor\": 1,\n          \"range\": false,\n          \"refId\": \"A\",\n          \"step\": 240\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"(1 - (node_memory_MemAvailable_bytes{instance=\\\"$node\\\", job=\\\"$job\\\"} / node_memory_MemTotal_bytes{instance=\\\"$node\\\", job=\\\"$job\\\"})) * 100\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"instant\": true,\n          \"intervalFactor\": 1,\n          \"range\": false,\n          \"refId\": \"B\",\n          \"step\": 240\n        }\n      ],\n      \"title\": \"RAM Used\",\n      \"type\": \"gauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"Used Swap\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 1,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"rgba(50, 172, 45, 0.97)\",\n                \"value\": null\n              },\n              {\n                \"color\": \"rgba(237, 129, 40, 0.89)\",\n                \"value\": 10\n              },\n              {\n                \"color\": \"rgba(245, 54, 54, 0.9)\",\n                \"value\": 25\n              }\n            ]\n          },\n          \"unit\": \"percent\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 3,\n        \"x\": 12,\n        \"y\": 1\n      },\n      \"id\": 21,\n      \"links\": [],\n      \"options\": {\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showThresholdLabels\": false,\n        \"showThresholdMarkers\": true\n      },\n      \"pluginVersion\": \"9.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"((node_memory_SwapTotal_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"} - node_memory_SwapFree_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}) / (node_memory_SwapTotal_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"})) * 100\",\n          \"instant\": true,\n          \"intervalFactor\": 1,\n          \"range\": false,\n          \"refId\": \"A\",\n          \"step\": 240\n        }\n      ],\n      \"title\": \"SWAP Used\",\n      \"type\": \"gauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"Used Root FS\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 1,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"rgba(50, 172, 45, 0.97)\",\n                \"value\": null\n              },\n              {\n                \"color\": \"rgba(237, 129, 40, 0.89)\",\n                \"value\": 80\n              },\n              {\n                \"color\": \"rgba(245, 54, 54, 0.9)\",\n                \"value\": 90\n              }\n            ]\n          },\n          \"unit\": \"percent\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 3,\n        \"x\": 15,\n        \"y\": 1\n      },\n      \"id\": 154,\n      \"links\": [],\n      \"options\": {\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showThresholdLabels\": false,\n        \"showThresholdMarkers\": true\n      },\n      \"pluginVersion\": \"9.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"100 - ((node_filesystem_avail_bytes{instance=\\\"$node\\\",job=\\\"$job\\\",mountpoint=\\\"/\\\",fstype!=\\\"rootfs\\\"} * 100) / node_filesystem_size_bytes{instance=\\\"$node\\\",job=\\\"$job\\\",mountpoint=\\\"/\\\",fstype!=\\\"rootfs\\\"})\",\n          \"format\": \"time_series\",\n          \"instant\": true,\n          \"intervalFactor\": 1,\n          \"range\": false,\n          \"refId\": \"A\",\n          \"step\": 240\n        }\n      ],\n      \"title\": \"Root FS Used\",\n      \"type\": \"gauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"Total number of CPU cores\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 2,\n        \"x\": 18,\n        \"y\": 1\n      },\n      \"id\": 14,\n      \"links\": [],\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"none\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"auto\"\n      },\n      \"pluginVersion\": \"9.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"count(count(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}) by (cpu))\",\n          \"instant\": true,\n          \"legendFormat\": \"__auto\",\n          \"range\": false,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"CPU Cores\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"System uptime\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 1,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 4,\n        \"x\": 20,\n        \"y\": 1\n      },\n      \"hideTimeOverride\": true,\n      \"id\": 15,\n      \"links\": [],\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"none\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"auto\"\n      },\n      \"pluginVersion\": \"9.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"node_time_seconds{instance=\\\"$node\\\",job=\\\"$job\\\"} - node_boot_time_seconds{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n          \"instant\": true,\n          \"intervalFactor\": 1,\n          \"range\": false,\n          \"refId\": \"A\",\n          \"step\": 240\n        }\n      ],\n      \"title\": \"Uptime\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"Total RootFS\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 0,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"rgba(50, 172, 45, 0.97)\",\n                \"value\": null\n              },\n              {\n                \"color\": \"rgba(237, 129, 40, 0.89)\",\n                \"value\": 70\n              },\n              {\n                \"color\": \"rgba(245, 54, 54, 0.9)\",\n                \"value\": 90\n              }\n            ]\n          },\n          \"unit\": \"bytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 2,\n        \"x\": 18,\n        \"y\": 3\n      },\n      \"id\": 23,\n      \"links\": [],\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"none\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"auto\"\n      },\n      \"pluginVersion\": \"9.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"node_filesystem_size_bytes{instance=\\\"$node\\\",job=\\\"$job\\\",mountpoint=\\\"/\\\",fstype!=\\\"rootfs\\\"}\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"instant\": true,\n          \"intervalFactor\": 1,\n          \"range\": false,\n          \"refId\": \"A\",\n          \"step\": 240\n        }\n      ],\n      \"title\": \"RootFS Total\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"Total RAM\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 0,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"bytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 2,\n        \"x\": 20,\n        \"y\": 3\n      },\n      \"id\": 75,\n      \"links\": [],\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"none\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"auto\"\n      },\n      \"pluginVersion\": \"9.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"node_memory_MemTotal_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n          \"instant\": true,\n          \"intervalFactor\": 1,\n          \"range\": false,\n          \"refId\": \"A\",\n          \"step\": 240\n        }\n      ],\n      \"title\": \"RAM Total\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"Total SWAP\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 0,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"bytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 2,\n        \"x\": 22,\n        \"y\": 3\n      },\n      \"id\": 18,\n      \"links\": [],\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"none\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"auto\"\n      },\n      \"pluginVersion\": \"9.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"node_memory_SwapTotal_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n          \"instant\": true,\n          \"intervalFactor\": 1,\n          \"range\": false,\n          \"refId\": \"A\",\n          \"step\": 240\n        }\n      ],\n      \"title\": \"SWAP Total\",\n      \"type\": \"stat\"\n    },\n    {\n      \"collapsed\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"000000001\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 5\n      },\n      \"id\": 263,\n      \"panels\": [],\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"000000001\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Basic CPU / Mem / Net / Disk\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"Basic CPU info\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 40,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"smooth\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"percent\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Busy Iowait\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#890F02\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Idle\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#052B51\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Busy Iowait\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#890F02\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Idle\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#7EB26D\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Busy System\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#EAB839\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Busy User\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#0A437C\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Busy Other\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#6D1F62\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 6\n      },\n      \"id\": 77,\n      \"links\": [],\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true,\n          \"width\": 250\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"sum(irate(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\", mode=\\\"system\\\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}) by (cpu)))\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"instant\": false,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"Busy System\",\n          \"range\": true,\n          \"refId\": \"A\",\n          \"step\": 240\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum(irate(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\", mode=\\\"user\\\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}) by (cpu)))\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"Busy User\",\n          \"range\": true,\n          \"refId\": \"B\",\n          \"step\": 240\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum(irate(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\", mode=\\\"iowait\\\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}) by (cpu)))\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"Busy Iowait\",\n          \"range\": true,\n          \"refId\": \"C\",\n          \"step\": 240\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum(irate(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\", mode=~\\\".*irq\\\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}) by (cpu)))\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"Busy IRQs\",\n          \"range\": true,\n          \"refId\": \"D\",\n          \"step\": 240\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum(irate(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\",  mode!='idle',mode!='user',mode!='system',mode!='iowait',mode!='irq',mode!='softirq'}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}) by (cpu)))\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"Busy Other\",\n          \"range\": true,\n          \"refId\": \"E\",\n          \"step\": 240\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum(irate(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\", mode=\\\"idle\\\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}) by (cpu)))\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"Idle\",\n          \"range\": true,\n          \"refId\": \"F\",\n          \"step\": 240\n        }\n      ],\n      \"title\": \"CPU Basic\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"Basic memory usage\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 40,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"normal\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"bytes\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Apps\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#629E51\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Buffers\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#614D93\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Cache\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#6D1F62\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Cached\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#511749\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Committed\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#508642\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Free\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#0A437C\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#CFFAFF\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Inactive\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#584477\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"PageTables\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#0A50A1\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Page_Tables\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#0A50A1\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"RAM_Free\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#E0F9D7\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"SWAP Used\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#BF1B00\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Slab\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#806EB7\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Slab_Cache\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#E0752D\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Swap\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#BF1B00\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Swap Used\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#BF1B00\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Swap_Cache\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#C15C17\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Swap_Free\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#2F575E\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Unused\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#EAB839\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"RAM Total\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#E0F9D7\",\n                  \"mode\": \"fixed\"\n                }\n              },\n              {\n                \"id\": \"custom.fillOpacity\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.stacking\",\n                \"value\": {\n                  \"group\": false,\n                  \"mode\": \"normal\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"RAM Cache + Buffer\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#052B51\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"RAM Free\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#7EB26D\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Available\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#DEDAF7\",\n                  \"mode\": \"fixed\"\n                }\n              },\n              {\n                \"id\": \"custom.fillOpacity\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.stacking\",\n                \"value\": {\n                  \"group\": false,\n                  \"mode\": \"normal\"\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 6\n      },\n      \"id\": 78,\n      \"links\": [],\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true,\n          \"width\": 350\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"9.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"node_memory_MemTotal_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"RAM Total\",\n          \"refId\": \"A\",\n          \"step\": 240\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"node_memory_MemTotal_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"} - node_memory_MemFree_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"} - (node_memory_Cached_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"} + node_memory_Buffers_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"} + node_memory_SReclaimable_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"})\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"RAM Used\",\n          \"refId\": \"B\",\n          \"step\": 240\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"node_memory_Cached_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"} + node_memory_Buffers_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"} + node_memory_SReclaimable_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"RAM Cache + Buffer\",\n          \"refId\": \"C\",\n          \"step\": 240\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"node_memory_MemFree_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"RAM Free\",\n          \"refId\": \"D\",\n          \"step\": 240\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"(node_memory_SwapTotal_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"} - node_memory_SwapFree_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"})\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"SWAP Used\",\n          \"refId\": \"E\",\n          \"step\": 240\n        }\n      ],\n      \"title\": \"Memory Basic\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"Basic network info per interface\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 40,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"bps\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Recv_bytes_eth2\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#7EB26D\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Recv_bytes_lo\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#0A50A1\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Recv_drop_eth2\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#6ED0E0\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Recv_drop_lo\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#E0F9D7\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Recv_errs_eth2\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#BF1B00\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Recv_errs_lo\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#CCA300\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Trans_bytes_eth2\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#7EB26D\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Trans_bytes_lo\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#0A50A1\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Trans_drop_eth2\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#6ED0E0\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Trans_drop_lo\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#E0F9D7\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Trans_errs_eth2\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#BF1B00\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Trans_errs_lo\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#CCA300\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"recv_bytes_lo\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#0A50A1\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"recv_drop_eth0\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#99440A\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"recv_drop_lo\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#967302\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"recv_errs_eth0\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#BF1B00\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"recv_errs_lo\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#890F02\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"trans_bytes_eth0\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#7EB26D\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"trans_bytes_lo\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#0A50A1\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"trans_drop_eth0\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#99440A\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"trans_drop_lo\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#967302\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"trans_errs_eth0\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#BF1B00\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"trans_errs_lo\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#890F02\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*trans.*/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.transform\",\n                \"value\": \"negative-Y\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 13\n      },\n      \"id\": 74,\n      \"links\": [],\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"9.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"irate(node_network_receive_bytes_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])*8\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"recv {{device}}\",\n          \"refId\": \"A\",\n          \"step\": 240\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"irate(node_network_transmit_bytes_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])*8\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"trans {{device}} \",\n          \"refId\": \"B\",\n          \"step\": 240\n        }\n      ],\n      \"title\": \"Network Traffic Basic\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"Disk space used of all filesystems mounted\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 40,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percent\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 13\n      },\n      \"id\": 152,\n      \"links\": [],\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"9.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"100 - ((node_filesystem_avail_bytes{instance=\\\"$node\\\",job=\\\"$job\\\",device!~'rootfs'} * 100) / node_filesystem_size_bytes{instance=\\\"$node\\\",job=\\\"$job\\\",device!~'rootfs'})\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{mountpoint}}\",\n          \"refId\": \"A\",\n          \"step\": 240\n        }\n      ],\n      \"title\": \"Disk Space Used Basic\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": true,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"000000001\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 20\n      },\n      \"id\": 265,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"percentage\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 70,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"smooth\",\n                \"lineWidth\": 2,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"percent\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Idle - Waiting for something to happen\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Iowait - Waiting for I/O to complete\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Irq - Servicing interrupts\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Nice - Niced processes executing in user mode\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C15C17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Softirq - Servicing softirqs\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Steal - Time spent in other operating systems when running in a virtualized environment\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#FCE2DE\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"System - Processes executing in kernel mode\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#508642\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"User - Normal processes executing in user mode\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#5195CE\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 12,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 21\n          },\n          \"id\": 3,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 250\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"desc\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"sum(irate(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\", mode=\\\"system\\\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}) by (cpu)))\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"System - Processes executing in kernel mode\",\n              \"range\": true,\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"sum(irate(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\", mode=\\\"user\\\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}) by (cpu)))\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"User - Normal processes executing in user mode\",\n              \"range\": true,\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"sum(irate(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\", mode=\\\"nice\\\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}) by (cpu)))\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Nice - Niced processes executing in user mode\",\n              \"range\": true,\n              \"refId\": \"C\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"sum by(instance) (irate(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\", mode=\\\"iowait\\\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}) by (cpu)))\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Iowait - Waiting for I/O to complete\",\n              \"range\": true,\n              \"refId\": \"E\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"sum(irate(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\", mode=\\\"irq\\\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}) by (cpu)))\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Irq - Servicing interrupts\",\n              \"range\": true,\n              \"refId\": \"F\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"sum(irate(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\", mode=\\\"softirq\\\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}) by (cpu)))\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Softirq - Servicing softirqs\",\n              \"range\": true,\n              \"refId\": \"G\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"sum(irate(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\", mode=\\\"steal\\\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}) by (cpu)))\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Steal - Time spent in other operating systems when running in a virtualized environment\",\n              \"range\": true,\n              \"refId\": \"H\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"sum(irate(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\", mode=\\\"idle\\\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}) by (cpu)))\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Idle - Waiting for something to happen\",\n              \"range\": true,\n              \"refId\": \"J\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"CPU\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 40,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Apps\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#629E51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Buffers\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6D1F62\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cached\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Committed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#508642\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A437C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#CFFAFF\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Inactive\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#584477\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"PageTables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Page_Tables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"RAM_Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0F9D7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#806EB7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0752D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap - Swap memory usage\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C15C17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#2F575E\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Unused\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Unused - Free memory unassigned\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Hardware Corrupted - *./\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.stacking\",\n                    \"value\": {\n                      \"group\": false,\n                      \"mode\": \"normal\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 12,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 21\n          },\n          \"id\": 24,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 350\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_MemTotal_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"} - node_memory_MemFree_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"} - node_memory_Buffers_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"} - node_memory_Cached_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"} - node_memory_Slab_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"} - node_memory_PageTables_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"} - node_memory_SwapCached_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Apps - Memory used by user-space applications\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_PageTables_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"PageTables - Memory used to map between virtual and physical memory addresses\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_SwapCached_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"SwapCache - Memory that keeps track of pages that have been fetched from swap but not yet been modified\",\n              \"refId\": \"C\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_Slab_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Slab - Memory used by the kernel to cache data structures for its own use (caches like inode, dentry, etc)\",\n              \"refId\": \"D\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_Cached_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Cache - Parked file data (file content) cache\",\n              \"refId\": \"E\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_Buffers_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Buffers - Block device (e.g. harddisk) cache\",\n              \"refId\": \"F\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_MemFree_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Unused - Free memory unassigned\",\n              \"refId\": \"G\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"(node_memory_SwapTotal_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"} - node_memory_SwapFree_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"})\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Swap - Swap space used\",\n              \"refId\": \"H\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_HardwareCorrupted_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working\",\n              \"refId\": \"I\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Memory Stack\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bits out (-) / in (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 40,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"receive_packets_eth0\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#7EB26D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"receive_packets_lo\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"transmit_packets_eth0\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#7EB26D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"transmit_packets_lo\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Trans.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 12,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 33\n          },\n          \"id\": 84,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_network_receive_bytes_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])*8\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Receive\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_network_transmit_bytes_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])*8\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Transmit\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Network Traffic\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 40,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 12,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 33\n          },\n          \"id\": 156,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_filesystem_size_bytes{instance=\\\"$node\\\",job=\\\"$job\\\",device!~'rootfs'} - node_filesystem_avail_bytes{instance=\\\"$node\\\",job=\\\"$job\\\",device!~'rootfs'}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{mountpoint}}\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Disk Space Used\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"IO read (-) / write (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"iops\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Read.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#7EB26D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EF843C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#584477\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda2_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BA43A9\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda3_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F4D598\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0752D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#962D82\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#9AC48A\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#65C5DB\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F9934E\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0F9D7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#FCEACA\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F9E2D2\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 12,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 45\n          },\n          \"id\": 229,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_disk_reads_completed_total{instance=\\\"$node\\\",job=\\\"$job\\\",device=~\\\"$diskdevices\\\"}[$__rate_interval])\",\n              \"intervalFactor\": 4,\n              \"legendFormat\": \"{{device}} - Reads completed\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_disk_writes_completed_total{instance=\\\"$node\\\",job=\\\"$job\\\",device=~\\\"$diskdevices\\\"}[$__rate_interval])\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Writes completed\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Disk IOps\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes read (-) / write (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 40,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"Bps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"io time\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#890F02\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*read*./\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#7EB26D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EF843C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byType\",\n                  \"options\": \"time\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.axisPlacement\",\n                    \"value\": \"hidden\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 12,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 45\n          },\n          \"id\": 42,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_disk_read_bytes_total{instance=\\\"$node\\\",job=\\\"$job\\\",device=~\\\"$diskdevices\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Successfully read bytes\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_disk_written_bytes_total{instance=\\\"$node\\\",job=\\\"$job\\\",device=~\\\"$diskdevices\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Successfully written bytes\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"I/O Usage Read / Write\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"%util\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 40,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"io time\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#890F02\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byType\",\n                  \"options\": \"time\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.axisPlacement\",\n                    \"value\": \"hidden\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 12,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 57\n          },\n          \"id\": 127,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_disk_io_time_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\",device=~\\\"$diskdevices\\\"} [$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}}\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"I/O Utilization\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"percentage\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"bars\",\n                \"fillOpacity\": 70,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"smooth\",\n                \"lineWidth\": 2,\n                \"pointSize\": 3,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"max\": 1,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/^Guest - /\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#5195ce\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/^GuestNice - /\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#c15c17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 12,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 57\n          },\n          \"id\": 319,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"desc\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"sum by(instance) (irate(node_cpu_guest_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\", mode=\\\"user\\\"}[1m])) / on(instance) group_left sum by (instance)((irate(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[1m])))\",\n              \"hide\": false,\n              \"legendFormat\": \"Guest - Time spent running a virtual CPU for a guest operating system\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"sum by(instance) (irate(node_cpu_guest_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\", mode=\\\"nice\\\"}[1m])) / on(instance) group_left sum by (instance)((irate(node_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[1m])))\",\n              \"hide\": false,\n              \"legendFormat\": \"GuestNice - Time spent running a niced guest  (virtual CPU for guest operating system)\",\n              \"range\": true,\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"CPU spent seconds in guests (VMs)\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"000000001\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"CPU / Memory / Net / Disk\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"000000001\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 21\n      },\n      \"id\": 266,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Apps\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#629E51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Buffers\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6D1F62\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cached\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Committed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#508642\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A437C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#CFFAFF\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Inactive\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#584477\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"PageTables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Page_Tables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"RAM_Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0F9D7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#806EB7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0752D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C15C17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#2F575E\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Unused\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 54\n          },\n          \"id\": 136,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 350\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_Inactive_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Inactive - Memory which has been less recently used.  It is more eligible to be reclaimed for other purposes\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_Active_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Active - Memory that has been used more recently and usually not reclaimed unless absolutely necessary\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Memory Active / Inactive\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Apps\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#629E51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Buffers\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6D1F62\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cached\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Committed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#508642\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A437C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#CFFAFF\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Inactive\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#584477\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"PageTables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Page_Tables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"RAM_Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0F9D7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#806EB7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0752D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C15C17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#2F575E\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Unused\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*CommitLimit - *./\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 54\n          },\n          \"id\": 135,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 350\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_Committed_AS_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Committed_AS - Amount of memory presently allocated on the system\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_CommitLimit_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"CommitLimit - Amount of  memory currently available to be allocated on the system\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Memory Committed\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Apps\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#629E51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Buffers\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6D1F62\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cached\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Committed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#508642\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A437C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#CFFAFF\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Inactive\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#584477\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"PageTables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Page_Tables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"RAM_Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0F9D7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#806EB7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0752D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C15C17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#2F575E\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Unused\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 64\n          },\n          \"id\": 191,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 350\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_Inactive_file_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Inactive_file - File-backed memory on inactive LRU list\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_Inactive_anon_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Inactive_anon - Anonymous and swap cache on inactive LRU list, including tmpfs (shmem)\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_Active_file_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Active_file - File-backed memory on active LRU list\",\n              \"refId\": \"C\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_Active_anon_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Active_anon - Anonymous and swap cache on active least-recently-used (LRU) list, including tmpfs\",\n              \"refId\": \"D\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Memory Active / Inactive Detail\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Active\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#99440A\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Buffers\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#58140C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6D1F62\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cached\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Committed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#508642\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Dirty\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#B7DBAB\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Inactive\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Mapped\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"PageTables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Page_Tables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C15C17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total RAM\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total RAM + Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"VmallocUsed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 64\n          },\n          \"id\": 130,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_Writeback_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Writeback - Memory which is actively being written back to disk\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_WritebackTmp_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"WritebackTmp - Memory used by FUSE for temporary writeback buffers\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_Dirty_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Dirty - Memory which is waiting to get written back to the disk\",\n              \"refId\": \"C\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Memory Writeback and Dirty\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Apps\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#629E51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Buffers\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6D1F62\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cached\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Committed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#508642\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A437C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#CFFAFF\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Inactive\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#584477\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"PageTables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Page_Tables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"RAM_Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0F9D7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#806EB7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0752D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C15C17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#2F575E\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Unused\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"ShmemHugePages - Memory used by shared memory (shmem) and tmpfs allocated  with huge pages\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 0\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"ShmemHugePages - Memory used by shared memory (shmem) and tmpfs allocated  with huge pages\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 74\n          },\n          \"id\": 138,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 350\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_Mapped_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Mapped - Used memory in mapped pages files which have been mapped, such as libraries\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_Shmem_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Shmem - Used shared memory (shared between several processes, thus including RAM disks)\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_ShmemHugePages_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"ShmemHugePages - Memory used by shared memory (shmem) and tmpfs allocated  with huge pages\",\n              \"refId\": \"C\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_ShmemPmdMapped_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"ShmemPmdMapped - Amount of shared (shmem/tmpfs) memory backed by huge pages\",\n              \"refId\": \"D\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Memory Shared and Mapped\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Active\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#99440A\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Buffers\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#58140C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6D1F62\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cached\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Committed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#508642\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Dirty\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#B7DBAB\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Inactive\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Mapped\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"PageTables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Page_Tables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C15C17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total RAM\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total RAM + Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"VmallocUsed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 74\n          },\n          \"id\": 131,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_SUnreclaim_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"SUnreclaim - Part of Slab, that cannot be reclaimed on memory pressure\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_SReclaimable_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"SReclaimable - Part of Slab, that might be reclaimed, such as caches\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Memory Slab\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Active\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#99440A\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Buffers\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#58140C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6D1F62\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cached\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Committed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#508642\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Dirty\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#B7DBAB\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Inactive\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Mapped\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"PageTables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Page_Tables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C15C17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total RAM\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total RAM + Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"VmallocUsed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 84\n          },\n          \"id\": 70,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_VmallocChunk_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"VmallocChunk - Largest contiguous block of vmalloc area which is free\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_VmallocTotal_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"VmallocTotal - Total size of vmalloc memory area\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_VmallocUsed_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"VmallocUsed - Amount of vmalloc area which is used\",\n              \"refId\": \"C\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Memory Vmalloc\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Apps\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#629E51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Buffers\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6D1F62\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cached\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Committed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#508642\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A437C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#CFFAFF\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Inactive\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#584477\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"PageTables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Page_Tables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"RAM_Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0F9D7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#806EB7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0752D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C15C17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#2F575E\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Unused\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 84\n          },\n          \"id\": 159,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 350\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_Bounce_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Bounce - Memory used for block device bounce buffers\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Memory Bounce\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Active\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#99440A\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Buffers\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#58140C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6D1F62\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cached\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Committed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#508642\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Dirty\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#B7DBAB\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Inactive\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Mapped\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"PageTables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Page_Tables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C15C17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total RAM\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total RAM + Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"VmallocUsed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Inactive *./\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 94\n          },\n          \"id\": 129,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_AnonHugePages_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"AnonHugePages - Memory in anonymous huge pages\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_AnonPages_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"AnonPages - Memory in user pages not backed by files\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Memory Anonymous\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Apps\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#629E51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Buffers\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6D1F62\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cached\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Committed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#508642\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A437C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#CFFAFF\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Inactive\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#584477\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"PageTables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Page_Tables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"RAM_Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0F9D7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#806EB7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0752D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C15C17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#2F575E\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Unused\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 94\n          },\n          \"id\": 160,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 350\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_KernelStack_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"KernelStack - Kernel memory stack. This is not reclaimable\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_Percpu_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"PerCPU - Per CPU memory allocated dynamically by loadable modules\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Memory Kernel / CPU\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"pages\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Active\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#99440A\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Buffers\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#58140C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6D1F62\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cached\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Committed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#508642\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Dirty\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#B7DBAB\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Inactive\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Mapped\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"PageTables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Page_Tables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C15C17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total RAM\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#806EB7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total RAM + Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#806EB7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"VmallocUsed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 104\n          },\n          \"id\": 140,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_HugePages_Free{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"HugePages_Free - Huge pages in the pool that are not yet allocated\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_HugePages_Rsvd{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"HugePages_Rsvd - Huge pages for which a commitment to allocate from the pool has been made, but no allocation has yet been made\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_HugePages_Surp{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"HugePages_Surp - Huge pages in the pool above the value in /proc/sys/vm/nr_hugepages\",\n              \"refId\": \"C\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Memory HugePages Counter\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Active\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#99440A\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Buffers\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#58140C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6D1F62\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cached\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Committed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#508642\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Dirty\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#B7DBAB\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Inactive\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Mapped\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"PageTables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Page_Tables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C15C17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total RAM\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#806EB7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total RAM + Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#806EB7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"VmallocUsed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 104\n          },\n          \"id\": 71,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_HugePages_Total{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"HugePages - Total size of the pool of huge pages\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_Hugepagesize_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Hugepagesize - Huge Page size\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Memory HugePages Size\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Active\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#99440A\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Buffers\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#58140C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6D1F62\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cached\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Committed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#508642\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Dirty\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#B7DBAB\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Inactive\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Mapped\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"PageTables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Page_Tables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C15C17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total RAM\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total RAM + Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"VmallocUsed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 114\n          },\n          \"id\": 128,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_DirectMap1G_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"DirectMap1G - Amount of pages mapped as this size\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_DirectMap2M_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"DirectMap2M - Amount of pages mapped as this size\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_DirectMap4k_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"DirectMap4K - Amount of pages mapped as this size\",\n              \"refId\": \"C\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Memory DirectMap\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Apps\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#629E51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Buffers\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6D1F62\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cached\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Committed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#508642\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A437C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#CFFAFF\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Inactive\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#584477\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"PageTables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Page_Tables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"RAM_Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0F9D7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#806EB7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0752D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C15C17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#2F575E\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Unused\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 114\n          },\n          \"id\": 137,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 350\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_Unevictable_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Unevictable - Amount of unevictable memory that can't be swapped out for a variety of reasons\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_Mlocked_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"MLocked - Size of pages locked to memory using the mlock() system call\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Memory Unevictable and MLocked\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Active\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#99440A\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Buffers\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#58140C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6D1F62\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cached\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Committed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#508642\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Dirty\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#B7DBAB\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Inactive\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Mapped\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"PageTables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Page_Tables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C15C17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total RAM\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total RAM + Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"VmallocUsed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 124\n          },\n          \"id\": 132,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_memory_NFS_Unstable_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"NFS Unstable - Memory in NFS pages sent to the server, but not yet committed to the storage\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Memory NFS\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"000000001\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Memory Meminfo\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"000000001\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 267,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"pages out (-) / in (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*out/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 41\n          },\n          \"id\": 176,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_vmstat_pgpgin{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Pagesin - Page in operations\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_vmstat_pgpgout{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Pagesout - Page out operations\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Memory Pages In / Out\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"pages out (-) / in (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*out/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 41\n          },\n          \"id\": 22,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_vmstat_pswpin{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Pswpin - Pages swapped in\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_vmstat_pswpout{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Pswpout - Pages swapped out\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Memory Pages Swap In / Out\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"faults\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Apps\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#629E51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Buffers\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6D1F62\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cached\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Committed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#508642\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A437C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#CFFAFF\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Inactive\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#584477\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"PageTables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Page_Tables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"RAM_Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0F9D7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#806EB7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0752D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C15C17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#2F575E\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Unused\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Pgfault - Page major and minor fault operations\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"custom.stacking\",\n                    \"value\": {\n                      \"group\": false,\n                      \"mode\": \"normal\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 51\n          },\n          \"id\": 175,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 350\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_vmstat_pgfault{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Pgfault - Page major and minor fault operations\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_vmstat_pgmajfault{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Pgmajfault - Major page fault operations\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_vmstat_pgfault{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])  - irate(node_vmstat_pgmajfault{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Pgminfault - Minor page fault operations\",\n              \"refId\": \"C\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Memory Page Faults\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Active\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#99440A\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Buffers\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#58140C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6D1F62\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Cached\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Committed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#508642\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Dirty\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Free\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#B7DBAB\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Inactive\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Mapped\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"PageTables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Page_Tables\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Slab_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Swap_Cache\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C15C17\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#511749\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total RAM\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total RAM + Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#052B51\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Total Swap\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"VmallocUsed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 51\n          },\n          \"id\": 307,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_vmstat_oom_kill{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"oom killer invocations \",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"OOM Killer\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"000000001\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Memory Vmstat\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"000000001\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 23\n      },\n      \"id\": 293,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"seconds\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Variation*./\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#890F02\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 24\n          },\n          \"id\": 260,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_timex_estimated_error_seconds{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Estimated error in seconds\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_timex_offset_seconds{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Time offset in between local system and reference clock\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_timex_maxerror_seconds{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Maximum error in seconds\",\n              \"refId\": \"C\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Time Synchronized Drift\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 24\n          },\n          \"id\": 291,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_timex_loop_time_constant{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Phase-locked loop time adjust\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Time PLL Adjust\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Variation*./\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#890F02\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 34\n          },\n          \"id\": 168,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_timex_sync_status{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Is clock synchronized to a reliable server (1 = yes, 0 = no)\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_timex_frequency_adjustment_ratio{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Local clock frequency adjustment\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Time Synchronized Status\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"seconds\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 34\n          },\n          \"id\": 294,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_timex_tick_seconds{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Seconds between clock ticks\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_timex_tai_offset_seconds{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"International Atomic Time (TAI) offset\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Time Misc\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"000000001\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"System Timesync\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"000000001\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 24\n      },\n      \"id\": 312,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 73\n          },\n          \"id\": 62,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_procs_blocked{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Processes blocked waiting for I/O to complete\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_procs_running{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Processes in runnable state\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Processes Status\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"Enable with --collector.processes argument on node-exporter\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 73\n          },\n          \"id\": 315,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_processes_state{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{ state }}\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Processes State\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"forks / sec\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 83\n          },\n          \"id\": 148,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_forks_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Processes forks second\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Processes  Forks\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"decbytes\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Max.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 83\n          },\n          \"id\": 149,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(process_virtual_memory_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Processes virtual memory size in bytes\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"process_resident_memory_max_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Maximum amount of virtual memory available in bytes\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(process_virtual_memory_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Processes virtual memory size in bytes\",\n              \"refId\": \"C\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(process_virtual_memory_max_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Maximum amount of virtual memory available in bytes\",\n              \"refId\": \"D\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Processes Memory\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"Enable with --collector.processes argument on node-exporter\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"PIDs limit\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F2495C\",\n                      \"mode\": \"fixed\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 93\n          },\n          \"id\": 313,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_processes_pids{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Number of PIDs\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_processes_max_processes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"PIDs limit\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"PIDs Number and Limit\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"seconds\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*waiting.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 93\n          },\n          \"id\": 305,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_schedstat_running_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"CPU {{ cpu }} - seconds spent running a process\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_schedstat_waiting_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"CPU {{ cpu }} - seconds spent by processing waiting for this CPU\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Process schedule stats Running / Waiting\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"Enable with --collector.processes argument on node-exporter\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Threads limit\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F2495C\",\n                      \"mode\": \"fixed\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 103\n          },\n          \"id\": 314,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_processes_threads{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Allocated threads\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_processes_max_threads{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Threads limit\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Threads Number and Limit\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"000000001\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"System Processes\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"000000001\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 25\n      },\n      \"id\": 269,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 26\n          },\n          \"id\": 8,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_context_switches_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Context switches\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_intr_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Interrupts\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Context Switches / Interrupts\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 26\n          },\n          \"id\": 7,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_load1{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 4,\n              \"legendFormat\": \"Load 1m\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_load5{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 4,\n              \"legendFormat\": \"Load 5m\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_load15{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 4,\n              \"legendFormat\": \"Load 15m\",\n              \"refId\": \"C\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"System Load\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"hertz\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Max\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.lineStyle\",\n                    \"value\": {\n                      \"dash\": [\n                        10,\n                        10\n                      ],\n                      \"fill\": \"dash\"\n                    }\n                  },\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"blue\",\n                      \"mode\": \"fixed\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 10\n                  },\n                  {\n                    \"id\": \"custom.hideFrom\",\n                    \"value\": {\n                      \"legend\": true,\n                      \"tooltip\": false,\n                      \"viz\": false\n                    }\n                  },\n                  {\n                    \"id\": \"custom.fillBelowTo\",\n                    \"value\": \"Min\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Min\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.lineStyle\",\n                    \"value\": {\n                      \"dash\": [\n                        10,\n                        10\n                      ],\n                      \"fill\": \"dash\"\n                    }\n                  },\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"blue\",\n                      \"mode\": \"fixed\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.hideFrom\",\n                    \"value\": {\n                      \"legend\": true,\n                      \"tooltip\": false,\n                      \"viz\": false\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 36\n          },\n          \"id\": 321,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"desc\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"node_cpu_scaling_frequency_hertz{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"CPU {{ cpu }}\",\n              \"range\": true,\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"avg(node_cpu_scaling_frequency_max_hertz{instance=\\\"$node\\\",job=\\\"$job\\\"})\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Max\",\n              \"range\": true,\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"avg(node_cpu_scaling_frequency_min_hertz{instance=\\\"$node\\\",job=\\\"$job\\\"})\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Min\",\n              \"range\": true,\n              \"refId\": \"C\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"CPU Frequency Scaling\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"https://docs.kernel.org/accounting/psi.html\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Memory some\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Memory full\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"light-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"I/O some\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-blue\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"I/O full\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"light-blue\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 36\n          },\n          \"id\": 322,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(node_pressure_cpu_waiting_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"CPU some\",\n              \"range\": true,\n              \"refId\": \"CPU some\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(node_pressure_memory_waiting_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Memory some\",\n              \"range\": true,\n              \"refId\": \"Memory some\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(node_pressure_memory_stalled_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Memory full\",\n              \"range\": true,\n              \"refId\": \"Memory full\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(node_pressure_io_waiting_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"I/O some\",\n              \"range\": true,\n              \"refId\": \"I/O some\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(node_pressure_io_stalled_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"I/O full\",\n              \"range\": true,\n              \"refId\": \"I/O full\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Pressure Stall Information\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"Enable with --collector.interrupts argument on node-exporter\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Critical*./\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 0\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Max*./\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EF843C\",\n                      \"mode\": \"fixed\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 46\n          },\n          \"id\": 259,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_interrupts_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{ type }} - {{ info }}\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Interrupts Detail\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 46\n          },\n          \"id\": 306,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_schedstat_timeslices_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"CPU {{ cpu }}\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Schedule timeslices executed by each cpu\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 56\n          },\n          \"id\": 151,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_entropy_available_bits{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Entropy available to random number generators\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Entropy\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"seconds\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 56\n          },\n          \"id\": 308,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(process_cpu_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Time spent\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"CPU time spent in user and system contexts\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Max*./\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#890F02\",\n                      \"mode\": \"fixed\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 66\n          },\n          \"id\": 64,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"process_max_fds{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Maximum open file descriptors\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"process_open_fds{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Open file descriptors\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"File Descriptors\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"000000001\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"System Misc\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"000000001\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 26\n      },\n      \"id\": 304,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"temperature\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"celsius\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Critical*./\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 0\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Max*./\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EF843C\",\n                      \"mode\": \"fixed\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 59\n          },\n          \"id\": 158,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_hwmon_temp_celsius{instance=\\\"$node\\\",job=\\\"$job\\\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{ chip_name }} {{ sensor }} temp\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_hwmon_temp_crit_alarm_celsius{instance=\\\"$node\\\",job=\\\"$job\\\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{ chip_name }} {{ sensor }} Critical Alarm\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_hwmon_temp_crit_celsius{instance=\\\"$node\\\",job=\\\"$job\\\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{ chip_name }} {{ sensor }} Critical\",\n              \"refId\": \"C\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_hwmon_temp_crit_hyst_celsius{instance=\\\"$node\\\",job=\\\"$job\\\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{ chip_name }} {{ sensor }} Critical Historical\",\n              \"refId\": \"D\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_hwmon_temp_max_celsius{instance=\\\"$node\\\",job=\\\"$job\\\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{ chip_name }} {{ sensor }} Max\",\n              \"refId\": \"E\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Hardware temperature monitor\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Max*./\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EF843C\",\n                      \"mode\": \"fixed\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 59\n          },\n          \"id\": 300,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_cooling_device_cur_state{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Current {{ name }} in {{ type }}\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_cooling_device_max_state{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Max {{ name }} in {{ type }}\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Throttle cooling device\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 69\n          },\n          \"id\": 302,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_power_supply_online{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{ power_supply }} online\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Power supply\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"000000001\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Hardware Misc\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"000000001\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 27\n      },\n      \"id\": 296,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 46\n          },\n          \"id\": 297,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_systemd_socket_accepted_connections_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{ name }} Connections\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Systemd Sockets\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Failed\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F2495C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Inactive\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#FF9830\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Active\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#73BF69\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Deactivating\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#FFCB7D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Activating\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#C8F2C2\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 46\n          },\n          \"id\": 298,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_systemd_units{instance=\\\"$node\\\",job=\\\"$job\\\",state=\\\"activating\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Activating\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_systemd_units{instance=\\\"$node\\\",job=\\\"$job\\\",state=\\\"active\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Active\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_systemd_units{instance=\\\"$node\\\",job=\\\"$job\\\",state=\\\"deactivating\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Deactivating\",\n              \"refId\": \"C\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_systemd_units{instance=\\\"$node\\\",job=\\\"$job\\\",state=\\\"failed\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Failed\",\n              \"refId\": \"D\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_systemd_units{instance=\\\"$node\\\",job=\\\"$job\\\",state=\\\"inactive\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Inactive\",\n              \"refId\": \"E\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Systemd Units State\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"000000001\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Systemd\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"000000001\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 28\n      },\n      \"id\": 270,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"The number (after merges) of I/O requests completed per second for the device\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"IO read (-) / write (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"iops\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Read.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#7EB26D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EF843C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#584477\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda2_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BA43A9\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda3_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F4D598\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0752D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#962D82\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#9AC48A\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#65C5DB\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F9934E\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0F9D7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#FCEACA\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F9E2D2\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 47\n          },\n          \"id\": 9,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_disk_reads_completed_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"intervalFactor\": 4,\n              \"legendFormat\": \"{{device}} - Reads completed\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_disk_writes_completed_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Writes completed\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Disk IOps Completed\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"The number of bytes read from or written to the device per second\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes read (-) / write (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"Bps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Read.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#7EB26D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EF843C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#584477\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda2_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BA43A9\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda3_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F4D598\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0752D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#962D82\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#9AC48A\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#65C5DB\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F9934E\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0F9D7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#FCEACA\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F9E2D2\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 47\n          },\n          \"id\": 33,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_disk_read_bytes_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 4,\n              \"legendFormat\": \"{{device}} - Read bytes\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_disk_written_bytes_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Written bytes\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Disk R/W Data\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"The average time for requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"time. read (-) / write (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 30,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Read.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#7EB26D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EF843C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#584477\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda2_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BA43A9\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda3_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F4D598\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0752D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#962D82\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#9AC48A\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#65C5DB\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F9934E\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0F9D7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#FCEACA\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F9E2D2\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 57\n          },\n          \"id\": 37,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_disk_read_time_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval]) / irate(node_disk_reads_completed_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 4,\n              \"legendFormat\": \"{{device}} - Read wait time avg\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_disk_write_time_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval]) / irate(node_disk_writes_completed_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Write wait time avg\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Disk Average Wait Time\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"The average queue length of the requests that were issued to the device\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"aqu-sz\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#7EB26D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EF843C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#584477\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda2_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BA43A9\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda3_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F4D598\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0752D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#962D82\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#9AC48A\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#65C5DB\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F9934E\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0F9D7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#FCEACA\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F9E2D2\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 57\n          },\n          \"id\": 35,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_disk_io_time_weighted_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"intervalFactor\": 4,\n              \"legendFormat\": \"{{device}}\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Average Queue Size\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"The number of read and write requests merged per second that were queued to the device\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"I/Os\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"iops\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Read.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#7EB26D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EF843C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#584477\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda2_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BA43A9\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda3_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F4D598\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0752D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#962D82\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#9AC48A\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#65C5DB\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F9934E\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0F9D7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#FCEACA\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F9E2D2\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 67\n          },\n          \"id\": 133,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_disk_reads_merged_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Read merged\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_disk_writes_merged_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Write merged\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Disk R/W Merged\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"Percentage of elapsed time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is close to 100% for devices serving requests serially.  But for devices  serving requests in parallel, such as RAID arrays and modern SSDs, this number does not reflect their performance limits.\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"%util\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 30,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#7EB26D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EF843C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#584477\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda2_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BA43A9\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda3_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F4D598\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0752D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#962D82\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#9AC48A\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#65C5DB\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F9934E\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0F9D7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#FCEACA\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F9E2D2\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 67\n          },\n          \"id\": 36,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_disk_io_time_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"intervalFactor\": 4,\n              \"legendFormat\": \"{{device}} - IO\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_disk_discard_time_seconds_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"intervalFactor\": 4,\n              \"legendFormat\": \"{{device}} - discard\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Time Spent Doing I/Os\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"The number of outstanding requests at the instant the sample was taken. Incremented as requests are given to appropriate struct request_queue and decremented as they finish.\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"Outstanding req.\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#7EB26D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EF843C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#584477\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda2_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BA43A9\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda3_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F4D598\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0752D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#962D82\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#9AC48A\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#65C5DB\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F9934E\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0F9D7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#FCEACA\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F9E2D2\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 77\n          },\n          \"id\": 34,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_disk_io_now{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"interval\": \"\",\n              \"intervalFactor\": 4,\n              \"legendFormat\": \"{{device}} - IO now\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Instantaneous Queue Size\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"IOs\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"iops\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#7EB26D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EF843C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#584477\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda2_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BA43A9\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda3_.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F4D598\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#0A50A1\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#BF1B00\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0752D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#962D82\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#614D93\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#9AC48A\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#65C5DB\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F9934E\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EA6460\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde1.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E0F9D7\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd2.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#FCEACA\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde3.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F9E2D2\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 77\n          },\n          \"id\": 301,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_disk_discards_completed_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"intervalFactor\": 4,\n              \"legendFormat\": \"{{device}} - Discards completed\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_disk_discards_merged_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Discards merged\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Disk IOps Discards completed / merged\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"000000001\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Storage Disk\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"000000001\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 29\n      },\n      \"id\": 271,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 62\n          },\n          \"id\": 43,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_filesystem_avail_bytes{instance=\\\"$node\\\",job=\\\"$job\\\",device!~'rootfs'}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{mountpoint}} - Available\",\n              \"metric\": \"\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_filesystem_free_bytes{instance=\\\"$node\\\",job=\\\"$job\\\",device!~'rootfs'}\",\n              \"format\": \"time_series\",\n              \"hide\": true,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{mountpoint}} - Free\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_filesystem_size_bytes{instance=\\\"$node\\\",job=\\\"$job\\\",device!~'rootfs'}\",\n              \"format\": \"time_series\",\n              \"hide\": true,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{mountpoint}} - Size\",\n              \"refId\": \"C\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Filesystem space available\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"file nodes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 62\n          },\n          \"id\": 41,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_filesystem_files_free{instance=\\\"$node\\\",job=\\\"$job\\\",device!~'rootfs'}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{mountpoint}} - Free file nodes\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"File Nodes Free\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"files\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 72\n          },\n          \"id\": 28,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_filefd_maximum{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 4,\n              \"legendFormat\": \"Max open files\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_filefd_allocated{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Open files\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"File Descriptor\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"file Nodes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 72\n          },\n          \"id\": 219,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_filesystem_files{instance=\\\"$node\\\",job=\\\"$job\\\",device!~'rootfs'}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{mountpoint}} - File nodes total\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"File Nodes Size\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"max\": 1,\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"/ ReadOnly\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#890F02\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 82\n          },\n          \"id\": 44,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_filesystem_readonly{instance=\\\"$node\\\",job=\\\"$job\\\",device!~'rootfs'}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{mountpoint}} - ReadOnly\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_filesystem_device_error{instance=\\\"$node\\\",job=\\\"$job\\\",device!~'rootfs',fstype!~'tmpfs'}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{mountpoint}} - Device error\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Filesystem in ReadOnly / Error\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"000000001\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Storage Filesystem\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"000000001\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 30\n      },\n      \"id\": 272,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"packets out (-) / in (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"pps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"receive_packets_eth0\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#7EB26D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"receive_packets_lo\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"transmit_packets_eth0\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#7EB26D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"transmit_packets_lo\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Trans.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 47\n          },\n          \"id\": 60,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 300\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_network_receive_packets_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Receive\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_network_transmit_packets_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Transmit\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Network Traffic by Packets\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"packets out (-) / in (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"pps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Trans.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 47\n          },\n          \"id\": 142,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 300\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_network_receive_errs_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Receive errors\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_network_transmit_errs_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Transmit errors\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Network Traffic Errors\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"packets out (-) / in (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"pps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Trans.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 57\n          },\n          \"id\": 143,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 300\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_network_receive_drop_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Receive drop\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_network_transmit_drop_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Transmit drop\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Network Traffic Drop\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"packets out (-) / in (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"pps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Trans.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 57\n          },\n          \"id\": 141,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 300\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_network_receive_compressed_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Receive compressed\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_network_transmit_compressed_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Transmit compressed\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Network Traffic Compressed\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"packets out (-) / in (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"pps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Trans.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 67\n          },\n          \"id\": 146,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 300\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_network_receive_multicast_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Receive multicast\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Network Traffic Multicast\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"packets out (-) / in (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"pps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Trans.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 67\n          },\n          \"id\": 144,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 300\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_network_receive_fifo_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Receive fifo\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_network_transmit_fifo_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Transmit fifo\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Network Traffic Fifo\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"packets out (-) / in (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"pps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Trans.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 77\n          },\n          \"id\": 145,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 300\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_network_receive_frame_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Receive frame\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Network Traffic Frame\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 77\n          },\n          \"id\": 231,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 300\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_network_transmit_carrier_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Statistic transmit_carrier\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Network Traffic Carrier\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Trans.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 87\n          },\n          \"id\": 232,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 300\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_network_transmit_colls_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{device}} - Transmit colls\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Network Traffic Colls\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"entries\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"NF conntrack limit\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#890F02\",\n                      \"mode\": \"fixed\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 87\n          },\n          \"id\": 61,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_nf_conntrack_entries{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"NF conntrack entries\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_nf_conntrack_entries_limit{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"NF conntrack limit\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"NF Conntrack\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"Entries\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 97\n          },\n          \"id\": 230,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_arp_entries{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{ device }} - ARP entries\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"ARP Entries\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"decimals\": 0,\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 97\n          },\n          \"id\": 288,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_network_mtu_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{ device }} - Bytes\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"MTU\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"decimals\": 0,\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 107\n          },\n          \"id\": 280,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_network_speed_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{ device }} - Speed\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Speed\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"packets\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"decimals\": 0,\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 107\n          },\n          \"id\": 289,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_network_transmit_queue_length{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{ device }} -   Interface transmit queue length\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Queue Length\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"packetes drop (-) / process (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Dropped.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 117\n          },\n          \"id\": 290,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 300\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_softnet_processed_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"CPU {{cpu}} - Processed\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_softnet_dropped_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"CPU {{cpu}} - Dropped\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Softnet Packets\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 117\n          },\n          \"id\": 310,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 300\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_softnet_times_squeezed_total{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"CPU {{cpu}} - Squeezed\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Softnet Out of Quota\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 127\n          },\n          \"id\": 309,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 300\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_network_up{operstate=\\\"up\\\",instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{interface}} - Operational state UP\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_network_carrier{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"instant\": false,\n              \"legendFormat\": \"{{device}} - Physical link state\",\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Network Operational Status\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"000000001\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Network Traffic\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"000000001\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 31\n      },\n      \"id\": 273,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 48\n          },\n          \"id\": 63,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 300\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_sockstat_TCP_alloc{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"TCP_alloc - Allocated sockets\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_sockstat_TCP_inuse{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"TCP_inuse - Tcp sockets currently in use\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_sockstat_TCP_mem{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"TCP_mem - Used memory for tcp\",\n              \"refId\": \"C\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_sockstat_TCP_orphan{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"TCP_orphan - Orphan sockets\",\n              \"refId\": \"D\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_sockstat_TCP_tw{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"TCP_tw - Sockets waiting close\",\n              \"refId\": \"E\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Sockstat TCP\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 48\n          },\n          \"id\": 124,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 300\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_sockstat_UDPLITE_inuse{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"UDPLITE_inuse - Udplite sockets currently in use\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_sockstat_UDP_inuse{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"UDP_inuse - Udp sockets currently in use\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_sockstat_UDP_mem{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"UDP_mem - Used memory for udp\",\n              \"refId\": \"C\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Sockstat UDP\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 58\n          },\n          \"id\": 125,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 300\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_sockstat_FRAG_inuse{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"FRAG_inuse - Frag sockets currently in use\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_sockstat_RAW_inuse{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"RAW_inuse - Raw sockets currently in use\",\n              \"refId\": \"C\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Sockstat FRAG / RAW\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 58\n          },\n          \"id\": 220,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 300\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_sockstat_TCP_mem_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"mem_bytes - TCP sockets in that state\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_sockstat_UDP_mem_bytes{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"mem_bytes - UDP sockets in that state\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_sockstat_FRAG_memory{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"FRAG_memory - Used memory for frag\",\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"Sockstat Memory Size\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"sockets\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 68\n          },\n          \"id\": 126,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 300\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_sockstat_sockets_used{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Sockets_used - Sockets currently in use\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Sockstat Used\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"000000001\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Network Sockstat\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"000000001\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 32\n      },\n      \"id\": 274,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"octets out (-) / in (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": null\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Out.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 33\n          },\n          \"id\": 221,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 300\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_IpExt_InOctets{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"InOctets - Received octets\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_IpExt_OutOctets{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"OutOctets - Sent octets\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Netstat IP In / Out Octets\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"datagrams\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": null\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 33\n          },\n          \"id\": 81,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"width\": 300\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_Ip_Forwarding{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Forwarding - IP forwarding\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Netstat IP Forwarding\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"messages out (-) / in (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": null\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Out.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 43\n          },\n          \"id\": 115,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_Icmp_InMsgs{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"InMsgs -  Messages which the entity received. Note that this counter includes all those counted by icmpInErrors\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_Icmp_OutMsgs{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"OutMsgs - Messages which this entity attempted to send. Note that this counter includes all those counted by icmpOutErrors\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"ICMP In / Out\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"messages out (-) / in (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": null\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Out.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 43\n          },\n          \"id\": 50,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_Icmp_InErrors{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"InErrors - Messages which the entity received but determined as having ICMP-specific errors (bad ICMP checksums, bad length, etc.)\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"ICMP Errors\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"datagrams out (-) / in (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": null\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Out.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Snd.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 53\n          },\n          \"id\": 55,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_Udp_InDatagrams{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"InDatagrams - Datagrams received\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_Udp_OutDatagrams{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"OutDatagrams - Datagrams sent\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"UDP In / Out\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"datagrams\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": null\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 53\n          },\n          \"id\": 109,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_Udp_InErrors{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"InErrors - UDP Datagrams that could not be delivered to an application\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_Udp_NoPorts{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"NoPorts - UDP Datagrams received on a port with no listener\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_UdpLite_InErrors{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"InErrors Lite - UDPLite Datagrams that could not be delivered to an application\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_Udp_RcvbufErrors{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"RcvbufErrors - UDP buffer errors received\",\n              \"refId\": \"D\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_Udp_SndbufErrors{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"SndbufErrors - UDP buffer errors send\",\n              \"refId\": \"E\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"UDP Errors\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"datagrams out (-) / in (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": null\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Out.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Snd.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 63\n          },\n          \"id\": 299,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_Tcp_InSegs{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"instant\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"InSegs - Segments received, including those received in error. This count includes segments received on currently established connections\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_Tcp_OutSegs{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"OutSegs - Segments sent, including those on current connections but excluding those containing only retransmitted octets\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"TCP In / Out\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": null\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 63\n          },\n          \"id\": 104,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_TcpExt_ListenOverflows{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"ListenOverflows - Times the listen queue of a socket overflowed\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_TcpExt_ListenDrops{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"ListenDrops - SYNs to LISTEN sockets ignored\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_TcpExt_TCPSynRetrans{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"TCPSynRetrans - SYN-SYN/ACK retransmits to break down retransmissions in SYN, fast/timeout retransmits\",\n              \"refId\": \"C\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_Tcp_RetransSegs{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"RetransSegs - Segments retransmitted - that is, the number of TCP segments transmitted containing one or more previously transmitted octets\",\n              \"refId\": \"D\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_Tcp_InErrs{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"InErrs - Segments received in error (e.g., bad TCP checksums)\",\n              \"refId\": \"E\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_Tcp_OutRsts{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"OutRsts - Segments sent with RST flag\",\n              \"refId\": \"F\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"irate(node_netstat_TcpExt_TCPRcvQDrop{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"TCPRcvQDrop - Packets meant to be queued in rcv queue but dropped because socket rcvbuf limit hit\",\n              \"range\": true,\n              \"refId\": \"G\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"irate(node_netstat_TcpExt_TCPOFOQueue{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"TCPOFOQueue - TCP layer receives an out of order packet and has enough memory to queue it\",\n              \"range\": true,\n              \"refId\": \"H\"\n            }\n          ],\n          \"title\": \"TCP Errors\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"connections\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": null\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*MaxConn *./\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#890F02\",\n                      \"mode\": \"fixed\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 73\n          },\n          \"id\": 85,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_netstat_Tcp_CurrEstab{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"CurrEstab - TCP connections for which the current state is either ESTABLISHED or CLOSE- WAIT\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_netstat_Tcp_MaxConn{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"MaxConn - Limit on the total number of TCP connections the entity can support (Dynamic is \\\"-1\\\")\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"TCP Connections\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter out (-) / in (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": null\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Sent.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 73\n          },\n          \"id\": 91,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_TcpExt_SyncookiesFailed{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"SyncookiesFailed - Invalid SYN cookies received\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_TcpExt_SyncookiesRecv{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"SyncookiesRecv - SYN cookies received\",\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_TcpExt_SyncookiesSent{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"SyncookiesSent - SYN cookies sent\",\n              \"refId\": \"C\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"TCP SynCookie\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"connections\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": null\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 83\n          },\n          \"id\": 82,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_Tcp_ActiveOpens{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"ActiveOpens - TCP connections that have made a direct transition to the SYN-SENT state from the CLOSED state\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"irate(node_netstat_Tcp_PassiveOpens{instance=\\\"$node\\\",job=\\\"$job\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"PassiveOpens - TCP connections that have made a direct transition to the SYN-RCVD state from the LISTEN state\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"TCP Direct Transition\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"Enable with --collector.tcpstat argument on node-exporter\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"connections\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": null\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 83\n          },\n          \"id\": 320,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"node_tcp_connection_states{state=\\\"established\\\",instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"established - TCP sockets in established state\",\n              \"range\": true,\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"node_tcp_connection_states{state=\\\"fin_wait2\\\",instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"fin_wait2 - TCP sockets in fin_wait2 state\",\n              \"range\": true,\n              \"refId\": \"B\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"node_tcp_connection_states{state=\\\"listen\\\",instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"listen - TCP sockets in listen state\",\n              \"range\": true,\n              \"refId\": \"C\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"node_tcp_connection_states{state=\\\"time_wait\\\",instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"time_wait - TCP sockets in time_wait state\",\n              \"range\": true,\n              \"refId\": \"D\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"TCP Stat\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"000000001\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Network Netstat\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"000000001\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 33\n      },\n      \"id\": 279,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"seconds\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 66\n          },\n          \"id\": 40,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_scrape_collector_duration_seconds{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{collector}} - Scrape duration\",\n              \"refId\": \"A\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Node Exporter Scrape Time\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"counter\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 20,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineStyle\": {\n                  \"fill\": \"solid\"\n                },\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*error.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#F2495C\",\n                      \"mode\": \"fixed\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 66\n          },\n          \"id\": 157,\n          \"links\": [],\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_scrape_collector_success{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{collector}} - Scrape success\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"expr\": \"node_textfile_scrape_error{instance=\\\"$node\\\",job=\\\"$job\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{collector}} - Scrape textfile error (1 = true)\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Node Exporter Scrape\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"000000001\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Node Exporter\",\n      \"type\": \"row\"\n    }\n  ],\n  \"refresh\": \"1m\",\n  \"revision\": 1,\n  \"schemaVersion\": 38,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"linux\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {\n          \"selected\": false,\n          \"text\": \"default\",\n          \"value\": \"default\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Datasource\",\n        \"multi\": false,\n        \"name\": \"datasource\",\n        \"options\": [],\n        \"query\": \"prometheus\",\n        \"queryValue\": \"\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"datasource\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"definition\": \"\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Job\",\n        \"multi\": false,\n        \"name\": \"job\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(node_uname_info, job)\",\n          \"refId\": \"Prometheus-job-Variable-Query\"\n        },\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 1,\n        \"tagValuesQuery\": \"\",\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"definition\": \"label_values(node_uname_info{job=\\\"$job\\\"}, instance)\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Host\",\n        \"multi\": false,\n        \"name\": \"node\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(node_uname_info{job=\\\"$job\\\"}, instance)\",\n          \"refId\": \"Prometheus-node-Variable-Query\"\n        },\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 1,\n        \"tagValuesQuery\": \"\",\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"current\": {\n          \"selected\": false,\n          \"text\": \"[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+\",\n          \"value\": \"[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+\"\n        },\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"multi\": false,\n        \"name\": \"diskdevices\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+\",\n            \"value\": \"[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+\"\n          }\n        ],\n        \"query\": \"[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-24h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"browser\",\n  \"title\": \"Node Exporter Full\",\n  \"uid\": \"rYdddlPWk\",\n  \"version\": 92,\n  \"weekStart\": \"\"\n}"
  },
  {
    "path": "sysadmin-tools/grafana/configs/grafana/datasources/datasources.yaml",
    "content": "apiVersion: 1\ndatasources:\n  - name: Prometheus\n    type: prometheus\n    url: http://fptn-prometheus:9090\n    access: proxy\n"
  },
  {
    "path": "sysadmin-tools/grafana/configs/nginx/nginx.conf.template",
    "content": "server {\n    listen 80;\n    location / {\n        proxy_pass https://FPTN_HOST_PORT;  # WILL REPLACE\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_ssl_verify off;\n    }\n}\n"
  },
  {
    "path": "sysadmin-tools/grafana/configs/prometheus/prometheus.yaml.template",
    "content": "global:\n  scrape_interval: 15s\nscrape_configs:\n  - job_name: 'fptn-server'\n    scrape_interval: 30s\n    metrics_path: '/metrics'\n    params:\n      host: ['FPTN_HOST']\n      port: ['FPTN_PORT']\n      key: ['PROMETHEUS_SECRET_ACCESS_KEY']\n    static_configs:\n      - targets: ['fptn-proxy-server:80']\n  - job_name: 'node'\n    scrape_interval: 30s\n    static_configs:\n      - targets: ['fptn-node-exporter:9100']\n"
  },
  {
    "path": "sysadmin-tools/grafana/docker-compose.build.yml",
    "content": "volumes:\n  fptn_grafana_data: {}\n  fptn_prometheus_data: {}\nservices:\n  fptn-grafana:\n    image: grafana/grafana:11.2.0\n    restart: unless-stopped\n    ports:\n      - ${GRAFANA_PORT}:3000\n    volumes:\n      - fptn_grafana_data:/var/lib/grafana\n      - ./configs/grafana/dashboards:/etc/grafana/provisioning/dashboards\n      - ./configs/grafana/datasources:/etc/grafana/provisioning/datasources\n\n  fptn-prometheus:\n    image: prom/prometheus:v2.54.1\n    restart: unless-stopped\n    environment:\n      - PROMETHEUS_SECRET_ACCESS_KEY=${PROMETHEUS_SECRET_ACCESS_KEY}\n      - FPTN_HOST=${FPTN_HOST}\n      - FPTN_PORT=${FPTN_PORT}\n    entrypoint:\n      - sh\n      - -c\n      - |\n        sed -e \"s|PROMETHEUS_SECRET_ACCESS_KEY|${PROMETHEUS_SECRET_ACCESS_KEY}|g\" \\\n            -e \"s|FPTN_HOST|${FPTN_HOST}|g\" \\\n            -e \"s|FPTN_PORT|${FPTN_PORT}|g\" \\\n            /etc/prometheus/prometheus.yaml.template > /etc/prometheus/prometheus.yaml\n        exec prometheus --config.file=/etc/prometheus/prometheus.yaml --storage.tsdb.retention.time=30d\n    volumes:\n      - fptn_prometheus_data:/prometheus\n      - ./configs/prometheus/prometheus.yaml.template:/etc/prometheus/prometheus.yaml.template\n\n  fptn-node-exporter:\n    image: prom/node-exporter:v1.8.2\n    restart: unless-stopped\n    command: '--path.rootfs=/host'\n    pid: host\n    volumes:\n      - /:/host:ro,rslave\n\n  fptn-proxy-server:\n    build:\n      proxy-server\n    container_name: fptn-proxy-server\n    restart: unless-stopped\n    command: /usr/bin/fptn-proxy --listen-port 80\n"
  },
  {
    "path": "sysadmin-tools/grafana/docker-compose.yml",
    "content": "volumes:\n  fptn_grafana_data: {}\n  fptn_prometheus_data: {}\nservices:\n  fptn-grafana:\n    image: grafana/grafana:11.2.0\n    restart: unless-stopped\n    ports:\n      - ${GRAFANA_PORT}:3000\n    volumes:\n      - fptn_grafana_data:/var/lib/grafana\n      - ./configs/grafana/dashboards:/etc/grafana/provisioning/dashboards\n      - ./configs/grafana/datasources:/etc/grafana/provisioning/datasources\n\n  fptn-prometheus:\n    image: prom/prometheus:v2.54.1\n    restart: unless-stopped\n    environment:\n      - PROMETHEUS_SECRET_ACCESS_KEY=${PROMETHEUS_SECRET_ACCESS_KEY}\n      - FPTN_HOST=${FPTN_HOST}\n      - FPTN_PORT=${FPTN_PORT}\n    entrypoint:\n      - sh\n      - -c\n      - |\n        sed -e \"s|PROMETHEUS_SECRET_ACCESS_KEY|${PROMETHEUS_SECRET_ACCESS_KEY}|g\" \\\n            -e \"s|FPTN_HOST|${FPTN_HOST}|g\" \\\n            -e \"s|FPTN_PORT|${FPTN_PORT}|g\" \\\n            /etc/prometheus/prometheus.yaml.template > /etc/prometheus/prometheus.yaml\n        exec prometheus --config.file=/etc/prometheus/prometheus.yaml --storage.tsdb.retention.time=30d\n    volumes:\n      - fptn_prometheus_data:/prometheus\n      - ./configs/prometheus/prometheus.yaml.template:/etc/prometheus/prometheus.yaml.template\n\n  fptn-node-exporter:\n    image: prom/node-exporter:v1.8.2\n    restart: unless-stopped\n    command: '--path.rootfs=/host'\n    pid: host\n    volumes:\n      - /:/host:ro,rslave\n\n  fptn-proxy-server:\n    image: fptnvpn/fptn-proxy-server:latest\n    restart: unless-stopped\n    command: /usr/bin/fptn-proxy --listen-port 80\n"
  },
  {
    "path": "sysadmin-tools/grafana/proxy-server/.dockerignore",
    "content": "CMakeUserPresets.json\nlibs/\nbuild/\ncmake-build-debug/\n"
  },
  {
    "path": "sysadmin-tools/grafana/proxy-server/.gitignore",
    "content": "libs/\ncmake-build-debug/\n.env\ndocker-compose-data/\nCMakeUserPresets.json\nbuild/\n"
  },
  {
    "path": "sysadmin-tools/grafana/proxy-server/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.22.1)\nproject(\"fptn-proxy\")\n\nadd_executable(${CMAKE_PROJECT_NAME} src/proxy-server.cpp)\n\nset_target_properties(\n        ${CMAKE_PROJECT_NAME}\n        PROPERTIES\n        CXX_STANDARD 20\n        CXX_STANDARD_REQUIRED ON\n        CXX_EXTENSIONS OFF\n)\n\n# Rest of your CMake code...\nadd_definitions(-DBOOST_PROCESS_V2_HEADER_ONLY)\nadd_definitions(-DBOOST_ASIO_HAS_CO_AWAIT)\nadd_definitions(-DBOOST_ASIO_HAS_CO_SPAWN)\nadd_definitions(-DBOOST_ASIO_HAS_COROUTINES)\n\nset(CMAKE_INCLUDE_CURRENT_DIR ON)\n\nif (CMAKE_CXX_COMPILER_ID STREQUAL \"Clang\")\n  set(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} -Wno-unused-command-line-argument\")\nendif ()\n\nfind_package(fptn REQUIRED)\nfind_package(nlohmann_json REQUIRED)\nfind_package(fmt REQUIRED)\nfind_package(httplib REQUIRED)\nfind_package(argparse REQUIRED)\nfind_package(protobuf REQUIRED)\nfind_package(absl REQUIRED)\nfind_package(re2 REQUIRED)\nfind_package(spdlog REQUIRED)\nfind_package(OpenSSL REQUIRED)\n\nmessage(STATUS \"fptn_FOUND: ${fptn_FOUND}\")\nmessage(STATUS \"fptn_INCLUDE_DIRS: ${fptn_INCLUDE_DIRS}\")\nmessage(STATUS \"fptn_LIBRARIES: ${fptn_LIBRARIES}\")\n\n# disable pcap++\ntarget_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE\n        FPTN_IP_ADDRESS_WITHOUT_PCAP\n)\n\ntarget_include_directories(${CMAKE_PROJECT_NAME} PRIVATE\n        src/\n        \"${CMAKE_CURRENT_SOURCE_DIR}/libs/fptn/src/\"\n        \"${CMAKE_CURRENT_SOURCE_DIR}/libs/fptn/src/fptn-protocol-lib/\"\n)\ntarget_include_directories(${CMAKE_PROJECT_NAME} PRIVATE\n        ${fptn_INCLUDE_DIRS}\n        ${CMAKE_CURRENT_SOURCE_DIR}/src\n)\n\ntarget_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE\n        fptn::fptn\n        argparse::argparse\n        httplib::httplib\n        nlohmann_json::nlohmann_json\n        fmt::fmt\n        protobuf::libprotobuf\n        re2::re2\n        spdlog::spdlog\n        OpenSSL::SSL\n        OpenSSL::Crypto\n        pthread\n        dl\n        rt\n)\n\nif(APPLE)\n  target_link_options(${CMAKE_PROJECT_NAME} PRIVATE\n          -framework CoreFoundation\n          -framework Security\n          -framework SystemConfiguration\n  )\nendif()\n"
  },
  {
    "path": "sysadmin-tools/grafana/proxy-server/Dockerfile",
    "content": "# --- Stage 1: Building ---\nFROM ubuntu:24.04 AS build\n\nENV DEBIAN_FRONTEND=noninteractive\nENV TZ=Etc/UTC\n\nRUN apt-get update \\\n    && apt-get upgrade -y \\\n    && apt-get install -y cmake gcc g++ python3 python3-pip git \\\n    && pip install conan==2.22.2 numpy --break-system-packages\n\nRUN conan profile detect --force\n\nRUN mkdir -p /code\nWORKDIR /code\n\nRUN git clone https://github.com/batchar2/fptn fptn-project \\\n    && cp -rv fptn-project/.conan .conan \\\n    && echo 2\n\nCOPY ./conanfile.py /code/\nRUN conan install . --output-folder=build --build=missing -s compiler.cppstd=20 --settings build_type=Release\n\nCOPY ./CMakeLists.txt /code/\nCOPY ./src/ /code/src/\n\nRUN cd build \\\n    && cmake .. -DCMAKE_TOOLCHAIN_FILE=build/Release/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release \\\n    && cmake --build . --config Release\n\n\n# --- Stage 2: Runtime image ---\nFROM ubuntu:24.04\n\nENV DEBIAN_FRONTEND=noninteractive\nENV TZ=Etc/UTC\n\nCOPY --from=build /code/build//fptn-proxy /usr/bin/\nRUN chmod +x /usr/bin/fptn-proxy\n"
  },
  {
    "path": "sysadmin-tools/grafana/proxy-server/README.md",
    "content": "### proxy-server\n\nThis service acts as a proxy for forwarding requests to the API of the `fptn-server`.\n\nThe reason for this is that the `fptn-server` uses a custom TLS handshake, which this proxy handles correctly.  \nIt also retrieves Prometheus metrics from the server and exposes them in a format that Prometheus can consume.\n\nThis service is built using Docker.  \nCheck the [manual](../README.md) for instructions on how to build it.\n"
  },
  {
    "path": "sysadmin-tools/grafana/proxy-server/conanfile.py",
    "content": "import os\nimport subprocess\nimport shutil\n\nfrom pathlib import Path\n\nfrom conan import ConanFile\nfrom conan.tools.cmake import CMakeToolchain, CMake, cmake_layout\nfrom conan.tools.files import copy\nfrom conan.tools.scm import Git\n\n\nclass FptnProxy(ConanFile):\n    name = \"fptn-lib\"\n    version = \"0.0.0\"\n    settings = (\n        \"os\",\n        \"arch\",\n        \"compiler\",\n        \"build_type\",\n    )\n    requires = (\n        \"argparse/3.2\",\n        \"cpp-httplib/0.30.0\",\n        \"fmt/12.1.0\",\n        \"nlohmann_json/3.12.0\",\n    )\n    generators = (\"CMakeDeps\",)\n    default_options = {\n        \"*:fPIC\": True,\n        \"*:shared\": False,\n        \"fptn/*:build_only_fptn_lib\": True,\n        \"fptn/*:with_gui_client\": False,\n    }\n\n    def requirements(self):\n        self._register_local_recipe(\"fptn\", \"fptn\", \"0.0.0\")\n\n    def layout(self):\n        cmake_layout(self)\n\n    def generate(self):\n        tc = CMakeToolchain(self)\n        if \"fptn\" in self.dependencies:\n            fptn_dep = self.dependencies[\"fptn\"]\n            tc.variables[\"FPTN_INCLUDE_DIR\"] = fptn_dep.cpp_info.includedirs[0] if fptn_dep.cpp_info.includedirs else \"\"\n            tc.variables[\"FPTN_LIBRARIES\"] = fptn_dep.cpp_info.libs[0] if fptn_dep.cpp_info.libs else \"fptn\"\n            if fptn_dep.cpp_info.libdirs:\n                tc.variables[\"FPTN_LIBRARY_DIR\"] = fptn_dep.cpp_info.libdirs[0]\n        tc.generate()\n\n    def build(self):\n        cmake = CMake(self)\n        cmake.configure()\n        cmake.build()\n\n    def config_options(self):\n        pass\n\n    def _clone_fptn(self):\n        fptn_path = Path(__file__).parent / \"libs\" / \"fptn\"\n        if fptn_path.exists():\n            shutil.rmtree(fptn_path)\n\n        self.output.info(\"Cloning fptn repository...\")\n        git = Git(self)\n        git.clone(url=\"https://github.com/batchar2/fptn.git\", target=fptn_path.as_posix())\n\n    def _register_local_recipe(self, recipe, name, version, override=False, force=False):\n        self._clone_fptn()\n        script_dir = os.path.dirname(os.path.abspath(__file__))\n        recipe_rel_path = os.path.join(script_dir, \"libs\", \"fptn\")\n\n        if os.path.exists(recipe_rel_path):\n            self.output.info(f\"Exporting local recipe: {recipe_rel_path}\")\n            subprocess.run(\n                [\n                    \"conan\",\n                    \"export\",\n                    recipe_rel_path,\n                    f\"--name={name}\",\n                    f\"--version={version}\",\n                    \"--user=local\",\n                    \"--channel=local\",\n                ],\n                check=True,\n                cwd=script_dir,\n            )\n            self.requires(f\"{name}/{version}@local/local\", override=override, force=force)\n        else:\n            self.output.warning(f\"Recipe path not found: {recipe_rel_path}\")\n"
  },
  {
    "path": "sysadmin-tools/grafana/proxy-server/src/proxy-server.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#define CPPHTTPLIB_OPENSSL_SUPPORT\n#define CPPHTTPLIB_OPENSSL_SUPPORT\n\n#include <fptn-protocol-lib/https/api_client/api_client.h>  // NOLINT(build/include_order)\n#include <iostream>\n#include <string>\n\n#include <argparse/argparse.hpp>  // NOLINT(build/include_order)\n#include <httplib/httplib.h>      // NOLINT(build/include_order)\n\nvoid run_server(const int port) {\n  httplib::Server server;\n  server.Get(\"/metrics\", [](const httplib::Request& req, httplib::Response& res) {\n    const std::string host = req.get_param_value(\"host\");\n    const std::string port_str = req.get_param_value(\"port\");\n    const std::string key = req.get_param_value(\"key\");\n\n    if (host.empty() || port_str.empty() || key.empty()) {\n      res.status = 400;\n      res.body = \"Missing required parameters: host, port, key\";\n      return;\n    }\n    int port = 443;\n    try {\n      port = std::stoi(port_str);\n    } catch (...) {\n      res.status = 400;\n      res.body = \"Invalid port number\";\n      return;\n    }\n\n    try {\n      const std::string target_url = \"/api/v1/metrics/\" + key;\n      std::cout << \"Proxying to: \" << \"https://\" << host + \":\" << port_str\n                << target_url << std::endl;\n\n      fptn::protocol::https::ApiClient client(\n          host, port, fptn::protocol::https::CensorshipStrategy::kSni);\n      auto response = client.Get(target_url);\n      res.status = response.code;\n      res.body = response.body;\n    } catch (const std::exception& e) {\n      res.status = 500;\n      res.body = std::string(\"Proxy error: \") + e.what();\n    }\n  });\n  server.listen(\"0.0.0.0\", port);\n}\n\nint main(int argc, char* argv[]) {\n  // Proxy server for forwarding requests to external hosts\n  // Request format: http://localhost:8080/?host=<host>&port=<port>&key=<key>\n  // Example: http://localhost:8080/?host=192.168.1.100&port=443&key=abc123\n  argparse::ArgumentParser args(\"http-proxy\", \"1.0.1\");\n  args.add_argument(\"--listen-port\")\n      .help(\"Port to listen on (default: 8080)\")\n      .default_value(8080)\n      .scan<'i', int>();\n  try {\n    args.parse_args(argc, argv);\n    const auto listen_port = args.get<int>(\"--listen-port\");\n    run_server(listen_port);\n  } catch (const std::exception& err) {\n    std::cerr << \"Error: \" << err.what() << std::endl;\n    std::cerr << args;\n    return EXIT_FAILURE;\n  }\n  return EXIT_SUCCESS;\n}\n"
  },
  {
    "path": "sysadmin-tools/telegram-bot/.gitignore",
    "content": "logs/\nconfigs/users.list\nconfigs/servers.json\nconfigs/premium_servers.json\nconfigs/servers_censored_zone.json\n\n# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\nbuild/\ndevelop-eggs/\ndist/\ndownloads/\neggs/\n.eggs/\nlib/\nlib64/\nparts/\nsdist/\nvar/\nwheels/\nshare/python-wheels/\n*.egg-info/\n.installed.cfg\n*.egg\nMANIFEST\n\n# PyInstaller\n#  Usually these files are written by a python script from a template\n#  before PyInstaller builds the exe, so as to inject date/other infos into it.\n*.manifest\n*.spec\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.nox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*.cover\n*.py,cover\n.hypothesis/\n.pytest_cache/\ncover/\n\n# Translations\n*.mo\n*.pot\n\n# Django stuff:\n*.log\nlocal_settings.py\ndb.sqlite3\ndb.sqlite3-journal\n\n# Flask stuff:\ninstance/\n.webassets-cache\n\n# Scrapy stuff:\n.scrapy\n\n# Sphinx documentation\ndocs/_build/\n\n# PyBuilder\n.pybuilder/\ntarget/\n\n# Jupyter Notebook\n.ipynb_checkpoints\n\n# IPython\nprofile_default/\nipython_config.py\n\n# pyenv\n#   For a library or package, you might want to ignore these files since the code is\n#   intended to run in multiple environments; otherwise, check them in:\n# .python-version\n\n# pipenv\n#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.\n#   However, in case of collaboration, if having platform-specific dependencies or dependencies\n#   having no cross-platform support, pipenv may install dependencies that don't work, or not\n#   install all needed dependencies.\n#Pipfile.lock\n\n# poetry\n#   Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.\n#   This is especially recommended for binary packages to ensure reproducibility, and is more\n#   commonly ignored for libraries.\n#   https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control\n#poetry.lock\n\n# pdm\n#   Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.\n#pdm.lock\n#   pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it\n#   in version control.\n#   https://pdm.fming.dev/latest/usage/project/#working-with-version-control\n.pdm.toml\n.pdm-python\n.pdm-build/\n\n# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm\n__pypackages__/\n\n# Celery stuff\ncelerybeat-schedule\ncelerybeat.pid\n\n# SageMath parsed files\n*.sage.py\n\n# Environments\n.env\n.venv\nenv/\nvenv/\nENV/\nenv.bak/\nvenv.bak/\n\n# Spyder project settings\n.spyderproject\n.spyproject\n\n# Rope project settings\n.ropeproject\n\n# mkdocs documentation\n/site\n\n# mypy\n.mypy_cache/\n.dmypy.json\ndmypy.json\n\n# Pyre type checker\n.pyre/\n\n# pytype static type analyzer\n.pytype/\n\n# Cython debug symbols\ncython_debug/\n\n# PyCharm\n#  JetBrains specific template is maintained in a separate JetBrains.gitignore that can\n#  be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore\n#  and can be added to the global gitignore or merged into this file.  For a more nuclear\n#  option (not recommended) you can uncomment the following to ignore the entire idea folder.\n#.idea/"
  },
  {
    "path": "sysadmin-tools/telegram-bot/Dockerfile",
    "content": "FROM python:3.13-slim\n\nRUN mkdir -p /app/src\nWORKDIR /app\n\nCOPY ./src/requirements.txt /app/src/requirements.txt\nRUN pip install --no-cache-dir -r /app/src/requirements.txt\n\nCMD [\"python\", \"/app/src/bot.py\"]\n"
  },
  {
    "path": "sysadmin-tools/telegram-bot/README.md",
    "content": "## Telegram Bot\n\nThis guide will help you build, configure, and run your Telegram bot using Docker.\n\n0. **Prerequisites**\n\nDocker and Docker Compose should be installed on your system. To install it on ubuntu use [this docs](https://docs.docker.com/engine/install/ubuntu/)\n\n1. **Clone the repository:**\n\nClone the repository to any location on your server:\n\n```bash\ngit clone https://github.com/batchar2/fptn.git\n```\n\n2. **Navigate to the Grafana configuration folder:**\n\n```bash\ncd sysadmin-tools/telegram-bot\n```\n\n3. **Build the Bot**\n\nTo build the Docker image for your Telegram bot, run the following command:\n\n```\ndocker compose build\n```\n\n\n4. **Create the Configuration File:**\n\nCopy the example environment file and rename it:\n\n```bash\ncp .env.demo .env\n```\n\n5. **Edit the .env File**:\n\nTo configure your bot, you'll need to edit the .env file. This file contains sensitive information required for the bot to function properly. Follow these steps to set it up:\n\n-  Open the .env File:\n    - Use a text editor to open the .env file. You can find this file in the root directory of your project.\n- Insert Your Bot's API Token:\n    - Set `TELEGRAM_API_TOKEN` environment variable with your Telegram bot API token. This token is required for the bot to connect to Telegram's servers. You can obtain your API token from Telegram by using the [BotFather](https://t.me/BotFather) bot.\n- Set the Welcome Message (Optional):\n    - Modify the `FPTN_WELCOME_MESSAGE` variable to customize the greeting message that your bot will send to users.\n- Set Maximum User Speed Limit:\n    - Modify the `MAX_USER_SPEED_LIMIT` variable to define the maximum speed limit for users in megabits per second (Mbps). This setting controls the bandwidth cap applied to individual users. Adjust the value based on your requirements.\n- Configure Service Name:\n  - Set `SERVICE_NAME` to your preferred service name (appears in logs and messages).\n- Enable Brotli Compression:\n  - Set `ENABLE_BROTLI_COMPRESSION` to `true` for smaller tokens or `false` to disable.\n- Configure Configuration Folder Path:\n  Set `FPTN_CONFIGS_FOLDER` to specify the directory where all configuration files are stored.\n  - Default value: `./configs` (relative path to the project root)\n  - Alternative: Use an absolute path like `/etc/fptn` to point to the folder where the FPTN server keeps user data\n  - This folder will be mounted to `/etc/fptn` inside the Docker container\n  - **All configuration files must be placed in this directory:**\n    - `servers.json` - public servers list\n    - `servers_censored_zone.json` - censored region servers\n    - `users.list` - user database\n    - `premium_servers.json` - premium servers (optional)\n\nExample `.env` configuration:\n\n```bash\n# Telegram bot API token\nTELEGRAM_API_TOKEN=your_actual_api_token_here\n\n# Welcome messages for the bot\nFPTN_WELCOME_MESSAGE_EN = \"⚡ Welcome to the FPTN bot! ⚡ \\n\nUse this bot to get a VPN access token or reset it. \\n\\n\n🌐_ You can download the client from the official project website _ [https://storage.googleapis.com/fptn.org/index.html](https://storage.googleapis.com/fptn.org/index.html) \\n\\n\n👉_ To get your connection token, just type the command: _ /token \\n\n\"\n\nFPTN_WELCOME_MESSAGE_RU = \"⚡ Добро пожаловать в бот FPTN! ⚡ \\n\nЭтот бот позволяет получить токен доступа к VPN или сбросить его. \\n\\n\n🌐_ Клиент можно скачать с официального сайта проекта _ [https://storage.googleapis.com/fptn.org/index.html](https://storage.googleapis.com/fptn.org/index.html) \\n\\n\n👉_ Чтобы получить токен для подключения, просто введите команду: _ /token \\n\n\"\n\n# Enable Brotli compression for smaller tokens\nENABLE_BROTLI_COMPRESSION=true\n\n# Maximum speed limit for new users in Mbps.\nMAX_USER_SPEED_LIMIT=20\n\n# name of service\nSERVICE_NAME=FPTN.ONLINE\n\n\n# Path to the FPTN configuration folder on the host machine\n# This folder will be mounted to /etc/fptn inside the container\n# Recommended: ./configs (relative path) or /etc/fptn (absolute path)\n# Create this folder and place all config files here:\n# - servers.json\n# - servers_censored_zone.json\n# - users.list\n# - premium_servers.json\nFPTN_CONFIGS_FOLDER=./configs\n\n```\n\n6. **Initialize Configuration Folder**\n\n   Important: Before running the bot, you must set up the configuration folder and populate it with necessary files.\n\n```bash\n# Create the configuration folder (matches FPTN_CONFIGS_FOLDER in .env)\ncd ./configs\n\n# Copy demo server configurations to the config folder\ncp servers.json.demo servers.json\ncp premium_servers.json.demo premium_servers.json\ncp servers_censored_zone.json.demo servers_censored_zone.json\n\n# Create empty required files\ntouch ./configs/users.list\ntouch ./configs/premium_servers.json\n\n# Verify the folder structure\nls -la ./configs/\n```\n\nExpected folder structure after setup:\n\n```bash\ntelegram-bot/\n├── docker-compose.yml\n├── .env\n├── Dockerfile\n├── logs/\n└── configs/                       # ← ALL CONFIGURATION FILES HERE\n    ├── servers.json               # Public servers list\n    ├── servers_censored_zone.json # Censored region servers\n    ├── premium_servers.json       # Premium servers list\n    └── users.list                 # User database\n```\n\n\n7. **🟢 Configure Public Servers**:\n\nTo set up your server list, follow these steps:\n\nStart by copying the demo server list:\n\n```bash\ncp servers.json.demo server.json\n```\n\nThen open `servers.json` in any text editor and replace the example entries with your actual server information:\n\n- name: A label for your server (any value).\n- host: The public IP address or hostname of your server.\n- port: The public port your VPN server listens on.\n- md5_fingerprint: The MD5 fingerprint of your server's TLS certificate.\n\nTo get the fingerprint, run this command on the server:\n\n```bash\nopenssl x509 -noout -fingerprint -md5 -in /etc/fptn/server.crt | cut -d'=' -f2 | tr -d ':' | tr 'A-F' 'a-f'\n```\n\nCopy the value and paste it into the md5_fingerprint field.\n\n8. **🔴 Configure Servers for Censored Regions**:\n\nCopy the demo configuration:\n\n```bash\ncp servers_censored_zone.json.demo servers_censored_zone.json\n```\n\nThen open `servers_censored_zone.json` and edit it the same way as `servers.json`, using server details intended for restricted or high-surveillance regions.\n\n9. **⚡ Configure Premium Servers**:\n\n\n- Premium servers have the same structure as regular servers\n\n- These servers are only accessible to premium users\n\n- Can be used for higher speeds, special locations, or better performance\n\n\n10. **Premium User Identification in `users.list` File**\n\nPremium users are identified by a special flag in the users.list file. Here's how it works:\n\nFile Format. Each line in users.list follows this format:\n\n```bash\nusername password_hash speed_limit premium_flag\n...\nuser00001 213098467123094612309846 100 1\nuser00002 321o32908237249384233232 100 0\n```\n\nPremium Flag Values:\n- 0 = Regular user (not premium)\n- 1 = Premium user\n\n\n10. **Run the Bot**\n\nAfter setting up the environment file, start the bot with:\n\n```bash\ndocker compose build\ndocker compose up -d\n```\n\nThis command will start the bot in detached mode, allowing it to run in the background.\n\n11. **Stop the Bot**\n\nTo stop the bot, use:\n\n```bash\ndocker compose down\n```\n\nThis will stop and remove the running containers associated with your bot.\n\n"
  },
  {
    "path": "sysadmin-tools/telegram-bot/configs/premium_servers.json.demo",
    "content": "[\n    {\n        \"name\": \"[Premium] Server 1\",\n        \"host\": \"127.0.0.1\",\n        \"md5_fingerprint\": \"\",\n        \"port\": 443\n    }\n]\n"
  },
  {
    "path": "sysadmin-tools/telegram-bot/configs/servers.json.demo",
    "content": "[\n    {\n        \"name\": \"ServerName1\",\n        \"host\": \"127.0.0.1\",\n        \"md5_fingerprint\": \"\",\n        \"port\": 443\n    },\n    {\n        \"name\": \"ServerName2\",\n        \"host\": \"127.0.0.1\",\n        \"md5_fingerprint\": \"\",\n        \"port\": 443\n    }\n]\n"
  },
  {
    "path": "sysadmin-tools/telegram-bot/configs/servers_censored_zone.json.demo",
    "content": "[\n]\n"
  },
  {
    "path": "sysadmin-tools/telegram-bot/docker-compose.yml",
    "content": "services:\n  telegram-bot:\n    restart: unless-stopped\n    build:\n      context: ./\n      dockerfile: Dockerfile\n    environment:\n      - TELEGRAM_API_TOKEN=${TELEGRAM_API_TOKEN}\n      - FPTN_WELCOME_MESSAGE_EN=${FPTN_WELCOME_MESSAGE_EN}\n      - FPTN_WELCOME_MESSAGE_RU=${FPTN_WELCOME_MESSAGE_RU}\n      - MAX_USER_SPEED_LIMIT=${MAX_USER_SPEED_LIMIT}\n      - SERVICE_NAME=${SERVICE_NAME}\n      - ENABLE_BROTLI_COMPRESSION=${ENABLE_BROTLI_COMPRESSION}\n      - FPTN_CONFIGS_FOLDER=${FPTN_CONFIGS_FOLDER}\n    volumes:\n      - ./src/:/app/src:ro\n      - ./logs:/var/log/fptn_bot:rw\n      - \"${FPTN_CONFIGS_FOLDER}:/etc/fptn:rw\"\n"
  },
  {
    "path": "sysadmin-tools/telegram-bot/src/bot.py",
    "content": "import json\nimport os\nimport sys\nimport base64\nimport random\nimport string\nimport hashlib\nimport tempfile\nimport threading\nfrom pathlib import Path\n\nimport brotli\n\nfrom loguru import logger\nfrom telegram import Update, ReplyKeyboardMarkup, KeyboardButton, ReplyKeyboardRemove\nfrom telegram.constants import ParseMode\nfrom telegram.ext import (\n    Application,\n    CommandHandler,\n    MessageHandler,\n    filters,\n    CallbackContext,\n)\n\n\nTELEGRAM_API_TOKEN = os.getenv(\"TELEGRAM_API_TOKEN\")\nFPTN_WELCOME_MESSAGE_EN = os.getenv(\"FPTN_WELCOME_MESSAGE_EN\", \"\")\nFPTN_WELCOME_MESSAGE_RU = os.getenv(\"FPTN_WELCOME_MESSAGE_RU\", \"\")\n\nMAX_USER_SPEED_LIMIT = int(os.getenv(\"MAX_USER_SPEED_LIMIT\"))\nSERVICE_NAME = os.getenv(\"SERVICE_NAME\")\nUSERS_FILE = Path(os.getenv(\"USERS_FILE\", \"/etc/fptn/users.list\"))\nSERVERS_LIST_FILE = os.getenv(\"SERVERS_LIST_FILE\", \"/etc/fptn/servers.json\")\nPREMIUM_SERVERS_FILE = os.getenv(\"PREMIUM_SERVERS_FILE\", \"/etc/fptn/premium_servers.json\")\nSERVERS_CENSORED_LIST_FILE = os.getenv(\"SERVERS_CENSORED_LIST_FILE\", \"/etc/fptn/servers_censored_zone.json\")\n\nENABLE_BROTLI_COMPRESSION = os.getenv(\"ENABLE_BROTLI_COMPRESSION\", \"false\").lower() == \"true\"\n\nif os.path.exists(PREMIUM_SERVERS_FILE):\n    with open(PREMIUM_SERVERS_FILE, \"r\") as fp:\n        PREMIUM_SERVERS = json.load(fp)\nelse:\n    PREMIUM_SERVERS = []\n\nwith open(SERVERS_LIST_FILE, \"r\") as fp:\n    SERVERS_LIST = json.load(fp)\n\nif os.path.exists(SERVERS_CENSORED_LIST_FILE):\n    with open(SERVERS_CENSORED_LIST_FILE, \"r\") as fp:\n        SERVERS_CENSORED_LIST = json.load(fp)\nelse:\n    SERVERS_CENSORED_LIST = []\n\n\ndef init_logger():\n    logger.remove()  # Remove default logger\n    log_file = Path(os.getenv(\"LOG_FILE\", \"/var/log/fptn_bot.log\"))\n    log_file.parent.mkdir(parents=True, exist_ok=True)\n    logger.add(\n        str(log_file),\n        level=\"INFO\",\n        format=\"{time} - {level} - {message}\",\n        rotation=\"1 MB\",\n    )\n    logger.add(sys.stdout, level=\"INFO\", format=\"{time} - {level} - {message}\")\n\n\nclass UserManager:\n    def __init__(self, users_file: Path):\n        self.users_file = users_file\n        self.user_data_lock = threading.Lock()\n\n    def _generate_password(self, length=8) -> str:\n        return \"\".join(random.choice(string.ascii_letters) for _ in range(length))\n\n    def _hash_password(self, password: str) -> str:\n        sha256 = hashlib.sha256()\n        sha256.update(password.encode(\"utf-8\"))\n        return sha256.hexdigest()\n\n    def load_users(self) -> dict:\n        users = {}\n        if self.users_file.exists():\n            with self.users_file.open(\"r\") as file:\n                for line in file:\n                    parts = line.strip().split()\n                    if len(parts) == 4:\n                        username, hashed_password, speed, is_premium = parts[0], parts[1], parts[2], parts[3] == \"1\"\n                    elif len(parts) == 3:\n                        username, hashed_password, speed, is_premium = parts[0], parts[1], parts[2], False\n                    users[username] = {\n                        \"password\": hashed_password,\n                        \"speed\": speed,\n                        \"is_premium\": is_premium,\n                    }\n        return users\n\n    def save_users(self, users: dict):\n        self.users_file.parent.mkdir(parents=True, exist_ok=True)\n        with self.users_file.open(\"w\") as file:\n            for username, data in users.items():\n                password, speed = data[\"password\"], data[\"speed\"]\n                is_premium = \"1\" if data[\"is_premium\"] is True else \"0\"\n                file.write(f\"{username} {password} {speed} {is_premium}\\n\")\n\n    def is_premium_user(self, user_id: str) -> bool:\n        username = f\"user{user_id}\"\n        with self.user_data_lock:\n            users = self.load_users()\n            if username in users:\n                return users[username].get(\"is_premium\", False)\n        return False\n\n    def register_user(self, user_id: str) -> (str, str):\n        username = f\"user{user_id}\"\n        with self.user_data_lock:\n            users = self.load_users()\n            if username in users:\n                logger.info(f\"User {user_id} attempted to register but is already registered.\")\n                return username, None\n            else:\n                password = self._generate_password()\n                hashed_password = self._hash_password(password)\n                users[username] = {\n                    \"password\": hashed_password,\n                    \"speed\": str(MAX_USER_SPEED_LIMIT),\n                    \"is_premium\": False,\n                }\n                self.save_users(users)\n                logger.info(f\"User {user_id} registered with username: {username}\")\n                return username, password\n\n    def is_registered(self, user_id: str) -> bool:\n        username = f\"user{user_id}\"\n        with self.user_data_lock:\n            users = self.load_users()\n            return username in users\n        return False\n\n    def reset_password(self, user_id: str) -> (str, str):\n        username = f\"user{user_id}\"\n        with self.user_data_lock:\n            users = self.load_users()\n            if username in users:\n                new_password = self._generate_password()\n                hashed_password = self._hash_password(new_password)\n                current_speed = users[username][\"speed\"]\n                current_premium = users[username].get(\"is_premium\", False)\n                users[username] = {\"password\": hashed_password, \"speed\": current_speed, \"is_premium\": current_premium}\n                self.save_users(users)\n                logger.info(f\"User {user_id} reset password. Premium: {current_premium}\")\n                return username, new_password\n            else:\n                logger.info(f\"User {user_id} attempted to reset password but is not registered.\")\n                return username, None\n\n\nuser_manager = UserManager(USERS_FILE)\n\n\nasync def start(update: Update, context: CallbackContext) -> None:\n    MESSAGES = {\n        \"en\": {\n            \"welcome\": FPTN_WELCOME_MESSAGE_EN,\n            \"token_button\": \"Get access token\",\n        },\n        \"ru\": {\n            \"welcome\": FPTN_WELCOME_MESSAGE_RU,\n            \"token_button\": \"Получить токен доступа\",\n        },\n    }\n    try:\n        language_code = update.message.from_user.language_code or \"en\"\n        messages = MESSAGES.get(language_code, MESSAGES[\"en\"])\n        await update.message.reply_text(\n            messages[\"welcome\"],\n            parse_mode=ParseMode.MARKDOWN,\n            disable_web_page_preview=True,\n            reply_markup=ReplyKeyboardRemove(),\n        )\n        logger.info(f\"User {update.message.from_user.id} started the bot.\")\n    except Exception as e:\n        logger.error(f\"Error: {e}\")\n\n\ndef generate_token(username: str, password: str, is_premium: bool) -> str:\n    if is_premium is True:\n        servers = PREMIUM_SERVERS + SERVERS_LIST\n    else:\n        servers = SERVERS_LIST\n    data = {\n        \"version\": 1,\n        \"service_name\": SERVICE_NAME,\n        \"username\": username,\n        \"password\": password,\n        \"servers\": servers,\n        \"censored_zone_servers\": SERVERS_CENSORED_LIST,\n    }\n    return json.dumps(data, separators=(\",\", \":\"))\n\n\ndef generate_access_link(token: str) -> str:\n    if ENABLE_BROTLI_COMPRESSION is True:\n        compressed = brotli.compress(token.encode(\"utf-8\"), quality=11, lgwin=24, lgblock=24, mode=brotli.MODE_TEXT)\n        return \"fptnb:\" + base64.b64encode(compressed).decode(\"utf-8\").replace(\"=\", \"\")\n    return \"fptn:\" + base64.b64encode(token.encode(\"utf-8\")).decode().replace(\"=\", \"\")\n\n\nasync def get_access_token(update: Update, context: CallbackContext) -> None:\n    MESSAGES = {\n        \"en\": {\n            \"status_registered\": \"🎉✨ You have successfully registered! 🎉\",\n            \"status_reset\": \"🔑 Your token has been reset! 🔑\",\n            \"info\": \"🌐 You can download the client from https://storage.googleapis.com/fptn.org/index.html\",\n            \"click_to_copy\": \"📋💾 Tap the **token below** to copy it and paste it into the app! ⬇️\",\n            \"support_info\": \"You can support our small hobby project on [Boosty](https://boosty.to/fptn) by donating to help cover server costs. ❤️❤️❤️\",\n            \"support_benefits\": \"_Sponsors enjoy unlimited speed, access to more servers, and can optionally have their names featured in our VPN clients' credits. More details in our Telegram chat _ https://t.me/fptn\\_project \",\n        },\n        \"ru\": {\n            \"status_registered\": \"🎉✨ Вы успешно зарегистрированы! 🎉\",\n            \"status_reset\": \"🔑 Ваш токен был сброшен!🔑\",\n            \"info\": \"🌐 Клиент можно скачать с https://storage.googleapis.com/fptn.org/index.html\",\n            \"click_to_copy\": \"📋💾 Нажмите на **токен ниже**, чтобы скопировать и вставите его в приложение! ⬇️\",\n            \"support_info\": \"Вы можете поддержать наш небольшой хобби-проект на [Boosty](https://boosty.to/fptn), сделав донат для оплаты серверов. ❤️❤️❤️\",\n            \"support_benefits\": \"_Спонсорам мы убираем лимиты скорости, предоставляем доступ к большему числу серверов и, по желанию, отображаем их ники в списке благодарностей прямо в наших VPN-клиентах. Подробнее — в нашем Telegram-чате _ https://t.me/fptn\\_project \",\n        },\n    }\n    user_id = update.message.from_user.id\n    language_code = update.message.from_user.language_code or \"en\"\n    messages = MESSAGES.get(language_code, MESSAGES[\"en\"])\n\n    if user_manager.is_registered(user_id):\n        username, password = user_manager.reset_password(user_id)\n        status_message = messages[\"status_reset\"]\n    else:\n        username, password = user_manager.register_user(user_id)\n        status_message = messages[\"status_registered\"]\n\n    is_premium = user_manager.is_premium_user(user_id)\n    token = generate_token(username, password, is_premium)\n    fptn_link = generate_access_link(token)\n    click_to_copy = messages[\"click_to_copy\"]\n    info = messages[\"info\"]\n    support_info = messages[\"support_info\"]\n    support_benefits = messages[\"support_benefits\"]\n    await update.message.reply_text(\n        f\"{status_message}\\n\\n\" f\"{info}\\n\\n\" f\"{click_to_copy}\\n\\n\" f\"`{fptn_link}` \\n\\n{support_info} \\n{support_benefits}\",\n        parse_mode=ParseMode.MARKDOWN,\n        disable_web_page_preview=True,\n    )\n\n\nasync def send_credentials_file(update: Update, context: CallbackContext, token: str) -> None:\n    # Create a unique temporary file\n    with tempfile.NamedTemporaryFile(delete=False, suffix=\".fptn\") as temp_file:\n        temp_file_path = temp_file.name\n        temp_file.write(token.encode(\"utf-8\"))\n    try:\n        await context.bot.send_document(\n            chat_id=update.message.chat_id,\n            document=open(temp_file_path, \"rb\"),\n            filename=f\"{SERVICE_NAME}.fptn\",\n        )\n        logger.info(f\"Sent credentials file to user {update.message.from_user.id}.\")\n    except Exception as e:\n        logger.error(f\"Failed to send credentials file: {e}\")\n    finally:\n        if os.path.exists(temp_file_path):\n            os.remove(temp_file_path)\n\n\ndef main() -> None:\n    if not TELEGRAM_API_TOKEN:\n        logger.error(\"API_TOKEN is not set. Please set the TELEGRAM_API_TOKEN environment variable.\")\n        sys.exit(1)\n\n    application = Application.builder().token(TELEGRAM_API_TOKEN).build()\n    application.add_handler(CommandHandler(\"start\", start))\n    application.add_handler(CommandHandler(\"token\", get_access_token))\n    # depricated old function\n    application.add_handler(CommandHandler(\"token_mac\", get_access_token))\n\n    # UPDATE KEYBOARD (OLD VERSION)\n    application.add_handler(MessageHandler(filters.TEXT & filters.Regex(\"Get access file\"), start))\n    logger.info(\"Bot started and is polling for messages.\")\n    application.run_polling()\n\n\nif __name__ == \"__main__\":\n    init_logger()\n    main()\n"
  },
  {
    "path": "sysadmin-tools/telegram-bot/src/requirements.txt",
    "content": "anyio==4.4.0\nbrotli==1.2.0\ncertifi==2024.7.4\nh11==0.14.0\nhttpcore==1.0.5\nhttpx==0.27.2\nidna==3.8\nloguru==0.7.2\npython-telegram-bot==21.4\nsniffio==1.3.1\n"
  },
  {
    "path": "tests/CMakeLists.txt",
    "content": "find_package(GTest REQUIRED)\n\nadd_subdirectory(common)\nadd_subdirectory(server)\nadd_subdirectory(fptnlib)\n\nadd_custom_target(\n  run_tests\n  COMMAND ${CMAKE_CTEST_COMMAND}\n  DEPENDS tests_common common\n  COMMENT \"Running all tests\"\n  VERBATIM)\n"
  },
  {
    "path": "tests/common/CMakeLists.txt",
    "content": "find_package(GTest REQUIRED)\nfind_package(Boost REQUIRED)\nfind_package(OpenSSL REQUIRED)\nfind_package(spdlog REQUIRED)\nfind_package(fmt REQUIRED)\nfind_package(PcapPlusPlus REQUIRED)\nfind_package(nlohmann_json REQUIRED)\nfind_package(jwt-cpp REQUIRED)\nfind_package(Boost REQUIRED COMPONENTS random filesystem)\n\nif(WIN32)\n  set(TUNTAP_LIB Wintun rpcrt4)\n  add_definitions(-D_WIN32_WINNT=0x0601)\nelse()\n  set(TUNTAP_LIB tuntap++)\nendif()\n\nset(LIBS\n    GTest::gtest\n    GTest::gtest_main\n    Boost::boost\n    Boost::random\n    Boost::filesystem\n    OpenSSL::SSL\n    OpenSSL::Crypto\n    nlohmann_json::nlohmann_json\n    jwt-cpp::jwt-cpp\n    spdlog::spdlog\n    fmt::fmt\n    PcapPlusPlus::PcapPlusPlus\n    fptn-protocol-lib_static\n    ${TUNTAP_LIB})\n\n# --- Channel test ---\nadd_executable(ChannelTest data/ChannelTest.cpp)\ntarget_link_libraries(ChannelTest PRIVATE ${LIBS})\nadd_test(NAME ChannelTest COMMAND ChannelTest)\n\n# --- IPv4 Generator test ---\nadd_executable(IPv4GeneratorTest network/IPv4GeneratorTest.cpp)\ntarget_link_libraries(IPv4GeneratorTest PRIVATE ${LIBS})\nadd_test(NAME IPv4GeneratorTest COMMAND IPv4GeneratorTest)\n\n# --- IPv6 Generator test ---\nadd_executable(IPv6GeneratorTest network/IPv6GeneratorTest.cpp)\ntarget_link_libraries(IPv6GeneratorTest PRIVATE ${LIBS})\nadd_test(NAME IPv6GeneratorTest COMMAND IPv6GeneratorTest)\n\n# --- IPv6 Utils test ---\nadd_executable(IPv6UtilsTest network/IPv6UtilsTest.cpp)\ntarget_link_libraries(IPv6UtilsTest PRIVATE ${LIBS})\nadd_test(NAME IPv6UtilsTest COMMAND IPv6UtilsTest)\n\n# --- TUN Device test ---\nadd_executable(TunDeviceTest network/TunDeviceTest.cpp)\ntarget_link_libraries(TunDeviceTest PRIVATE ${LIBS})\nadd_test(NAME TunDeviceTest COMMAND TunDeviceTest)\n\n# --- Client Stop race condition test ---\nadd_executable(ClientStopRaceTest network/ClientStopRaceTest.cpp)\ntarget_link_libraries(ClientStopRaceTest PRIVATE GTest::gtest GTest::gtest_main)\nadd_test(NAME ClientStopRaceTest COMMAND ClientStopRaceTest)\n"
  },
  {
    "path": "tests/common/data/ChannelTest.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include <memory>\n#include <utility>\n\n#include <gtest/gtest.h>  // NOLINT(build/include_order)\n\n#include \"common/data/channel.h\"\n#include \"common/network/ip_packet.h\"\n\nTEST(ChannelTest, PushAndWaitForPacket) {\n  fptn::common::data::Channel channel(10);\n\n  fptn::common::network::IPPacketData packet_data;\n  const char* test_data = \"packet-data\";\n  packet_data.insert(\n      packet_data.end(), test_data, test_data + strlen(test_data));\n\n  auto packet =\n      std::make_unique<fptn::common::network::IPPacket>(std::move(packet_data),\n          static_cast<fptn::ClientID>(1),  // Cast to proper ClientID type\n          pcpp::LINKTYPE_IPV4);\n\n  channel.Push(std::move(packet));\n  EXPECT_NE(channel.WaitForPacket(std::chrono::milliseconds(100)), nullptr);\n}\n\nTEST(ChannelTest, WaitForPacketTimeout) {\n  fptn::common::data::Channel channel(10);\n  EXPECT_EQ(channel.WaitForPacket(std::chrono::milliseconds(100)), nullptr);\n}\n"
  },
  {
    "path": "tests/common/network/ClientStopRaceTest.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Pavel Shpilev\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n// Reproduces the use-after-free race condition in vpn::http::Client::Stop().\n//\n// The bug: Stop() called ws_.reset() (destroying the WebSocket) BEFORE\n// th_.join() (waiting for Run() to exit). The Run() thread was still\n// executing ws_->Run() on the destroyed object.\n//\n// The fix: join the thread first, then reset the shared_ptr.\n//\n// This test uses a mock to exercise the exact same pattern.\n\n#include <atomic>\n#include <chrono>\n#include <memory>\n#include <mutex>\n#include <thread>\n\n#include <gtest/gtest.h>  // NOLINT(build/include_order)\n\nnamespace {\n\n// Simulates WebsocketClient: Run() blocks until Stop() is called.\nclass MockWebSocket {\n public:\n  MockWebSocket() : stopped_(false), run_entered_(false) {}\n\n  void Run() {\n    run_entered_ = true;\n    std::unique_lock<std::mutex> lock(mutex_);\n    cv_.wait(lock, [this]() { return stopped_.load(); });\n    // Simulate cleanup work after stop signal\n    std::this_thread::sleep_for(std::chrono::microseconds(100));\n    // Access member after wakeup — crashes if object is destroyed\n    run_exited_ = true;\n  }\n\n  bool Stop() {\n    stopped_ = true;\n    cv_.notify_all();\n    return true;\n  }\n\n  bool RunEntered() const { return run_entered_; }\n  bool RunExited() const { return run_exited_; }\n\n private:\n  std::mutex mutex_;\n  std::condition_variable cv_;\n  std::atomic<bool> stopped_;\n  std::atomic<bool> run_entered_;\n  std::atomic<bool> run_exited_{false};\n};\n\n// Reproduces the original buggy Client::Stop() pattern.\n// With the bug: ws_.reset() before th_.join() → use-after-free.\n// With the fix: th_.join() before ws_.reset() → safe.\nclass MockClient {\n public:\n  bool Start() {\n    running_ = true;\n    ws_ = std::make_shared<MockWebSocket>();\n    th_ = std::thread(&MockClient::RunLoop, this);\n    return true;\n  }\n\n  // Fixed version: join before reset\n  bool StopFixed() {\n    if (!running_) {\n      return false;\n    }\n    running_ = false;\n\n    if (ws_) {\n      ws_->Stop();\n    }\n    if (th_.joinable()) {\n      th_.join();\n    }\n    ws_.reset();\n    return true;\n  }\n\n  bool IsRunning() const { return running_; }\n\n  bool WsRunExited() const { return ws_ && ws_->RunExited(); }\n\n private:\n  void RunLoop() {\n    while (running_) {\n      if (ws_) {\n        ws_->Run();\n      }\n      if (!running_) {\n        break;\n      }\n    }\n  }\n\n  std::thread th_;\n  std::mutex mutex_;\n  std::atomic<bool> running_{false};\n  std::shared_ptr<MockWebSocket> ws_;\n};\n\n}  // namespace\n\n// Verify Stop() completes cleanly without crash\nTEST(ClientStopRaceTest, StopWhileRunning) {\n  MockClient client;\n  ASSERT_TRUE(client.Start());\n\n  // Let Run() enter the blocking call\n  std::this_thread::sleep_for(std::chrono::milliseconds(10));\n\n  // Stop should complete without crash or hang\n  EXPECT_TRUE(client.StopFixed());\n  EXPECT_FALSE(client.IsRunning());\n}\n\n// Rapid start/stop cycles stress the race window\nTEST(ClientStopRaceTest, RapidStartStopCycles) {\n  constexpr int kCycles = 50;\n  for (int i = 0; i < kCycles; ++i) {\n    MockClient client;\n    ASSERT_TRUE(client.Start());\n    // Vary the timing to hit different race windows\n    if (i % 3 == 0) {\n      std::this_thread::sleep_for(std::chrono::milliseconds(1));\n    }\n    EXPECT_TRUE(client.StopFixed());\n  }\n}\n\n// Stop immediately after Start (thread may not have entered Run yet)\nTEST(ClientStopRaceTest, ImmediateStop) {\n  MockClient client;\n  ASSERT_TRUE(client.Start());\n  EXPECT_TRUE(client.StopFixed());\n  EXPECT_FALSE(client.IsRunning());\n}\n\n// Verify Run() thread fully exits before ws_ is destroyed\nTEST(ClientStopRaceTest, ThreadExitsBeforeReset) {\n  MockClient client;\n  ASSERT_TRUE(client.Start());\n  std::this_thread::sleep_for(std::chrono::milliseconds(10));\n\n  // After StopFixed, the ws_ shared_ptr is reset.\n  // The fact that we reach here without ASan/TSan errors confirms\n  // the thread finished before the object was destroyed.\n  EXPECT_TRUE(client.StopFixed());\n}\n"
  },
  {
    "path": "tests/common/network/IPv4GeneratorTest.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include <fmt/core.h>  // NOLINT(build/include_order)\n\n#include <gtest/gtest.h>  // NOLINT(build/include_order)\n\n#include \"common/network/ipv4_generator.h\"\n\nTEST(IPv4GeneratorTest, InitialAddress) {\n  fptn::common::network::IPv4AddressGenerator generator(\n      fptn::common::network::IPv4Address(\"192.168.1.0\"), 24);\n  EXPECT_EQ(generator.NumAvailableAddresses(), 254);\n  const auto address1 = generator.GetNextAddress();\n  EXPECT_EQ(address1.ToString(), \"192.168.1.1\");\n\n  const auto address2 = generator.GetNextAddress();\n  EXPECT_EQ(address2.ToString(), \"192.168.1.2\");\n\n  const auto address3 = generator.GetNextAddress();\n  EXPECT_EQ(address3.ToString(), \"192.168.1.3\");\n}\n\nTEST(IPv4GeneratorTest, NumAvaliableAddresses) {\n  fptn::common::network::IPv4AddressGenerator generator(\n      fptn::common::network::IPv4Address(\"192.168.0.0\"), 24);\n  EXPECT_EQ(generator.NumAvailableAddresses(), 254);\n\n  for (int i = 1; i <= 254; i++) {\n    const auto address = generator.GetNextAddress();\n    EXPECT_EQ(address.ToString(), fmt::format(\"192.168.0.{}\", i));\n  }\n\n  {  // the repeat test\n    const auto address = generator.GetNextAddress();\n    EXPECT_EQ(address.ToString(), \"192.168.0.1\");\n  }\n}\n\nTEST(IPv4GeneratorTest, SmallDifficultNetsMask) {\n  fptn::common::network::IPv4AddressGenerator generator(\n      fptn::common::network::IPv4Address(\"192.168.0.0\"), 28);\n  EXPECT_EQ(generator.NumAvailableAddresses(), 14);\n  for (int i = 1; i <= 14; i++) {\n    const auto address = generator.GetNextAddress();\n    EXPECT_EQ(address.ToString(), fmt::format(\"192.168.0.{}\", i));\n  }\n}\n\nTEST(IPGeneratorTest, BigDifficultNetsMask) {\n  fptn::common::network::IPv4AddressGenerator generator(\n      fptn::common::network::IPv4Address(\"192.168.0.0\"), 16);\n  EXPECT_EQ(generator.NumAvailableAddresses(), 65534);\n\n  std::uint32_t counter = 0;\n  for (int i = 0; i <= 255; i++) {\n    for (int j = 0; j <= 255; j++) {\n      if ((i == 0 && j == 0) || (i == 255 && j == 255)) {\n        continue;  // network address\n      }\n      const auto address = generator.GetNextAddress();\n      EXPECT_EQ(address.ToString(), fmt::format(\"192.168.{}.{}\", i, j));\n      counter += 1;\n    }\n  }\n  EXPECT_EQ(counter, 65534);\n}\n"
  },
  {
    "path": "tests/common/network/IPv6GeneratorTest.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include <string>\n\n#include <fmt/core.h>  // NOLINT(build/include_order)\n\n#include <gtest/gtest.h>  // NOLINT(build/include_order)\n\n#include <boost/asio/ip/address_v6.hpp>\n\n#include \"common/network/ipv6_generator.h\"\n\nnamespace {\n// Helper: produce the canonical compressed IPv6 string for a given\n// full-hex address, so test expectations match inet_ntop / pcpp output.\nstd::string canonical(const std::string& full_hex) {\n  return boost::asio::ip::make_address_v6(full_hex).to_string();\n}\n}  // namespace\n\nTEST(IPv6GeneratorTest, InitialAddress) {\n  fptn::common::network::IPv6AddressGenerator generator(\n      fptn::common::network::IPv6Address(\n          \"2001:0db8:0000:0000:0000:0000:0000:0000\"),\n      120);\n  EXPECT_EQ(generator.NumAvailableAddresses(), 254);\n\n  const auto address1 = generator.GetNextAddress();\n  EXPECT_EQ(address1.ToString(),\n      canonical(\"2001:0db8:0000:0000:0000:0000:0000:0001\"));\n\n  const auto address2 = generator.GetNextAddress();\n  EXPECT_EQ(address2.ToString(),\n      canonical(\"2001:0db8:0000:0000:0000:0000:0000:0002\"));\n\n  const auto address3 = generator.GetNextAddress();\n  EXPECT_EQ(address3.ToString(),\n      canonical(\"2001:0db8:0000:0000:0000:0000:0000:0003\"));\n}\n\nTEST(IPv6GeneratorTest, NumAvaliableAddresses) {\n  fptn::common::network::IPv6AddressGenerator generator(\n      fptn::common::network::IPv6Address(\n          \"2001:0db8:0001:0000:0000:0000:0000:0000\"),\n      120);\n  EXPECT_EQ(generator.NumAvailableAddresses(), 254);\n\n  for (int i = 1; i <= 254; i++) {\n    const auto address = generator.GetNextAddress();\n    EXPECT_EQ(address.ToString(),\n        canonical(\n            fmt::format(\"2001:0db8:0001:0000:0000:0000:0000:{:04x}\", i)));\n  }\n\n  {  // Repeat test\n    const auto address = generator.GetNextAddress();\n    EXPECT_EQ(address.ToString(),\n        canonical(\"2001:0db8:0001:0000:0000:0000:0000:0001\"));\n  }\n}\n\nTEST(IPv6GeneratorTest, SmallDifficultNetsMask) {\n  fptn::common::network::IPv6AddressGenerator generator(\n      fptn::common::network::IPv6Address(\n          \"2001:0db8:0002:0000:0000:0000:0000:0000\"),\n      124);\n  EXPECT_EQ(generator.NumAvailableAddresses(), 14);\n\n  for (int i = 1; i <= 14; i++) {\n    const auto address = generator.GetNextAddress();\n    EXPECT_EQ(address.ToString(),\n        canonical(\n            fmt::format(\"2001:0db8:0002:0000:0000:0000:0000:{:04x}\", i)));\n  }\n}\n\nTEST(IPv6GeneratorTest, BigDifficultNetsMask) {\n  fptn::common::network::IPv6AddressGenerator generator(\n      fptn::common::network::IPv6Address(\n          \"2001:0db8:0003:0000:0000:0000:0000:0000\"),\n      112);\n  EXPECT_EQ(generator.NumAvailableAddresses(), (1ULL << 16) - 2);\n\n  std::uint32_t counter = 0;\n  for (int i = 0; i <= 255; i++) {\n    for (int j = 0; j <= 255; j++) {\n      if ((i == 0 && j == 0) || (i == 255 && j == 255)) {\n        continue;  // Skip network and broadcast addresses\n      }\n      const auto address = generator.GetNextAddress();\n      EXPECT_EQ(address.ToString(),\n          canonical(fmt::format(\n              \"2001:0db8:0003:0000:0000:0000:{:02x}{:02x}:{:02x}{:02x}\", 0, 0,\n              i, j)));\n      counter += 1;\n    }\n  }\n  EXPECT_EQ(counter, (1ULL << 16) - 2);\n}\n"
  },
  {
    "path": "tests/common/network/IPv6UtilsTest.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Pavel Shpilev\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include <string>\n#include <vector>\n\n#include <gtest/gtest.h>  // NOLINT(build/include_order)\n\n#include <pcapplusplus/IPv6Layer.h>  // NOLINT(build/include_order)\n\n#include \"common/network/ipv6_generator.h\"\n#include \"common/network/ipv6_utils.h\"\n\n// This test demonstrates that the IPv6 string representation from the\n// generator must match the format produced by pcpp::IPv6Address::toString(),\n// because the server NAT table uses these strings as map keys.\n// If the formats differ, the NAT lookup fails and IPv6 response packets\n// are silently dropped.\nTEST(IPv6UtilsTest, ToStringMatchesPcppFormat) {\n  // Simulate what the IPv6 generator does: convert an address to uint128,\n  // then back to string using ipv6::toString()\n  const std::string original = \"fc00:1::2\";\n  const auto boost_addr = boost::asio::ip::make_address_v6(original);\n  const auto uint128_val = fptn::common::network::ipv6::toUInt128(boost_addr);\n  const std::string generator_str =\n      fptn::common::network::ipv6::toString(uint128_val);\n\n  // Simulate what happens when a response packet arrives: pcpp extracts\n  // the IPv6 address and we call toString() on it\n  const pcpp::IPv6Address pcpp_addr(original);\n  const std::string pcpp_str = pcpp_addr.toString();\n\n  // These MUST match, otherwise the NAT table lookup will fail\n  EXPECT_EQ(generator_str, pcpp_str)\n      << \"IPv6 string format mismatch between generator ('\" << generator_str\n      << \"') and pcpp ('\" << pcpp_str\n      << \"'). This causes NAT table lookups to fail, \"\n         \"dropping all IPv6 response packets.\";\n}\n\n// Test with the actual server default subnet\nTEST(IPv6UtilsTest, ServerDefaultSubnetMatchesPcpp) {\n  // Server defaults from CMakeLists.txt:\n  //   FPTN_SERVER_DEFAULT_NET_ADDRESS_IP6=\"fc00:1::\"\n  //   Mask: /112\n  fptn::common::network::IPv6AddressGenerator generator(\n      fptn::common::network::IPv6Address(\"fc00:1::\"), 112);\n\n  // Generate a few addresses and verify they match pcpp's format\n  for (int i = 1; i <= 5; i++) {\n    const auto generated = generator.GetNextAddress();\n    const auto& gen_str = generated.ToString();\n\n    // Round-trip through pcpp (simulates what happens on packet receive)\n    const pcpp::IPv6Address pcpp_addr(gen_str);\n    const std::string pcpp_str = pcpp_addr.toString();\n\n    EXPECT_EQ(gen_str, pcpp_str)\n        << \"Mismatch for generated address #\" << i << \": generator='\"\n        << gen_str << \"' vs pcpp='\" << pcpp_str << \"'\";\n  }\n}\n\n// Test with various address patterns that exercise zero-compression\nTEST(IPv6UtilsTest, ToStringFormatsMatchPcppForVariousAddresses) {\n  const std::vector<std::string> test_addresses = {\n      \"::1\",\n      \"fe80::1\",\n      \"2001:db8::1\",\n      \"fc00:1::2\",\n      \"2001:db8:85a3::8a2e:370:7334\",\n      \"ff02::1\",\n      \"::\",\n  };\n\n  for (const auto& addr_str : test_addresses) {\n    const auto boost_addr = boost::asio::ip::make_address_v6(addr_str);\n    const auto uint128_val =\n        fptn::common::network::ipv6::toUInt128(boost_addr);\n    const std::string utils_str =\n        fptn::common::network::ipv6::toString(uint128_val);\n\n    const pcpp::IPv6Address pcpp_addr(addr_str);\n    const std::string pcpp_str = pcpp_addr.toString();\n\n    EXPECT_EQ(utils_str, pcpp_str)\n        << \"Format mismatch for input '\" << addr_str << \"': utils='\"\n        << utils_str << \"' vs pcpp='\" << pcpp_str << \"'\";\n  }\n}\n"
  },
  {
    "path": "tests/common/network/TunDeviceTest.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Pavel Shpilev\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include <algorithm>\n#include <atomic>\n#include <chrono>\n#include <cstdint>\n#include <cstring>\n#include <memory>\n#include <mutex>\n#include <string>\n#include <thread>\n#include <utility>\n#include <vector>\n\n#include <queue>\n\n#include <gtest/gtest.h>  // NOLINT(build/include_order)\n\n#include \"common/network/ip_packet.h\"\n#include \"common/network/net_interface.h\"\n\n// ===== Minimal valid IP packet builders for testing =====\n\nnamespace {\n\n// Minimal valid IPv4 header (20 bytes): src=10.0.0.1, dst=10.0.0.2\nstd::vector<std::uint8_t> MakeMinimalIPv4Packet() {\n  return {\n      0x45,\n      0x00,\n      0x00,\n      0x14,  // ver=4, IHL=5, total_len=20\n      0x00,\n      0x01,\n      0x00,\n      0x00,  // id=1, flags=0, frag=0\n      0x40,\n      0x00,\n      0xf5,\n      0xc2,  // TTL=64, proto=HOPOPT, checksum\n      0x0a,\n      0x00,\n      0x00,\n      0x01,  // src: 10.0.0.1\n      0x0a,\n      0x00,\n      0x00,\n      0x02,  // dst: 10.0.0.2\n  };\n}\n\n// Minimal valid IPv6 header (40 bytes): src=fc00:1::1, dst=fc00:1::2\nstd::vector<std::uint8_t> MakeMinimalIPv6Packet() {\n  return {\n      0x60,\n      0x00,\n      0x00,\n      0x00,  // ver=6, traffic class, flow label\n      0x00,\n      0x00,\n      0x3b,\n      0x40,  // payload_len=0, next=NoNext(59), hop=64\n      // src: fc00:1::1\n      0xfc,\n      0x00,\n      0x00,\n      0x01,\n      0x00,\n      0x00,\n      0x00,\n      0x00,\n      0x00,\n      0x00,\n      0x00,\n      0x00,\n      0x00,\n      0x00,\n      0x00,\n      0x01,\n      // dst: fc00:1::2\n      0xfc,\n      0x00,\n      0x00,\n      0x01,\n      0x00,\n      0x00,\n      0x00,\n      0x00,\n      0x00,\n      0x00,\n      0x00,\n      0x00,\n      0x00,\n      0x00,\n      0x00,\n      0x02,\n  };\n}\n\n}  // namespace\n\n// ===== Mock TUN device with shared state for testing GenericTunInterface =====\n\nnamespace {\n\nstruct SharedMockState {\n  std::mutex mutex;\n  std::vector<std::vector<std::uint8_t>> written_packets;\n  std::queue<std::vector<std::uint8_t>> read_queue;\n\n  void RecordWrite(const void* data, int size) {\n    std::scoped_lock lock(mutex);\n    written_packets.emplace_back(static_cast<const std::uint8_t*>(data),\n        static_cast<const std::uint8_t*>(data) + size);\n  }\n\n  int FeedRead(void* buffer, int max_size) {\n    std::scoped_lock lock(mutex);\n    if (read_queue.empty()) {\n      return 0;\n    }\n    const auto& front = read_queue.front();\n    const int sz = std::min(max_size, static_cast<int>(front.size()));\n    std::memcpy(buffer, front.data(), sz);\n    read_queue.pop();\n    return sz;\n  }\n\n  void InjectPacket(std::vector<std::uint8_t> data) {\n    std::scoped_lock lock(mutex);\n    read_queue.push(std::move(data));\n  }\n\n  void Clear() {\n    std::scoped_lock lock(mutex);\n    written_packets.clear();\n    while (!read_queue.empty()) {\n      read_queue.pop();\n    }\n  }\n};\n\n// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)\nstd::shared_ptr<SharedMockState> g_mock_state;\n\nclass MockTunDevice {\n public:\n  bool Open(const std::string& name) {\n    name_ = name;\n    return true;\n  }\n  // cppcheck-suppress functionStatic\n  void Close() {}  // NOLINT(readability-convert-member-functions-to-static)\n  [[nodiscard]] const std::string& GetName() const { return name_; }\n  // cppcheck-suppress functionStatic\n  // NOLINTNEXTLINE(readability-convert-member-functions-to-static)\n  bool ConfigureIPv4(const std::string& /*addr*/, int /*mask*/) { return true; }\n  // cppcheck-suppress functionStatic\n  // NOLINTNEXTLINE(readability-convert-member-functions-to-static)\n  bool ConfigureIPv6(const std::string& /*addr*/, int /*mask*/) { return true; }\n  // cppcheck-suppress functionStatic\n  // NOLINTNEXTLINE(readability-convert-member-*)\n  void SetNonBlocking(bool /*enabled*/) {}\n  // cppcheck-suppress functionStatic\n  // NOLINTNEXTLINE(readability-convert-member-*)\n  void SetMTU(int /*mtu*/) {}\n  // cppcheck-suppress functionStatic\n  // NOLINTNEXTLINE(readability-convert-member-*)\n  void BringUp() {}\n  // cppcheck-suppress functionStatic\n  // NOLINTNEXTLINE(readability-convert-member-*)\n  void SetStopFlag(const std::atomic<bool>* /*running*/) {}\n\n  // cppcheck-suppress functionStatic\n  // NOLINTNEXTLINE(readability-convert-member-functions-to-static)\n  int Read(void* buffer, int size) {\n    return g_mock_state->FeedRead(buffer, size);\n  }\n\n  // cppcheck-suppress functionStatic\n  // NOLINTNEXTLINE(readability-convert-member-functions-to-static)\n  int Write(const void* data, int size) {\n    g_mock_state->RecordWrite(data, size);\n    return size;\n  }\n\n private:\n  std::string name_;\n};\n\n}  // namespace\n\nnamespace fptn::common::network {\n\ntemplate <typename TunDevice>\nclass GenericTunInterface;\n\n}\n\nusing MockTunInterface =\n    fptn::common::network::GenericTunInterface<MockTunDevice>;\n\nnamespace {\n\nclass GenericTunInterfaceTest : public ::testing::Test {\n protected:\n  void SetUp() override { g_mock_state = std::make_shared<SharedMockState>(); }\n\n  void TearDown() override {\n    g_mock_state->Clear();\n    g_mock_state.reset();\n  }\n\n  static MockTunInterface::Config MakeConfig() {\n    return MockTunInterface::Config{\n        .name = \"mock0\",\n        .ipv4_addr = fptn::common::network::IPv4Address(\"10.0.0.1\"),\n        .ipv4_netmask = 24,\n        .ipv6_addr = fptn::common::network::IPv6Address(\"fc00:1::1\"),\n        .ipv6_netmask = 112,\n    };\n  }\n};\n\n}  // namespace\n\nTEST_F(GenericTunInterfaceTest, StartAndStop) {\n  MockTunInterface iface(MakeConfig());\n  ASSERT_TRUE(iface.Start());\n  EXPECT_EQ(iface.Name(), \"mock0\");\n  EXPECT_TRUE(iface.Stop());\n}\n\nTEST_F(GenericTunInterfaceTest, SendIPv4Packet) {\n  MockTunInterface iface(MakeConfig());\n  ASSERT_TRUE(iface.Start());\n\n  auto pkt_data = MakeMinimalIPv4Packet();\n  auto packet = fptn::common::network::IPPacket::Parse(pkt_data);\n  ASSERT_NE(packet, nullptr);\n\n  EXPECT_TRUE(iface.Send(std::move(packet)));\n\n  std::this_thread::sleep_for(std::chrono::milliseconds(10));\n\n  auto written = g_mock_state->written_packets;\n  ASSERT_EQ(written.size(), 1U);\n  EXPECT_EQ(written[0].size(), pkt_data.size());\n  EXPECT_EQ(written[0], pkt_data);\n\n  iface.Stop();\n}\n\nTEST_F(GenericTunInterfaceTest, SendIPv6Packet) {\n  MockTunInterface iface(MakeConfig());\n  ASSERT_TRUE(iface.Start());\n\n  auto pkt_data = MakeMinimalIPv6Packet();\n  auto packet = fptn::common::network::IPPacket::Parse(pkt_data);\n  ASSERT_NE(packet, nullptr);\n\n  EXPECT_TRUE(iface.Send(std::move(packet)));\n\n  std::this_thread::sleep_for(std::chrono::milliseconds(10));\n\n  auto written = g_mock_state->written_packets;\n  ASSERT_EQ(written.size(), 1U);\n  EXPECT_EQ(written[0].size(), pkt_data.size());\n  EXPECT_EQ(written[0], pkt_data);\n\n  iface.Stop();\n}\n\nTEST_F(GenericTunInterfaceTest, ReceiveIPv4Packet) {\n  MockTunInterface iface(MakeConfig());\n\n  std::mutex callback_mutex;\n  std::vector<std::vector<std::uint8_t>> received;\n\n  iface.SetRecvIPPacketCallback([&](fptn::common::network::IPPacketPtr packet) {\n    if (packet) {\n      std::scoped_lock lock(callback_mutex);\n      const auto* raw = packet->GetRawPacket();\n      const auto* data = static_cast<const std::uint8_t*>(raw->getRawData());\n      received.emplace_back(data, data + raw->getRawDataLen());\n    }\n  });\n\n  ASSERT_TRUE(iface.Start());\n\n  g_mock_state->InjectPacket(MakeMinimalIPv4Packet());\n\n  for (int i = 0; i < 100; ++i) {\n    std::this_thread::sleep_for(std::chrono::milliseconds(5));\n    std::scoped_lock lock(callback_mutex);\n    if (!received.empty()) {\n      break;\n    }\n  }\n\n  iface.Stop();\n\n  std::scoped_lock lock(callback_mutex);\n  ASSERT_FALSE(received.empty());\n  ASSERT_EQ(received.size(), 1U);\n  // cppcheck-suppress containerOutOfBounds\n  EXPECT_EQ(received[0], MakeMinimalIPv4Packet());\n}\n\nTEST_F(GenericTunInterfaceTest, ReceiveIPv6Packet) {\n  MockTunInterface iface(MakeConfig());\n\n  std::mutex callback_mutex;\n  std::vector<std::vector<std::uint8_t>> received;\n\n  iface.SetRecvIPPacketCallback([&](fptn::common::network::IPPacketPtr packet) {\n    if (packet) {\n      std::scoped_lock lock(callback_mutex);\n      const auto* raw = packet->GetRawPacket();\n      const auto* data = static_cast<const std::uint8_t*>(raw->getRawData());\n      received.emplace_back(data, data + raw->getRawDataLen());\n    }\n  });\n\n  ASSERT_TRUE(iface.Start());\n\n  g_mock_state->InjectPacket(MakeMinimalIPv6Packet());\n\n  for (int i = 0; i < 100; ++i) {\n    std::this_thread::sleep_for(std::chrono::milliseconds(5));\n    std::scoped_lock lock(callback_mutex);\n    if (!received.empty()) {\n      break;\n    }\n  }\n\n  iface.Stop();\n\n  std::scoped_lock lock(callback_mutex);\n  ASSERT_FALSE(received.empty());\n  ASSERT_EQ(received.size(), 1U);\n  // cppcheck-suppress containerOutOfBounds\n  EXPECT_EQ(received[0], MakeMinimalIPv6Packet());\n}\n\nTEST_F(GenericTunInterfaceTest, SendMultipleMixedPackets) {\n  MockTunInterface iface(MakeConfig());\n  ASSERT_TRUE(iface.Start());\n\n  auto ipv4_data = MakeMinimalIPv4Packet();\n  auto ipv6_data = MakeMinimalIPv6Packet();\n\n  auto pkt4 = fptn::common::network::IPPacket::Parse(ipv4_data);\n  auto pkt6 = fptn::common::network::IPPacket::Parse(ipv6_data);\n  ASSERT_NE(pkt4, nullptr);\n  ASSERT_NE(pkt6, nullptr);\n\n  EXPECT_TRUE(iface.Send(std::move(pkt4)));\n  EXPECT_TRUE(iface.Send(std::move(pkt6)));\n\n  std::this_thread::sleep_for(std::chrono::milliseconds(10));\n\n  auto written = g_mock_state->written_packets;\n  ASSERT_EQ(written.size(), 2U);\n  EXPECT_EQ(written[0], ipv4_data);\n  EXPECT_EQ(written[1], ipv6_data);\n\n  iface.Stop();\n}\n\nTEST_F(GenericTunInterfaceTest, DeviceNameUpdatedAfterStart) {\n  MockTunInterface iface(MakeConfig());\n  EXPECT_EQ(iface.Name(), \"mock0\");\n  ASSERT_TRUE(iface.Start());\n  EXPECT_EQ(iface.Name(), \"mock0\");\n  iface.Stop();\n}\n\n#ifdef __APPLE__\n\n#include <arpa/inet.h>\n#include <sys/socket.h>\n#include <unistd.h>\n\n#include \"common/network/tun/darwin_tun_device.h\"\n\nclass DarwinAfHeaderTest : public ::testing::Test {\n protected:\n  void SetUp() override {\n    ASSERT_EQ(socketpair(AF_UNIX, SOCK_DGRAM, 0, fds_), 0);\n  }\n\n  void TearDown() override {\n    close(fds_[0]);\n    close(fds_[1]);\n  }\n\n  int fds_[2] = {-1, -1};\n};\n\nTEST_F(DarwinAfHeaderTest, WriteIPv4PrependsCorrectAfHeader) {\n  fptn::common::network::DarwinTunDevice device;\n  ASSERT_TRUE(device.OpenWithFd(fds_[0], \"test0\"));\n\n  auto ipv4_pkt = MakeMinimalIPv4Packet();\n  const int written = device.Write(ipv4_pkt.data(), ipv4_pkt.size());\n  EXPECT_EQ(written, static_cast<int>(ipv4_pkt.size()));\n\n  std::uint8_t raw_buf[256] = {};\n  const ssize_t n = recv(fds_[1], raw_buf, sizeof(raw_buf), 0);\n  ASSERT_GT(n, 4);\n\n  std::uint32_t af_header = 0;\n  std::memcpy(&af_header, raw_buf, 4);\n  EXPECT_EQ(af_header, htonl(AF_INET));\n\n  const auto payload_size = static_cast<std::size_t>(n) - 4;\n  EXPECT_EQ(payload_size, ipv4_pkt.size());\n  EXPECT_EQ(std::memcmp(raw_buf + 4, ipv4_pkt.data(), ipv4_pkt.size()), 0);\n\n  device.OpenWithFd(-1, \"\");\n}\n\nTEST_F(DarwinAfHeaderTest, WriteIPv6PrependsCorrectAfHeader) {\n  fptn::common::network::DarwinTunDevice device;\n  ASSERT_TRUE(device.OpenWithFd(fds_[0], \"test0\"));\n\n  auto ipv6_pkt = MakeMinimalIPv6Packet();\n  const int written = device.Write(ipv6_pkt.data(), ipv6_pkt.size());\n  EXPECT_EQ(written, static_cast<int>(ipv6_pkt.size()));\n\n  std::uint8_t raw_buf[256] = {};\n  const ssize_t n = recv(fds_[1], raw_buf, sizeof(raw_buf), 0);\n  ASSERT_GT(n, 4);\n\n  std::uint32_t af_header = 0;\n  std::memcpy(&af_header, raw_buf, 4);\n  EXPECT_EQ(af_header, htonl(AF_INET6));\n\n  const auto payload_size = static_cast<std::size_t>(n) - 4;\n  EXPECT_EQ(payload_size, ipv6_pkt.size());\n  EXPECT_EQ(std::memcmp(raw_buf + 4, ipv6_pkt.data(), ipv6_pkt.size()), 0);\n\n  device.OpenWithFd(-1, \"\");\n}\n\nTEST_F(DarwinAfHeaderTest, ReadStripsAfHeaderIPv4) {\n  fptn::common::network::DarwinTunDevice device;\n  ASSERT_TRUE(device.OpenWithFd(fds_[0], \"test0\"));\n  device.SetNonBlocking(true);\n\n  auto ipv4_pkt = MakeMinimalIPv4Packet();\n\n  std::vector<std::uint8_t> raw(4 + ipv4_pkt.size());\n  std::uint32_t af = htonl(AF_INET);\n  std::memcpy(raw.data(), &af, 4);\n  std::memcpy(raw.data() + 4, ipv4_pkt.data(), ipv4_pkt.size());\n  ASSERT_EQ(send(fds_[1], raw.data(), raw.size(), 0),\n      static_cast<ssize_t>(raw.size()));\n\n  std::uint8_t read_buf[256] = {};\n  const int bytes_read = device.Read(read_buf, sizeof(read_buf));\n  EXPECT_EQ(bytes_read, static_cast<int>(ipv4_pkt.size()));\n  EXPECT_EQ(std::memcmp(read_buf, ipv4_pkt.data(), ipv4_pkt.size()), 0);\n\n  device.OpenWithFd(-1, \"\");\n}\n\nTEST_F(DarwinAfHeaderTest, ReadStripsAfHeaderIPv6) {\n  fptn::common::network::DarwinTunDevice device;\n  ASSERT_TRUE(device.OpenWithFd(fds_[0], \"test0\"));\n  device.SetNonBlocking(true);\n\n  auto ipv6_pkt = MakeMinimalIPv6Packet();\n\n  std::vector<std::uint8_t> raw(4 + ipv6_pkt.size());\n  std::uint32_t af = htonl(AF_INET6);\n  std::memcpy(raw.data(), &af, 4);\n  std::memcpy(raw.data() + 4, ipv6_pkt.data(), ipv6_pkt.size());\n  ASSERT_EQ(send(fds_[1], raw.data(), raw.size(), 0),\n      static_cast<ssize_t>(raw.size()));\n\n  std::uint8_t read_buf[256] = {};\n  const int bytes_read = device.Read(read_buf, sizeof(read_buf));\n  EXPECT_EQ(bytes_read, static_cast<int>(ipv6_pkt.size()));\n  EXPECT_EQ(std::memcmp(read_buf, ipv6_pkt.data(), ipv6_pkt.size()), 0);\n\n  device.OpenWithFd(-1, \"\");\n}\n\nTEST_F(DarwinAfHeaderTest, RoundTripIPv6Preserved) {\n  fptn::common::network::DarwinTunDevice writer;\n  fptn::common::network::DarwinTunDevice reader;\n  ASSERT_TRUE(writer.OpenWithFd(fds_[0], \"writer0\"));\n  ASSERT_TRUE(reader.OpenWithFd(fds_[1], \"reader0\"));\n  reader.SetNonBlocking(true);\n\n  auto original = MakeMinimalIPv6Packet();\n  const int written = writer.Write(original.data(), original.size());\n  EXPECT_EQ(written, static_cast<int>(original.size()));\n\n  std::uint8_t read_buf[256] = {};\n  const int bytes_read = reader.Read(read_buf, sizeof(read_buf));\n  ASSERT_EQ(bytes_read, static_cast<int>(original.size()));\n\n  std::vector<std::uint8_t> result(read_buf, read_buf + bytes_read);\n  EXPECT_EQ(result, original);\n\n  writer.OpenWithFd(-1, \"\");\n  reader.OpenWithFd(-1, \"\");\n}\n\n#endif  // __APPLE__\n"
  },
  {
    "path": "tests/fptnlib/CMakeLists.txt",
    "content": "find_package(GTest REQUIRED)\nfind_package(Boost REQUIRED)\nfind_package(OpenSSL REQUIRED)\nfind_package(spdlog REQUIRED)\nfind_package(fmt REQUIRED)\nfind_package(PcapPlusPlus REQUIRED)\nfind_package(nlohmann_json REQUIRED)\nfind_package(jwt-cpp REQUIRED)\nfind_package(Boost REQUIRED COMPONENTS random filesystem)\n\nif(WIN32)\n  set(TUNTAP_LIB Wintun rpcrt4)\n  add_definitions(-D_WIN32_WINNT=0x0601)\nelse()\n  set(TUNTAP_LIB tuntap++)\nendif()\n\nset(LIBS\n    GTest::gtest\n    GTest::gtest_main\n    Boost::boost\n    Boost::random\n    Boost::process\n    Boost::filesystem\n    OpenSSL::SSL\n    OpenSSL::Crypto\n    nlohmann_json::nlohmann_json\n    jwt-cpp::jwt-cpp\n    spdlog::spdlog\n    fmt::fmt\n    PcapPlusPlus::PcapPlusPlus\n    fptn-protocol-lib_static\n    ${TUNTAP_LIB})\n\n# --- ApiClient test ---\nadd_executable(ApiClientTest api_client/ApiClientTest.cpp)\ntarget_link_libraries(ApiClientTest PRIVATE ${LIBS})\nadd_test(NAME ApiClientTest COMMAND ApiClientTest)\n"
  },
  {
    "path": "tests/fptnlib/api_client/ApiClientTest.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2026 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include <nlohmann/json.hpp>\n\n#include <gtest/gtest.h>  // NOLINT(build/include_order)\n\n#include \"fptn-protocol-lib/https/api_client/api_client.h\"\n\n// TEST(ApiClientTest, GitHubReleasesConnection) {\n//   fptn::protocol::https::ApiClient client(\"api.github.com\", 443,\n//       \"api.github.com\",\n//       fptn::protocol::https::CensorshipStrategy::kSniRealityModeChrome147);\n//\n//   auto response = client.Get(\"/repos/batchar2/fptn/releases/latest\", 30);\n//\n//   EXPECT_EQ(response.code, 200);\n//   EXPECT_FALSE(response.body.empty());\n//\n//   auto release_info = response.Json();\n//   EXPECT_TRUE(release_info.contains(\"tag_name\"));\n//   EXPECT_TRUE(release_info.contains(\"name\"));\n//   EXPECT_TRUE(release_info.contains(\"html_url\"));\n// }\n\nTEST(ApiClientTest, GitHubHandshakeTest) {\n  fptn::protocol::https::ApiClient client(\"api.github.com\", 443,\n      \"api.github.com\",\n      fptn::protocol::https::CensorshipStrategy::kSni);\n\n  bool handshake_success = client.TestHandshake(10);\n  EXPECT_TRUE(handshake_success);\n}\n\n// TEST(ApiClientTest, GitHubResponseStructure) {\n//   fptn::protocol::https::ApiClient client(\"api.github.com\", 443,\n//       \"api.github.com\", fptn::protocol::https::CensorshipStrategy::kSni);\n//\n//   auto response = client.Get(\"/repos/batchar2/fptn/releases/latest\", 30);\n//\n//   ASSERT_EQ(response.code, 200);\n//\n//   auto release_info = response.Json();\n//   EXPECT_TRUE(release_info.contains(\"id\"));\n//   EXPECT_TRUE(release_info.contains(\"tag_name\"));\n//   EXPECT_TRUE(release_info.contains(\"assets\"));\n//\n//   if (release_info.contains(\"assets\") && release_info[\"assets\"].is_array()) {\n//     auto assets = release_info[\"assets\"];\n//     if (!assets.empty()) {\n//       // auto asset = assets[0];\n//       // EXPECT_TRUE(asset.contains(\"name\"));\n//       // EXPECT_TRUE(asset.contains(\"browser_download_url\"));\n//     }\n//   }\n// }\n"
  },
  {
    "path": "tests/server/CMakeLists.txt",
    "content": "find_package(GTest REQUIRED)\nfind_package(Boost REQUIRED)\nfind_package(OpenSSL REQUIRED)\nfind_package(spdlog REQUIRED)\nfind_package(fmt REQUIRED)\nfind_package(PcapPlusPlus REQUIRED)\nfind_package(nlohmann_json REQUIRED)\nfind_package(jwt-cpp REQUIRED)\nfind_package(prometheus-cpp REQUIRED)\n\nif(WIN32)\n  set(TUNTAP_LIB Wintun rpcrt4)\nelse()\n  set(TUNTAP_LIB tuntap++)\nendif()\n\nset(LIBS\n    GTest::gtest\n    GTest::gtest_main\n    Boost::boost\n    OpenSSL::SSL\n    OpenSSL::Crypto\n    nlohmann_json::nlohmann_json\n    jwt-cpp::jwt-cpp\n    spdlog::spdlog\n    fmt::fmt\n    PcapPlusPlus::PcapPlusPlus\n    fptn-protocol-lib_static\n    prometheus-cpp::prometheus-cpp\n    ${TUNTAP_LIB})\n\ninclude_directories(${FPTN_SERVER_PATH})\n\n# --- MetricTest test ---\nadd_executable(MetricTest statistic/MetricTest.cpp ${FPTN_SERVER_PATH}/statistic/metrics.h ${FPTN_SERVER_PATH}/statistic/metrics.cpp)\ntarget_link_libraries(MetricTest PRIVATE ${LIBS})\nadd_test(NAME MetricTest COMMAND MetricTest)\n\n# --- AntiScan test ---\nadd_executable(AntiScanTest filter/antiscan/AntiScanTest.cpp ${FPTN_SERVER_PATH}/filter/filters/antiscan/antiscan.h\n                            ${FPTN_SERVER_PATH}/filter/filters/antiscan/antiscan.cpp)\ntarget_link_libraries(AntiScanTest PRIVATE ${LIBS})\nadd_test(NAME AntiScanTest COMMAND AntiScanTest)\n"
  },
  {
    "path": "tests/server/filter/antiscan/AntiScanTest.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include <memory>\n#include <string>\n\n#include <pcapplusplus/IPv4Layer.h>  // NOLINT(build/include_order)\n#include <pcapplusplus/IPv6Layer.h>  // NOLINT(build/include_order)\n\n#include <gtest/gtest.h>  // NOLINT(build/include_order)\n\n#include \"common/network/ip_address.h\"\n#include \"common/network/ip_packet.h\"\n\n#include \"fptn-server/filter/filters/antiscan/antiscan.h\"\n\nnamespace {\nclass MockIPv4Packet : public fptn::common::network::IPPacket {\n public:\n  explicit MockIPv4Packet(const pcpp::IPv4Address& addr) {\n    ipv4Layer_.setDstIPv4Address(addr);\n  }\n\n  bool IsIPv4() const noexcept override { return true; }\n\n  bool IsIPv6() const noexcept override { return false; }\n\n  pcpp::IPv4Layer* IPv4Layer() noexcept override { return &ipv4Layer_; }\n\n private:\n  pcpp::IPv4Layer ipv4Layer_;\n};\n\nclass MockIPv6Packet : public fptn::common::network::IPPacket {\n public:\n  explicit MockIPv6Packet(const pcpp::IPv6Address& addr) {\n    ipv6_layer_.setDstIPv6Address(addr);\n  }\n\n  bool IsIPv4() const noexcept override { return false; }\n\n  bool IsIPv6() const noexcept override { return true; }\n\n  pcpp::IPv6Layer* IPv6Layer() noexcept override { return &ipv6_layer_; }\n\n private:\n  pcpp::IPv6Layer ipv6_layer_;\n};\n\n/* IPv4 */\n// cppcheck-suppress syntaxError\nTEST(AntiScanTest, BlockScan) {\n  /* IPv4 */\n  const fptn::common::network::IPv4Address server_ipv4(\"192.168.1.1\");\n  const fptn::common::network::IPv4Address net_ipv4(\"192.168.1.0\");\n  const int mask_ipv4 = 24;\n  /* IPv6 */\n  const fptn::common::network::IPv6Address server_ipv6(\n      \"2001:0db8:85a3:0000:0000:8a2e:0370:0001\");\n  const fptn::common::network::IPv6Address net_ipv6(\n      \"2001:0db8:85a3:0000:0000:8a2e:0370:0000\");\n  const int mask_ipv6 = 126;\n\n  fptn::filter::AntiScan anti_scan_filter(\n      /* IPv4 */\n      server_ipv4, net_ipv4, mask_ipv4,\n      /* IPv6 */\n      server_ipv6, net_ipv6, mask_ipv6);\n\n  EXPECT_EQ(anti_scan_filter.apply(\n                std::make_unique<MockIPv4Packet>(net_ipv4.ToString())),\n      nullptr)\n      << \"Packet in the network should be blocked\";\n\n  EXPECT_EQ(anti_scan_filter.apply(std::make_unique<MockIPv4Packet>(\n                pcpp::IPv4Address(\"192.168.1.5\"))),\n      nullptr)\n      << \"Packet in the network should be blocked\";\n\n  EXPECT_EQ(anti_scan_filter.apply(std::make_unique<MockIPv4Packet>(\n                pcpp::IPv4Address(\"192.168.1.255\"))),\n      nullptr)\n      << \"Packet in the network should be blocked\";\n\n  EXPECT_EQ(anti_scan_filter.apply(std::make_unique<MockIPv4Packet>(\n                pcpp::IPv4Address(\"255.255.255.255\"))),\n      nullptr);\n}\n\nTEST(AntiScanTest, AllowNonScanPacket) {\n  /* IPv4 */\n  const fptn::common::network::IPv4Address server_ipv4(\"192.168.1.1\");\n  const fptn::common::network::IPv4Address net_ipv4(\"192.168.1.0\");\n  const int mask_ipv4 = 24;\n  /* IPv6 */\n  const fptn::common::network::IPv6Address server_ipv6(\n      \"2001:0db8:85a3:0000:0000:8a2e:0370:0001\");\n  const fptn::common::network::IPv6Address net_ipv6(\n      \"2001:0db8:85a3:0000:0000:8a2e:0370:0000\");\n  const int mask_ipv6 = 126;\n\n  fptn::filter::AntiScan anti_scan_filter(\n      /* IPv4 */\n      server_ipv4, net_ipv4, mask_ipv4,\n      /* IPv6 */\n      server_ipv6, net_ipv6, mask_ipv6);\n\n  EXPECT_NE(anti_scan_filter.apply(\n                std::make_unique<MockIPv4Packet>(server_ipv4.ToString())),\n      nullptr);\n\n  EXPECT_NE(anti_scan_filter.apply(std::make_unique<MockIPv4Packet>(\n                pcpp::IPv4Address(\"192.168.2.1\"))),\n      nullptr);\n\n  EXPECT_NE(anti_scan_filter.apply(\n                std::make_unique<MockIPv4Packet>(pcpp::IPv4Address(\"8.8.8.8\"))),\n      nullptr);\n\n  EXPECT_NE(anti_scan_filter.apply(std::make_unique<MockIPv4Packet>(\n                pcpp::IPv4Address(\"192.168.0.1\"))),\n      nullptr);\n\n  EXPECT_NE(anti_scan_filter.apply(std::make_unique<MockIPv4Packet>(\n                pcpp::IPv4Address(\"192.168.0.255\"))),\n      nullptr);\n}\n\n/* IPv6 */\nTEST(AntiScanTest, BlockScanIPv6) {\n  /* IPv4 */\n  const fptn::common::network::IPv4Address server_ipv4(\"192.168.1.1\");\n  const fptn::common::network::IPv4Address net_ipv4(\"192.168.1.0\");\n  const int mask_ipv4 = 24;\n  /* IPv6 */\n  const fptn::common::network::IPv6Address server_ipv6(\n      \"2001:0db8:85a3:0000:0000:8a2e:0370:0001\");\n  const fptn::common::network::IPv6Address net_ipv6(\n      \"2001:0db8:85a3:0000:0000:8a2e:0370:0000\");\n  const int mask_ipv6 = 120;\n\n  fptn::filter::AntiScan anti_scan_filter(\n      /* IPv4 */\n      server_ipv4, net_ipv4, mask_ipv4,\n      /* IPv6 */\n      server_ipv6, net_ipv6, mask_ipv6);\n\n  EXPECT_EQ(anti_scan_filter.apply(\n                std::make_unique<MockIPv6Packet>(net_ipv6.ToString())),\n      nullptr)\n      << \"IPv6 packet in the network should be blocked\";\n\n  EXPECT_EQ(anti_scan_filter.apply(std::make_unique<MockIPv6Packet>(\n                pcpp::IPv6Address(\"2001:0db8:85a3:0000:0000:8a2e:0370:0002\"))),\n      nullptr);\n\n  EXPECT_EQ(anti_scan_filter.apply(std::make_unique<MockIPv6Packet>(\n                pcpp::IPv6Address(\"2001:0db8:85a3:0000:0000:8a2e:0370:00A0\"))),\n      nullptr);\n}\n\nTEST(AntiScanTest, AllowNonScanPacketIPv6) {\n  /* IPv4 */\n  const fptn::common::network::IPv4Address server_ipv4(\"192.168.1.1\");\n  const fptn::common::network::IPv4Address net_ipv4(\"192.168.1.0\");\n  const int mask_ipv4 = 24;\n  /* IPv6 */\n  const fptn::common::network::IPv6Address server_ipv6(\n      \"2001:0db8:85a3:0000:0000:8a2e:0370:0001\");\n  const fptn::common::network::IPv6Address net_ipv6(\n      \"2001:0db8:85a3:0000:0000:8a2e:0370:0000\");\n  const int mask_ipv6 = 126;\n\n  fptn::filter::AntiScan anti_scan_filter(\n      /* IPv4 */\n      server_ipv4, net_ipv4, mask_ipv4,\n      /* IPv6 */\n      server_ipv6, net_ipv6, mask_ipv6);\n\n  EXPECT_NE(anti_scan_filter.apply(\n                std::make_unique<MockIPv6Packet>(server_ipv6.ToString())),\n      nullptr);\n\n  EXPECT_NE(anti_scan_filter.apply(std::make_unique<MockIPv6Packet>(\n                pcpp::IPv6Address(\"2001:0db8:85a3:0000:0000:8a2e:0371:1000\"))),\n      nullptr);\n\n  EXPECT_NE(anti_scan_filter.apply(std::make_unique<MockIPv6Packet>(\n                pcpp::IPv6Address(\"2001:0db8:85a3:0000:0000:8a2e:0370:FFFF\"))),\n      nullptr);\n}\n}  // namespace\n"
  },
  {
    "path": "tests/server/statistic/MetricTest.cpp",
    "content": "/*=============================================================================\nCopyright (c) 2024-2025 Stas Skokov\n\nDistributed under the MIT License (https://opensource.org/licenses/MIT)\n=============================================================================*/\n\n#include <string>\n\n#include <gtest/gtest.h>  // NOLINT(build/include_order)\n\n#include \"fptn-server/statistic/metrics.h\"\n\nTEST(MetricsTest, UpdateTraffic) {\n  fptn::statistic::Metrics metrics;\n  metrics.UpdateStatistics(1, \"user1\", 1024, 2048);\n\n  const std::string metrics_data = metrics.Collect();\n  EXPECT_NE(metrics_data.find(\"fptn_user_incoming_traffic_bytes{session_id=\"\n                              \"\\\"1\\\",username=\\\"user1\\\"} 1024\"),\n      std::string::npos);\n  EXPECT_NE(metrics_data.find(\"fptn_user_outgoing_traffic_bytes{session_id=\"\n                              \"\\\"1\\\",username=\\\"user1\\\"} 2048\"),\n      std::string::npos);\n}\n"
  }
]