1!function(window){window.DV2BlvDropdown=window.DV2BlvDropdown||{},function(DV2BlvDropdown){const e=new Set;function escapeHtml(e){return String(e??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function getMatchId(e){return e?.match_id||e?.matchId||e?.id||e?.slug||""}function getSortedLinks(e){return window.DV2StreamLinks?.sortForDetail?window.DV2StreamLinks.sortForDetail(e?.livestream?.links):Array.isArray(e?.livestream?.links)?e.livestream.links:[]}function getBlvLabel(e,t){return window.DV2StreamLinks?.getBlvName?window.DV2StreamLinks.getBlvName(e,t):String(e?.commentator||"").trim()||`Link ${t+1}`}function defaultGetDetailUrl(e,t){if(window.DV2StreamLinks?.getDetailUrl)return window.DV2StreamLinks.getDetailUrl(e,t,{trailingSlash:!1});const a=null!=t?.liveId?String(t.liveId):"";return a?`/streams/${e}?liveId=${encodeURIComponent(a)}`:`/streams/${e}`}DV2BlvDropdown.escapeHtml=escapeHtml,DV2BlvDropdown.getMatchId=getMatchId,DV2BlvDropdown.getSortedLinks=getSortedLinks,DV2BlvDropdown.getBlvLabel=getBlvLabel,DV2BlvDropdown.defaultGetDetailUrl=defaultGetDetailUrl,DV2BlvDropdown.build=function build(e){const t=e||{},{match:a,links:n=getSortedLinks(a),preferredLink:i,matchId:o=getMatchId(a),getDetailUrl:s=defaultGetDetailUrl,renderToggle:r,renderItemContent:l,emptyHtml:d="",menuPlacement:c="up",rootClass:m="",toggleClass:v=""}=t;if(!n.length)return d;if("function"!=typeof r||"function"!=typeof l)return d;const u=t.escapeHtml||escapeHtml,h=i??n[0]??null,p=getBlvLabel(h,0),f="down"===c?"dv2-blv-dropdown--menu-down":"dv2-blv-dropdown--menu-up",g=n.map((e,t)=>{const a=getBlvLabel(e,t),n=s(o,e);return`\n <li class="dv2-blv-dropdown__item">\n <a href="${u(n)}" class="dv2-blv-dropdown__link">\n ${l({link:e,label:a,href:n,index:t,esc:u})}\n </a>\n </li>\n `}).join("");return`\n <div class="dv2-blv-dropdown ${f}${m?` ${m}`:""}">\n <button type="button" class="dv2-blv-dropdown__toggle${v?` ${v}`:""}" aria-expanded="false" aria-haspopup="listbox">\n ${r({link:h,label:p,esc:u})}\n <span class="dv2-blv-dropdown__caret" aria-hidden="true"></span>\n </button>\n <ul class="dv2-blv-dropdown__menu" role="listbox">\n ${g}\n </ul>\n </div>\n `},DV2BlvDropdown.bind=function bind(t,a){const $=window.jQuery||window.$;if(!$?.fn||!t?.length)return;const{namespace:n="dv2BlvDropdown",closeOnDocument:i=!0,documentCloseDelay:o=!1,stopPropagationOnWrap:s=!1,rebindDocumentClose:r=!1}=a||{};function handleToggleClick(e,a){e.preventDefault(),e.stopPropagation();const n=a.hasClass("is-open");t.find(".dv2-blv-dropdown.is-open").not(a).removeClass("is-open").find(".dv2-blv-dropdown__toggle").attr("aria-expanded","false"),a.toggleClass("is-open",!n).find(".dv2-blv-dropdown__toggle").attr("aria-expanded",n?"false":"true")}if(s?t.find(".dv2-blv-dropdown").each(function(){const e=$(this);e.off(`click.${n}Wrap`).on(`click.${n}Wrap`,function(e){e.stopPropagation()}),e.find(".dv2-blv-dropdown__toggle").off(`click.${n}`).on(`click.${n}`,function(t){handleToggleClick(t,e)}),e.find(".dv2-blv-dropdown__menu a").off(`click.${n}Menu`).on(`click.${n}Menu`,function(e){e.stopPropagation()})}):(t.off(`click.${n}`,".dv2-blv-dropdown__toggle").on(`click.${n}`,".dv2-blv-dropdown__toggle",function(e){handleToggleClick(e,$(this).closest(".dv2-blv-dropdown"))}),t.off(`click.${n}Menu`,".dv2-blv-dropdown__menu a").on(`click.${n}Menu`,".dv2-blv-dropdown__menu a",function(e){e.stopPropagation()})),!i)return;const l=`click.${n}Close`;if(r)$(document).off(l);else if(e.has(l))return;$(document).on(l,function(e){const run=()=>{$(e.target).closest(".dv2-blv-dropdown").length||function closeAllDropdowns($,e){e.find(".dv2-blv-dropdown.is-open").each(function(){$(this).removeClass("is-open").find(".dv2-blv-dropdown__toggle").attr("aria-expanded","false")})}($,t)};o?window.setTimeout(run,0):run()}),r||e.add(l)}}(window.DV2BlvDropdown)}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window){window.DV2HotLeagues=window.DV2HotLeagues||{},function(DV2HotLeagues){const e="https://vsc-apidev.helizones.com/api/data/lives/compet
1itions/hot";DV2HotLeagues.DEFAULT_ENDPOINT=e,DV2HotLeagues.createRankMap=function createRankMap(e){return new Map((e||[]).map((e,t)=>[e.id,t]))},DV2HotLeagues.load=function load(t){const{url:a=e,ajax:n=window.jQuery?.ajax||window.$?.ajax,setHotLeaguesRank:i,onSuccess:o,onError:s,method:r="GET"}=t||{};return n?n({url:a,method:r,success:function(e){const t=DV2HotLeagues.createRankMap(e?.result);i&&i(t),o&&o(t,e)},error:function(e,t,a){console.error("[DV2HotLeagues] Failed to load hot leagues:",a),s&&s({xhr:e,status:t,error:a})}}):(console.error("[DV2HotLeagues] jQuery ajax is not available"),s&&s({message:"jQuery ajax is not available"}),null)}}(window.DV2HotLeagues)}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window){window.DV2MatchScorePoll=window.DV2MatchScorePoll||{},function(DV2MatchScorePoll){const e="undefined"!=typeof API_URL?API_URL:"https://vsc-apidev.helizones.com/api/data/";function getDefaultIntervalMs(){return"number"==typeof window.DV2_HOME_MATCH_SCORE_POLL_INTERVAL_MS?window.DV2_HOME_MATCH_SCORE_POLL_INTERVAL_MS:3e4}DV2MatchScorePoll.DEFAULT_API_BASE=e,DV2MatchScorePoll.getMatchId=function getMatchId(e){return e?.match_id||e?.matchId||e?.id||e?.slug||""},DV2MatchScorePoll.getScoreSnapshot=function getScoreSnapshot(e){const t=e?.score?.fulltime||{};return{home:t.home??0,away:t.away??0,currentMinute:e?.currentMinute??e?.currentMinutes??null}},DV2MatchScorePoll.create=function create(t){const{ajax:a=window.jQuery?.ajax||window.$?.ajax,$:n=window.jQuery||window.$,apiBase:i=e,intervalMs:o=getDefaultIntervalMs(),container:s,onScoreChange:r}=t||{};let l=null,d=null;function poll(){if(!d?.matchId||!a)return;const e=String(i).replace(/\/?$/,"/");a({url:`${e}lives/${d.matchId}`,method:"GET",success(e){if(!e?.data)return;const t=DV2MatchScorePoll.getScoreSnapshot(e.data);(d.home!==t.home||d.away!==t.away||d.currentMinute!==t.currentMinute)&&(d={...d,...t},function applyDomUpdate(e){const t=function resolveContainer(e,$){return e?"string"==typeof e?$(e):e:$(document)}(s,n),a=t.find("[data-dv2-score-home]"),i=t.find("[data-dv2-score-away]"),o=t.find("[data-dv2-score-minute]");a.length&&a.text(e.home),i.length&&i.text(e.away),null!=e.currentMinute&&o.length&&o.text(`${e.currentMinute}'`),r&&r(e,d)}(d))}})}function stop(){l&&(clearInterval(l),l=null)}return{sync:function sync(e){const t=DV2MatchScorePoll.getMatchId(e);t&&(d={matchId:t,...DV2MatchScorePoll.getScoreSnapshot(e)})}
1,start:function start(){stop(),!d?.matchId||!o||o<=0||(l=setInterval(poll,o))},stop:stop,destroy:function destroy(){stop(),d=null},poll:poll}}}(window.DV2MatchScorePoll)}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window){window.DV2MatchSort=window.DV2MatchSort||{},function(DV2MatchSort){DV2MatchSort.isWcCompetitionMatch=function isWcCompetitionMatch(e){const t=window.DV2_STREAMING_WC_COMPETITION_ID;return t&&e?.league?.id===t},DV2MatchSort.isLiveMatch=function isLiveMatch(e,t){if(!Array.isArray(t)||!t.length)return!1;const a=String(e?.matchInfo?.status??e?.status??"").toLowerCase();return t.includes(a)},DV2MatchSort.getMatchKickoffTime=function getMatchKickoffTime(e){const t=new Date(e?.matchInfo?.kickoff??e?.kickoff);return Number.isNaN(t.getTime())?null:t},DV2MatchSort.isWcStartingSoon=function isWcStartingSoon(e,t,a=10){if(!DV2MatchSort.isWcCompetitionMatch(e))return!1;if(DV2MatchSort.isLiveMatch(e,t))return!1;const n=DV2MatchSort.getMatchKickoffTime(e);if(!n)return!1;const i=n.getTime()-Date.now();return i>0&&i<=60*a*1e3},DV2MatchSort.getHotLeagueRank=function getHotLeagueRank(e,t){const a=function resolveHotLeaguesRank(e){return"function"==typeof e?e():e}(t);return a?.has?.(e?.league?.id)?a.get(e.league.id):1/0},DV2MatchSort.compareKickoff=function compareKickoff(e,t){const a=DV2MatchSort.getMatchKickoffTime(e),n=DV2MatchSort.getMatchKickoffTime(t);return a||n?a?n?a.getTime()-n.getTime():-1:1:0},DV2MatchSort.compareMatches=function compareMatches(e,t,a){const{mode:n="wc-first",liveStatuses:i=[],hotLeaguesRank:o=null,hasLiveMatches:s=!1,wcSoonMinutes:r=10}=a||{},l=function compareWc(){const a=DV2MatchSort.isWcCompetitionMatch(e);return a!==DV2MatchSort.isWcCompetitionMatch(t)?a?-1:1:0},d=function compareLive(){const a=DV2MatchSort.isLiveMatch(e,i);return a!==DV2MatchSort.isLiveMatch(t,i)?a?-1:1:0},c=function compareHot(){const a=DV2MatchSort.getHotLeagueRank(e,o),n=DV2MatchSort.getHotLeagueRank(t,o);return a!==n?a-n:0};if("wc-kickoff-only"===n){const a=l();return 0!==a?a:DV2MatchSort.compareKickoff(e,t)}if("wc-first"===n){const a=l();if(0!==a)return a;const n=d();if(0!==n)return n;const i=c();return 0!==i?i:DV2MatchSort.compareKickoff(e,t)}if("live-first-wc"===n){const a=d();if(0!==a)return a;const n=l();if(0!==n)return n;const i=c();return 0!==i?i:DV2MatchSort.compareKickoff(e,t)}if("wc-when-live-or-soon"===n){const a=DV2MatchSort.isWcStartingSoon(e,i,r);if(a!==DV2MatchSort.isWcStartingSoon(t,i,r))return a?-1:1;const n=d();if(0!==n)return n;if(s){const e=l();if(0!==e)return e}const o=c();return 0!==o?o:DV2MatchSort.compareKickoff(e,t)}if("wc-when-live"===n){const a=d();if(0!==a)return a;if(s){const e=l();if(0!==e)return e}const n=c();return 0!==n?n:DV2MatchSort.compareKickoff(e,t)}return DV2MatchSort.compareKickoff(e,t)},DV2MatchSort.createSortedMatchesFunction=function createSortedMatchesFunction(e){return function sortedMatchesFunction(t){if(!Array.isArray(t))return[];const a={...e||{},hasLiveMatches:t.some(t=>DV2MatchSort.isLiveMatch(t,e?.liveStatuses))};return e?.copy?t.slice().sort((e,t)=>DV2MatchSort.compareMatches(e,t,a)):t.sort((e,t)=>DV2MatchSort.compareMatches(e,t,a))}}}(window.DV2MatchSort)}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$){function dv2GetFullscreenElement(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||null}function dv2GetStreamChromeEl(e){if(!e?.length)return $();const t=e.children(".dv2-stream-chrome");return t.length?t:e.find("> .dv2-video-container > .dv2-stream-chrome, > .dv2-video-stage > .dv2-stream-chrome").first()}function dv2ApplyStreamVideoControls(e){e?.length&&(e.prop("controls",!1),e.removeAttr("controlsList"),e.attr("playsinline",""),e.attr("webkit-playsinline",""))}function dv2MarkStreamVolumeTouched(e){e&&(e.dataset.dv2VolumeTouched="1")}function dv2IsStreamVideoMuted(e){return!(!e||!e.muted&&0!==e.volume)}function dv2GetVideoStageEl(e){return e?.length?e.children(".dv2-video-container, .dv2-video-stage").first():$()}function dv2EnsureVideoStage(e){if(!e?.length)return $();const t=dv2GetStreamChromeEl(e),a=e.children("video, #stream-player").first();let n=dv2GetVideoStageEl(e);return!n.length&&a.length&&(n=$('<div class="dv2-video-stage"></div>'),a.before(n),n.append(a)),n.length?(t.length&&!t.parent().is(n)&&n.prepend(t),e.children(".dv2-stream-control
1s").each(function(){$.contains(n[0],this)||n.append(this)}),e.children(".dv2-stream-loading, .dv2-loading, .dv2-not-loaded").each(function(){$(this).appendTo(n)}),n):$()}function dv2SyncVideoStageLayout(e){if(!e?.length)return;const t=dv2EnsureVideoStage(e);if(!t.length)return;const a=t.find("video").first()[0],n=e[0];if(!a||!n)return void t.removeClass("dv2-video-stage--bounded").css({top:"",left:"",width:"",height:""});if(!dv2IsStreamWrapperFullscreen(e))return void t.removeClass("dv2-video-stage--bounded").css({top:"",left:"",width:"",height:""});const i=function dv2GetContainedVideoBounds(e,t){if(!e||!t?.width||!t?.height)return null;const a=e.videoWidth,n=e.videoHeight;if(!a||!n)return null;const i=a/n;let o,s,r,l;return i>t.width/t.height?(o=t.width,s=t.width/i,r=0,l=(t.height-s)/2):(s=t.height,o=t.height*i,l=0,r=(t.width-o)/2),{top:l,left:r,width:o,height:s}}(a,n.getBoundingClientRect());i?.width&&i?.height&&t.addClass("dv2-video-stage--bounded").css({top:i.top+"px",left:i.left+"px",width:i.width+"px",height:i.height+"px"})}function dv2EnsureStreamControlsBar(e){if(!e?.length)return;const t=e.find("video").first();e.find(".dv2-stream-controls").length||(e.children(".dv2-stream-fs-btn").remove(),function dv2GetStreamControlsMount(e){if(!e?.length)return e;const t=dv2EnsureVideoStage(e);return t.length?t:e}(e).append('<div class="dv2-stream-controls dv2-stream-controls--paused dv2-stream-controls--muted" role="toolbar" aria-label="Äiá»u khiá»n phát video">\n<button type="button" class="dv2-stream-controls__play" aria-label="Phát" title="Phát">\n<svg class="dv2-stream-controls__icon-play" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M4 2.5v11l9-5.5-9-5.5z"/></svg>\n<svg class="dv2-stream-controls__icon-pause" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M4 2h3v12H4V2zm5 0h3v12H9V2z"/></svg>\n</button>\n<div class="dv2-stream-controls__volume">\n<button type="button" class="dv2-stream-controls__mute" aria-label="Báºt tiếng" title="Ãm lượng">\n<svg class="dv2-stream-controls__icon-vol-on" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M7 2.5v11L3.5 11H1V5h2.5L7 2.5zm5.2 1.8a5 5 0 010 7.4M9.5 4.5a3.5 3.5 0 010 7"/></svg>\n<svg class="dv2-stream-controls__icon-vol-off" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M7 2.5v11L3.5 11H1V5h2.5L7 2.5zm7.8 2.3l-1.1 1.1L11.6 6l2.1 2.1-1.1 1.1L10.5 7.1 8.4 9.2l-1.1-1.1L9.4 6 7.3 3.9l1.1-1.1L9.5 4.9l2.1-2.1 1.1 1.1L11.6 6l2.1-2.1z"/></svg>\n</button>\n<input type="range" class="dv2-stream-volume" min="0" max="1" step="0.05" value="0" aria-label="Mức âm lượng">\n</div>\n<button type="button" class="dv2-stream-fs-btn" aria-label="Toà n mà n hình" title="Toà n mà n hình">\n<svg class="dv2-stream-fs-btn__expand" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M3 12h10V4H3v8zm2-6h6v4H5V6zM2 6H1V2.5l.5-.5H5v1H2v3zm13-3.5V6h-1V3h-3V2h3.5l.5.5zM14 10h1v3.5l-.5.5H11v-1h3v-3zM2 13h3v1H1.5l-.5-.5V10h1v3z"/></svg>\n<svg class="dv2-stream-fs-btn__shrink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M3.5 4H1V3h2V1h1v2.5l-.5.5zM13 3V1h-1v2.5l.5.5H15V3h-2zm-1 9.5V15h1v-2h2v-1h-2.5l-.5.5zM1 12v1h2v2h1v-2.5l-.5-.5H1zm11-1.5l-.5.5h-7l-.5-.5v-5l.5-.5h7l.5.5v5zM10 7H6v2h4V7z"/></svg>\n</button>\n</div>')),dv2SyncStreamControlsState(e,t)}function dv2SyncStreamControlsState(e,t){if(!e?.length)return;t=t||e.find("video").first();const a=t?.[0],n=e.find(".dv2-stream-controls");if(!a||!n.length)return;const i=a.paused,o=dv2IsStreamVideoMuted(a),s=o?0:a.volume;n.toggleClass("dv2-stream-controls--paused",i),n.toggleClass("dv2-stream-controls--muted",o);const r=i?"Phát":"Tạm dừng";n.find(".dv2-stream-controls__play").attr({"aria-label":r,title:r});const l=o?"Báºt tiếng":"Tắt tiếng";n.find(".dv2-stream-controls__mute").attr({"aria-label":l,title:l}),n.find(".dv2-stream-volume").val(s)}function dv2IsNativeWrapperFullscreen(e){const t=e?.[0];return!!t&&dv2GetFullscreenElement()===t}function dv2IsCssWrapperFullscreen(e){return!!e?.data("cssWrapperFs")}function dv2IsStreamWrapperFullscreen(e){return dv2IsNativeWrapperFullscreen(e)||dv2IsCssWrapperFullscreen(e)}function dv2SyncStreamWrapperFullscreenUi(e){if(!e?.length)return;const t=dv2IsStreamWrapperFullscreen(e);e.toggleClass("dv2-stream-wrapper-fs",t);const a=e.find(".dv2-stream-fs-btn");if(a.length){const e=t?"Thu nhá»":"Toà n mà n hình";a.attr({"aria-label":e,title:e})}}function dv2RestoreCssFullscreenPortal(e){if(!e?.length||!e.hasClass("dv2-fs-portal"))return;const t=e.data("dv2FsPortalPlaceholder"),a=e.data("dv2FsPortalParent");e.removeClass("dv2-fs-portal"),t?.length?(e.insertBefore(t),t.remove()):a?.length&&a.append(e),e.removeData("dv2FsPortalPlaceholder"),e.removeData("dv2FsPortalParent")}function dv2SyncCssFullscreenPortal(e){e?.length&&(dv2IsCssWrapperFullscreen(e)?function dv2MountCssFullscreenPortal(e){if(!e?.length||e.hasClass("dv2-fs-portal"))return;const t=$('<div class="dv2-fs-placeholder" aria-hidden="true"></div>'),a=e.outerHeight();a>0&&t.height(a),e.data("dv2FsPortalParent",e.parent()),t.insertBefore(e),e.data("dv2FsPortalPlaceholder",t),e.addClass("dv2-fs-portal"),$("body").append(e)}
1(e):dv2RestoreCssFullscreenPortal(e))}function dv2EnterCssWrapperFullscreen(e){e.data("cssWrapperFs",!0),$("body").addClass("dv2-stream-body-fs"),dv2SyncStreamWrapperFullscreenUi(e),e.trigger("dv2wrapperfschange")}function dv2ExitStreamWrapperFullscreen(e){dv2IsNativeWrapperFullscreen(e)&&function dv2ExitDocumentFullscreen(){const e=document.exitFullscreen||document.webkitExitFullscreen||document.mozCancelFullScreen||document.msExitFullscreen;e?Promise.resolve(e.call(document)):Promise.resolve()}(),dv2IsCssWrapperFullscreen(e)&&function dv2ExitCssWrapperFullscreen(e){e.data("cssWrapperFs",!1),dv2RestoreCssFullscreenPortal(e),$(".dv2-video-wrapper").toArray().some(e=>$(e).data("cssWrapperFs"))||$("body").removeClass("dv2-stream-body-fs"),dv2SyncStreamWrapperFullscreenUi(e),e.trigger("dv2wrapperfschange")}(e)}function dv2ToggleWrapperFullscreen(e){const t=e[0];t&&(dv2IsStreamWrapperFullscreen(e)?dv2ExitStreamWrapperFullscreen(e):function dv2ShouldPreferCssWrapperFullscreen(){return/iPad|iPhone|iPod/i.test(navigator.userAgent)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1}()?dv2EnterCssWrapperFullscreen(e):function dv2SupportsWrapperFullscreenApi(){const e=document.createElement("div");return!!(e.requestFullscreen||e.webkitRequestFullscreen||e.mozRequestFullScreen||e.msRequestFullscreen)}()?function dv2RequestElementFullscreen(e){if(!e)return Promise.reject();const t=e.requestFullscreen||e.webkitRequestFullscreen||e.mozRequestFullScreen||e.msRequestFullscreen;return t?Promise.resolve(t.call(e)):Promise.reject()}(t).then(()=>{dv2GetFullscreenElement()===t?(dv2SyncStreamWrapperFullscreenUi(e),e.trigger("dv2wrapperfschange")):dv2EnterCssWrapperFullscreen(e)}).catch(()=>{dv2EnterCssWrapperFullscreen(e)}):dv2EnterCssWrapperFullscreen(e))}function dv2RefreshStreamChromeReviveAds(e){const t=e&&"function"==typeof e.find&&e.length?e:$("string"==typeof e?e:document),a=new Set;if(t.find("ins[data-revive-id]").each(function(){const e=this.getAttribute("data-revive-id");e&&(this.removeAttribute("data-revive-loaded"),a.add(e))}),!a.size)return;const runRefresh=()=>{const e=window.reviveAsync;return!!e&&(a.forEach(t=>{const a=e[t];a&&("function"!=typeof a.refresh?"function"==typeof a.apply&&"function"==typeof a.detect&&a.apply(a.detect()):a.refresh())}),!0)};if(runRefresh())return;let n=0;const i=setInterval(()=>{n+=1,(runRefresh()||n>=20)&&clearInterval(i)},250)}function dv2UpdateStreamChromeVisibility(e){if(!e?.length)return;const t=e.hasClass("dv2-full-stream-active");dv2GetStreamChromeEl(e).attr("aria-hidden",t?"false":"true")}function dv2SetFullStreamChromeVisible(e,t){e?.length&&(e.toggleClass("dv2-full-stream-active",!!t),t&&dv2RefreshStreamChromeReviveAds(),dv2UpdateStreamChromeVisibility(e))}function dv2SyncStreamChromeVisibility(e){if(!e?.length)return;const t=!!e.data("hlsReady");dv2SetFullStreamChromeVisible(e,t)}function dv2BindStreamChromeEvents(e){if(e.data("streamChromeBound"))return;e.data("streamChromeBound",!0),function dv2InitCssFullscreenPortal(e){e?.length&&!e.data("dv2FsPortalBound")&&(e.data("dv2FsPortalBound",!0),e.on("dv2wrapperfschange.dv2FsPortal",function(){dv2SyncCssFullscreenPortal(e)}),$(document).on("fullscreenchange.dv2FsPortal webkitfullscreenchange.dv2FsPortal",function(){dv2SyncCssFullscreenPortal(e)}),$(window).on("pagehide.dv2FsPortal",function(){dv2RestoreCssFullscreenPortal(e)}))}(e),e.on("click",".dv2-stream-chrome-footer .dv2-stream-chrome-close",t=>{t.preventDefault(),t.stopPropagation(),e.addClass("dv2-stream-chrome-footer-closed"),dv2GetStreamChromeEl(e).addClass("dv2-stream-chrome-footer-closed"),dv2UpdateStreamChromeVisibility(e)}),e.on("click",".dv2-stream-chrome-right .dv2-stream-chrome-close",t=>{t.preventDefault(),t.stopPropagation(),e.addClass("dv2-stream-chrome-right-closed"),dv2GetStreamChromeEl(e).addClass("dv2-stream-chrome-right-closed"),dv2UpdateStreamChromeVisibility(e)}),e.on("click",".dv2-stream-fs-btn",function(t){t.preventDefault(),t.stopPropagation(),dv2ToggleWrapperFullscreen(e)}),e.on("click",".dv2-stream-controls__play",function(t){t.preventDefault(),t.stopPropagation();const a=e.find("video").first();dv2ToggleStreamVideoPlayPause(a),dv2SyncStreamControlsState(e,a),dv2PulseStreamControlsVisible(e)}
1),e.on("click",".dv2-stream-controls__mute",function(t){t.preventDefault(),t.stopPropagation();const a=e.find("video")[0];a&&(dv2IsStreamVideoMuted(a)?(a.muted=!1,0===a.volume&&(a.volume=.7)):a.muted=!0,dv2MarkStreamVolumeTouched(a),dv2SyncStreamControlsState(e),dv2PulseStreamControlsVisible(e))}),e.on("input change",".dv2-stream-volume",function(t){t.stopPropagation();const a=e.find("video")[0];if(!a)return;const n=parseFloat(this.value);Number.isNaN(n)||(a.volume=n,a.muted=0===n,dv2MarkStreamVolumeTouched(a),dv2SyncStreamControlsState(e),dv2PulseStreamControlsVisible(e))});let t=null,a=null;const isStreamChromeUiClick=e=>$(e).closest(".dv2-stream-controls, .dv2-stream-chrome-close, .dv2-stream-chrome-header, .dv2-stream-chrome-right, .dv2-stream-chrome-footer, .dv2-stream-odds-slot, .dv2-stream-odds-panel, button, a, input, label").length>0,clearStreamControlsHideTimer=()=>{a&&(clearTimeout(a),a=null)},setStreamControlsVisible=t=>{e.toggleClass("dv2-stream-ui-active",!!t)},pulseStreamControlsVisible=()=>{setStreamControlsVisible(!0),clearStreamControlsHideTimer(),a=setTimeout(()=>{setStreamControlsVisible(!1),a=null},2600)};e.data("dv2PulseStreamControlsVisible",pulseStreamControlsVisible),e.on("click","video",function(e){if(isStreamChromeUiClick(e.target))return;pulseStreamControlsVisible();const a=$(this);clearTimeout(t),t=setTimeout(()=>{t=null,(e=>{const t=e?.[0];t&&(t.paused?t.play().catch(()=>console.warn("[VSC LIVE] Không thỠphát video")):t.pause())})(a)},220)}),e.on("dblclick","video",function(a){isStreamChromeUiClick(a.target)||(clearTimeout(t),t=null,a.preventDefault(),dv2ToggleWrapperFullscreen(e))}),e.on("mousemove.dv2StreamUi pointerenter.dv2StreamUi pointerdown.dv2StreamUi touchstart.dv2StreamUi",function(){pulseStreamControlsVisible()}),e.on("playing.dv2StreamUi","video",function(){pulseStreamControlsVisible()}),e.on("play.dv2StreamControls pause.dv2StreamControls volumechange.dv2StreamControls loadedmetadata.dv2StreamControls","video",function(){dv2SyncStreamControlsState(e,$(this))}),e.on("mouseleave.dv2StreamUi",function(){clearStreamControlsHideTimer(),setStreamControlsVisible(!1)});const syncFullscreenChrome=()=>{!dv2IsNativeWrapperFullscreen(e)&&dv2IsCssWrapperFullscreen(e)||dv2IsNativeWrapperFullscreen(e)||(e.data("cssWrapperFs",!1),dv2RestoreCssFullscreenPortal(e),$(".dv2-video-wrapper").toArray().some(e=>$(e).data("cssWrapperFs"))||$("body").removeClass("dv2-stream-body-fs"));const t=dv2IsStreamWrapperFullscreen(e);dv2SyncCssFullscreenPortal(e),dv2SyncStreamWrapperFullscreenUi(e),t?pulseStreamControlsVisible():(clearStreamControlsHideTimer(),setStreamControlsVisible(!1)),dv2SyncStreamChromeVisibility(e),dv2SyncVideoStageLayout(e)};$(document).on("fullscreenchange.dv2StreamChrome webkitfullscreenchange.dv2StreamChrome mozfullscreenchange.dv2StreamChrome MSFullscreenChange.dv2StreamChrome",syncFullscreenChrome),e.on("dv2wrapperfschange.dv2StreamChrome",syncFullscreenChrome),$(window).on("resize.dv2StreamChrome orientationchange.dv2StreamChrome",function(){syncFullscreenChrome(),dv2SyncVideoStageLayout(e)})}function dv2PulseStreamControlsVisible(e){const t=e?.data("dv2PulseStreamControlsVisible");"function"==typeof t&&t()}function dv2ToggleStreamVideoPlayPause(e){const t=e?.[0];t&&(t.paused?t.play().catch(()=>console.warn("[VSC LIVE] Không thỠphát video")):t.pause())}function dv2GetStreamOddsApiBase(){if("undefined"!=typeof API_URL)return String(API_URL).replace(/\/?$/,"/");if("undefined"!=typeof BASE_API_URL){const e=String(BASE_API_URL);return e.endsWith("/api/data/")||e.endsWith("/api/data")?e.replace(/\/?$/,"/"):`${e.replace(/\/?$/,"")}/api/data/`}return"https://vsc-apidev.helizones.com/api/data/"}function dv2NormalizeOddsTrend(e){const t=String(e||"same").toLowerCase();return"up"===t||"down"===t?t:"same"}function dv2FormatOddsValue(e){if(null==e||""===e)return"-";const t=Number(e);if(Number.isNaN(t))return String(e);const a=Math.round(100*t)/100;return Number.isInteger(a)?String(a):a.toFixed(2).replace(/0$/,"")}function dv2CountMatchEvents(e,t,a){if(!Array.isArray(e))return 0;const n=String(t).toLowerCase();return e.filter(e=>{const t=String(e?.type||"").toLowerCase();return e?.team===a&&t.includes(n)}).length}function dv2ExtractOddsSnapshot(e){const t=e?.hdp,a=e?.ou,n=e?.stats||{},i=e?.corner||n?.corner||n?.corners||{},o=e?.yellowCard||n?.yellowCard||{},s=e?.events;return{hdp:{home:t?.home,away:t?.away,rate:t?.rate,homeTrend:dv2NormalizeOddsTrend(t?.homeTrend),awayTrend:dv2NormalizeOddsTrend(t?.awayTrend),rateTrend:dv2NormalizeOddsTrend(t?.rateTrend)},ou:{over:a?.over,under:a?.under,rate:a?.rate,overTrend:dv2NormalizeOddsTrend(a?.overTrend),underTrend:dv2NormalizeOddsTrend(a?.underTrend),rateTrend:dv2NormalizeOddsTrend(a?.rateTrend)},corners:{home:i.home??dv2CountMatchEvents(s,"corner","home"),away:i.away??dv2CountMatchEvents(s,"corner","away")},yellowCard:{home:o.home??dv2CountMatchEvents(s,"yellow card","home"),away:o.away??dv2CountMatchEvents(s,"yellow card","away")}}}function dv2SerializeOddsSnapshot(e){return JSON.stringify(e||{})}function dv2OddsValueHasData(e){return null!=e&&""!==e}function dv2OddsSectionHasData(e){return null!=e&&(dv2OddsValueHasData(e.home)||dv2OddsValueHasData(e.away)||dv2OddsValueHasData(e.rate)||dv2OddsValueHasData(e.over)||dv2OddsValueHasData(e.under))}function dv2HasStreamOddsData(e){return!!e&&(dv2OddsSectionHasData(e.hdp)||dv2OddsSectionHasData(e.ou))}function dv2UpdateOddsPill(e,t,a,n,i,o){const s=e.find(t);if(!s.length)return;const r=dv2NormalizeOddsTrend(n),l=!(!o||!o.signedRate),d="rate"===i&&l?function dv2FormatOddsRate(e){if(null==e||""===e)return"-";const t=Number(e);return Number.isNaN(t)?String(e):t>0?`+${dv2FormatOddsValue(t)}`:dv2FormatOddsValue(t)}(a):dv2FormatOddsValue(a),c="rate"!==i&&"up"===r?'<svg width="6" height="6" viewBox="0 0 9 8" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M3.69976 0.258553L0.0659156 6.7166C-0.124386 7.0548 0.120008 7.47275 0.508076 7.47275H7.77577C8.16384 7.47275 8.40823 7.0548 8.21793 6.7166L4.58408 0.258553C4.3901 -0.0861874 3.89374 -0.0861869 3.69976 0.258553Z" fill="#469631"></path></svg>':"rate"!==i&&"down"===r?'<svg width="6" height="6" viewBox="0 0 9 8" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M3.6984 7.21387L0.0658934 0.756087C-0.124346 0.417884 0.120053 0 0.508089 0H7.7731C8.16114 0 8.40553 0.417885 8.21529 0.756088L4.58279 7.21387C4.38883 7.5587 3.89236 7.5587 3.6984 7.21387Z" fill="#F94A4A"></path></svg>':"",m="rate"!==i&&"same"!==r?` dv2-stream-odds-panel__pill--${r}`:"";s.attr("class",`dv2-stream-odds-panel__pill dv2-stream-odds-panel__pill--${i}${m}`).html(`${d}${c}`)}function dv2RenderStreamOddsPanel(e,t){e?.length&&t&&(dv2UpdateOddsPill(e,"[data-dv2-odds-hdp-home]",t.hdp.home,t.hdp.homeTrend,"side"),dv2UpdateOddsPill(e,"[data-dv2-odds-hdp-rate]",t.hdp.rate,t.hdp.rateTrend,"rate",{signedRate:!0}),dv2UpdateOddsPill(e,"[data-dv2-odds-hdp-away]",t.hdp.away,t.hdp.awayTrend,"side"),dv2UpdateOddsPill(e,"[data-dv2-odds-ou-over]",t.ou.over,t.ou.overTrend,"side"),dv2UpdateOddsPill(e,"[data-dv2-odds-ou-rate]",t.ou.rate,t.ou.rateTrend,"rate"),dv2UpdateOddsPill(e,"[data-dv2-odds-ou-under]",t.ou.under,t.ou.underTrend,"side"),e.find("[data-dv2-odds-corners-home]").text(t.corners.home??0),e.find("[data-dv2-odds-corners-away]").text(t.corners.away??0),e.find("[data-dv2-odds-yc-home]").text(t.yellowCard.home??0),e.find("[data-dv2-odds-yc-away]").text(t.yellowCard.away??0))}function dv2ForceApplyStreamOddsData(e,t){const a=e.data("dv2OddsPanelState"),n=a?.$panel;if(!a||!n?.length||!t)return;const i=dv2ExtractOddsSnapshot(t);a.snapshotSerialized=dv2SerializeOddsSnapshot(i),dv2RenderStreamOddsPanel(n,i),dv2HasStreamOddsData(t)||(a.autoHideTimer&&(clearTimeout(a.autoHideTimer),a.autoHideTimer=null),dv2SetStreamOddsPanelOpen(n,!1))}function dv2RememberStreamOddsMatchData(e,t){e?.length&&t&&e.data("dv2OddsMatchData",t)}function dv2SetStreamOddsPanelOpen(e,t,a){if(!e?.length)return;const n=!!t,i=!(!a||!a.auto),o=e.closest("[data-dv2-odds-panel]");e.toggleClass("dv2-stream-odds-panel--open",n).toggleClass("dv2-stream-odds-panel--collapsed",!n).attr("aria-hidden",n?"false":"true"),o.toggleClass("dv2-stream-odds-slot--open",n).attr("aria-hidden",n?"false":"true"),e.find(".dv2-stream-odds-panel__toggle-close").attr("aria-expanded",n?"true":"false"),o.find(".dv2-stream-odds-panel__toggle-open").attr("aria-expanded",n?"true":"false"),e.data("dv2OddsAutoVisible",i)}function dv2BindStreamOddsPanelToggle(e){const t=e?.data("dv2OddsPanelState"),a=t?.$panel;if(!t||!a?.length)return;const n=a.closest("[data-dv2-odds-panel]");e.off("click.dv2OddsPanel",".dv2-stream-odds-panel__toggle-close, .dv2-stream-odds-panel__toggle-open"),n.off("click.dv2OddsPanel"),n.on("click.dv2OddsPanel",".dv2-stream-odds-panel__toggle-close",function(e){e.preventDefault(),e.stopPropagation(),t.autoHideTimer&&(clearTimeout(t.autoHideTimer),t.autoHideTimer=null),dv2SetStreamOddsPanelOpen(a,!1)}),n.on("click.dv2OddsPanel",".dv2-stream-odds-panel__toggle-open",function(e){e.preventDefault(),e.stopPropagation(),dv2SetStreamOddsPanelOpen(a,!0,{auto:!1}
1)})}function dv2DestroyStreamOddsPanel(e){e?.length&&(function dv2ClearStreamOddsTimers(e){const t=e.data("dv2OddsPanelState");t&&(t.pollTimer&&(clearInterval(t.pollTimer),t.pollTimer=null),t.autoShowTimer&&(clearInterval(t.autoShowTimer),t.autoShowTimer=null),t.autoHideTimer&&(clearTimeout(t.autoHideTimer),t.autoHideTimer=null))}(e),e.removeData("dv2OddsPanelState"),e.off(".dv2OddsPanel"),dv2GetStreamChromeEl(e).find("[data-dv2-odds-panel]").empty())}function dv2PollStreamOddsPanel(e){const t=e.data("dv2OddsPanelState");t?.matchId&&$.ajax&&$.ajax({url:`${t.apiBase}lives/${t.matchId}`,method:"GET",success(t){t?.data&&function dv2ApplyStreamOddsData(e,t){const a=e.data("dv2OddsPanelState"),n=a?.$panel;if(!a||!n?.length||!t)return;const i=dv2ExtractOddsSnapshot(t),o=dv2SerializeOddsSnapshot(i);a.snapshotSerialized!==o&&(a.snapshotSerialized=o,dv2RenderStreamOddsPanel(n,i),dv2RememberStreamOddsMatchData(e,t),dv2HasStreamOddsData(t)?e.data("hlsReady")&&!a.hasShownFirstAuto&&function dv2SnapshotHasOddsData(e){return!!e&&(dv2OddsSectionHasData(e.hdp)||dv2OddsSectionHasData(e.ou))}(i)&&dv2MaybeShowFirstStreamOddsAuto(e):(a.autoHideTimer&&(clearTimeout(a.autoHideTimer),a.autoHideTimer=null),dv2SetStreamOddsPanelOpen(n,!1)))}(e,t.data)}})}function dv2ShowStreamOddsAuto(e){const t=e.data("dv2OddsPanelState"),a=t?.$panel;t&&a?.length&&dv2HasStreamOddsData(e.data("dv2OddsMatchData"))&&(dv2SetStreamOddsPanelOpen(a,!0,{auto:!0}),function dv2ScheduleStreamOddsAutoHide(e){const t=e.data("dv2OddsPanelState");t?.$panel?.length&&(t.autoHideTimer&&(clearTimeout(t.autoHideTimer),t.autoHideTimer=null),t.autoHideTimer=setTimeout(()=>{t.autoHideTimer=null,t.$panel.data("dv2OddsAutoVisible")&&dv2SetStreamOddsPanelOpen(t.$panel,!1)},1e4))}(e))}function dv2MaybeShowFirstStreamOddsAuto(e){const t=e.data("dv2OddsPanelState");t?.$panel?.length&&!t.hasShownFirstAuto&&dv2HasStreamOddsData(e.data("dv2OddsMatchData"))&&(t.hasShownFirstAuto=!0,dv2SetStreamOddsPanelOpen(t.$panel,!0,{auto:!1}))}function dv2EnsureStreamOddsPanelShell(e){if(!e?.length)return $();let t=dv2GetStreamChromeEl(e);if(!t.length){t=$('<div class="dv2-stream-chrome" aria-hidden="true"></div>');const a=dv2GetVideoStageEl(e);a.length?a.prepend(t):e.prepend(t)}let a=t.find("[data-dv2-odds-panel]").first();a.length||(a=t.children("[data-dv2-odds-panel]").first()),a.length||(a=e.children("[data-dv2-odds-panel]").first()),a.length||(a=$('<div class="dv2-stream-odds-slot" data-dv2-odds-panel aria-hidden="true"></div>'),t.prepend(a));let n=a.find("[data-dv2-odds-panel-root]");return n.length||(a.html(function dv2BuildStreamOddsPanelHtml(e){const t=e?.imageUrl||"",a=e?.linkUrl||"",n=a?"a":"div";return`\n<div class="dv2-stream-odds-panel dv2-stream-odds-panel--collapsed" data-dv2-odds-panel-root aria-hidden="true">\n <div class="dv2-stream-odds-panel__viewport">\n <div class="dv2-stream-odds-panel__slide">\n <div class="dv2-stream-odds-panel__body">\n <${n}${a?` class="dv2-stream-odds-panel__brand" href="${a}" target="_blank" rel="noopener noreferrer"`:' class="dv2-stream-odds-panel__brand"'}>\n <span class="dv2-stream-odds-panel__brand-label">Cược</span>\n ${t?`<img src="${t}" alt="Cược" loading="lazy" decoding="async">`:""}\n </${n}>\n <div class="dv2-stream-odds-panel__rows">\n <div class="dv2-stream-odds-panel__row dv2-stream-odds-panel__row--hdp">\n <span class="dv2-stream-odds-panel__row-label">HDP</span>\n <span class="dv2-stream-odds-panel__pill dv2-stream-odds-panel__pill--side" data-dv2-odds-hdp-home>-</span>\n <span class="dv2-stream-odds-panel__pill dv2-stream-odds-panel__pill--rate" data-dv2-odds-hdp-rate>-</span>\n <span class="dv2-stream-odds-panel__pill dv2-stream-odds-panel__pill--side" data-dv2-odds-hdp-away>-</span>\n </div>\n <div class="dv2-stream-odds-panel__row dv2-stream-odds-panel__row--ou">\n <span class="dv2-stream-odds-panel__row-label">O/U</span>
1\n <span class="dv2-stream-odds-panel__pill dv2-stream-odds-panel__pill--side" data-dv2-odds-ou-over>-</span>\n <span class="dv2-stream-odds-panel__pill dv2-stream-odds-panel__pill--rate" data-dv2-odds-ou-rate>-</span>\n <span class="dv2-stream-odds-panel__pill dv2-stream-odds-panel__pill--side" data-dv2-odds-ou-under>-</span>\n </div>\n </div>\n <div class="dv2-stream-odds-panel__stats">\n <span data-dv2-odds-corners-home>0</span>\n <span class="dv2-stream-odds-panel__stat-icon"><svg width="10" height="10" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M1.25762 14.4734L11.7539 7.51758M7.71808 10.0793C7.71808 10.0793 11.7548 11.1782 11.3506 14.4734M0.451172 14.4734H13.7735" stroke="#2DB10B" stroke-width="1.33224"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M1.49032 2.39258V14.5972H0.451172V2.39342H1.49032V2.39258Z" fill="#2DB10B"></path><path d="M0.451172 5.68755H9.33275L0.451172 0.5625V5.68755Z" fill="#2DB10B"></path></svg></span>\n <span data-dv2-odds-corners-away>0</span>\n <span class="dv2-stream-odds-panel__stat-sep" aria-hidden="true">|</span>\n <span data-dv2-odds-yc-home>0</span>\n <span class="dv2-stream-odds-panel__stat-icon"><svg width="7" height="10" viewBox="0 0 10 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><rect width="10" height="16" rx="2" fill="#F7FF00"></rect></svg></span>\n <span data-dv2-odds-yc-away>0</span>\n </div>\n </div>\n <button type="button" class="dv2-stream-odds-panel__toggle-close" aria-label="Thu gá»n" aria-expanded="false">\n <svg class="dv2-stream-odds-panel__toggle-icon--close" viewBox="0 0 72 72" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><g filter="url(#dv2_odds_filter_close)"><path d="M18.3063 41.9042L10.4543 53.8015C8.88006 56.1882 11.6954 58.9857 14.3331 57.6572L56.4611 36.4132C58.513 35.3784 58.513 32.6199 56.4611 31.5851L14.3331 10.3438C11.6954 9.01263 8.88006 11.8127 10.4543 14.1995L18.3063 26.0967C21.5021 30.9404 21.5021 37.0606 18.3063 41.9042Z" fill="#F7FF00"></path></g><defs><filter id="dv2_odds_filter_close" x="0" y="0" width="72" height="72" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"></feColorMatrix><feOffset dx="2" dy="2"></feOffset><feGaussianBlur stdDeviation="6"></feGaussianBlur><feComposite in2="hardAlpha" operator="out"></feComposite><feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 0.933333 0 0 0 0 0 0 0 0 0.35 0"></feColorMatrix><feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow"></feBlend><feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow" result="shape"></feBlend></filter></defs></svg>\n </button>\n </div>\n </div>\n</div>\n<button type="button" class="dv2-stream-odds-panel__toggle-open" aria-label="Má» rá»ng" aria-expanded="false">\n <svg class="dv2-stream-odds-panel__toggle-icon--open" viewBox="0 0 72 72" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><g filter="url(#dv2_odds_filter_open)"><path d="M49.6937 41.9042L57.5457 53.8015C59.1199 56.1882 56.3046 58.9857 53.6669 57.6572L11.5389 36.4132C9.48704 35.3784 9.48704 32.6199 11.5389 31.5851L53.6669 10.3438C56.3046 9.01263 59.1199 11.8127 57.5457 14.1995L49.6937 26.0967C46.4979 30.9404 46.4979 37.0606 49.6937 41.9042Z" fill="#F7FF00"></path></g><defs><filter id="dv2_odds_filter_open" x="0" y="0" width="72" height="72" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"></feColorMatrix><feOffset dx="2" dy="2"></feOffset><feGaussianBlur stdDeviation="6"></feGaussianBlur><feComposite in2="hardAlpha" operator="out"></feComposite><feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 0.933333 0 0 0 0 0 0 0 0 0.35 0"></feColorMatrix>
1<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow"></feBlend><feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow" result="shape"></feBlend></filter></defs></svg>\n</button>`}(function dv2GetStreamOddsPanelConfig(){const e=window.DV2_STREAM_ODDS_PANEL||{};return{imageUrl:e.imageUrl||"",linkUrl:e.linkUrl||""}}())),n=a.find("[data-dv2-odds-panel-root]")),n}function dv2InitStreamOddsPanel(e,t){if(!e?.length)return;t?dv2RememberStreamOddsMatchData(e,t):t=e.data("dv2OddsMatchData");const a=t?.matchId||t?.match_id||t?.id||function dv2GetStreamMatchId(){if("undefined"!=typeof DV2_MATCH_ID&&DV2_MATCH_ID)return String(DV2_MATCH_ID);try{const e=new URLSearchParams(window.location.search).get("match");if(e)return e}catch(e){}const e=window.location.pathname.match(/\/streams\/([^/?#]+)/i);return e?e[1]:""}();if(!a)return;const n=dv2EnsureStreamOddsPanelShell(e);if(!n.length)return;if(e.data("dv2OddsPanelState")?.matchId===a)return e.data("dv2OddsPanelState").$panel=dv2EnsureStreamOddsPanelShell(e),t&&(dv2RememberStreamOddsMatchData(e,t),dv2ForceApplyStreamOddsData(e,t),e.data("hlsReady")&&dv2MaybeShowFirstStreamOddsAuto(e)),void dv2BindStreamOddsPanelToggle(e);dv2DestroyStreamOddsPanel(e);const i={matchId:a,apiBase:dv2GetStreamOddsApiBase(),$panel:n,snapshotSerialized:"",pollTimer:null,autoShowTimer:null,autoHideTimer:null,hasShownFirstAuto:!1};e.data("dv2OddsPanelState",i),dv2SetStreamOddsPanelOpen(n,!1),t?dv2ForceApplyStreamOddsData(e,t):dv2PollStreamOddsPanel(e),i.pollTimer=setInterval(()=>{dv2PollStreamOddsPanel(e)},15e3),i.autoShowTimer=setInterval(()=>{n.hasClass("dv2-stream-odds-panel--open")||dv2ShowStreamOddsAuto(e)},18e4),dv2BindStreamOddsPanelToggle(e),e.data("hlsReady")&&dv2MaybeShowFirstStreamOddsAuto(e)}window.DV2_StreamChrome={getChromeEl:dv2GetStreamChromeEl,getOverlayMount:function dv2GetOverlayMount(e){const t=dv2EnsureVideoStage(e);return t.length?t:e},ensureVideoStage:dv2EnsureVideoStage,syncVideoStageLayout:dv2SyncVideoStageLayout,applyVideoControls:dv2ApplyStreamVideoControls,ensureControlsBar:dv2EnsureStreamControlsBar,syncControlsState:dv2SyncStreamControlsState,bindEvents:dv2BindStreamChromeEvents,initPlayerUi:function dv2InitStreamPlayerUi(e,t){e?.length&&(t=t||e.find("video").first(),t?.length&&(dv2ApplyStreamVideoControls(t),function dv2ApplyStreamAutoplayMuted(e){if(!e?.length)return;const t=e[0];t&&"1"!==t.dataset.dv2VolumeTouched&&(t.muted=!0)}(t)),dv2EnsureVideoStage(e),dv2EnsureStreamControlsBar(e),dv2BindStreamChromeEvents(e),function dv2InitVideoStageSync(e){if(!e?.length||e.data("dv2VideoStageSyncBound"))return;e.data("dv2VideoStageSyncBound",!0);const scheduleSync=()=>function dv2ScheduleVideoStageLayoutSync(e){if(!e?.length)return;if(e.data("dv2VideoStageSyncRaf"))return;const t=requestAnimationFrame(()=>{e.removeData("dv2VideoStageSyncRaf"),dv2SyncVideoStageLayout(e)});e.data("dv2VideoStageSyncRaf",t)}(e);if(scheduleSync(),e.on("loadedmetadata.dv2StageSync loadeddata.dv2StageSync resize.dv2StageSync","video",scheduleSync),"undefined"!=typeof ResizeObserver){const t=new ResizeObserver(scheduleSync);t.observe(e[0]);const a=e.find("video").first()[0];a&&t.observe(a),e.data("dv2VideoStageResizeObserver",t)}$(window).on("resize.dv2StageSync orientationchange.dv2StageSync",scheduleSync),e.on("dv2wrapperfschange.dv2StageSync",scheduleSync),$(document).on("fullscreenchange.dv2StageSync webkitfullscreenchange.dv2StageSync",scheduleSync)}(e),dv2SyncStreamControlsState(e,t),dv2SyncVideoStageLayout(e))},refreshReviveAds:dv2RefreshStreamChromeReviveAds,setFullChromeVisible:dv2SetFullStreamChromeVisible,syncVisibility:dv2SyncStreamChromeVisibility,updateVisibility:dv2UpdateStreamChromeVisibility,onHlsReady:function dv2OnHlsStreamReady(e){if(!e?.length)return;e.data("hlsReady",!0),dv2SyncStreamChromeVisibility(e),dv2InitStreamOddsPanel(e,e.data("dv2OddsMatchData"));const t=e.data("dv2OddsPanelState");t?.$panel?.length&&(t.hasShownFirstAuto?t.$panel.hasClass("dv2-stream-odds-panel--open")||dv2ShowStreamOddsAuto(e):dv2MaybeShowFirstStreamOddsAuto(e))},clearFullChrome:function dv2ClearFullStreamChrome(e){if(!e?.length)return;e.data("hlsReady",!1),dv2SetFullStreamChromeVisible(e,!1);const t=e.data("dv2OddsPanelState");t?.$panel?.length&&(t.autoHideTimer&&(clearTimeout(t.autoHideTimer),t.autoHideTimer=null),dv2SetStreamOddsPanelOpen(t.$panel,!1)),dv2ExitStreamWrapperFullscreen(e)},initOddsPanel:dv2InitStreamOddsPanel,rememberOddsMatchData:dv2RememberStreamOddsMatchData,destroyOddsPanel:dv2DestroyStreamOddsPanel,exitWrapperFullscreen:dv2ExitStreamWrapperFullscreen,toggleWrapperFullscreen:dv2ToggleWrapperFullscreen,pulseControlsVisible:dv2PulseStreamControlsVisible,togglePlayPause:dv2ToggleStreamVideoPlayPause,getWrapperFrom:e=>e.closest(".dv2-video-wrapper")}}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window){window.DV2StreamKickoff=window.DV2StreamKickoff||{},function(DV2StreamKickoff){let e=null;DV2StreamKickoff.getKickoff=function getKickoff(e){return e?"string"==typeof e||e instanceof Date||"number"==typeof e?e:e?.matchInfo?.kickoff??e?.kickoff??"":""},DV2StreamKickoff.getDefaultHot18PosterUrl=function getDefaultHot18PosterUrl(){return`${function getImagePath(){return"undefined"!=typeof DV2_IMAGE_PATH&&DV2_IMAGE_PATH?DV2_IMAGE_PATH.endsWith("/")?DV2_IMAGE_PATH:`${DV2_IMAGE_PATH}/`:"string"==typeof window.DV2_STREAMING_PLUGIN_URL&&window.DV2_STREAMING_PLUGIN_URL?`${window.DV2_STREAMING_PLUGIN_URL.endsWith("/")?window.DV2_STREAMING_PLUGIN_URL:`${window.DV2_STREAMING_PLUGIN_URL}/`}assets/images/`:"../../assets/images/"}()}bg-18+.webp`},DV2StreamKickoff.resolvePosterUrl=function resolvePosterUrl(e,t){return function isHot18Link(e){if(!e)return!1;const t=function getHot18CommentatorId(){return String(window.DV2_STREAMING_HOT18_COMMENTATOR_ID||"18602824317240064")}();if(t&&String(e.commentatorId||"")===t)return!0;const a=String(e.commentator||"").trim().toLowerCase();return"18+"===a||"18"===a}(e)?String(window.DV2_STREAMING_HOT18_POSTER_URL||"").trim()||DV2StreamKickoff.getDefaultHot18PosterUrl():t},DV2StreamKickoff.applyPosterForLink=function applyPosterForLink(e,t,a){const $=window.jQuery;$?.fn&&e?.length&&e.attr("poster",DV2StreamKickoff.resolvePosterUrl(t,a))},DV2StreamKickoff.applyPosterForVideo=function applyPosterForVideo(e,t,a){e&&(e.poster=DV2StreamKickoff.resolvePosterUrl(t,a))},DV2StreamKickoff.getKickoffDiffMs=function getKickoffDiffMs(e){const t=new Date(DV2StreamKickoff.getKickoff(e));return Number.isNaN(t.getTime())?null:t.getTime()-Date.now()},DV2StreamKickoff.shouldShowCountdown=function shouldShowCountdown(e){const t=DV2StreamKickoff.getKickoffDiffMs(e);return null!==t&&t>0&&t<864e5},DV2StreamKickoff.formatCountdown=function formatCountdown(e){const t=DV2StreamKickoff.getKickoffDiffMs(e);if(null===t||t<=0)return"00:00:00";const a=Math.floor(t/36e5),n=Math.floor(t%36e5/6e4),i=Math.floor(t%6e4/1e3);return`${String(a).padStart(2,"0")}
1:${String(n).padStart(2,"0")}:${String(i).padStart(2,"0")}`},DV2StreamKickoff.formatTime=function formatTime(e){const t=new Date(DV2StreamKickoff.getKickoff(e));return!e||Number.isNaN(t.getTime())?"":`${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`},DV2StreamKickoff.formatDateLabel=function formatDateLabel(e){const t=new Date(DV2StreamKickoff.getKickoff(e));return!e||Number.isNaN(t.getTime())?"":`${String(t.getDate()).padStart(2,"0")}/${String(t.getMonth()+1).padStart(2,"0")}/${t.getFullYear()}`},DV2StreamKickoff.renderTimeDisplay=function renderTimeDisplay(e,t){const a=(t=t||{}).formatTime||DV2StreamKickoff.formatTime,n=t.formatDateLabel||DV2StreamKickoff.formatDateLabel,i=t.countdownClass||"dv2-kickoff-countdown",o=DV2StreamKickoff.getKickoff(e);return DV2StreamKickoff.shouldShowCountdown(o)?`Bắt Äầu sau: <strong class="${i}" data-dv2-kickoff-countdown>${DV2StreamKickoff.formatCountdown(o)}</strong>`:`${t.useFooterTitle?'<strong class="dv2-layout-vb2-footer-title">Thá»i gian:</strong>':"Thá»i gian:"} <strong>${a(o)}</strong> ngà y ${n(o)}`},DV2StreamKickoff.stopCountdown=function stopCountdown(){e&&(clearInterval(e),e=null)},DV2StreamKickoff.startCountdown=function startCountdown(t){DV2StreamKickoff.stopCountdown();const $=window.jQuery,a=DV2StreamKickoff.getKickoff(t);if(!$?.fn||!DV2StreamKickoff.shouldShowCountdown(a))return;const tick=()=>{const e=$(".dv2-kickoff-countdown[data-dv2-kickoff-countdown]");if(!e.length)return void DV2StreamKickoff.stopCountdown();const t=DV2StreamKickoff.getKickoffDiffMs(a);if(null===t||t<=0)return e.text("00:00:00"),void DV2StreamKickoff.stopCountdown();e.text(DV2StreamKickoff.formatCountdown(a))};tick(),e=setInterval(tick,1e3)}}(window.DV2StreamKickoff)}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window){window.DV2StreamLinks=window.DV2StreamLinks||{},function(DV2StreamLinks){DV2StreamLinks.isNhaDaiLink=function isNhaDaiLink(e){if(!e)return!1;if(1e17===e.commentatorId)return!0;const t=String(e.commentator||"").trim().toLowerCase();return"nhà Äà i"===t||"nha dai"===t||"blv nhà Äà i"===t},DV2StreamLinks.sortLinks=function sortLinks(e,t){const a=(!0===t?.includeAll?(e||[]).slice():(e||[]).filter(e=>!1!==e?.isStreaming)).slice();return a.sort((e,t)=>{const a=DV2StreamLinks.isNhaDaiLink(e),n=DV2StreamLinks.isNhaDaiLink(t);return a&&!n?1:!a&&n?-1:0}),a},DV2StreamLinks.sort=function sort(e){return DV2StreamLinks.sortLinks(e)},DV2StreamLinks.sortForDetail=function sortForDetail(e){return DV2StreamLinks.sortLinks(e,{includeAll:!0})},DV2StreamLinks.getPreferredLink=function getPreferredLink(e,t){const a=!1!==t?.preferStreaming,n=DV2StreamLinks.sort(e);return n.length?n[0]:a&&DV2StreamLinks.sortForDetail(e)[0]||null},DV2StreamLinks.getBlvName=function getBlvName(e,t){return String(e?.commentator||"").trim()||`Link ${t+1}`},DV2StreamLinks.resolveBrandLandingUrl=function resolveBrandLandingUrl(e){if(null==e||""===e)return null;const t=String(e).trim();if(!t)return null;const a=t.indexOf("?"),n=a>=0?t.slice(0,a):t,i=a>=0?t.slice(a+1):"",o=n.split("/").filter(Boolean).pop()||"",s=o.lastIndexOf("-");if(s<0)return null;const r=o.slice(s+1);if(!r)return null;const l=i?`?${i}`:"";return`/streams/${encodeURIComponent(r)}/${l}`},DV2StreamLinks.getDetailUrl=function getDetailUrl(e,t,a){const n=!0===(a||{}).trailingSlash,i=DV2StreamLinks.resolveBrandLandingUrl(t?.brandLanding);if(i)return i;const o=null!=t?.liveId?String(t.liveId):"",s=encodeURIComponent(String(e)),r=n?`/streams/${s}/`:`/streams/${s}`;return o?`${r}?liveId=${encodeURIComponent(o)}`:r},DV2StreamLinks.navigateForLink=function navigateForLink(e){const t=DV2StreamLinks.resolveBrandLandingUrl(e?.brandLanding);return!!t&&(window.location.href=t,!0)},DV2StreamLinks.findIndexByLiveId=function findIndexByLiveId(e,t){if(!t||!Array.isArray(e))return-1;const a=String(t);return e.findIndex(e=>String(e?.liveId)===a)},DV2StreamLinks.updateLiveIdInUrl=function updateLiveIdInUrl(e){const t=new URLSearchParams(window.location.search);null!=e&&""!==e?t.set("liveId",String(e)):t.delete("liveId");const a=t.toString(),n=a?`${window.location.pathname}?${a}${window.location.hash}`:`${window.location.pathname}${window.location.hash}`;window.history.replaceState(null,"",n)},DV2StreamLinks.resolveActiveLink=function resolveActiveLink(e,t){const a=t||{},n=!1!==a.syncUrl,i=void 0!==a.liveId?a.liveId:new URLSearchParams(window.location.search).get("liveId");let o=DV2StreamLinks.findIndexByLiveId(e,i);o<0&&(o=0);const s=e[o]||null;return n&&null!=s?.liveId&&DV2StreamLinks.updateLiveIdInUrl(s.liveId),{activeIndex:o,activeLink:s}}
1,DV2StreamLinks.bindSpanLinks=function bindSpanLinks(e){const $=window.jQuery,{$container:t,links:a=[],activeIndex:n=0,streamAttr:i="data-stream-url",onSelect:o}=e||{};if(!$?.fn||!t?.length||!a.length)return;const s=a.map((e,t)=>{const a=t===n?"active":"",o=DV2StreamLinks.getBlvName(e,t),s=e.url||"";return`<span data-index="${t}" data-live-id="${null!=e.liveId?String(e.liveId):""}" ${i}="${s}" class="${a}">${o}</span>`}).join("");t.html(s),t.off("click.dv2StreamLinks").on("click.dv2StreamLinks","span",function(e){e.preventDefault(),e.stopPropagation();const n=$(this),i=Number(n.attr("data-index")),s=a[i];if(DV2StreamLinks.navigateForLink(s))return;const r=n.attr("data-live-id");r&&DV2StreamLinks.updateLiveIdInUrl(r),t.find("span").removeClass("active"),t.find(`span[data-index="${i}"]`).addClass("active"),"function"==typeof o&&o(s,i,n)})},DV2StreamLinks.prepareSpanLinks=function prepareSpanLinks(e){const{rawLinks:t,$container:a,streamAttr:n="data-stream-url",onSelect:i,syncUrl:o=!0}=e||{},s=DV2StreamLinks.sortForDetail(t);if(!s.length)return{links:s,activeIndex:-1,activeLink:null};const{activeIndex:r,activeLink:l}=DV2StreamLinks.resolveActiveLink(s,{syncUrl:o});return a?.length&&DV2StreamLinks.bindSpanLinks({$container:a,links:s,activeIndex:r,streamAttr:n,onSelect:i}),{links:s,activeIndex:r,activeLink:l}}}(window.DV2StreamLinks)}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$){window.DV2StreamTvc=window.DV2StreamTvc||{},function(DV2StreamTvc){let e=!1;function normalizeTvcItem(e){if("string"==typeof e&&e)return{url:e,s3Url:e,redirectUrl:""};if(!e||"object"!=typeof e)return null;const t=e.s3Url||e.s3_url||"",a=t||e.url||"";return a?{url:a,s3Url:t||a,redirectUrl:e.redirectUrl||e.redirect_url||""}:null}DV2StreamTvc.playBeforeStream=function playBeforeStream(t,a){if(e||!t?.length)return void a?.();const n=function pickRandomTvc(){const e=function getTvcVideos(){const e=void 0!==window.DV2_TVC_VIDEOS&&Array.isArray(window.DV2_TVC_VIDEOS)?window.DV2_TVC_VIDEOS:[],t="undefined"!=typeof dv2Streaming&&Array.isArray(dv2Streaming.tvcVideos)?dv2Streaming.tvcVideos:[];return(e.length?e:t).map(normalizeTvcItem).filter(Boolean)}();return e.length?e[Math.floor(Math.random()*e.length)]:null}();if(!n)return console.info("[DV2 TVC] No TVC videos configured, skipping pre-roll"),void a?.();e=!0;const i=$('\n <div class="dv2-stream-tvc" role="dialog" aria-label="Quảng cáo">\n <video class="dv2-stream-tvc__video" autoplay playsinline preload="auto"></video>\n <button type="button" class="dv2-stream-tvc__unmute" aria-label="Báºt tiếng" hidden>Báºt tiếng</button>\n <button type="button" class="dv2-stream-tvc__skip dv2-stream-tvc__skip--disabled" disabled aria-disabled="true">Bá» qua (5)</button>\n </div>\n '),o=i.find("video")[0],s=i.find(".dv2-stream-tvc__unmute"),r=i.find(".dv2-stream-tvc__skip");let l=!1,d=5,c=null;const finish=()=>{l||(l=!0,c&&(clearInterval(c),c=null),o.pause(),t.removeClass("dv2-stream-tvc-active"),i.remove(),a?.())};c=setInterval(()=>{if(d-=1,d<=0)return clearInterval(c),c=null,void r.prop("disabled",!1).attr("aria-disabled","false").removeClass("dv2-stream-tvc__skip--disabled").text("Bá» qua");r.text(`Bá» qua (${d})`)},1e3),r.on("click",finish),o.addEventListener("ended",finish,{once:!0}),o.addEventListener("error",e=>{const t=o.error;console.warn("[DV2 TVC] Failed to load pre-roll, skipping",{src:o.currentSrc||o.src,code:t?.code,message:t?.message,event:e}),finish()},{once:!0});const showUnmuteButton=()=>{!l&&o.muted&&s.prop("hidden",!1).show()};s.on("click",e=>{e.stopPropagation(),!l&&o.muted&&(o.muted=!1,o.volume=1,o.play().catch(()=>{}),s.remove())});const m=(n.redirectUrl||"").trim();m&&(o.classList.add("dv2-stream-tvc__video--clickable"),o.addEventListener("click",()=>{window.open(m,"_blank","noopener,noreferrer")})),t.addClass("dv2-stream-tvc-active"),t.append(i),o.setAttribute("playsinline","true"),o.setAttribute("webkit-playsinline","true"),o.src=n.s3Url||n.url,o.muted=!1,o.volume=1,o.play().catch(()=>(console.warn("[DV2 TVC] Autoplay with sound blocked, retrying muted"),o.muted=!0,o.play().then(showUnmuteButton).catch(()=>{console.warn("[DV2 TVC] Autoplay blocked, skipping"),finish()})))}}(window.DV2StreamTvc)}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery,Hls){function getDateLabel_CK(e){const t=new Date,a=new Date(t);a.setDate(a.getDate()+1);const n=new Date(e);return t.setHours(0,0,0,0),a.setHours(0,0,0,0),n.setHours(0,0,0,0),n.getTime()===t.getTime()?"Hôm nay":n.getTime()===a.getTime()?"Ngà y mai":`${String(n.getDate()).padStart(2,"0")}/${String(n.getMonth()+1).padStart(2,"0")}`}function formatTime_CK(e){if(!e)return"";const t=new Date(e);return`${String(t.getHours()).padStart(2,"0")}
1:${String(t.getMinutes()).padStart(2,"0")}`}($=jQuery.noConflict())(document).ready(function(){$(".dv2-layout-ck.dv2-detail-livestream").length>0&&function renderDetailMatch_CK(){const e=$(".dv2-layout-ck.dv2-detail-livestream .dv2-video-wrapper"),t=$(".dv2-layout-ck.dv2-detail-livestream .dv2-match-info");let a=new URLSearchParams(window.location.search).get("match");if(a||(a="undefined"!=typeof DV2_MATCH_ID&&DV2_MATCH_ID?DV2_MATCH_ID:"2y8m4zh54p4zql0"),!a)return void e.html('<div class="dv2-notfound-video">â Không có ID livestream hợp lá»</div>');console.log("[VSC LIVE] Load livestream detail cho ID:",a);const n=$('\n <div class="dv2-loading">\n Äang tải video...\n </div>\n ');e.append(n);const i=$("<video>",{id:"liveVideo",controls:!0,autoplay:!0,muted:!0,playsinline:!0,poster:"https://watch.rkplayer.xyz/img/cakhia.png"});e.append(i),$.ajax({url:`https://vsc-apidev.helizones.com/api/data/lives/${a}`,method:"GET",success:function(a){console.log("[VSC LIVE] API response:",a);const o=a?.data;if(o){n.remove();const e=o?.teams?.home?.name,a=o?.teams?.away?.name,i=o?.teams?.home?.logo,s=o?.teams?.away?.logo,r=o?.league?.name,l=o?.league?.logo,d=o?.matchInfo?.kickoff,c=o?.score?.fulltime?.home,m=o?.score?.fulltime?.away,v=`\n <div class="dv2-league">\n <img class="dv2-league-logo" id="leagueLogo" src="${l}" alt="League Logo">\n <span class="dv2-league-name" id="leagueName">${r}</span>\n </div>\n <div class="dv2-teams">\n <div class="dv2-team">\n <img class="dv2-home-logo" id="homeLogo" src="${i}" alt="Home Team">\n <span class="dv2-home-name" id="homeName">${e}</span>\n </div>\n <div class="dv2-score" id="score">${c} - ${m}</div>\n <div class="dv2-team">\n <img class="dv2-away-logo" id="awayLogo" src="${s}" alt="Away Team">\n <span class="dv2-away-name" id="awayName">${a}</span>\n </div>\n </div>\n <div class="dv2-match-time" id="matchTime">Thá»i gian diá»
n ra tráºn Äấu: ${getDateLabel_CK(d)} - ${formatTime_CK(d)}</div>\n `;t.append(v)}if(!o||!o.livestream)return e.html('<div class="dv2-not-loaded">ð« Không có luá»ng livestream</div>'),void e.append(i);const s=new Date(o?.matchInfo?.kickoff);if(!Number.isNaN(s.getTime())&&s.getTime()-Date.now()>9e5){const t=function createNotFoundMatchOverlay_CK(e){const t=e?.matchInfo?.kickoff,a=e?.league?.name,n=e?.teams?.home?.name||"Home",i=e?.teams?.away?.name||"Away",o=function render
1StatusMatch_CK(e){const t=new Date;new Date(t).setHours(0,0,0,0),new Date(t).setHours(23,59,59,999);const a=e instanceof Date?e:new Date(e);let n="";if(a>t)n=Math.round((a-t)/6e4)<=30?"sắp bắt Äầu":"chưa diá»
n ra";else{const e=new Date(a);e.setHours(e.getHours()+2),n=t<=e?"Äang diá»
n ra":"Äã kết thúc"}return n}(t);return $(`\n <div class="dv2-loading">\n Tráºn Äấu ${o}: <strong>${n} - ${i}</strong>\n <div class="dv2-load-league">\n <span>Giải Äấu: <strong>${a}</strong></span>\n </div>\n <div class="dv2-load-time">\n <span>Thá»i gian: ${getDateLabel_CK(t)}</span>\n <span>${formatTime_CK(t)}</span>\n </div>\n </div>\n `)}(o);return void e.append(t)}const r=o?.livestream?.links[0]?.url||"";if(!r)return void e.html('<div class="dv2-not-loaded">Không tìm thấy video livestream</div>');const l=$(".dv2-stream-links"),d=Array.isArray(o?.livestream?.links)?o.livestream.links.map((e,t)=>`<span data-index="${t}" data-stream-url=${e.url}>Link ${t+1}</span>`):null;l.html(d),l.on("click","span",function(e){e.preventDefault(),e.stopPropagation(),initHLSPlayer($(this).data("stream-url"))}),initHLSPlayer(r)},error:function(t){console.error("[VSC LIVE] Lá»i khi gá»i API:",t),e.html('<div class="dv2-not-loaded">Không thá» tải dữ liá»u livestream</div>')}});let o=null;function initHLSPlayer(t){console.log("[VSC LIVE] Init HLS for:",t);let a=0;if(o){console.log("[VSC LIVE] Destroy old HLS instance");try{o.destroy()}catch(e){console.warn(e)}o=null}function setupPlayer(){if(Hls.isSupported()){const e=new Hls({maxBufferLength:10,liveSyncDuration:3,enableWorker:!0,xhrSetup:function(e,t){e.withCredentials=!1,e.referrerPolicy="no-referrer-when-downgrade"}});o=e,e.loadSource(t),e.attachMedia(i[0]),e.on(Hls.Events.MANIFEST_PARSED,function(){console.log("[VSC LIVE] Manifest loaded â starting playback"),n.remove(),i[0].muted=!0,i[0].play().catch(()=>console.warn("Autoplay bá» chặn"))}),e.on(Hls.Events.ERROR,function(t,a){if(a.fatal)switch(console.log("[VSC LIVE] HLS fatal error:",a.type),a.type){case Hls.ErrorTypes.NETWORK_ERROR:e.startLoad();break;case Hls.ErrorTypes.MEDIA_ERROR:e.recoverMediaError();break;default:e.destroy(),retry()}})}else i[0].canPlayType("application/vnd.apple.mpegurl")?(i.attr("src",t),i.on("loadedmetadata",function(){n.remove(),i[0].play()}),i.on("error",retry)):e.html('\n <div class="dv2-not-loaded">\n ð« Trình duyá»t không há» trợ phát livestream\n </div>\n ')}function retry(){a<3?(a++,console.warn(`[VSC LIVE] Retry lần ${a}/3...`),setTimeout(setupPlayer,3e3)):(console.error("[VSC LIVE] Hết sá» lần retry, dừng phát."),n.text("Không thá» tải video, vui lòng thá» lại sau."))}setupPlayer()}}()})}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery){($=jQuery.noConflict())(document).ready(function(){$(".dv2-layout-ck.dv2-result-matchs").length>0&&(function updateDateTime_CK(){const e=new Date;$(".dv2-layout-ck.dv2-result-matchs #currentDateTime").text(e.toLocaleDateString("vi-VN",{weekday:"long",year:"numeric",month:"long",day:"numeric"}))}(),function loadResultsData_CK(){const e=new Date,t=new Date(e);t.setDate(t.getDate()-1);const a={fromDate:t.toISOString().split("T")[0],toDate:e.toISOString().split("T")[0]};$.ajax({url:"https://vsc-apidev.helizones.com/api/data/lives/range-date",method:"POST",contentType:"application/json",data:JSON.stringify(a),success:function(e){if(e&&e.matches_by_date){const t=[];Object.keys(e.matches_by_date).forEach(a=>{t.push(...e.matches_by_date[a])}),function renderResultsPage_CK(e){const t=new Date,a=e.filter(e=>{const a=new Date(e.kickoff),n=new Date(a.getTime()+72e5);return t>n});a.sort((e,t)=>new Date(t.kickoff)-new Date(e.kickoff));const n=$(".dv2-layout-ck.dv2-result-matchs .dv2-results-container");if(n.empty(),0===a.length)return void n.html('\n <div class="dv2-empty-state">\n <div style="font-size: 56px; margin-bottom: 16px; opacity: 0.3;">â½</div>\n <div style="font-size: 15px;">Chưa có tráºn Äấu nà o kết thúc</div>\n </div>\n ');const i=function groupMatchesByLeague_CK(e){const t={};
1return e.forEach(e=>{const a=e?.league?.name||"Giải Äấu khác";t[a]||(t[a]=[]),t[a].push(e)}),t}(a);Object.keys(i).forEach(e=>{const t=i[e],a=t[0]?.league?.logo||"",o=`\n <div class="dv2-league-section">\n <div class="dv2-league-header">\n ${a?`<img src="${a}" class="dv2-league-logo" alt="${e}">`:""}\n <h3 class="dv2-league-title">${e}</h3>\n </div>\n\n <div class="dv2-match-headers">\n <div></div>\n <div>Chá»§ nhà </div>\n <div>Tá»· sá»</div>\n <div>Khách</div>\n <div></div>\n <div>HT | FT</div>\n </div>\n\n ${t.map(e=>function renderMatchCard_CK(e){const t=function formatMatchTime_CK(e){const t=new Date(e);return`${String(t.getDate()).padStart(2,"0")}/${String(t.getMonth()+1).padStart(2,"0")} - ${t.toLocaleTimeString("vi-VN",{hour:"2-digit",minute:"2-digit"})}`}(e.kickoff),a=e?.teams?.home||{},n=e?.teams?.away||{},i=e?.score?.fulltime?.home??0,o=e?.score?.fulltime?.away??0,s=e?.score?.halftime?.home??0,r=e?.score?.halftime?.away??0,l=function generateStats_CK(e,t,a){return{htFt:`${a} - ${e}`,ht1:Math.floor(3*Math.random()),ft1:Math.floor(5*Math.random()),yellowTotal:Math.floor(7*Math.random()),yellow1:Math.floor(4*Math.random()),yellow2:Math.floor(4*Math.random()),redTotal:Math.floor(2*Math.random()),red1:Math.floor(2*Math.random()),red2:Math.floor(2*Math.random()),corner1:Math.floor(8*Math.random()),corner2:Math.floor(8*Math.random()),shot1:Math.floor(15*Math.random()),shot2:Math.floor(15*Math.random())}}(i,0,s);return`\n <div class="dv2-match-card" \n data-match-id="${e.match_id||e.id}"\n onclick="goToMatchDetail('${e.match_id||e.id}')">\n \n \x3c!-- Time --\x3e\n <div class="dv2-time-col">\n <div class="dv2-match-time">${t}</div>\n </div>\n\n \x3c!-- Home team --\x3e\n <div class="dv2-team-home">\n <div class="dv2-team-name" style="text-align: right;">${a.name||"Home"}</div>\n <div class="dv2-team-logo">\n <img src="${a.logo}" \n alt="${a.name}">\n </div>\n </div>\n\n \x3c!-- Score --\x3e\n <div class="dv2-score-col">\n <div class="dv2-score-box">\n <div class="dv2-score-number">${i}</div>\n <div class="dv2-score-separator">:</div>\n <div class="dv2-score-number">${o}</div>\n </div>\n <div class="dv2-halftime">HT ${s}:${r}</div>\n </div>\n\n \x3c!-- Away team --\x3e\n <div class="dv2-team-away">\n <div class="dv2-team-logo">\n <img src="${n.logo}" \n alt="${n.name}">\n </div>\n <div class="dv2-team-name">${n.name||"Away"}</div>\n </div>\n\n \x3c!-- Highlight button --\x3e\n <div class="dv2-highlight-col">\n <button class="dv2-highlight-btn" \n onclick="event.stopPropagation(); viewHighlight('${e.match_id}')">\n XEM HIGHLIGHT\n </button>\n </div>\n\n \x3c!-- Stats --\x3e\n <div class="dv2-stats-col">\n \x3c!-- HT --\x3e\n <div class="dv2-stat-group">\n <div class="dv2-stat-main">${s} : ${r}</div>\n <div class="dv2-stat-label">HT</div>\n </div>\n\n \x3c!-- HT | FT --\x3e\n <div class="dv2-stat-group">\n <div class="dv2-stat-main" style="color: #10b981;">${l.htFt}</div>\n <div class="dv2-stat-detail">
1\n <span class="dv2-stat-value">${l.ht1} : ${l.ft1}</span>\n </div>\n </div>\n\n \x3c!-- Yellow cards --\x3e\n <div class="dv2-stat-group">\n <div class="dv2-stat-main" style="color: #fbbf24;">${l.yellowTotal}</div>\n <div class="dv2-stat-detail">\n <span class="dv2-stat-value">${l.yellow1} - ${l.yellow2}</span>\n </div>\n </div>\n\n \x3c!-- Red cards --\x3e\n <div class="dv2-stat-group">\n <div class="dv2-stat-main" style="color: #ef4444;">${l.redTotal}</div>\n <div class="dv2-stat-detail">\n <span class="dv2-stat-value">${l.red1} - ${l.red2}</span>\n </div>\n </div>\n\n \x3c!-- More stats --\x3e\n <div class="dv2-stat-group">\n <div class="dv2-stat-detail">\n <span class="dv2-stat-value">${l.corner1} - ${l.corner2}</span>\n </div>\n <div class="dv2-stat-detail">\n <span class="dv2-stat-value">${l.shot1} - ${l.shot2}</span>\n </div>\n </div>\n </div>\n </div>\n `}(e)).join("")}\n </div>\n `;n.append(o)})}(t)}else $(".dv2-layout-ck.dv2-result-matchs .dv2-results-container").html('<div class="dv2-empty-state">Không có dữ liá»u</div>')},error:function(e){console.error("Error:",e),$(".dv2-layout-ck.dv2-result-matchs .dv2-results-container").html('<div class="dv2-empty-state">Lá»i tải dữ liá»u</div>')}})}())}),window.goToMatchDetail=function goToMatchDetail(e){window.location.href=`/streams/${e}`},window.viewHighlight=function viewHighlight(e){window.location.href=`/highlights/${e}`}}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery){($=jQuery.noConflict())(document).ready(()=>{$(".dv2-layout-ck.dv2-calendar-matchs").length>0&&(function updateDateTime_CK(){const e=new Date;$(".dv2-layout-ck.dv2-calendar-matchs #currentDateTime").text(e.toLocaleDateString("vi-VN",{weekday:"long",year:"numeric",month:"long",day:"numeric"}))}(),function loadHomeMatchesData_CK(){const e=new Date,t=new Date(e);t.setDate(e.getDate()+1);const a={fromDate:e.toISOString().split("T")[0],toDate:t.toISOString().split("T")[0]};$.ajax({url:"https://vsc-apidev.helizones.com/api/data/lives/range-date",method:"POST",contentType:"application/json",data:JSON.stringify(a),success:e=>{if(e&&e.matches_by_date){const t=[];Object.keys(e.matches_by_date).forEach(a=>t.push(...e.matches_by_date[a])),function renderHomeMatches_CK(e,t="all"){const a=new Date,n=e.filter(e=>{const n=new Date(e.kickoff),i=new Date(n.getTime()+72e5);if("live"===t)return a>=n&&a<=i;if("today"===t){new Date(a).setHours(0,0,0,0);const e=new Date(a);return e.setHours(23,59,59,999),n>a&&n<=e}return i>=a}).sort((e,t)=>new Date(e.kickoff)-new Date(t.kickoff)),i=$(".dv2-layout-ck.dv2-calendar-matchs .dv2-home-container");if(i.empty(),!n.length)return void i.html('<div class="dv2-empty-state">Không có tráºn Äấu</div>');const o=function groupMatchesByLeague_CK(e){const t={};return e.forEach(e=>{const a=e.league?.name||"Giải Äấu khác";t[a]||(t[a]=[]),t[a].push(e)}),t}(n);Object.keys(o).forEach(e=>{const t=o[e][0]?.league?.logo||"",a=o[e].map(e=>function renderHomeMatchCard_CK(e){const t=new Date(e.kickoff),a=e.teams?.home||{},n=e.teams?.away||{},i=function formatMatchTime_CK(e){const t=new Date(e);return`${String(t.getDate()).padStart(2,"0")}/${String(t.getMonth()+1).padStart(2,"0")} - ${t.toLocaleTimeString("vi-VN",{hour:"2-digit",minute:"2-digit"})}`}(t),o=e?.livestream?.links;return`\n <div class="dv2-match-card" onclick="goToMatchDetail('${e.match_id}')">\n <div class="dv2-time-col">${i}</div>\n <div class="dv2-teams-col">\n <div class="dv2-team">\n <div class="dv2-team-name" style="text-align: right">${a.name}</div>\n <div class="dv2-team-logo"><img src="${a.logo}" alt="${a.name}"></div>\n </div>\n <div class="dv2-vs">vs</div>\n <div class="dv2-team">\n <div class="dv2-team-logo"><img src="${n.logo}" alt="${n.name}"></div>\n <div class="dv2-team-name">${n.name}</div>\n </div>\n </div>\n ${o.length>0?`\n <div class="dv2-commentators">\n ${o.slice(0,4).map(e=>`\n <div class="dv2-commentator" \n data-commentator-id="${e.commentatorId||""}">\n <div class="dv2-commentator-avatar">\n ${e.avatar?`<img src="${e.avatar}" alt="${e.commentator}">`:e.commentator.charAt(0)}\n </div>
1\n <span class="dv2-commentator-name">${e.commentator}</span>\n </div>\n `).join("")}\n ${o.length>4?`<div class="dv2-commentator-more">+${o.length-4}</div>`:""}\n </div>\n `:""}\n </div>\n `}(e)).join("");i.append(`\n <div class="dv2-league-section">\n <div class="dv2-league-header">\n ${t?`<img src="${t}" class="dv2-league-logo">`:""}\n <div class="dv2-league-title">${e}</div>\n </div>\n ${a}\n </div>\n `)})}(t)}else $(".dv2-layout-ck.dv2-calendar-matchs .dv2-home-container").html('<div class="dv2-empty-state">Không có dữ liá»u</div>')},error:()=>$(".dv2-layout-ck.dv2-calendar-matchs .dv2-home-container").html('<div class="dv2-empty-state">Lá»i tải dữ liá»u</div>')})}())}),window.goToMatchDetail=function goToMatchDetail(e){window.location.href=`/streams/${e}`}}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery){($=jQuery.noConflict())(document).ready(function(){$(".dv2-layout-ck.dv2-home-matchs").length>0&&function renderListMatchs_CK(){const e=$(".dv2-layout-ck.dv2-home-matchs"),t=e.find(".dv2-match-grid");0===e.find(".dv2-loading").length&&e.append('\n <div class="dv2-loading">\n <div class="dv2-spinner"></div>\n </div>\n ');const a=new Date,n=new Date;n.setDate(a.getDate()+7);const i={fromDate:a.toISOString().split("T")[0],toDate:n.toISOString().split("T")[0]};$.ajax({url:"https://vsc-apidev.helizones.com/api/data/lives/range-date",method:"POST",headers:{"Content-Type":"application/json"},data:JSON.stringify(i),dataType:"json",success:function(a){e.find(".dv2-loading").remove();const n=[];if(Object.values(a.matches_by_date||{}).forEach(e=>{Array.isArray(e)&&n.push(...e)}),!n.length)return void t.html('<div class="dv2-empty-state">Không có tráºn Äấu nà o trong 7 ngà y tá»i</div>');const i=n.map(e=>{const t=e.kickoff?new Date(e.kickoff):null,a=t?new Date(t.getTime()+72e5):null,n=new Date;let i="Sắp diá»
n ra";return t&&n>=t&&n<=a&&e.livestream.available?i="LIVE":t&&n>a&&(i="Kết thúc"),{id:e.match_id,slug:e.slug||"",homeLogo:e?.teams?.home?.logo||"",awayLogo:e?.teams?.away?.logo||"",homeName:e?.teams?.home?.name||"Äá»i nhà ",awayName:e?.teams?.away?.name||"Äá»i khách",kickoff:t,league:e?.league?.name||"Giải Äấu",leagueLogo:e?.league?.logo||"",livestream:e.livestream,links:e?.livestream?.links||[],scoreHalftime:e?.score?.halftime||{home:"-",away:"-"},scoreFulltime:e?.score?.fulltime||{home:"-",away:"-"},status:i}}),o=new Date,s=[],r=[];i.forEach(e=>{const t=new Date(e.kickoff),a=new Date(t.getTime()+72e5);o>=t&&o<=a&&e.livestream.available?s.push(e):o<t&&r.push(e)});const l=[...s,...r];!function updateFilterCounts_CK(e){const t=new Date,a=new Date(t);a.setHours(0,0,0,0);const n=new Date(t);n.setHours(23,59,59,999);const i=new Date(a);i.setDate(a.getDate()+7);const o=e.filter(e=>e.kickoff>=a&&e.kickoff<=i).length,s=e.filter(e=>"LIVE"===e.status).length,r=e.filter(e=>e.kickoff>=a&&e.kickoff<=n).length;$('.dv2-layout-ck.dv2-home-matchs .dv2-filter-btn[data-filter="all"]').text(`Tất cả (${o})`),$('.dv2-layout-ck.dv2-home-matchs .dv2-filter-btn[data-filter="live"]').text(`Äang live (${s})`),$('.dv2-layout-ck.dv2-home-matchs .dv2-filter-btn[data-filter="today"]').text(`Hôm nay (${r})`)}(l),function setupFilterButtons_CK(e){$(".dv2-layout-ck.dv2-home-matchs .dv2-filter-btn").off("click").on("click",function(){$(".dv2-layout-ck.dv2-home-matchs .dv2-filter-btn").removeClass("dv2-active"),$(this).addClass("dv2-active");const t=$(this).data("filter");renderHomeMatches_CK(e,t)})}(l),renderHomeMatches_CK(l,"live")},error:function(e){console.error("[VSC LIVE] API error:",e),t.html('<div class="dv2-empty-state">Lá»i khi tải dữ liá»u</div>')}})}()});let e=0,t=[];function renderHomeMatches_CK(a,n="all"){const i=new Date,o=new Date(i);o.setHours(0,0,0,0);const s=new Date(i);s.setHours(23,59,59,999);const r=new Date(o);r.setDate(o.getDate()+7);let l=a.filter(e=>"live"===n?"LIVE"===e.status:"today"===n?e.kickoff>=o&&e.kickoff<=s:"all"!==n||e.kickoff>=o&&e.kickoff<=r);l.sort((e,t)=>
1"LIVE"===e.status&&"LIVE"!==t.status?-1:"LIVE"!==e.status&&"LIVE"===t.status?1:new Date(e.kickoff)-new Date(t.kickoff)),t=l,e=0;const d=$(".dv2-layout-ck.dv2-home-matchs .dv2-match-grid");if(d.empty(),!l.length)return d.html('<div class="dv2-empty-state">\n <div style="font-size: 56px; opacity: 0.3;">â½</div>\n <div style="font-size: 15px;">Không có tráºn Äấu nà o</div>\n </div>'),void $(".dv2-loadmore").hide();renderNextMatchesBatch_CK(),$(".dv2-layout-ck.dv2-home-matchs .dv2-load-more-btn").off("click").on("click",renderNextMatchesBatch_CK)}function renderNextMatchesBatch_CK(){const a=$(".dv2-layout-ck.dv2-home-matchs .dv2-match-grid"),n=t.slice(e,e+10);n.forEach(e=>{const t=$(function renderMatchCard_CK(e){const t=e.kickoff||"",a=function getDateLabel_CK(e){if(!e)return"";const t=new Date;t.setHours(0,0,0,0);const a=new Date(t);a.setDate(a.getDate()+1);const n=new Date(e);return n.setHours(0,0,0,0),`${String(n.getDate()).padStart(2,"0")}/${String(n.getMonth()+1).padStart(2,"0")}`}(t),n=t?function formatTime_CK(e){if(!e)return"";const t=new Date(e);return`${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}(t):"",i="LIVE"===e.status?"dv2-status-live":"Sắp diá»
n ra"===e.status?"dv2-status-scheduled":"dv2-status-finished";return`\n <div class="dv2-match-card" data-id="${e.id}">\n <div class="dv2-match-header">\n <div class="dv2-league-info">\n <span class="dv2-league-name">${e.league}</span>\n </div>\n <div style="display: flex; align-items: center; gap: 12px;">\n <span class="dv2-match-status ${i}">\n ${"LIVE"===e.status?"â LIVE":"Sắp diá»
n ra"===e.status?"Sắp diá»
n ra":"Kết thúc"}\n </span>\n <span class="dv2-match-time">${a} - ${n}</span>\n </div>\n </div>\n <div class="dv2-match-content">\n <div class="dv2-team">\n <div class="dv2-team-logo"><img src="${e.homeLogo}" alt="${e.homeName}"></div>\n <div class="dv2-team-name">${e.homeName}</div>\n </div>\n <div class="dv2-score-section">\n <div class="dv2-score">\n <div class="dv2-score-number">${e.scoreFulltime.home}</div>\n <div class="dv2-score-separator">:</div>\n <div class="dv2-score-number">${e.scoreFulltime.away}</div>\n </div>\n <div class="dv2-half-time">HT ${e.scoreHalftime.home} - ${e.scoreHalftime.away}</div>\n </div>\n <div class="dv2-team dv2-away">\n <div class="dv2-team-logo"><img src="${e.awayLogo}" alt="${e.awayName}"></div>\n <div class="dv2-team-name">${e.awayName}</div>\n </div>\n </div>\n <div class="dv2-blv-box">\n ${(e?.links||[]).map(t=>`\n <a class="dv2-bottom-group" href="#" data-id="${e.id}">\n <span class="dv2-bottom-logo">\n <img class="dv2-image-blv" alt="${t.commentator}"\n src="${t.avatar}">\n </span>\n <span class="dv2-bottom-name dv2-ellipsis">${t.commentator}</span>\n </a>\n `).join("")}\n </div>\n </div>\n `}(e));a.append(t),setTimeout(()=>t.addClass("fade-in"),50)}),e+=n.length,e>=t.length?$(".dv2-layout-ck.dv2-home-matchs .dv2-loadmore").fadeOut(200):$(".dv2-layout-ck.dv2-home-matchs .dv2-loadmore").show()}$(document).on("click",".dv2-layout-ck.dv2-home-matchs .dv2-match-card",function(e){e.preventDefault();const t=$(this).data("id")||"";window.location.href=`/streams/${t}`})}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery,Hls){($=jQuery.noConflict())(document).ready(function(){$(".dv2-layout-ls.dv2-streaming-ctn").length>0&&function renderDetailMatch_LS(){const e=$(".dv2-layout-ls.dv2-streaming-ctn .dv2-video-container"),t=$(".dv2-layout-ls.dv2-streaming-ctn .dv2-detail-match");let a=new URLSearchParams(window.location.search).get("match");if(a||(a="undefined"!=typeof DV2_MATCH_ID&&DV2_MATCH_ID?DV2_MATCH_ID:"2y8m4zh54p4zql0"),!a)return void e.html('<div class="dv2-notfound-video">â Không có ID livestream hợp lá»</div>');console.log("[VSC LIVE] Load livestream detail cho ID:",a);const n=$('\n <div class="dv2-loading">\n Äang tải video...\n </div>\n ');e.append(n);const i=$("<video>",{id:"liveVideo",controls:!0,autoplay:!0,muted:!0,playsinline:!0,poster:"https://luongson.io/wp-content/uploads/2025/10/bxh-ty-le-thang-hieu-suat-ghi-ban-tat-ca-trong-mot-cu-cham-tai-luongson-tv.jpg"});e.append(i),$.ajax({url:`https://vsc-apidev.helizones.com/api/data/lives/${a}`,method:"GET",success:function(a){console.log("[VSC LIVE] API response:",a),n.remove();const o=a?.data,s=o?.teams?.home?.name,r=o?.teams?.away?.name,l=o?.league?.name,d=o?.matchInfo?.kickoff,c=o?.score?.fulltime?.home,m=o?.score?.fulltime?.away,v=`Tráºn Äấu giữa <strong>${s}</strong> và <strong>${r}</strong> thuá»c khuôn khá»\n <strong>${l}</strong> sẽ diá»
n ra và o lúc <strong>${function formatDateTime_LS(e){const t=new Date(e);return`${String(t.getDate()).padStart(2,"0")}/${String(t.getMonth()+1).padStart(2,"0")}/${t.getFullYear()} ${String(t.getHours()).padStart(2,"0")}
1:${String(t.getMinutes()).padStart(2,"0")}`}(d)}</strong>`,u=`\n <h1 class="dv2-name-match">Trá»±c tiếp ${s} vs ${r} - ${l} </h1>\n <div class="dv2-live-match">\n ${v}\n </div>\n <div class="dv2-blv-match">\n <span>Bình luáºn viên: <strong>NHà ÄÃI</strong></span>\n </div>\n <div class="dv2-score-match">\n <span>Tá» sá» hiá»n tại: <strong>${c} - ${m}</strong></span>\n </div>\n `;if(t.append(u),$(".dv2-detail-match-info").html(v),!o||!o.livestream)return e.html('<div class="dv2-not-loaded">ð« Không có luá»ng livestream</div>'),void e.append(i);const h=new Date(o?.matchInfo?.kickoff);if(!Number.isNaN(h.getTime())&&h.getTime()-Date.now()>9e5){const t=function createNotFoundMatchOverlay_LS(e){const t=e?.matchInfo?.kickoff,a=e?.league?.name,n=e?.teams?.home?.name||"Home",i=e?.teams?.away?.name||"Away",o=function renderStatusMatch_LS(e){const t=new Date;new Date(t).setHours(0,0,0,0),new Date(t).setHours(23,59,59,999);const a=e instanceof Date?e:new Date(e);let n="";if(a>t)n=Math.round((a-t)/6e4)<=30?"sắp bắt Äầu":"chưa diá»
n ra";else{const e=new Date(a);e.setHours(e.getHours()+2),n=t<=e?"Äang diá»
n ra":"Äã kết thúc"}return n}(t);return $(`\n <div class="dv2-loading">\n Tráºn Äấu ${o}: <strong>${n} - ${i}</strong>\n <div class="dv2-load-league">\n <span>Giải Äấu: <strong>${a}</strong></span>\n </div>\n <div class="dv2-load-time">\n <span>Thá»i gian: ${function getDateLabel_LS(e){const t=new Date,a=new Date(t);a.setDate(a.getDate()+1);const n=new Date(e);return t.setHours(0,0,0,0),a.setHours(0,0,0,0),n.setHours(0,0,0,0),n.getTime()===t.getTime()?"Hôm nay":n.getTime()===a.getTime()?"Ngà y mai":`${String(n.getDate()).padStart(2,"0")}/${String(n.getMonth()+1).padStart(2,"0")}`}(t)}</span>\n <span>${function formatTime_LS(e){if(!e)return"";const t=new Date(e);return`${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}(t)}</span>\n </div>\n </div>\n `)}(o);return void e.append(t)}const p=o?.livestream?.links[0]?.url||"";if(!p)return void e.html('<div class="dv2-not-loaded">Không tìm thấy video livestream</div>');const f=$(".dv2-stream-links"),g=Array.isArray(o?.livestream?.links)?o.livestream.links.map((e,t)=>`<span data-index="${t}" data-stream-url="${e.url}">Link ${t+1}</span>`):null;f.html(g),f.on("click","span",function(e){e.preventDefault(),e.stopPropagation(),initHLSPlayer($(this).data("stream-url"))}),initHLSPlayer(p)},error:function(t){console.error("[VSC LIVE] Lá»i khi gá»i API:",t),e.html('<div class="dv2-not-loaded">Không thá» tải dữ liá»u livestream</div>')}});let o=null;function initHLSPlayer(t){if(console.log("[VSC LIVE] Init HLS for:",t),o){console.log("[VSC LIVE] Destroy old HLS instance");try{o.destroy()}catch(e){console.warn(e)}o=null}let a=0;function setupPlayer(){if(Hls.isSupported()){const e=new Hls({maxBufferLength:10,liveSyncDuration:3,enableWorker:!0,xhrSetup:function(e,t){e.withCredentials=!1,e.referrerPolicy="no-referrer-when-downgrade"}});o=e,e.loadSource(t),e.attachMedia(i[0]),e.on(Hls.Events.MANIFEST_PARSED,function(){console.log("[VSC LIVE] Manifest loaded â starting playback"),n.remove(),i[0].muted=!0,i[0].play().catch(()=>console.warn("Autoplay bá» chặn"))}),e.on(Hls.Events.ERROR,function(t,a){if(a.fatal)switch(console.log("[VSC LIVE] HLS fatal error:",a.type),a.type){case Hls.ErrorTypes.NETWORK_ERROR:e.startLoad();break;case Hls.ErrorTypes.MEDIA_ERROR:e.recoverMediaError();break;default:e.destroy(),retry()}})}else i[0].canPlayType("application/vnd.apple.mpegurl")?(i.attr("src",t),i.on("loadedmetadata",function(){n.remove(),i[0].play()}),i.on("error",retry)):e.html('\n <div class="dv2-not-loaded">\n ð« Trình duyá»t không há» trợ phát livestream\n </div>\n ')}function retry(){a<3?(a++,console.warn(`[VSC LIVE] Retry lần ${a}/3...`),setTimeout(setupPlayer,3e3)):(console.error("[VSC LIVE] Hết sá» lần retry, dừng phát."),n.text("Không thá» tải video, vui lòng thá» lại sau."))}setupPlayer()}}()})}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery){($=jQuery.noConflict())(document).ready(function(){$(".dv2-layout-ls.dv2-list-video-ctn .dv2-content-ctn").length&&function renderFeaturedStreamBlock_LS(){const e=$(".dv2-layout-ls.dv2-list-video-ctn .dv2-content-ctn"),t=e.find(".dv2-matchs-grid");0===e.find(".dv2-loading").length&&e.append('\n <div class="dv2-loading">\n <div class="dv2-spinner"></div>\n </div>\n ');const a=new Date,n=new Date;n.setDate(a.getDate()+7);const i={fromDate:a.toISOString().split("T")[0],toDate:n.toISOString().split("T")[0]};$.ajax({url:"https://vsc-apidev.helizones.com/api/data/lives/range-date",method:"POST",headers:{"Content-Type":"application/json"},data:JSON.stringify(i),dataType:"json",success:function(a){e.find(".dv2-loading").remove();const n=[];if(Object.values(a.matches_by_date||{}
1).forEach(e=>{Array.isArray(e)&&n.push(...e)}),!n.length)return t.html('<div class="no-match">Không có tráºn Äấu trong 7 ngà y tá»i</div>'),void e.find(".dv2-load-more").hide();const i=n.map(e=>{const t=e.kickoff?new Date(e.kickoff):null,a=new Date;let n="Sắp diá»
n ra";if(t){const i=new Date(t.getTime()+72e5);a>=t&&a<=i&&e.livestream.available?n="LIVE":a>i&&(n="Kết thúc")}const i=`${window.location.origin}/detail/?match=${e.match_id}`;return{id:e.match_id,slug:e.slug||"",url:i,homeLogo:e?.teams?.home?.logo||"",awayLogo:e?.teams?.away?.logo||"",homeName:e?.teams?.home?.name||"Äá»i nhà ",awayName:e?.teams?.away?.name||"Äá»i khách",kickoff:t,league:e?.league?.name||"Giải Äấu",livestream:e?.livestream,links:e?.livestream?.links||[],status:n}}),o=new Date,s=[],r=[];i.forEach(e=>{const t=new Date(e.kickoff),a=new Date(t.getTime()+72e5);o>=t&&o<=a&&e.livestream.available?s.push(e):o<t&&r.push(e)});const l=[...s,...r];updateFilterCounts_LS&&updateFilterCounts_LS(l),setupFilterButtons_LS&&setupFilterButtons_LS(l),renderHomeMatches_LS(l,"live")},error:function(a){console.error("[VSC LIVE] API error:",a),e.find(".dv2-loading").remove(),t.html('<div class="error">Lá»i khi tải dữ liá»u</div>'),e.find(".dv2-load-more").hide()}})}()});let e=0,t=[];const a=12;function updateFilterCounts_LS(e){const t=new Date,a=new Date(t);a.setHours(0,0,0,0);const n=new Date(t);n.setHours(23,59,59,999);const i=new Date(a);i.setDate(a.getDate()+7);const o=e.filter(e=>e.kickoff&&e.kickoff>=a&&e.kickoff<=i).length,s=e.filter(e=>"LIVE"===e.status).length,r=e.filter(e=>e.kickoff&&e.kickoff>=a&&e.kickoff<=n).length;$('.dv2-filter-btn[data-filter="all"]').text(`Tất cả (${o})`),$('.dv2-filter-btn[data-filter="live"]').text(`Äang Live (${s})`),$('.dv2-filter-btn[data-filter="today"]').text(`Hôm nay (${r})`)}function setupFilterButtons_LS(e){$(".dv2-filter-btn").off("click").on("click",function(){$(".dv2-filter-btn").removeClass("dv2-active"),$(this).addClass("dv2-active");const t=$(this).data("filter");renderHomeMatches_LS(e,t)})}function renderHomeMatches_LS(n,i="all"){const o=new Date,s=new Date(o);s.setHours(0,0,0,0);const r=new Date(o);r.setHours(23,59,59,999);const l=new Date(s);l.setDate(s.getDate()+7);let d=n.filter(e=>!(!e.kickoff&&"all"!==i&&"today"!==i&&"live"!==i)&&("live"===i?"LIVE"===e.status:"today"===i?e.kickoff&&e.kickoff>=s&&e.kickoff<=r:"all"!==i||e.kickoff&&e.kickoff>=s&&e.kickoff<=l));d.sort((e,t)=>"LIVE"===e.status&&"LIVE"!==t.status?-1:"LIVE"!==e.status&&"LIVE"===t.status?1:new Date(e.kickoff)-new Date(t.kickoff)),t=d,e=0;const c=$(".dv2-layout-ls.dv2-list-video-ctn .dv2-content-ctn"),m=c.find(".dv2-matchs-grid");if(m.empty(),!d.length)return m.html('<div class="dv2-empty-state">\n <div style="font-size: 56px; opacity: 0.3;">â½</div>\n <div style="font-size: 15px;">Không có tráºn Äấu nà o</div>\n </div>'),void c.find(".dv2-load-more").hide();c.find(".dv2-load-more").hide(),renderNextMatches_LS(),t.length>a&&c.find(".dv2-load-more-btn").off("click").on("click",renderNextMatches_LS)}function renderNextMatches_LS(){const n=$(".dv2-layout-ls.dv2-list-video-ctn .dv2-content-ctn"),i=n.find(".dv2-matchs-grid"),o=t.slice(e,e+a);o.forEach((t,a)=>{const n="LIVE"===t.status?'<div class="dv2-top-inlive">\n <span class="dv2-top-inlive-live">\n <img decoding="async" src="data:image/webp;base64,UklGRhACAABXRUJQVlA4WAoAAAASAAAAFwAAFwAAQU5JTQYAAAAAAAAAAABBTk1GPAAAAAAAAAAAABcAABcAADIAAAJWUDhMIwAAAC8XwAUQDzD/8z//8x/wUNC2DVNg5Y/sbggi+j8BsAyYvYQEAEFOTUY2AAAAAQAAAQAAEwAABwAAMgAAAlZQOEwdAAAALxPAARAPMP/zP//zH/AQkBAe+P9XNkT0fwJI8SQAQU5NRjQAAAABAAABAAATAAAFAAAyAAACVlA4TBwAAAAvE0ABEA8w//M///Mf8BCQEB74/1c2RPR/Akg9QU5NRjQAAAABAAABAAATAAAFAAAyAAACVlA4TBwAAAAvE0ABEA8w//M///Mf8BCQEB74/1c2RPR/Akg9QU5NRjQAAAABAAABAAATAAAHAAAyAAACVlA4TBsAAAAvE8ABEA8w//M///Mf8BAIJBnsLzxDRP9DpgUAQU5NRjYAAAABAAABAAATAAAHAAAyAAACVlA4TB0AAAAvE8ABEA8w//M///Mf8BCQEB74/1c2RPR/AmiPCQBBTk1GNAAAAAEAAAIAABMAAAUAADIAAAJWUDhMHAAAAC8TQAEQDzD/8z//8x/wEJAQHvj/VzZE9H8CaB1BTk1GNAAAAAEAAAIAABMAAAUAADIAAAJWUDhMHAAAAC8TQAEQDzD/8z//8x/wEJAQHvj/VzZE9H8CwNE=" alt="" class="h-3 w-2.5 object-contain">
1\n <span>Live</span>\n </span>\n </div>':`<div class="dv2-kickoff">\n <span class="dv2-kickoff-time">${t.kickoff?function formatTime_LS(e){if(!e)return"";const t=new Date(e),a=new Date,n=new Date(t);if(n.setHours(n.getHours()+2),a>n)return"Äã kết thúc";return`${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}(t.kickoff):""}</span>\n </div>`,o=(t.links||[]).map(e=>`\n <a class="dv2-bottom-group" href="#" data-id="${t.id}">\n <span class="dv2-bottom-logo">\n <img class="aspect-square h-full w-full object-cover" alt="${e.commentator}" src="${e.avatar}">\n </span>\n <span class="dv2-bottom-name ellipsis">${e.commentator}</span>\n </a>\n `).join("");$(`\n <div class="dv2-match-item" data-index="${e+a}" data-id="${t.id}">\n <a class="dv2-top" href="${t.url}">\n <div class="dv2-top_time">\n <span class="dv2-ellipsis dv2-league">${t.league}</span>\n ${n}\n </div>\n <div class="dv2-top_team">\n <div class="dv2-top_team_home">\n <div class="dv2-top_team_home_logo">\n <img src="${t.homeLogo}" alt="${t.homeName}">\n </div>\n <p class="dv2-top_name ellipsis">${t.homeName}</p>\n </div>\n <div class="dv2-top_vs"><span class="vs">VS</span></div>\n <div class="dv2-top_team_away">\n <div class="dv2-top_team_home_logo">\n <img src="${t.awayLogo}" alt="${t.awayName}">\n </div>\n <p class="dv2-top_name dv2-ellipsis">${t.awayName}</p>\n </div>\n </div>\n </a>\n <div class="dv2-bottom">\n <div class="dv2-bottom-commentators">\n ${o}\n </div>\n </div>\n </div>\n `).hide().appendTo(i).fadeIn(300)}),e+=o.length,e>=t.length?n.find(".dv2-load-more").fadeOut(300,function(){$(this).hide()}):n.find(".dv2-load-more").show()}$(document).on("click",".dv2-layout-ls.dv2-list-video-ctn .dv2-match-item",function(e){e.preventDefault();const t=$(this).data("id")||"";window.location.href=`/streams/${t}`})}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery,Hls,Swiper){$=jQuery.noConflict();const e="https://sta.vnres.co/file/common/20250410/000bfdfc22afe0f322140fabd2228aec.jpg",t={hotLeaguesRank:new Map};let a=null,n=null,i=null,o=null,s=0,r=null,l=null,d=null;const c=["first half","firsthalf","first-half","fh","half-time","half time","halftime","ht","second half","secondhalf","second-half","sh","extra time","extratime","et","overtime","overtime(deprecated)","ot","penalty","penalties","penalty shoot-out","penalty shootout"],m="https://vsc-apidev.helizones.com";const v=DV2MatchSort.createSortedMatchesFunction({mode:"wc-first",liveStatuses:c,hotLeaguesRank:()=>t.hotLeaguesRank,copy:!0});function getPreferredLivestreamLink(e){const t=e?.livestream?.links;return Array.isArray(t)&&t.length?DV2StreamLinks.getPreferredLink(t):null}function getStreamVideoWrapper_SCL(){return $(".dv2-layout-scl.dv2-streaming-ctn .dv2-video-wrapper").first()}function getStreamChrome_SCL(){return window.DV2_StreamChrome}function initStreamPlayerUi_SCL(e){const t=getStreamVideoWrapper_SCL(),a=getStreamChrome_SCL();t.length&&a&&a.initPlayerUi(t,e)}function clearSclPlaybackTimers(){r&&(clearTimeout(r),r=null),l&&(clearTimeout(l),l=null),d&&(clearTimeout(d),d=null)}function showStreamLoading_SCL(e,t="Äang tải video..."){if(!e?.length)return $();hideStreamLoading_SCL(e);const a=String(t||"Äang tải video...").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),n=$(`\n <div class="dv2-stream-loading-scl dv2-loading"\n style="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:#fff;font-size:16px;background:rgba(0,0,0,0.6);padding:10px 20px;border-radius:6px;width:auto;">\n ${a}\n </div>\n `);return e.append(n),n}
1function hideStreamLoading_SCL(e){e?.find(".dv2-stream-loading-scl").remove()}function showStreamFallback_SCL(e,t,a){const n=getStreamChrome_SCL();if(n&&e.length&&n.clearFullChrome(e),hideStreamLoading_SCL(t),!a)return;t.find(".dv2-match-overlay-scl").remove();const i=createNotFoundMatchOverlay_SCL(a);i.addClass("dv2-match-overlay-scl"),t.append(i),DV2StreamKickoff.startCountdown(a?.matchInfo?.kickoff)}function initHLSPlayer_SCL(e){const t=getStreamVideoWrapper_SCL(),a=t.find(".dv2-video-container"),n=a.find("#liveVideo"),c=i;s+=1;const m=s,isStalePlayback=()=>m!==s;if(clearSclPlaybackTimers(),a.find(".dv2-match-overlay-scl").remove(),!e||!n.length)return hideStreamLoading_SCL(a),void(c&&showStreamFallback_SCL(t,a,c));if(o){try{o.destroy()}catch(e){console.warn(e)}o=null}showStreamLoading_SCL(a,"Äang tải video...");let v=0,u=!1;function setupPlayer(){if(!isStalePlayback())if(Hls.isSupported()){r=setTimeout(()=>{isStalePlayback()||(console.warn("[VSC LIVE] Manifest load timeout"),retry())},15e3);const i=new Hls({maxBufferLength:10,liveSyncDuration:3,enableWorker:!0,xhrSetup:function(e){e.withCredentials=!1,e.referrerPolicy="no-referrer-when-downgrade"}});o=i,i.loadSource(e),i.attachMedia(n[0]),i.on(Hls.Events.MANIFEST_PARSED,function(){isStalePlayback()||(clearSclPlaybackTimers(),hideStreamLoading_SCL(a),n[0].muted=!0,n[0].play().catch(()=>console.warn("Autoplay bá» chặn")),getStreamChrome_SCL()?.syncControlsState?.(t,n),onHlsStreamReady_SCL())}),i.on(Hls.Events.ERROR,function(e,t){if(!isStalePlayback()&&t.fatal)switch(clearSclPlaybackTimers(),t.type){case Hls.ErrorTypes.NETWORK_ERROR:i.startLoad();break;case Hls.ErrorTypes.MEDIA_ERROR:i.recoverMediaError();break;default:try{i.destroy()}catch(e){}o===i&&(o=null),retry()}})}else n[0].canPlayType("application/vnd.apple.mpegurl")?(l=setTimeout(()=>{isStalePlayback()||(console.warn("[VSC LIVE] Native HLS load timeout"),retry())},15e3),n.attr("src",e),n.one("loadedmetadata",function(){isStalePlayback()||(clearSclPlaybackTimers(),hideStreamLoading_SCL(a),n[0].muted=!0,n[0].play().catch(()=>console.warn("Autoplay bá» chặn")),getStreamChrome_SCL()?.syncControlsState?.(t,n),onHlsStreamReady_SCL())}),n.one("error",function(){isStalePlayback()||(clearSclPlaybackTimers(),retry())})):a.html('\n <div style="color:#fff;text-align:center;padding:100px;">\n ð« Trình duyá»t không há» trợ phát livestream\n </div>\n ')}function retry(){isStalePlayback()||(v<3?(v+=1,console.warn(`[VSC LIVE] Retry lần ${v}/3...`),showStreamLoading_SCL(a,`Äang thá» lại... (${v}/3)`),d=setTimeout(()=>{isStalePlayback()||setupPlayer()},3e3)):(console.error("[VSC LIVE] Hết sá» lần retry, dừng phát."),isStalePlayback()||u||(u=!0,clearSclPlaybackTimers(),showStreamFallback_SCL(t,a,c))))}setupPlayer()}function onHlsStreamReady_SCL(){const e=getStreamChrome_SCL(),t=getStreamVideoWrapper_SCL();e&&t.length&&(i&&e.rememberOddsMatchData?.(t,i),e.onHlsReady(t))}function hideAppointmentBlock_SCL(){$(".dv2-layout-scl.dv2-appoinment-list-ctn").hide()}function loadCommentatorAppointments_SCL(e){const t=function sortLivestreamLinksPreferRealBlv(e){return DV2StreamLinks.sort(e)}(e?.livestream?.links||[]),a=t[0]?.commentatorId;a?$.ajax({url:`${m}/api/data/lives/commentators/${a}`,method:"GET",success(e){const t=e?.matches;
1Array.isArray(t)&&t.length?function renderSliderAppointmentsBlock(e){const t=$(".dv2-layout-scl.dv2-appoinment-list-ctn"),a=t.find(".dv2-appoinment-swiper-container"),n=a.find(".dv2-swiper-wrapper");n.empty(),Array.isArray(e)&&e.length?(e.forEach(function(e,t){const a=e?.match_id||e?.matchId||e?.id||e?.slug||t,i=e?.league?.name||"N/A",o=e?.league?.logo||"https://sta.vnres.co/file/common/20210503/fca5954ec22137ad05325506d6645592",s=e?.matchInfo?.kickoff??e?.kickoff??"",r=function getDateLabel_SCL(e){const t=new Date,a=new Date(t);a.setDate(a.getDate()+1);const n=new Date(e);return t.setHours(0,0,0,0),a.setHours(0,0,0,0),n.setHours(0,0,0,0),n.getTime()===t.getTime()?"Hôm nay":n.getTime()===a.getTime()?"Ngà y mai":`${String(n.getDate()).padStart(2,"0")}/${String(n.getMonth()+1).padStart(2,"0")}`}(s),l=function formatTime_SCL(e){if(!e)return"";const t=new Date(e);return`${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}(s),d=e?.teams?.home?.name||"Home Team",c=e?.teams?.home?.logo||"Logo",m=e?.teams?.away?.name||"Away Team",v=e?.teams?.away?.logo||"Logo",u=`\n\t\t\t<div class="dv2-swiper-slide swiper-slide" style="cursor:pointer;" data-id="${a}" onclick="goToMatchDetail('${a}')">\n\t\t\t\t<div class="dv2-title">\n\t\t\t\t\t<div class="dv2-fl">\n\t\t\t\t\t\t<img onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'" src="${o}" class="icon" draggable="false">\n\t\t\t\t\t\t<span>${i}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="dv2-fr dv2-match-time">\n\t\t\t\t\t\t<span style="padding-right:5px;">${r}</span>\n\t\t\t\t\t\t${l}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="dv2-box" style="display: flex;">\n\t\t\t\t\t<div class="dv2-battle-team">\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<img \n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n class="dv2-logo" \n\t\t\t\t\t\t\t\t src="${c}" \n\t\t\t\t\t\t\t\t data-src="${c}" \n\t\t\t\t\t\t\t\t draggable="false">\n\t\t\t\t\t\t\t<span class="dv2-ellipsis">${d}</span>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<img \n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n class="dv2-logo" \n\t\t\t\t\t\t\t\t src="${v}" \n\t\t\t\t\t\t\t\t data-src="${v}" \n\t\t\t\t\t\t\t\t alt="" \n\t\t\t\t\t\t\t\t draggable="false">\n\t\t\t\t\t\t\t<span class="dv2-ellipsis">${m}</span>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n <a href="${window.DV2_LINK_BET}" \n target="_blank" rel="nofollow"\n\t\t\t\t\t\tdata-id="${a}" \n\t\t\t\t\t\tdata-slug="${e.slug||""}"\n\t\t\t\t\t\tclass="dv2-appoinment" \n onclick="event.stopPropagation();"\n\t\t\t\t\t\tdraggable="false">\n\t\t\t\t\t\t<span class="no-appoinment">Äặt cược</span>\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`;n.append(u)}),t.show(),a.show(),function initSwiperInstance(e,t,a){if(!$(e).length)return null;swiper=new Swiper(e,{slidesPerView:1.5,navigation:{nextEl:t,prevEl:a},breakpoints:{640:{slidesPerView:2},768:{slidesPerView:3},1024:{slidesPerView:4},1280:{slidesPerView:5}},loop:!1,watchSlidesProgress:!0,roundLengths:!0})}(".dv2-layout-scl.dv2-appoinment-list-ctn .dv2-appoinment-swiper-container",".dv2-appoinment-next",".dv2-appoinment-prev")):hideAppointmentBlock_SCL()}(v(t)):hideAppointmentBlock_SCL()},error(e){console.error("[VSC LIVE] Lá»i khi gá»i API lá»ch BLV:",e),hideAppointmentBlock_SCL()}}):hideAppointmentBlock_SCL()}function createNotFoundMatchOverlay_SCL(e){const t=e?.matchInfo?.kickoff,a=e?.league?.name,n=e?.teams?.home?.name||"Home",i=e?.teams?.away?.name||"Away",o=function render
1StatusMatch_SCL(e){const t=new Date;new Date(t).setHours(0,0,0,0),new Date(t).setHours(23,59,59,999);const a=e instanceof Date?e:new Date(e);let n="";if(a>t)n=Math.round((a-t)/6e4)<=30?"sắp bắt Äầu":"chưa diá»
n ra";else{const e=new Date(a);e.setHours(e.getHours()+2),n=t<=e?"Äang diá»
n ra":"Äã kết thúc"}return n}(t);return $(`\n <div class="dv2-loading">\n Tráºn Äấu ${o}: <strong>${n} - ${i}</strong>\n <div class="dv2-load-league">\n <span>Giải Äấu: <strong>${a}</strong></span>\n </div>\n <div class="dv2-load-time">\n <span>${DV2StreamKickoff.renderTimeDisplay(t)}</span>\n </div>\n </div>\n `)}function renderMatchBoxInfo(e,t="#matchCard",a=0){if(!e)return;const n=e?.matchInfo?.kickoff,i=DV2StreamLinks.sortForDetail(e.livestream?.links||[])[a],o=`\n <div class="dv2-match-header">\n <img class="dv2-league-logo" src="${e.league.logo}" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'">\n <div class="dv2-league-name">${e.league.name}</div>\n <div class="dv2-status">${e.matchInfo.status}</div>\n </div>\n\n <div class="dv2-match-body">\n <div class="dv2-team">\n <img src="${e.teams.home.logo}" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'">\n <div>${e.teams.home.name}</div>\n </div>\n\n <div class="dv2-score">\n <span data-dv2-score-home>${e.score.fulltime.home}</span> - <span data-dv2-score-away>${e.score.fulltime.away}</span>\n </div>\n\n <div class="dv2-team" style="justify-content:flex-end">\n <div>${e.teams.away.name}</div>\n <img src="${e.teams.away.logo}" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'">\n </div>\n </div>\n\n <div class="dv2-match-footer">\n ${DV2StreamKickoff.renderTimeDisplay(n)}\n </div>\n ${i?`\n <div class="dv2-commentator">\n <span class="dv2-commentator-name">Bình Luáºn Viên: </span>\n <img class="dv2-commentator-avatar" src="${i.avatar}" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'">\n <span class="dv2-commentator-name">${i.commentator}</span>\n </div>\n `:""}\n `;$(t).html(o),DV2StreamKickoff.startCountdown(n)}$(document).ready(function(){$(".dv2-layout-scl.dv2-streaming-ctn .dv2-video-wrapper").length&&function renderDetailMatch_SCL(){const r=getStreamVideoWrapper_SCL(),l=r.find(".dv2-video-container");hideAppointmentBlock_SCL(),DV2HotLeagues.load({url:`${m}/api/data/lives/competitions/hot`,ajax:$.ajax,setHotLeaguesRank:e=>{t.hotLeaguesRank=e}}).always(()=>{!function initHotLiveBlock_SCL(){$(".dv2-layout-scl.dv2-hotlive-ctn .dv2-hot-content").length&&DV2SocoliveHotLive.init(function getHotLiveRenderOptions_SCL(){return{baseApiUrl:m,ajax:$.ajax,sortedMatchesFunction:v,liveStatuses:c,hotLeaguesRank:t.hotLeaguesRank,getPreferredLivestreamLink:getPreferredLivestreamLink}}())}()});let d=new URLSearchParams(window.location.search).get("match");if(d||(d="undefined"!=typeof DV2_MATCH_ID&&DV2_MATCH_ID?DV2_MATCH_ID:"2y8m4zh54p4zql0"),!d)return void l.html('<div class="dv2-notfound-video">â Không có ID livestream hợp lá»</div>');const u=document.querySelector(".dv2-layout-scl.dv2-streaming-ctn .dv2-living-room .dv2-video-inner .dv2-marquee-container .dv2-marquee-box");u.addEventListener("mouseenter",()=>{u.style.animationPlayState="paused"}),u.addEventListener("mouseleave",()=>{u.style.animationPlayState="running"});const h=$("<video>",{id:"liveVideo",controls:!1,autoplay:!0,muted:!0,playsinline:!0,poster:DV2StreamKickoff.resolvePosterUrl(n,e)});l.append(h),initStreamPlayerUi_SCL(h),showStreamLoading_SCL(l,"Äang tải video..."),$.ajax({url:`${m}/api/data/lives/${d}`,method:"GET",success:function(t){const d=t?.data;if(!d||!d.livestream)return l.html('<div class="dv2-notfound-video-livestream">ð« Không có luá»ng livestream</div>'),l.append(h),void hideAppointmentBlock_SCL();!function startDetailScorePoll_SCL(e){e&&(a||(a=DV2MatchScorePoll.create({container:".dv2-layout-scl"})),a.sync(e),a.start())}(d),i=d;const c=function bindDetailStreamLinks_SCL(t){return DV2StreamLinks.prepareSpanLinks({rawLinks:t?.livestream?.links,$container:$(".dv2-layout-scl.dv2-streaming-ctn .dv2-stream-links"),onSelect(a,r){n=a;const l=getStreamVideoWrapper_SCL(),d=l.find(".dv2-video-container"),c=d.find("#liveVideo");DV2StreamKickoff.applyPosterForLink(c,a,e),renderMatchBoxInfo(t,"#matchCard",r),i&&function initStreamOddsPanel_SCL(e,t){const a=getStreamChrome_SCL();a&&e?.length&&t&&(a.rememberOddsMatchData?.(e,t),a.initOddsPanel?.(e,t))}(l,i);const m=new Date(t?.matchInfo?.kickoff);if(!Number.isNaN(m.getTime())&&m.getTime()-Date.now()>9e5||!a?.url){const e=getStreamChrome_SCL();return e&&l.length&&e.clearFullChrome(l),function stopStreamPlayback_SCL(e){if(s+=1,clearSclPlaybackTimers(),o){try{o.destroy()}catch(e){console.warn(e)}o=null}if(!e?.length)return;const t=e[0];t.pause(),t.removeAttribute("src"),"function"==typeof t.load&&t.load()}
1(c),void hideStreamLoading_SCL(d)}!function clearStreamLoading_SCL(e){hideStreamLoading_SCL(e)}(d),initHLSPlayer_SCL(a.url)}})}(d);n=c?.activeLink??null,DV2StreamKickoff.applyPosterForLink(h,n,e);const m=c?.activeIndex??0;c?.links?.length&&renderMatchBoxInfo(d,"#matchCard",m);const v=getStreamChrome_SCL();v&&r.length&&(v.rememberOddsMatchData?.(r,d),v.initOddsPanel?.(r,d));const u=new Date(d?.matchInfo?.kickoff);if(!Number.isNaN(u.getTime())&&u.getTime()-Date.now()>9e5){const showPreMatchOverlay=()=>{const t=getStreamChrome_SCL();t&&r.length&&t.clearFullChrome(r),l.empty();const a=createNotFoundMatchOverlay_SCL(d);l.append(a),DV2StreamKickoff.startCountdown(d?.matchInfo?.kickoff);const i=$("<video>",{id:"liveVideo",controls:!1,autoplay:!1,muted:!0,playsinline:!0,poster:DV2StreamKickoff.resolvePosterUrl(n,e)});l.append(i),initStreamPlayerUi_SCL(i),loadCommentatorAppointments_SCL(d)};return void(window.DV2StreamTvc?.playBeforeStream?window.DV2StreamTvc.playBeforeStream(r,showPreMatchOverlay):showPreMatchOverlay())}const p=c?.activeLink?.url||"";if(!p)return l.html('<div class="dv2-notfound">Không tìm thấy video livestream</div>'),void loadCommentatorAppointments_SCL(d);const startStream=()=>{initHLSPlayer_SCL(p),loadCommentatorAppointments_SCL(d)};window.DV2StreamTvc?.playBeforeStream?window.DV2StreamTvc.playBeforeStream(r,startStream):startStream()},error:function(e){console.error("[VSC LIVE] Lá»i khi gá»i API:",e),l.html('<div class="dv2-notfound">Không thá» tải dữ liá»u livestream</div>')}})}()}),$(document).on("click",".dv2-layout-scl .dv2-game",function(e){e.preventDefault();const t=$(this).data("id")||"";window.location.href=`/streams/${t}`})}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper,function(window){window.DV2SocoliveHotLive=window.DV2SocoliveHotLive||{},function(DV2SocoliveHotLive){const e=".dv2-layout-scl.dv2-hotlive-ctn .dv2-hot-content";function escapeHtml(e){return String(e??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function getMatchStatus(e){return String(e?.matchInfo?.status??e?.status??"").toLowerCase()}function getDetailUrl(e,t){return window.DV2StreamLinks.getDetailUrl(e,t,{trailingSlash:!1})}DV2SocoliveHotLive.isMatchLive=function isMatchLive(e,t){return Array.isArray(t)&&t.includes(getMatchStatus(e))},DV2SocoliveHotLive.prepareMatches=function prepareMatches(e,t){return Array.isArray(e)&&"function"==typeof t?t(e.filter(e=>"finished"!==getMatchStatus(e))):[]},DV2SocoliveHotLive.loadMatches=function loadMatches(e){const{baseApiUrl:t,ajax:a=window.jQuery?.ajax||window.$?.ajax,sortedMatchesFunction:n,onSuccess:i,onError:o}=e||{},s=new Date,r=new Date(s);r.setDate(s.getDate()+1);const l={fromDate:s.toISOString().split("T")[0],toDate:r.toISOString().split("T")[0]};return a({url:`${t}/api/data/lives/range-date`,method:"POST",contentType:"application/json",data:JSON.stringify(l),success(e){if("success"!==e?.status||!e?.matches_by_date)return void i?.([]);let t=[];Object.values(e.matches_by_date).forEach(e=>{t=t.concat(e)}),i?.(DV2SocoliveHotLive.prepareMatches(t,n))},error:o})},DV2SocoliveHotLive.render=function render(t,a){const{containerSelector:n=e,liveStatuses:i=[],hotLeaguesRank:o=new Map,getPreferredLivestreamLink:s=()=>null,$:$=window.jQuery||window.$}=a||{},r=$(n);if(r.empty(),!Array.isArray(t)||!t.length)return void r.html('\n <div class="dv2-hotlive-empty">\n Hiá»n không có tráºn nà o Äang diá»
n ra ð¥\n </div>\n ');const l=o instanceof Map?o:new Map;t.forEach(e=>{const t=function getMatchId(e){return e?.match_id||e?.matchId||e?.id||e?.slug||""}(e),a=e?.teams?.home||{},n=e?.teams?.away||{},o=a.name||"Äá»i nhà ",d=n.name||"Äá»i khách",c=e?.league?.logo||"",m=e?.league?.name||"",v=e?.slug||"",u=function buildCommentatorDropdown(e,t){const a=function getSortedCommentatorLinks(e){return window.DV2StreamLinks?.sortForDetail?window.DV2StreamLinks.sortForDetail(e?.livestream?.links):Array.isArray(e?.livestream?.links)?e.livestream.links:[]}(e);if(!a.length)return`<span class="dv2-name">${escapeHtml(t(e)?.commentator||"")}</span>`;const n=t(e)||a[0]||null;return window.DV2BlvDropdown.build({match:e,links:a,preferredLink:n,getDetailUrl:getDetailUrl,escapeHtml:escapeHtml,menuPlacement:"up",renderToggle:({label:e,esc:t})=>`<span class="dv2-name">${t(e)}</span>`,renderItemContent:({label:e,esc:t})=>t(e)})}(e,s),h=DV2SocoliveHotLive.isMatchLive(e,i),p=l.has(e?.league?.id)?"hot-match":"",f=h?'<img src="https://sta.vnres.co/web/assets/soco/img/living.gif"><span>Live</span>':"<span>Sắp diá»
n ra</span>",g=getDetailUrl(t),w=$(`\n <li class="${p}">\n <a data-id="${t}" data-slug="${v}" class="dv2-game" href="${escapeHtml(g)}">\n <div class="dv2-mask"></div>\n <img class="dv2-live-cover" src="${c}" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'">\n <div class="dv2-live-mask"></div><i class="dv2-btn-open"></i>\n <div class="dv2-top-tag"><span></span>\n <div class="dv2-living ${h?"":"dv2-living--upcoming"}">\n ${f}\n </div>\n </div>\n <h5 class="dv2-bottom-title">
1\n <span class="dv2-num">\n <img src="https://sta.vnres.co/web/assets/soco/img/icon-hot-white.png" srcset="">\n <span>29.06k</span>\n </span>\n </h5>\n <h4 class="dv2-ellipsis">${m}: ${o} - ${d}</h4>\n </a>\n ${u}\n </li>\n `);r.append(w)}),function bindHotliveDropdownEvents(e){window.DV2BlvDropdown.bind(e,{namespace:"dv2HotliveDropdown",rebindDocumentClose:!0})}(r)},DV2SocoliveHotLive.init=function init(e){const t=e||{};DV2SocoliveHotLive.loadMatches({...t,onSuccess(e){DV2SocoliveHotLive.render(e,t),t.onSuccess?.(e)},onError(e){DV2SocoliveHotLive.render([],t),t.onError?.(e)}})}}(window.DV2SocoliveHotLive)}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery,Hls,Swiper){$=jQuery.noConflict();const e={hotLeaguesRank:new Map},t=["interrupt","first half","firsthalf","first-half","fh","half-time","half time","halftime","ht","second half","secondhalf","second-half","sh","extra time","extratime","extra time","et","overtime","overtime(deprecated)","ot","penalty","penalties","penalty shoot-out","penalty shootout"],a=["end","finished","ft"],n=window.BASE_API_URL;$(document).ready(function(){$(".dv2-layout-scl.dv2-match-wrapper-ctn").length&&function loadMatchByRangeDate_SCL(){const o=new Date,s=new Date;s.setDate(o.getDate()+7);const r={fromDate:o.toISOString().split("T")[0],toDate:s.toISOString().split("T")[0]};$(".dv2-layout-scl.dv2-match-wrapper-ctn .match-loading").show(),$(".dv2-layout-scl.dv2-match-wrapper-ctn .match-none").hide(),DV2HotLeagues.load({url:`${n}/api/data/lives/competitions/hot`,ajax:$.ajax,setHotLeaguesRank:t=>{e.hotLeaguesRank=t}}),$.ajax({url:`${n}/api/data/lives/range-date`,method:"POST",contentType:"application/json",data:JSON.stringify(r),success:function(n){if($(".dv2-layout-scl.dv2-match-wrapper-ctn .match-loading").hide(),!n||!n.matches_by_date)return void $(".match-none").show();let o=Object.keys(n.matches_by_date).map(e=>({date:e,matches:n.matches_by_date[e]}));o=function sortDateMatches_SCL(e){return e.sort((e,t)=>{const a=new Date(e.date),n=new Date(t.date),i=new Date;i.setHours(0,0,0,0),a.setHours(0,0,0,0),n.setHours(0,0,0,0);const o=a.getTime()===i.getTime(),s=n.getTime()===i.getTime();return o?-1:s?1:a-n})}(o),0!==o.length?(function renderDateTabs_SCL(e){const t=$(".dv2-layout-scl.dv2-match-wrapper-ctn .dv2-date-list .dv2-date-item");t.empty();const a=[...e];if(a.length<7){const e=new Date(a[a.length-1].date),t=7-a.length;for(let n=1;n<=t;n++){const t=new Date(e);t.setDate(e.getDate()+n),a.push({date:t.toISOString().split("T")[0],matches:[]})}}a.slice(0,7).forEach((e,a)=>{const{weekday:n,dateFormatted:i}=function formatDateLabel_SCL(e){const t=new Date(e);if(isNaN(t))return e;const a=new Date;a.setHours(0,0,0,0);const n=new Date(t);n.setHours(0,0,0,0);const i=n.getTime()===a.getTime();return{weekday:i?"Hôm nay":["Chá»§ nháºt","Thứ hai","Thứ ba","Thứ tư","Thứ nÄm","Thứ sáu","Thứ bảy"][t.getDay()],dateFormatted:`${String(t.getDate()).padStart(2,"0")}.${String(t.getMonth()+1).padStart(2,"0")}`,isToday:i}}(e.date),o=0===a?"dv2-active":"",s=`\n <li class="dv2-item ${o}" data-tag="${a+1}" data-date="${e.date}">\n <div class="dv2-day">${n}</div>\n <div class="dv2-date">${i}</div>\n ${o?'<div class="dv2-indicator"></div>':""}\n </li>\n `;t.append(s)})}(o),function renderMatchData_SCL(n){const o=$(".dv2-layout-scl.dv2-match-wrapper-ctn .dv2-match-data"),s=$(".dv2-layout-scl.dv2-match-wrapper-ctn .match-none");o.empty(),new Date,n.forEach((n,s)=>{const{liveMatches:r,upcomingMatches:l,endedMatches:d}=function getListMatchsByTime_SCL(e,n){const o=new Date,s=new Date(n);s.setHours(0,0,0,0);const r=new Date(n);r.setHours(23,59,59,999);const l=[],d=[],c=[];return i(e).forEach(e=>{const n=new Date(e?.kickoff);if(isNaN(n))return;new Date(n.getTime()+72e5);const i=t.includes(e.status.toLowerCase()),m=a.includes(e.status.toLowerCase());n>=s&&n<=r&&(i?l.push(e):n>o?d.push(e):m&&c.push(e))}),{liveMatches:l,upcomingMatches:d,endedMatches:c}}(n.matches,n.date);let c="";const renderMatchList=(t,a)=>{if(!t.length)return"";let n=`<div class="match-section"><h4 class="section-title">${"live"===a?"ð´ Äang diá»
n ra":"upcoming"===a?"â° Sắp diá»
n ra":"â
Äã kết thúc"}</h4>`;return t.forEach(t=>{const i=e.hotLeaguesRank.has(t.league.id),o=function formatTime_SCL(e){const t=new Date(e);return`${String(t.getHours()).padStart(2,"0")}
1:${String(t.getMinutes()).padStart(2,"0")}`}(new Date(t.kickoff));n+=`\n <div class="dv2-match-card ${i?"hot-match":""} ${a}" data-id="${t.match_id||""}">\n <div class="dv2-left">\n <div class="dv2-info">\n <div class="name dv2-ellipsis" style="color:${"live"===a?"red":"#000"};">\n ${t?.league?.name||"Giải Äấu"}\n </div>\n <div class="time">${o}</div>\n </div>\n <div class="dv2-team">\n <div class="host">\n <img onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'" class="host-img match-cover" src="${t.teams?.home?.logo||""}">\n <span class="host-name dv2-ellipsis">${t.teams?.home?.name||""}</span>\n </div>\n <div class="guest">\n <img onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'" class="guest-img match-cover" src="${t.teams?.away?.logo||""}">\n <span class="guest-name dv2-ellipsis">${t.teams?.away?.name||""}</span>\n </div>\n </div>\n </div>\n <div class="dv2-right">\n <div class="anchor-list" data-tag="${s}">\n <div class="avatar-list avatar-swiper-container container-${s}">\n <div class="swiper-wrapper">\n ${(t.livestream?.links||[]).map(e=>`\n <div class="dv2-blv-detail-match avatar-box swiper-slide ${"live"===a?"living":""}" \n data-id="${t.match_id}" data-slug="${t.slug}"\n data-href="${function getBlvDetailUrl_SCL(e,t){if(window.DV2StreamLinks?.getDetailUrl)return window.DV2StreamLinks.getDetailUrl(e,t,{trailingSlash:!1});const a=t?.liveId;return null!=a&&""!==a?`/streams/${e}?liveId=${encodeURIComponent(String(a))}`:`/streams/${e}`}(t.match_id,e)}">\n <img onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'" class="avatar" src="${e.avatar}" title="${e.commentator}">\n <div class="name dv2-ellipsis">${e.commentator}</div>\n ${"live"===a?'<img class="live" src="https://sta.vnres.co/web/assets/soco/img/live.png">':""}\n </div>\n `).join("")}\n </div>\n </div>\n </div>\n ${"live"===a?'\n <div class="living-box">\n <img src="https://sta.vnres.co/web/assets/soco/img/triangle.png">\n <span>Äang trá»±c tiếp...</span>\n </div>':""}\n </div>\n </div>`}),n+="</div>",n};c+=renderMatchList(r,"live"),c+=renderMatchList(l,"upcoming"),c+=renderMatchList(d,"ended"),o.append(`\n <div class="dv2-match-day ${0===s?"dv2-active":"dv2-hidden"}" data-tag="${s+1}" data-date="${n.date}">\n ${c||'<div class="match-none">Không có tráºn Äấu nà o</div>'}\n </div>\n `)}),$(".dv2-date-list .dv2-item").off("click").on("click",function(){const e=$(this).data("tag");$(".dv2-date-list .dv2-item").removeClass("dv2-active"),$(this).addClass("dv2-active"),$(".dv2-match-day").addClass("dv2-hidden").removeClass("dv2-active");const t=$(`.dv2-match-day[data-tag="${e}"]`);t.removeClass("dv2-hidden").addClass("dv2-active"),t.find(".dv2-match-card").length>0?s.hide():s.show()})}(o)):$(".dv2-layout-scl.dv2-match-wrapper-ctn .match-none").show()},error:function(e){console.error("[VSC CALENDAR] Error:",e),$(".dv2-layout-scl.dv2-match-wrapper-ctn .match-loading").hide(),$(".dv2-layout-scl.dv2-match-wrapper-ctn .match-none").show()}})}(),$(".dv2-layout-scl.dv2-match-wrapper-ctn .avatar-swiper-container").length&&function initSwiperInstance(e,t,a){if($(e).length)new Swiper(e,{slidesPerView:5,navigation:{nextEl:t,prevEl:a},breakpoints:{640:{slidesPerView:2},768:{slidesPerView:3},1024:{slidesPerView:4},1280:{slidesPerView:5}},loop:!1})}(".avatar-swiper-container",".avatar-next",".avatar-prev")});const i=DV2MatchSort.createSortedMatchesFunction({mode:"wc-first",liveStatuses:t,hotLeaguesRank:()=>e.hotLeaguesRank});$(document).on("click",".dv2-layout-scl .dv2-match-card",function(e){e.preventDefault();const t=$(this).data("id")||"";
1window.location.href=`/streams/${t}`}),$(document).on("click",".dv2-layout-scl .dv2-match-card .dv2-blv-detail-match",function(e){e.preventDefault(),e.stopPropagation();const t=$(this).data("href")||"",a=$(this).data("id")||"";window.location.href=t||`/streams/${a}`})}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery,Hls,Swiper){$=jQuery.noConflict();const e="https://vsc-apidev.helizones.com",t="https://img.winfast.dev/assets/upload/football/team/images/teamicon.png",a={hotLeaguesRank:new Map},n=["first half","firsthalf","first-half","fh","half-time","half time","halftime","ht","second half","secondhalf","second-half","sh","extra time","extratime","et","overtime","overtime(deprecated)","ot","penalty","penalties","penalty shoot-out","penalty shootout"],i=DV2MatchSort.createSortedMatchesFunction({mode:"wc-when-live-or-soon",liveStatuses:n,hotLeaguesRank:()=>a.hotLeaguesRank,wcSoonMinutes:10,copy:!0}),o=DV2MatchSort.createSortedMatchesFunction({mode:"wc-first",liveStatuses:n,hotLeaguesRank:()=>a.hotLeaguesRank,copy:!0});function isNhaDaiLivestreamLink(e){if(!e)return!1;if(1e17===e.commentatorId)return!0;const t=String(e.commentator||"").trim().toLowerCase();return"nhà Äà i"===t||"nha dai"===t||"blv nhà Äà i"===t}function sortLivestreamLinksPreferRealBlv(e){if(!Array.isArray(e))return[];const t=e.filter(e=>!1!==e?.isStreaming);return t.sort((e,t)=>{const a=isNhaDaiLivestreamLink(e),n=isNhaDaiLivestreamLink(t);return a&&!n?1:!a&&n?-1:0}),t}function getPreferredLivestreamLink(e){const t=e?.livestream?.links;return Array.isArray(t)&&t.length?DV2StreamLinks.getPreferredLink(t):null}function getStreamVideoWrapperHome_SCL(){return $(".dv2-layout-scl.dv2-home-featured-streaming-ctn .dv2-video-wrapper").first()}function getStreamVideoContainerHome_SCL(){return getStreamVideoWrapperHome_SCL().find(".dv2-video-container").first()}function getMatchTopInfoHome_SCL(){const e=getStreamVideoContainerHome_SCL();let t=e.children("#matchTopInfo");return t.length||(t=$('<div id="matchTopInfo"></div>'),e.prepend(t)),t}function clearStreamChromeHome_SCL(){const e=window.DV2_StreamChrome,t=getStreamVideoWrapperHome_SCL();e&&t.length&&e.clearFullChrome(t)}function isMatchLive_SCL(e){return n.includes(String(e?.status??"").toLowerCase())}function isWcStartingSoon_SCL(e){return DV2MatchSort.isWcStartingSoon(e,n,10)}function bindFeaturedRoomListClick_SCL(e,t,a){e.off("click.featuredMatch").on("click.featuredMatch","li.dv2-item-match",function(e){e.preventDefault(),e.stopPropagation();const n=$(this).data("index");a(t[n],n)})}function sclOddsValueHasData_SCL(e){return null!=e&&""!==e}function sclOddsSectionHasData_SCL(e){return null!=e&&(sclOddsValueHasData_SCL(e.home)||sclOddsValueHasData_SCL(e.away)||sclOddsValueHasData_SCL(e.rate)||sclOddsValueHasData_SCL(e.over)||sclOddsValueHasData_SCL(e.under))}function sclNormalizeAssetBase_SCL(e){return e?String(e).endsWith("/")?String(e):`${e}/`:""}function sclGetSocoliveImageUrl_SCL(e){const t=String(e||"").replace(/^\//,"");return`${function sclGetSocoliveImgBase_SCL(){return`${function sclGetImagePath_SCL(){if("undefined"!=typeof DV2_IMAGE_PATH&&DV2_IMAGE_PATH)return sclNormalizeAssetBase_SCL(DV2_IMAGE_PATH);if("string"==typeof window.DV2_STREAMING_PLUGIN_URL&&window.DV2_STREAMING_PLUGIN_URL)return`${sclNormalizeAssetBase_SCL(window.DV2_STREAMING_PLUGIN_URL)}assets/images/`;if("undefined"!=typeof dv2Streaming){if(dv2Streaming.imagePath)return sclNormalizeAssetBase_SCL(dv2Streaming.imagePath);if(dv2Streaming.pluginUrl)return`${sclNormalizeAssetBase_SCL(dv2Streaming.pluginUrl)}assets/images/`}return"../../assets/images/"}()}socolive/`}()}${t}`}function sclGetStreamDetailUrl_SCL(e,t){if(!e)return"";const a=e.matchId||e.match_id||e.id||"";if(!a)return"";let n=t||null;if(!n){const t=e.livestream?.links||[];n=sortLivestreamLinksPreferRealBlv(t)[0]||t[0]||null}if(window.DV2StreamLinks?.getDetailUrl)return DV2StreamLinks.getDetailUrl(a,n,{trailingSlash:!0});const i=encodeURIComponent(String(a)),o=n?.liveId;return null!=o&&""!==o?`/streams/${i}/?liveId=${encodeURIComponent(String(o))}
1`:`/streams/${i}/`}function sclBindFeaturedStreamClick_SCL(e){const t=getStreamVideoWrapperHome_SCL();t.length&&(e?t.attr("data-stream-detail-url",e).addClass("dv2-video-wrapper--clickable"):t.removeAttr("data-stream-detail-url").removeClass("dv2-video-wrapper--clickable"))}function sclScheduleTopMarqueeInit_SCL(e){const run=()=>function sclInitTopMarquee_SCL(e){(e?.length?e:getMatchTopInfoHome_SCL()).find(".dv2-video-inner-top-marquee").each(function(){const e=this.querySelector(".dv2-video-inner-top-marquee-track"),t=e?.querySelectorAll(".dv2-video-inner-top-marquee-content");if(!e||!t?.length)return;t.forEach(e=>{e.style.display=""});const a=t[0].offsetWidth;if(!a)return;const n=Math.max(a/60,6);e.style.animation=`dv2-video-inner-marquee ${n}s linear infinite`})}(e);requestAnimationFrame(()=>requestAnimationFrame(run)),setTimeout(run,400)}function getHotLiveRenderOptions_SCL(){return{baseApiUrl:e,ajax:$.ajax,sortedMatchesFunction:o,liveStatuses:n,hotLeaguesRank:a.hotLeaguesRank,getPreferredLivestreamLink:getPreferredLivestreamLink}}function renderListLiveMatch_SCL(e){const a=$(".dv2-layout-scl.dv2-home-featured-streaming-ctn .dv2-room-list"),n=(e||[]).slice(0,10).map(e=>{const t=(e?.title||e?.slug||"Tráºn Äấu").replace(/vuasanco/gi,"").trim(),a=e?.slug||t.toLowerCase().replace(/\s+/g,"-");return{id:e?.match_id||a,homeLogo:e?.teams?.home?.logo||"",awayLogo:e?.teams?.away?.logo||"",homeName:e?.teams?.home?.name||"Äá»i nhà ",awayName:e?.teams?.away?.name||"Äá»i khách"}});
1a.empty(),n.forEach((e,n)=>{a.append(`\n <li class="dv2-item-match" data-id="${e.id}" data-index="${n}">\n <a href="javascript:void(0)" class="${0===n?"dv2-active":""}">\n <div class="dv2-match-card">\n <div class="dv2-team dv2-team-home">\n <img class="dv2-team-logo" src="${e.homeLogo}" alt="${e.homeName}" onerror="this.src='${t}'">\n <span class="dv2-team-name">${e.homeName}</span>\n </div>\n <div class="vs">VS</div>\n <div class="dv2-team dv2-team-away">\n <img class="dv2-team-logo" src="${e.awayLogo}" alt="${e.awayName}" onerror="this.src='${t}'">\n <span class="dv2-team-name">${e.awayName}</span>\n </div>\n </div>\n </a>\n </li>\n `)})}$(document).ready(function(){$(".dv2-layout-scl.dv2-home-featured-streaming-ctn .dv2-video-wrapper").length&&function renderFeaturedStreamBlock_SCL(){const n=$(".dv2-layout-scl.dv2-home-featured-streaming-ctn .dv2-video-inner"),s=$(".dv2-layout-scl.dv2-home-featured-streaming-ctn .dv2-room-list"),r=getStreamVideoContainerHome_SCL(),l=$(".dv2-stream-links"),d=new Date,c=new Date(d);c.setDate(c.getDate()+1);const m={fromDate:d.toISOString().split("T")[0],toDate:c.toISOString().split("T")[0]},v=$('\n <div class="dv2-loading-nomatch">\n <div class="no-match-text">Hiá»n không có tráºn nà o Äang diá»
n ra ð¥</div>\n <div class="subtitle">Vui lòng quay lại sau...</div>\n </div>\n ');function showFeaturedMatchError_SCL(e){getMatchTopInfoHome_SCL().html(`<div class="dv2-notfound">${e}</div>`),sclBindFeaturedStreamClick_SCL("")}function loadFeaturedMatch_SCL(t,a){t?.match_id&&(s.find("a").removeClass("dv2-active"),s.find("li").eq(a).find("a").addClass("dv2-active"),clearStreamChromeHome_SCL(),function sclClearFeaturedStreamMediaHome_SCL(e){e.children().not("#matchTopInfo, .dv2-stream-controls, .dv2-stream-chrome").remove(),getMatchTopInfoHome_SCL()}(r),l.find("span").removeClass("active"),$.ajax({url:`${e}/api/data/lives/${t.match_id}`,method:"GET",success(e){const t=e?.data;if(!t?.livestream)return getMatchTopInfoHome_SCL().html('<div class="dv2-notfound-video-livestream">ð« Không có luá»ng livestream</div>'),hideAppointmentBlock_SCL(),void sclBindFeaturedStreamClick_SCL("");!function renderNewScreen_SCL(e){if(!e)return;const t=e.league||{},a=e.teams?.home||{},n=e.teams?.away||{},i=e.matchInfo||{},o=e.hdp,s=e.ou,r=function sclHasStreamOddsData_SCL(e){return!!e&&(sclOddsSectionHasData_SCL(e.hdp)||sclOddsSectionHasData_SCL(e.ou))}(e),l=e.livestream?.links||[],d=sclGetStreamDetailUrl_SCL(e),c=function sclGetHomeBetButtonsHtml_SCL(){const e=window.DV2_SOCOLIVE_HOME_BET_BUTTONS_HTML;return"string"==typeof e&&e.trim()?e:function sclGetHomeBetButtonsDefaultHtml_SCL(){return`\n <a href="#">\n <img src="${sclGetSocoliveImageUrl_SCL("cuoc-say88.png")}" alt="Cược SAY88" />\n </a>\n <a href="#">\n <img src="${sclGetSocoliveImageUrl_SCL("cuoc-fabet88.png")}" alt="Cược FABET88" />\n </a>\n <a href="#">\n <img src="${sclGetSocoliveImageUrl_SCL("cuoc-fabet88.png")}" alt="Cược FABET88" />\n </a>`}()}(),m=function sclGetHomeBetButtonHeaderHtml_SCL(){const e=window.DV2_SOCOLIVE_HOME_BET_BUTTON_HEADER_HTML;return"string"==typeof e&&e.trim()?e:function sclGetHomeBetButtonHeaderDefaultHtml_SCL(){return`<img src="${sclGetSocoliveImageUrl_SCL("top-banner.png")}" alt="top-banner"/>`}()}(),v=function sclGetHomeBetButtonFooterHtml_SCL(){const e=window.DV2_SOCOLIVE_HOME_BET_BUTTON_FOOTER_HTML;return"string"==typeof e&&e.trim()?e:function sclGetHomeBetButtonFooterDefaultHtml_SCL(){return`<a href="${"string"==typeof window.DV2_LINK_BET&&window.DV2_LINK_BET.trim()?window.DV2_LINK_BET:"#"}" target="_blank" rel="nofollow">\n <img src="${sclGetSocoliveImageUrl_SCL("footer-banner-cuocngay-say88.png")}" alt="banner cược ngay footer" />\n </a>`}()}(),u=t.name||"",h=t.logo||"",p=a.name||"Home",f=a.logo||"",g=n.name||"Away",w=n.logo||"",y=i.kickoff?new Date(i.kickoff):null,S=y?`${String(y.getDate()).padStart(2,"0")}/${String(y.getMonth()+1).padStart(2,"0")}`:"";let _="";if(y){const e=y-new Date;if(e>0&&e/36e5<24){const t=Math.floor(e/36e5),a=Math.floor(e%36e5/6e4),n=Math.floor(e%6e4/1e3);_=`${String(t).padStart(2,"0")}
1:${String(a).padStart(2,"0")}:${String(n).padStart(2,"0")}`,i._kickoffForCountdown=y}else _=`${String(y.getHours()).padStart(2,"0")}:${String(y.getMinutes()).padStart(2,"0")}`}const D=l.length?l.map(t=>`\n <a href="${sclGetStreamDetailUrl_SCL(e,t)}">\n <div class="dv2-video-inner-commentator-item">\n <div class="dv2-video-inner-commentator-avatar">\n ${t.avatar?`<img src="${t.avatar}" alt="${t.commentator}" />`:"ð¨"}\n </div>\n <div class="dv2-video-inner-commentator-name">${t.commentator}</div>\n </div>\n </a>`).join(""):"",k=r?`\n <div class="dv2-video-inner-odds">\n <div class="dv2-video-inner-odds-group">\n <div class="dv2-video-inner-odds-type">HDP</div>\n <div class="dv2-video-inner-odds-values">\n <div>${o?.home??""}</div>\n <div>${o?.rate??""}</div>\n <div>${o?.away??""}</div>\n </div>\n </div>\n <div class="dv2-video-inner-odds-group">\n <div class="dv2-video-inner-odds-type">O/U</div>\n <div class="dv2-video-inner-odds-values">\n <div>${s?.over??"-"}</div>\n <div>${s?.rate??"-"}</div>\n <div>${s?.under??"-"}</div>\n </div>\n </div>\n </div>`:"",C=`\n <div class="dv2-video-inner-top-banner">\n <div class="dv2-video-inner-top-left">\n <div class="dv2-video-inner-top-icon"><img src="${h}" alt="${u}" /></div>\n <div class="dv2-video-inner-top-title">${u}</div>\n </div>\n <div class="dv2-video-inner-top-marquee">\n <div class="dv2-video-inner-top-marquee-track">\n <div class="dv2-video-inner-top-marquee-content">${m}</div>\n <div class="dv2-video-inner-top-marquee-content" aria-hidden="true">${m}</div>\n </div>\n </div>\n </div>\n <div class="dv2-video-inner-main-banner">\n <div class="dv2-video-inner-team-info">\n <div class="dv2-video-inner-team dv2-video-inner-team-left">\n <div class="dv2-video-inner-team-flag">\n ${f?`<img src="${f}" alt="${p}" />`:""}\n </div>\n <div class="dv2-video-inner-team-name">${p}</div>\n </div>\n <div class="vs-image">\n <img src="${sclGetSocoliveImageUrl_SCL("vs-icon.png")}" alt="VS" />\n </div>\n <div class="dv2-video-inner-team dv2-video-inner-team-right">\n <div class="dv2-video-inner-team-flag">\n ${w?`<img src="${w}" alt="${g}" />`:""}\n </div>\n <div class="dv2-video-inner-team-name">${g}</div>\n </div>\n </div>\n </div>\n <div class="dv2-video-inner-time-box-wrapper">\n <div class="dv2-video-inner-time-box">\n <div class="dv2-video-inner-time-label">Thá»i gian: ${S}</div>\n <div class="dv2-video-inner-time-value">${_}</div>\n </div>\n </div>\n <div class="dv2-video-inner-footer-bar">\n <div class="dv2-video-inner-odds-row">\n ${k}\n <div class="dv2-video-inner-cta-group"><div class="dv2-video-inner-cta-track">${c}</div></div>\n </div>\n <div class="dv2-video-inner-commentator">\n ${v}\n <div class="dv2-video-inner-commentator-list">${D}</div>\n </div>\n </div>`,b=getMatchTopInfoHome_SCL();if(b.html(C),sclBindFeaturedStreamClick_SCL(d),function sclRefreshFeaturedReviveAds_SCL(){window.DV2_StreamChrome?.refreshReviveAds?.(getMatchTopInfoHome_SCL())}(),sclScheduleTopMarqueeInit_SCL(b),b.find(".dv2-video-inner-top-marquee img").each(function(){this.complete?sclScheduleTopMarqueeInit_SCL(b):$(this).one("load error",()=>sclScheduleTopMarqueeInit_SCL(b))}),i._kickoffForCountdown){const e=i._kickoffForCountdown;delete i._kickoffForCountdown,window._sclCountdownInterval&&clearInterval(window._sclCountdownInterval),window._sclCountdownInterval=setInterval(()=>{const t=e-new Date;if(t<=0)return clearInterval(window._sclCountdownInterval),window._sclCountdownInterval=null,void location.reload();const a=Math.floor(t/36e5),n=Math.floor(t%36e5/6e4),i=Math.floor(t%6e4/1e3),o=`${String(a).padStart(2,"0")}
1:${String(n).padStart(2,"0")}:${String(i).padStart(2,"0")}`;getMatchTopInfoHome_SCL().find(".dv2-video-inner-time-value").text(o)},1e3)}}(t)},error(e){console.error("[VSC LIVE] Lá»i khi gá»i API:",e),showFeaturedMatchError_SCL("Không thá» tải dữ liá»u livestream")}}))}DV2HotLeagues.load({url:`${e}/api/data/lives/competitions/hot`,ajax:$.ajax,setHotLeaguesRank:e=>{a.hotLeaguesRank=e}}),$.ajax({url:`${e}/api/data/lives/range-date`,method:"POST",headers:{"Content-Type":"application/json"},data:JSON.stringify(m),dataType:"json",success(e){if(!e||"success"!==e.status||!e.matches_by_date)return void s.html("<li>Không có dữ liá»u hợp lá»</li>");const a=[];if(Object.keys(e.matches_by_date).forEach(t=>{a.push(...e.matches_by_date[t])}),!a.length)return void s.html("<span>Không có tráºn Äấu nà o</span>");const{now:r,todayStart:d,todayEnd:c,tomorrowStart:m,tomorrowEnd:u}=function getTodayTomorrowRange_SCL(){const e=new Date,t=new Date(e);t.setHours(0,0,0,0);const a=new Date(e);a.setHours(23,59,59,999);const n=new Date(t);n.setDate(t.getDate()+1);const i=new Date(a);return i.setDate(a.getDate()+1),{now:e,todayStart:t,todayEnd:a,tomorrowStart:n,tomorrowEnd:i}}(),h=i(a),{streamMatches:p,liveMatch:f,upcomingMatch:g,wcSoonMatch:w}=function buildFeaturedStreamMatches_SCL(e,t,a,n,i,o){const s=e.filter(isMatchLive_SCL),r=e.filter(e=>{const s=new Date(e?.kickoff);return s>t&&(s>=a&&s<=n||s>=i&&s<=o)}),l=e.find(isWcStartingSoon_SCL)||null,d=new Set,c=[],pushMatch=e=>{const t=e?.match_id??e?.id;!e||t&&d.has(t)||(t&&d.add(t),c.push(e))};
1return l&&pushMatch(l),s.forEach(pushMatch),r.forEach(pushMatch),{streamMatches:c,liveMatch:s,upcomingMatch:r,wcSoonMatch:l}}(h,r,d,c,m,u);if(!f.length&&!g.length)return clearStreamChromeHome_SCL(),n.append(v),void $(".dv2-layout-scl.dv2-appoinment-list-ctn").hide();f.length&&!g.length&&$(".dv2-layout-scl.dv2-appoinment-list-ctn").hide(),!f.length&&!w&&g.length>0&&(renderListLiveMatch_SCL(g),bindFeaturedRoomListClick_SCL(s,g,loadFeaturedMatch_SCL),loadFeaturedMatch_SCL(g[0],0)),(f.length>0||w)&&(renderListLiveMatch_SCL(p),bindFeaturedRoomListClick_SCL(s,p,loadFeaturedMatch_SCL),function bindFeaturedStreamLinksClick_SCL(e){l.off("click.featuredLinks").on("click.featuredLinks","span",function(t){t.preventDefault(),t.stopPropagation();const a=$(this).data("index"),n=$(this).data("index-links"),i=e[a],o=sortLivestreamLinksPreferRealBlv(i?.livestream?.links||[])[n];DV2StreamLinks.navigateForLink(o)||loadFeaturedMatch_SCL(i,a)})}(p),loadFeaturedMatch_SCL(p[0],0)),function renderSliderAppointmentsBlock_SCL(e){const a=$(".dv2-layout-scl.dv2-appoinment-list-ctn .dv2-appoinment-swiper-container"),n=a.find(".dv2-swiper-wrapper");n.empty(),e.forEach(function(e,a){const i=e?.match_id||e?.id||e?.slug||a,o=e?.league?.name||"N/A",s=e?.league?.logo||"https://sta.vnres.co/file/common/20210503/fca5954ec22137ad05325506d6645592",r=function getDateLabel_SCL(e){const t=new Date,a=new Date(t);a.setDate(a.getDate()+1);const n=new Date(e);if(t.setHours(0,0,0,0),a.setHours(0,0,0,0),n.setHours(0,0,0,0),n.getTime()===t.getTime())return"Hôm nay";if(n.getTime()===a.getTime())return"Ngà y mai";return`${String(n.getDate()).padStart(2,"0")}/${String(n.getMonth()+1).padStart(2,"0")}`}(e?.kickoff||""),l=function formatTime_SCL(e){if(!e)return"";const t=new Date(e);return`${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}(e?.kickoff||""),d=e?.teams?.home?.name||"Home Team",c=e?.teams?.home?.logo||"Logo",m=e?.teams?.away?.name||"Away Team",v=e?.teams?.away?.logo||"Logo";n.append(`\n <div class="dv2-swiper-slide swiper-slide" style="cursor:pointer;" data-id="${i}" onclick="goToMatchDetail('${i}')">\n <div class="dv2-title">\n <div class="dv2-fl">\n <img onerror="this.src='${t}'" src="${s}" class="icon" draggable="false">\n <span>${o}</span>\n </div>\n <div class="dv2-fr dv2-match-time">\n <span style="padding-right:5px;">${r}</span>\n ${l}\n </div>\n </div>\n <div class="dv2-box" style="display: flex;">\n <div class="dv2-battle-team">\n <p>\n <img onerror="this.src='${t}'" class="dv2-logo" src="${c}" data-src="${c}" draggable="false">\n <span class="dv2-ellipsis">${d}</span>\n </p>\n <p>\n <img onerror="this.src='${t}'" class="dv2-logo" src="${v}" data-src="${v}" alt="" draggable="false">\n <span class="dv2-ellipsis">${m}</span>\n </p>\n </div>\n <a href="${window.DV2_LINK_BET}" target="_blank" rel="nofollow"\n data-id="${i}" data-slug="${e.slug||""}"\n class="dv2-appoinment" onclick="event.stopPropagation();" draggable="false">\n <span class="no-appoinment">Äặt cược</span>\n </a>\n </div>\n </div>\n `)}),a.show(),function initSwiperInstance(e,t,a){$(e).length&&new Swiper(e,{slidesPerView:1.5,navigation:{nextEl:t,prevEl:a},breakpoints:{640:{slidesPerView:2},768:{slidesPerView:3},1024:{slidesPerView:4},1280:{slidesPerView:5}},loop:!0,watchSlidesProgress:!0,roundLengths:!0,autoplay:{delay:3e3,disableOnInteraction:!1}})}(".dv2-layout-scl.dv2-appoinment-list-ctn .dv2-appoinment-swiper-container",".dv2-appoinment-next",".dv2-appoinment-prev")}(g),function renderHotLiveBlock_SCL(e=[]){DV2SocoliveHotLive.render(e,getHotLiveRenderOptions_SCL())}(DV2SocoliveHotLive.prepareMatches(a,o))},error(){clearStreamChromeHome_SCL(),s.html('<li class="dv2-list-empty">Danh sách phát trá»ng</li>'),showFeaturedMatchError_SCL("Không thá» tải danh sách tráºn Äấu"),$(".dv2-layout-scl.dv2-appoinment-list-ctn").hide()}})}(),$(".dv2-layout-scl.dv2-blv-list-ctn .dv2-anchor-swiper-container").length&&function render
1SlideBlvBlock_SCL(){const a=$(".dv2-layout-scl.dv2-blv-list-ctn .dv2-anchor-swiper-container").find(".dv2-swiper-wrapper");a.empty(),a.html('\n <div class="dv2-loading-blv" style="color:#000;text-align:center;padding:40px 0;">\n Äang tải danh sách bình luáºn viên...\n </div>\n '),$.ajax({url:`${e}/api/admin/streams/commentators`,method:"GET",dataType:"json",success(e){e&&"success"===e.message&&Array.isArray(e.commentators)?e.commentators.length?(a.empty(),e.commentators.forEach(e=>{const n=e?.name||"Bình luáºn viên",i=e?.avatar||"https://sta.vnres.co/file/common/20250410/000bfdfc22afe0f322140fabd2228aec.jpg";a.append(`\n <div class="dv2-swiper-slide swiper-slide dv2-person-blv" data-id="${e?.id}">\n <a href="javascript:void(0)">\n <img onerror="this.src='${t}'" class="dv2-blv-avatar" src="${i}" alt="${n}">\n <p class="dv2-blv-name ellipsis">${n}</p>\n </a>\n </div>\n `)}),function initSwiperInstanceCom(e,t,a){$(e).length&&new Swiper(e,{slidesPerView:8,navigation:{nextEl:t,prevEl:a},breakpoints:{640:{slidesPerView:3},768:{slidesPerView:3},1024:{slidesPerView:5},1280:{slidesPerView:8}},loop:!1,watchSlidesProgress:!0,roundLengths:!0,autoplay:{delay:3e3,disableOnInteraction:!1}})}(".dv2-layout-scl.dv2-blv-list-ctn .dv2-anchor-swiper-container",".dv2-anchor-next",".dv2-anchor-prev")):a.html('<div style="color:#fff;text-align:center;padding:40px 0;">Không có bình luáºn viên nà o</div>'):a.html('<div style="color:#fff;text-align:center;padding:40px 0;">Không có dữ liá»u bình luáºn viên</div>')},error(){a.html('\n <div style="color:#fff;text-align:center;padding:40px 0;">\n Lá»i khi tải danh sách bình luáºn viên\n </div>\n ')}})}(),$(".dv2-layout-scl.dv2-hotlive-ctn .dv2-hot-content").length&&function initHotLiveBlock_SCL(){if(!$(".dv2-layout-scl.dv2-hotlive-ctn .dv2-hot-content").length)return;const start=()=>DV2SocoliveHotLive.init(getHotLiveRenderOptions_SCL()),t=DV2HotLeagues.load({url:`${e}/api/data/lives/competitions/hot`,ajax:$.ajax,setHotLeaguesRank:e=>{a.hotLeaguesRank=e}});t&&"function"==typeof t.always?t.always(start):start()}()}),$(document).on("click",".dv2-layout-scl.dv2-home-featured-streaming-ctn .dv2-video-wrapper.dv2-video-wrapper--clickable",function(e){if($(e.target).closest("a, button, input, label, .dv2-video-inner-cta-group, .dv2-video-inner-commentator-list").length)return;const t=$(this).attr("data-stream-detail-url");t&&(window.location.href=t)}),$(document).on("click",".dv2-layout-scl.dv2-hotlive-ctn .dv2-game",function(e){if($(e.target).closest(".dv2-blv-dropdown").length)return;const t=$(this),a=t.attr("href");if(a&&"#"!==a)return;e.preventDefault();const n=t.data("id")||"";window.location.href=`/streams/${n}`}),window.goToMatchDetail=function goToMatchDetail(e){window.location.href=`/streams/${e}`}}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery,Hls){$=jQuery.noConflict();const e="https://img.freepik.com/premium-photo/close-up-soccer-player-who-kicks-ball_207634-4089.jpg";$(document).ready(function(){if($(".dv2-layout-tc.dv2-detail-stream-ctn").length>0){const e=document.getElementById("liveVideo");e&&(initStreamPlayerUi_TC(e),function initThapcamMobilePlaybackFix_TC(){const e=getStreamVideoWrapper_TC();if(!e.length||e.data("tcMobileFixBound"))return;e.data("tcMobileFixBound",!0);const syncTcFsLayoutClass=()=>{const t=e[0],a=!!t&&(document.fullscreenElement===t||document.webkitFullscreenElement===t)||e.hasClass("dv2-stream-wrapper-fs");e.toggleClass("dv2-tc-stream-fs",a),e.closest(".dv2-thapcam-video").toggleClass("dv2-tc-stream-parent-fs",a)};e.on("dv2wrapperfschange.tcFsLayout",syncTcFsLayoutClass),$(document).on("fullscreenchange.tcFsLayout webkitfullscreenchange.tcFsLayout",syncTcFsLayoutClass),$(window).on("resize.tcFsLayout orientationchange.tcFsLayout",syncTcFsLayoutClass),syncTcFsLayoutClass(),e.on("play.dv2TcMobileFix pause.dv2TcMobileFix loadedmetadata.dv2TcMobileFix","video",function(){applyThapcamVideoAttrs_TC($(this))})}()),function loadMatchData_TC(e){const t=getStreamVideoWrapper_TC();
1showStreamLoading_TC(t,"Äang tải thông tin tráºn Äấu..."),$.ajax({url:`https://vsc-apidev.helizones.com/api/data/lives/${e}`,method:"GET",success:function(e){if(hideStreamLoading_TC(t),e&&e.data){a=e.data;const n=a;!function startDetailScorePoll_TC(e){e&&(i||(i=DV2MatchScorePoll.create({container:".dv2-layout-tc.dv2-detail-stream-ctn"})),i.sync(e),i.start())}(n),initStreamOddsPanel_TC(n);const o=new Date(n?.matchInfo?.kickoff);if(!Number.isNaN(o.getTime())&&o.getTime()-Date.now()>9e5){clearStreamChrome_TC(),updatePageTitle_TC(n),renderScoreOverlay_TC(n),renderCommentatorLinks_TC(n,{autoPlay:!1});const showCountdown=()=>{showMatchInfoCard_TC(t,n,"countdown"),$(".dv2-layout-tc.dv2-detail-stream-ctn #scoreOverlay").show()};return void(window.DV2StreamTvc?.playBeforeStream?window.DV2StreamTvc.playBeforeStream(t,showCountdown):showCountdown())}if("finished"===n?.matchInfo?.status?.toLowerCase())return clearStreamChrome_TC(),updatePageTitle_TC(n),renderScoreOverlay_TC(n),renderCommentatorLinks_TC(n,{autoPlay:!1}),showMatchInfoCard_TC(t,n,"result"),void $(".dv2-layout-tc.dv2-detail-stream-ctn #scoreOverlay").show();!function renderMatchPage_TC(){const e=a;updatePageTitle_TC(e),renderScoreOverlay_TC(e);const t=renderCommentatorLinks_TC(e);t?.links?.length||(clearStreamChrome_TC(),showMatchPosterOverlay_TC(getStreamVideoWrapper_TC(),e)),$(".dv2-layout-tc.dv2-detail-stream-ctn #scoreOverlay").show()}()}else showError_TC()},error:function(){hideStreamLoading_TC(t),showError_TC()}})}(function getMatchIdFromUrl_TC(){let e=new URLSearchParams(window.location.search).get("match");return e||(e="undefined"!=typeof DV2_MATCH_ID&&DV2_MATCH_ID?DV2_MATCH_ID:"2y8m4zh54p4zql0"),e}())}});let t=null,a=null,n=null,i=null,o=0,s=null,r=null;function getStreamChrome_TC(){return window.DV2_StreamChrome}function getStreamVideoWrapper_TC(){return $(".dv2-layout-tc.dv2-detail-stream-ctn .dv2-video-wrapper").first()}function applyThapcamVideoAttrs_TC(e){if(!e?.length)return;const t=e[0];e.prop("controls",!1),e.removeAttr("controls"),e.attr({playsinline:"","webkit-playsinline":"","x-webkit-airplay":"allow"}),t&&(t.controls=!1,"disablePictureInPicture"in t&&(t.disablePictureInPicture=!0))}function initStreamPlayerUi_TC(e){const t=getStreamVideoWrapper_TC(),a=getStreamChrome_TC();if(!t.length||!a)return;const n=e?$(e):t.find("video").first();applyThapcamVideoAttrs_TC(n),a.initPlayerUi(t,n),applyThapcamVideoAttrs_TC(n)}function onHlsStreamReady_TC(){const e=getStreamChrome_TC(),t=getStreamVideoWrapper_TC();t.length&&clearMatchOverlays_TC(t),e&&t.length&&(a&&e.rememberOddsMatchData?.(t,a),e.onHlsReady(t))}function initStreamOddsPanel_TC(e){const t=getStreamChrome_TC(),a=getStreamVideoWrapper_TC();t&&a.length&&e&&(t.rememberOddsMatchData?.(a,e),t.initOddsPanel?.(a,e))}function clearStreamChrome_TC(){const e=getStreamChrome_TC(),t=getStreamVideoWrapper_TC();e&&t.length&&e.clearFullChrome(t)}function showStreamLoading_TC(e,t="Äang tải luá»ng phát..."){if(!e?.length)return $();hideStreamLoading_TC(e);const a=String(t||"Äang tải luá»ng phát...").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),n=$(`\n <div class="dv2-stream-loading" role="status" aria-live="polite" aria-busy="true">\n <div class="dv2-stream-loading__panel">\n <div class="dv2-stream-loading__spinner" aria-hidden="true"></div>\n <p class="dv2-stream-loading__text">${a}</p>\n </div>\n </div>\n `);return e.append(n),n}function hideStreamLoading_TC(e){(e?.length?e:getStreamVideoWrapper_TC()).find(".dv2-stream-loading").remove()}function clearTcPlaybackTimers(){s&&(clearTimeout(s),s=null),r&&(clearTimeout(r),r=null)}function stopStreamPlayback_TC(e){if(o+=1,clearTcPlaybackTimers(),t){try{t.destroy()}catch(e){console.warn(e)}t=null}if(!e?.length)return;const a=e[0];a.pause(),a.removeAttribute("src"),"function"==typeof a.load&&a.load()}function ensurePosterVideo_TC(t){if(!t?.length)return $();let a=t.find("#liveVideo");a.length?(stopStreamPlayback_TC(a),a.attr({poster:DV2StreamKickoff.resolvePosterUrl(n,e),muted:!0,playsinline:!0}),a.prop({autoplay:!1,controls:!1}),applyThapcamVideoAttrs_TC(a)):(a=$("<video>",{id:"liveVideo",class:"dv2-video-player",controls:!1,autoplay:!1,muted:!0,playsinline:!0,poster:DV2StreamKickoff.resolvePosterUrl(n,e)}),t.find(".dv2-video-container").append(a),applyThapcamVideoAttrs_TC(a));const i=getStreamChrome_TC();return i&&(i.applyVideoControls?.(a),i.ensureControlsBar?.(t)),a}function clearMatchOverlays_TC(e){(e?.length?e:getStreamVideoWrapper_TC()).find(".dv2-loading.dv2-match-overlay, .dv2-not-loaded.dv2-match-overlay").remove()}function showMatchPosterOverlay_TC(e,t){if(!e?.length)return;
1if(hideStreamLoading_TC(e),e.find(".dv2-loading").not(".dv2-match-overlay").remove(),clearMatchOverlays_TC(e),$(".dv2-layout-tc.dv2-detail-stream-ctn #noStreamMessage").hide(),ensurePosterVideo_TC(e),t){const a=function createMatchOverlay_TC(e){const t=e?.matchInfo?.kickoff,a=e?.league||{},n=e?.teams?.home?.name||"Home",i=e?.teams?.away?.name||"Away",o=e?.matchInfo?.status;return $(`\n <div class="dv2-loading">\n <span class="dv2-loading-status">${statusMatchRender_TC(o)}</span>\n Tráºn Äấu: <strong>${n} - ${i}</strong>\n <div class="dv2-load-league">\n <span>Giải Äấu: <strong><img src="${a.logo||""}" alt="${a.name||"-"}" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"> ${a.name||"-"}</strong></span>\n </div>\n <div class="dv2-load-time">\n <span>${DV2StreamKickoff.renderTimeDisplay(t)}</span>\n </div>\n </div>\n `)}(t);a.addClass("dv2-match-overlay"),e.append(a)}const a=getStreamChrome_TC();a&&a.bindEvents?.(e),t?.matchInfo?.kickoff&&DV2StreamKickoff.startCountdown(t.matchInfo.kickoff)}function showMatchInfoCard_TC(e,t,a="countdown"){if(!e?.length)return;if(hideStreamLoading_TC(e),e.find(".dv2-loading").not(".dv2-match-overlay").remove(),clearMatchOverlays_TC(e),$(".dv2-layout-tc.dv2-detail-stream-ctn #noStreamMessage").hide(),ensurePosterVideo_TC(e),t){const n=function createMatchInfoCard_TC(e,t="countdown"){const a=e?.matchInfo?.kickoff,n=e?.league||{},i=e?.teams?.home?.name||"Home",o=e?.teams?.away?.name||"Away",s=e?.score?.fulltime?.home??0,r=e?.score?.fulltime?.away??0,l=e?.matchInfo?.status;let d="";return d="result"===t?`<span>Kết quả: <strong><span data-dv2-score-home>${s}</span> - <span data-dv2-score-away>${r}</span></strong></span>`:`<span>${DV2StreamKickoff.renderTimeDisplay(a)}</span>`,$(`\n <div class="dv2-loading">
1\n <span class="dv2-loading-status">${statusMatchRender_TC("result"===t?"finished":l)}</span>\n Tráºn Äấu: <strong>${i} - ${o}</strong>\n <div class="dv2-load-league">\n <span>Giải Äấu: <strong><img src="${n.logo||""}" alt="${n.name||"-"}" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"> ${n.name||"-"}</strong></span>\n </div>\n <div class="dv2-load-time">\n ${d}\n </div>\n </div>\n `)}(t,a);n.addClass("dv2-match-overlay"),e.append(n)}"countdown"===a&&t?.matchInfo?.kickoff&&DV2StreamKickoff.startCountdown(t.matchInfo.kickoff);const n=getStreamChrome_TC();n&&n.bindEvents?.(e)}function bindStreamLoadingUntilPlaying_TC(e,t,a){if(!e?.length||!t)return void a?.();let n=!1;const finish=()=>{n||(n=!0,t.removeEventListener("playing",onPlaying),t.removeEventListener("canplay",onCanPlay),clearTimeout(i),hideStreamLoading_TC(e),a?.())},onPlaying=()=>finish(),onCanPlay=()=>{t.paused||finish()};t.addEventListener("playing",onPlaying),t.addEventListener("canplay",onCanPlay);const i=setTimeout(finish,12e3)}function shouldShowPreMatchOverlay_TC(e){const t=new Date(e?.matchInfo?.kickoff);return!Number.isNaN(t.getTime())&&t.getTime()-Date.now()>9e5}function renderCommentatorLinks_TC(t,i={}){const{autoPlay:o=!0}=i;let s=[];const r=DV2StreamLinks.prepareSpanLinks({rawLinks:t?.livestream?.links,$container:$(".dv2-layout-tc.dv2-detail-stream-ctn .dv2-stream-links"),onSelect(i,o){n=i;const r=getStreamVideoWrapper_TC(),l=r.find("#liveVideo");if(DV2StreamKickoff.applyPosterForLink(l,i,e),updateCommentatorInfo_TC(t,o,s),initStreamOddsPanel_TC(a),shouldShowPreMatchOverlay_TC(a)||"finished"===a?.matchInfo?.status?.toLowerCase()||!i?.url)return stopStreamPlayback_TC(l),clearMatchOverlays_TC(r),$(".dv2-layout-tc.dv2-detail-stream-ctn #noStreamMessage").hide(),void("finished"===a?.matchInfo?.status?.toLowerCase()?showMatchInfoCard_TC(r,a,"result"):shouldShowPreMatchOverlay_TC(a)?showMatchInfoCard_TC(r,a,"countdown"):ensurePosterVideo_TC(r));clearMatchOverlays_TC(r),$(".dv2-layout-tc.dv2-detail-stream-ctn #noStreamMessage").hide(),initVideoPlayer_TC(i.url)}});if(s=r.links||[],!s.length)return null;if(n=r.activeLink,updateCommentatorInfo_TC(t,r.activeIndex,s),DV2StreamKickoff.applyPosterForLink(getStreamVideoWrapper_TC().find("#liveVideo"),n,e),o&&r.activeLink?.url){const e=r.activeLink.url,startStream=()=>initVideoPlayer_TC(e),t=getStreamVideoWrapper_TC();window.DV2StreamTvc?.playBeforeStream?window.DV2StreamTvc.playBeforeStream(t,startStream):startStream()}return r}function updatePageTitle_TC(e){const t=e.teams?.home?.name||"Home",a=e.teams?.away?.name||"Away",n=new Date(e.matchInfo.kickoff),i=n.toLocaleDateString("vi-VN",{day:"2-digit",month:"2-digit",year:"numeric"}),o=n.toLocaleTimeString("vi-VN",{hour:"2-digit",minute:"2-digit"});$(".dv2-layout-tc.dv2-detail-stream-ctn #pageTitle").text(`LINK TRá»°C TIẾP ${t.toUpperCase()} VS ${a.toUpperCase()} LÃC ${o} ${i} MIá»N PHÃ`)}
1function renderScoreOverlay_TC(e){const t=e.teams?.home||{},a=e.teams?.away||{},n=e.score?.fulltime?.home??0,i=e.score?.fulltime?.away??0;$(".dv2-layout-tc.dv2-detail-stream-ctn #homeTeam").html(`\n <div class="dv2-overlay-flag">\n <img src="${t.logo}" alt="${t.name}" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'">\n </div>\n <div class="dv2-overlay-team-name">${t.name||"Home"}</div>\n `),$(".dv2-layout-tc.dv2-detail-stream-ctn #scoreDisplay").html(`\n <div class="dv2-score-number dv2-home-score-number" data-dv2-score-home>${n}</div>\n <div class="dv2-score-separator">-</div>\n <div class="dv2-score-number dv2-away-score-number" data-dv2-score-away>${i}</div>\n `),$(".dv2-layout-tc.dv2-detail-stream-ctn #awayTeam").html(`\n <div class="dv2-overlay-flag">\n <img src="${a.logo}" alt="${a.name}" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'">\n </div>\n <div class="dv2-overlay-team-name">${a.name||"Away"}</div>\n `)}function updateCommentatorInfo_TC(e,t=0,a=null){const n=(a||DV2StreamLinks.sortForDetail(e?.livestream?.links))[t];n&&$(".dv2-layout-tc.dv2-detail-stream-ctn #commentatorInfo").text(n.commentator.toUpperCase())}function initVideoPlayer_TC(e){const n=getStreamVideoWrapper_TC(),i=n.find("#liveVideo"),l=i[0];o+=1;const d=o,isStalePlayback=()=>d!==o;if(clearMatchOverlays_TC(n),clearTcPlaybackTimers(),!e||!l)return hideStreamLoading_TC(n),void(a?showMatchPosterOverlay_TC(n,a):showError_TC("Không tìm thấy video livestream"));let c=!1;const showFallback=()=>{if(!isStalePlayback()&&!c){if(c=!0,clearTcPlaybackTimers(),t){try{t.destroy()}catch(e){console.warn(e)}t=null}l&&(l.pause(),l.removeAttribute("src"),"function"==typeof l.load&&l.load()),hideStreamLoading_TC(n),clearStreamChrome_TC(),a?showMatchPosterOverlay_TC(n,a):showError_TC("Không tải ÄÆ°á»£c video livestream")}};if(t){try{t.destroy()}catch(e){console.warn(e)}t=null}$(".dv2-layout-tc.dv2-detail-stream-ctn #noStreamMessage").hide(),showStreamLoading_TC(n,"Äang tải luá»ng phát..."),initStreamPlayerUi_TC(l),Hls.isSupported()?(s=setTimeout(()=>{isStalePlayback()||(console.warn("[VSC LIVE] Manifest load timeout"),showFallback())},15e3),t=new Hls({maxBufferLength:10,liveSyncDuration:3,enableWorker:!0,xhrSetup:function(e){e.withCredentials=!1,e.referrerPolicy="no-referrer-when-downgrade"}}),t.loadSource(e),t.attachMedia(l),t.on(Hls.Events.MANIFEST_PARSED,function(){isStalePlayback()||(clearTcPlaybackTimers(),bindStreamLoadingUntilPlaying_TC(n,l,()=>{isStalePlayback()||onHlsStreamReady_TC()}),l.muted=!0,getStreamChrome_TC()?.syncControlsState?.(n,i),l.play().catch(()=>console.warn("Autoplay blocked")))}),t.on(Hls.Events.ERROR,function(e,t){isStalePlayback()||t.fatal&&(clearTcPlaybackTimers(),showFallback())}),l.addEventListener("error",function(){isStalePlayback()||(clearTcPlaybackTimers(),showFallback())},{once:!0})):l.canPlayType("application/vnd.apple.mpegurl")?(r=setTimeout(()=>{isStalePlayback()||(console.warn("[VSC LIVE] Native HLS load timeout"),showFallback())},15e3),l.src=e,l.addEventListener("loadedmetadata",function(){isStalePlayback()||(clearTcPlaybackTimers(),bindStreamLoadingUntilPlaying_TC(n,l,()=>{isStalePlayback()||onHlsStreamReady_TC()}),l.muted=!0,getStreamChrome_TC()?.syncControlsState?.(n,i),l.play().catch(()=>console.warn("Autoplay blocked on Safari")))}),l.addEventListener("error",function(){isStalePlayback()||(clearTcPlaybackTimers(),showFallback())},{once:!0})):showFallback()}function showError_TC(e="Không có luá»ng livestream"){const t=getStreamVideoWrapper_TC();hideStreamLoading_TC(t),clearStreamChrome_TC(),t.find(".dv2-loading").not(".dv2-match-overlay").remove(),clearMatchOverlays_TC(t),ensurePosterVideo_TC(t);const a=String(e||"Không có luá»ng livestream").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),n=$(`\n <div class="dv2-not-loaded dv2-match-overlay">\n <div class="dv2-no-stream" id="noStreamMessage">\n <div class="dv2-no-stream-icon">ð«</div>\n <div class="dv2-no-stream-title">${a}</div>\n <div class="dv2-no-stream-subtitle">\n Tráºn Äấu nà y hiá»n chưa có luá»ng phát trá»±c tiếp hoặc bá» lá
1»i.<br>\n Vui lòng quay lại sau hoặc xem các tráºn Äấu khác.\n </div>\n </div>\n </div>\n `);t.append(n);const i=getStreamChrome_TC();i&&i.bindEvents?.(t)}function statusMatchRender_TC(e){return{"not started":"Sắp diá»
n ra","to be determined":"Chưa xác Äá»nh",delay:"Trì hoãn",interrupt:"Tạm dừng","cut in half":"Bá» cắt hiá»p",postponed:"Hoãn tráºn",suspended:"Tạm hoãn",abandoned:"Bá» dá»",cancel:"Há»§y tráºn","abnormal(suggest hiding)":"Trạng thái bất thưá»ng","first half":"Äang thi Äấu",firsthalf:"Äang thi Äấu","first-half":"Äang thi Äấu",fh:"Äang thi Äấu","half-time":"Nghá» giữa hiá»p","half time":"Nghá» giữa hiá»p",halftime:"Nghá» giữa hiá»p",ht:"Nghá» giữa hiá»p","second half":"Äang thi Äấu",secondhalf:"Äang thi Äấu","second-half":"Äang thi Äấu",sh:"Äang thi Äấu","extra time":"Hiá»p phụ",extratime:"Hiá»p phụ",et:"Hiá»p phụ",overtime:"Hiá»p phụ","overtime(deprecated)":"Hiá»p phụ",ot:"Hiá»p phụ",penalty:"Luân lưu",penalties:"Luân lưu","penalty shoot-out":"Luân lưu","penalty shootout":"Luân lưu",finished:"Äã kết thúc",ft:"Äã kết thúc",end:"Äã kết thúc",walkover:"Thắng xá» thua"}[e?String(e).toLowerCase():""]||"Không xác Äá»nh"}window.addEventListener("beforeunload",function(){t&&t.destroy()})}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery){$=jQuery.noConflict();const e={hotLeaguesRank:new Map},t=["first half","firsthalf","first-half","fh","half-time","half time","halftime","ht","second half","secondhalf","second-half","sh","extra time","extratime","extra time","et","overtime","overtime(deprecated)","ot","penalty","penalties","penalty shoot-out","penalty shootout"];function escapeHtml_TC(e){return String(e??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function getDetailUrl_TC(e,t){return window.DV2StreamLinks.getDetailUrl(e,t,{trailingSlash:!0})}function renderTcBlvAvatar(e,t){const a=e?.avatar;return a?`\n <div class="dv2-commentator-avatar">\n <img src="${escapeHtml_TC(a)}" alt="${escapeHtml_TC(t)}" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'">\n </div>\n `:`<div class="dv2-commentator-avatar">${escapeHtml_TC(t?t.charAt(0):"?")}</div>`}$(document).ready(function(){$(".dv2-layout-tc.dv2-home-matches").length>0&&function loadHomeData_TC(){const n=new Date,i=new Date(n);i.setDate(i.getDate()+1);const o=new Date(n);o.setDate(n.getDate()-1);const s={fromDate:o.toISOString().split("T")[0],toDate:i.toISOString().split("T")[0]};DV2HotLeagues.load({ajax:$.ajax,setHotLeaguesRank:t=>{e.hotLeaguesRank=t}}),$.ajax({url:"https://vsc-apidev.helizones.com/api/data/lives/range-date",method:"POST",contentType:"application/json",data:JSON.stringify(s),success:function(n){if(n&&n.matches_by_date){const i=[];Object.keys(n.matches_by_date).forEach(e=>{i.push(...n.matches_by_date[e])}),function renderHomePage_TC(n){const i=new Date,o=[],s=[];n.forEach(e=>{const a=new Date(e.kickoff);t.includes(e.status.toLowerCase())?o.push(e):i<a&&s.push(e)});const r=[...o,...s],l=a(r),d=$(".dv2-layout-tc.dv2-home-matches #matchGrid");d.empty(),0!==l.length?(l.forEach(a=>{d.append(function renderMatchCard_TC(a){const n=new Date(a.kickoff||"").toLocaleDateString("en-GB",{day:"2-digit",month:"2-digit"}),i=t.includes(a.status.toLowerCase()),o=a.teams?.home||{},s=a.teams?.away||{},r=a.league?.name||"Giải Äấu",l=a.league?.logo||"",d=e.hotLeaguesRank.has(a.league.id),c=a.score?.fulltime?.home??0,m=a.score?.fulltime?.away??0,v=a.status||"",u=i?"LIVE":function formatMatchTime_TC(e){return e?new Date(e).toLocaleTimeString("vi-VN",{hour:"2-digit",minute:"2-digit"}):"--:--"}(a.kickoff);let h="";return i&&("Half Time"===v?h='<div class="dv2-status-badge ht">HT</div>':"Second Half"===v&&(h='<div class="dv2-status-badge">LIVE</div>')),`\n <div class="dv2-match-card ${d?"hot-game":""}" \n data-match-id="${a.match_id}"\n onclick="goToMatchDetail('${a.match_id}')">\n \n \x3c!-- Header --\x3e\n <div class="dv2-card-header">\n <div class="dv2-league-info">\n ${l?`<img src="${l}" class="dv2-league-logo" alt="${r}" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'">`:'<span class="dv2-league-logo">â½</span>'}
1\n <span class="dv2-league-name">${r}</span>\n </div>\n <div style="display:flex;align-items: center;">\n \n <div class="dv2-match-time ${i?"live":"upcoming"}">${u}</div>\n ${i?"":`<div class="dv2-match-time upcoming">${n}</div>`}\n </div>\n\n </div>\n\n \x3c!-- Body --\x3e\n <div class="dv2-card-body">\n \x3c!-- Home Team --\x3e\n <div class="dv2-team-row">\n <div class="dv2-team-logo">\n <img src="${o.logo||"https://via.placeholder.com/36"}" \n alt="${o.name}" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'">\n </div>\n <div class="dv2-team-name">${o.name||"Home Team"}</div>\n </div>\n\n ${i?`\n \x3c!-- Score Display --\x3e\n <div class="dv2-score-display">\n <div class="dv2-score-number">${c}</div>\n <div class="dv2-score-separator">:</div>\n <div class="dv2-score-number">${m}</div>\n </div>\n `:'\n \x3c!-- VS Divider --\x3e\n <div class="dv2-vs-divider">VS</div>\n '}\n\n \x3c!-- Away Team --\x3e\n <div class="dv2-team-row">\n <div class="dv2-team-logo">\n <img src="${s.logo||"https://via.placeholder.com/36"}" \n alt="${s.name}" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'">\n </div>\n <div class="dv2-team-name">${s.name||"Away Team"}</div>\n </div>\n </div>\n\n \x3c!-- Footer --\x3e\n <div class="dv2-card-footer">\n ${function buildCommentatorDropdown_TC(e){const t=window.DV2BlvDropdown.getSortedLinks(e);return window.DV2BlvDropdown.build({match:e,links:t,getDetailUrl:getDetailUrl_TC,escapeHtml:escapeHtml_TC,menuPlacement:"up",emptyHtml:"<div></div>",toggleClass:"dv2-commentator-info",renderToggle:({link:e,label:t})=>`\n ${renderTcBlvAvatar(e,t)}\n <span class="dv2-commentator-name">${escapeHtml_TC(t)}</span>\n `,renderItemContent:({link:e,label:t})=>`\n ${renderTcBlvAvatar(e,t)}\n <span class="dv2-commentator-name">${escapeHtml_TC(t)}</span>\n `})}(a)}\n <a class="dv2-action-btn" href="${window.DV2_LINK_BET}" target="_blank" rel="nofollow"\n onclick="event.stopPropagation();">\n Äặt cược\n </a>\n <button class="dv2-action-btn" onclick="event.stopPropagation(); goToMatchDetail('${a.match_id}')">\n Xem Ngay\n </button>\n </div>\n </div>\n `}(a))}),function bindTcBlvDropdownEvents(){window.DV2BlvDropdown.bind($(".dv2-layout-tc.dv2-home-matches #matchGrid"),{namespace:"tcBlvDropdown",stopPropagationOnWrap:!0})}()):d.html('\n <div class="dv2-empty-state">\n <div style="font-size: 56px; margin-bottom: 16px; opacity: 0.3;">â½</div>\n <div style="font-size: 15px;">Không có tráºn Äấu nà o</div>\n </div>\n ')}(i.filter(e=>"Finished"!==e.status))}else $(".dv2-layout-tc.dv2-home-matches #matchGrid").html('\n <div class="dv2-empty-state">\n <div style="font-size: 56px; margin-bottom: 16px; opacity: 0.3;">â½</div>\n <div>Không có dữ liá»u</div>\n </div>\n ')},error:function(e){console.error("Error:",e),$(".dv2-layout-tc.dv2-home-matches #matchGrid").html('\n <div class="dv2-empty-state">\n <div style="font-size: 56px; margin-bottom: 16px; opacity: 0.3;">â</div>\n <div>Lá»i tải dữ liá»u</div>\n </div>\n ')}})}()});const a=DV2MatchSort.createSortedMatchesFunction({mode:"wc-first",liveStatuses:t,hotLeaguesRank:()=>e.hotLeaguesRank});window.goToMatchDetail=function goToMatchDetail(e){window.location.href=`/stream
1s?match=${e}`}}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery,Hls){function createNotFoundMatchOverlay_VB(e){const t=e?.matchInfo?.kickoff,a=e?.league?.name,n=e?.teams?.home?.name||"Home",i=e?.teams?.away?.name||"Away",o=function renderStatusMatch_VB(e){const t=new Date;new Date(t).setHours(0,0,0,0),new Date(t).setHours(23,59,59,999);const a=e instanceof Date?e:new Date(e);let n="";if(a>t)n=Math.round((a-t)/6e4)<=30?"sắp bắt Äầu":"chưa diá»
n ra";else{const e=new Date(a);e.setHours(e.getHours()+2),n=t<=e?"Äang diá»
n ra":"Äã kết thúc"}return n}(t);return $(`\n <div class="dv2-loading">\n Tráºn Äấu ${o}: <strong>${n} - ${i}</strong>\n <div class="dv2-load-league">\n <span>Giải Äấu: <strong>${a}</strong></span>\n </div>\n <div class="dv2-load-time">\n <span>Thá»i gian: ${formatTime_VB(t)} - ${getDateLabel_VB(t)}</span>\n </div>\n </div>\n `)}function getDateLabel_VB(e){const t=new Date,a=new Date(t);a.setDate(a.getDate()+1);const n=new Date(e);return t.setHours(0,0,0,0),a.setHours(0,0,0,0),n.setHours(0,0,0,0),n.getTime()===t.getTime()?"Hôm nay":n.getTime()===a.getTime()?"Ngà y mai":`${String(n.getDate()).padStart(2,"0")}/${String(n.getMonth()+1).padStart(2,"0")}`}function formatTime_VB(e){if(!e)return"";const t=new Date(e);return`${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}($=jQuery.noConflict())(document).ready(function(){$(".dv2-layout-vb.dv2-detail-livestream").length>0&&function renderDetailMatch_VB(){const e=$(".dv2-layout-vb.dv2-detail-livestream .dv2-video-wrapper"),t=$(".dv2-layout-vb.dv2-detail-livestream .dv2-match-info"),a="https://img.freepik.com/premium-photo/close-up-soccer-player-who-kicks-ball_207634-4089.jpg";let n=new URLSearchParams(window.location.search).get("match");if(n||(n="undefined"!=typeof DV2_MATCH_ID&&DV2_MATCH_ID?DV2_MATCH_ID:"2y8m4zh54p4zql0"),!n)return void e.html('<div class="dv2-notfound-video">â Không có ID livestream hợp lá»</div>');console.log("[VSC LIVE] Load livestream detail cho ID:",n);const i=$('\n <div class="dv2-loading">\n Äang tải video...\n </div>\n ');e.append(i);const o=$("<video>",{id:"liveVideo",controls:!0,autoplay:!0,muted:!0,playsinline:!0,poster:a});e.append(o),$.ajax({url:`https://vsc-apidev.helizones.com/api/data/lives/${n}`,method:"GET",success:function(a){console.log("[VSC LIVE] API response:",a);const n=a?.data;if(r=n||r,n){i.remove();const e=n?.teams?.home?.name,a=n?.teams?.away?.name,o=n?.teams?.home?.logo,s=n?.teams?.away?.logo,r=n?.league?.name,l=n?.league?.logo,d=n?.matchInfo?.kickoff,c=n?.score?.fulltime?.home,m=n?.score?.fulltime?.away,v=`\n <div class="dv2-league">\n <img class="dv2-league-logo" id="leagueLogo" src="${l}" alt="League Logo">\n <span class="dv2-league-name" id="leagueName">${r}</span>\n </div>\n <div class="dv2-teams">\n <div class="dv2-team">\n <img class="dv2-home-logo" id="homeLogo" src="${o}" alt="Home Team">\n <span class="dv2-home-name" id="homeName">${e}</span>\n </div>\n <div class="dv2-score" id="score">${c} - ${m}</div>\n <div class="dv2-team">\n <img class="dv2-away-logo" id="awayLogo" src="${s}" alt="Away Team">\n <span class="dv2-away-name" id="awayName">${a}</span>\n </div>\n </div>\n <div class="dv2-match-time" id="matchTime">Thá»i gian diá»
n ra tráºn Äấu: ${formatTime_VB(d)} - ${getDateLabel_VB(d)}</div>\n `;t.append(v)}if(!n||!n.livestream)return e.html('<div class="dv2-not-loaded">ð« Không có luá»ng livestream</div>'),void e.append(o);const s=new Date(n?.matchInfo?.kickoff);if(!Number.isNaN(s.getTime())&&s.getTime()-Date.now()>9e5){const t=createNotFoundMatchOverlay_VB(n);return void e.append(t)}const l=n?.livestream?.links[0]?.url||"";if(!l)return void e.html('<div class="dv2-not-loaded">Không tìm thấy video livestream</div>');const d=$(".dv2-stream-links"),c=Array.isArray(n?.livestream?.links)?n.livestream.links.map((e,t)=>`<span data-index="${t}" data-stream-url=${e.url}>Link ${t+1}</span>`):null;
1d.html(c),d.on("click","span",function(e){e.preventDefault(),e.stopPropagation(),initHLSPlayer($(this).data("stream-url"))}),window.DV2StreamTvc?.playBeforeStream?window.DV2StreamTvc.playBeforeStream(e,()=>initHLSPlayer(l)):initHLSPlayer(l)},error:function(t){console.error("[VSC LIVE] Lá»i khi gá»i API:",t),e.html('<div class="dv2-not-loaded">Không thá» tải dữ liá»u livestream</div>')}});let s=null,r=null;function initHLSPlayer(t){if(!t)return;let n=!1;const showFallbackOverlay=()=>{if(n)return;if(n=!0,i.remove(),s){try{s.destroy()}catch(e){console.warn(e)}s=null}r&&e.append(createNotFoundMatchOverlay_VB(r));const t=$("<video>",{id:"liveVideo",controls:!0,autoplay:!1,muted:!0,playsinline:!0,poster:a});e.append(t)};if(s){try{s.destroy()}catch(e){console.warn(e)}s=null}if(Hls.isSupported()){const e=setTimeout(()=>showFallbackOverlay(),15e3);s=new Hls({maxBufferLength:10,liveSyncDuration:3,enableWorker:!0,xhrSetup:function(e,t){e.withCredentials=!1,e.referrerPolicy="no-referrer-when-downgrade"}}),s.loadSource(t),s.attachMedia(o[0]),s.on(Hls.Events.MANIFEST_PARSED,function(){clearTimeout(e),i.remove(),o[0].muted=!0,o[0].play().catch(()=>console.warn("Autoplay bá» chặn"))}),s.on(Hls.Events.ERROR,function(t,a){a?.fatal&&(clearTimeout(e),showFallbackOverlay())}),o.off("error.vb").on("error.vb",showFallbackOverlay)}else if(o[0].canPlayType("application/vnd.apple.mpegurl")){const e=setTimeout(()=>showFallbackOverlay(),15e3);o.attr("src",t),o.off("loadedmetadata.vb").on("loadedmetadata.vb",function(){clearTimeout(e),i.remove(),o[0].play().catch(()=>console.warn("Autoplay bá» chặn"))}),o.off("error.vb").on("error.vb",function(){clearTimeout(e),showFallbackOverlay()})}else showFallbackOverlay()}}()})}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery){($=jQuery.noConflict())(document).ready(function(){$(".dv2-layout-vb.dv2-result-matchs").length>0&&(function updateDateTime_VB(){const e=new Date;$(".dv2-layout-vb.dv2-result-matchs #currentDateTime").text(e.toLocaleDateString("vi-VN",{weekday:"long",year:"numeric",month:"long",day:"numeric"}))}(),function loadResultsData_VB(){const e=new Date,t=new Date(e);t.setDate(t.getDate()-1);const a={fromDate:t.toISOString().split("T")[0],toDate:e.toISOString().split("T")[0]};$.ajax({url:"https://vsc-apidev.helizones.com/api/data/lives/range-date",method:"POST",contentType:"application/json",data:JSON.stringify(a),success:function(e){if(e&&e.matches_by_date){const t=[];Object.keys(e.matches_by_date).forEach(a=>{t.push(...e.matches_by_date[a])}),function renderResultsPage_VB(e){const t=new Date,a=e.filter(e=>{const a=new Date(e.kickoff),n=new Date(a.getTime()+72e5);return t>n});a.sort((e,t)=>new Date(t.kickoff)-new Date(e.kickoff));const n=$(".dv2-layout-vb.dv2-result-matchs .dv2-results-container");if(n.empty(),0===a.length)return void n.html('\n <div class="dv2-empty-state">\n <div style="font-size: 56px; margin-bottom: 16px; opacity: 0.3;">â½</div>\n <div style="font-size: 15px;">Chưa có tráºn Äấu nà o kết thúc</div>\n </div>\n ');const i=function groupMatchesByLeague_VB(e){const t={};return e.forEach(e=>{const a=e?.league?.name||"Giải Äấu khác";t[a]||(t[a]=[]),t[a].push(e)}),t}(a);
1Object.keys(i).forEach(e=>{const t=i[e],a=t[0]?.league?.logo||"",o=`\n <div class="dv2-league-section">\n <div class="dv2-league-header">\n ${a?`<img src="${a}" class="dv2-league-logo" alt="${e}">`:""}\n <h3 class="dv2-league-title">${e}</h3>\n </div>\n\n <div class="dv2-match-headers">\n <div></div>\n <div>Chá»§ nhà </div>\n <div>Tá»· sá»</div>\n <div>Khách</div>\n <div></div>\n <div>HT | FT</div>\n </div>\n\n ${t.map(e=>function renderMatchCard_VB(e){const t=function formatMatchTime_VB(e){const t=new Date(e);return`${String(t.getDate()).padStart(2,"0")}/${String(t.getMonth()+1).padStart(2,"0")} - ${t.toLocaleTimeString("vi-VN",{hour:"2-digit",minute:"2-digit"})}`}(e.kickoff),a=e?.teams?.home||{},n=e?.teams?.away||{},i=e?.score?.fulltime?.home??0,o=e?.score?.fulltime?.away??0,s=e?.score?.halftime?.home??0,r=e?.score?.halftime?.away??0,l=function generateStats_VB(e,t,a){return{htFt:`${a} - ${e}`,ht1:Math.floor(3*Math.random()),ft1:Math.floor(5*Math.random()),yellowTotal:Math.floor(7*Math.random()),yellow1:Math.floor(4*Math.random()),yellow2:Math.floor(4*Math.random()),redTotal:Math.floor(2*Math.random()),red1:Math.floor(2*Math.random()),red2:Math.floor(2*Math.random()),corner1:Math.floor(8*Math.random()),corner2:Math.floor(8*Math.random()),shot1:Math.floor(15*Math.random()),shot2:Math.floor(15*Math.random())}}(i,0,s);return`\n <div class="dv2-match-card" \n data-match-id="${e.match_id||e.id}"\n onclick="goToMatchDetail('${e.match_id||e.id}')">\n \n \x3c!-- Time --\x3e\n <div class="dv2-time-col">\n <div class="dv2-match-time">${t}</div>\n </div>\n\n \x3c!-- Home team --\x3e\n <div class="dv2-team-home">\n <div class="dv2-team-name" style="text-align: right;">${a.name||"Home"}</div>\n <div class="dv2-team-logo">\n <img src="${a.logo}" \n alt="${a.name}">\n </div>\n </div>\n\n \x3c!-- Score --\x3e\n <div class="dv2-score-col">\n <div class="dv2-score-box">\n <div class="dv2-score-number">${i}</div>\n <div class="dv2-score-separator">:</div>\n <div class="dv2-score-number">${o}</div>\n </div>\n <div class="dv2-halftime">HT ${s}:${r}</div>\n </div>\n\n \x3c!-- Away team --\x3e\n <div class="dv2-team-away">\n <div class="dv2-team-logo">\n <img src="${n.logo}" \n alt="${n.name}">\n </div>\n <div class="dv2-team-name">${n.name||"Away"}</div>\n </div>\n\n \x3c!-- Highlight button --\x3e\n <div class="dv2-highlight-col">\n <button class="dv2-highlight-btn" \n onclick="event.stopPropagation(); viewHighlight('${e.match_id}')">\n XEM HIGHLIGHT\n </button>\n </div>\n\n \x3c!-- Stats --\x3e\n <div class="dv2-stats-col">\n \x3c!-- HT --\x3e\n <div class="dv2-stat-group">\n <div class="dv2-stat-main">${s} : ${r}</div>\n <div class="dv2-stat-label">HT</div>\n </div>\n\n \x3c!-- HT | FT --\x3e\n <div class="dv2-stat-group">\n <div class="dv2-stat-main" style="color: #10b981;">${l.htFt}</div>\n <div class="dv2-stat-detail">
1\n <span class="dv2-stat-value">${l.ht1} : ${l.ft1}</span>\n </div>\n </div>\n\n \x3c!-- Yellow cards --\x3e\n <div class="dv2-stat-group">\n <div class="dv2-stat-main" style="color: #fbbf24;">${l.yellowTotal}</div>\n <div class="dv2-stat-detail">\n <span class="dv2-stat-value">${l.yellow1} - ${l.yellow2}</span>\n </div>\n </div>\n\n \x3c!-- Red cards --\x3e\n <div class="dv2-stat-group">\n <div class="dv2-stat-main" style="color: #ef4444;">${l.redTotal}</div>\n <div class="dv2-stat-detail">\n <span class="dv2-stat-value">${l.red1} - ${l.red2}</span>\n </div>\n </div>\n\n \x3c!-- More stats --\x3e\n <div class="dv2-stat-group">\n <div class="dv2-stat-detail">\n <span class="dv2-stat-value">${l.corner1} - ${l.corner2}</span>\n </div>\n <div class="dv2-stat-detail">\n <span class="dv2-stat-value">${l.shot1} - ${l.shot2}</span>\n </div>\n </div>\n </div>\n </div>\n `}(e)).join("")}\n </div>\n `;n.append(o)})}(t)}else $(".dv2-layout-vb.dv2-result-matchs .dv2-results-container").html('<div class="dv2-empty-state">Không có dữ liá»u</div>')},error:function(e){console.error("Error:",e),$(".dv2-layout-vb.dv2-result-matchs .dv2-results-container").html('<div class="dv2-empty-state">Lá»i tải dữ liá»u</div>')}})}())}),window.goToMatchDetail=function goToMatchDetail(e){window.location.href=`/streams/${e}`},window.viewHighlight=function viewHighlight(e){window.location.href=`/highlights/${e}`}}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery){function renderHomeMatches_VB(e,t="all"){const a=new Date,n=e.filter(e=>{const n=new Date(e.kickoff),i=new Date(n.getTime()+72e5);if("live"===t)return a>=n&&a<=i;if("today"===t){new Date(a).setHours(0,0,0,0);const e=new Date(a);return e.setHours(23,59,59,999),n>a&&n<=e}return i>=a}).sort((e,t)=>new Date(e.kickoff)-new Date(t.kickoff)),i=$(".dv2-layout-vb.dv2-calendar-matchs .dv2-home-container");if(i.empty(),!n.length)return void i.html('<div class="dv2-empty-state">Không có tráºn Äấu</div>');const o=function groupMatchesByLeague_VB(e){const t={};return e.forEach(e=>{const a=e.league?.name||"Giải Äấu khác";t[a]||(t[a]=[]),t[a].push(e)}),t}(n);Object.keys(o).forEach(e=>{const t=o[e][0]?.league?.logo||"",a=o[e].map(e=>function renderHomeMatchCard_VB(e){const t=new Date(e.kickoff),a=e.teams?.home||{},n=e.teams?.away||{},i=function formatMatchTime_VB(e){const t=new Date(e);return`${String(t.getDate()).padStart(2,"0")}/${String(t.getMonth()+1).padStart(2,"0")} - ${t.toLocaleTimeString("vi-VN",{hour:"2-digit",minute:"2-digit"})}`}(t),o=e?.livestream?.links;return`\n <div class="dv2-match-card" onclick="goToMatchDetail('${e.match_id}')">\n <div class="dv2-time-col">${i}</div>\n <div class="dv2-teams-col">\n <div class="dv2-team">\n <div class="dv2-team-name" style="text-align: right;">${a.name}</div>\n <div class="dv2-team-logo"><img src="${a.logo}" alt="${a.name}"></div>\n </div>\n <div class="dv2-vs">vs</div>\n <div class="dv2-team">\n <div class="dv2-team-logo"><img src="${n.logo}" alt="${n.name}"></div>\n <div class="dv2-team-name">${n.name}</div>\n </div>\n </div>\n ${o.length>0?`\n <div class="dv2-commentators">\n ${o.slice(0,4).map(e=>`\n <div class="dv2-commentator" \n data-commentator-id="${e.commentatorId||""}"\n onclick="event.stopPropagation(); goToBLVPage('${e.commentatorId||""}')">\n <div class="dv2-commentator-avatar">\n ${e.avatar?`<img src="${e.avatar}" alt="${e.commentator}">`:e.commentator.charAt(0)}\n </div>
1\n <span class="dv2-commentator-name">${e.commentator}</span>\n </div>\n `).join("")}\n ${o.length>4?`<div class="dv2-commentator-more">+${o.length-4}</div>`:""}\n </div>\n `:""}\n </div>\n `}(e)).join("");i.append(`\n <div class="dv2-league-section">\n <div class="dv2-league-header">\n ${t?`<img src="${t}" class="dv2-league-logo">`:""}\n <div class="dv2-league-title">${e}</div>\n </div>\n ${a}\n </div>\n `)})}($=jQuery.noConflict())(document).ready(()=>{$(".dv2-layout-vb.dv2-calendar-matchs").length>0&&(function updateDateTime_VB(){const e=new Date;$(".dv2-layout-vb.dv2-calendar-matchs #currentDateTime").text(e.toLocaleDateString("vi-VN",{weekday:"long",year:"numeric",month:"long",day:"numeric"}))}(),function loadHomeMatchesData_VB(){const e=new Date,t=new Date(e);t.setDate(e.getDate()+1);const a={fromDate:e.toISOString().split("T")[0],toDate:t.toISOString().split("T")[0]};$.ajax({url:"https://vsc-apidev.helizones.com/api/data/lives/range-date",method:"POST",contentType:"application/json",data:JSON.stringify(a),success:e=>{if(e&&e.matches_by_date){const t=[];Object.keys(e.matches_by_date).forEach(a=>t.push(...e.matches_by_date[a])),renderHomeMatches_VB(t),function setupFilterButtons_VB(e){$(".dv2-layout-vb.dv2-calendar-matchs .dv2-filter-btn").off("click").on("click",function(){$(".dv2-layout-vb.dv2-calendar-matchs .dv2-filter-btn").removeClass("active"),$(this).addClass("active"),renderHomeMatches_VB(e,$(this).data("filter"))})}(t)}else $(".dv2-layout-vb.dv2-calendar-matchs .dv2-home-container").html('<div class="dv2-empty-state">Không có dữ liá»u</div>')},error:()=>$(".dv2-layout-vb.dv2-calendar-matchs .dv2-home-container").html('<div class="dv2-empty-state">Lá»i tải dữ liá»u</div>')})}())}),window.goToMatchDetail=function goToMatchDetail(e){window.location.href=`/streams/${e}`}}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery){($=jQuery.noConflict())(document).ready(function(){$(".dv2-layout-vb.dv2-home-matchs").length>0&&function renderListMatchs_VB(){const e=$(".dv2-layout-vb.dv2-home-matchs"),t=e.find(".dv2-match-grid");0===e.find(".dv2-loading").length&&e.append('\n <div class="dv2-loading">\n <div class="dv2-spinner"></div>\n </div>\n ');const a=new Date,n=new Date;n.setDate(a.getDate()+7);const i={fromDate:a.toISOString().split("T")[0],toDate:n.toISOString().split("T")[0]};$.ajax({url:"https://vsc-apidev.helizones.com/api/data/lives/range-date",method:"POST",headers:{"Content-Type":"application/json"},data:JSON.stringify(i),dataType:"json",success:function(a){e.find(".dv2-loading").remove();const n=[];if(Object.values(a.matches_by_date||{}).forEach(e=>{Array.isArray(e)&&n.push(...e)}),!n.length)return void t.html('<div class="dv2-empty-state">Không có tráºn Äấu nà o trong 7 ngà y tá»i</div>');const i=n.map(e=>{const t=e.kickoff?new Date(e.kickoff):null,a=t?new Date(t.getTime()+72e5):null,n=new Date;let i="Sắp diá»
n ra";return t&&n>=t&&n<=a&&e.livestream.available?i="LIVE":t&&n>a&&(i="Kết thúc"),{id:e.match_id,slug:e.slug||"",homeLogo:e?.teams?.home?.logo||"",awayLogo:e?.teams?.away?.logo||"",homeName:e?.teams?.home?.name||"Äá»i nhà ",awayName:e?.teams?.away?.name||"Äá»i khách",kickoff:t,league:e?.league?.name||"Giải Äấu",leagueLogo:e?.league?.logo||"",livestream:e.livestream,links:e?.livestream?.links||[],scoreHalftime:e?.score?.halftime||{home:"-",away:"-"},scoreFulltime:e?.score?.fulltime||{home:"-",away:"-"},status:i}}),o=new Date,s=[],r=[];i.forEach(e=>{const t=new Date(e.kickoff),a=new Date(t.getTime()+72e5);o>=t&&o<=a&&e.livestream.available?s.push(e):o<t&&r.push(e)});const l=[...s,...r];!function updateFilterCounts_VB(e){const t=new Date,a=new Date(t);a.setHours(0,0,0,0);const n=new Date(t);n.setHours(23,59,59,999);const i=new Date(a);i.setDate(a.getDate()+7);const o=e.filter(e=>e.kickoff>=a&&e.kickoff<=i).length,s=e.filter(e=>"LIVE"===e.status).length,r=e.filter(e=>e.kickoff>=a&&e.kickoff<=n).length;$('.dv2-layout-vb.dv2-home-matchs .dv2-filter-btn[data-filter="all"]').text(`Tất cả (${o})`),$('.dv2-layout-vb.dv2-home-matchs .dv2-filter-btn[data-filter="live"]').text(`Äang live (${s})`),$('.dv2-layout-vb.dv2-home-matchs .dv2-filter-btn[data-filter="today"]').text(`Hôm nay (${r})`)}(l),function setupFilterButtons_VB(e){$(".dv2-layout-vb.dv2-home-matchs .dv2-filter-btn").off("
1click").on("click",function(){$(".dv2-layout-vb.dv2-home-matchs .dv2-filter-btn").removeClass("dv2-active"),$(this).addClass("dv2-active");const t=$(this).data("filter");renderHomeMatches_VB(e,t)})}(l),renderHomeMatches_VB(l,"live")},error:function(e){console.error("[VSC LIVE] API error:",e),t.html('<div class="dv2-empty-state">Lá»i khi tải dữ liá»u</div>')}})}()});let e=0,t=[];function renderHomeMatches_VB(a,n="live"){const i=new Date,o=new Date(i);o.setHours(0,0,0,0);const s=new Date(i);s.setHours(23,59,59,999);const r=new Date(o);r.setDate(o.getDate()+7);let l=a.filter(e=>"live"===n?"LIVE"===e.status:"today"===n?e.kickoff>=o&&e.kickoff<=s:"all"!==n||e.kickoff>=o&&e.kickoff<=r);l.sort((e,t)=>"LIVE"===e.status&&"LIVE"!==t.status?-1:"LIVE"!==e.status&&"LIVE"===t.status?1:new Date(e.kickoff)-new Date(t.kickoff)),t=l,e=0;const d=$(".dv2-layout-vb.dv2-home-matchs .dv2-match-grid");if(d.empty(),!l.length)return d.html('<div class="dv2-empty-state">\n <div style="font-size: 56px; opacity: 0.3;">â½</div>\n <div style="font-size: 15px;">Không có tráºn Äấu nà o</div>\n </div>'),void $(".dv2-loadmore").hide();renderNextMatchesBatch_VB(),$(".dv2-layout-vb.dv2-home-matchs .dv2-load-more-btn").off("click").on("click",renderNextMatchesBatch_VB)}function renderNextMatchesBatch_VB(){const a=$(".dv2-layout-vb.dv2-home-matchs .dv2-match-grid"),n=t.slice(e,e+10);n.forEach(e=>{const t=$(function renderMatchCard_VB(e){const t=e.kickoff||"",a=function getDateLabel_VB(e){if(!e)return"";const t=new Date(e);return t.setHours(0,0,0,0),`${String(t.getDate()).padStart(2,"0")}/${String(t.getMonth()+1).padStart(2,"0")}`}(t),n=t?function formatTime_VB(e){if(!e)return"";const t=new Date(e);return`${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}(t):"",i="LIVE"===e.status?"dv2-status-live":"Sắp diá»
n ra"===e.status?"dv2-status-scheduled":"dv2-status-finished";return`\n <div class="dv2-match-card" data-id="${e.id}">\n <div class="dv2-match-header">\n <div class="dv2-league-info">\n <span class="dv2-league-name">${e.league}</span>\n </div>\n <div style="display: flex; align-items: center; gap: 12px;">\n <span class="dv2-match-status ${i}">\n ${"LIVE"===e.status?"â LIVE":"Sắp diá»
n ra"===e.status?"Sắp diá»
n ra":"Kết thúc"}\n </span>\n <span class="dv2-match-time">${n} - ${a}</span>\n </div>\n </div>\n <div class="dv2-match-content">\n <div class="dv2-team">\n <div class="dv2-team-name">${e.homeName}</div>\n <div class="dv2-team-logo"><img src="${e.homeLogo}" alt="${e.homeName}"></div>\n </div>\n <div class="dv2-score-section">\n <div class="dv2-score">\n <div class="dv2-score-number">${e.scoreFulltime.home}</div>\n <div class="dv2-score-separator">:</div>\n <div class="dv2-score-number">${e.scoreFulltime.away}</div>\n </div>\n <div class="dv2-half-time">HT ${e.scoreHalftime.home} - ${e.scoreHalftime.away}</div>\n </div>\n <div class="dv2-team dv2-away">\n <div class="dv2-team-name">${e.awayName}</div>\n <div class="dv2-team-logo"><img src="${e.awayLogo}" alt="${e.awayName}"></div>\n </div>\n </div>\n <div class="dv2-blv-box">\n ${(e?.links||[]).map(t=>`\n <a class="dv2-bottom-group" href="#" data-id="${e.id}">\n <span class="dv2-bottom-logo">\n <img class="dv2-image-blv" alt="${t.commentator}"\n src="${t.avatar}">\n </span>\n <span class="dv2-bottom-name dv2-ellipsis">${t.commentator}</span>\n </a>\n `).join("")}\n </div>\n </div>\n `}(e));a.append(t),setTimeout(()=>t.addClass("fade-in"),50)}),e+=n.length,e>=t.length?$(".dv2-layout-vb.dv2-home-matchs .dv2-loadmore").fadeOut(200):$(".dv2-layout-vb.dv2-home-matchs .dv2-loadmore").show()}$(document).on("click",".dv2-layout-vb.dv2-home-matchs .dv2-match-card",function(e){e.preventDefault();const t=$(this).data("id")||"";
1window.location.href=`/streams/${t}`})}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$){window.DV2=window.DV2||{};const e={hotLeaguesRank:new Map},t=["Chá»§ Nháºt","Thứ 2","Thứ 3","Thứ 4","Thứ 5","Thứ 6","Thứ 7"],a=["interrupt","cut in half","first half","firsthalf","first-half","fh","half-time","half time","halftime","ht","second half","secondhalf","second-half","sh","extra time","extratime","extra time","et","overtime","overtime(deprecated)","ot","penalty","penalties","penalty shoot-out","penalty shootout"];DV2.formatDateDDMM=function(e){return e&&e instanceof Date?`${String(e.getDate()).padStart(2,"0")}/${String(e.getMonth()+1).padStart(2,"0")}`:""},DV2.getVietnameseDayLabel=function(e,a){if(!(e&&e instanceof Date))return"";if(0===a)return"Hôm nay";if(1===a)return"Ngà y mai";const n=e.getDay();return t[n]||""},DV2.getDateString=function(e){return e&&e instanceof Date?`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`:""},DV2.formatTimeHHMM=function(e){if(!e)return"";const t="string"==typeof e?new Date(e):e;return t instanceof Date&&!isNaN(t.getTime())?`${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`:""},DV2.getDateLabel=function(e){if(!e)return"";const t=new Date,a=new Date(t);a.setDate(a.getDate()+1);const n="string"==typeof e?new Date(e):e;return n instanceof Date&&!isNaN(n.getTime())?(t.setHours(0,0,0,0),a.setHours(0,0,0,0),n.setHours(0,0,0,0),n.getTime()===t.getTime()?"Hôm nay":n.getTime()===a.getTime()?"Ngà y mai":DV2.formatDateDDMM(n)):""},DV2.normalizeMatchStatus=function(e){return e&&"string"==typeof e?e.toLowerCase().trim():""},DV2.isLiveStatus=function(e){const t=DV2.normalizeMatchStatus(e);return-1!==a.indexOf(t)},DV2.isFinishedStatus=function(e){const t=DV2.normalizeMatchStatus(e);return"finished"===t||"ft"===t||"end"===t},DV2.sortedMatchesFunction=DV2MatchSort.createSortedMatchesFunction({mode:"live-first-wc",liveStatuses:a,hotLeaguesRank:()=>DV2.appState.hotLeaguesRank}),DV2.isNotStartedStatus=function(e){const t=DV2.normalizeMatchStatus(e);return"not started"===t||"scheduled"===t},DV2.fetchMatchesByDateRange=function(t,a,n,i){if(!$||"function"!=typeof $.ajax)return console.error("[COMMON] jQuery is not available"),void(i&&i({message:"jQuery is not available"}));const o={fromDate:t,toDate:a};$.ajax({url:"https://vsc-apidev.helizones.com/api/data/lives/range-date",method:"POST",contentType:"application/json",data:JSON.stringify(o),success:function(e){n&&n(e)},error:function(e,t,a){console.error("[COMMON] API Error:",a),i&&i({xhr:e,status:t,error:a})}}),DV2HotLeagues.load({url:"https://vsc-apidev.helizones.com/api/data/lives/competitions/hot",ajax:$.ajax,setHotLeaguesRank:t=>{e.hotLeaguesRank=t,DV2.appState=e}})}}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery,Hls){$=jQuery.noConflict();const e="https://img.freepik.com/premium-photo/close-up-soccer-player-who-kicks-ball_207634-4089.jpg";function resolvePosterUrl_VB2(t){return DV2StreamKickoff.resolvePosterUrl(t,e)}function applyPosterForLink_VB2(t,a){DV2StreamKickoff.applyPosterForLink(t,a,e)}function shouldShowPreMatchOverlay_VB2(e){const t=new Date(e?.matchInfo?.kickoff);return!Number.isNaN(t.getTime())&&t.getTime()-Date.now()>9e5}function applyStreamVideoLayout_VB2(e){e?.length&&e.css({width:"100%",height:"auto",maxWidth:"100%",left:"",top:"",position:""})}function renderDetailMatch_VB2(){const t=$(".dv2-layout-vb2.dv2-detail-livestream"),a=t.find(".dv2-video-wrapper"),s=t.find(".dv2-layout-vb2-header"),r=t.find(".dv2-layout-vb2-footer"),l=function getMatchId_VB2(){let e=new URLSearchParams(window.location.search).get("match");return e||(e="undefined"!=typeof DV2_MATCH_ID&&DV2_MATCH_ID?DV2_MATCH_ID:"2y8m4zh54p4zql0"),e}(),d=`https://vsc-apidev.helizones.com/api/data/lives/${l}`;if(!l)return void showErrorVideo(a,"â Tráºn Äấu nà y không tá»n tại!");console.log("[VSC LIVE] Match ID:",l);const c=a.find("#stream-player"),m=$("<video>",{id:"liveVideo",controls:!1,autoplay:!0,muted:!0,playsinline:!0,poster:e});c.empty().append(m),applyStreamVideoLayout_VB2(m),DV2_StreamChrome.initPlayerUi(a,m),applyStreamVideoLayout_VB2(m),showStreamLoa
1ding_VB2(a,"Äang tải thông tin tráºn Äấu..."),$.ajax({url:d,method:"GET",success:function(e){const t=e?.data;if(!t)return void showErrorVideo(a,"Tráºn Äấu nà y không tá»n tại!");if(function startDetailScorePoll_VB2(e){e&&(o||(o=DV2MatchScorePoll.create({container:".dv2-layout-vb2.dv2-detail-livestream"})),o.sync(e),o.start())}(t),s.show(),r.show(),function renderHeader_VB2(e,t){const a=t?.teams?.home||{},n=t?.teams?.away||{},i=t?.league||{},o=t?.matchInfo?.kickoff,s=t?.matchInfo?.status||"-",r=t?.score?.fulltime?.home??0,l=t?.score?.fulltime?.away??0,d=`<strong>${function formatTime_VB2(e){return DV2StreamKickoff.formatTime(e)}(o)}</strong> ngà y ${function getDateLabel_VB2(e){const t=new Date(e);return`${String(t.getDate()).padStart(2,"0")}/${String(t.getMonth()+1).padStart(2,"0")}/${t.getFullYear()}`}(o)}`,c=`\n <h1>${a.name||"-"} vs ${n.name||"-"} - ${d}</h1>\n <div class="dv2-layout-vb2-header-content">\n <p class="dv2-layout-vb2-header-content-league">\n <img src="${i.logo||""}" alt="${i.name||"-"}"\n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n > ${i.name||"-"}\n </p>\n <div class="dv2-layout-vb2-header-content-info">\n <div class="dv2-layout-vb2-header-content-info-home">\n \n ${a.name||"-"} <img onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'" src="${a.logo||""}" alt="${a.name||"-"}">\n </div>\n <div class="dv2-layout-vb2-header-content-info-detail">\n <span>${statusMatchRender(s)}</span>\n <p><span data-dv2-score-home>${r}</span> <span>-</span> <span data-dv2-score-away>${l}</span></p>\n <div class="dv2-layout-vb2-header-content-info-detail-time">${d}</div>\n </div>\n <div class="dv2-layout-vb2-header-content-info-away">\n <img onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'" src="${n.logo||""}" alt="${n.name||"-"}"> ${n.name||"-"}\n </div>\n </div>\n </div>\n `;e.html(c)}(s,t),function renderFooterStats_VB2(e,t){const a=t?.teams?.home?.name||"-",n=t?.teams?.away?.name||"-",i=t?.stats||{},o=t?.matchInfo?.kickoff,s=DV2StreamKickoff.renderTimeDisplay(o,{useFooterTitle:!0}),r=t?.league||{},l=`\n <p>${s}</p>\n <p><strong class="dv2-layout-vb2-footer-title">Giải Äấu:</strong> <img src="${r.logo||""}" alt="${r.name||"-"}" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"> ${r.name||"-"}</p> \n <div class="dv2-layout-vb2-footer-info">\n <div class="vb2-table">\n ${renderStatRow("Thông sá»",a,n,!0)}\n ${renderStatRow("Kiá»m soát bóng",`${i.possession?.home??0}%`,`${i.possession?.away??0}%`)}\n ${renderStatRow("Cú sút trúng ÄÃch",i.shotsOnTarget?.home??0,i.shotsOnTarget?.away??0)}\n ${renderStatRow("Phạt góc",i.corners?.home??0,i.corners?.away??0)}\n ${renderStatRow("Phạm lá»i",i.fouls?.home??0,i.fouls?.away??0)}\n </div>\n </div>`;e.html(l),DV2StreamKickoff.startCountdown(o)}(r,t),initStreamOddsPanel_VB2(a,t),!t?.livestream)return hideStreamLoading_VB2(a),void showMatchPosterOverlay_VB2(a,t);const l=DV2StreamLinks.sortForDetail(t.livestream.links);let d=null;if(l.length>0){const e=DV2StreamLinks.resolveActiveLink(l);d=e.activeLink,i=d,applyPosterForLink_VB2(m,d),function initStreamLinks_VB2(e=[],t=0){DV2StreamLinks.bindSpanLinks({$container:$(".dv2-layout-vb2.dv2-detail-livestream .dv2-stream-links"),links:e,activeIndex:t,streamAttr:"data-stream",onSelect(e){const t=$("#liveVideo"),a=t.closest(".dv2-video-wrapper");if(i=e,applyPosterForLink_VB2(t,e),n&&initStreamOddsPanel_VB2(a,n),shouldShowPreMatchOverlay_VB2(n)||!e?.url)return DV2_StreamChrome.clearFullChrome(a),stopStreamPlayback_VB2(t),hideStreamLoading_VB2(a),void showMatchPosterOverlay_VB2(a,n);clearMatchOverlays_VB2(a),initHLSPlayer_VB2(e.url,t,n)}})}(l,e.activeIndex),n=t}if(shouldShowPreMatchOverlay_VB2(t)){const showPreMatchOverlay=()=>
1{DV2_StreamChrome.clearFullChrome(a),hideStreamLoading_VB2(a),showMatchPosterOverlay_VB2(a,t)};return void(window.DV2StreamTvc?.playBeforeStream?window.DV2StreamTvc.playBeforeStream(a,showPreMatchOverlay):showPreMatchOverlay())}if(d?.url){const startStream=()=>initHLSPlayer_VB2(d.url,m,t);window.DV2StreamTvc?.playBeforeStream?window.DV2StreamTvc.playBeforeStream(a,startStream):startStream()}},error:function(){showErrorVideo(a,"Có lá»i xảy ra!")}})}function renderStatRow(e,t,a,n=!1){return`\n <div class="vb2-row ${n?"vb2-head":""}">\n <div class="vb2-col">${e}</div>\n <div class="vb2-col">${t}</div>\n <div class="vb2-col">${a}</div>\n </div>`}function onHlsStreamReady_VB2(e){clearMatchOverlays_VB2(e),applyStreamVideoLayout_VB2(e.find("video").first()),n&&DV2_StreamChrome.rememberOddsMatchData?.(e,n),DV2_StreamChrome.onHlsReady(e),applyStreamVideoLayout_VB2(e.find("video").first())}function initStreamOddsPanel_VB2(e,t){e?.length&&t&&(DV2_StreamChrome.rememberOddsMatchData?.(e,t),DV2_StreamChrome.initOddsPanel?.(e,t))}$(document).ready(function($){$(".dv2-layout-vb2.dv2-detail-livestream").length&&renderDetailMatch_VB2()});const t=12e3;function showStreamLoading_VB2(e,t="Äang tải luá»ng phát..."){if(!e?.length)return $();hideStreamLoading_VB2(e);const a=String(t||"Äang tải luá»ng phát...").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),n=$(`\n <div class="dv2-stream-loading" role="status" aria-live="polite" aria-busy="true">\n <div class="dv2-stream-loading__panel">\n <div class="dv2-stream-loading__spinner" aria-hidden="true"></div>\n <p class="dv2-stream-loading__text">${a}</p>\n </div>\n </div>\n `);return DV2_StreamChrome.getOverlayMount(e).append(n),DV2_StreamChrome.syncVideoStageLayout(e),n}function hideStreamLoading_VB2(e){e?.find(".dv2-stream-loading").remove()}function bindStreamLoadingUntilPlaying_VB2(e,a,n){if(!e?.length||!a)return void n?.();let i=!1;const finish=()=>{i||(i=!0,a.removeEventListener("playing",onPlaying),a.removeEventListener("canplay",onCanPlay),clearTimeout(o),hideStreamLoading_VB2(e),n?.())},onPlaying=()=>finish(),onCanPlay=()=>{a.paused||finish()};a.addEventListener("playing",onPlaying),a.addEventListener("canplay",onCanPlay);const o=setTimeout(finish,t)}let a=null,n=null,i=null,o=null,s=0,r=null,l=null;function clearVb2PlaybackTimers(){r&&(clearTimeout(r),r=null),l&&(clearTimeout(l),l=null)}function initHLSPlayer_VB2(e,t,i=null){const o=i||n,d=t?.closest(".dv2-video-wrapper");s+=1;const c=s,isStalePlayback=()=>c!==s;if(clearMatchOverlays_VB2(d),clearVb2PlaybackTimers(),!e||!t?.length)return hideStreamLoading_VB2(d),void(o&&d?.length&&showMatchPosterOverlay_VB2(d,o));showStreamLoading_VB2(d,"Äang tải luá»ng phát...");let m=!1;const showFallbackOverlay=()=>{!isStalePlayback()&&!m&&o&&d.length&&(m=!0,DV2_StreamChrome.clearFullChrome(d),hideStreamLoading_VB2(d),showMatchPosterOverlay_VB2(d,o))};if(a){try{a.destroy()}catch(e){}a=null}const v=t[0];Hls.isSupported()?(r=setTimeout(()=>{isStalePlayback()||(console.warn("[VSC LIVE] Manifest load timeout"),showFallbackOverlay())},15e3),a=new Hls({maxBufferLength:10,liveSyncDuration:3,enableWorker:!0,xhrSetup:function(e,t){e.withCredentials=!1,e.referrerPolicy="no-referrer-when-downgrade"}}),a.loadSource(e),a.attachMedia(v),a.on(Hls.Events.MANIFEST_PARSED,()=>{isStalePlayback()||(clearVb2PlaybackTimers(),bindStreamLoadingUntilPlaying_VB2(d,v,()=>{isStalePlayback()||onHlsStreamReady_VB2(d)}),setTimeout(()=>tryAutoPlay(v),100))}),a.on(Hls.Events.ERROR,(e,t)=>{isStalePlayback()||t?.fatal&&(clearVb2PlaybackTimers(),showFallbackOverlay())}),v.addEventListener("error",()=>{isStalePlayback()||(clearVb2PlaybackTimers(),showFallbackOverlay())},{once:!0})):v.canPlayType("application/vnd.apple.mpegurl")&&(l=setTimeout(()=>{isStalePlayback()||(console.warn("[VSC LIVE] Native HLS load timeout"),showFallbackOverlay())},15e3),v.src=e,v.addEventListener("loadedmetadata",()=>
1{isStalePlayback()||(clearVb2PlaybackTimers(),bindStreamLoadingUntilPlaying_VB2(d,v,()=>{isStalePlayback()||onHlsStreamReady_VB2(d)}),setTimeout(()=>tryAutoPlay(v),100))}),v.addEventListener("error",()=>{isStalePlayback()||(clearVb2PlaybackTimers(),showFallbackOverlay())},{once:!0})),DV2_StreamChrome.initPlayerUi(d,t)}function tryAutoPlay(e){e.muted=!0;const t=$(e).closest(".dv2-video-wrapper");t.length&&DV2_StreamChrome.syncControlsState(t,$(e)),e.play().catch(()=>console.warn("Autoplay bá» chặn"))}function stopStreamPlayback_VB2(e){if(s+=1,clearVb2PlaybackTimers(),a){try{a.destroy()}catch(e){}a=null}if(!e?.length)return;const t=e[0];t.pause(),t.removeAttribute("src"),"function"==typeof t.load&&t.load()}function ensurePosterVideo_VB2(e){if(!e?.length)return $();const t=e.find("#stream-player");let a=t.find("#liveVideo");return a.length||(a=e.find("#liveVideo")),a.length?(stopStreamPlayback_VB2(a),a.attr({poster:resolvePosterUrl_VB2(i),muted:!0,playsinline:!0}),a.prop({autoplay:!1,controls:!1})):(a=$("<video>",{id:"liveVideo",controls:!1,autoplay:!1,muted:!0,playsinline:!0,poster:resolvePosterUrl_VB2(i)}),t.length?t.empty().append(a):e.append(a)),DV2_StreamChrome.applyVideoControls(a),DV2_StreamChrome.ensureControlsBar(e),applyStreamVideoLayout_VB2(a),a}function clearMatchOverlays_VB2(e){e.find(".dv2-loading.dv2-match-overlay, .dv2-not-loaded.dv2-match-overlay").remove()}function showMatchPosterOverlay_VB2(e,t){if(e?.length){if(hideStreamLoading_VB2(e),e.find(".dv2-loading").not(".dv2-match-overlay").remove(),clearMatchOverlays_VB2(e),ensurePosterVideo_VB2(e),t){const a=function createNotFoundMatchOverlay_VB2(e){const t=e?.matchInfo?.kickoff,a=e?.league,n=e?.teams?.home?.name||"Home",i=e?.teams?.away?.name||"Away",o=e?.matchInfo?.status;return $(`\n <div class="dv2-loading">\n <span class="dv2-loading-status">${statusMatchRender(o)}</span>\n Tráºn Äấu: <strong>${n} - ${i}</strong>\n <div class="dv2-load-league">\n <span>Giải Äấu: <strong> <img src="${a.logo||""}" alt="${a.name||"-"}" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"> ${a.name||"-"}</strong></span>\n </div>\n <div class="dv2-load-time">\n <span>${DV2StreamKickoff.renderTimeDisplay(t)}</span>\n </div>\n </div>\n `)}(t);a.addClass("dv2-match-overlay"),DV2_StreamChrome.getOverlayMount(e).append(a)}DV2_StreamChrome.bindEvents(e),DV2_StreamChrome.syncVideoStageLayout(e),DV2StreamKickoff.startCountdown(t?.matchInfo?.kickoff)}}function showErrorVideo(e,t=""){const a=e.hasClass("dv2-video-wrapper")?e:e.find(".dv2-video-wrapper").first();if(!a.length)return void e.html(`<div class="dv2-not-loaded"><div class="dv2-no-stream-title">${t}</div></div>`);hideStreamLoading_VB2(a),a.find(".dv2-loading").not(".dv2-match-overlay").remove(),clearMatchOverlays_VB2(a),ensurePosterVideo_VB2(a);const n=$(`\n <div class="dv2-not-loaded dv2-match-overlay">\n <div class="dv2-no-stream" id="noStreamMessage">\n <div class="dv2-no-stream-icon">ð«</div>\n <div class="dv2-no-stream-title">${t}</div>\n <div class="dv2-no-stream-subtitle">\n Tráºn Äấu nà y hiá»n chưa có luá»ng phát trá»±c tiếp hoặc bá» lá»i.<br>\n Vui lòng quay lại sau hoặc xem các tráºn Äấu khác.\n </div>\n </div>\n </div>\n `);DV2_StreamChrome.getOverlayMount(a).append(n),DV2_StreamChrome.bindEvents(a),DV2_StreamChrome.syncVideoStageLayout(a)}function statusMatchRender(e){return{"not started":"Sắp diá»
n ra","to be determined":"Chưa xác Äá»nh",delay:"Trì hoãn",interrupt:"Tạm dừng","cut in half":"Bá» cắt hiá»p",postponed:"Hoãn tráºn",suspended:"Tạm hoãn",abandoned:"Bá» dá»",cancel:"Há»§y tráºn","abnormal(suggest hiding)":"Trạng thái bất thưá»ng","first half":"Äang thi Äấu",firsthalf:"Äang thi Äấu","first-half":"Äang thi Äấu",fh:"Äang thi Äấu","half-time":"Nghá» giữa hiá»p","half time":"Nghá» giữa hiá»p",halftime:"Nghá» giữa hiá»p",ht:"Nghá» giữa hiá»p","second half":"Äang thi Äấu",secondhalf:"Äang thi Äấu","second-half":"Äang thi Äấu",sh:"Äang thi Äấu","extra time":"Hiá»p phụ",extratime:"Hiá»p phụ",et:"Hiá»p phụ",overtime:"Hiá»p phụ","overtime(deprecated)":"Hiá»p phụ",ot:"Hiá»p phụ",penalty:"Luân lưu",penalties:"Luân lưu","penalty shoot-out":"Luân lưu","penalty shootout":"Luân lưu",finished:"Äã kết thúc",ft:"Äã kết thúc",end:"Äã kết thúc",walkover:"Thắng xá» thua"}[e?e.toLowerCase():""]||"Không xác Äá»nh"}}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery){$=jQuery.noConflict();let e=-1,t={},a=!1;function isNhaDaiLivestreamLink(e){if(!e)return!1;if(1e17===e.commentatorId)return!0;const t=String(e.commentator||"").trim().toLowerCase();return"nhà Äà i"===t||"nha dai"===t||"blv nhà Äà i"===t}function updateHeaderText(e){const t=$(".match_date_text");if(!t.length)return;const n=new Date(e+"T00:00:00"),i=new Date;i.setHours(0,0,0,0);const o=new Date(i);o.setDate(o.getDate()-1);const s=new Date(i);s.setDate(s.getDate()+1),n.setHours(0,0,0,0);let r="";
1const l=`${DV2.formatDateDDMM(n)}/${n.getFullYear()}`;if(r=n.getTime()===i.getTime()?`Hôm nay (${l})`:n.getTime()===o.getTime()?`Hôm qua (${l})`:n.getTime()===s.getTime()?`Ngà y mai (${l})`:l,t.text(r),a){const e=$("#page-heading");e.length&&e.html(`TRá»°C TIẾP Lá»CH THI ÄẤU BÃNG Äà ${r} CẬP NHẬT 24H VEBO TV`);const t=$("#page-description");t.length&&t.html(`Trá»±c tiếp lá»ch thi Äấu ${r} má»i nhất sẽ ÄÆ°á»£c cáºp nháºt liên tục 24h. Cứ khi nà o có bóng Äá thì BXH cÅ©ng sẽ ÄÆ°á»£c cáºp nháºt ngay trong giá» Äấu Äang diá»
n ra. Các fan hâm má» có thá» theo dõi nhiá»u hÆ¡n nữa BXH các giải nhá» cho tá»i giải to trên toà n thế giá»i tại VeboTV.`)}}function showLoading(){const e=$("#match_list_container");e.length&&(e.find(".match_box").remove(),e.find(".no-matches").remove(),e.find(".loading-container").remove(),e.append('\n <div class="loading-container">\n <div>\n <div class="loading-spinner"></div>\n <div class="loading-text">Äang tải dữ liá»u...</div>\n </div>\n </div>\n '))}function hideLoading(){const e=$("#match_list_container");e.length&&e.find(".loading-container").remove()}function isMatchLive(e){if(!e||!e.kickoff)return!1;const t=e.status||"";if(DV2.isLiveStatus(t))return!0;if(e.livestream&&e.livestream.available){const t=new Date,a=new Date(e.kickoff),n=new Date(a.getTime()+72e5);return a<=t&&t<=n}return!1}function renderMatchList(e,t){if(!Array.isArray(e)||0===e.length)return'<div class="no-matches">Không có tráºn Äấu nà o</div>';let n=[];if(n=a?e.filter(function(e){return!(!e||!e.status)&&(isMatchLive(e)||DV2.isNotStartedStatus(e.status))}):e.filter(function(e){return!(!e||!e.status)&&(DV2.isFinishedStatus(e.status)||isMatchLive(e))}),0===n.length)return'<div class="no-matches">Không có tráºn Äấu nà o</div>';const i=function groupMatchesByLeague(e){const t={};return e.forEach(function(e){const a=e.league?.id||"unknown",n=e.league?.name||"Unknown League";t[a]||(t[a]={league:e.league,leagueName:n,matches:[]}),t[a].matches.push(e)}),t}(n);
1Object.keys(i).forEach(function(e){const a=i[e];a.matches=function sortMatches(e,t){if(!Array.isArray(e)||0===e.length)return[];const a=new Date,n=t===DV2.getDateString(a);return e.slice().sort(function(e,t){if(n){const a=isMatchLive(e),n=isMatchLive(t);if(a&&!n)return-1;if(!a&&n)return 1;if(a&&n){const a=e.currentMinutes||0,n=t.currentMinutes||0;return a!==n?n-a:new Date(e.kickoff||0).getTime()-new Date(t.kickoff||0).getTime()}const i=new Date(e.kickoff||0).getTime();return new Date(t.kickoff||0).getTime()-i}return new Date(e.kickoff||0).getTime()-new Date(t.kickoff||0).getTime()})}(a.matches,t)});let o="";return DV2.sortedMatchesFunction(e).forEach(function(e){const t=DV2.appState.hotLeaguesRank.has(e.league.id);o+=`\n <div class="match_box match_item--box ${t?"hot-match":""}">\n <div class="mb_-header">\n <span class="item-league match_item--league">\n ${e.league?.logo?`\n <i class="league-icon mr-2">\n <img loading="lazy" class="match_item--league-icon" src="${e.league?.logo}" alt="${e.league?.name}"\n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n />\n </i>\n `:""}\n <span class="item-league__name match_item--league-name">\n ${e.league?.name}\n </span>\n </span>\n </div>\n <div class="match_list match_list-list match_item--list">\n `,o+=function renderMatchItem(e){if(!e)return"";const t=e.match_id||"",a=e.slug||"",n=e.teams?.home||{},i=e.teams?.away||{},o=n.name||"",s=i.name||"",r=n.logo||"",l=i.logo||"",d=new Date(e.kickoff||""),c=DV2.formatTimeHHMM(d),m=function getMatchScore(e){return e&&e.score&&e.score.fulltime?{home:e.score.fulltime.home||0,away:e.score.fulltime.away||0}:{home:0,away:0}}(e),v=function getFirstCommentator(e){const t=e?.livestream?.links;return Array.isArray(t)&&t.length?(function sortLivestreamLinksPreferRealBlv(e){Array.isArray(e)&&e.sort((e,t)=>{const a=isNhaDaiLivestreamLink(e),n=isNhaDaiLivestreamLink(t);return a&&!n?1:!a&&n?-1:0})}(t),t[0]||null):null}(e),u=`/streams/${t||a}`,h=isMatchLive(e),p=v?.commentator||"",f=v?.avatar||"";let g="";const w=e.status||"",y=DV2.isFinishedStatus(w),S=DV2.isNotStartedStatus(w);if(h){const t=DV2.normalizeMatchStatus(w),a="half-time"===t||"halftime"===t||"ht"===t||"half time"===t,n=e.currentMinutes||0;g=`\n <div class="badge-live">\n <i class="dot"></i>Live\n </div>\n <div style="display: flex; gap: 6px;">\n <div class="detail match_item--time">\n <b>${c}</b>\n </div>\n <div class="time-loaded match_item--status">\n <span class="match-status live">${a?"HT":`${n}'`}</span>\n </div>\n </div>\n ${v?`\n <div class="detail mt-2 match_item--commentator">\n <img \n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n src="${f}" alt="${p}" width="24" height="24"/>\n ${p}\n </div>\n `:""}\n `}else g=y?`\n <div style="display: flex; gap: 6px; flex-direction: column;">\n <div class="detail match_item--time">\n <span class="match-status finished">Kết thúc</span>\n </div>\n <div class="match_item--status">\n <span class="match-status">${c} ${DV2.formatDateDDMM(d)}</span>\n </div>\n </div>\n ${v?`\n <div class="detail mt-2 match_item--commentator">\n <img\n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n src="${f}" alt="${p}" width="24" height="24"/>\n ${p}\n </div>\n `:""}\n `:S?`\n <div style="display: flex; gap: 6px; flex-direction: column;">\n <div class="detail match_item--time">\n <span class="match-status scheduled">Chưa diá»
n ra</span>\n </div>\n <div class="match_item--status">
1\n <span class="match-status">${c} ${DV2.formatDateDDMM(d)}</span>\n </div>\n </div>\n ${v?`\n <div class="detail mt-2 match_item--commentator">\n <img \n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n src="${f}" alt="${p}" width="24" height="24"/>\n ${p}\n </div>\n `:""}\n `:`\n <div style="display: flex; gap: 6px; flex-direction: column;">\n <div class="detail match_item--time">\n <span class="match-status">${w}</span>\n </div>\n <div class="match_item--status">\n <span class="match-status">${c} ${DV2.formatDateDDMM(d)}</span>\n </div>\n </div>\n ${v?`\n <div class="detail mt-2 match_item--commentator">\n <img \n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n src="${f}" alt="${p}" width="24" height="24"/>\n ${p}\n </div>\n `:""}\n `;return`\n <div class="vitem vitem-vertical ${h?"vitem-live":""} match_item">\n <a href="${u}" class="match-link match_item--link"></a>\n <div class="vitem-info match_item--info">\n ${g}\n </div>\n <div class="item-team match_item--team">\n <div class="team team-home match_item--team-home">\n <div class="team-logo match_item--home-logo">\n <img class="team-logo-img" loading="lazy" src="${r}" \n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n alt="${o} logo" />\n </div>\n <h3 class="team-name match_item--home-name">${o}</h3>\n <div class="vitem-card ml-3"></div>\n </div>\n <div class="team team-away match_item--team-away">\n <div class="team-logo match_item--away-logo">\n <img class="team-logo-img" loading="lazy" src="${l}" \n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n alt="${s} logo" />\n </div>\n <h3 class="team-name match_item--away-name">${s}</h3>\n <div class="vitem-card ml-3"></div>\n </div>\n </div>\n <div class="item-result match_item--result">\n <div class="ir-col">\n <div class="match_item--score-home">${m.home}</div>\n <div class="match_item--score-away">${m.away}</div>\n </div>\n </div>\n <div class="item-buttons match_item--button">\n <div class="ibs-live">\n <a href="${u}" class="btn btn-sm vebo2-btn-bet-hover">Xem ngay</a>\n </div>\n <div class="ibs-bet">\n <a href="${window.DV2_LINK_BET}" target="_blank" rel="nofollow" class="btn btn-sm btn-betnow vebo2-btn-bet">Äặt cược</a>\n </div>\n </div>\n <div class="clearfix"></div>\n </div>\n `}(e),o+="\n </div>\n </div>\n "}),o}function loadMatchesForDate(e){const a=$("#match_list_container");if(!a.length)return;if(hideLoading(),!t[e])return a.find(".match_box").remove(),a.find(".no-matches").remove(),void a.append('<div class="no-matches" style="padding: 20px; text-align: center; color: #8e8f92;">Không có tráºn Äấu nà o trong ngà y.</div>');const n=t[e];a.find(".match_box").remove(),a.find(".no-matches").remove();const i=renderMatchList(n,e);a.append(i)}$(document).ready(function(){if(void 0===window.DV2_PAGE_TYPE){const e=$(".content-area.dv2-layout-vb2");window.DV2_PAGE_TYPE=e.length&&e.attr("data-page-type")||""}a="lich-thi-dau-bong-da"===window.DV2_PAGE_TYPE,function renderDateList(){const t=$(".match_date--wrapper");if(!t.length)return;const n=new Date;let i="";if(a)for(let e=0;e<8;e++){const t=new Date(n);t.setDate(n.getDate()+e),t.setHours(0,0,0,0);let a=DV2.formatDateDDMM(t);0===e?a="Hôm nay":1===e&&(a="Ngà y mai"),i+=`\n <a href="javascript:void(0)" class="match_date--item ${0===e?"active":""}" data-date="${DV2.getDateString(t)}" data-index="${e}">\n ${a}\n </a>\n `}else for(let e=7;e>=0;e--){const t=new Date(n);t.setDate(n.getDate()-e),t.setHours(0,0,0,0);let a=DV2.formatDateDDMM(t);0===e?a="Hôm nay":1===e&&(a="Hôm qua"),i+=`\n <a href="javascript:void(0)" class="match_date--item ${0===e?"active":""}" data-date="${DV2.getDateString(t)}" data-index="${e}">\n ${a}\n </a>\n `}t.html(i),e=0}(),function loadDataForAllDays(){const e=new Date,n=new Date(e),i=new Date(e);a?i.setDate(e.getDate()+7):n.setDate(e.getDate()-7),showLoading(),DV2.fetchMatchesByDateRange(DV2.getDateString(n),DV2.getDateString(i),function(a){if
1(hideLoading(),a&&a.matches_by_date){t=a.matches_by_date;const n=DV2.getDateString(e);loadMatchesForDate(n),updateHeaderText(n)}else{const e=$("#match_list_container");e.length&&e.append('<div class="no-matches" style="padding: 20px; text-align: center; color: #8e8f92;">Không có dữ liá»u.</div>')}},function(e){hideLoading(),console.error("[KET QUA] Error loading data:",e);const t=$("#match_list_container");t.length&&t.append('<div class="no-matches" style="padding: 20px; text-align: center; color: #8e8f92;">Äã xảy ra lá»i khi tải dữ liá»u.</div>')})}(),function setupDateClickHandlers(){$(document).on("click",".match_date--item",function(){const a=$(this),n=a.data("date"),i=parseInt(a.data("index"),10);if($(".match_date--item").removeClass("active"),a.addClass("active"),e=i,updateHeaderText(n),t[n])loadMatchesForDate(n);else{showLoading();const e=new Date(n+"T00:00:00"),a=new Date(e),i=new Date(e);DV2.fetchMatchesByDateRange(DV2.getDateString(a),DV2.getDateString(i),function(e){hideLoading(),e&&e.matches_by_date?(Object.assign(t,e.matches_by_date),loadMatchesForDate(n)):loadMatchesForDate(n)},function(e){hideLoading(),console.error("[KET QUA] Error loading data for date:",e),loadMatchesForDate(n)})}})}()})}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery){function getDaysToDisplay(){return function isMobile(){return window.innerWidth<=640}()?4:5}$=jQuery.noConflict();let e=-1,t={},a=!0;function renderDateList(){const t=$(".mdx_-list");if(!t.length)return;const a=new Date;let n="";const i=getDaysToDisplay();for(let t=0;t<i;t++){const i=new Date(a);i.setDate(a.getDate()+t),i.setHours(0,0,0,0);const o=DV2.formatDateDDMM(i),s=DV2.getVietnameseDayLabel(i,t),r=DV2.getDateString(i);n+=`\n <a href="javascript:void(0)" class="item f-date ${t===e?"active":""}" data-date="${r}" data-index="${t}">\n <span class="date-a date_of_day">${o}</span>\n <span class="date-b date_of_week">${s}</span>\n </a>\n `}t.html(n)}function setupDateClickHandlers(){$(document).on("click",".mdx_-list .item.f-date",function(){const t=$(this),n=parseInt(t.data("index"),10);$(".mdx_-list .item.f-date").removeClass("active"),$(".btn-live").removeClass("active"),t.addClass("active"),e=n,a=!1,loadMatchesForDate(t.data("date"))})}function loadDataForAllDays(){const n=new Date,i=new Date(n),o=new Date(n),s=getDaysToDisplay();o.setDate(n.getDate()+s),DV2.fetchMatchesByDateRange(DV2.getDateString(i),DV2.getDateString(o),function(i){if(i&&i.matches_by_date)if(t=i.matches_by_date,updateLiveCountBadge(),a)loadLiveMatches();else{const t=new Date(n);t.setDate(n.getDate()+e),loadMatchesForDate(DV2.getDateString(t))}},function(e){console.error("[DATE LIST] Error loading data:",e)})}$(document).ready(function(){renderDateList(),loadDataForAllDays(),setupDateClickHandlers(),function setupLiveButtonHandler(){$(document).on("click",".btn-live",function(){const t=$(this);$(".mdx_-list .item.f-date").removeClass("active"),t.addClass("active"),e=-1,a=!0,loadLiveMatches()})}(),function setupResizeHandler(){let t,n=getDaysToDisplay();$(window).on("resize",function(){clearTimeout(t),t=setTimeout(function(){const t=getDaysToDisplay();t!==n&&(n=t,e>=t&&(e=-1,a=!0,$(".mdx_-list .item.f-date").removeClass("active"),$(".btn-live").addClass("active")),renderDateList(),setupDateClickHandlers(),loadDataForAllDays())},250)})}(),bindVb2BlvDropdownEvents_LTT()});const n=["delay","interrupt","cut in half"];function isExcludedMatchStatus(e){return n.includes(DV2.normalizeMatchStatus(e||""))}function isMatchLive(e){if(!e||!e.kickoff)return!1;const t=e.status||"";if(isExcludedMatchStatus(t))return!1;if(DV2.isLiveStatus(t))return!0;if(e.livestream&&e.livestream.available){const t=new Date,a=new Date(e.kickoff),n=new Date(a.getTime()+72e5);return a<=t&&t<=n}return!1}function escapeHtml_VB2(e){return String(e??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function getDetailUrl_VB2(e,t){return window.DV2StreamLinks.getDetailUrl(e,t,{trailingSlash:!0})}function renderLttBlvAvatar(e,t){return`\n <img\n src="${escapeHtml_VB2(e?.avatar||"")}"\n alt="${escapeHtml_VB2(t)}"\n width="24"\n height="24"\n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n />\n `}function bindVb2BlvDropdownEvents_LTT(){window.DV2BlvDropdown.bind($(".match_list_container"),{namespace:"vb2BlvDropdownLtt",documentCloseDelay:!0})}function filterFinishedMatches(e){return Array.isArray(e)?e.filter(function(e){return!e||!e.status||!isExcludedMatchStatus(e.status)&&!DV2.isFinishedStatus(e.status)}):[]}function renderMatchList(e){if(!Array.isArray(e)||0===e.length)return'<div class="no-matches">Không có tráºn Äấu nà o</div>';const t=filterFinishedMatches(e);if(0===t.length)return'<div class="no-matches">Không có tráºn Äấu nà o</div>';let a="";return DV2.sortedMatchesFunction(t).forEach(function(e){const t=DV2.a
1ppState.hotLeaguesRank.has(e.league.id);a+=`\n <div class="match_box match_item--box ${t?"hot-match":""}">\n <div class="mb_-header">\n <span class="item-league match_item--league">\n ${e.league?.logo?`\n <i class="league-icon mr-2">\n <img loading="lazy" class="match_item--league-icon" src="${e.league.logo}" alt="${e.league.name}"\n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n />\n </i>\n `:""}\n <span class="item-league__name match_item--league-name">\n ${e.league.name}\n </span>\n </span>\n </div>\n <div class="match_list match_list-list match_item--list">\n `,a+=function renderMatchItem(e){if(!e)return"";const t=e.match_id||"",a=e.slug||"",n=e.teams?.home||{},i=e.teams?.away||{},o=n.name||"",s=i.name||"",r=n.logo||"",l=i.logo||"",d=new Date(e.kickoff||""),c=DV2.formatTimeHHMM(d),m=function formatMatchStatus(e){if(!e)return"Chưa diá»
n ra";const t=DV2.normalizeMatchStatus(e.status||"");return isMatchLive(e)||DV2.isLiveStatus(t)?"half-time"===t||"halftime"===t||"ht"===t||"half time"==t?"HT":"first half"===t?"Hiá»p 1":"second half"===t?"Hiá»p 2":"overtime"===t||"overtime(deprecated)"===t?"Hiá»p phụ":"penalty shoot-out"===t||"penalty"===t?"Penalty":"Live":DV2.isFinishedStatus(t)?"FT":DV2.isNotStartedStatus(t)?"Chưa diá»
n ra":"delay"===t?"Hoãn":"interrupt"===t?"Tạm dừng":"cancel"===t?"Há»§y":e.status||"Chưa diá»
n ra"}(e),v=isMatchLive(e),u=function getMatchScore(e){return e&&e.score&&e.score.fulltime?{home:e.score.fulltime.home||0,away:e.score.fulltime.away||0}:{home:0,away:0}}(e),h=`/streams/${t||a}`,p=v?"live":"pending",f=v?"Live":m,g=function buildCommentatorDropdown_VB2(e){const t=window.DV2BlvDropdown.getSortedLinks(e);return window.DV2BlvDropdown.build({match:e,links:t,getDetailUrl:getDetailUrl_VB2,escapeHtml:escapeHtml_VB2,menuPlacement:"down",emptyHtml:"",rootClass:"detail mt-2 match_item--commentator",renderToggle:({link:e,label:t})=>`\n ${renderLttBlvAvatar(e,t)}\n <span class="match_item--commentator-name">${escapeHtml_VB2(t)}</span>\n `,renderItemContent:({link:e,label:t})=>`\n ${renderLttBlvAvatar(e,t)}\n <span class="match_item--commentator-name">${escapeHtml_VB2(t)}</span>\n `})}(e);let w="";if(v){const t=DV2.normalizeMatchStatus(e.status||""),a="half-time"===t||"halftime"===t||"ht"===t||"half time"===t,n=e.currentMinutes||0;w=`\n <div class="badge-live">\n <i class="dot"></i>\n ${f}\n </div>\n <div style="display: flex; gap: 6px">\n <div class="detail match_item--time">\n <b>${c}</b>\n </div>\n <div class="time-loaded match_item--status">\n <span class="match-status ${p}">${a?"HT":`${n}'`}</span>\n </div>\n </div>\n `}else{const e=new Date;w=`\n <div style="display: flex; gap: 6px; flex-direction: column-reverse;">\n <div class="detail">\n <b>${c}${d.getFullYear()===e.getFullYear()&&d.getMonth()===e.getMonth()&&d.getDate()===e.getDate()?"":` ${DV2.formatDateDDMM(d)}`}</b>\n </div>\n <div class="time-loaded">\n <span class="match-status pending">${m}</span>\n </div>\n </div>\n `}return`\n <div class="vitem vitem-vertical ${v?"vitem-live":""} match_item">\n <a href="${h}" class="match-link match_item--link"></a>\n <div class="vitem-info match_item--info">\n ${w}\n ${g}\n </div>\n <div class="item-team match_item--team">\n <div class="team team-home match_item--team-home">\n <div class="team-logo match_item--home-logo">\n <img class="team-logo-img" loading="lazy" src="${r}" \n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n alt="${o} logo" />\n </div>\n <h3 class="team-name match_item--home-name">${o}</h3>\n <div class="vitem-card ml-3"></div>\n </div>\n <div class="team team-away match_item--team-away">\n <div class="team-logo match_item--away-logo">\n <img class="team-logo-img" loading="lazy" src="${l}" \n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n alt="${s} logo" />\n </div>\n <h3 class="team-name match_item--away-name">${s}</h3>\n <div class="vitem-card ml-3"></div>\n </div>\n </div>\n <div class="item-result match_item--result">\n <div class="ir-col">\n ${v?`\n <div class="match_item--score-home">${u.home}</div>\n <div class="match_item--score-away">${u.away}</div> \n `:'<div class="xspace">vs</div>'}\n </div>\n </div>\n <div class="item-buttons match_item--button">\n <div class="ibs-live">\n <a href="${h}" class="btn btn-sm vebo2-btn-bet-hover">Xem ngay</a>\n </div>\n <div class="ibs-bet">\n <a href="${window.DV2_LINK_BET}" target="_blank" rel="nofollow" class="btn btn-sm btn-betnow vebo2-btn-bet">Äặt cược</a>\n </div>\n </div>\n <div class="clearfix"></div>\n </div>\n `}(e),a+="\n </div>\n </div>\n "}),a}function updateLiveCountBadge(){const e=$(".badge-live-count");if(!e.length)return;let a=[];Object.keys(t).forEach(function(e){const n=t[e]||[];a=a.concat(n)});const n=filterFinishedMatches(a).filter(function(e){return isMatchLive(e)}).length;e.text(n)}function updateLiveCountForDate(e){updateLiveCountBadge()}function loadMatchesForDate(e){const a=$(".match_list_container");if(!a.length)return;if(!t[e])return a.find(".match_box").remove(),a.find(".no-matches").remove(),updateLiveCountForDate(),void a.append('<div class="no-matches" style="padding: 20px; text-align: center; color: #8e8f92;">Không có tráºn Äấu nà o trong ngà y.</div>');const n=t[e];a.find(".match_box").remove(),a.find(".no-matches").remove();const i=renderMatchList(n);a.append(i),bindVb2BlvDropdownEvents_LTT(),updateLiveCountForDate()}function loadLiveMatches(){const e=$(".match_list_container");if(!e.length)return;let a=[];Object.keys(t).forEach(function(e){const n=t[e]||[];a=a.concat(n)});const n=a.filter(function(e){return isMatchLive(e)});if(e.find(".match_box").remove(),e.find(".no-matches").remove(),0===n.length)e.append('<div class="no-matches" style="padding: 20px; text-align: center; color: #8e8f92;">Hiá»n tại không có tráºn Äấu nà o Äang diá»
n ra.</div>');else{const t=renderMatchList(n);e.append(t),bindVb2BlvDropdownEvents_LTT()}updateLiveCountBadge()}}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery,Hls,Swiper){function isNhaDaiLivestreamLink(e){if(!e)return!1;if(1e17===e.commentatorId)return!0;const t=String(e.commentator||"").trim().toLowerCase();return"nhà Äà i"===t||"nha dai"===t||"blv nhà Äà i"===t}$=jQuery.noConflict();const e={hotLeaguesRank:new Map},t=".dv2-layout-vb2.dv2-calendar-matchs";let a=null;const n=["half-time","half time","halftime","ht"],i=["interrupt","first half","firsthalf","first-half","fh","half-time","half time","halftime","ht","second half","secondhalf","second-half","sh","extra time","extratime","et","overtime","overtime(deprecated)","ot","penalty","penalties","penalty shoot-out","penalty shootout"];function destroyMatchLiveSwiper(){a&&(a.destroy(!0,!0),a=null)}$(document).ready(()=>{$(t).length>0&&function loadHomeMatchesData_VB2(){const s=new Date,r=new Date(s);r.setDate(s.getDate()+1);const l={fromDate:s.toISOString().split("T")[0],toDate:r.toISOString().split("T")[0]};$.ajax({url:"https://vsc-apidev.helizones.com/api/data/lives/range-date",method:"POST",contentType:"application/json",data:JSON.stringify(l),success:s=>{if(s&&s.matches_by_date){const r=[];
1Object.keys(s.matches_by_date).forEach(e=>r.push(...s.matches_by_date[e])),function renderHomeMatches_VB2(s,r="all"){const l=new Date,d=s.filter(e=>{const t=new Date(e.kickoff),a=new Date(t.getTime()+72e5);if("live"===r)return l>=t&&l<=a;if("today"===r){new Date(l).setHours(0,0,0,0);const e=new Date(l);return e.setHours(23,59,59,999),t>l&&t<=e}return a>=l}).sort((e,t)=>new Date(e.kickoff).getTime()-new Date(t.kickoff).getTime()),c=o(d),m=$(`${t} .swiper-wrapper`);if(m.empty(),!c.length)return destroyMatchLiveSwiper(),void m.html('<div class="dv2-empty-state">Không có tráºn Äấu</div>');const v=c.map(t=>function renderHomeMatchCard_VB2(t){const a=new Date(t.kickoff).toLocaleTimeString("vn-VN",{hour:"2-digit",minute:"2-digit",hour12:!1}),o=t.teams?.home||{},s=t.score||{},r=t.teams?.away||{},l=t.league||{},d=e.hotLeaguesRank.has(t.league.id),c=function getPreferredLivestreamLink(e){const t=e?.livestream?.links;return Array.isArray(t)&&t.length?(function sortLivestreamLinksPreferRealBlv(e){Array.isArray(e)&&e.sort((e,t)=>{const a=isNhaDaiLivestreamLink(e),n=isNhaDaiLivestreamLink(t);return a&&!n?1:!a&&n?-1:0})}(t),t[0]||null):null}(t),m=i.includes(t.status.toLowerCase()),v=t.status.toLowerCase(),u=m?n.includes(v)?"HT":null!=t.currentMinutes&&""!==t.currentMinutes?`${t.currentMinutes}'`:"Live":"";return`\n <div class="swiper-slide xitem xitem-big ${d?"hot-game":""}" >\n <a href="/streams/${t?.match_id}" class="match-link"></a>\n ${m?'<div class="stick stick-live"><i class="dot"></i>Live</div>':""}\n <div class="xitem-header">\n <div class="xleague">\n <img\n width="20"\n height="20"\n src="${l.logo}"\n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n alt="${l.logo}"\n />\n ${l.name}\n </div>\n </div>\n <div class="xitem-main">\n <div class="team team-home" style="">\n <div class="team-logo">\n <img\n src="${o.logo}"\n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n alt="${o.logo}"\n class="team-logo-img"\n loading="lazy"\n />\n </div>\n <div class="xname">\n <h3 class="team-name">${o.name}</h3>\n <div class="xcards"></div>\n </div>\n </div>\n <div class="xinfo">\n <div class="time-loaded">\n <span class="match-status ${m?"live":""}">${u}</span>\n </div>\n <div class="result">${m?`<div>${s.fulltime.home}</div>\n <div class="xspace">-</div>\n <div>${s.fulltime.away}</div>`:"VS"}</div>\n <div class="detail"><b>${a}</b></div>\n </div>\n <div class="team team-away">\n <div class="team-logo">\n <img\n src="${r.logo}"\n onerror="https://static.90pcdn.com/images/match.png"\n alt="${r.logo}"\n class="team-logo-img"\n loading="lazy"\n />\n </div>\n <div class="xname">\n <h3 class="team-name">${r.name}</h3>\n <div class="xcards"></div>\n </div>\n </div>\n </div>\n <div class="xitem-bottom">\n <div class="xcommentator">\n <img\n src="${c?.avatar||""}"\n width="32"\n height="32"\n style="border-radius: 50%; object-fit: contain"\n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n />\n ${c?.commentator||""}\n </div>\n <div class="xitem-buttons">\n <div class="ibs-live">\n <a href="/streams/${t.match_id}" class="btn btn-sm vebo2-btn-bet-hover">Xem ngay</a>\n </div>\n <div class="ibs-bet">\n <a href="${window.DV2_LINK_BET}" target="_blank" rel="nofollow" class="btn btn-sm btn-betnow vebo2-btn-bet">Äặt cược</a>\n </div>\n </div>\n </div>\n </div>\n `}(t)).join("");m.append(v),function initMatchLiveSwiper(e){destroyMatchLiveSwiper();const n=$(t),i=n.find(".mySwiper")[0];if(!i||e<1)return;const o=e>=3;a=new Swiper(i,{slidesPerView:1,spaceBetween:16,centeredSlides:!0,centeredSlidesB
1ounds:!0,initialSlide:Math.min(2,e-1),loop:o,autoplay:e>1&&{delay:3e3,disableOnInteraction:!1},navigation:{nextEl:n.find(".swiper-button-next")[0],prevEl:n.find(".swiper-button-prev")[0]},breakpoints:{768:{slidesPerView:1},1024:{slidesPerView:2}},observer:!0,observeSlideChildren:!0})}(c.length)}(r)}else $(".dv2-layout-vb2.dv2-calendar-matchs .swiper-wrapper").html('<div class="dv2-empty-state">Không có dữ liá»u</div>')},error:()=>$(".dv2-layout-vb2.dv2-calendar-matchs .swiper-wrapper").html('<div class="dv2-empty-state">Lá»i tải dữ liá»u</div>')}),DV2HotLeagues.load({ajax:$.ajax,setHotLeaguesRank:t=>{e.hotLeaguesRank=t}})}()});const o=DV2MatchSort.createSortedMatchesFunction({mode:"wc-first",liveStatuses:i,hotLeaguesRank:()=>e.hotLeaguesRank})}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery){function escapeHtml_VB2(e){return String(e??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function getDetailUrl_VB2(e,t){return window.DV2StreamLinks.getDetailUrl(e,t,{trailingSlash:!0})}function renderVb2BlvAvatar(e,t){return`\n <img\n src="${escapeHtml_VB2(e?.avatar||"")}"\n width="32"\n height="32"\n alt="${escapeHtml_VB2(t)}"\n style="border-radius: 50%; object-fit: contain"\n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n />\n `}function bindVb2BlvDropdownEvents(){window.DV2BlvDropdown.bind($(".dv2-tam-diem-vb2.dv2-calendar-matchs .dv2-grid"),{namespace:"vb2BlvDropdown",documentCloseDelay:!0})}($=jQuery.noConflict())(document).ready(()=>{$(".dv2-tam-diem-vb2.dv2-calendar-matchs").length>0&&(bindVb2BlvDropdownEvents(),function loadHomeMatchesData_VB2(){const t=new Date,a=new Date(t);a.setDate(t.getDate()-1);const n=new Date(t);n.setDate(t.getDate()+1);const i={fromDate:a.toISOString().split("T")[0],toDate:n.toISOString().split("T")[0]};$.ajax({url:"https://vsc-apidev.helizones.com/api/data/lives/range-date",method:"POST",contentType:"application/json",data:JSON.stringify(i),success:e=>{if(e&&e.matches_by_date){const t=[];Object.keys(e.matches_by_date).forEach(a=>t.push(...e.matches_by_date[a]));const a=t.filter(e=>"Finished"!==e.status);renderHomeMatches_VB2(a),function setupFilterButtons_VB2(e){$(".dv2-tam-diem-vb2.dv2-calendar-matchs .dv2-filter-btn").off("click").on("click",function(){$(".dv2-tam-diem-vb2.dv2-calendar-matchs .dv2-filter-btn").removeClass("active"),$(this).addClass("active"),renderHomeMatches_VB2(e,$(this).data("filter"))})}(a)}else $(".dv2-tam-diem-vb2.dv2-calendar-matchs .dv2-grid").html('<div class="dv2-empty-state">Không có dữ liá»u</div>')},error:()=>$(".dv2-tam-diem-vb2.dv2-calendar-matchs .dv2-grid").html('<div class="dv2-empty-state">Lá»i tải dữ liá»u</div>')}),DV2HotLeagues.load({ajax:$.ajax,setHotLeaguesRank:t=>{e.hotLeaguesRank=t}})}())});const e={hotLeaguesRank:new Map},t=["half-time","half time","halftime","ht"],a=["first half","firsthalf","first-half","fh","half-time","half time","halftime","ht","second half","secondhalf","second-half","sh","extra time","extratime","extra time","et","overtime","overtime(deprecated)","ot","penalty","penalties","penalty shoot-out","penalty shootout"];const n=DV2MatchSort.createSortedMatchesFunction({mode:"wc-first",liveStatuses:a,hotLeaguesRank:()=>e.hotLeaguesRank});function renderHomeMatches_VB2(i,o="all"){const s=new Date,r=i.filter(e=>{const t=new Date(e.kickoff);if("live"===o)return a.includes(e.status.toLowerCase());if("today"===o){new Date(s).setHours(0,0,0,0);const n=new Date(s);return n.setHours(23,59,59,999),"Finished"!==e.status&&t>s&&t<=n||a.includes(e.status.toLowerCase())}return"tmr"===o?t.getDate()===s.getDate()+1:a.includes(e.status.toLowerCase())||t.getTime()>s.getTime()}).sort((e,t)=>new Date(e.kickoff).getTime()-new Date(t.kickoff).getTime()),l=n(r);console.log("sortedMatches",l);const d=$(".dv2-tam-diem-vb2.dv2-calendar-matchs .dv2-grid");if(d.empty(),!l.length)return void d.html('<div class="dv2-empty-state">Không có tráºn Äấu</div>');const c=l.map(n=>function renderHomeMatchCard_VB2(n){const i=(new Date).toLocaleDateString("en-GB",{day:"2-digit",month:"2-digit"}),o=new Date(n.kickoff).toLocaleDateString("en-GB",{day:"2-digit",month:"2-digit"}),s=new Date(n.kickoff).toLocaleTimeString("vn-VN",{hour:"2-digit",minute:"2-digit",hour12:!1}),r=n.teams?.home||{},l=n.score||{},d=n.teams?.away||{},c=n.league||{},m=e.hotLeaguesRank.has(n.league.id),v=a.includes(n.status.toLowerCase()),u=i===o;return`\n <div class="xitem xitem-big ${m?"hot-game":""}" >\n <a href="/streams/${n?.match_id}" class="match-link"></a>\n ${v?'<div class="stick stick-live">\n <i class="dot"></i>Live\n </div>':""}\n \n <div class="xitem-header">\n <div class="xleague">\n <img\n width="20"\n height="20"\n src="${c.logo}"\n alt="${c.logo}"\n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n />\n <p class="xleague-name">${c.name}</p>\n </div>\n </div>\n <div class="xitem-main">\n <div class="team team-home" style="">\n <div class="team-logo">\n <img\n src="${r.logo}"\n alt="${r.logo}"\n class="team-logo-img"\n loading="lazy"\n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n />\n </div>\n <div class="xname">\n <h3 class="team-name">${r.name}</h3>\n <div class="xcards"></div>\n </div>\n </div>\n <div class="xinfo">\n <div class="time-loaded">
1\n <span class="match-status live"> ${v?t.includes(n.status.toLowerCase())?"HT":null!=n.currentMinutes&&""!==n.currentMinutes?`${n.currentMinutes}'`:"Live":""}</span>\n </div>\n <div class="result">${v?` <div>${l.fulltime.home}</div>\n <div class="xspace">-</div>\n <div>${l.fulltime.away}</div>`:"VS"}\n </div>\n <div class="detail"><b>${s}</b></div>\n ${u?"":`<div class="detail">\n <b>${o}</b>\n </div>`}\n </div>\n <div class="team team-away">\n <div class="team-logo">\n <img\n src="${d.logo}"\n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n alt="${d.logo}"\n class="team-logo-img"\n loading="lazy"\n />\n </div>\n <div class="xname">\n <h3 class="team-name">${d.name}</h3>\n <div class="xcards"></div>\n </div>\n </div>\n </div>\n <div class="xitem-bottom">\n ${function buildCommentatorDropdown_VB2(e){const t=window.DV2BlvDropdown.getSortedLinks(e);return window.DV2BlvDropdown.build({match:e,links:t,getDetailUrl:getDetailUrl_VB2,escapeHtml:escapeHtml_VB2,menuPlacement:"down",emptyHtml:"<div></div>",toggleClass:"xcommentator",renderToggle:({link:e,label:t})=>`\n ${renderVb2BlvAvatar(e,t)}\n <p class="xcommentator-name">${escapeHtml_VB2(t)}</p>\n `,renderItemContent:({link:e,label:t})=>`\n ${renderVb2BlvAvatar(e,t)}\n <span class="xcommentator-name">${escapeHtml_VB2(t)}</span>\n `})}(n)}\n <div class="xitem-buttons">\n <div class="ibs-live">\n <a href="/streams/${n.match_id}" class="btn btn-sm vebo2-btn-bet-hover">Xem ngay</a>\n </div>\n <div class="ibs-bet">\n <a href="${window.DV2_LINK_BET}" target="_blank" rel="nofollow" class="btn btn-sm btn-betnow vebo2-btn-bet">Äặt cược</a>\n </div>\n </div>\n </div>\n </div>\n `}(n)).join("");d.append(`\n ${c}\n `),bindVb2BlvDropdownEvents()}}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery,Hls){$=jQuery.noConflict();const e="https://img.freepik.com/premium-photo/close-up-soccer-player-who-kicks-ball_207634-4089.jpg",t=["first half","firsthalf","first-half","fh","half-time","half time","halftime","ht","second half","secondhalf","second-half","sh","extra time","extratime","extra time","et","overtime","overtime(deprecated)","ot","penalty","penalties","penalty shoot-out","penalty shootout"];let a=null,n=0,i=5e3,o=null,s=null,r=null,l=null,d=0,c=null,m=null;function applyPosterForActiveLink_CK2(){const t=document.getElementById("liveVideo");t&&DV2StreamKickoff.applyPosterForVideo(t,s,e)}function getStreamChrome_CK2(){return window.DV2_StreamChrome}function getStreamVideoWrapper_CK2(){return $(".dv2-layout-ck2 .dv2-video-wrapper").first()}function initStreamPlayerUi_CK2(e){const t=getStreamVideoWrapper_CK2(),a=getStreamChrome_CK2();t.length&&a&&a.initPlayerUi(t,e?$(e):t.find("video").first())}function onHlsStreamReady_CK2(){const e=getStreamChrome_CK2(),t=getStreamVideoWrapper_CK2();e&&t.length&&(o&&e.rememberOddsMatchData?.(t,o),e.onHlsReady(t))}function initStreamOddsPanel_CK2(e){const t=getStreamChrome_CK2(),a=getStreamVideoWrapper_CK2();t&&a.length&&e&&(t.rememberOddsMatchData?.(a,e),t.initOddsPanel?.(a,e))}function clearStreamChrome_CK2(){const e=getStreamChrome_CK2(),t=getStreamVideoWrapper_CK2();e&&t.length&&e.clearFullChrome(t)}function showStreamLoading_CK2(e,t="Äang tải luá»ng phát..."){if(!e?.length)return $();hideStreamLoading_CK2(e);const a=String(t||"Äang tải luá»ng phát...").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),n=$(`\n <div class="dv2-stream-loading" role="status" aria-live="polite" aria-busy="true">\n <div class="dv2-stream-loading__panel">\n <div class="dv2-stream-loading__spinner" aria-hidden="true"></div>\n <p class="dv2-stream-loading__text">${a}</p>\n </div>\n </div>\n `);return e.append(n),n}
1function hideStreamLoading_CK2(e){(e?.length?e:getStreamVideoContainer_CK2()).find(".dv2-stream-loading").remove()}function bindStreamLoadingUntilPlaying_CK2(e,t,a){if(!e?.length||!t)return void a?.();let n=!1;const finish=()=>{n||(n=!0,t.removeEventListener("playing",onPlaying),t.removeEventListener("canplay",onCanPlay),clearTimeout(i),hideStreamLoading_CK2(e),a?.())},onPlaying=()=>finish(),onCanPlay=()=>{t.paused||finish()};t.addEventListener("playing",onPlaying),t.addEventListener("canplay",onCanPlay);const i=setTimeout(finish,12e3)}function clearCk2PlaybackTimers(){c&&(clearTimeout(c),c=null),m&&(clearTimeout(m),m=null)}function destroyCurrentHls_CK2(){if(l){try{l.destroy()}catch(e){}l=null}}function initHLSPlayer(e,t={}){const{enableRetry:i=!1,matchData:s=null}=t;o=s||o,d+=1;const r=d;clearCk2PlaybackTimers(),destroyCurrentHls_CK2();const l=getStreamVideoContainer_CK2();clearMatchOverlays_CK2(l),showStreamLoading_CK2(l,"Äang tải luá»ng phát...");const c=document.getElementById("liveVideo");c.autoplay=!0,c.muted=!0,initStreamPlayerUi_CK2(c),console.log("[VSC LIVE] Initializing HLS player "+(i?"with retry":"without retry")),i&&s?(n=0,a&&(clearTimeout(a),a=null),loadVideoCore(e,s,!0,r)):loadVideoCore(e,null,!1,r)}function loadVideoCore(t,r,v,u){const isStalePlayback=()=>u!==d;console.log(`[VSC LIVE] ${v?"Retrying":"Loading"} video (attempt ${v?n+1:1}${v?"/3":""})`);const h=getStreamVideoContainer_CK2();if(isStalePlayback())return;clearMatchOverlays_CK2(h),showStreamLoading_CK2(h,v&&n>0?`Äang thá» lại luá»ng phát... (${n}/3)`:"Äang tải luá»ng phát...");const p=document.getElementById("liveVideo"),f=r||o;let g=!1;const showFallback=()=>{isStalePlayback()||g||!f||(g=!0,clearCk2PlaybackTimers(),a&&(clearTimeout(a),a=null),destroyCurrentHls_CK2(),hideStreamLoading_CK2(h),function showLiveMatchError(t){if(!t)return;clearStreamChrome_CK2();const a=$(".dv2-layout-ck2 #stream-player"),n=getStreamVideoContainer_CK2();a.empty();const i=document.createElement("video");i.id="liveVideo",i.controls=!1,i.autoplay=!1,i.muted=!0,i.playsInline=!0,i.setAttribute("playsinline","true"),i.poster=DV2StreamKickoff.resolvePosterUrl(s,e),i.style.width="100%",i.style.height="100%",i.style.objectFit="contain";const o=document.getElementById("stream-player");o.innerHTML="",o.appendChild(i),initStreamPlayerUi_CK2(i),renderMatchInfoCard(n,t,"live-error")}(f))};try{if(Hls.isSupported()){c=setTimeout(()=>{isStalePlayback()||(console.error("[VSC LIVE] Manifest load timeout"),showFallback())},15e3);const y=new Hls({maxBufferLength:10,liveSyncDuration:3,enableWorker:!0,xhrSetup:function(e,t){e.withCredentials=!1,e.referrerPolicy="no-referrer-when-downgrade"}});l=y,y.loadSource(t),y.attachMedia(p),y.on(Hls.Events.MANIFEST_PARSED,function(){isStalePlayback()||(console.log("[VSC LIVE] HLS manifest parsed successfully"),clearCk2PlaybackTimers(),a&&(clearTimeout(a),a=null),bindStreamLoadingUntilPlaying_CK2(h,p,()=>{isStalePlayback()||onHlsStreamReady_CK2()}),p.muted=!0,p.play().catch(e=>{console.warn("[VSC LIVE] Autoplay blocked:",e)}))}),y.on(Hls.Events.ERROR,function(e,o){if(!isStalePlayback()){if(console.error("[VSC LIVE] HLS error:",o),o?.fatal&&!v)return clearCk2PlaybackTimers(),void showFallback();o.fatal&&v&&(n++,n<3?(console.log(`[VSC LIVE] Retrying in 5 seconds... (${n}/3)`),a=setTimeout(()=>{isStalePlayback()||(destroyCurrentHls_CK2(),loadVideoCore(t,r,v,u))},i)):(console.error("[VSC LIVE] Max retries reached, showing live match info"),clearCk2PlaybackTimers(),a&&(clearTimeout(a),a=null),destroyCurrentHls_CK2(),showFallback()))}}),p.addEventListener("error",function(){isStalePlayback()||(clearCk2PlaybackTimers(),showFallback())},{once:!0})}else if(p.canPlayType("application/vnd.apple.mpegurl")){m=setTimeout(()=>{isStalePlayback()||(console.error("[VSC LIVE] Native HLS load timeout"),v||showFallback())},15e3),p.playsInline=!0,p.setAttribute("playsinline","true"),p.src=t;var w=!1;function tryPlaySafari(){isStalePlayback()||w||(w=!0,clearCk2PlaybackTimers(),a&&(clearTimeout(a),a=null),bindStreamLoadingUntilPlaying_CK2(h,p,()=>{isStalePlayback()||onHlsStreamReady_CK2()}),p.muted=!0,p.play().catch(e=>{console.warn("[VSC LIVE] Autoplay blocked on Safari:",e)}))}p.addEventListener("canplay",tryPlaySafari,{once:!0}),p.addEventListener("loadedmetadata",function(){setTimeout(function(){!w&&p.readyState>=1&&tryPlaySafari()},400)},{once:!0}),p.addEventListener("error",function(){isStalePlayback()||v||(clearCk2PlaybackTimers(),showFallback())},{once:!0}),v&&p.addEventListener("error",function(){isStalePlayback()||(console.error("[VSC LIVE] Video load error on Safari"),n++,n<3?a=setTimeout(()=>{isStalePlayback()||loadVideoCore(t,r,v,u)},i):(clearCk2PlaybackTimers(),showFallback()))})}else console.error("[VSC LIVE] HLS not supported and not Safari"),show
1Fallback()}catch(S){console.error("[VSC LIVE] Exception during video load:",S),v?(n++,n<3?a=setTimeout(()=>{isStalePlayback()||loadVideoCore(t,r,v,u)},i):(clearCk2PlaybackTimers(),showFallback())):showFallback()}}function getStreamVideoContainer_CK2(){return getStreamVideoWrapper_CK2()}function clearMatchOverlays_CK2(e){const t=e?.length?e:getStreamVideoContainer_CK2();t.length&&t.find("#simulate-the-match-content-center").remove()}function renderMatchInfoCard(e,t,a="countdown"){const{teams:n,league:i,matchInfo:o,score:s}=t,r=n?.home?.name||"Home Team",l=n?.away?.name||"Away Team",d=i?.name||"",c=o?.status||"Not Started";let m="";if("result"===a){const e=s?.fulltime?.home||0,t=s?.fulltime?.away||0,a=n?.home?.logo||"",i=n?.away?.logo||"";m=`\n <li class="flex w-12 h-auto items-center justify-center" style="flex-direction: row;">\n ${a?`<img src="${a}" alt="${r}" style="width:50px;height:50px;border-radius:50%;" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'">`:""}\n <span id="hEndScore" data-dv2-score-home>${e}</span>\n </li>\n <li class="vs">:</li>\n <li class="flex w-12 h-auto items-center justify-center" style="flex-direction: row;">\n <span id="gEndScore" data-dv2-score-away>${t}</span>\n ${i?`<img src="${i}" alt="${l}" style="width:50px;height:50px;border-radius:50%;" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'">`:""}\n </li>\n `}else if("live-error"===a){const e=s?.fulltime?.home||0,t=s?.fulltime?.away||0,a=n?.home?.logo||"",i=n?.away?.logo||"";m=`\n <li class="flex w-12 h-auto items-center justify-center" style="flex-direction: row;">\n ${a?`<img src="${a}" alt="${r}" style="width:50px;height:50px;border-radius:50%;" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'">`:""}\n <span id="hEndScore" data-dv2-score-home>${e}</span>\n </li>\n <li class="vs">:</li>\n <li class="flex w-12 h-auto items-center justify-center" style="flex-direction: row;">\n <span id="gEndScore" data-dv2-score-away>${t}</span>\n ${i?`<img src="${i}" alt="${l}" style="width:50px;height:50px;border-radius:50%;" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'">`:""}\n </li>\n `}else{const e=o?.kickoff;m=`<li colspan="3">${DV2StreamKickoff.renderTimeDisplay(e)}</li>`}const v=`\n <div id="simulate-the-match-content-center" class="flex flex-col justify-center items-center gap-4 p-4">\n <div class="dataBox_pop">\n <ul class="info">\n <li style="display:flex; flex-direction:column; align-items:center;">\n <div class="match-info__lname">${d}</div>\n <h4>${c}</h4>\n <ul class="timeBox">\n ${m}\n </ul>\n <div class="teams flex gap-4 mt-2">\n <div class="homeTeam" title="${r}">${r}</div>\n <div class="vs">VS</div>\n <div class="guestTeam" title="${l}">${l}</div>\n </div>\n </li>\n </ul>\n </div>\n </div>\n `;e.append(v),"countdown"===a&&t?.matchInfo?.kickoff&&DV2StreamKickoff.startCountdown(t.matchInfo.kickoff)}$(document).ready(function(){$(".dv2-layout-ck2 #stream-player").length>0&&function loadStreamData(){const a=function getMatchId_CK2(){let e=new URLSearchParams(window.location.search).get("match");return e||(e="undefined"!=typeof DV2_MATCH_ID&&DV2_MATCH_ID?DV2_MATCH_ID:"2y8m4zh54p4zql0"),e}(),n=getStreamVideoContainer_CK2();console.log("[VSC LIVE] Loading livestream detail for ID:",a);const i=document.createElement("video");i.id="liveVideo",i.controls=!1,i.autoplay=!1,i.muted=!0,i.playsInline=!0,i.setAttribute("playsinline","true"),i.poster=DV2StreamKickoff.resolvePosterUrl(s,e),i.style.width="100%",i.style.height="100%",i.style.objectFit="contain";const l=document.getElementById("stream-player");l.innerHTML="",l.appendChild(i),initStreamPlayerUi_CK2(i),showStreamLoading_CK2(n,"Äang tải thông tin tráºn Äấu..."),$.ajax({url:`https://vsc-apidev.helizones.com/api/data/lives/${a}`,method:"GET",success:function(e){console.log("[VSC LIVE] API response:",e);const a=e?.data;if(!a)return;!function startDetailScorePoll_CK2(e){e&&(r||(r=DV2MatchScorePoll.create({container:".dv2-layout-ck2"})),r.sync(e),r.start())}
1(a),hideStreamLoading_CK2(n),initStreamOddsPanel_CK2(a);const i=function setupStreamLinks_CK2(e){const t=DV2StreamLinks.sortForDetail(e?.livestream?.links);if(!t.length)return null;o=e;const a=DV2StreamLinks.resolveActiveLink(t);return s=a.activeLink,function renderStreamLinks(e,t=0){const a=$(".dv2-stream-links-ck2");e&&0!==e.length&&(a.empty(),e.forEach((n,i)=>{const r=DV2StreamLinks.getBlvName(n,i),l=null!=n.liveId?String(n.liveId):"",d=$(`\n <button type="button"\n class="match_link--button py-1 px-3 font-semibold text-sm capitalize !text-[11px] lg:!text-sm border border-neutral-2 bg-btnlink text-neutral-4 flex items-center gap-1 flex-row-reverse !px-2 lg:!px-3 transition-all duration-150 bg-primary-1 text-white border-primary-1 hover:bg-primary-1 hover:text-white hover:border-primary-1 rounded-3xl \n ${i===t?"active":""}"\n data-link-index="${i}"\n data-live-id="${l}"\n data-stream-url="${n.url}">\n <span class="inline-block">${r}</span>\n </button>\n `);d.on("click",function(){const t=Number($(this).attr("data-link-index")),n=e[t];if(DV2StreamLinks.navigateForLink(n))return;s=n,applyPosterForActiveLink_CK2();const i=$(this).attr("data-live-id");i&&DV2StreamLinks.updateLiveIdInUrl(i),a.find(".match_link--button").removeClass("active"),$(this).addClass("active");const r=getStreamVideoContainer_CK2(),l=$(this).data("stream-url");if(o&&initStreamOddsPanel_CK2(o),function shouldShowPreMatchOverlay_CK2(e){const t=new Date(e?.matchInfo?.kickoff);return!Number.isNaN(t.getTime())&&t.getTime()-Date.now()>9e5}(o)||!l)return clearStreamChrome_CK2(),clearMatchOverlays_CK2(r),void renderMatchInfoCard(r,o,"countdown");clearMatchOverlays_CK2(r),initHLSPlayer(l,{enableRetry:!1,matchData:o})}),a.append(d)}))}(t,a.activeIndex),applyPosterForActiveLink_CK2(),a}(a);applyPosterForActiveLink_CK2();const l=new Date(a?.matchInfo?.kickoff);if(!Number.isNaN(l.getTime())&&l.getTime()-Date.now()>9e5){const showCountdown=()=>{clearStreamChrome_CK2(),renderMatchInfoCard(n,a,"countdown")};return void(window.DV2StreamTvc?.playBeforeStream?window.DV2StreamTvc.playBeforeStream(n,showCountdown):showCountdown())}if("finished"===a?.matchInfo?.status?.toLowerCase())return clearStreamChrome_CK2(),void renderMatchInfoCard(n,a,"result");if(i?.activeLink?.url){const e=i.activeLink.url,o=t.includes(a?.matchInfo?.status?.toLowerCase()),startStream=()=>{initHLSPlayer(e,o?{enableRetry:!0,matchData:a}:{enableRetry:!1})};window.DV2StreamTvc?.playBeforeStream?window.DV2StreamTvc.playBeforeStream(n,startStream):startStream()}},error:function(e,t,a){console.error("[VSC LIVE] API error:",a),hideStreamLoading_CK2(n)}})}()})}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery,Hls){!function($){"use strict";var e="object"==typeof window.dv2Ck2Highlights&&window.dv2Ck2Highlights?window.dv2Ck2Highlights:{},t=e.apiUrl||"https://vsc-apidev.helizones.com/api/data/lives/highlights",a=e.fallbackThumb||("object"==typeof window.dv2Streaming&&window.dv2Streaming&&window.dv2Streaming.strings&&window.dv2Streaming.strings.fallbackThumb?window.dv2Streaming.strings.fallbackThumb:null)||"../../assets/images/highlight.webp",n={},i=0,o=0,s=!1,r=null,l="",d=null;function escapeHtml(e){return String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function buildCard(e){n[e.id]=e;var t=escapeHtml(e.title||""),i=escapeHtml(e.competitionName||""),o=function formatMatchDate(e){if(null==e||""===e)return"";var t=1e3*Number(e);return isFinite(t)?new Date(t).toLocaleDateString("en-US",{month:"long",day:"numeric",year:"numeric"}):""}(e.matchTimeEpoch),s=escapeHtml(function thumbSrc(e){var t=e.thumbnail;return t&&String(t).trim()?t:a}(e));return'<article class="ck2-card" role="listitem" tabindex="0" data-id="'+escapeHtml(e.id)+'"><div class="ck2-card-thumb"><img src="'+s+'" alt="" loading="lazy" onerror="this.onerror=null;this.src=\''+function escapeForSingleQuotedJs(e){return String(e).replace(/\\/g,"\\\\").replace(/'/g,"\\'")}(a)+'\'"><span class="ck2-play" aria-hidden="true"></span></div><div class="ck2-card-body"><p class="ck2-card-title">'+t+'</p><div class="ck2-card-meta"><span class="ck2-card-league">'+i+'</span><span class="ck2-card-date">'+escapeHtml(o)+"</span></div></div></article>"}function setLoading(e){s=e,$("#ck2Loading").prop("hidden",!e),$("#ck2LoadMore").prop("disabled",e)}function fetchPage(e){setLoading(!0),$("#ck2HighlightError").prop("hidden",!0).text("");var a={page:e,size:12};return l&&(a.search=l),$.ajax({url:t,method:"GET",data:a,dataType:"json"}).done(function(t){if(t&&1e3===t.code&&t.result){var a=t.result;o=a.totalPages||0,i=a.currentPage||e;var s=a.data||[];if(1===e&&($("#ck2HighlightGrid").empty(),n={}),1===e&&0===s.length)return $("#ck2HighlightEmpty").prop("hidden",!1),void $("#ck2LoadMore").prop("hidden",!0);$("#ck2HighlightEmpty").prop("hidden",!0);var r=s.map(buildCard).join("");$("#ck2HighlightGrid").append(r),function updateLoadMoreVisibility(){var e=i<o;$("#ck2LoadMore").prop("hidden",!e||0===o)}()}else $("#ck2HighlightError").prop("hidden",!1).text("Không tải ÄÆ°á»£c dữ liá»u highlights.")}).fail(function(){$("#ck2HighlightError").prop("hidden",!1).text("Lá»i kết ná»i. Vui lòng thá» lại sau.")}).always(function(){setLoading(!1)})}function destroyHls(){r&&(r.destroy(),r=null)}function closeModal(){var e=document.getElementById("ck2ModalVideo");destroyHls(),e.removeAttribute("src"),e.load(),$("#ck2VideoModal").prop("hidden",!0).attr("aria-hidden","true")}function onCardActivate(e){var t=n[e];t&&function openModal(e){var t=document.getElementById("ck2ModalVideo");destroyHls(),t.removeAttribute("src"),t.load(),$("#ck2ModalTitle").text(e.title||""),$("#ck2VideoModal").prop("hidden",!1).attr("aria-hidden","false");var a=e.url&&String(e.url).trim(),n=e.urlM3u8&&String(e.urlM3u8).trim();n&&window.Hls&&Hls.isSupported()?((r=new Hls({enableWorker:!0}
1)).attachMedia(t),r.on(Hls.Events.MEDIA_ATTACHED,function(){r.loadSource(n)}),r.on(Hls.Events.MANIFEST_PARSED,function(){t.play().catch(function(){})})):n&&t.canPlayType("application/vnd.apple.mpegurl")?(t.src=n,t.play().catch(function(){})):a?(t.src=a,t.play().catch(function(){})):$("#ck2ModalTitle").text((e.title||"")+" â Không phát ÄÆ°á»£c video trên trình duyá»t nà y.")}(t)}$(function(){$("#ck2HighlightGrid").length&&(fetchPage(1),$("#ck2HighlightSearch").on("input",function(){var e=$(this).val();clearTimeout(d),d=setTimeout(function(){l=String(e).trim(),fetchPage(1)},350)}),$("#ck2LoadMore").on("click",function(){s||i>=o||fetchPage(i+1)}),$("#ck2HighlightGrid").on("click",".ck2-card",function(){onCardActivate($(this).data("id"))}),$("#ck2HighlightGrid").on("keydown",".ck2-card",function(e){"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),onCardActivate($(this).data("id")))}),$(document).on("click","[data-close-modal]",closeModal),$(document).on("keydown",function(e){"Escape"!==e.key||$("#ck2VideoModal").prop("hidden")||closeModal()}))})}(jQuery)}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery){$=jQuery.noConflict();const e={hotLeaguesRank:new Map};let t=null;function isNhaDaiLivestreamLink(e){if(!e)return!1;if(1e17===e.commentatorId)return!0;const t=String(e.commentator||"").trim().toLowerCase();return"nhà Äà i"===t||"nha dai"===t||"blv nhà Äà i"===t}$(document).ready(()=>{$(".dv2-ck2-home-featured-streams").length>0&&function loadHomeMatchesData_CK2(){const n=$(".dv2-ck2-home-featured-streams");if(n.empty(),function stopFeaturedMatchScorePolling(){t?.stop()}(),t?.destroy?.(),t=null,""!==("undefined"!=typeof DV2_MATCH_ID&&DV2_MATCH_ID?DV2_MATCH_ID:""))return void $.ajax({url:"https://vsc-apidev.helizones.com/api/data/lives/"+DV2_MATCH_ID,method:"GET",contentType:"application/json",success:e=>{if(e&&e.data)try{const t=renderHomeMatchCard_CK2(e.data);n.append(t),syncFeaturedMatchSnapshot(e.data),startFeaturedMatchScorePolling()}catch(e){console.error("[CK2 home-match] Render error:",e),n.html('<div class="dv2-empty-state">Lá»i hiá»n thá» dữ liá»u tráºn Äấu.</div>')}else n.html('<div class="dv2-empty-state">Không có dữ liá»u cho MATCH_ID.</div>')},error:()=>n.html('<div class="dv2-empty-state">Lá»i tải dữ liá»u MATCH_ID</div>')});const i=new Date,o=new Date(i);o.setDate(i.getDate()+1);const s={fromDate:i.toISOString().split("T")[0],toDate:o.toISOString().split("T")[0]};function renderFirstFeaturedMatch(e){if("success"!==e?.status||!e?.matches_by_date)return void n.html('<div class="dv2-empty-state">Không có dữ liá»u</div>');let t=[];Object.values(e.matches_by_date).forEach(e=>{t=t.concat(e)}),t=t.filter(e=>"finished"!==e?.status?.toLowerCase());const i=a(t);if(!i.length)return void n.html('<div class="dv2-empty-state">Hiá»n tại không có tráºn Äấu nà o Äang diá»
n ra.</div>');const o=i[0],s=renderHomeMatchCard_CK2(o);n.append(s),syncFeaturedMatchSnapshot(o),startFeaturedMatchScorePolling()}DV2HotLeagues.load({ajax:$.ajax,setHotLeaguesRank:t=>{e.hotLeaguesRank=t}}).always(()=>{$.ajax({url:"https://vsc-apidev.helizones.com/api/data/lives/range-date",method:"POST",contentType:"application/json",data:JSON.stringify(s),success:renderFirstFeaturedMatch,error:()=>n.html('<div class="dv2-empty-state">Lá»i tải dữ liá»u</div>')})})}()});const a=DV2MatchSort.createSortedMatchesFunction({mode:"wc-when-live-or-soon",liveStatuses:["first half","firsthalf","first-half","fh","half-time","half time","halftime","ht","second half","secondhalf","second-half","sh","extra time","extratime","extra time","et","overtime","overtime(deprecated)","ot","penalty","penalties","penalty shoot-out","penalty shootout"],hotLeaguesRank:()=>e.hotLeaguesRank,wcSoonMinutes:10});function syncFeaturedMatchSnapshot(e){t||(t=DV2MatchScorePoll.create({container:".dv2-ck2-home-featured-streams"})),t.sync(e)}function startFeaturedMatchScorePolling(){t?.start()}function renderHomeMatchCard_CK2(e){console.log(e);const t=new Date(e?.matchInfo?.kickoff??e?.kickoff).toLocaleTimeString("vi-VN",{hour:"2-digit",minute:"2-digit",day:"2-digit",month:"2-digit",year:"numeric",hour12:!1});console.log(t);const a=e?.teams?.home||{},n=e?.score||{},i=e?.teams?.away||{},o=e?.league||{},s=function normalizeMatchStats_CK2(e,t){const a={...t};if(!e||"object"!=typeof e)return a;for(const n of Object.keys(t))a[n]={home:e[n]?.home??t[n].home,away:e[n]?.away??t[n].away};return a}(e.stats,{possession:{home:0,away:0},shotsOnTarget:{home:0,away:0},corners:{home:0,away:0},fouls:{home:0,away:0}}),r=s.corners.home+s.corners.away,l=s.shotsOnTarget.home+s.shotsOnTarget.away,d=function getPreferredLivestreamLink(e){const t=e?.livestream?.links;return Array.isArray(t)&&t.length?(function sortLivestreamLinksPreferRealBlv(e){Array.isArray(e)&&e.sort((e,t)=>
1{const a=isNhaDaiLivestreamLink(e),n=isNhaDaiLivestreamLink(t);return a&&!n?1:!a&&n?-1:0})}(t),t[0]||null):null}(e),c=function getMatchIdFromMatch(e){return DV2MatchScorePoll.getMatchId(e)}(e),m=n?.fulltime?.home??0,v=n?.fulltime?.away??0;return`\n <div class="flex flex-col xl:gap-4">\n <div class="w-full">\n <div class="pb-7 lg:pt-7 m-auto">\n <div class="relative">\n <a\n href="/streams/${c}" \n class="absolute top-0 left-0 w-full h-full z-10"\n ></a>\n <div\n class="match-card-featured flex flex-col lg:flex-row gap-4 xl:gap-7 justify-center items-center"\n >\n <div\n class="match-info-primary text-white flex-1 w-full px-2 lg:px-0"\n >\n <div class="event-league text-center md:pb-4">\n <div\n class="flex justify-center items-center gap-2 mb-2 md:mb-4 text-text"\n >\n <img\n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n width="20"\n height="20"\n src="${o.logo}"\n alt="${o.logo}"\n />\n ${o.name}\n </div>\n <div\n class="inline-flex gap-1.5 items-center font-semibold overflow-hidden hidden md:inline-flex rounded-3xl"\n style="background-color: #4986f7"\n >\n <img\n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n src=${d?.avatar||""}\n alt=${d?.commentator||""}\n class="w-8 h-8 rounded-full m-0.5"\n /><span class="pr-3 py-1 text-sm md:text-base py-2 !pr-4">${d?.commentator||""}</span>\n \n </div>\n </div>\n <div\n class="flex flex-row justify-between items-stretch gap-3 lg:gap-5 xl:gap-10 border-b border-gradient pb-4 mb-5"\n >\n <div\n class="flex-1 items-center justify-start flex flex-col lg:flex-row-reverse gap-2 lg:gap-4 text-center"\n >\n <div\n class="inline-flex justify-center items-center max-w-max p-2 lg:p-3 bg-[#5a5a5a] bg-opacity-25 rounded-full"\n >\n <img\n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n class="w-10 h-10 md:w-16 md:h-16 object-cover rounded-full flex"\n rel="nofollow"\n src="${a.logo}"\n alt="${a.logo}"\n />\n </div>\n <h5\n class="team-name text-base lg:text-2xl font-medium line-clamp-2 lg:text-right flex-1 min-h-10 lg:min-h-auto"\n >\n ${a.name}\n </h5>\n </div>\n <div\n class="text-2xl font-medium flex flex-col items-center justify-center gap-3"\n >\n ${e?.currentMinute??e?.currentMinutes?`<span class="time text-minute font-normal text-sm lg:text-base capitalize" data-dv2-score-minute>\n ${e?.currentMinute??e?.currentMinutes}'\n </span>`:""} <span\n ><span class="" data-dv2-score-home>${m}</span> -\x3c!-- --\x3e\n <span class="" data-dv2-score-away>${v}</span></span\n ><span class="time text-sm font-medium">${t}</span>\n </div>\n <div\n class="flex-1 items-center justify-start flex flex-col lg:flex-row gap-2 lg:gap-4 text-center"\n >\n <div\n class="inline-flex justify-center items-center max-w-max p-2 lg:p-3 bg-[#5a5a5a] bg-
1opacity-25 rounded-full"\n >\n <img\n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n class="w-10 h-10 md:w-16 md:h-16 object-cover rounded-full flex"\n rel="nofollow"\n src="${i.logo}"\n alt="${i.logo}"\n />\n </div>\n <h5\n class="team-name text-base lg:text-2xl font-medium line-clamp-2 lg:text-left flex-1 min-h-10 lg:min-h-auto"\n >\n ${i.name}\n </h5>\n </div>\n </div>\n <div class="flex gap-1 justify-between md:justify-center">\n <div\n class="inline-flex gap-1.5 items-center font-semibold overflow-hidden md:hidden rounded-3xl"\n style="background-color: #4986f7"\n >\n <img \n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n src="${d?.avatar||""}"\n alt="${d?.commentator||""}" class="w-8 h-8\n rounded-full m-0.5" /><span\n class="pr-3 py-1 text-xs py-2 !pr-4 whitespace-nowrap text-ellipsis overflow-hidden"\n >${d?.commentator||""}</span\n >\n </div>\n <div\n class="flex gap-1 shrink-0 justify-center z-10 relative"\n >\n <a class="cakhia-btn py-1 px-4 rounded-3xl font-semibold text-sm capitalize leading-5 bg-primary py-2 rounded-3xl cakhia-btn-hover"\n href="/streams/${c}">Trá»±c tiếp</a>\n <a\n href="${window.DV2_LINK_BET}"\n target="_blank" rel="nofollow"\n class="cakhia-btn-bet text-white py-1 px-3 rounded-3xl font-semibold text-sm capitalize text-sm leading-5 bg-primary-1 py-2 px-5 rounded-3xl"\n >Äặt cược</a>\n </div>\n </div>\n </div>\n <div\n class="match-stats text-neutral-4 text-sm flex-col gap-2 xl:flex"\n >\n <div\n class="o-row flex md:gap-4 xl:gap-7 items-center justify-between py-3 md:px-3 px-5 bg-stats rounded-2xl backdrop-blur-sm"\n >\n <div class="team team-home flex items-center gap-4">\n <span class="w-8" id="home-possession">${s?.possession?.home}%</span>\n <div\n class="md:w-16 xl:w-20 bg-neutral-2 rounded-full h-1.5 flex justify-end"\n >\n <div\n class="bg-neutral-3 h-1.5 rounded-full" id="home-possessionPercent"\n style="width: ${s?.possession?.home}%"\n ></div>\n </div>\n </div>\n <div class="title text-white capitalize text-xs xl:text-sm">\n Kiá»m soát bóng\n </div>\n <div\n class="team team-away flex items-center gap-4 text-primary-1"\n >\n <div\n class="md:w-16 xl:w-20 bg-neutral-2 rounded-full h-1.5"\n >\n <div\n class="h-1.5 rounded-full bg-primary-1" id="away-possessionPercent"\n style="width: ${s?.possession?.away}%"\n ></div>\n </div>\n <span class="w-8 text-right" id="away-possession">${s?.possession?.away}%</span>\n </div>\n </div>\n <div\n class="o-row flex md:gap-4 xl:gap-7 items-center justify-between py-3 md:px-3 px-5 bg-stats rounded-2xl backdrop-blur-sm"\n >\n <div class="team team-home flex items-center gap-4">
1\n <span class="w-8" id="home-corners">${s?.corners?.home}</span>\n <div\n class="md:w-16 xl:w-20 bg-neutral-2 rounded-full h-1.5 flex justify-end"\n >\n <div\n class="bg-neutral-3 h-1.5 rounded-full" id="home-cornersPercent"\n style="width: ${0!==r?s?.corners?.home/r:0}"\n ></div>\n </div>\n </div>\n <div class="title text-white capitalize text-xs xl:text-sm">\n Góc\n </div>\n <div\n class="team team-away flex items-center gap-4 text-primary-1"\n >\n <div\n class="md:w-16 xl:w-20 bg-neutral-2 rounded-full h-1.5"\n >\n <div\n class="h-1.5 rounded-full bg-primary-1" id="away-cornersPercent"\n style="width: ${0!==r?s?.corners?.away/r:0}"\n ></div>\n </div>\n <span class="w-8 text-right" id="away-corners">${s?.corners?.away}</span>\n </div>\n </div>\n <div\n class="o-row flex md:gap-4 xl:gap-7 items-center justify-between py-3 md:px-3 px-5 bg-stats rounded-2xl backdrop-blur-sm"\n >\n <div class="team team-home flex items-center gap-4">\n <span class="w-8">0</span>\n <div\n class="md:w-16 xl:w-20 bg-neutral-2 rounded-full h-1.5 flex justify-end"\n >\n <div\n class="bg-neutral-3 h-1.5 rounded-full"\n style="width: 0%"\n ></div>\n </div>\n </div>\n <div class="title text-white capitalize text-xs xl:text-sm">\n Thẻ và ng\n </div>\n <div\n class="team team-away flex items-center gap-4 text-primary-1"\n >\n <div\n class="md:w-16 xl:w-20 bg-neutral-2 rounded-full h-1.5"\n >\n <div\n class="h-1.5 rounded-full bg-primary-1"\n style="width: 0%"\n ></div>\n </div>\n <span class="w-8 text-right">0</span>\n </div>\n </div>\n <div\n class="o-row flex md:gap-4 xl:gap-7 items-center justify-between py-3 md:px-3 px-5 bg-stats rounded-2xl backdrop-blur-sm"\n >\n <div class="team team-home flex items-center gap-4">\n <span class="w-8">0</span>\n <div\n class="md:w-16 xl:w-20 bg-neutral-2 rounded-full h-1.5 flex justify-end"\n >\n <div\n class="bg-neutral-3 h-1.5 rounded-full"\n style="width: 0%"\n ></div>\n </div>\n </div>\n <div class="title text-white capitalize text-xs xl:text-sm">\n Thẻ Äá»\n </div>\n <div\n class="team team-away flex items-center gap-4 text-primary-1"\n >\n <div\n class="md:w-16 xl:w-20 bg-neutral-2 rounded-full h-1.5"\n >\n <div\n class="h-1.5 rounded-full bg-primary-1"\n style="width: 0%"\n ></div>\n </div>
1\n <span class="w-8 text-right">0</span>\n </div>\n </div>\n <div\n class="o-row flex md:gap-4 xl:gap-7 items-center justify-between py-3 md:px-3 px-5 bg-stats rounded-2xl backdrop-blur-sm"\n >\n <div class="team team-home flex items-center gap-4">\n <span class="w-8" id="home-shots">${s?.shotsOnTarget?.home}</span>\n <div\n class="md:w-16 xl:w-20 bg-neutral-2 rounded-full h-1.5 flex justify-end"\n >\n <div\n class="bg-neutral-3 h-1.5 rounded-full" id="home-shotsPercent"\n style="width: ${0!==l?s?.shotsOnTarget?.home/l:0}"\n ></div>\n </div>\n </div>\n <div class="title text-white capitalize text-xs xl:text-sm">\n Sút trúng ÄÃch\n </div>\n <div\n class="team team-away flex items-center gap-4 text-primary-1"\n >\n <div\n class="md:w-16 xl:w-20 bg-neutral-2 rounded-full h-1.5"\n >\n <div\n class="h-1.5 rounded-full bg-primary-1" id="away-shotsPercent"\n style="width: ${0!==l?s?.shotsOnTarget?.away/l:0}"\n ></div>\n </div>\n <span class="w-8 text-right" id="away-shots">${s?.shotsOnTarget?.away}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n `}}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery){($=jQuery.noConflict())(document).ready(()=>{$(".dv2-list-match").length>0&&async function loadHomeMatchesData_CK2(){const t=new Date,a=new Date(t),n=new Date(t);n.setDate(t.getDate()-1),a.setDate(t.getDate()+1);const i={fromDate:n.toISOString().split("T")[0],toDate:a.toISOString().split("T")[0]};$.ajax({url:"https://vsc-apidev.helizones.com/api/data/lives/range-date",method:"POST",contentType:"application/json",data:JSON.stringify(i),success:e=>{if(e&&e.matches_by_date){const t=[];Object.keys(e.matches_by_date).forEach(a=>t.push(...e.matches_by_date[a]));const a=t.filter(e=>"Finished"!==e.status);renderLiveMatch_CK2(a),function setupFilterButtons_CK2(e){$(".dv2-list-match .dv2-filter-btn").off("click").on("click",function(){$(".dv2-list-match .dv2-filter-btn").removeClass("from-[#FA764C] to-[#C84217]"),$(this).addClass("from-[#FA764C] to-[#C84217]"),renderLiveMatch_CK2(e,$(this).data("filter"))})}(a)}else $(".dv2-list-match").html('<div class="dv2-empty-state">Không có dữ liá»u</div>')},error:()=>$(".dv2-list-match").html('<div class="dv2-empty-state">Lá»i tải dữ liá»u</div>')}),DV2HotLeagues.load({ajax:$.ajax,setHotLeaguesRank:t=>{e.hotLeaguesRank=t}})}()});const e={hotLeaguesRank:new Map},t=["first half","firsthalf","first-half","fh","half-time","half time","halftime","ht","second half","secondhalf","second-half","sh","extra time","extratime","extra time","et","overtime","overtime(deprecated)","ot","penalty","penalties","penalty shoot-out","penalty shootout"],a=1e17;function isNhaDaiLivestreamLink(e){if(!e)return!1;if(e.commentatorId===a)return!0;const t=String(e.commentator||"").trim().toLowerCase();return"nhà Äà i"===t||"nha dai"===t||"blv nhà Äà i"===t}const n=DV2MatchSort.createSortedMatchesFunction({mode:"wc-first",liveStatuses:t,hotLeaguesRank:()=>e.hotLeaguesRank});function renderLiveMatch_CK2(a,i="all"){const o=new Date,s=a.filter(e=>{const a=new Date(e.kickoff);if("live"===i)return t.includes(e.status.toLowerCase());if("today"===i){new Date(o).setHours(0,0,0,0);const n=new Date(o);return n.setHours(23,59,59,999),"Finished"!==e.status&&a>o&&a<=n||t.includes(e.status.toLowerCase())}return"tmr"===i?a.getDate()===o.getDate()+1:t.includes(e.status.toLowerCase())||a.getTime()>o.getTime()}).sort((e,t)=>
1new Date(e.kickoff).getTime()-new Date(t.kickoff).getTime()),r=n(s),l=$(".dv2-container-ck2");if(l.empty(),!r.length)return void l.html('<div class="dv2-empty-state">Hiá»n tại không có tráºn Äấu nà o Äang diá»
n ra.</div>');const d=r.map((a,n)=>function renderHomeMatchCard_VB2(a,n){const i=(new Date).toLocaleDateString("en-GB",{day:"2-digit",month:"2-digit"}),o=new Date(a.kickoff).toLocaleDateString("en-GB",{day:"2-digit",month:"2-digit"}),s=new Date(a.kickoff).toLocaleTimeString("vn-VN",{hour:"2-digit",minute:"2-digit",hour12:!1}),r=a.teams?.home||{},l=a.score||{},d=a.teams?.away||{},c=a.league||{},m=function getPreferredLivestreamLink(e){const t=e?.livestream?.links;return Array.isArray(t)&&t.length?(function sortLivestreamLinksPreferRealBlv(e){Array.isArray(e)&&e.sort((e,t)=>{const a=isNhaDaiLivestreamLink(e),n=isNhaDaiLivestreamLink(t);return a&&!n?1:!a&&n?-1:0})}(t),t[0]||null):null}(a),v=e.hotLeaguesRank.has(a.league.id),u=t.includes(a.status.toLowerCase()),h=i===o;return`\n <div\n class="match-info-primary text-white lg:flex lg:flex-row lg:items-center gap-5 lg:border-b border-0 lg:justify-between lg:py-5 lg:px-4 relative border-gradient-2 ${n%2==0?"bg-[#252E3F]":"bg-transparent"}"\n >\n <a class="absolute top-0 left-0 w-full h-full ${v?"ck2-list-match-hot":""}" href="/streams/${a?.match_id}"></a>\n <div class="hidden lg:flex lg:flex-col-reverse 2xl:flex-row gap-2 lg:flex-1 lg:items-start 2xl:items-center">\n <div class="w-full max-w-44 flex">\n <div class="inline-flex gap-1.5 items-center font-semibold overflow-hidden text-xs rounded-3xl"\n style="background-color:#4986F7"><img \n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'" \n src=${m?.avatar||""}\n alt=${m?.commentator||""} class="w-8 h-8 rounded-full m-0.5"><span\n class="pr-3 py-1 whitespace-nowrap text-ellipsis overflow-hidden max-w-40">${m?.commentator||""}</span>\n </div>\n </div>\n <div class="event-league pointer-events-none">\n <div class="relative flex items-center gap-2 text-neutral-3">\n <div class="flex items-center justify-center gap-2">\n <img width="20" height="20" src="${c.logo}" alt="${c.logo}" \n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"/>\n <span class="text-sm line-clamp-2 max-w-36">${c.name}</span>\n </div>\n </div>\n </div>\n </div>\n <div class="lg:w-full lg:max-w-[500px] ">\n <div class="event-league text-center p-3 pt-4 lg:hidden">\n <div class="relative flex justify-center items-center gap-2 text-neutral-3">\n <div class="flex items-center justify-center gap-2"> <img width="20" height="20" src="${c.logo}" onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n alt="${c.logo}" />\n <span class="text-sm line-clamp-2 max-w-36">${c.name}</span>\n </div>\n </div>\n ${u?' <div class="h-6 flex flex-1 absolute right-0">\n <div class="flex items-center justify-center gap-1 live"><i class="fa-solid fa-circle" style="color: rgb(247 73 73)" \n aria-hidden="true"></i>\n <span class="text-sm text-primary font-semibold">Live</span>\n </div>\n </div>':""}\n \n </div>\n <div\n class="flex flex-row justify-center items-stretch gap-5 px-3 pb-3 mb-3 border-b border-gradient lg:p-0 lg:border-none lg:mb-0">\n <div class="flex-1 items-center justify-start flex flex-col gap-4 text-center lg:flex-row">\n <div class="inline-flex justify-center items-center max-w-max flex-1 basis-full"><img loading="lazy"\n class="w-12 h-12 object-cover rounded-full" rel="nofollow" src="${r.logo}" alt="${r.logo}"\n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n >\n </div>\n <h5 class="team-name text-sm font-medium line-clamp-2 min-h-10 lg:min-h-0 max-w-36 lg:text-left">\n ${r.name}</h5>\n </div>\n <div class="w-24">\n <div class="text-2xl font-medium flex flex-col items-center justify-center gap-3"><span\n class="time text-minute font-normal text-sm lg:text-base capitalize"> ${a?.currentMinutes?`<span class="time text-minute font-normal text-sm lg:text-base capitalize">\n ${a?.currentMinutes}'\n </span>`:""}</span><span>${u?`${l.fulltime.home} - ${l.fulltime.away}
1`:"VS"}</span>\n </span>\n <span class="time text-sm font-medium">${s} ${h?"":`${o}`}</span></div>\n </div>\n <div class="flex-1 items-center justify-start flex flex-col gap-4 text-center lg:flex-row-reverse">\n <div class="inline-flex justify-center items-center max-w-max flex-1 basis-full"><img loading="lazy"\n class="w-12 h-12 object-cover rounded-full" rel="nofollow" src="${d.logo}" alt="${d.logo}"\n onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n >\n </div>\n <h5 class="team-name text-sm font-medium line-clamp-2 min-h-10 lg:min-h-0 max-w-36 lg:text-right">\n ${d.name}</h5>\n </div>\n </div>\n </div>\n \n <div class="flex justify-between items-center gap-2 px-3 pb-4 lg:flex-1 lg:justify-end lg:p-0 z-10 relative">\n <div class="inline-flex gap-1.5 items-center font-semibold overflow-hidden lg:hidden text-xs rounded-3xl"\n style="background-color:#4986F7"><img src=${m?.avatar||""} onerror="this.src='https://img.winfast.dev/assets/upload/football/team/images/teamicon.png'"\n alt=${m?.commentator||""} class="w-8 h-8 rounded-full m-0.5"><span\n class="pr-3 py-1 whitespace-nowrap text-ellipsis overflow-hidden">${m?.commentator||""}</span>\n </div>\n <div class="flex gap-1 shrink-0 lg:flex-col 2xl:flex-row lg:gap-2 z-10 relative text-center">\n ${u?` <a\n class="py-1 px-4 rounded-3xl font-semibold text-sm capitalize leading-5 bg-primary py-2 text-xs lg:text-sm lg:w-28 lg:leading-[22px] cakhia-btn-hover"\n href="/streams/${a?.match_id}">Trá»±c tiếp</a>`:'<button type="button" class="py-1 px-3 font-semibold text-sm capitalize text-sm border py-2 lg:w-28 text-xs lg:text-sm text-neutral-3 border-neutral-3 rounded-3xl"><span class="inline-block">Sắp diá»
n ra</span></button>'}\n <a href="${window.DV2_LINK_BET}"\n target="_blank" rel="nofollow"\n class="cakhia-btn-bet text-white py-1 px-3 rounded-3xl font-semibold text-sm capitalize text-sm leading-5 bg-primary-1 py-2 text-xs lg:text-sm">Äặt\n cược</a>\n </div>\n </div>\n </div>\n </div>\n `}(a,n)).join("");l.append(`\n ${d}\n `)}}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper),function(window,$,jQuery){$=jQuery.noConflict();const e="https://vsc-apidev.helizones.com/api/data/",t={hotLeaguesRank:new Map};function isNhaDaiLivestreamLink(e){if(!e)return!1;if(1e17===e.commentatorId)return!0;const t=String(e.commentator||"").trim().toLowerCase();return"nhà Äà i"===t||"nha dai"===t||"blv nhà Äà i"===t}function escapeHtml(e){return String(e??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function getDetailUrl(e,t){return window.DV2StreamLinks.getDetailUrl(e,t,{trailingSlash:!1})}function renderBlvAvatar(e,t,a){const n=e?.avatar;return n?`<img src="${escapeHtml(n)}" alt="${escapeHtml(t)}" class="${a}" onerror="this.style.display='none'">`:""}function buildCommentatorDropdown(e){const t=function getSortedCommentatorLinks(e){return window.DV2StreamLinks?.sortForDetail?window.DV2StreamLinks.sortForDetail(e?.livestream?.links):function sortLivestreamLinksPreferRealBlv(e){return Array.isArray(e)?(e.sort((e,t)=>{const a=isNhaDaiLivestreamLink(e),n=isNhaDaiLivestreamLink(t);return a&&!n?1:!a&&n?-1:0}),e):[]}(Array.isArray(e?.livestream?.links)?[...e.livestream.links]:[])}(e);return t.length?window.DV2BlvDropdown.build({match:e,links:t,getDetailUrl:getDetailUrl,escapeHtml:escapeHtml,menuPlacement:"up",toggleClass:"ck2-blv-dropdown__toggle--pill inline-flex gap-1.5 items-center font-semibold text-sm rounded-3xl",renderToggle:({link:e,label:t,esc:a})=>`\n ${renderBlvAvatar(e,t,"w-8 h-8 rounded-full m-0.5")}
1\n <span class="py-1 whitespace-nowrap text-ellipsis overflow-hidden max-w-[120px]">${a(t)}</span>\n `,renderItemContent:({link:e,label:t,esc:a})=>`\n ${renderBlvAvatar(e,t,"dv2-blv-dropdown__avatar")}\n <span class="dv2-blv-dropdown__label">${a(t)}</span>\n `}):'\n <div class="inline-flex gap-1.5 items-center font-semibold overflow-hidden text-sm rounded-3xl" style="background-color: #4986f7">\n <span class="pr-3 py-1 whitespace-nowrap text-ellipsis overflow-hidden">BLV Nhà Äà i</span>\n </div>\n '}function bindCk2BlvDropdownEvents(){window.DV2BlvDropdown.bind($("#match_list_ck2_container"),{namespace:"ck2BlvDropdown"})}let a=[],n=0;$(document).ready(function(){!function loadSuggestedStreamData(){const o=new Date,s=new Date(o);s.setDate(o.getDate()+1);const r={fromDate:o.toISOString().split("T")[0],toDate:s.toISOString().split("T")[0]};console.log("[VSC LIVE] Loading suggested streams:",r),DV2HotLeagues.load({url:`${e}lives/competitions/hot`,ajax:$.ajax,setHotLeaguesRank:e=>{t.hotLeaguesRank=e}}),$.ajax({url:`${e}lives/range-date`,method:"POST",contentType:"application/json",data:JSON.stringify(r),success:function(e){if(console.log("[VSC LIVE] Suggested streams API response:",e),"success"===e?.status&&e?.matches_by_date){let t=[];Object.values(e.matches_by_date).forEach(e=>{t=t.concat(e)}),t=t.filter(e=>"finished"!==e?.status?.toLowerCase());const o=i(t);console.log("[VSC LIVE] Filtered and sorted matches:",o.length),console.log("[VSC LIVE] First few matches:",o.slice(0,3).map(e=>({id:e.match_id,status:e.status,teams:`${e.teams?.home?.name} vs ${e.teams?.away?.name}`,kickoff:e.kickoff}
1))),a=o,n=0,function initSuggestedStreams(){const e=$("#match_list_ck2_container");if(e.empty(),console.log("allMatchesGlobal",a),!a.length)return e.html('<div class="no-matches">Hiá»n tại không có tráºn Äấu nà o Äang diá»
n ra.</div>'),void updateSuggestedLoadMoreVisibility();renderNextSuggestedBatch(),bindCk2BlvDropdownEvents(),$("#ck2SuggestedLoadMore").off("click").on("click",renderNextSuggestedBatch)}()}else console.error("[VSC LIVE] Invalid API response"),showError("Không thá» tải danh sách tráºn Äấu")},error:function(e,t,a){console.error("[VSC LIVE] API error:",a),showError("Có lá»i xảy ra khi tải dữ liá»u")}})}()});const i=DV2MatchSort.createSortedMatchesFunction({mode:"wc-first",liveStatuses:["first half","firsthalf","first-half","fh","half-time","half time","halftime","ht","second half","secondhalf","second-half","sh","extra time","extratime","extra time","et","overtime","overtime(deprecated)","ot","penalty","penalties","penalty shoot-out","penalty shootout"],hotLeaguesRank:()=>t.hotLeaguesRank});function renderNextSuggestedBatch(){const e=$("#match_list_ck2_container"),i=a.slice(n,n+12);if(!i.length)return void updateSuggestedLoadMoreVisibility();let o="";i.forEach(e=>{o+=function generateMatchBlock(e){const a=e?.teams?.home,n=e?.teams?.away,i=e?.league,o=e?.score,s=e?.status?.toLowerCase()||"not started",r=["first half","firsthalf","first-half","fh","half-time","half time","halftime","ht","second half","secondhalf","second-half","sh","extra time","extratime","extra time","et","overtime","overtime(deprecated)","ot","penalty","penalties","penalty shoot-out","penalty shootout"].includes(s);let l="";l=r?e?.currentMinutes?`${e.currentMinutes}'`:function getCurrentMatchTime(e){const t=e?.status?.toLowerCase();return"first half"===t?"45+":"half-time"===t||"half time"===t?"HT":"second half"===t?"90+":"LIVE"}(e):"";const d=o?.fulltime?.home||0,c=o?.fulltime?.away||0,m=function getMatchId(e){return e?.match_id||e?.matchId||e?.id||e?.slug||""}(e);return`\n <div class="match-info-primary w-full match_list--item ${t.hotLeaguesRank.has(e.league.id)?"hot-match":""} ">\n <div class="bg-white text-black rounded-xl flex flex-col h-full">\n <div class="relative flex-1">\n <a class="match_item--link absolute top-0 left-0 w-full h-full"\n href="/streams/${m}"></a>\n <div class="event-league text-center p-3 pt-2">\n <div class="flex justify-between items-center gap-2 text-neutral-3">\n <div class="text-primary font-medium flex items-center gap-1 uppercase flex-1">\n ${r?`<img decoding="async" src="${DV2_IMAGE_PATH}cakhia/hot.png" alt="hot" class="">Live`:""}\n </div>\n <div class="flex items-center justify-center gap-2">\n <img decoding="async" class="match_item--llogo icon-cup text-2xl leading-6" src="${i?.logo||""}" alt="${i?.name||""}" style="width: 24px; height: 24px;"/>\n <span class="match_item--lname text-sm whitespace-nowrap text-ellipsis overflow-hidden max-w-[150px]">\n ${i?.name||""}\n </span>\n </div>\n <div class="h-6 flex flex-1 justify-end"></div>\n </div>\n </div>\n <div class="flex flex-row justify-between items-stretch gap-3 px-2">\n <div class="flex-1 items-center justify-start flex flex-col gap-4 text-center">\n <div class="match_item--home-logo inline-flex justify-center items-center max-w-max">\n <img class="w-12 h-12 object-cover rounded-full" rel="nofollow"\n src="${a?.logo||""}"\n alt="${a?.name||""}">\n </div>\n <h5 class="match_item--home-name team-name text-sm lg:text-base lg:leading-5 font-medium line-clamp-2 min-h-10 lg:min-h-auto">\n ${a?.name||""}\n </h5>\n </div>\n <div class="text-2xl font-medium flex flex-col items-center justify-center gap-3">\n ${l?`<span class="match_item--current-time time text-minute font-normal text-sm lg:text-base capitalize">${l}</span>`:""}
1\n <span>\n ${r||"finished"===s?`<span class="match_item--home-score">${d}</span> - <span class="match_item--away-score">${c}</span>`:'<span class="">vs</span>'}\n </span>\n <span class="match_item--kickoff-time time text-sm font-medium">${function formatKickoffTime(e){if(!e)return"";const t=new Date(e);return`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")} ${t.getDate().toString().padStart(2,"0")}/${(t.getMonth()+1).toString().padStart(2,"0")}`}(e?.kickoff)}</span>\n </div>\n <div class="flex-1 items-center justify-start flex flex-col gap-4 text-center">\n <div class="match_item--away-logo inline-flex justify-center items-center max-w-max">\n <img loading="lazy" class="w-12 h-12 object-cover rounded-full" rel="nofollow"\n src="${n?.logo||""}"\n alt="${n?.name||""}">\n </div>\n <h5 class="match_item--away-name team-name text-sm lg:text-base lg:leading-5 font-medium line-clamp-2 min-h-10 lg:min-h-auto">\n ${n?.name||""}\n </h5>\n </div>\n </div>\n </div>\n <div class="flex justify-between items-center gap-2 px-2 pb-2 text-white z-10 pt-3 mt-3 border-t border-gradient">\n ${buildCommentatorDropdown(e)}\n <div class="flex gap-1 shrink-0">\n <a class="${r?"py-1 px-4 rounded-3xl font-semibold text-sm capitalize leading-5 text-xs leading-6 bg-primary cakhia-btn-hover":"py-2 px-3 font-semibold text-sm capitalize text-sm border text-xs border-neutral-3 text-neutral-3 rounded-3xl cakhia-btn-hover"} "\n href="/streams/${m}"\n <span class="inline-block">${r?"Trá»±c tiếp":"Sắp diá»
n ra"}</span></a>\n <a href="${window.DV2_LINK_BET}" target="_blank" rel="nofollow" class="cakhia-btn-bet text-white py-1 px-3 rounded-3xl font-semibold text-sm capitalize text-sm leading-5 bg-primary-1 text-xs leading-6">Äặt cược</a>\n </div>\n </div>\n </div>\n </div>\n `}(e)}),e.append(o),bindCk2BlvDropdownEvents(),n+=i.length,updateSuggestedLoadMoreVisibility()}function updateSuggestedLoadMoreVisibility(){const e=$("#ck2SuggestedLoadMore"),t=$(".ck2-suggested-streams-footer"),i=a.length>12&&n<a.length;e.length&&(i?(t.prop("hidden",!1).show(),e.prop("hidden",!1)):(t.prop("hidden",!0).hide(),e.prop("hidden",!0)))}function showError(e){$(".suggested-streams-container").html(`\n <div class="error-message" style="color: red; text-align: center; padding: 20px;">\n ${e}\n </div>\n `)}}(window,window.jQuery||window.$,window.jQuery||window.$,window.Hls,window.Swiper);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.