def __init__(
        self,
        executable_path=None,
        force=False,
        version_main: int = 0,
        user_multi_procs=False,
    ):
        """
        Args:
            executable_path: None = automatic
                             a full file path to the chromedriver executable
            force: False
                    terminate processes which are holding lock
            version_main: 0 = auto
                specify main chrome version (rounded, ex: 82)
        """
        self.force = force
        self._custom_exe_path = False
        prefix = "undetected"
        self.user_multi_procs = user_multi_procs

        try:
            # Try to convert version_main into an integer
            version_main_int = int(version_main)
            # check if version_main_int is less than or equal to e.g 114
            self.is_old_chromedriver = version_main and version_main_int <= 114
        except (ValueError,TypeError):
            # Check not running inside Docker
            if not os.path.exists("/app/chromedriver"):
                # If the conversion fails, log an error message
                logging.info("version_main cannot be converted to an integer")
            # Set self.is_old_chromedriver to False if the conversion fails
            self.is_old_chromedriver = False

        # Needs to be called before self.exe_name is accessed
        self._set_platform_name()

        if not os.path.exists(self.data_path):
            os.makedirs(self.data_path, exist_ok=True)

        if not executable_path:
            if sys.platform.startswith("freebsd"):
                self.executable_path = os.path.join(
                    self.data_path, self.exe_name
                )
            else:
                self.executable_path = os.path.join(
                    self.data_path, "_".join([prefix, self.exe_name])
                )

        if not IS_POSIX:
            if executable_path:
                if not executable_path[-4:] == ".exe":
                    executable_path += ".exe"

        self.zip_path = os.path.join(self.data_path, prefix)

        if not executable_path:
            if not self.user_multi_procs:
                self.executable_path = os.path.abspath(
                    os.path.join(".", self.executable_path)
                )

        if executable_path:
            self._custom_exe_path = True
            self.executable_path = executable_path

        # Set the correct repository to download the Chromedriver from
        if self.is_old_chromedriver:
            self.url_repo = "https://chromedriver.storage.googleapis.com"
        else:
            self.url_repo = "https://googlechromelabs.github.io/chrome-for-testing"

        self.version_main = version_main
        self.version_full = None

        Args:
            executable_path: None = automatic
                             a full file path to the chromedriver executable
            force: False
                    terminate processes which are holding lock
            version_main: 0 = auto
                specify main chrome version (rounded, ex: 82)
        
src/undetected_chromedriver/patcher.py