internal void UpdateBet(object data)
        {
            var link = data as LinkData;

            if (link == null)
            {
                return;
            }

            Stopwatch sw = new Stopwatch();

            HttpRequest req = new HttpRequest();

            req.CharacterSet = Encoding.UTF8;
            if (UsingProxy)
            {
                req.Proxy = ProxyClient.Parse(ProxySingleManager.GetProxy());
            }

            while (true)
            {
                try
                {
                    var response = req.Get($"{_url}/su/live/{link.Id}").ToString();
                    sw.Reset();
                    sw.Start();
                    var bet = new Bet();
                    bet.Bookmaker = BookmakerType.Marafon;
                    bet.Site      = "M";
                    bet.Name      = link.Teams;
                    bet.URL       = $"su/live/{link.Id}";
                    bet.Team1Id   = link.Team1Id;
                    bet.Team2Id   = link.Team2Id;
                    var teams = link.Teams.Replace(" - ", "|").Split('|');
                    if (teams.Length < 2)
                    {
                        throw new ArgumentException($"{nameof(teams)}.Lenght!=2");
                    }

                    bet.Team1 = teams[0];
                    bet.Team2 = teams[1];


                    var doc = CreteDocument(response);
                    bet = ParseBet(doc, bet);

                    var time = (int)sw.ElapsedMilliseconds;
                    sw.Stop();
                    _bets[link.Id] = bet;
                    if (time > MainConfigurate.Configurate.MarafonMaxTime)
                    {
                        throw new ArgumentException("Долго парсили");
                    }
                }
                catch (ThreadAbortException ex)

                {
                    break;
                }
                catch (Exception ex)
                {
                    Logger.AddLog($"{link.Id};URl: {_url}/su/live/{link.Id} Время {sw.ElapsedMilliseconds};Ошибка парсинга: {ex.Message}", Logger.LogTarget.MarafonThread, Logger.LogLevel.Warn);
                }

                if (UsingProxy)
                {
                    req.Proxy            = ProxyClient.Parse(ProxySingleManager.GetProxy());
                    req.ReadWriteTimeout = 3000;
                    req.ConnectTimeout   = 3000;
                    req.KeepAliveTimeout = 3000;
                }
            }
        }
        internal void UpdateBetNew(object data)
        {
            var link = data as LinkData;

            if (link == null)
            {
                return;
            }

            Stopwatch sw = new Stopwatch();

            HttpRequest req = new HttpRequest();

            req.CharacterSet = Encoding.UTF8;
            if (UsingProxy)
            {
                req.Proxy = ProxyClient.Parse(ProxySingleManager.GetProxy());
            }
            int offset = 0;

            try
            {
                offset = GetServerOffset(req);
            }
            catch (Exception ex)
            {
                Logger.AddLog($"Не смогли получить смещение времи. {ex.Message}", Logger.LogTarget.MarafonThread, Logger.LogLevel.Error);
            }

            string        prefix  = GeneratorPrefix();
            string        updated = null;
            IHtmlDocument doc     = null;
            bool          reload  = true;

            while (true)
            {
                sw.Reset();
                sw.Start();

                try
                {
                    if (reload)
                    {
                        string response = req.Get($"{_url}/su/live/{link.Id}").ToString();
                        reload = false;
                        var bet = new Bet();
                        bet.Bookmaker = BookmakerType.Marafon;
                        bet.Site      = "M";
                        bet.Name      = link.Teams;
                        bet.URL       = $"su/live/{link.Id}";
                        bet.Team1Id   = link.Team1Id;
                        bet.Team2Id   = link.Team2Id;
                        var teams = link.Teams.Replace(" - ", "|").Split('|');
                        if (teams.Length < 2)
                        {
                            throw new ArgumentException($"{nameof(teams)}.Lenght!=2");
                        }

                        bet.Team1 = teams[0];
                        bet.Team2 = teams[1];


                        doc = CreteDocument(response);
                        bet = ParseBet(doc, bet);

                        var time = (int)sw.ElapsedMilliseconds;
                        sw.Stop();
                        _bets[link.Id] = bet;
                        if (time > MainConfigurate.Configurate.MarafonMaxTime)
                        {
                            throw new ArgumentException($"Долго парсили {sw.ElapsedMilliseconds} мс ");
                        }
                        Console.WriteLine("Событие загруженно!");
                    }
                    else
                    {
                        if (!_bets.ContainsKey(link.Id))
                        {
                            Console.WriteLine("Почему то нет такого ключа в базе.");
                            reload = true;
                            continue;
                        }
                        if (doc == null)
                        {
                            Console.WriteLine($"Почему то {nameof(doc)}==null");
                            reload = true;
                            continue;
                        }
                        if (String.IsNullOrWhiteSpace(updated))
                        {
                            updated = (ConvertToUnixTimestamp() - offset).ToString();
                        }
                        string url          = $"https://liveupdate.marathonbookmakers.com/su/livestreamupdate/{link.Id}?callback={prefix}&markets={link.Id}&available=&updated={updated}&oddsType=Decimal&siteStyle=MULTIMARKETS&_={ConvertToUnixTimestamp()}";
                        var    response     = req.Get(url).ToString().Trim();
                        var    responseData = response.Remove(response.Length - 1).Replace($"{prefix}(", "");
                        if (responseData.Contains("refreshPage"))
                        {
                            Console.WriteLine("Необходимо перезагрузить странницу");
                            reload  = true;
                            updated = null;
                            continue;
                        }
                        var json = JsonConvert.DeserializeObject <MarafonPingResponse>(responseData);
                        updated = json.Updated.ToString();
                        if (json.Modified == null)
                        {
                            Console.WriteLine("Обновление ставки не требуется!");
                            _bets[link.Id].Update();
                        }
                        else
                        {
                            foreach (Modified modified in json.Modified)
                            {
                                if (modified.Type == "mutableUpdates")
                                {
                                    try
                                    {
                                        UpdateDocument(doc, modified.Updates);
                                    }
                                    catch (Exception e)
                                    {
                                        reload  = true;
                                        updated = null;
                                        throw new ArgumentException($"Не удалось сделать частичное обновлеение. и вот почему: {e.Message}");
                                    }
                                }
                            }

                            var bet = _bets[link.Id].ShortCopy();
                            bet            = ParseBet(doc, bet);
                            _bets[link.Id] = bet;
                            Console.WriteLine("Сделали частичное обновление!");
                        }


                        Thread.Sleep(1500);
                    }
                }
                catch (Exception e)
                {
                    Logger.AddLog($"Не удалось спарсить {link.Id}. И вот почему: {e.Message}", Logger.LogTarget.MarafonThread, Logger.LogLevel.Warn);
                    Debug.WriteLine($"Не удалось спарсить {link.Id}. И вот почему: {e.Message}");
                    Thread.Sleep(5000);
                    if (UsingProxy)
                    {
                        req.Proxy = ProxyClient.Parse(ProxySingleManager.GetProxy());
                    }
                }
            }
        }
        private void Update()
        {
            while (true)
            {
                try
                {
                    var rezult = GetLives();
                    lock (_livesLock)
                    {
                        _livesList = rezult;
                    }
                    Logger.AddLog($"Полученно lives: {rezult.Count}", Logger.LogTarget.Marafon);
                    foreach (LinkData data in rezult)
                    {
                        if (!_thsLoad.ContainsKey(data.Id))
                        {
                            var th = new Thread(UpdateBetNew);
                            th.IsBackground = true;
                            th.Start(data);
                            _thsLoad.Add(data.Id, th);
                        }
                        else
                        {
                            if (_thsLoad[data.Id].ThreadState == ThreadState.Stopped ||
                                _thsLoad[data.Id].ThreadState == ThreadState.Aborted)
                            {
                                var th = new Thread(UpdateBetNew);
                                th.IsBackground = true;
                                th.Start(data);
                                _thsLoad[data.Id] = th;
                            }
                        }
                    }

                    var           ids        = rezult.Select(x => x.Id).ToList();
                    List <string> removeList = new List <string>();
                    foreach (KeyValuePair <string, Thread> key in _thsLoad)
                    {
                        if (!ids.Contains(key.Key))
                        {
                            try
                            {
                                key.Value.Abort();
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine(e);
                            }
                            removeList.Add(key.Key);
                        }
                    }

                    foreach (string s in removeList)
                    {
                        _thsLoad.Remove(s);
                    }
                }

                catch (Exception ex)
                {
                    if (UsingProxy)
                    {
                        _req.Proxy = ProxyClient.Parse(ProxySingleManager.GetProxy());
                    }
                    Logger.AddLog($"Не удалось получить lives: {ex.Message}", Logger.LogTarget.Marafon,
                                  Logger.LogLevel.Critical);
                    continue;
                }

                finally
                {
                    Thread.Sleep(10000);
                }
            }
        }