{"version":3,"file":"modules.js","mappings":";;;;;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;ACvBA;AACA;AASA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;;;;AAIA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;AC1IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnCA;AACA;AACA;AAOA;AAEA;AACA;AACA;AAEA;AAGA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;AC1JA;AACA;AACA;AAeA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AAQA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AAGA;AAGA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAGA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAOA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAIA;AAIA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AAEA;AAIA;AAKA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;;;;;;ACxQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;AC9HA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAGA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5qBA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC3YA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AA6BA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACjbA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAIA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAKA;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AAGA;AACA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AAGA;AACA;AAGA;AAGA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClhDA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AAEA;AACA;AAGA;AAEA;AAEA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;AChPA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAKA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AAEA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAIA;AACA;;AAIA;;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;AC9hBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;ACvGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACxCA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClDA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;ACpIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;AClCA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAIA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAIA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAGA;AAEA;AAGA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AAWA;AACA;AAEA;AAEA;AACA;AAGA;AAWA;AACA;AAEA;AAEA;AACA;AAGA;AAWA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;AC/VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAIA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAIA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;AC5IA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;;;;;;;AC5GA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACZA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACbA;AACA;AACA;AACA;AACA;;;;;;;ACJA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC1KA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;;;;;;;AChCA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;;;;;;;ACvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAGA;AAOA;AAAA;AAEA;AACA;AAsBA;AAAA;AAEA;AACA;;;;;;;AC/OA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACXA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACtFA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AAYA;AACA;AAIA;AAEA;AAQA;AACA;AAGA;AACA;AACA;AAIA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAGA;AACA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACzkBA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClCA;AACA;AACA;AACA;AAEA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAMA;AAEA;AACA;AAMA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AAcA;AAEA;AACA;AACA;AAQA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC37BA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;ACvCA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACxPA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAuBA;AAIA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AAsCA;AAIA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAaA;AAEA;AACA;AAEA;AACA;AAEA;AAKA;AAyBA;AACA;AAyBA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACzRA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;;;;;;;AC7CA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtCA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACvNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA","sources":["webpack:///./Frontend/src/Shared/Modules/Broadcast.ts","webpack:///./Frontend/src/Shared/Modules/ContentSlider.ts","webpack:///./Frontend/src/Shared/Modules/About.js","webpack:///./Frontend/src/Shared/Modules/AccountMessage.js","webpack:///./Frontend/src/Shared/Modules/AwesomeHorizontalScrollbar.js","webpack:///./Frontend/src/Shared/Modules/AwesomeScrollbar.js","webpack:///./Frontend/src/Shared/Modules/Balance.js","webpack:///./Frontend/src/Shared/Modules/BettingCart/BettingCart.js","webpack:///./Frontend/src/Shared/Modules/BettingCart/Freebet.js","webpack:///./Frontend/src/Shared/Modules/BettingCart/OneclickCart.js","webpack:///./Frontend/src/Shared/Modules/BettingCart/StandardCart.js","webpack:///./Frontend/src/Shared/Modules/BettingCart/StandardCartCalc.js","webpack:///./Frontend/src/Shared/Modules/BettingCart/StandardCartItem.js","webpack:///./Frontend/src/Shared/Modules/BookmakerPromocode.js","webpack:///./Frontend/src/Shared/Modules/Combobox.js","webpack:///./Frontend/src/Shared/Modules/ConfirmButton.js","webpack:///./Frontend/src/Shared/Modules/CurrentDatetime.js","webpack:///./Frontend/src/Shared/Modules/CustomSelect.js","webpack:///./Frontend/src/Shared/Modules/Favorites.js","webpack:///./Frontend/src/Shared/Modules/Help.js","webpack:///./Frontend/src/Shared/Modules/HomeWidgets/HomeWidgets.js","webpack:///./Frontend/src/Shared/Modules/HomeWidgets/WidgetBanners.js","webpack:///./Frontend/src/Shared/Modules/HomeWidgets/WidgetHelp.js","webpack:///./Frontend/src/Shared/Modules/HomeWidgets/WidgetPromo.js","webpack:///./Frontend/src/Shared/Modules/LayoutResolver.js","webpack:///./Frontend/src/Shared/Modules/LayoutRightColumn.js","webpack:///./Frontend/src/Shared/Modules/LiveTimer.js","webpack:///./Frontend/src/Shared/Modules/MainNavigation.js","webpack:///./Frontend/src/Shared/Modules/MobileAppDownloadButton.js","webpack:///./Frontend/src/Shared/Modules/ModalMarkets.js","webpack:///./Frontend/src/Shared/Modules/ModalWindow.js","webpack:///./Frontend/src/Shared/Modules/PageContent.js","webpack:///./Frontend/src/Shared/Modules/PageNavigation.js","webpack:///./Frontend/src/Shared/Modules/Search.js","webpack:///./Frontend/src/Shared/Modules/Shared/ErrorHandler.js","webpack:///./Frontend/src/Shared/Modules/StatisticsSingle.js","webpack:///./Frontend/src/Shared/Modules/Superexpress.js","webpack:///./Frontend/src/Shared/Modules/SuperexpressPagination.js","webpack:///./Frontend/src/Shared/Modules/TimeZone.js","webpack:///./Frontend/src/Shared/Modules/Tooltip.js","webpack:///./Frontend/src/Shared/Modules/TooltipEventInfo.js","webpack:///./Frontend/src/Shared/Modules/TooltipEventScore.js","webpack:///./Frontend/src/Shared/Modules/UpButton.js","webpack:///./Frontend/src/Shared/Modules/VerticalMenu.js","webpack:///./Frontend/src/Shared/app.js","webpack:///webpack/bootstrap","webpack:///./Frontend/src/modules.ts"],"sourcesContent":["var Broadcast = window.Broadcast = (function () {\n    function init() {\n        $(document).on('click', '[broadcast-button]', function(this: JQuery) {\n            const data = $(this).attr('t-data');\n\n            if (data) {\n                const parsedData: { [key: string]: any } = JSON.parse(data); // fix any\n                parsedData.button = $(this);\n\n                document.dispatchEvent(new CustomEvent<any>('openBroadcast', {\n                    detail: parsedData\n                }));\n            }\n        });\n    }\n\n    return {\n        init\n    }\n}())\n\n$(() => {\n    Broadcast.init();\n});\n","window.ContentSlider = (function () {\n    class ContentSlider {\n        private mainContainer: any;\n        private outerContainer: any;\n        private innerContainer: any;\n        private leftArrow: any;\n        private rightArrow: any;\n\n        private scrollStep: number;\n\n        constructor(mainContainer, scrollStep: any = 0) {\n            this.mainContainer = $(mainContainer);\n\n            this.mainContainer.addClass('content-slider');\n\n            this.outerContainer = $('<div/>', {\n                'class': 'content-slider__outer'\n            });\n\n            this.innerContainer = $('<div/>', {\n                'class': 'content-slider__inner'\n            });\n\n            this.mainContainer.html(this.outerContainer.append(this.innerContainer.append(this.mainContainer.html())));\n\n            if (scrollStep) {\n                if (scrollStep === '100%') {\n                    this.scrollStep = this.outerContainer.width()\n                } else {\n                    this.scrollStep = parseInt(scrollStep);\n                }\n            } else {\n                this.scrollStep = this.outerContainer.width() / 2;\n            }\n\n            this.createArrows();\n            this.bindUI();\n\n            this.update();\n        }\n\n        private createArrows() {\n            this.leftArrow = $('<div/>', {\n                'class' : 'content-slider__arrow m-left'\n            });\n            this.rightArrow = $('<div/>', {\n                'class' : 'content-slider__arrow m-right'\n            });\n\n            this.leftArrow.append('<svg class=\"icon content-slider__arrow-icon m-left\"><use xlink:href=\"/Content/cps/images/sprites/svg-icons.svg#expand\"></use></svg>');\n            this.rightArrow.append('<svg class=\"icon content-slider__arrow-icon m-right\"><use xlink:href=\"/Content/cps/images/sprites/svg-icons.svg#expand\"></use></svg>');\n\n            this.mainContainer.append(this.leftArrow);\n            this.mainContainer.append(this.rightArrow);\n        }\n\n        private bindUI() {\n            let self = this;\n\n            self.leftArrow.on('click', function () {\n                self.handleScroll(-self.scrollStep);\n            });\n\n            self.rightArrow.on('click', function () {\n                self.handleScroll(self.scrollStep);\n            });\n        }\n\n        private handleScroll(step) {\n            let currentScrollLeft = this.outerContainer.scrollLeft();\n            let newScrollPosition = currentScrollLeft + step;\n\n            this.toggleArrowsVisibility(newScrollPosition);\n            this.outerContainer.scrollLeft(newScrollPosition);\n        }\n\n        private toggleArrowsVisibility(scrollLeft) {\n            if (scrollLeft <= 0) {\n                this.leftArrow.removeClass('m-visible');\n            } else {\n                this.leftArrow.addClass('m-visible');\n            }\n\n            if (scrollLeft >= (this.innerContainer.width() - this.outerContainer.width())) {\n                this.rightArrow.removeClass('m-visible');\n            } else {\n                this.rightArrow.addClass('m-visible');\n            }\n        }\n\n        public update() {\n            if (this.outerContainer.width() < this.innerContainer.width()) {\n                this.toggleArrowsVisibility(this.outerContainer.scrollLeft());\n            }\n        }\n    }\n\n    $(function () {\n        /*$('[content-slider]').each(function () {\n            if ($(this).children(':first-child').hasClass('content-slider__outer') === false) {\n                new ContentSlider(this, $(this).attr('content-slider-scroll-step'));\n            }\n        });*/\n    });\n\n    return {\n        ContentSlider\n    }\n}());","window.About = (function () {\n    var dom = {};\n    var selectors = {\n        scrollArea: '#m-page-content-scrollbar-scrollarea',\n        scrollAreaMobile: window,\n        pageNavigation: '#page-navigation-about',\n        pageNavigationLinks: '.page-navigation__link',\n        aboutContent: '#about-content'\n    };\n    var pageNavigation = {};\n    var pageNavigationOffsetTop = 0;\n\n    return {\n        init: function () {\n            dom.scrollArea = $(selectors.scrollArea); \n            dom.pageNavigation = $(selectors.pageNavigation);\n            dom.aboutContent = $(selectors.aboutContent);\n\n            pageNavigationOffsetTop = dom.pageNavigation.position().top - (dom.scrollArea.length > 0 ? dom.scrollArea.position().top : 0);\n\n            this.hideMassMedia();\n            this.updateBlocksTopOffset();            \n\n            if (window.location.hash) {\n                hashBlock = $(window.location.hash);\n                if (hashBlock.length > 0) {\n                    $(selectors.scrollArea).scrollTop(hashBlock.position().top);\n                }\n            } else {\n                this.setActiveNavigationItem(0);\n            }\n\n            this.bindUI();\n        },\n        bindUI: function () {\n            var self = this;\n\n            var scrollTimer;\n\n            if (globalAppSettings.isMobileDevice) {\n                currentArrea = $(selectors.scrollAreaMobile);\n            } else {\n                currentArrea = $(selectors.scrollArea);\n            }\n  \n            currentArrea.on('scroll.pageAbout', function (event) {\n                var scrollTop = $(this).scrollTop();\n\n                if (scrollTimer) {\n                    clearTimeout(scrollTimer);\n                }\n                \n                scrollTimer = setTimeout(function () {                    \n                    self.setActiveNavigationItem(scrollTop);\n                }, 50);\n            });\n\n            $(window).on('resize.pageAbout', function () {\n                self.updateBlocksTopOffset();\n            });\n\n            $(document).on('click', '[about-cooperation-item]', function () {                \n                var title = $(this).find('[about-cooperation-item-title]').text();\n                var descr = $(this).find('[about-cooperation-item-description-text]');\n\n                if (descr.html()) {\n                    new ModalWindow({\n                        title: title,\n                        content: descr.parent().html()\n                    }).show();\n                }\n            });\n        },\n        unbindUI: function () {\n            $(selectors.scrollArea).off('scroll.pageAbout');\n            $(window).off('resize.pageAbout');\n        },\n        updateBlocksTopOffset: function () {\n            var scrollAreaTopOffset = (dom.scrollArea.length > 0 ? dom.scrollArea.position().top : 0);\n\n            $(selectors.pageNavigationLinks).each(function (index) {\n                var id = $(this).attr('href');\n                var block = $(id);\n\n                if (block.length > 0) {\n                    pageNavigation[id] = {\n                        offsetTop: index === 0 ? 0 : block.position().top - scrollAreaTopOffset - 80,\n                        blockHeight: block.outerHeight()\n                    }\n                }\n            });\n        },\n        setActiveNavigationItem: function (scrollTop) {\n            for (key in pageNavigation) {\n                if (scrollTop >= pageNavigation[key].offsetTop && scrollTop < pageNavigation[key].offsetTop + pageNavigation[key].blockHeight) {\n                    $(selectors.pageNavigationLinks).removeClass('m-active');\n                    $(selectors.pageNavigationLinks).filter('[href=\"' + key + '\"]').addClass('m-active');\n                    \n                    if (history.pushState && window.location.hash !== key) {\n                        history.pushState(null, null, key);\n                    }\n                }\n            }\n        },\n        hideMassMedia: function () {\n            var container = $('#about-mass-media-items-container');\n            var containerWrapper = $('#about-mass-media-items-container-wrapper');\n            var items = $('[js-node=\"about-mass-media-item\"]');\n            var itemsCnt = items.length;\n            var showMoreButton = $('#about-mass-media-show-more-button');\n            var self = this;\n\n            if (container.height() > containerWrapper.height()) {\n                showMoreButton.removeClass('m-hidden');\n\n                $(document).on('click', '#about-mass-media-show-more-button', function () {\n                    containerWrapper.removeClass('m-collapsed');\n                    $(this).addClass('m-hidden');\n                    self.updateBlocksTopOffset();\n                });\n            }\n        }\n    }\n}());\n\n$(function () {\n    if ($('[data-page=\"about\"]').length > 0) {\n        window.About.init();\n\n        if (globalAppSettings.isMobileDevice && UpButton) {\n            UpButton.init();\n            if ($('#contentEl').length > 0) {\n                var point = $('.about__content').offset().top;\n                $(window).scrollTop(point - 50);\n            }\n        }\n    }\n\n});","window.AccountMessage = (function () {\n    const selectors = {\n        LIST_ITEM: \".infocenter-messagelist__list-item\",\n        M_COLLAPSE_BUTTON: \".infocenter-messagelist__message-collapse-button\",\n        M_ITEMS_BODY: \".infocenter-messagelist__items-body\",\n        M_MESSAGE_ROW: \"#message-row-\"\n    }\n    return {\n        readMessage: function (id) {\n            $(selectors.LIST_ITEM).removeClass('m-active');\n            $(\"#message-container-\" + id).addClass(\"m-active\");\n            var readed = \"<div>\" + window.Localization.getString('Scripts_Shared_Modules.AccountMessage_18', 'Прочитано') + \"</div>\";\n            $(\"#message-status-\" + id).replaceWith(readed);\n        },\n        readMessageMobile: function (id) {\n\n            $(selectors.M_MESSAGE_ROW + id + \" a\").on('click', function (e) {\n                e.stopPropagation();\n            });\n\n            var isExpanded = $(selectors.M_MESSAGE_ROW + id).hasClass(\"expanded\");\n\n            $(selectors.LIST_ITEM).removeClass(\"expanded\");\n            $(selectors.M_COLLAPSE_BUTTON).removeClass(\"expanded\");\n            $(selectors.M_ITEMS_BODY).removeClass(\"expanded\");\n\n            if (!isExpanded) {\n                $(selectors.M_MESSAGE_ROW + id).addClass(\"expanded\");\n                $(selectors.M_MESSAGE_ROW + id + \" \" + selectors.M_COLLAPSE_BUTTON).addClass(\"expanded\");\n                $(selectors.M_MESSAGE_ROW + id + \" \" + selectors.M_ITEMS_BODY).addClass(\"expanded\");\n            }\n            var readedMobile = \"<div>\" + window.Localization.getString('Scripts_Shared_Modules.AccountMessage_18', 'Прочитано') + \"</div>\";\n            $(selectors.M_MESSAGE_ROW + id + \" \" + \".infocenter-messagelist__list-item-status-new\").replaceWith(readedMobile);\n        }\n    };\n}());","window.AwesomeHorizontalScrollbar = (function () {\n\tvar generateDom = function () {\n\t\treturn [\n\t\t\t'<div class=\"awesome-scrollbar m-horizontal\" js-node=\"awesome-scrollbar\">',\n\t\t\t\t'<div class=\"awesome-scrollbar__track m-horizontal\" js-node=\"awesome-scrollbar__track\">',\n\t\t\t\t\t'<div class=\"awesome-scrollbar__thumb m-horizontal\" js-node=\"awesome-scrollbar__thumb\"></div>',\n\t\t\t\t'</div>',\n\t\t\t'</div>'\n\t\t].join('\\n');\n\t};\n\n\tvar AwesomeHorizontalScrollbar = function (containerSelector, addClass) {\n\t\taddClass = ' ' + addClass || '';\n\t\tthis.container = $(containerSelector);\n\n\t\tif (this.container.length < 1)\n\t\t\treturn null;\n\n\t\tthis.prevPageX = 0;\n\n\t\tthis.container.wrap('<div class=\"awesome-scrollbar__area-wrapper' + addClass + '\"><div class=\"awesome-scrollbar__content-wrapper m-horizontal\"><div class=\"awesome-scrollbar__content\"></div></div></div>');\n\n\t\tthis.innerContainer = this.container.parent();\n\t\tthis.outerContainer = this.innerContainer.parent();\n\n\t\tthis.outerContainer.append(generateDom());\n\n\t\tthis.scrollbarArea = this.outerContainer;\n\t\tthis.scrollbarTrack = this.outerContainer.find('[js-node=\"awesome-scrollbar__track\"]');\n\t\tthis.scrollbarThumb = this.outerContainer.find('[js-node=\"awesome-scrollbar__thumb\"]');\n\t\tthis.scrollbarTrackWidth = this.scrollbarTrack.width();\t\t\n\n\t\tvar self = this;\n\n\t\tthis.update();\n\t};\t\n\n\tAwesomeHorizontalScrollbar.prototype.update = function () {\n\n\t\tvar outerContainerWidth = this.outerContainer.first().width(),\n\t\t\t\tinnerContainerWidth = this.innerContainer.first().width(),\n\t\t\t\ttrackWidth = this.scrollbarTrack.width();\n\n\t\tthis.unbindEvents();\n\n\t\tif (innerContainerWidth > outerContainerWidth) {\n\t\t\tthis.scrollbarArea.removeClass('disabled');\n\t\t\tvar thumbWidth = outerContainerWidth * 100 / innerContainerWidth;\n\t\t\tthis.scrollbarThumb.width(thumbWidth + '%');\n\t\t\tthis.bindEvents();\n\t\t} else {\n\t\t\tthis.scrollbarArea.addClass('disabled');\n\t\t}\n\t};\n\n\tAwesomeHorizontalScrollbar.prototype.bindEvents = function () {\n\t\tvar self = this;\n\n\t\tthis.outerContainer.first().on('scroll.table', function (e) {\n\t\t\tself.scrollHandler($(this).scrollLeft());\n\t\t});\n\n\t\tthis.scrollbarThumb.on('mousedown', function (e) {\n\t\t\tself.startDrag(e);\n\t\t\tself.prevPageX = (e.currentTarget.offsetWidth - (e.clientX - e.currentTarget.getBoundingClientRect().left));\n\t\t}).on('click', function (e) {\n\t\t    e.stopImmediatePropagation();\n\t\t});\n\n\t\tthis.scrollbarArea.on('wheel', function (e) {\n\t\t\tself.scrollArea(e);\t\t\t\n\t\t\te.preventDefault();\t\t\t\n\t\t}).on('click', function (e) {\n\t\t\tself.clickTrack(e);\n\t\t});\n\n\t\treturn this;\n\t};\n\n\tAwesomeHorizontalScrollbar.prototype.unbindEvents = function () {\n\t\tvar self = this;\n\n\t\tthis.outerContainer.first().off('scroll.table');\n\t\tthis.scrollbarThumb.off('mousedown');\n\t\tthis.scrollbarArea.off('wheel').off('mouseenter').off('mouseleave').off('click').off('mousemove');\n\n\t\treturn this;\n\t};\n\n\tAwesomeHorizontalScrollbar.prototype.scrollArea = function (e) {\n\t\tvar scrollLeft;\n\t\tvar currentScrollLeft = this.outerContainer.first().scrollLeft();\n\n\t\tif (e.originalEvent.deltaY > 0) {\n\t\t\tscrollLeft = currentScrollLeft + 20;\n\t\t} else {\n\t\t\tscrollLeft = currentScrollLeft - 20;\n\t\t}\n\n\t\tthis.outerContainer.scrollLeft(scrollLeft);\n\t};\n\n\tAwesomeHorizontalScrollbar.prototype.clickTrack = function (e) {\n\t\tvar offset = Math.abs(e.target.getBoundingClientRect().left - e.clientX),\n\t\t\t\tthumbHalf = (this.scrollbarThumb.get(0).offsetWidth / 2),\n\t\t\t\tthumbPositionPercentage = ((offset - thumbHalf) * 100 / this.scrollbarTrack.get(0).offsetWidth);\n\n\t\tvar scrollLeft = (thumbPositionPercentage * this.outerContainer.get(0).scrollWidth / 100);\n\t\tthis.outerContainer.scrollLeft(scrollLeft);\n\t};\n\n\tAwesomeHorizontalScrollbar.prototype.scrollHandler = function (scrollTop) {\n\t\tvar x = scrollTop * 100 / this.outerContainer.first().width();\n\n\t\tthis.scrollbarThumb.css({\n\t\t\ttransform: 'translateX(' + x + '%)'\n\t\t});\n\t};\n\n\tAwesomeHorizontalScrollbar.prototype.clickThumbHandler = function (e) {\n\t\tthis.startDrag(e);\n\t\tthis.prevPageX = (e.currentTarget.offsetWidth - (e.clientX - e.currentTarget.getBoundingClientRect().left));\n\t};\n\n\tAwesomeHorizontalScrollbar.prototype.startDrag = function (e) {\n\t\tvar self = this;\n\t\te.stopImmediatePropagation();\n\t\t$('body').addClass('vertical-scroll-disable');\n\t\tself.scrollbarThumb.addClass('is-moving');\n\n\t\tfunction moveAt(e) {\n\t\t\tvar offset = ((self.scrollbarTrack.get(0).getBoundingClientRect().left - e.clientX) * -1),\n\t\t\t\t\tthumbClickPosition = (self.scrollbarThumb.get(0).offsetWidth - self.prevPageX),\n\t\t\t\t\tthumbPositionPercentage = ((offset - thumbClickPosition) * 100 / self.scrollbarTrack.get(0).offsetWidth);\n\n\t\t\tvar scrollLeft = thumbPositionPercentage * self.outerContainer.get(0).scrollWidth / 100;\n\n\t\t\tself.outerContainer.scrollLeft(scrollLeft);\n\t\t}\n\n\t\t$(document).on('mousemove', function (e) {\n\t\t\tmoveAt(e);\n\t\t});\n\n\t\t$(document).on('mouseup', function (e) {\n\t\t\t$(document).off('mousemove');\n\t\t\t$(document).off('mouseup');\n\t\t\t$('body').removeClass('vertical-scroll-disable');\n\t\t\tself.scrollbarThumb.removeClass('is-moving');\n\t\t\tself.prevPageX = 0;\n\t\t});\n\t};\n\n\treturn AwesomeHorizontalScrollbar;\n}());","window.AwesomeScrollbar = (function () {\n    var generateDom = function (addClass, guid) {\n        return [\n            '<div class=\"awesome-scrollbar ' +\n                addClass +\n                '\" id=\"awesome-scrollbar-' +\n                guid +\n                '\">',\n            '<div class=\"awesome-scrollbar__track\" id=\"awesome-scrollbar__track-' +\n                guid +\n                '\">',\n            '<div class=\"awesome-scrollbar__thumb\" id=\"awesome-scrollbar__thumb-' +\n                guid +\n                '\"></div>',\n            '</div>',\n            '</div>',\n        ].join('\\n');\n    };\n\n    var AwesomeScrollbar = function (container, addClass) {\n        addClass = addClass ? ' ' + addClass : '';\n\n        this.container = $(container);\n        this.guid = app.generateGUID();\n\n        if (this.container.length < 1) return null;\n\n        this.prevPageY = 0;\n\n        this.container.wrap(\n            '<div class=\"awesome-scrollbar__area-wrapper' +\n                addClass +\n                '\"><div class=\"awesome-scrollbar__content-wrapper\" id=\"' +\n                addClass.trim() +\n                '-scrollarea\"><div class=\"awesome-scrollbar__content\"></div></div></div>'\n        );\n\n        this.innerContainer = this.container.parent();\n        this.outerContainer = this.innerContainer.parent();\n\n        this.outerContainer.append(generateDom(addClass, this.guid));\n\n        this.scrollbar = $('#awesome-scrollbar-' + this.guid);\n        this.scrollbarTrack = $('#awesome-scrollbar__track-' + this.guid);\n        this.scrollbarThumb = $('#awesome-scrollbar__thumb-' + this.guid);\n\n        var self = this;\n\n        this.innerContainer.resize(function () {\n            self.update();\n        });\n\n        var resizeTimer = null;\n        this.outerContainer.parent().resize(function () {\n            clearTimeout(resizeTimer);\n            resizeTimer = setTimeout(function () {\n                self.update();\n            }, 250);\n        });\n\n        this.update();\n    };\n\n    AwesomeScrollbar.prototype.getScrollProgress = function () {\n        if (!this.outerContainer || !this.innerContainer) {\n            return;\n        }\n\n        var innerContainerHeight = $(this.innerContainer).height();\n        var outerContainerHeight = $(this.outerContainer).height();\n        var diffHeight = innerContainerHeight - outerContainerHeight;\n        var scrollTop = $(this.outerContainer).scrollTop();\n\n        return ((scrollTop / diffHeight) * 100).toFixed(0);\n    };\n\n    AwesomeScrollbar.prototype.update = function () {\n        if (!this.outerContainer) {\n            return;\n        }\n\n        var outerContainerHeight = this.outerContainer.first().height(),\n            innerContainerHeight = this.innerContainer.first().height();\n\n        this.unbindEvents();\n\n        if (innerContainerHeight > outerContainerHeight) {\n            this.scrollbarTrack.removeClass('disabled');\n\n            var thumbHeight =\n                (outerContainerHeight * 100) / innerContainerHeight;\n\n            var thumbHeightAbs = Math.round(\n                (outerContainerHeight * thumbHeight) / 100\n            );\n            //thumbHeightAbs = thumbHeightAbs < 40 ? 40 : thumbHeightAbs;\n\n            this.scrollbarThumb.css({\n                height: thumbHeightAbs,\n            });\n\n            this.bindEvents();\n        } else {\n            this.scrollbarTrack.addClass('disabled');\n        }\n    };\n\n    AwesomeScrollbar.prototype.bindEvents = function () {\n        var self = this;\n\n        this.outerContainer.first().on('scroll.table', function (e) {\n            self.scrollHandler($(this).scrollTop());\n\n            document.dispatchEvent(\n                new CustomEvent('awesomeScrollbarScroll', {\n                    detail: {\n                        progress: self.getScrollProgress(),\n                        element: self.container[0],\n                    },\n                })\n            );\n        });\n\n        this.scrollbarThumb\n            .on('mousedown', function (e) {\n                self.startDrag(e);\n                self.prevPageY =\n                    e.currentTarget.offsetHeight -\n                    (e.clientY - e.currentTarget.getBoundingClientRect().top);\n            })\n            .on('click', function (e) {\n                e.stopImmediatePropagation();\n            });\n\n        this.scrollbarTrack\n            .on('wheel', function (e) {\n                self.scrollArea(e);\n                e.preventDefault();\n            })\n            .on('click', function (e) {\n                self.clickTrack(e);\n            });\n\n        document.dispatchEvent(\n            new CustomEvent('awesomeScrollbarScroll', {\n                detail: {\n                    progress: this.getScrollProgress(),\n                    element: this.container[0],\n                },\n            })\n        );\n\n        return this;\n    };\n\n    AwesomeScrollbar.prototype.unbindEvents = function () {\n        this.outerContainer.first().off('scroll.table');\n        this.scrollbarThumb.off('mousedown');\n        this.scrollbarTrack\n            .off('wheel')\n            .off('mouseenter')\n            .off('mouseleave')\n            .off('click')\n            .off('mousemove');\n\n        return this;\n    };\n\n    AwesomeScrollbar.prototype.destroy = function () {\n        if (this.outerContainer) {\n            this.unbindEvents();\n\n            this.container.insertBefore(this.outerContainer.parent());\n            this.outerContainer.parent().remove();\n            this.outerContainer = null;\n        }\n    };\n\n    AwesomeScrollbar.prototype.scrollArea = function (e) {\n        var scrollTop;\n        var currentScrollTop = this.outerContainer.first().scrollTop();\n\n        if (e.originalEvent.deltaY > 0) {\n            scrollTop = currentScrollTop + 60;\n        } else {\n            scrollTop = currentScrollTop - 60;\n        }\n\n        this.outerContainer.scrollTop(scrollTop);\n    };\n\n    AwesomeScrollbar.prototype.clickTrack = function (e) {\n        var offset = Math.abs(e.target.getBoundingClientRect().top - e.clientY),\n            thumbHalf = this.scrollbarThumb.get(0).offsetHeight / 2,\n            thumbPositionPercentage =\n                ((offset - thumbHalf) * 100) /\n                this.scrollbarTrack.get(0).offsetHeight;\n\n        var scrollTop =\n            (thumbPositionPercentage *\n                this.outerContainer.get(0).scrollHeight) /\n            100;\n        this.outerContainer.scrollTop(scrollTop);\n    };\n\n    AwesomeScrollbar.prototype.scrollHandler = function (scrollTop) {\n        var y = (scrollTop / this.outerContainer.get(0).scrollHeight) * 100;\n\n        this.scrollbarThumb.css({\n            top: y + '%',\n        });\n    };\n\n    AwesomeScrollbar.prototype.clickThumbHandler = function (e) {\n        e.stopImmediatePropagation();\n        this.startDrag(e);\n        this.prevPageY =\n            e.currentTarget.offsetHeight -\n            (e.clientY - e.currentTarget.getBoundingClientRect().top);\n    };\n\n    AwesomeScrollbar.prototype.startDrag = function (e) {\n        var self = this;\n        e.stopImmediatePropagation();\n        $('body').addClass('vertical-scroll-disable');\n        self.scrollbarThumb.addClass('is-moving');\n        self.scrollbar.addClass('is-moving');\n\n        function moveAt(e) {\n            const offset =\n                    (self.scrollbarTrack.get(0).getBoundingClientRect().top -\n                        e.clientY) *\n                    -1,\n                thumbClickPosition =\n                    self.scrollbarThumb.get(0).offsetHeight - self.prevPageY,\n                thumbPositionPercentage =\n                    ((offset - thumbClickPosition) * 100) /\n                    self.scrollbarTrack.get(0).offsetHeight;\n\n            const scrollTop =\n                (thumbPositionPercentage *\n                    self.outerContainer.get(0).scrollHeight) /\n                100;\n\n            self.outerContainer.scrollTop(scrollTop);\n        }\n\n        $(document).on('mousemove', function (e) {\n            moveAt(e);\n        });\n\n        $(document).on('mouseup', function (e) {\n            $(document).off('mousemove');\n            $(document).off('mouseup');\n            $('body').removeClass('vertical-scroll-disable');\n            self.scrollbarThumb.removeClass('is-moving');\n            self.scrollbar.removeClass('is-moving');\n            self.prevPageY = 0;\n\n            e.stopImmediatePropagation();\n        });\n    };\n\n    return AwesomeScrollbar;\n})();\n","window.Balance = (function () {\n    var dom = {};\n    var isVisibleViewBalance;\n    var selectors = {\n        viewBalanceIcon: '[js-node=\"view-balance__button\"]',\n        viewBalanceSum: '[js-node=\"view-balance__sum\"]',\n        viewBonusSum: '[js-node=\"view-bonus__sum\"]',\n        viewBalanceInput: '[js-node=\"view-balance__input\"]',\n        viewBalanceByIdButton: '.js-view-balance-by-id__button'\n    };\n\n    return {\n        init: function () {\n            if (!isVisibleViewBalance) {\n                isVisibleViewBalance = window.globalAppSettings.showBalance;\n            }\n\n            if (isVisibleViewBalance === false) {\n                $(selectors.viewBalanceByIdButton).show();\n            }\n\n            this.bindUI();\n        },\n        update: function () {\n            if (isVisibleViewBalance === true) {\n                this.showBalance();\n            }\n            else {\n                this.hideBalance();\n            }\n\n        },\n        bindUI: function () {\n            var self = this;\n\n            $(document).on('click', selectors.viewBalanceIcon, function () {\n                self.toggleViewBalance();\n                document.dispatchEvent(new CustomEvent('changeBalanceVisibility', {\n                    detail: {\n                        isVisibleViewBalance,\n                    }\n                }))\n            });\n\n            $(document).on('click', selectors.viewBalanceByIdButton, function (e) {\n                e.stopPropagation();\n            }).on('mousedown', selectors.viewBalanceByIdButton, function () {\n                var id = $(this).attr('view-balance-button');\n\n                $('[view-balance-sum=\"' + id + '\"]').each(function () {\n                    $(this).removeClass('m-hidden');\n                });\n            }).on('mouseup mouseleave', selectors.viewBalanceByIdButton, function (e) {\n                var id = $(this).attr('view-balance-button');\n\n                $('[view-balance-sum=\"' + id + '\"]').each(function () {\n                    $(this).addClass('m-hidden');\n                });\n            });\n        },\n        toggleViewBalance: function () {\n            if (isVisibleViewBalance) {\n                this.hideBalance();\n            } else {\n                this.showBalance();\n            }\n            var profileСheckbox = document.getElementById('balance-checkbox');\n            if (profileСheckbox != null) {\n                profileСheckbox.checked = !isVisibleViewBalance;\n            }\n\n            $.ajax('/account/profile/edit/changebalancevisibility', {\n                type: \"POST\",\n                data: { isBalanceVisible: isVisibleViewBalance },\n            });\n        },\n        showBalance: function () {\n            //Баланс\n            $(selectors.viewBalanceSum).each(function () {\n                $(this).removeClass('m-hidden');\n            });\n\n            //Бонусные баллы\n            $(selectors.viewBonusSum).each(function () {\n                $(this).removeClass('m-hidden');\n            });\n\n            $(selectors.viewBalanceInput).each(function () {\n                $(this).attr('type', 'text');\n            });\n\n            $(selectors.viewBalanceIcon).addClass('m-hide');\n            $(selectors.viewBalanceByIdButton).hide();\n\n            isVisibleViewBalance = true;\n        },\n        hideBalance: function () {\n\n            $(selectors.viewBalanceSum).each(function () {\n                $(this).addClass('m-hidden');\n            });\n\n            $(selectors.viewBonusSum).each(function () {\n                $(this).addClass('m-hidden');\n            });\n\n            $(selectors.viewBalanceInput).each(function () {\n                $(this).attr('data-sum', $(this).val());\n                $(this).attr('type', 'password');\n            });\n\n            $(selectors.viewBalanceIcon).removeClass('m-hide');\n            $(selectors.viewBalanceByIdButton).show();\n\n            isVisibleViewBalance = false;\n        },\n\n        getIntBalance: function () {\n            var sumWrapper = $(selectors.viewBalanceSum);\n            if (sumWrapper.length > 0) {\n                var res = parseInt(sumWrapper.text().replace(/[\\u00a0\\s]/g, ''));\n                return res;\n            }\n            else return undefined;\n        }\n    }\n}());","window.BettingCart = (function () {\n\n    var mode = 'Standard', // OneClick || Standard\n        dom = {},\n        isLoading = false,\n        isSending = false,\n        isCollapsed = false;\n\n    var currencyMap = {\n        CURRENCY: window.globalAppSettings.currentUser.defaultBalance.currencyCode,\n        BONUS: 'Bonuses'\n    };\n\n    var isWaitingForLiveBet = false,\n        liveBetTimeout = undefined,\n        sendingLiveIds = [];\n\n    var isFirstCoefAdded = false;\n    const NOTIFICATION_BEHAVIOUR_KEY = 'first-coef-added';\n    var addItemObsolete = function (data) { // return false if cart is sending now or overflowed, return true if added or already added.  Blink on false\n        var result;\n\n        data = {\n            aId: data.aId,\n            eId: data.eId,\n            eTitle: data.eTitle || '',\n            isLive: data.isLive,\n            oId: data.oId,\n            rTitle: data.rTitle || '',\n            val: data.val,\n            loadActualCoefValue: data.loadActualCoefValue || false\n        };\n\n        if (mode === 'Standard') {\n            result = StandardCart.addItem(data);\n\n            if (isCollapsed) {\n                expand();\n            }\n\n            if (result === false)\n                visual.blink();\n        }\n        else if (mode === 'Oneclick') {\n            if (OneclickCart.isSending)\n                visual.blink();\n            result = OneclickCart.sendData(data);\n        }\n\n        if (result && !isFirstCoefAdded) {\n            Behaviours.NotificationBehaviour.ShowModalWindow(NOTIFICATION_BEHAVIOUR_KEY);\n            isFirstCoefAdded = true;\n        }\n\n\n        return result;\n    };\n\n    var addItem = function (itemData) {\n        var result = false;\n\n        var data = {\n            oId: itemData.oId,\n            aId: itemData.aId,\n            val: itemData.val,\n            eId: itemData.eId,\n            isLive: itemData.isLive,\n            loadActualCoefValue: true\n        };\n\n        if (mode === 'Standard') {\n            result = StandardCart.addItem(data);\n\n            if (isCollapsed) {\n                expand();\n            }\n\n            if (result === false)\n                visual.blink();\n        }\n        else if (mode === 'Oneclick') {\n            if (OneclickCart.isSending)\n                visual.blink();\n            result = OneclickCart.sendData(data);\n        }\n\n        if (result && !isFirstCoefAdded) {\n            Behaviours.NotificationBehaviour.ShowModalWindow(NOTIFICATION_BEHAVIOUR_KEY);\n            isFirstCoefAdded = true;\n        }\n\n        return result;\n    };\n\n\n    var removeItem = function (originalId) { // return false if cart is sending now, return true if removed or already removed.  Blink on false\n        var result;\n\n        if (mode === 'Standard') {\n            if (isSending || isLoading) {\n                result = false;\n            }\n            else {\n                StandardCart.removeItem(originalId);\n                result = true;\n            }\n        }\n        else if (mode === 'Oneclick') {\n            result = OneclickCart.removeItem(originalId);\n        }\n\n        if (result === false)\n            visual.blink();\n\n        return result;\n    };\n\n    var getItems = function () { //TODO: делать ветвление через switch\n        if (mode === 'Standard') {\n            return StandardCart.getItems();\n        }\n        else if (mode === 'Oneclick') {\n            return OneclickCart.getItems();\n        }\n    };\n\n    var hasItem = function (oid) {\n        var currentItems = getItems();\n        return currentItems.hasOwnProperty(oid);\n    };\n\n    //#region ПЛОХИЕ ФУНКЦИИ\n\n    var Highlighting = (function () {\n        const cellSelectors = {\n            table: '.events-table__markets-cell',\n            openEvent: '.event-markets__coef',\n            accent: '.multi-event-coef',\n        };\n\n        function activate(cellSelector, activateAll) {\n            activateAll === true ? true : false;\n            var currentItems = getItems();\n            if (Object.keys(currentItems).length > 0) {\n                for (oid in currentItems) {\n                    if (activateAll) {\n                        for (key in cellSelectors) {\n                            $(cellSelectors[key] + '[data-oid=' + oid + ']').addClass('active');\n                        }\n                    }\n                    else {\n                        $(cellSelector + '[data-oid=' + oid + ']').addClass('active');\n                    }\n\n                }\n            }\n        }\n\n        function deactivateAllScopes(oid) {\n            for (key in cellSelectors) {\n                $(cellSelectors[key] + '[data-oid=' + oid + ']').removeClass('active');\n            }\n\n            $(document).trigger('deactivateCoefHightlight', [oid]);\n        };\n\n        function deactivateOtherModes() {\n            var otherItems;\n            if (mode === 'Standard') {\n                otherItems = OneclickCart.getItems();\n            }\n            else if (mode === 'Oneclick') {\n                otherItems = StandardCart.getItems();\n            }\n            for (oid in otherItems) {\n                deactivateAllScopes(oid);\n            }\n        };\n\n        return {\n            activate: {\n                table: function () { activate(cellSelectors.table) },\n                openEvent: function () { activate(cellSelectors.openEvent) },\n                accent: function () { activate(cellSelectors.accent) },\n                allScopes: function () { activate(null, true) }\n            },\n            deactivate: {\n                allScopes: deactivateAllScopes,\n                otherModes: deactivateOtherModes\n            }\n        }\n\n    })();\n    //#endregion\n\n\n    //центровка лодера на экране при большом кол-ве ставок\n    function heightCorrectionLoader() {\n        if ($('.cart__inner').height() > $('#layout-right-column').height()) {\n            $('.betting-cart__loader-spiner-wrapper').addClass('m-sticky');\n        } else if (globalAppSettings.isMobileDevice) {\n            $('.betting-cart__loader-spiner-wrapper').addClass('m-sticky');\n        };\n    };\n\n    var visual = {\n        blink: function () {\n            dom.container.animate({ opacity: 0 }, 100).animate({ opacity: 1 }, 100);\n        },\n        showLoader: function () {\n            heightCorrectionLoader();\n            dom.overlay.fadeIn(200);\n        },\n        hideLoader: function () {\n            $('.betting-cart__loader-spiner-wrapper').removeClass('m-sticky');\n            dom.overlay.fadeOut(200);\n        }\n    };\n\n    const COEF_UPD_INFO = {\n        ORIGINAL_ID: 'o',\n        ACTUAL_ID: 'a',\n        VALUE: 'v',\n        STATE: 's'\n    };\n\n    var notification = {\n        NotifyPackageBetResult: function (isSuccess, message) {\n            var packageBetStatusElement = $('[package-bet-status-container]');\n            if (packageBetStatusElement.length > 0) {\n                app.enableLoading();\n                Ajax.postJson(\"/baltsystem/showpackagebetstatus\", {\n                    success: function () {\n                        app.disableLoading();\n                    }\n                });\n            }\n        },\n        //v2.0\n        updateAccountBonusPoints: function (val) {\n            StandardCart.bonusExpress.checkIfIsAvailable();\n            //TODO: обновлять ББ на странице баланса.\n        }\n\n    };\n\n    var calc = function () {\n        var type = '',\n            items = {},\n            betSum = 0,\n            result = {};\n\n        if (mode === 'Standard') {\n            type = StandardCart.getType();\n            items = StandardCart.getItems();\n            betSum = StandardCart.getBetSum();\n            currency = StandardCart.getCurrency();\n            isBonusExpress = StandardCart.bonusExpress.isEnabled;\n\n            if (Freebet.isSelected()) {\n                var freebetSum = Freebet.getSum();\n\n                if (StandardCart.isTypeSingle()) {\n                    items = {};\n\n                    var selectedItemForFreebet = StandardCart.getSelectedItemForFreebet();\n\n                    if (selectedItemForFreebet) {\n                        items[selectedItemForFreebet.originalId] = selectedItemForFreebet;\n                    }\n                }\n\n                items = Object.values(items).reduce(function (acc, cur) {\n                    acc[cur.originalId] = Object.assign({}, cur);\n                    acc[cur.originalId].bet = freebetSum;\n                    return acc;\n                }, {});\n\n                betSum = freebetSum;\n            }\n\n            result = StandardCartCalc.calc(type, betSum, items, currency, isBonusExpress);\n            StandardCart.updateCalcResults(result);\n        }\n\n        save();\n    };\n\n    var save = function () {\n        if (isLoading === false) {\n            var accountId = sessionStorage.getItem('accountId');\n            var BettingCartData = {};\n\n            app.console.log(mode);\n\n            BettingCartData[accountId] = {\n                timestamp: Date.now(),\n                mode: mode,\n                standardCartData: StandardCart.getData(),\n                oneclickCartData: OneclickCart.getData(),\n                isCollapsed: isCollapsed\n            };\n\n            localStorage.setItem('bettingCart', JSON.stringify(BettingCartData));\n        }\n    };\n\n    var sendWithFreebetProposal = function () {\n        if (mode === 'Standard' && StandardCart.canProposeFreeBet()) {\n            Freebet.proposeCouponList();\n            return false;\n        }\n\n        return send();\n    };\n\n    var initSendingLiveIds = function () {\n        sendingLiveIds = Object.values(StandardCart.getItems()).filter(x => x.isLive).map(x => Number(x.originalId));\n    };\n\n\n    var cancelLiveBet = function (item) {\n        if (StandardCart.getType() == 'Single') {\n            var indexOfItem = sendingLiveIds.indexOf(Number(item.originalId));\n            if (indexOfItem !== -1) {\n                sendingLiveIds.splice(indexOfItem, 1);\n                if (sendingLiveIds.length != 0)\n                    return;\n            }\n        }\n\n        clearTimeout(liveBetTimeout);\n        liveBetTimeout = undefined;\n        isWaitingForLiveBet = false;\n\n        BettingCart.visual.hideLoader();\n        BettingCart.isSending = false;\n    };\n\n\n    var sendToServer = function (data) {\n        Ajax.postJson(\"/BettingCart/SendBettingCart\", {\n            data: {\n                cartData: data,\n                couponId: Freebet.isSelected() ? Freebet.getFreebetId() : null,\n                duplicateToken: app.generateGUID() + ':' + Date.now()\n            },\n            success: function (resp) {\n\n                if (resp.IsSuccess && resp.FailedPositions.length === 0) {\n                    StandardCart.removeAllItemsAfterSend(resp.CoefsToRemove);\n                    StandardCart.showSuccessMessage(resp.NeedConfirmation);\n                    if (Freebet.isSelected()) {\n                        Freebet.updateAfterSuccessSend();\n                    }\n                } else {\n                    if (resp.FailedPositions && resp.FailedPositions.length > 0) {\n                        var badIds = [];\n                        var items = StandardCart.getItems();\n\n                        for (var i = 0; i < resp.FailedPositions.length; i++) {\n                            var oId = resp.FailedPositions[i].OriginalCoefId;\n\n                            if (items[oId]) {\n                                items[oId].errors.length = 0;\n                                items[oId].errors.push(resp.FailedPositions[i].ErrorMessage);\n                                items[oId].showErrors();\n                                items[oId].animateFail();\n                                badIds.push(parseInt(oId));\n                            }\n                        }\n\n                        for (key in items) {\n                            var item = items[key];\n                            if (badIds.indexOf(parseInt(item.originalId)) == -1) {\n                                    var removeAfter = (resp.CoefsToRemove && resp.CoefsToRemove.indexOf(parseInt(item.originalId)) !== -1)\n                                    item.animateSuccess(removeAfter);\n                            }\n                        }\n\n                        StandardCart.humanizeErors.items();\n\n                    } else {\n                        for (key in items) {\n                            items[key].animateFail();\n                        }\n                    }\n\n                    if (Freebet.isSelected()) {\n                        Freebet.updateAfterFailedSend();\n                    }\n\n                    if (resp.IsUnauthorized) {\n                        StandardCart.showErrors(Localization.getString('BettingCart.LoginToBet', 'Для совершения ставки необходимо авторизоваться.'));\n                    }\n\n                    if (resp.CommonErrorMessage) {\n                        StandardCart.showErrors([resp.CommonErrorMessage]);\n                        StandardCart.humanizeErors.general();\n                    }\n                }\n\n                    BettingCart.visual.hideLoader();\n                    BettingCart.isSending = false;\n                //TODO: 12min timer\n            }\n        });\n    }\n\n    var send = function () {\n        if (BettingCart.isSendAllowed === false)\n            return false;\n\n        if (mode !== 'Standard')\n            return false;\n\n        var data = {\n            type: StandardCart.getType(),\n            bettingCartInfo: {\n                TotalMoneyValue: 0,\n                TotalMoneyCurrency: currencyMap.CURRENCY,\n                NotWinEventCount: 0,\n            },\n            bettingCartPositions: [],\n        };\n        data = StandardCart.prepareData(data);\n\n        BettingCart.isSending = true;\n        BettingCart.visual.showLoader();\n\n        return sendToServer(data);\n    };\n\n    var load = function () {\n        var accountId = sessionStorage.getItem('accountId');\n        isLoading = true;\n\n        if (!globalAppSettings.isMobileDevice) {\n            scrollbar = new AwesomeScrollbar('#betting-cart__scroll-area', 'betting-cart__scrollbar-area-wrapper');\n        }\n        dom = {\n            container: $('[js-node=\"betting-cart\"]'),\n            modeSwitcher: $('[js-node=\"betting-cart__mode-switcher\"]'),\n            modeSwitcherWrapper: $('[js-node=\"betting-cart__mode-switcher-wrapper\"]'),\n            overlay: $('[js-node=\"betting-cart__overlay\"]'),\n            collapseButton: $('[js-node=\"cart__collapse-button\"]')\n        };\n\n        setTimeout(function () {\n            dom.container.removeClass('is-loading');\n        }, 500);\n\n\n        var modeSwitcherWrapperSettings = globalAppSettings.currentUser.bettingCart.modeSwitcherWrapper;\n        if (!!modeSwitcherWrapperSettings.IsEnabled) {\n            dom.modeSwitcherWrapper.removeClass('m-disabled');\n        }\n        else {\n            dom.modeSwitcherWrapper.addClass('m-disabled');\n        }\n\n        if (!!modeSwitcherWrapperSettings.Tooltip) {\n            dom.modeSwitcherWrapper.attr('bb-tool', modeSwitcherWrapperSettings.Tooltip);\n        }\n        else {\n            dom.modeSwitcherWrapper.removeAttr('bb-tool');\n        }\n\n        var cartSettingsButtonSettings = globalAppSettings.currentUser.bettingCart['cart-settings-button'];\n        if (!!cartSettingsButtonSettings.IsEnabled) {\n            $('#cart-settings-button').removeClass('m-disabled');\n        }\n        else {\n            $('#cart-settings-button').addClass('m-disabled');\n        }\n\n        if (globalAppSettings.currentUser.isCaptchaRequired) {\n            dom.modeSwitcherWrapper.addClass('m-disabled');\n        }\n\n        var cart = JSON.parse(localStorage.getItem('bettingCart')),\n            oneclickCartData,\n            standardCartData;\n\n        if (cart) {\n            if (cart.hasOwnProperty('unauthorized') && accountId !== 'unauthorized') {\n                cart[accountId] = cart['unauthorized'];\n                delete cart['unauthorized'];\n                localStorage.setItem('bettingCart', JSON.stringify(cart));\n            }\n\n            if (cart[accountId]) {\n                mode = cart[accountId].mode;\n\n                if (cart[accountId].isCollapsed) {\n                    collapse();\n                } else {\n                    expand();\n                }\n\n                if (cart[accountId].hasOwnProperty('oneclickCartData')) {\n                    oneclickCartData = cart[accountId]['oneclickCartData'];\n                }\n\n                if (cart[accountId].hasOwnProperty('standardCartData')) {\n                    standardCartData = cart[accountId]['standardCartData'];\n                }\n            }\n        }\n\n        StandardCart.load(standardCartData);\n        OneclickCart.load(oneclickCartData);\n        setMode(mode, true);\n\n        if (validate()) {\n            StandardCart.serverValidate();\n        }\n\n        bindUI();\n\n        isLoading = false;\n        document.dispatchEvent(new CustomEvent('bettingCartIsLoaded'))\n    };\n\n    var validate = function () {\n        if (mode === 'Standard') {\n            return StandardCart.validate();\n        }\n    };\n\n    /**\n     *\n     * @param newMode String 'standard' || 'oneclick'\n     */\n    var setMode = function (newMode, justLoaded) {\n        mode = newMode.toLowerCase() === 'oneclick' ? 'Oneclick' : 'Standard';\n\n        if (mode === 'Oneclick') {\n            dom.container\n                .removeClass('standard')\n                .addClass('oneclick');\n\n            dom.modeSwitcher.prop('checked', true);\n        } else {\n            dom.container\n                .addClass('standard')\n                .removeClass('oneclick');\n\n            dom.modeSwitcher.prop('checked', false);\n        }\n\n        if (justLoaded === undefined || justLoaded === false) {\n            //deactivate prevState items. activate currentState\n            Highlighting.deactivate.otherModes();\n            Highlighting.activate.allScopes();\n        }\n        save();\n    };\n\n    var bindUI = function () {\n        dom.modeSwitcher.on('change', function () {\n            if (!globalAppSettings.currentUser.bettingCart.modeSwitcherWrapper.IsEnabled) return;\n\n            var newMode = $(this).prop('checked') === true ? 'oneclick' : 'standard';\n            setMode(newMode);\n        });\n\n        dom.collapseButton.on('click', function () {\n            if (isCollapsed) {\n                expand();\n            } else {\n                collapse();\n            }\n        });\n\n        window.addEventListener('notificationBalanceUpdate', function (event) {\n            const bonuses = 'detail' in event && event.detail.bonusPoints ? event.detail.bonusPoints : 0;\n\n            notification.updateAccountBonusPoints(bonuses);\n        });\n    };\n\n    var expand = function () {\n        isCollapsed = false;\n        dom.container.removeClass('collapsed');\n        save();\n    }\n\n    var collapse = function () {\n        isCollapsed = true;\n        setMode('standard');\n        dom.container.addClass('collapsed');\n        save();\n    };\n\n    var getIsLoading = function () {\n        return isLoading;\n    };\n\n    var settings = (function () {\n        var selectors = {\n            openButton: '#cart-settings-button',\n            overlay: '#cart-settings-overlay'\n        };\n\n        var dom = {\n            container: $('#cart-settings'),\n            openButton: $(selectors.openButton),\n            overlay: $('<div/>', {\n                class: 'cart-settings__overlay',\n                id: 'cart-settings-overlay'\n            })\n        };\n\n        var actions = {\n            open: function () {\n                if (dom.openButton.hasClass('m-disabled'))\n                    return false;\n\n                document.dispatchEvent(\n                    new CustomEvent('mtmCustomEvent', {\n                        detail: {\n                            id: 'd-i06-e3',\n                        },\n                    })\n                );\n\n                dom.openButton.addClass('m-active');\n                dom.container.addClass('m-opened');\n                $('[js-node=\"betting-cart\"]').append(dom.overlay);\n                $(document).on('click.cartSettingsClose, touchstart.cartSettingsClose', selectors.overlay + ',' + selectors.openButton, actions.close);\n            },\n            close: function () {\n                document.dispatchEvent(\n                    new CustomEvent('mtmCustomEvent', {\n                        detail: {\n                            id: 'd-i06-e4',\n                        },\n                    })\n                );\n                dom.openButton.removeClass('m-active');\n                dom.container.removeClass('m-opened');\n                dom.overlay.remove();\n                $(document).off('click.cartSettingsClose, touchstart.cartSettingsClose');\n            }\n        };\n\n        var bindUI = function () {\n            $(document).on('click.cartSettingsOpen', selectors.openButton, actions.open);\n        };\n\n        var unbindUI = function () {\n            $(document).off('click.cartSettingsOpen');\n        };\n\n        return {\n            bindUI: bindUI,\n            open: actions.open,\n            close: actions.close\n        };\n    }());\n\n    return {\n        addItemObsolete: addItemObsolete,\n        addItem: addItem,\n        calc: calc,\n        currencyMap: currencyMap,\n        removeItem: removeItem,\n        getItems: getItems,\n        getIsLoading: getIsLoading,\n        hasItem: hasItem,\n        load: load,\n        save: save,\n        send: send,\n        sendWithFreebetProposal: sendWithFreebetProposal,\n        settings: settings,\n        setMode: setMode,\n        validate: validate,\n        visual: visual,\n        isOneClick: function () { return (mode.toLowerCase() === 'oneclick') },\n        notification: notification,\n        Highlighting: Highlighting,\n        isSendAllowed: true\n    };\n}());","window.Freebet = (function () {\n\n    var _avaliableCount = 0;\n    var _number = 0;\n    var _title;\n    var _isActive = false;\n    var _isSelected = false;\n    var _sum = 0;\n    var _dom = {};\n\n    var init = function () {\n        _dom = {\n            container: $('[js-node=\"coupon__item__selected--wrapper\"]'),\n            title: $('[js-node=\"coupon__item-body-title\"]'),\n            clearBtn: $('[js-node=\"coupon__item__button--clear\"]'),\n            activeSwitcherInput: $('[js-node=\"coupon__item-switcher\"]'),\n            constraintsContainer: $('[js-node=\"coupon__constraints-wrapper\"]'),\n            constraintsListContainer: $('[js-node=\"coupon__constraints-list\"]')\n        };\n\n        readAvaliableCount();\n        bindUI();\n    };\n\n    var readAvaliableCount = function () {\n        _avaliableCount = 0;\n        var infoContainer = $('#cart-freebet-info');\n        if (infoContainer.length) {\n            var parsedAvaliableCount = parseInt(infoContainer.attr('data-freebet-count'));\n            if (!isNaN(parsedAvaliableCount))\n                _avaliableCount = parsedAvaliableCount;\n        }\n    }\n\n    var bindUI = function () {\n        $(document).off('click', '#activationCouponBtn');\n        $(document).on('click', '#activationCouponBtn', function (e) {\n            var checkedId = $('input[name=\"Id\"]:checked')[0].value;\n            var container = $('.j-freebet-item[data-id=\"' + checkedId + '\"]').first();\n            var title = container.find('.j-freebet-item-event-name').text();\n            var sum = container.find('[data-freebet-sum]').attr('data-freebet-sum');\n\n            $(document).trigger('notification_SetFreebet', {\n                number: checkedId,\n                title: title,\n                sum: sum\n            });\n\n            Popup.Close(this);\n        });\n\n        $(document).off('click', '#useCouponBtn');\n        $(document).on('click', '#useCouponBtn', function (e) {\n            var checkedId = $('input[name=\"Id\"]:checked')[0].value;\n            var container = $('.j-freebet-item[data-id=\"' + checkedId + '\"]').first();\n            var title = container.find('.j-freebet-item-event-name').text();\n            var sum = container.find('[data-freebet-sum]').attr('data-freebet-sum');\n\n            $(document).trigger('notification_UseCouponBeforeBet', {\n                number: checkedId,\n                title: title,\n                sum: sum\n            });\n\n            Popup.Close(this);\n        });\n\n        $(document).off('click', '#useCurrencyBtn');\n        $(document).on('click', '#useCurrencyBtn', function (e) {\n            $(document).trigger('notification_SendBettingCart');\n\n            Popup.Close(this);\n        });\n\n        $(document).off('notification_UseCouponBeforeBet');\n        $(document).on('notification_UseCouponBeforeBet', function (e, data) {\n            setFreebet(data);\n            validate();\n            BettingCart.send();\n        });\n\n        $(document).off('notification_SendBettingCart');\n        $(document).on('notification_SendBettingCart', function (e) {\n            BettingCart.send();\n        });\n\n        $(document).off('notification_SetFreebet');\n        $(document).on('notification_SetFreebet', function (e, data) {\n            setFreebet(data);\n            validate();\n        });\n\n        $(document).off('notificationCoefInCartUpdate notificationCoefIsAddedToCart notificationCoefIsRemovedFromCart notificationCartTypeIsChanged notificationCoefIsSelectedChanged notification_notWinEventCountChanged');\n        $(document).on('notificationCoefInCartUpdate notificationCoefIsAddedToCart notificationCoefIsRemovedFromCart notificationCartTypeIsChanged notificationCoefIsSelectedChanged notification_notWinEventCountChanged', function (e, data) {\n            if (_isSelected) {\n                validate();                \n            }\n\n            e.stopImmediatePropagation();\n            return false;\n        });\n\n        _dom.clearBtn.off('click');\n        _dom.clearBtn.on('click', function () {\n            clear();\n        });\n\n        _dom.activeSwitcherInput.off('change');\n        _dom.activeSwitcherInput.on('change', function () {\n            setIsSelected($(this).is(':checked'));\n        });\n    };\n\n    var setIsSelected = function (isSelected) {        \n        if (isSelected) {\n            _isSelected = true;\n            _dom.activeSwitcherInput.prop('checked', true);\n            $('#classic-betting-cart').addClass('m-freebet-is-active');\n            _dom.constraintsContainer.show();\n        } else {\n            _isSelected = false;\n            _dom.activeSwitcherInput.prop('checked', false);\n            $('#classic-betting-cart').removeClass('m-freebet-is-active');\n            _dom.constraintsContainer.hide();\n        }\n\n        BettingCart.calc();\n        BettingCart.validate();\n    }\n\n    var setFreebet = function (data) {\n        if (_avaliableCount === 0) {\n            clear();\n            return;\n        }\n\n        _number = data.number / 1;\n        _title = data.title;\n        _isActive = true;\n        _isSelected = data.hasOwnProperty('isSelected') ? data.isSelected : true;\n        _sum = parseInt(data.sum);        \n        _dom.title.text(_title);\n\n        $('#cart__freebet-sum-value').html(_sum);\n        $('#classic-betting-cart').addClass('m-freebet');\n\n        setSingleItemAfterFreebetProposalSelect();\n        setIsSelected(_isSelected);\n    };\n\n    var isActive = function () {\n        return _isActive;\n    };\n\n    var isSelected = function () {\n        return _isSelected;\n    };\n\n    var getTitle = function () {\n        return _title;\n    };\n\n    var getSum = function () {\n        return _sum;\n    };\n\n    var getAvaliableCount = function () {\n        return _avaliableCount;\n    };\n\n    var clear = function () {\n        _title = \"\";\n        _number = 0;\n        _isActive = false;\n        _isSelected = false;\n\n        $('#classic-betting-cart').removeClass('m-freebet');\n        setIsSelected(false);\n\n        _dom.constraintsListContainer.empty();\n    };\n\n    var convertCartTypeToInt = function (typeName) {\n        //Single || Express || System\n\n        switch (typeName) {\n            case 'Single':\n                return 4;\n            case 'Express':\n                return 1;\n            case 'System':\n                return 2;\n            default:\n                return 0;\n        }\n    };\n\n    var humanizeCouponResult = function (code) {\n        switch (code) {\n            case 1: return window.Localization.getString('Scripts_Shared_Modules.Freebet_36', 'Успешно');\n            case 2: return window.Localization.getString('Scripts_Shared_Modules.Freebet_37', 'Ставка не соотвествует купону');\n            case 3: return window.Localization.getString('Scripts_Shared_Modules.Freebet_38', 'Срок действия купона истек');\n            case 4: return window.Localization.getString('Scripts_Shared_Modules.Freebet_39', 'Не все условия выполнены');\n            case 5: return window.Localization.getString('Scripts_Shared_Modules.Freebet_40', 'Корзина пуста');\n            case 6: return window.Localization.getString('Scripts_Shared_Modules.Freebet_41', 'Некорректная область использования');\n            default: return \"\";\n        }\n    }\n\n    var renderConstraints = function (data) {\n        let html = '';\n\n        let hasRequirement = typeof (data.Requirement) !== \"undefined\" && data.Requirement !== null && data.Requirement.length > 0;\n        let hasErrorMessage = typeof (data.ErrorMessage) !== \"undefined\" && data.ErrorMessage !== null && data.ErrorMessage.length > 0;\n\n        if ((!hasRequirement && !hasErrorMessage) || !_isSelected) {\n            _dom.constraintsContainer.hide();\n        }\n        else {\n            _dom.constraintsContainer.show();\n        }\n\n        if (hasRequirement) {\n            data.Requirement.forEach(r => {\n                html += '<div class=\"freebet-constrains-item\">';\n                html += r.IsValid ? app.htmlSvgIcon('ok', 'freebet-constrains-item__icon m-success') : app.htmlSvgIcon('error', 'freebet-constrains-item__icon m-fail');\n                html += r.Description;\n                html += '</div>';\n            });\n        }\n\n        if (hasErrorMessage) {\n            html += '<div class=\"freebet-constrains-item\">';\n            html += app.htmlSvgIcon('error', 'freebet-constrains-item__icon m-fail');\n            html += data.ErrorMessage;\n            //html += humanizeCouponResult(data.Result);\n            html += '</div>';\n        }\n\n        _dom.constraintsListContainer.html(html);\n    };\n\n    var setSingleItemAfterFreebetProposalSelect = function () {\n        if (StandardCart.isTypeSingle()) {\n            var selectedItemForFreebet = StandardCart.getSingleSelectedItemForFreebetProposal();\n            if (selectedItemForFreebet) {\n                setSelectetItem(selectedItemForFreebet.originalId);\n            }\n        }\n    };\n\n    var addPosition = function(items, item) {\n        items.push({ CoefId: item.actualId, Value: item.originalCoefValue, EventId: item.eventId });\n        return items;\n    }\n\n    var getPositionsForProposal = function () {\n        var items = BettingCart.getItems();\n        var positions = [];\n\n        if (StandardCart.isTypeSingle()) {\n            var selectedItemForFreebet = StandardCart.getSingleSelectedItemForFreebetProposal();\n            if (selectedItemForFreebet) {\n                addPosition(positions, selectedItemForFreebet);\n            }\n        } else {\n            for (var key in items) {\n                if (items[key].isSelected) {\n                    addPosition(positions, items[key]);\n                }\n            }\n        }\n\n        return positions;\n    };\n\n    var getPositions = function () {\n        var items = BettingCart.getItems();\n        var positions = [];\n\n        if (StandardCart.isTypeSingle()) {\n            var selectedItemForFreebet = StandardCart.getSelectedItemForFreebet();\n\n            if (selectedItemForFreebet) {\n                addPosition(positions, selectedItemForFreebet);\n            }\n        } else {\n            for (var key in items) {\n                if (items[key].isSelected) {\n                    addPosition(positions, items[key]);\n                }\n            }\n        }\n\n        return positions;\n    };\n\n    var getSelectedItemId = function () {\n        return parseInt($('[name=\"cart-item-freebet-radio\"]:checked').val()) || null;\n    };\n\n    var setSelectetItem = function (originalId) {\n        $('[name=\"cart-item-freebet-radio\"][value=' + originalId + ']').attr('checked', true);\n    }\n\n    var validate = function () {\n        Ajax.postJson(\"/bettingcart/checkcoupon\", {\n            data: {\n                cartModel: {\n                    CartType: convertCartTypeToInt(StandardCart.getType()),\n                    NotWinEventCount: StandardCart.getNotWinEventsCount(),\n                    TotalConstantsCount: 0,\n                    Positions: getPositions()\n                },\n                couponId: _number\n            },\n            success: function (data) {\n                if (StandardCart.isTypeSingle() && StandardCart.quantity() > 0 && !getSelectedItemId()) {\n                    data.ErrorMessage = window.Localization.getString('Scripts_Shared_Modules.Freebet_42', 'Выберите один из исходов в корзине');\n                }                \n\n                renderConstraints(data);\n            },\n            error: function () {                \n                console.log('error checkCoupon');\n            }\n        });\n    };\n\n    var proposeCouponList = function () {\n        Ajax.postJson(\"/bettingcart/proposesuitablecouponList\", {\n            data: {\n                cartModel: {\n                    CartType: convertCartTypeToInt(StandardCart.getType()),\n                    NotWinEventCount: StandardCart.getNotWinEventsCount(),\n                    TotalConstantsCount: 0,\n                    Positions: getPositionsForProposal()\n                }\n            },\n            success: function (resp) {\n                if (!resp.hasCoupons) {\n                    BettingCart.send();\n                }\n                else {\n                    new AwesomeScrollbar('#freebet-popup-list', 'freebet-popup__scrollarea');\n                }\n            }\n        });\n    };\n\n    var getFreebetId = function () {\n        return _number;\n    };\n\n    var updateFullCartBlock = function () {\n        Ajax.postJson(\"/bettingcart/updatefreebet\", {\n            success: function () {\n                init();\n            }\n        });\n    };\n\n    var updateInfoRow = function () {\n        Ajax.postJson(\"/bettingcart/updatefreebetinfo\", {\n            success: function () {\n                readAvaliableCount();\n            }\n        });\n    };\n\n    var updateAfterSuccessSend = function () {\n        clear();\n        updateInfoRow();\n    };\n\n    var updateAfterFailedSend = function () {\n        updateInfoRow();\n    };\n\n\n    return {\n        init: init,\n        clear: clear,\n        getSelectedItemId: getSelectedItemId,\n        getFreebetId: getFreebetId,\n        isActive: isActive,\n        isSelected: isSelected,\n        getSum: getSum,\n        getTitle: getTitle,\n        validate: validate,\n        getAvaliableCount: getAvaliableCount,\n        proposeCouponList: proposeCouponList,\n        updateAfterSuccessSend: updateAfterSuccessSend,\n        updateAfterFailedSend: updateAfterFailedSend\n    };\n}());","window.OneclickCart = (function () {\n\n\tvar dom = {};\n\tvar baseSums = {};\n    var items = {};\n\n    var isSending = false;\n    var sendingOriginalId = undefined, sendingEventId = undefined;\n\n    function setSendingIds(oid, eid) {\n        oid = Number(oid);\n        if (oid != NaN)\n            sendingOriginalId = oid;\n\n        eid = Number(eid);\n        if (eid != NaN)\n            sendingEventId = eid;\n    }\n\n    function clearSendingIds() {\n        sendingOriginalId = undefined;\n        sendingEventId = undefined;\n    }\n\n    function cancelLiveBet() {\n        var item = OneclickCart.items[sendingOriginalId];\n        if (item.isLiveBetWaiting && typeof (item.liveBetTimeout) !== 'undefined') {\n            clearTimeout(item.liveBetTimeout);\n\n            item.isLiveBetWaiting = false;\n            item.setErrorMessage(Localization.getString('BettingCart.CoefChanged', 'Коэффициент был изменен'));\n            item.setRequestStatus('error');\n\n            item.timeout = setTimeout(function () {\n                item.remove();\n            }, 10000);\n\n            BettingCart.visual.hideLoader();\n            OneclickCart.isSending = false;\n            clearSendingIds();\n        }\n    }\n\n\tvar bindUIActions = function () {\n        dom.sumInput.on('input change', function () {\n            const filteredVal = $(this).val().replace(/\\D/g, ''); \n            $(this).val((parseInt(filteredVal) === 0 || !filteredVal) ? '' : app.numberToString(filteredVal));\n\n            if (OneclickCart.validate() === false) {\n                dom.sumInput.addClass('error');\n                OneclickCart.showErrors([100]);\n            } else {\n                BettingCart.save();\n            }\n\t\t});\n\n\t\tdom.betSumButton.on('click', function () {\n\t\t\tvar button = $(this);\n\t\t\tvar sum = button.data('sum');\n\n\t\t\tif (sum) {\n\t\t\t\tdom.sumInput.val(sum).trigger('change');\n\n\t\t\t\tbutton.addClass('active');\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tbutton.removeClass('active');\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t});\n\n\t\tdom.addButton.on('click', function () {\n\t\t\tvar add = $(this).data('add');\n\t\t\tvar baseSum = parseInt(dom.sumInput.val().replace(/\\s+/g, '')) || 0;\n\n\t\t\tif (add) {\n\t\t\t\tdom.sumInput.val(baseSum + add).trigger('change');\n\t\t\t}\n\t\t});\n\n\t\tdom.automaxSwitcher.on('click', function () {\n\t\t\tBettingCart.save();\n\t\t});\n\t};    \n\n\treturn {\n\t\tload: function (data) {                            \n\t\t\t\tdom.betSumButton = $('[js-node=\"oneclick-cart__bet-sum\"]');\n\t\t\t\tdom.addButton = $('[js-node=\"oneclick-cart__add-to-sum\"]');\n\t\t\t\tdom.sumInput = $('[js-node=\"one-click__sum-input\"]');\n\t\t\t\tdom.automaxSwitcher = $('[js-node=\"oneclick-cart__automax-switcher\"]');\n\t\t\t\tdom.errorsContainer = $('[js-node=\"oneclick-cart__errors\"]');\n\n\t\t\t\tdom.betSumButton.each(function () {\n\t\t\t\t\tvar container = $(this);\n\t\t\t\t\tvar val = container.attr('data-sum');\n\n\t\t\t\t\tbaseSums[val] = container;\n\t\t\t\t});\n\n\t\t\t\tbindUIActions();\n\n\t\t\t\tif (data) {\n\t\t\t\t\tif (data.hasOwnProperty('betSum'))\n\t\t\t\t\t\tdom.sumInput.val(app.numberToString(data.betSum));\n\t\t\t\t\tif (data.hasOwnProperty('automax'))\n\t\t\t\t\t\tdom.automaxSwitcher.prop('checked', data.automax);\n\t\t\t\t}\n\n\t\t\t\tif (dom.sumInput.val() == '') {\n\t\t\t\t\tif (window.globalAppSettings.defaultBet) {                \t\t\n\t\t\t\t\t\tdom.sumInput.val(window.globalAppSettings.defaultBetSum || '');\n\t\t\t\t\t}\n\t\t\t\t}\t\t\t\t\t\t\t\t\t\n\n\t\t\t\tdom.sumInput.trigger('change');            \n\t\t},\n\t\tgetData: function() {\n\t\t\tvar self = this;\n\n\t\t\treturn {\n\t\t\t\tbetSum: self.getSum(),\n\t\t\t\tautomax: self.getAutomaxValue()\n\t\t\t};\n\t\t},\n\t\tgetSum: function () {\n\t\t\treturn parseInt(dom.sumInput.val().replace(/\\s+/g, ''));\n\t\t},\n\t\tclearSum: function () {\n\t\t\tif (dom.hasOwnProperty('sumInput')) {\n\t\t\t\tdom.sumInput.val('');\n\t\t\t\tBettingCart.save();\n\t\t\t}\n\t\t},\n\t\tgetItems: function () {\n\t\t\treturn items;\n        },\n        getItem: function (oid) {\n            return items[oid];\n        },\n        checkCoefForWaitingLiveBet: function (oid) {\n            if (Number(oid) === sendingOriginalId)\n                cancelLiveBet();\n        },\n        checkEventForWaitingLiveBet: function (eid) {\n            if (Number(eid) === sendingEventId)\n                cancelLiveBet();\n        },\n\t\tgetAutomaxValue: function () {\n\t\t\treturn dom.automaxSwitcher.prop('checked');\n\t\t},\n\t\tvalidate: function () {\n\t\t\tif (dom.sumInput.val() === '') {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tdom.sumInput.removeClass('error');\n\t\t\t\tOneclickCart.hideErrors();\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\t\tshowErrors: function (errors) {\n            var errorsTexts = {\n                100: Localization.getString('BettingCart.AmountRequired', 'Необходимо указать сумму')                \n\t\t\t};\n\t\t\terrors = errors || [];\n\n\t\t\tif (errors.length > 0) {\n\t\t\t\tvar text = '';\n                dom.errorsContainer.attr('bb-tool', text);\n\n\t\t\t\tfor (var i = 0; i < errors.length; i++) {\n\t\t\t\t\ttext += errorsTexts[errors[i]] || errors[i];\n\t\t\t\t\tif (i != errors.length) text += '<br />';\n\t\t\t\t}\n\n                dom.errorsContainer.attr('bb-tool', text);\n\t\t\t\t\n\t\t\t\tif (dom.errorsContainer.filter(':visible').length !== 0) \n\t\t\t\t\tdom.errorsContainer.animate({ opacity: 0.1 }, 100).animate({ opacity: 1 }, 100);\n\t\t\t\telse\n\t\t\t\t\tdom.errorsContainer.show();\n\n\t\t\t\tdom.sumInput.addClass('m-error');\n\t\t\t}\n\t\t},\n\t\thideErrors: function () {\n\t\t\tdom.errorsContainer.hide();\n\t\t\tdom.sumInput.removeClass('m-error');\n        },        \n\t\taddItem: function (data) {\n\t\t\tif (data.oId) {\n                var item = {\n                    actualData: {\n                        oId: data.oId,\n                        aId: data.aId,\n                        val: data.val,\n                        eId: data.eId\n                    },\n                    loadActualCoefValue: function (callback) {\n                        var self = this;\n                        Ajax.postJson(\"/BettingCart/GetActualCoefs\", {\n                            data: {\n                                coefs: [{\n                                    coefid: self.actualData.oId,\n                                    eventid: self.actualData.eId\n                                }]\n                            },\n                            success: function (resp) {\n                                if (Array.isArray(resp) && resp.length == 1) {\n                                    let actual = resp[0];\n                                    if (parseInt(actual.oid) === parseInt(self.actualData.oId)) {\n\n                                        self.actualData.rTitle = actual.n;\n                                        if (actual.hasOwnProperty('ht')) {\n                                            self.actualData.eTitle = (actual.hasOwnProperty('at')) ? (actual.ht + ' — ' + actual.at) : actual.ht;\n                                        }\n\n                                        callback();\n                                    }\n                                }\n                            }\n                        });\n                    },\n\t\t\t\t\tcreate: function () {\n\t\t\t\t\t\tvar self = this;\n\n\t\t\t\t\t\tself.container = $('<div/>', {\n\t\t\t\t\t\t\t'class': 'b-cart-one-click-item'\n\t\t\t\t\t\t});\n                        self.container.attr('original-id', self.actualData.oId);\n\t\t\t\t\t\tvar html = [\n\t\t\t\t\t\t\t\t'<div class=\"b-cart-one-click-item__header\">',\n                                    '<div class=\"b-cart-one-click-item__title\">' + self.actualData.eTitle + '</div>',\n                                    '<div class=\"b-cart-one-click-item__remove js-cart-one-click-item-remove\">' + Utils.svgHtml('close', 'modal__close-icon') + '</div>',\n\t\t\t\t\t\t\t\t'</div>',\n\t\t\t\t\t\t\t\t'<div class=\"b-cart-one-click-item__body\">',\n\t\t\t\t\t\t\t\t\t'<div class=\"b-cart-one-click-item__row\">',\n\t\t\t\t\t\t\t\t\t\t'<div class=\"b-cart-one-click-item__label\">' + self.actualData.rTitle + '</div>',\n\t\t\t\t\t\t\t\t\t\t'<div class=\"b-cart-one-click-item__value\">' + self.actualData.val + '</div>',\n\t\t\t\t\t\t\t\t\t'</div>',\n\t\t\t\t\t\t\t\t\t'<div class=\"b-cart-one-click-item__row\">',\n                            '<div class=\"b-cart-one-click-item__label\">' + Localization.getString('Shared.Amount', 'Сумма') + '</div>',\n                            '<div class=\"b-cart-one-click-item__value\"><span class=\"js-cart-one-click-item__value-bet-sum\">' + data.betSum + '</span> <span class=\"b-cart-one-click-item__value-currency\">' + window.globalAppSettings.currentUser.defaultBalance.currencySymbol + '</span></div>',\n\t\t\t\t\t\t\t\t\t'</div>',\n\t\t\t\t\t\t\t\t\t'<div class=\"b-cart-one-click-item__row\">',\n                            '<div class=\"b-cart-one-click-item__label\">' + Localization.getString('Profile.BetStatus') +'</div>',\n\t\t\t\t\t\t\t\t\t\t'<div class=\"b-cart-one-click-item__value b-cart-one-click-item__status\">',\n                            '<div class=\"b-cart-one-click-item__status-item ok\"><div class=\"b-cart-one-click-item__status-icon\"></div> ' + Localization.getString('BettingCart.Accepted','Принято') + '</div>',\n                                            '<div class=\"b-cart-one-click-item__status-item need-confirmation\">',\n                                                '<div style=\"margin:0 10px\">' + Utils.svgHtml('wait', 'icon-status-waiting-for-confirm') + '</div>',\n                            '<div style=\"flex-basis: 130px; flex-shrink: 1; flex-grow: 0;\">' + Localization.getString('Bets.BetConfirmation') +'</div>',\n                                            '</div>',\n                            '<div class=\"b-cart-one-click-item__status-item error\"><div class=\"cart-oneclick__error-wrapper js-cart-one-click-error-message-tooltip\" bb-tool=\"tooltip\" bb-tool-type=\"error\"><div class=\"cart-oneclick__error-icon icon-error\">i</div> ' + Localization.getString('Shared.Error','Ошибка') +'</div></div>',\n                            '<div class=\"b-cart-one-click-item__status-item loading active\"><div class=\"betting-cart__loader-spiner-wrapper m-one-click-item\"><div class=\"betting-cart__loader-spiner-container\"><div class=\"betting-cart__loader-spiner-speeding-wheel\"></div></div></div> ' + Localization.getString('BettingCart.Waiting','Ожидание') +'</div>',\n\t\t\t\t\t\t\t\t\t\t'</div>',\n\t\t\t\t\t\t\t\t\t'</div>',\n\t\t\t\t\t\t\t\t'</div>',\n\t\t\t\t\t\t].join('\\n');\n\n\t\t\t\t\t\tself.container.append(html);\n\n\t\t\t\t\t\tself.container.find('.js-cart-one-click-item-remove').on('click', function () {\n\t\t\t\t\t\t\tself.remove();\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tsetResultMoneyValue: function (value) {\n\t\t\t\t\t\tvar self = this;\n\n\t\t\t\t\t\tself.container.find('.js-cart-one-click-item__value-bet-sum').html(value);\n\t\t\t\t\t},\n\t\t\t\t\tdraw: function () {\n                        var self = this;\n\n                        if (globalAppSettings.isMobileDevice && !globalAppSettings.isMobileDeviceInDesktopMode) {\n                            $('body').append(self.container);\n\n                            self.container.css({\n                                opacity: 0,                                \n                                bottom: '-100px'\n                            }).animate({\n                                opacity: 1,\n                                bottom: 0\n                            }, 200);\n                        } else {\n                            $('[js-node=\"betting-cart\"]').append(self.container);\n\n                            self.container.css({\n                                opacity: 0,\n                                position: 'relative',\n                                top: '100px'\n                            }).animate({\n                                opacity: 1,\n                                top: 0\n                            }, 200);\n                        }\n\t\t\t\t\t},\n\t\t\t\t\tremove: function () {\n\t\t\t\t\t\tvar self = this;\n\n\t\t\t\t\t\tif (self.timeout)\n\t\t\t\t\t\t\tclearTimeout(self.timeout);\n\n\t\t\t\t\t\tself.container.animate({\n\t\t\t\t\t\t\tleft: self.container.width(),\n\t\t\t\t\t\t\topacity: 0\n\t\t\t\t\t\t}, 200, function () {\n\t\t\t\t\t\t\tself.container.remove();\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (items[data.oId]) delete items[data.oId];\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (BettingCart.isOneClick())\n\t\t\t\t\t\t\tBettingCart.Highlighting.deactivate.allScopes(data.oId);\n\t\t\t\t\t},\n\t\t\t\t\tsetRequestStatus: function (status) {\n\t\t\t\t\t\tvar self = this;\n\t\t\t\t\t\tstatus = status || 'loading';\n\t\t\t\t\t\tself.container.find('.b-cart-one-click-item__status-item').removeClass('active');\n\n\t\t\t\t\t\tswitch (status) {\n\t\t\t\t\t\t\tcase 'ok':\n\t\t\t\t\t\t\t\tself.container.find('.b-cart-one-click-item__status-item.ok').addClass('active');\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'error':\n\t\t\t\t\t\t\t\tself.container.find('.b-cart-one-click-item__status-item.error').addClass('active');\n                                break;\n                            case 'need-confirmation':\n                                self.container.find('.b-cart-one-click-item__status-item.need-confirmation').addClass('active');\n                                break;\n\t\t\t\t\t\t\tcase 'loading':\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tself.container.find('.b-cart-one-click-item__status-item.loading').addClass('active');\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n                    setErrorMessage: function (message) {\n                        console.log(message)\n                        this.container.find('.js-cart-one-click-error-message-tooltip').attr('bb-tool', message);\n\t\t\t\t\t}\n\t\t\t\t};\n                item.isLiveBetWaiting = false;\n                item.loadActualCoefValue(function () {\n                    item.create();\n                    item.draw();\n                });\n\n\t\t\t\titems[data.oId] = item;\n\t\t\t}\n\t\t},\n        items: items,\n        sendToServer: function (sendData) {\n            Ajax.postJson('/BettingCart/SendOneClick', {\n                data: {\n                    cartData: JSON.stringify(sendData),\n                    duplicateToken: app.generateGUID() + ':' + Date.now()       \n                },\n                success: function (resp) {\n                    //CL-663 -----------------------\n                    BettingCart.visual.hideLoader();\n                    OneclickCart.isSending = false;\n                    clearSendingIds();\n                    //---------------------------------\n\n                    if (!OneclickCart.items.hasOwnProperty(resp.originalId)) {\n                        return;\n                    }\n\n                    OneclickCart.items[resp.originalId].isLiveBetWaiting = false;\n\n                    if (resp.isSuccessful === false) {\n                        OneclickCart.items[resp.originalId].setErrorMessage(resp.errorMessage);\n                        OneclickCart.items[resp.originalId].setRequestStatus('error');\n                    } else {\n                        OneclickCart.items[resp.originalId].setResultMoneyValue(resp.resultMoneyValue);\n                        var betStatus = (resp.needConfirmation) ? 'need-confirmation' : 'ok';\n                        OneclickCart.items[resp.originalId].setRequestStatus(betStatus);\n                    }\n\n                    if (OneclickCart.items[resp.originalId]) {\n                        OneclickCart.items[resp.originalId].timeout = setTimeout(function () {\n                            OneclickCart.items[resp.originalId].remove();\n                        }, 10000);\n                    }\n                    //BettingCart.deactivate(data.oId);\n                }\n            });\n        },\n        sendData: function (data) {\n            if (!globalAppSettings.currentUser.bettingCart['one-click-send-button'].IsEnabled) return;\n            \n\t\t\tif (!OneclickCart.validate()) {\n\t\t\t\t//BettingCart.deactivate(data.oId);\n\t\t\t\tdom.sumInput.addClass('error');\n\t\t\t\tOneclickCart.showErrors([100]);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (OneclickCart.isSending)\n\t\t\t\treturn false;\n\n\t\t\tdata.betSum = OneclickCart.getSum();\n            data.automax = OneclickCart.getAutomaxValue() ? true : false;\n\n\t\t\t//CL-663 -----------------------\n\t\t\tBettingCart.visual.showLoader();\n            OneclickCart.isSending = true;\n            setSendingIds(data.oId, data.eId);\n\t\t\t//---------------------------------\n\n            OneclickCart.addItem(data);             \n\n            var sendData = {\n                coef: {\n                    eventid: data.eId,\n                    coefid: data.aId\n                },\n                coefVal: data.val,\n                moneyVal: data.betSum,\n                isAutoMax: data.automax,\n                isLive: data.isLive\n            };\n            OneclickCart.sendToServer(sendData);\n\n\t\t\treturn true;\n\t\t},\n\t\tisSending: isSending,\n\t\tremoveItem: function (oid) {\n\t\t\tif (OneclickCart.isSending)\n\t\t\t\treturn false;\n\t\t\tOneclickCart.items[oid].remove();\n\t\t\treturn true;\n\t\t}\n\t};\n}());","window.StandardCart = (function () {\n\n    var betDeletionModeMap = {\n        DeleteOutcomes: 'DeleteOutcomes',\n        NoDeleteOutComes: 'NoDeleteOutComes',\n        NoDeleteOutComesWithMaxBet: 'NoDeleteOutComesWithMaxBet'\n    };\n\n    const MAX_CART_SIZE = 50;\n    var items = {},\n        dom = {},\n        type = 'Single', // Single || Express || System\n        state = 'Empty', // Empty || HasItems || Success\n        activeCoefMode = 'Fix', // Fix || NotLess || Any\n        currency = window.globalAppSettings.currentUser.defaultBalance.currencyCode,\n        betSum = 0,\n        minMoneyValue = 20,\n        betDeletionMode = betDeletionModeMap.DeleteOutcomes,\n        betSumCombobox,\n        bonusExpressAmountValue = 0,\n        isBettingCartDOMReady = false;\n    var typesMap = {\n        single: 'single',\n        express: 'express',\n        system: 'system'\n    };\n\n\n    var getUnique = function (value, index, self) {\n        return self.indexOf(value) === index;\n    };\n    var getDuplicates = function (value, index, self) {\n        return self.indexOf(value) !== index\n    };\n\n    document.addEventListener('bettingCartIsLoaded', () => {\n        isBettingCartDOMReady = true;\n        document.dispatchEvent(new CustomEvent('cartIsReadyToAddOutcomes'));\n    });\n\n    var load = function (data) {\n        dom = {\n            betSumInput: $('#standard-cart__bet-sum-input'),\n            betSumInputWrapper: $('#standard-cart__bet-sum-input-wrapper'),\n            maxBetSumMoneyValueBtn: $('#standard-cart__bet-sum-max-money-value-btn'),\n            possibleMoneyValue: $('[js-node=\"standard-cart__possible-money-value\"]'),\n            calcBetSumSingle: $('[js-node=\"standard-cart__bet-sum-single-value\"]'),\n            calcBetSumSingleBonus: $('[js-node=\"cart__bonus-bet-sum-value\"]'),\n            bonusBetSumContainer: $('[js-node=\"cart__bonus-bet-sum-container\"]'),\n            commonCoef: $('[js-node=\"standard-cart__common-coef\"]'),\n            coefModeMenuItemCommon: $('[js-node=\"standard-cart__coef-mode-menu-item-common\"]'),\n            container: $('[js-node=\"standard-cart\"]'),\n            notWinEventsCount: $('[js-node=\"standard-cart__not-win-events-count\"]'),\n            items: $('[js-node=\"standard-cart__items\"]'),\n            itemsCount: $('[js-node=\"betting-cart__items-count\"]'),\n            menuItems: $('[js-node=\"standard-cart__menu-item\"]'),\n            optionCount: $('[js-node=\"standard-cart__option-count\"]'),\n            removeAllItemsBtn: $('[js-node=\"betting-cart__remove-all-btn\"]'),\n            betDeletionMode: $('[js-node=\"cart-settigns__remove-coefs-after-send\"]'),\n            sendBtn: $('[js-node=\"standard-cart__send-btn\"]'),\n            acceptBtn: $('[js-node=\"standard-cart__accept-btn\"]'),\n            errorsIcon: $('[js-node=\"standard-cart__errors\"]'),\n            successBtn: $('#cart__success-close'),\n            betSumCurrency: $('[js-node=\"cart__currency-select\"]'),\n            bonusExpressContainer: $('#cart-bonus-express-container'),\n            bonusExpressInput: $('#cart__bonus-express-input'),\n            bonusExpressAmountContainer: $('#cart__bonus-express-amount-container'),\n            bonusExpressAmountValue: $('#cart__bonus-express-amount-value'),\n            bonusExpressAmountTooltip: $('#cart__bonus-express-amount-tooltip')\n        };\n\n        if (data) {\n            if (data.hasOwnProperty('items')) {\n                for (key in data['items']) {\n                    addItem(data['items'][key]);\n                }\n\n                fetchCartItems(true);\n            }\n\n            if (data.hasOwnProperty('type'))\n                type = data['type'];\n\n            if (data.hasOwnProperty('betSum'))\n                betSum = data['betSum'];\n\n            if (data.hasOwnProperty('currency'))\n                currency = data['currency'];\n\n            if (data.hasOwnProperty('isBonusExpress')) {\n                if (data.isBonusExpress === true) {\n                    bonusExpress.enable();\n                } else {\n                    bonusExpress.disable();\n                }\n            }\n\n            if (data.hasOwnProperty('freebet')) {\n                if (data.freebet.isActive) {\n                    $(document).trigger('notification_SetFreebet', {\n                        number: data.freebet.id,\n                        title: data.freebet.title,\n                        sum: data.freebet.sum,\n                        isSelected: data.freebet.isSelected\n                    });\n                }\n            }\n        }\n\n        betDeletionMode = betDeletionModeMap[window.globalAppSettings.betDeletionMode] || betDeletionModeMap.DeleteOutcomes;\n        activeCoefMode = window.globalAppSettings.bettingCartSubMode;\n\n        dom.coefModeMenuItemCommon.filter('[value=\"' + activeCoefMode + '\"]').prop('checked', true);\n\n        updateCount();\n        setType(type);\n        setBetDeletionMode(betDeletionMode);\n        setCurrency(currency);\n\n        if (parseInt(betSum) !== 0)\n            dom.betSumInput.val(app.numberToString(betSum));\n\n\n        var maxBetButtonSettings = globalAppSettings.currentUser.bettingCart['max-bet-amount-button'];\n\n        if (!!!maxBetButtonSettings.IsEnabled) {\n            setBetSumMaxMoneyValueButtonIsDisabled(true, maxBetButtonSettings.Message);\n        }\n\n        var commonSendButtonSettings = globalAppSettings.currentUser.bettingCart['common-send-button'];\n        if (!!commonSendButtonSettings.IsEnabled) {\n            dom.sendBtn.removeClass('m-blocked');\n        }\n        else {\n            dom.sendBtn.addClass('m-blocked');\n            dom.sendBtn.removeClass('disabled');\n        }\n\n        if (!!commonSendButtonSettings.Tooltip) {\n            dom.sendBtn.attr('bb-tool', commonSendButtonSettings.Tooltip);\n        }\n        else {\n            dom.sendBtn.removeAttr('bb-tool');\n        }\n\n\n        if ($.fn.niceSelect) {\n            dom.betSumCurrency.niceSelect();\n            dom.notWinEventsCount.niceSelect();\n        }\n\n        bindUI();\n        startFetch();\n        initCombobox();\n    };\n\n    var fetchCartItems = function (includePrematch) {\n        if (!isFetchReady)\n            return;\n\n        includePrematch = includePrematch || false;\n        var coefs = (includePrematch) ? getCoefs() : getLiveCoefs();\n        if (coefs.length == 0)\n            return;\n\n        isFetchReady = false;\n        Ajax.postJson(\"/BettingCart/GetActualCoefs\", {\n            data: {\n                coefs: coefs\n            },\n            success: function (resp) {\n                if (Array.isArray(resp)) {\n\n                    var hasChanges = false;\n                    for (var i = 0; i < resp.length; i++) {\n                        var actual = resp[i];\n                        var item = getItem(actual.oid);\n\n                        if (item) {\n                            var updateResult = item.updateCoef({\n                                actualId: actual.aid,\n                                value: actual.val,\n                                isActive: actual.act,\n                                isLive: actual.il,\n                                eventIsActive: actual.ea,\n                                eventIsOver: actual.eo,\n                                eventId: actual.ei,\n                                rTitle: actual.n,\n                                homeTeam: actual.ht,\n                                awayTeam: actual.at\n                            });\n                            hasChanges = hasChanges || updateResult;\n                            if (updateResult) {\n                                item.updateExternalCoef(actual.oid, actual.aid, actual.val, actual.act);\n                            }\n                        }\n                    }\n\n                    if (hasChanges) {\n                        BettingCart.calc();\n                        BettingCart.validate();\n                        BettingCart.save();\n                    }\n                }\n                isFetchReady = true;\n            },\n            error: function () {\n                isFetchReady = true;\n            }\n        });\n    };\n\n    var isFetchReady = true;\n    var fetchInterval;\n    var startFetch = function () {\n        var interval = (globalAppSettings.currentUser.isAnonymous) ? 30 * 1000 : 4 * 1000;\n        clearInterval(fetchInterval);\n        fetchInterval = setInterval(fetchCartItems, interval);\n    };\n\n    var initCombobox = function () {\n        var sums = window.globalAppSettings.additionalSumValues;\n\n        if (window.globalAppSettings.additionalSum && sums.length > 0) {\n            var cValues = [];\n\n            for (var i = 0; i < sums.length; i++) {\n                if (sums[i] > 0) {\n                    cValues.push(sums[i]);\n                }\n            }\n\n            if (cValues.length > 0) {\n                betSumCombobox = new Combobox(cValues, dom.betSumInput);\n            }\n        }\n    };\n\n    var getData = function () {\n        var data = {\n            items: [],\n            type: type,\n            state: state,\n            activeCoefMode: activeCoefMode,\n            betSum: betSum,\n            currency: currency,\n            isBonusExpress: bonusExpress.isEnabled,\n            freebet: {\n                id: Freebet.getFreebetId(),\n                isActive: Freebet.isActive(),\n                isSelected: Freebet.isSelected(),\n                title: Freebet.getTitle(),\n                sum: Freebet.getSum()\n            }\n        };\n\n        for (key in items) {\n            data.items.push({\n                'aId': items[key].actualId,\n                'val': items[key].coefValue,\n                'eId': items[key].eventId,\n                'eTitle': items[key].eventTitle,\n                'oId': items[key].originalId,\n                'rTitle': items[key].resultTitle,\n                'bet': items[key].bet,\n                'isLive': items[key].isLive,\n                'isSelected': items[key].isSelected,\n                'currency': items[key].currency,\n\n                'isActive': items[key].coefIsActive,\n                'isOver': items[key].coefIsOver,\n                'eventIsActive': items[key].eventIsActive,\n                'eventIsOver': items[key].eventIsOver\n            });\n        }\n\n        return data;\n    };\n\n    var autoSwitchType = function (isAdd) {\n        var count = Object.values(items).filter(function (item) {\n            return !item.eventIsOver && !item.coefIsOver;\n        }).length;\n\n        switch (getType().toLowerCase()) {\n            case typesMap.single:\n                if (count === 2 && isAdd)\n                    setType('Express');\n                break;\n            case typesMap.express:\n                if (count <= 1 && !isAdd)\n                    setType('Single');\n                break;\n            case typesMap.system:\n                if (count == 2 && !isAdd)\n                    setType('Express');\n                else if (count <= 1 && !isAdd)\n                    setType('Single');\n                break;\n            default:\n                break;\n        }\n    };\n\n    var addItem = function (data) {\n        if (isBettingCartDOMReady) {\n            if (data.hasOwnProperty('oId') === false) {\n                return false;\n            }\n               \n            if (getItem(data.oId) !== null) {\n                //TODO: Check coef actuality.\n                return true;\n            }\n\n            if (quantity() >= MAX_CART_SIZE) {\n                return false;\n            }\n\n            items[data.oId] = new app.StandardCartItem(data);\n\n            if (BettingCart.getIsLoading() === false) {\n                if (window.globalAppSettings.defaultBet === true && window.globalAppSettings.defaultBetSum > 0) {\n                    items[data.oId].bet = window.globalAppSettings.defaultBetSum;\n\n                    if (!dom.betSumInput.val()) {\n                        var defaultBetSum = currency === BettingCart.currencyMap.CURRENCY ? window.globalAppSettings.defaultBetSum : window.globalAppSettings.defaultBetSum * window.globalAppSettings.bonusExchangeRate;\n                        dom.betSumInput.val(app.numberToString(defaultBetSum));\n                        betSum = defaultBetSum;\n                    }\n                }\n\n                if (data.hasOwnProperty('loadActualCoefValue')) {\n                    if (data.loadActualCoefValue) {\n                        items[data.oId].loadActualCoefValue();\n                    }\n                }\n            }\n\n            items[data.oId].draw();\n            items[data.oId].checkActive();\n\n\n            updateCount();\n            autoSwitchType(true);\n            BettingCart.calc();\n            if (BettingCart.validate()) {\n                StandardCart.serverValidate();\n            }\n\n            $(document).trigger('notificationCoefIsAddedToCart', {\n                outcomeId: parseInt(data.oId)\n            });\n\n            document.dispatchEvent(new CustomEvent('notificationCoefIsAddedToCartVue', {\n                detail: parseInt(data.oId)\n            }));\n\n            return true;\n        };\n\n        return new Promise((resolve) => {\n            document.addEventListener('cartIsReadyToAddOutcomes', () => {\n                return resolve(data)\n            })\n        }).then((data) => addItem(data));\n\n    };\n\n    var removeItemAfterSend = function (originalId) {\n        if (items.hasOwnProperty(originalId)) {\n            items[originalId].erase();\n            items[originalId] = null;\n            delete items[originalId];\n\n            BettingCart.Highlighting.deactivate.allScopes(originalId);\n\n            updateCount();\n            autoSwitchType(false);\n\n            if (quantity() < 1) {\n                betSum = 0;\n                dom.betSumInput.val('');\n            }\n\n            $(document).trigger('notificationCoefIsRemovedFromCart', {\n                outcomeId: parseInt(originalId)\n            });\n\n            document.dispatchEvent(new CustomEvent('notificationCoefIsRemovedFromCartVue', {\n                detail: parseInt(originalId)\n            }));\n\n            BettingCart.calc();\n        }\n    };\n\n    var removeItemWithoutValidation = function (originalId) {\n        if (items.hasOwnProperty(originalId)) {\n            items[originalId].erase();\n            items[originalId] = null;\n            delete items[originalId];\n\n            BettingCart.Highlighting.deactivate.allScopes(originalId);\n\n            updateCount();\n            autoSwitchType(false);\n\n            if (quantity() < 1) {\n                betSum = 0;\n                dom.betSumInput.val('');\n            }\n\n            $(document).trigger('notificationCoefIsRemovedFromCart', {\n                outcomeId: parseInt(originalId)\n            });\n\n            document.dispatchEvent(new CustomEvent('notificationCoefIsRemovedFromCartVue', {\n                detail: parseInt(originalId)\n            }));\n\n            BettingCart.calc();\n        }\n    };\n\n    var removeItem = function (originalId) {\n        removeItemWithoutValidation(originalId);\n        if (BettingCart.validate()) {\n            StandardCart.serverValidate();\n        }\n\n        $(document).trigger('notificationCoefIsRemovedFromCart', {\n            outcomeId: parseInt(originalId)\n        });\n\n        document.dispatchEvent(new CustomEvent('notificationCoefIsRemovedFromCartVue', {\n            detail: parseInt(originalId)\n        }));\n    };\n\n    var removeAllItems = function (options) {\n        options = options ? options : {};\n        options.removeSelected = options.removeSelected === true ? true : false;\n        options.coefsToRemove = options.coefsToRemove ? options.coefsToRemove : Object.keys(items).map(function (key) { return parseInt(key); });\n\n        for (var oId in items) {\n            if (options.removeSelected === true && items[oId].isSelected === false) {\n                continue;\n            }\n\n            if (options.coefsToRemove.indexOf(parseInt(oId)) !== -1) {\n                items[oId].erase();\n                items[oId] = null;\n                delete items[oId];\n\n                $(document).trigger('notificationCoefIsRemovedFromCart', {\n                    outcomeId: parseInt(oId)\n                });\n\n                document.dispatchEvent(new CustomEvent('notificationCoefIsRemovedFromCartVue', {\n                    detail: parseInt(oId)\n                }));\n\n                BettingCart.Highlighting.deactivate.allScopes(oId);\n            }\n        }\n        updateCount();\n\n        setDefaultBetSumAndCurrency();\n\n        BettingCart.calc();\n        BettingCart.validate();\n    };\n\n    var removeAllItemsAfterSend = function (coefsToRemove) {\n        removeAllItems({\n            coefsToRemove: coefsToRemove,\n            removeSelected: true\n        });\n    };\n\n    var getItem = function (id) {\n        if (items.hasOwnProperty(id))\n            return items[id];\n        else\n            return null;\n    };\n\n    var getItems = function () {\n        return items;\n    };\n\n    var getLiveCoefs = function () {\n        return Object.values(items).filter(function (item) { return !!item.isLive; }).map(function (i) {\n            return {\n                coefid: i.actualId,\n                eventid: i.eventId\n            }\n        });\n    };\n\n    var getCoefs = function () {\n        return Object.values(items).map(function (i) {\n            return {\n                coefid: i.actualId,\n                eventid: i.eventId\n            }\n        });\n    };\n\n    var getSelectedItemForFreebet = function () {\n        var freebetSelectedItemId = Freebet.getSelectedItemId();\n        var selectedForFreebet = Object.values(items).filter(function (item) {\n            return parseInt(item.originalId) === freebetSelectedItemId;\n        });\n\n        if (selectedForFreebet.length > 0) {\n            return selectedForFreebet[0];\n        }\n\n        return null;\n    }\n\n    var getSingleSelectedItemForFreebetProposal = function () {\n        var selectedItems = Object.values(items).filter(function (item) {\n            return item.isSelected;\n        });\n\n        if (selectedItems.length !== 1)\n            return undefined;\n\n        return selectedItems[0];\n    }\n\n    var getCurrency = function () {\n        return currency;\n    }\n\n    var setCurrency = function (val) {\n        currency = val;\n        dom.betSumCurrency.val(val);\n    }\n\n    var quantity = function (onlySelected) {\n        onlySelected = onlySelected || false;\n        var quantity = 0;\n\n        if (onlySelected === true) {\n            for (key in items) {\n                if (items[key].isSelected === true) {\n                    quantity += 1;\n                }\n            }\n        } else {\n            quantity = Object.keys(items).length;\n        }\n\n        return quantity;\n    }\n\n    var hasItem = function (oid) {\n        return items.hasOwnProperty(oid);\n    };\n\n    var updateCount = function () {\n        var cnt = Object.keys(items).length;\n\n        dom.itemsCount.html(cnt);\n\n        if (cnt > 0) {\n            dom.itemsCount.show();\n            updateState('HasItems');\n        } else {\n            dom.itemsCount.hide();\n            updateState('Empty');\n        }\n    };\n\n    var setType = function (newType) {\n        type = newType;\n\n        dom.menuItems.removeClass('active');\n\n        dom.container\n            .removeClass('single express system')\n            .addClass(type.toLowerCase());\n\n        dom.menuItems.filter('[data-type=\"' + type + '\"]').addClass('active');\n\n        BettingCart.calc();\n        if (BettingCart.validate()) {\n            StandardCart.serverValidate();\n        }\n\n        $(document).trigger('notificationCartTypeIsChanged', {\n            newType: newType\n        });\n    };\n\n    var getType = function () {\n        return type;\n    };\n\n    var isTypeSingle = function () {\n        return type.toLowerCase() === typesMap.single;\n    }\n\n    var updateState = function (state) {\n        state = state.toLowerCase() || '';\n\n        hideSuccessMessage();\n\n        dom.container\n            .removeClass('hasitems')\n            .removeClass('empty')\n            .addClass(state);\n\n        if (state === 'empty')\n            dom.removeAllItemsBtn.hide();\n        else\n            dom.removeAllItemsBtn.show();\n    };\n\n    //центровка сообщения на экране при большом кол-ве ставок\n    function heightCorrection() {\n        if ($('.cart__body').height() > $('#layout-right-column').height()) {\n            $('#success-center-message').addClass('m-sticky');\n        } else if (globalAppSettings.isMobileDevice) {\n            $('#success-center-message').addClass('m-sticky');\n        } else {\n            $('#success-center-message').removeClass('m-sticky');\n        };\n    };\n\n    var showSuccessMessage = function (needConfirmation) {\n        dom.container.addClass('success');\n        heightCorrection();\n        if (needConfirmation)\n            dom.container.addClass('m-need-confirmation');\n    };\n\n    var hideSuccessMessage = function () {\n        dom.container.removeClass('success');\n        dom.container.removeClass('m-need-confirmation');\n    };\n\n    var setCoefMode = function (newActiveCoefMode) {\n        activeCoefMode = newActiveCoefMode;\n\n        dom.coefModeMenuItemCommon.filter('[value=\"' + activeCoefMode + '\"]').prop('checked', true);\n\n        BettingCart.save();\n    };\n\n    var setBetDeletionMode = function (newVal) {\n        if (betDeletionModeMap[newVal]) {\n            dom.betDeletionMode.filter('[value=\"' + betDeletionModeMap[newVal] + '\"]').prop('checked', true);\n        } else {\n            dom.betDeletionMode.filter('[value=\"' + betDeletionModeMap.DeleteOutcomes + '\"]').prop('checked', true);\n        }\n    };\n\n    var setBetSum = function (newBetSum) {\n        betSum = (newBetSum) ? parseInt(newBetSum) : 0;\n\n        BettingCart.calc();\n        BettingCart.validate();\n    };\n\n    var setDefaultBetSumAndCurrency = function () {\n        setCurrency(BettingCart.currencyMap.CURRENCY)\n        dom.betSumCurrency.niceSelect('update');\n\n        dom.betSumInput.val(app.numberToString(window.globalAppSettings.defaultBetSum));\n        betSum = window.globalAppSettings.defaultBetSum;\n    }\n\n    var getNotWinEventsCount = function () {\n        return dom.notWinEventsCount.val() || 1;\n    };\n\n    var getBetSum = function () {\n        return betSum;\n    };\n\n    var getActiveCoefMode = function () {\n        return activeCoefMode;\n    };\n\n    var getBetDeletionMode = function () {\n        return betDeletionMode;\n    };\n\n    var updateCalcResults = function (results) {\n        switch (type.toLowerCase()) {\n            case 'single':\n                if (results.hasOwnProperty('PossibleMoneyValue'))\n                    dom.possibleMoneyValue.html(app.numberToString(results.PossibleMoneyValue));\n\n                if (results.hasOwnProperty('betSum'))\n                    dom.calcBetSumSingle.html(app.numberToString(results.betSum));\n\n                if (results.hasOwnProperty('betSumBonus') && results.betSumBonus != 0) {\n                    dom.calcBetSumSingleBonus.html(app.numberToString(results.betSumBonus));\n                    dom.bonusBetSumContainer.removeClass('m-hidden');\n                } else {\n                    dom.bonusBetSumContainer.addClass('m-hidden');\n                }\n\n                break;\n            case 'express':\n                if (results.hasOwnProperty('PossibleMoneyValue'))\n                    dom.possibleMoneyValue.html(app.numberToString(results.PossibleMoneyValue));\n\n                if (results.hasOwnProperty('coef'))\n                    dom.commonCoef.html(window.Utils.displayCoefValue(results.coef));\n\n                if (results.hasOwnProperty('bonusExpressAmountValue')) {\n                    bonusExpressAmountValue = results.bonusExpressAmountValue;\n                    dom.bonusExpressAmountValue.html(results.bonusExpressAmountValue);\n                }\n\n                break;\n            case 'system':\n                if (results.hasOwnProperty('PossibleMoneyValue'))\n                    dom.possibleMoneyValue.html(app.numberToString(results.PossibleMoneyValue));\n\n                if (results.hasOwnProperty('OptionCount')) {\n                    dom.optionCount.html(results.OptionCount);\n                    if ($.fn.niceSelect) {\n                        dom.notWinEventsCount.niceSelect('update');\n                    }\n                }\n\n                //if (isBonus === true)\n                //dom.bonusSumValue.html(app.numberToString(betSum * 1000));\n\n                break;\n            default:\n                break;\n        }\n    };\n\n    var validate = function () {\n        var result = true,\n            type = getType(),\n            // добавлено в корзину и отмечено галочкой (активные кэфы)\n            selectedItemsCnt = 0,\n            selectedItems = items,\n            errors = [];\n\n        if (Freebet.isSelected() && isTypeSingle()) {\n            selectedItems = {};\n            var selectedItemForFreebet = getSelectedItemForFreebet();\n\n            if (selectedItemForFreebet) {\n                selectedItems[selectedItemForFreebet.originalId] = selectedItemForFreebet;\n                selectedItemsCnt = 1;\n            }\n        } else {\n            for (key in selectedItems) {\n                if (selectedItems[key].isSelected) {\n                    ++selectedItemsCnt;\n                }\n            }\n        }\n\n        const errorsMsgs = {\n            subModeConflictMessage: Localization.getString('BettingCart.SubModeError', 'Коэффициент был изменен. Для заключения пари примите изменения.'),\n            combinatonErrorMessage: Localization.getString('BettingCart.CombinationError', 'Вы не можете комбинировать результаты одного события.'),\n            tempCoefBlockErrorMessage: Localization.getString('BettingCart.TempBlockError', 'Прием пари на событие временно приостановлен.'),\n            systemLiveErrorMessage: Localization.getString('BettingCart.SystemLiveError', 'Все экспрессы(система) не может содержать Live-события.'),\n            countErrorMessage0: Localization.getString('BettingCart.CountError0', 'Не выбран ни один результат.'),\n            countErrorMessage3: Localization.getString('BettingCart.CountError3', 'Количество событий для пари типа Все экспрессы (система) не может быть меньше трех.'),\n            countErrorMessage16: Localization.getString('BettingCart.CountError16', 'Количество событий в системе не может быть больше 16-ти.'),\n            countErrorMessage2: Localization.getString('BettingCart.CountError2', 'Количество событий в экспрессе не может быть меньше двух.'),\n            badBetSumMessage: Localization.getString('BettingCart.BetSumError', 'Пожалуйста, укажите сумму ставки.'),\n        };\n\n        if (selectedItemsCnt === 0) {\n            errors = [errorsMsgs.countErrorMessage0];\n        } else {\n            itemsErrorsCnt = validateItems(selectedItems, type, errorsMsgs);\n\n            switch (type) {\n                case 'Express':\n                    errors = validateExpress(selectedItemsCnt, errorsMsgs);\n                    break;\n                case 'System':\n                    errors = validateSystem(selectedItemsCnt, errorsMsgs);\n                    break\n                default:\n                    break;\n            }\n        }\n\n        if (errors.length > 0 || itemsErrorsCnt > 0) {\n            showErrors(errors);\n            result = false;\n        } else {\n            hideErrors();\n        }\n\n        bonusExpress.checkIfIsAvailable();\n\n        setSendButtonState(result);\n\n        return result;\n    };\n\n    var validateItems = function (items, type, errorsMsgs) {\n        var errorsCnt = 0,\n            errorsFixNotLessCnt = 0,\n            item,\n            itemErrorsCnt,\n            selectedItems = {};\n\n        for (key in items) {\n            if (items[key].isSelected === true) {\n                selectedItems[key] = items[key];\n            } else {\n                items[key].errors = [];\n                items[key].hideErrors();\n            }\n        }\n\n        var duplicateEventIds = Object.keys(selectedItems).map(function (key) {\n            return selectedItems[key].eventId;\n        }).filter(getDuplicates).filter(getUnique);\n\n        for (key in selectedItems) {\n            item = selectedItems[key];\n            item.errors = [];\n            itemErrorsCnt = 0;\n\n            if (item.isSelected === true) {\n\n                switch (activeCoefMode) {\n                    case 'Fix':\n                        if (parseFloat(item.originalCoefValue) !== parseFloat(item.coefValue)) {\n                            items[key].errors.push(errorsMsgs.subModeConflictMessage);\n                            ++errorsCnt;\n                            ++itemErrorsCnt;\n                            ++errorsFixNotLessCnt;\n\n                            acceptButtonState(true);\n                        }\n                        break;\n                    case 'NotLess':\n                        if (parseFloat(item.originalCoefValue) > parseFloat(item.coefValue)) {\n                            items[key].errors.push(errorsMsgs.subModeConflictMessage);\n                            ++errorsCnt;\n                            ++errorsFixNotLessCnt;\n                            ++itemErrorsCnt;\n\n                            acceptButtonState(true);\n                        }\n                        break;\n                    case 'Any':\n                    default:\n                        break;\n                }\n\n                if (type === 'Express' || type === 'System') {\n                    if (duplicateEventIds.indexOf(item.eventId) !== -1) {\n                        item.errors.push(errorsMsgs.combinatonErrorMessage);\n                        ++errorsCnt;\n                        ++itemErrorsCnt;\n                    }\n                } else if (type === 'Single') {\n                    if (item.bet === '' || item.bet <= 0) {\n                        item.errors.push(errorsMsgs.badBetSumMessage);\n                        ++errorsCnt;\n                        ++itemErrorsCnt;\n                    }\n\n                    //if (item.bet < minMoneyValue) {\n                    //    item.errors.push(\"Минимальная сумма пари - \" + minMoneyValue + \" руб.\");\n                    //    ++errorsCnt;\n                    //    ++itemErrorsCnt;\n                    //}\n                }\n\n                if (type === 'System') {\n                    if (item.isLive) {\n                        item.errors.push(errorsMsgs.systemLiveErrorMessage);\n                        ++errorsCnt;\n                        ++itemErrorsCnt;\n                    }\n                }\n\n                if (itemErrorsCnt > 0) {\n                    item.showErrors();\n                } else {\n                    item.hideErrors();\n                }\n            } else {\n                item.hideErrors();\n            }\n        }\n\n        if (errorsFixNotLessCnt === 0) {\n            acceptButtonState(false);\n        }\n\n        return errorsCnt;\n    };\n\n    var validateExpress = function (itemsCnt, errorsMsgs) {\n        var errors = [];\n\n        if (itemsCnt < 2) {\n            errors.push(errorsMsgs.countErrorMessage2);\n        }\n\n        if (Freebet.isSelected() && Freebet.isActive())\n            return errors;\n\n        if (betSum === '' || betSum <= 0) {\n            errors.push(errorsMsgs.badBetSumMessage);\n            dom.betSumInputWrapper.addClass('m-error');\n        } else {\n            dom.betSumInputWrapper.removeClass('m-error');\n        }\n        //if (betSum < minMoneyValue) {\n        //    errors.push(\"Минимальная сумма пари - \" + minMoneyValue + \" руб.\");\n        //}\n\n        return errors;\n    };\n\n    var validateSystem = function (itemsCnt, errorsMsgs) {\n        var errors = [];\n\n        if (itemsCnt < 3) {\n            errors.push(errorsMsgs.countErrorMessage3);\n            $('[js-node=\"cart__not-win-events-count-wrapper\"]').addClass('m-empty');\n        } else if (itemsCnt > 16) {\n            errors.push(errorsMsgs.countErrorMessage16);\n        } else {\n            $('[js-node=\"cart__not-win-events-count-wrapper\"]').removeClass('m-empty');\n        }\n\n        if (Freebet.isSelected() && Freebet.isActive())\n            return errors;\n\n        if (betSum === '' || betSum <= 0) {\n            errors.push(errorsMsgs.badBetSumMessage);\n            dom.betSumInputWrapper.addClass('m-error');\n        } else {\n            dom.betSumInputWrapper.removeClass('m-error');\n        }\n\n\n        var minMoneyValue = optsCount * 5 > window.globalAppSettings.minBetAmount ? optsCount * 5 : window.globalAppSettings.minBetAmount;\n        if (errors.length < 1) {\n            var optsCount = Number($(dom.optionCount).text());\n            if (!isNaN(optsCount)) {\n                switch (currency) {\n                    case BettingCart.currencyMap.BONUS: {\n                        minMoneyValue = minMoneyValue * globalAppSettings.bonusExchangeRate;\n                        if (betSum < minMoneyValue) {\n                            errors.push(window.Localization.getString('BettingCart.MinAmount', 'Минимальная сумма ставки составляет ') + app.numberToString(minMoneyValue) + Utils.svgHtml('bonus', 'currency-bonus currency-bonus--tooltip'));\n                        }\n                        break;\n                    }\n                    case BettingCart.currencyMap.CURRENCY: {\n                        minMoneyValue = minMoneyValue;\n                        if (betSum < minMoneyValue) {\n                            //TODO быстрофикс\n                            var currencyText = window.globalAppSettings.currentUser.defaultBalance.currencyCode == 'RUB'\n                                ? 'руб.'\n                                : window.globalAppSettings.currentUser.defaultBalance.currencyCode;\n                            errors.push(window.Localization.getString('BettingCart.MinAmount', 'Минимальная сумма ставки составляет ') + app.numberToString(minMoneyValue) + ' ' + currencyText);\n                        }\n                        break;\n                    }\n                    default: {\n                        errors.push(window.Localization.getString('BettingCart.CurrencyError', 'Не выбрана валюта ставки.'));\n                        break;\n                    }\n                }\n            }\n        }\n        return errors;\n    };\n\n    var setSendButtonState = function (newState) {\n        if (newState === true) {\n            dom.sendBtn.removeClass('disabled');\n        } else if (!dom.sendBtn.hasClass('m-blocked')) {\n\n            dom.sendBtn.addClass('disabled');\n        }\n    };\n\n    var showErrors = function (errors) {\n        if (typeof (errors) == 'string') errors = [errors];\n        var text = '',\n            errorsLength = errors.length;\n\n        hideErrors();\n\n        if (errorsLength > 0) {\n            for (var i = 0; i < errorsLength; i++) {\n                text += errors[i];\n\n                if (i != errorsLength - 1)\n                    text += '<br />';\n            }\n\n            dom.errorsIcon\n                .attr('bb-tool', text)\n                .show();\n        }\n    };\n\n    var hideErrors = function () {\n        dom.errorsIcon\n            .attr('bb-tool', '')\n            .hide();\n    };\n\n    var acceptButtonState = function (newState) {\n        if (newState === true) {\n            dom.acceptBtn.removeClass('disabled');\n        } else {\n            dom.acceptBtn.addClass('disabled');\n        }\n    };\n\n    var updateBonusTooltip = function () {\n        if (currency === BettingCart.currencyMap.BONUS && betSum > 0) {\n            dom.betSumInput.attr('bb-tool', (betSum / 1000) + ' ' + window.globalAppSettings.currentUser.defaultBalance.currencySymbol);\n        } else {\n            dom.betSumInput.removeAttr('bb-tool');\n        }\n    };\n\n    // accept btn click handler\n    var syncCoefs = function () {\n        for (key in items) {\n            items[key].originalCoefValue = items[key].coefValue;\n        }\n\n        acceptButtonState(false);\n\n        BettingCart.save();\n        BettingCart.validate();\n    };\n\n    var MIN_EXPRESS_COMMON_COEF = 1.6;\n    var bonusExpress = {\n        validate: function () {\n            var sumDiff = window.globalAppSettings.currentUser.bonuses - bonusExpressAmountValue;\n            var expressCommonCoef = StandardCartCalc.getExpressCommonCoef();\n            if (quantity(true) > 2 && type.toLowerCase() === typesMap.express && currency !== BettingCart.currencyMap.BONUS && sumDiff >= 0 && expressCommonCoef >= MIN_EXPRESS_COMMON_COEF) {\n                dom.bonusExpressAmountTooltip.removeAttr('bb-tool');\n                return true;\n            } else {\n                if (sumDiff < 0) {\n                    dom.bonusExpressAmountTooltip.attr('bb-tool', Localization.getString('BettingCart.BEActivationMessage1', 'Для активации бонусного экспресса Вам надо накопить еще ') + app.numberToString(Math.abs(sumDiff)) + Localization.getString('BettingCart.BEActivationMessage2', ' баллов'));\n                } else {\n                    dom.bonusExpressAmountTooltip.removeAttr('bb-tool');\n                }\n            }\n\n            return false;\n        },\n        checkIfIsAvailable: function () {\n            if (this.validate()) {\n                dom.bonusExpressContainer.removeClass('m-disabled');\n                return true;\n            } else {\n                dom.bonusExpressContainer.addClass('m-disabled');\n                this.disable();\n                return false;\n            }\n        },\n        isEnabled: false,\n        enable: function () {\n            if (this.validate()) {\n                this.isEnabled = true;\n                dom.bonusExpressAmountContainer.show();\n                dom.bonusExpressInput.prop('checked', true);\n                BettingCart.calc();\n            }\n        },\n        disable: function () {\n            this.isEnabled = false;\n            dom.bonusExpressInput.prop('checked', false);\n            dom.bonusExpressAmountContainer.hide();\n            BettingCart.calc();\n        }\n    };\n\n    var bindUI = function () {\n        $(document).on('coefInBettingCartIsOverChanged', function (e, data) {\n            autoSwitchType(!data.isOver);\n        });\n\n        dom.acceptBtn.on('click', function () {\n            syncCoefs();\n        });\n\n        dom.sendBtn.on('click', function () {\n            if (!globalAppSettings.currentUser.bettingCart['common-send-button'].IsEnabled)\n                return;\n\n            var captchaDiv = $('#recaptcha');\n\n            if (captchaDiv.attr('data-captcharequired') === 'True') {\n\n                if (captchaDiv.is(':empty')) {\n                    grecaptcha.render($('#recaptcha')[0], {\n                        'callback': function () { BettingCart.sendWithFreebetProposal(); },\n                    });\n                }\n\n                grecaptcha.execute();\n\n                var res = grecaptcha.getResponse();\n\n                if (res.length != 0) {\n                    BettingCart.sendWithFreebetProposal();\n                }\n\n            }\n            else {\n                BettingCart.sendWithFreebetProposal();\n            }\n        });\n\n        dom.menuItems.on('click', function () {\n            var type = $(this).data('type');\n            setType(type);\n        });\n\n        dom.removeAllItemsBtn.on('click', function () {\n            setType('Single');\n            removeAllItems();\n        });\n\n        dom.coefModeMenuItemCommon.on('click', function () {\n            var newVal = $(this).val();\n\n            if (newVal !== activeCoefMode) {\n                setCoefMode(newVal);\n                Ajax.postJson(\"/account/profile/edit/bets/changeacceptancemode/submit\", {\n                    data: {\n                        betAcceptanceMode: newVal,\n                        isRedirect: false\n                    }\n                });\n            }\n        });\n\n        dom.maxBetSumMoneyValueBtn.on('click', function () {\n            if (!globalAppSettings.currentUser.bettingCart['max-bet-amount-button'].IsEnabled) return\n\n            loadBetSumMaxMoneyValue();\n        });\n\n        dom.betSumCurrency.on('change', function () {\n            var val = $(this).val();\n\n            document.dispatchEvent(new CustomEvent('mtmCustomEvent', {\n                detail: {\n                    id: 'd-i06-e13',\n                    value: val,\n                },\n            })\n            );\n\n            if (currency.toLowerCase() !== val.toLowerCase()) {\n                setCurrency(val);\n\n                // TODO сделать единый конвертер валют\n                if (currency === 'Bonuses') {\n                    setBetSum(betSum * window.globalAppSettings.bonusExchangeRate);\n                    dom.betSumInput.val(app.numberToString(betSum));\n                } else {\n                    var newVal = betSum / window.globalAppSettings.bonusExchangeRate;\n                    setBetSum(newVal < 1 ? 1 : newVal);\n                    dom.betSumInput.val(app.numberToString(betSum));\n                }\n\n                BettingCart.calc();\n                BettingCart.validate();\n            }\n        });\n\n        dom.betSumInput.on('input change', function (e) {\n            var filteredVal = $(this).val().replace(/\\D/g, '');\n            $(this).val((parseInt(filteredVal) === 0 || !filteredVal) ? '' : app.numberToString(filteredVal));\n\n            setBetSum(filteredVal);\n        });\n\n        dom.notWinEventsCount.on('change', function () {\n            BettingCart.calc();\n            BettingCart.validate();\n            $(document).trigger('notification_notWinEventCountChanged');\n        });\n\n        dom.successBtn.on('click', function () {\n            hideSuccessMessage();\n        });\n\n        dom.betDeletionMode.on('change', function () {\n            var newVal = betDeletionModeMap[$(this).val()] || betDeletionModeMap.DeleteOutcomes;\n\n            if (newVal !== getBetDeletionMode) {\n                setBetDeletionMode(newVal);\n                Ajax.postJson(\"/account/profile/edit/savebetdeletionmode\", {\n                    data: {\n                        selectedMode: newVal,\n                        isRedirect: false\n                    }\n                });\n            }\n        });\n\n        // если выбраны не рубли - не выводим комбобокс\n        dom.betSumInput.on('click', function (e) {\n            if (betSumCombobox) {\n                if (currency !== 'RUB') {\n                    betSumCombobox.preventOpening(true);\n                } else {\n                    betSumCombobox.preventOpening(false);\n                }\n            }\n        });\n\n        dom.betSumInput.on('mouseenter', function () {\n            var elem = $(this);\n\n            if (currency !== 'RUB') {\n                updateBonusTooltip();\n            } else if (elem.attr('bb-tool')) {\n                elem.removeAttr('bb-tool');\n            }\n        });\n\n        dom.bonusExpressInput.on('change', function () {\n            var isEnabled = $(this).prop('checked');\n\n            if (isEnabled) {\n                bonusExpress.enable();\n            } else {\n                bonusExpress.disable();\n            }\n        });\n\n        $(document).on('change', '[name=\"cart-item-freebet-radio\"]', function () {\n            var checkedId = parseInt($(this).val());\n\n            for (var i in items) {\n                if (parseInt(items[i].originalId) !== checkedId) {\n                    items[i].isSelectedForFreebet = false;\n                } else {\n                    items[i].isSelectedForFreebet = true;\n                }\n            }\n\n            BettingCart.calc();\n            BettingCart.validate();\n            Freebet.validate();\n        });\n    };\n\n    function setBetSumMaxMoneyValueButtonIsDisabled(isDisabled, message) {\n        if (isDisabled === true) {\n            dom.maxBetSumMoneyValueBtn.addClass('m-disabled');\n            dom.maxBetSumMoneyValueBtn.addClass('m-disabled').attr('bb-tool', message);\n        } else {\n            dom.maxBetSumMoneyValueBtn.removeClass('m-disabled');\n            dom.maxBetSumMoneyValueBtn.removeAttr('bb-tool');\n        }\n    }\n\n    function loadBetSumMaxMoneyValue() {\n        if (quantity() > 0) {\n            var coefs = [];\n\n            for (key in items) {\n                coefs.push({\n                    coefid: key,\n                    eventid: items[key].eventId\n                });\n            }\n\n            Ajax.postJson(\"/BettingCart/GetTotalMaxMoneyValue\", {\n                data: {\n                    coefs: coefs,\n                    currency: StandardCart.getCurrency()\n                },\n                success: function (resp) {\n                    betSum = resp;\n                    dom.betSumInput.val(app.numberToString(betSum));\n                    BettingCart.calc();\n                    BettingCart.validate();\n                }\n            });\n        }\n    }\n\n    //For Express&System\n    function replaceEventNumbersInCartError() {\n        function getEventTitle(id) {\n            for (key in items) {\n                if (items[key].eventId == id)\n                    return items[key].eventTitle;\n            }\n            return null;\n        }\n\n        var errorNode = dom.errorsIcon;\n        if (!errorNode.length)\n            return false;\n        var errorText = errorNode.attr('bb-tool');\n        if (errorText.length < 1)\n            return false;\n        var regExpRes = errorText.match(/№\\d*/g);\n        if (regExpRes === null)\n            return;\n        var ids = Array.from(regExpRes);\n        [].forEach.call(ids, function (elem, i) {\n            var id = elem.replace('№', ''),\n                title = getEventTitle(id);\n            if (title === null)\n                return;\n            errorText = errorText.replace(elem, title);\n        });\n        errorText = errorText.replace(/\\n/g, '<br/><br/>');\n        errorNode.attr('bb-tool', errorText);\n    }\n\n    //For Single\n    function removeEventNumbersInCartErrors() {\n        for (key in items) {\n            var text = items[key].dom.errorsIcon.attr('bb-tool');\n            if (text === undefined || text.length < 1)\n                return false;\n            var regExpRes = text.match(/: .+ событие №\\d*/g);\n            if (regExpRes === null)\n                regExpRes = text.match(/ №\\d*/g);\n\n            if (regExpRes === null)\n                return true;\n\n            var ids = Array.from(regExpRes);\n            [].forEach.call(ids, function (elem, i) {\n                text = text.replace(elem, '');\n            });\n            text = text.replace(/\\n/g, '<br/><br/>');\n            items[key].dom.errorsIcon.attr('bb-tool', text);\n        }\n    }\n\n    var hasSelectedLiveItems = function () {\n        return Object.values(getItems()).some(function (item) {\n            return item.isSelected && item.isLive;\n        });\n    }\n\n    var canProposeFreeBet = function () {\n        if (Freebet.isSelected() && Freebet.isActive())\n            return false;\n\n        if (Freebet.getAvaliableCount() == 0)\n            return false;\n\n        var onlySelectedQuantity = quantity(true);\n        if (onlySelectedQuantity === 0)\n            return false;\n\n        if (isTypeSingle() && onlySelectedQuantity > 1)\n            return false;\n\n        if (hasSelectedLiveItems())\n            return false;\n\n        return true;\n    }\n\n    var prepareData = function (data) {\n        var items = {};\n\n        if (Freebet.isSelected() && isTypeSingle()) {\n            var selectedItemForFreebet = getSelectedItemForFreebet();\n            if (selectedItemForFreebet) {\n                items[selectedItemForFreebet.originalId] = selectedItemForFreebet;\n            }\n        }\n        else {\n            items = getItems();\n        }\n\n        if (data.type === 'System')\n            data.bettingCartInfo.NotWinEventCount = getNotWinEventsCount();\n\n        data.bettingCartInfo.TotalMoneyValue = getBetSum();\n        data.bettingCartInfo.TotalMoneyCurrency = getCurrency();\n\n        data.bonusType = bonusExpress.isEnabled ? 'bonusExpress' : 'normal';\n\n        for (key in items) {\n            if (items[key].isSelected) {\n                data.bettingCartPositions.push({\n                    'Coef': {\n                        coefid: items[key].actualId,\n                        eventid: items[key].eventId\n                    },\n                    'OriginalValue': items[key].originalCoefValue,\n                    'MoneyValue': items[key].bet,\n                    'SubMode': items[key].mode,\n                    'Currency': items[key].currency,\n                    'IsLive': !!items[key].isLive\n                });\n            }\n        }\n\n        return data;\n    };\n\n    function hashCode(obj) {\n        var hc = 0;\n        var chars = JSON.stringify(obj).replace(/\\{|\\\"|\\}|\\:|,/g, '');\n        var len = chars.length;\n        for (var i = 0; i < len; i++) {\n            // Bump 7 to larger prime number to increase uniqueness\n            hc += (chars.charCodeAt(i) * 7);\n        }\n        return hc;\n    }\n\n    var lastCheckedHashCode = 0;\n    var validateTimerHandle;\n    var sendValidate = function (data) {\n        if (BettingCart.isSending == true)\n            return;\n\n        if (Object.keys(BettingCart.getItems()).length == 0)\n            return;\n\n        Ajax.postJson(\"/BettingCart/ValidateBettingCart\", {\n            data: {\n                cartData: data\n            },\n            success: function (resp) {\n                if (resp.IsSuccess) {\n                    setSendButtonState(true);\n                    return;\n                }\n\n                setSendButtonState(false);\n                if (resp.CommonErrorMessage) {\n                    showErrors([resp.CommonErrorMessage]);\n                    StandardCart.humanizeErors.general();\n                }\n            }\n        });\n    }\n\n    var serverValidate = function () {\n\n        return true;\n\n        if (Freebet.isActive() && Freebet.isSelected()) {\n            return true;\n        }\n\n        if (BettingCart.isSendAllowed === false || window.globalAppSettings.currentUser.isAnonymous === true) {\n            return false;\n        }\n\n        var data = {\n            type: getType(),\n            bettingCartInfo: {\n                TotalMoneyValue: 0,\n                TotalMoneyCurrency: window.globalAppSettings.currentUser.defaultBalance.currencyCode,\n                NotWinEventCount: 0,\n            },\n            bettingCartPositions: [],\n        };\n\n        data = prepareData(data);\n        if (data.bettingCartPositions.length == 0) return false;\n\n        var hashcode = hashCode(data);\n        if (lastCheckedHashCode === hashcode) return true;\n        lastCheckedHashCode = hashcode;\n\n        if (validateTimerHandle) {\n            clearTimeout(validateTimerHandle);\n        }\n        validateTimerHandle = setTimeout(function () { sendValidate(data); }, 500);\n        return true;\n    }\n\n    return {\n        addItem: addItem,\n        bonusExpress: bonusExpress,\n        getBetSum: getBetSum,\n        setBetSum: setBetSum,\n        getNotWinEventsCount: getNotWinEventsCount,\n        getBetDeletionMode: getBetDeletionMode,\n        getActiveCoefMode: getActiveCoefMode,\n        getData: getData,\n        getCurrency: getCurrency,\n        getItem: getItem,\n        hasItem: hasItem,\n        hideSuccessMessage: hideSuccessMessage,\n        getItems: getItems,\n        getCoefs: getCoefs,\n        getSelectedItemForFreebet: getSelectedItemForFreebet,\n        getSingleSelectedItemForFreebetProposal: getSingleSelectedItemForFreebetProposal,\n        getType: getType,\n        setType: setType,\n        isTypeSingle: isTypeSingle,\n        load: load,\n        removeItem: removeItem,\n        removeItemWithoutValidation: removeItemWithoutValidation,\n        removeItemAfterSend: removeItemAfterSend,\n        removeAllItems: removeAllItems,\n        removeAllItemsAfterSend: removeAllItemsAfterSend,\n        showErrors: showErrors,\n        showSuccessMessage: showSuccessMessage,\n        updateCalcResults: updateCalcResults,\n        updateState: updateState,\n        validate: validate,\n        serverValidate: serverValidate,\n        quantity: quantity,\n        hasSelectedLiveItems: hasSelectedLiveItems,\n        canProposeFreeBet: canProposeFreeBet,\n        humanizeErors: {\n            general: replaceEventNumbersInCartError,\n            items: removeEventNumbersInCartErrors\n        },\n        addTestItem: function () {\n            this.addItem({\n                oId: Math.floor(Math.random() * 10000) + 1,\n                aId: Math.floor(Math.random() * 10000) + 1,\n                eId: Math.floor(Math.random() * 10000) + 1,\n                eTitle: Localization.getString('BettingCart.TestEvent', 'Тестовое событие'),\n                rTitle: Localization.getString('BettingCart.TestResult', 'Тестовый исход'),\n                val: '2.05',\n                originalCoefValue: '2.05',\n                isLive: false,\n            });\n        },\n        prepareData: prepareData\n    }\n}());","window.StandardCartCalc = (function () {\n    var expressCommonCoef = 0;\n\n    var calc = function (type, betSum, items, currency, isBonusExpress) {\n        var result = {\n            betSum: 0,\n            coef: 0,\n            PossibleMoneyValue: 0,\n            bonusExpressAmountValue: 0\n        };\n        var selectedItemsCnt = 0;\n\n        for (key in items) {\n            if (items[key].isSelected)\n                ++selectedItemsCnt;\n        }\n\n        if (selectedItemsCnt === 0)\n            return result;\n\n        switch (type.toLowerCase()) {\n            case 'single':\n                result = calcSingle(items);\n                break;\n            case 'express':\n                result = calcExpress(betSum, items, currency, isBonusExpress);\n                break;\n            case 'system':\n                result = calcSystem(betSum, items, currency);\n                break;\n            default:\n                break;\n        }\n\n        if (!result.hasOwnProperty('betSum')) {\n            result.betSum = betSum;\n        }\n\n        var betCurrencySum = currency === 'Bonuses' ? result.betSum / globalAppSettings.bonusExchangeRate : result.betSum;\n\n        if (result.PossibleMoneyValue - betCurrencySum > globalAppSettings.maxWinSum) {\n            result.PossibleMoneyValue = globalAppSettings.maxWinSum + betCurrencySum;\n        }\n\n        return result;\n    };\n\n    var calcSingle = function (items) {\n        var PossibleMoneyValue = 0,\n            betSum = 0,\n            betSumBonus = 0,\n            itemBetSum;\n\n        for (key in items) {\n            if (items[key].isSelected === true) {\n                itemBetSum = parseInt(items[key].bet || 0);\n\n                if (items[key].currency === BettingCart.currencyMap.BONUS) {\n                    betSumBonus += itemBetSum;\n                    itemBetSum = itemBetSum / globalAppSettings.bonusExchangeRate;\n                }\n\n                PossibleMoneyValue += itemBetSum * items[key].coefValue;\n                betSum = itemBetSum + betSum;\n            }\n        }\n\n        return {\n            betSum: roundCalcResult(betSum),\n            betSumBonus: betSumBonus,\n            PossibleMoneyValue: roundCalcResult(PossibleMoneyValue),\n        };\n    };\n\n    var calcExpress = function (betSum, items, currency, isBonusExpress) {\n        var totalCoef = 1;\n\n        isBonusExpress = isBonusExpress === true ? true : false;\n\n        for (key in items) {\n            if (items[key].isSelected === true) {\n                totalCoef *= items[key].coefValue;\n            }\n        }\n\n        if (currency === 'Bonuses') {\n            betSum = betSum / globalAppSettings.bonusExchangeRate;\n        } else if (isBonusExpress) {\n            totalCoef = totalCoef * 1.05;\n        }\n        expressCommonCoef = roundCalcResult(totalCoef, 2, 'bank');\n\n        return {\n            coef: expressCommonCoef,\n            PossibleMoneyValue: roundCalcResult(betSum * expressCommonCoef, 2),\n            bonusExpressAmountValue: betSum * 18\n        };\n    };\n\n    var calcSystem = function (betSum, items, currency) {\n        var coefVals = [];\n        var selectContainer = $('[js-node=\"standard-cart__not-win-events-count\"]');\n        var notWinEventCount = selectContainer.find('option:selected').length > 0 ? Number(selectContainer.find('option:selected').val()) : 1;\n        selectContainer.html('');\n\n        if (Object.keys(items).length > 16) {\n            return {\n                'RangeList': [],\n                'NotWinEventCount': 0,\n                'OptionCount': 0,\n                'TotalMoneyVal': 0,\n                'PossibleMoneyValue': 0\n            }\n        }\n\n        for (key in items) {\n            if (items[key].isSelected === true) {\n                coefVals.push(items[key].coefValue);\n            }\n        }\n\n        if (currency === 'Bonuses')\n            betSum = betSum / globalAppSettings.bonusExchangeRate;\n\n        var result = calcSystemObj.init(coefVals, betSum, notWinEventCount);\n\n        for (var i = 0; i < result.RangeList.length; i++) {\n            selectContainer.append($(\"<option></option>\")\n                .attr(\"value\", result.RangeList[i])\n                .text(result.RangeList[i]));\n        }\n\n        result.PossibleMoneyValue = roundCalcResult(result.PossibleMoneyValue, 2);\n\n        selectContainer.val(notWinEventCount);\n\n        return result;\n    };\n\n    var roundCalcResult = function (value, precision = 2, type = 'math') {\n        const powd = Math.pow(10, precision);\n        if (type === 'bank') {\n            const x = value * powd;\n            const r = Math.round(x);\n            const br = Math.abs(x) % 1 === 0.5 ? (r % 2 === 0 ? r : r - 1) : r;\n            return br / powd;\n        }\n        return Math.round(value * powd) / powd;\n    };\n\n    return {\n        calc: calc,\n        getExpressCommonCoef: function () { return expressCommonCoef; }\n    };\n}());\n\nwindow.calcSystemObj = (function () {\n    function fact(n) {\n        return n ? n * fact(n - 1) : 1;\n    }\n\n    function comb(n, lst) {\n        if (!n) return [[]];\n        if (!lst.length) return [];\n\n        var x = lst[0],\n            xs = lst.slice(1);\n\n        return comb(n - 1, xs).map(function (t) {\n            return [x].concat(t);\n        }).concat(comb(n, xs));\n    }\n\n    function range(m, n) {\n        return Array.apply(null, Array(n - m + 1)).map(function (x, i) {\n            return m + i;\n        });\n    }\n\n    function roundCalcResult(value, precision = 2, type = 'math') {\n        const powd = Math.pow(10, precision);\n        if (type === 'bank') {\n            const x = value * powd;\n            const r = Math.round(x);\n            const br = Math.abs(x) % 1 === 0.5 ? (r % 2 === 0 ? r : r - 1) : r;\n            return br / powd;\n        }\n        return Math.round(value * powd) / powd;\n    }\n\n    var init = function (coefVals, bet, notWinEventCount) {\n        var count = coefVals.length;\n\n        //RangeList (то, что должно быть в выпадающем списке)\n        var rangeList = [];\n        for (var i = 1; i < count - 1; i++) {\n            rangeList.push(i);\n        }\n        // storage[] - это доступ к полям корзины, которые сохранены в памяти на момент изменения и перерасчета корзины.\n        //Получение сохраненного notWinEventCount и проверка на то, что он принадлежит обновленному RangeList\n        //notWinEventCount = storage[notWinEventCount]\n        //if (rangeList.IndexOf(NotWinEventCount) == -1){\n        //  notWinEventCount = rangeList.first();\n        //}\n\n        //а пока просто присвоим единице\n        if (!notWinEventCount || notWinEventCount > count) notWinEventCount = 1;\n\n        //получаем кол-во вариантов для нашего notWinEventCount\n        var optCount = fact(count) / (fact(notWinEventCount) * fact(count - notWinEventCount));\n\n        //Get ComoArray[[]]\n        var combo = comb(count - notWinEventCount, range(0, count - 1));\n\n        var coefsSum = 0;\n\n        for (keyH in combo) {\n            var miniExpressCoef = 1;\n            for (keyL in combo[keyH]) {\n                miniExpressCoef *= coefVals[combo[keyH][keyL]];\n            }\n            coefsSum += miniExpressCoef;\n        }\n\n        var expSum = roundCalcResult(coefsSum / optCount, 2, 'bank');\n\n        var totalWin = roundCalcResult(expSum * bet);\n\n        return {\n            'RangeList': rangeList,\n            'NotWinEventCount': notWinEventCount,\n            'OptionCount': optCount,\n            'TotalMoneyVal': bet,\n            'PossibleMoneyValue': totalWin\n        }\n    }\n\n    return {\n        'init': init\n    }\n}());","app.StandardCartItem = window.StandardCartItem = (function () {\n\n    function StandardCartItem(data) {\n        this.originalId = data.oId ? data.oId : null;\n        this.actualId = data.aId ? data.aId : null;\n        this.eventId = data.eId ? data.eId : null;\n        this.eventTitle = data.eTitle ? data.eTitle : null;\n        this.resultTitle = data.rTitle ? data.rTitle : null;\n        this.coefValue = data.val ? parseFloat(parseFloat(data.val.toString().replace(',', '.')).toFixed(2)) : null;\n        this.originalCoefValue = data.originalCoefValue ? parseFloat(data.originalCoefValue.toString().replace(',', '.')) : this.coefValue;\n        this.isLive = data.isLive ? data.isLive : false;\n        this.currency = data.currency ? data.currency : window.globalAppSettings.currentUser.defaultBalance.currencyCode;\n        this.minMoneyValue = data.MinMoneyValue ? data.MinMoneyValue : 0;\n        this.maxMoneyValue = data.MaxMoneyValue ? data.MaxMoneyValue : 0;\n        this.errors = [];\n        this.bet = data.bet ? parseInt(data.bet) : 0;\n        this.dom = {};\n        this.isSelected = data.isSelected === false ? false : true;\n        this.combobox = null;\n        this.isSelectedForFreebet = false;\n\n        this.coefIsActive = data.isActive || true;\n        this.coefIsOver = data.isOver || false;\n        this.eventIsActive = data.eventIsActive || true;\n        this.eventIsOver = data.eventIsOver || false;\n    }\n\n    StandardCartItem.prototype.draw = function () {\n        var self = this;\n\n        this.dom.container = $('[js-node=\"standard-cart__item-example\"]')\n            .eq(0)\n            .clone()\n            .appendTo('[js-node=\"standard-cart__items\"]')\n            .removeClass('hidden')\n            .removeAttr('js-node');\n\n        this.dom.eventTitle = this.dom.container.find('[js-node=\"standard-cart__item-title\"]');\n        this.dom.resultTitle = this.dom.container.find('[js-node=\"standard-cart__item-market\"]');\n        this.dom.coefValue = this.dom.container.find('[js-node=\"standard-cart__item-coef\"]');\n        this.dom.removeBtn = this.dom.container.find('[js-node=\"standard-cart__item-remove\"]');\n        this.dom.maxMoneyValueBtn = this.dom.container.find('[js-node=\"standard-cart__item-max-money-value-btn\"]');\n        this.dom.input = this.dom.container.find('[js-node=\"standard-cart__item-sum-input\"]');\n        this.dom.inputWrapper = this.dom.container.find('[js-node=\"standard-cart__item-sum-wrapper\"]');\n        this.dom.liveIcon = this.dom.container.find('[js-node=\"standard-cart__live-icon\"]');\n        this.dom.errorsIcon = this.dom.container.find('[js-node=\"standard-cart__item-errors\"]');\n        this.dom.selectInput = this.dom.container.find('[name=\"cart-item__select-item-checkbox-input\"]');\n        this.dom.currencySelect = this.dom.container.find('[name=\"cart-item__currency-select\"]');\n\n        this.dom.container.find('[name=\"cart-item-freebet-radio\"]').attr('value', this.originalId);\n\n        if (this.isLive === true) {\n            this.dom.liveIcon.removeClass('hidden');\n        }\n\n        if (this.isSelected === false) {\n            this.dom.selectInput.prop('checked', false);\n        }\n\n        var maxBetAmountButtonSettings = globalAppSettings.currentUser.bettingCart['max-bet-amount-button'];\n        if (!!!maxBetAmountButtonSettings.IsEnabled) {\n            this.setMaxMoneyValueButtonIsDisabled(true, maxBetAmountButtonSettings.Message);\n        }\n\n        if ($.fn.niceSelect) {\n            self.dom.currencySelect.niceSelect();\n        }\n\n        this.updateDom();\n        this.bindUI();\n        this.initCombobox();\n    };\n\n    StandardCartItem.prototype.erase = function () {\n        this.dom.container.remove();\n    };\n\n    StandardCartItem.prototype.setData = function (data) {\n        if (typeof data === 'object') {\n            for (var key in data) {\n                if (this.hasOwnProperty(key))\n                    this[key] = data[key];\n            }\n        }\n\n        this.updateDom();\n    };\n\n    StandardCartItem.prototype.setBet = function (newBet) {\n        this.bet = (newBet) ? parseInt(newBet) : 0;\n        this.validate();\n\n        BettingCart.calc();\n        BettingCart.validate();\n    };\n\n    StandardCartItem.prototype.initCombobox = function () {\n        var self = this,\n            sums = window.globalAppSettings.additionalSumValues;\n\n        if (window.globalAppSettings.additionalSum && sums.length > 0) {\n            var cValues = [];\n\n            for (var i = 0; i < sums.length; i++) {\n                if (sums[i] > 0) {\n                    cValues.push(sums[i]);\n                }\n            }\n\n            if (cValues.length > 0) {\n                self.combobox = new Combobox(cValues, self.dom.input);\n            }\n        }\n    };\n\n    StandardCartItem.prototype.updateDom = function () {\n        var self = this;\n\n        self.dom.input.val(self.bet === 0 ? '' : app.numberToString(self.bet));\n\n        self.dom.container\n            .attr('data-event-id', self.eventId)\n            .attr('data-orig-result-id', self.originalId)\n            .attr('data-result-id', self.actualId);\n\n        self.dom.eventTitle.html(self.eventTitle);\n        self.dom.resultTitle.html(self.resultTitle);\n        self.dom.coefValue.html(window.Utils.displayCoefValue(self.coefValue));\n\n        self.dom.currencySelect.val(self.currency);\n\n        if ($.fn.niceSelect) {\n            self.dom.currencySelect.niceSelect('update');\n        }\n    };\n\n    StandardCartItem.prototype.loadMaxMoneyValue = function (callback) {\n        var self = this;\n\n        Ajax.postJson(\"/BettingCart/GetMaxMoneyValue\", {\n            data: {\n                coef: {\n                    coefid: self.originalId,\n                    eventid: self.eventId\n                },\n                currency: self.currency\n            },\n            success: function (resp) {\n                if (resp.hasOwnProperty('IsUnauthorized')) {\n                    if (resp.IsUnauthorized === true) {\n                        self.errors.push(window.Localization.getString('BettingCart.LoginToMaxAmount','Пожалуйста, авторизуйтесь для запроса максимальной суммы.'));\n                        self.showErrors();\n\n                        return;\n                    }\n                }\n\n                self.maxMoneyValue = resp;\n                if (callback) callback();\n            }\n        });\n    };\n\n    StandardCartItem.prototype.setMaxMoneyValueButtonIsDisabled = function (isDisabled, message) {\n        if (isDisabled === true) {\n            this.dom.maxMoneyValueBtn.addClass('m-disabled');\n            this.dom.maxMoneyValueBtn.addClass('m-disabled').attr('bb-tool', message);\n        } else {\n            this.dom.maxMoneyValueBtn.removeClass('m-disabled');\n            this.dom.maxMoneyValueBtn.removeAttr('bb-tool');\n        }\n    };\n\n    StandardCartItem.prototype.updateExternalCoef = function (originalId, actualId, value, isActive) {\n        if (TableFetcherLive) {\n            TableFetcherLive.updateCoef(originalId, actualId, value, isActive);\n        }\n    };\n\n    StandardCartItem.prototype.loadActualCoefValue = function () {\n        var self = this;\n\n        Ajax.postJson(\"/BettingCart/GetActualCoefs\", {\n            data: {\n                coefs: [\n                    {\n                        coefid: self.originalId,\n                        eventid: self.eventId\n                    }\n                ]\n            },\n            success: function (resp) {\n                if (Array.isArray(resp)) {\n                    for (var i = 0; i < resp.length; i++) {\n                        let actual = resp[i];\n                        if (parseInt(actual.oid) === parseInt(self.originalId)) {\n\n                            self.updateCoef({\n                                actualId: actual.aid,\n                                value: actual.val,\n                                isActive: actual.act,\n                                isLive: actual.il,\n                                eventIsActive: actual.ea,\n                                eventIsOver: actual.eo,\n                                eventId: actual.ei,\n                                rTitle: actual.n,\n                                homeTeam: actual.ht,\n                                awayTeam: actual.at\n                            });\n\n                            self.updateExternalCoef(actual.oid, actual.aid, actual.val, actual.act);\n\n                            BettingCart.calc();\n                            BettingCart.validate();\n\n                            BettingCart.save();\n\n                            return;\n                        }\n                    }\n                }\n            }\n        });\n    };\n\n    StandardCartItem.prototype.validate = function () {\n        var result;\n\n        //if (this.bet < 20 )\n        if (this.bet === '' || this.bet <= 0) {\n            this.dom.inputWrapper.addClass('error');\n            result = false;\n        } else {\n            this.dom.inputWrapper.removeClass('error');\n            result = true;\n        }\n\n        return result;\n    };\n\n    StandardCartItem.prototype.showErrors = function () {\n        var errors = this.errors,\n            errorsLength = this.errors.length,\n            text = '';\n\n        this.dom.errorsIcon.attr('bb-tool', '');\n\n        for (var i = 0; i < errorsLength; i++) {\n            text += errors[i];\n\n            if (i != errorsLength - 1)\n                text += '<br />';\n        }\n\n        this.dom.errorsIcon\n            .attr('bb-tool', text)\n            .show();\n    };\n\n    StandardCartItem.prototype.hideErrors = function () {\n        this.dom.errorsIcon\n            .attr('bb-tool', '')\n            .hide();\n    };\n\n    StandardCartItem.prototype.setIsSelected = function (value) {\n        if (value === true) {\n            this.isSelected = true;\n            this.dom.selectInput.prop('checked', true);\n        } else if (value === false) {\n            this.isSelected = false;\n            this.dom.selectInput.prop('checked', false);\n        }\n\n        $(document).trigger('notificationCoefIsSelectedChanged', {\n            originalId: this.originalId,\n            isSelected: this.isSelected\n        });\n    };\n\n    StandardCartItem.prototype.updateBonusTooltip = function () {\n        var self = this;\n\n        if (self.currency === BettingCart.currencyMap.BONUS && self.bet > 0) {\n            self.dom.input.attr('bb-tool', (self.bet / 1000) + ' ' + window.globalAppSettings.currentUser.defaultBalance.currencySymbol);\n        } else {\n            self.dom.input.removeAttr('bb-tool');\n        }\n    };\n\n    //-----------Вставка старых функций------------------\n\n    StandardCartItem.prototype.updateCoef = function (data) {\n        var self = this;\n        var coefIsOverChanged = false;\n        let hasChanges = false;\n\n        if (data.hasOwnProperty('isActive') && self.coefIsActive !== data.isActive) {\n            self.coefIsActive = data.isActive;\n            hasChanges = true;\n        }\n\n        //Implement in new cart.addItem\n        //if (data.hasOwnProperty('isLive') && self.isLive != data.isLive) {\n        //    self.isLive = data.isLive;\n        //    hasChanges = true;\n        //}\n\n        if (data.hasOwnProperty('isOver') && self.coefIsOver !== data.isOver) {\n            self.coefIsOver = data.isOver;\n            hasChanges = true;\n            coefIsOverChanged = true;\n        }\n        if (data.hasOwnProperty('eventIsActive') && self.eventIsActive !== data.eventIsActive) {\n            self.eventIsActive = data.eventIsActive;\n            hasChanges = true;\n        }\n        if (data.hasOwnProperty('eventIsOver') && self.eventIsOver !== data.eventIsOver) {\n            self.eventIsOver = data.eventIsOver;\n            hasChanges = true;\n            coefIsOverChanged = true;\n        }\n        if (data.hasOwnProperty('actualId') && self.actualId !== data.actualId) {\n            self.actualId = data.actualId;\n            hasChanges = true;\n        }\n        if (data.hasOwnProperty('value') && self.coefValue !== data.value && data.value != 1) {\n            var blinkMethod = (self.coefValue > data.value)\n                ? function () { self.blinkCoef.decrease.call(self); }\n                : function () { self.blinkCoef.increase.call(self); };\n\n            self.coefValue = data.value;\n            self.dom.coefValue.html(window.Utils.displayCoefValue(self.coefValue));\n            blinkMethod();\n            if (StandardCart.getActiveCoefMode().toLowerCase() === 'any')\n                self.originalCoefValue = data.value;\n            hasChanges = true;\n        }\n\n        if (data.hasOwnProperty('eventId') && self.eventId !== data.eventId) {\n            self.eventId = data.eventId;\n            hasChanges = true;\n        }\n        if (data.hasOwnProperty('homeTeam')) {\n            self.eventTitle = (data.hasOwnProperty('awayTeam')) ? (data.homeTeam + ' — ' + data.awayTeam) : data.homeTeam;\n            self.dom.eventTitle.html(self.eventTitle);\n        }\n        if (data.hasOwnProperty('rTitle')) {\n            self.resultTitle = data.rTitle;\n            self.dom.resultTitle.html(data.rTitle);\n        }\n\n\n        if (hasChanges) {\n            var checkActiveResult = self.checkActive();\n\n            $(document).trigger('notificationCoefInCartUpdate', {\n                outcomeId: self.originalId,\n                newVal: self.coefValue\n            });\n\n            if (coefIsOverChanged) {\n                $(document).trigger('coefInBettingCartIsOverChanged', {\n                    isOver: checkActiveResult.isOver\n                });\n            }\n        }\n\n        return hasChanges;\n    };\n\n    var transitionAddRemoveClass = (function () { //TODO: вынести в utils ?\n        var appearVal = 100;\n        return function (node, className) {\n            node.addClass(className, appearVal);\n            node.one('animationend', function (e) {\n                node.removeClass(className);\n            });\n        };\n    }());\n\n    StandardCartItem.prototype.blinkCoef = {\n        increase: function () {\n            transitionAddRemoveClass(this.dom.coefValue, 'change plus');\n        },\n        decrease: function () {\n            transitionAddRemoveClass(this.dom.coefValue, 'change minus');\n        }\n    };\n\n    StandardCartItem.prototype.setCurrency = function (val) {\n        this.currency = val;\n    };\n\n    StandardCartItem.prototype.checkActive = function () {\n        var self = this;\n        var isOver = false;\n        var isBlocked = false;\n\n        if (self.coefIsActive && self.eventIsActive && !self.coefIsOver && !self.eventIsOver && self.coefValue != 1) {\n            self.dom.container.removeClass('blocked');\n            self.dom.container.removeClass('is-over');\n            self.dom.coefValue.removeAttr('bb-tool');\n        }\n        else {\n            if (self.coefIsOver || self.eventIsOver) {\n                self.dom.container.addClass('is-over');\n                self.dom.coefValue.attr('bb-tool', window.Localization.getString('Scripts_Shared_Modules.StandardCartItem_43', 'Прием ставок завершен'));\n\n                isOver = true;\n            }\n            else {\n                self.dom.container.addClass('blocked');\n                self.dom.coefValue.attr('bb-tool', window.Localization.getString('Scripts_Shared_Modules.StandardCartItem_44', 'Прием ставок приостановлен'));\n\n                isBlocked = true;\n            }\n        }\n\n        return {\n            isOver: isOver,\n            isBlocked: isBlocked\n        }\n    };\n\n    StandardCartItem.prototype.animateFail = function () {\n        var self = this;\n\n        self.dom.container.addClass('error');\n        setTimeout(function () {\n            self.dom.container.removeClass('error');\n        }, 3000);\n    };\n\n    StandardCartItem.prototype.animateSuccess = function (removeAfter) {\n        var self = this;\n\n        if (self.isSelected === true) {\n            self.dom.container.addClass('success');\n\n            setTimeout(function () {\n                self.dom.container.removeClass('success');\n                if (removeAfter && StandardCart.isTypeSingle())\n                    StandardCart.removeItemAfterSend(self.originalId);\n            }, 3000);\n\n\n\n        }\n    };\n\n\n\n    //-----------!Вставка старых функций------------------\n\n    StandardCartItem.prototype.bindUI = function () {\n        var self = this;\n\n        this.dom.removeBtn.on('click', function () {\n            StandardCart.removeItem(self.originalId);\n        });\n\n        this.dom.currencySelect.on('change', function () {\n            var val = $(this).val();\n\n            document.dispatchEvent(new CustomEvent('mtmCustomEvent', {\n                    detail: {\n                        id: 'd-i06-e13',\n                        value: val,\n                    },\n                })\n            );\n\n            if (val.toLowerCase() !== self.currency.toLowerCase()) {\n                self.setCurrency(val);\n\n                // TODO сделать единый конвертер валют\n                switch (val) {\n                    case 'Bonuses':\n                        self.setBet(self.bet * window.globalAppSettings.bonusExchangeRate);\n                        break;\n                    case 'RUB':\n                    case 'KZT':\n                        var newVal = self.bet / window.globalAppSettings.bonusExchangeRate;\n                        self.setBet(newVal < 1 ? 1 : newVal);\n                        break;\n                    default:\n                        break;\n                }\n\n                self.updateDom();\n\n                BettingCart.calc();\n                BettingCart.validate();\n            }\n        });\n\n        this.dom.maxMoneyValueBtn.on('click', function () {\n            if (!!!globalAppSettings.currentUser.bettingCart['max-bet-amount-button'].IsEnabled) return;\n\n            self.loadMaxMoneyValue(function () {\n                self.setBet(self.maxMoneyValue);\n                self.dom.input.val(app.numberToString(self.maxMoneyValue));\n            });\n        });\n\n        // если выбраны не рубли - не выводим комбобокс\n        this.dom.input.on('click', function () {\n            if (self.combobox) {\n                if (self.currency !== window.globalAppSettings.currentUser.defaultBalance.currencyCode) {\n                    self.combobox.preventOpening(true);\n                } else {\n                    self.combobox.preventOpening(false);\n                }\n            }\n        });\n\n        this.dom.input.on('input change', function (e) {\n            var filteredVal = $(this).val().replace(/\\D/g, '');\n            $(this).val((parseInt(filteredVal) === 0 || !filteredVal) ? '' : app.numberToString(filteredVal));\n\n            self.setBet(filteredVal);\n        });\n\n        this.dom.selectInput.on('change', function () {\n            self.setIsSelected($(this).prop('checked'));\n            BettingCart.calc();\n            BettingCart.validate();\n        });\n\n        this.dom.input.on('mouseenter', function () {\n            var elem = $(this);\n\n            if (self.currency !== 'RUB') {\n                self.updateBonusTooltip();\n            } else if (elem.attr('bb-tool')) {\n                elem.removeAttr('bb-tool');\n            }\n        });\n    };\n\n    return StandardCartItem;\n}());","window.BookmakerPromocode = (function () {\n    var selectors = {\n        promoArea: '[data-promo-id]',\n        disableBtn: '.js-disable-generate-btn',\n        activeBtn: '.js-active-generate-btn',\n        btnArea: '.js-generate-button-area'\n    }\n    var getSelectorCurrentPromo = function(id) {\n        return '[data-promo-id={0}]'.replace('{0}', id);\n    }\n\n    var classes = {\n        activeBtn: {\n            page: 'promocodes-page__generate-button',\n            table: 'promocodes-table__generate-button',\n            js: 'js-active-generate-btn'\n        }\n    }\n    var getBtnHtml = function(page) {\n        return '<a class=\"button m-faded {0} {1}\"></a>'\n            .replace('{0}', page ? classes.activeBtn.page : classes.activeBtn.table)\n            .replace('{1}', classes.activeBtn.js);\n    }\n\n    var generateDefaultText = window.Localization.getString('Scripts_Shared_Modules.BookmakerPromocode_19', 'Сгенерировать');\n    var generateSuccessMessage = window.Localization.getString('Scripts_Shared_Modules.BookmakerPromocode_20', 'Генерация успешна');\n    var generateCommonMessage = window.Localization.getString('Scripts_Shared_Modules.BookmakerPromocode_21', 'Ошибка генерации');\n\n    var generate = function() {\n        var $this = $(this);\n        var data = $this.parents(selectors.promoArea).data();\n\n        Ajax.postJson(\"/promocodes/GenerateBookmakerPromocode\", {\n            data: {\n                promoId: data.promoId,\n                isSinglePage: data.isSinglePage\n            },\n            success: function (resp) {\n                var promo = $(getSelectorCurrentPromo(data.promoId));\n                if (resp) {\n                    var btn = promo.find(selectors.activeBtn);\n                    Utils.showTooltipError(btn, resp.error ? resp.error : generateCommonMessage);\n                } else {\n                    var btn = promo.find(selectors.disableBtn);\n                    var text = btn.attr('bb-tool');\n                    Utils.showTooltipSuccess(btn, generateSuccessMessage, true);\n                    setTimeout(function() { Utils.showTooltipError(btn, text, true); }, 10000);\n                }\n            }\n        });\n    }\n\n    var showBtn = function($promo) {\n        var $area = $promo.find(selectors.btnArea);\n        var disabledBtn = $area.find(selectors.disableBtn);\n        if (disabledBtn.length == 0) return;\n        $area.empty();\n\n        var btn = $(getBtnHtml($promo.data().isSinglePage.toLowerCase().trim().toLowerCase().trim() == 'true'))\n            .text(Localization.getString('Bonuses.Generate', generateDefaultText))\n            .click(generate);\n        $area.append(btn);\n    }\n\n    var checkGenerateBtn = function(){\n        var promocodes = $(selectors.promoArea);\n        for (var i = 0; i < promocodes.length; i++) {\n            var $promo = $(promocodes[i]);\n            var data = $promo.data();\n            if (data.nextDt === '') continue;\n            if(new Date(data.nextDt) <= new Date()) {\n                showBtn($promo);\n            }\n        }\n    }\n\n    var init = function () {\n        var promocodes = $(selectors.promoArea);\n        if (promocodes.length > 0) {\n            setInterval(checkGenerateBtn, 1000);\n\n            promocodes.find(selectors.activeBtn).click(generate);\n        }\n    };\n\n    return {\n        init: init\n    };\n}());\nwindow.BookmakerPromocode.init();","var Combobox = window.Combobox = (function () {\n\tfunction Combobox(datalist, input) {\n\t\tif (!input) {\n            app.console.error('You should declare a main input unique selector');\n\t\t\treturn;\n\t\t}\n\n\t\tvar self = this;\n\n\t\tif (datalist && Array.isArray(datalist)) {\n\t\t\tself.datalist = datalist;\n\t\t}\n\n        self.isPreventedOpening = false;\n\t\tself.input = input;\n\t\tself.checksum = Math.random();\n\t\tself.input.attr('data-combobox-checksum', self.checksum);\n\n\t\tself.wrapper = $('<div/>', {\n\t\t\t'class': 'combobox-input-wrapper'\n\t\t});\n\n\t\tinput.wrap(self.wrapper);\n\n\t\tself.isOpen = false;\n\n\t\t$(self.input).on('click', function (e) {\n            if(self.isPreventedOpening) {\n                return;\n            }\n\n\t\t\tif ($(this).hasClass('open')) {\n\t\t\t    self.close();\n\t\t\t} else {\n\t\t\t\tself.open();\n\t\t\t\t$(this).addClass('open');\n\t\t\t}\n\t\t});\n\t};\n\n\tCombobox.prototype.open = function () {\n\t    $(document).on('click.combobox', function (e) {\n\t        var checksum = $(e.target).attr('data-combobox-checksum');\n\n\t        if (!checksum === undefined || checksum != self.checksum) {\n\t            self.close();\n\t        }\n\t    });\n\n\t    var self = this;\n\t    this.draw();\n\n\t    this.input.addClass('open');\n\n\t\tthis.container.addClass('open');\n\t\tthis.isOpen = true;\n\n\t\tthis.input.on('keyup.combobox', function () {\n\t\t\tself.close();\n\t\t});\n\n\t}\n\n\tCombobox.prototype.close = function () {\n\t    this.input.removeClass('open');\n\t    this.container.removeClass('open');\n\t    this.container.remove();\n\t}\n\n    Combobox.prototype.preventOpening = function(value) {\n        this.isPreventedOpening = value;\n    }\n\n\tCombobox.prototype.setValue = function (title) {\n\t\t$(this.input).val(title);\n\t\t$(this.input).change();\n\t}\n\n\tCombobox.prototype.draw = function () {\n\t\tvar self = this;\n\n\t\tself.container = $('<div/>', {\n\t\t\t'class': 'combobox-container'\n\t\t});\n\n\t\tfor (var i = 0; i < this.datalist.length; i++) {\n\t\t\tvar item = $('<div/>', {\n\t\t\t\t'class': 'combobox-container__item'\n\t\t\t}).html(self.datalist[i]);\n\t\t\tself.container.append(item);\n\t\t}\n\n\t\tself.container.insertAfter(self.input);\n\n\t\tself.container.on('click', '.combobox-container__item', function (e) {\n\t\t\tif ($(e.target).hasClass('combobox-container__item')) {\n\t\t\t\tvar title = $(this).html();\n\t\t\t\tself.setValue(title);\n\t\t\t}\n\t\t});\n\t}\n\n\treturn Combobox;\n}());","window.ConfirmButton = (function () {\n    var awaiter = \"m-await\",\n        textSelector = '.js-content-menu__single-button-text',\n        idleTextAttr = 'data-idle-text',\n        confirmTextAttr = 'data-confirm-text';\n\n    return {\n        init: function (selector, callback, ajaxUrl, ajaxSuccessCallback, ajaxData) {\n\n            app.body.on('click', selector, function () {\n                var that = $(this);\n                textContainer = that.find(textSelector);\n                if (that.hasClass(awaiter)) {\n\n                    if (callback) {\n                        callback();\n                    }\n\n                    if (ajaxUrl) {\n                        Ajax.postJson(ajaxUrl, {\n                            data: ajaxData,\n                            doCallAjaxViewParsers: false,\n                            success: function (resp) {\n\n                                if (ajaxSuccessCallback) {\n                                    ajaxSuccessCallback(resp);\n                                }\n                                that.removeClass(awaiter);\n                                textContainer.text(that.attr(idleTextAttr));\n                            }\n                        });\n                    }\n                    else {\n                        that.removeClass(awaiter);\n                        textContainer.text(that.attr(idleTextAttr));\n                    }\n                    \n                }\n                else {\n                    that.addClass(awaiter);\n                    textContainer.text(that.attr(confirmTextAttr));\n                    that.one('mouseleave', function (e) {\n                        that.removeClass(awaiter);\n                        textContainer.text(that.attr(idleTextAttr));\n                    });\n                }\n                return false;\n\n            });\n\n        },\n        dispose: function (selector) {\n            app.body.off('click', selector);\n        }\n\n    }\n\n}());","window.CurrentDatetime = (function () {\n    const timeNodeSelector = '#moscow_time';\n    const initialFullMoscowTime = '#initial_full_moscow_time';\n    const tickIntervalInSeconds = 5;\n    var value = new Date();\n\n    function setSeedValue() {\n        var fullMoscowTime = $(initialFullMoscowTime).val();\n        if (fullMoscowTime != undefined){\n            var timeArray = fullMoscowTime.trim().split(':');\n            if (timeArray.length == 3) {\n                value.setUTCHours(timeArray[0]);\n                value.setUTCMinutes(timeArray[1]);\n                value.setUTCSeconds(timeArray[2]);\n                return;\n            }\n        }\n        $(timeNodeSelector).parent().hide();\n        return;\n    }\n\n    function updateTime() {\n        value.setUTCSeconds(value.getUTCSeconds() + tickIntervalInSeconds);\n        app.CurrentDatetime.time = getCurrentTimeString(value);\n    }\n\n    function getCurrentTimeString(date) {\n        return ('0' + date.getUTCHours()).slice(-2) + ':' + ('0' + date.getUTCMinutes()).slice(-2);\n    }\n\n    return {\n        init: function () {\n            var self = this;\n\n            app.bindModelHtml(self, 'time', $(timeNodeSelector));\n\n            setSeedValue();\n            setInterval(updateTime, tickIntervalInSeconds * 1000);\n        }\n    };\n}());","window.CustomSelect = (function () {\n\n    var init = function (selectors) {\n        if (globalAppSettings.isMobileDevice && window.Mobile) {\n            return;\n        }\n\n        if ($.fn.niceSelect) {\n            var selectorsLength = selectors.length;\n\n            for (var i = 0; i < selectorsLength; i++)\n                $(selectors[i]).niceSelect();\n        } else {\n            app.console.log('FAILED TO INIT CUSTOM SELECTBOX');\n        }\n    };\n\n    var update = function (selectors) {\n        if (globalAppSettings.isMobileDevice && window.Mobile) {\n            return;\n        }\n\n        if ($.fn.niceSelect) {\n            var selectorsLength = selectors.length;\n\n            for (var i = 0; i < selectorsLength; i++) {\n                $(selectors[i]).niceSelect('update');\n            }\n        } else {\n            app.console.log('FAILED TO UPDATE CUSTOM SELECTBOX');\n        }\n    };\n\n    var destroy = function (selectors) {\n        if ($.fn.selectize) {\n            var selectorsLength = selectors.length;\n\n            for (var i = 0; i < selectorsLength; i++) {\n                $(selectors[i]).niceSelect('destroy');\n            }\n        } else {\n            app.console.log('FAILED TO DESTROY CUSTOM SELECTBOX');\n        }\n    };\n\n    return {\n        init: init,\n        update: update,\n        destroy: destroy\n    };\n}());","window.Favorites = (function () {\n    var dom, count;\n\n    var init = function () {\n        dom = {\n            live: $('#fav_count-live'),\n            prematch: $('#fav_count-prematch')\n        };\n        count = {\n            live: parseInt(dom.live.html()) || 0,\n            prematch: parseInt(dom.prematch.html()) || 0\n        };\n\n        update().all();\n    };\n\n    var update = function () {\n        function isAlone() {\n            //(count.live < 1) ? dom.prematch.addClass('m-alone') : dom.prematch.removeClass('m-alone');\n            //(count.prematch < 1) ? dom.live.addClass('m-alone') : dom.live.removeClass('m-alone');\n            if (count.live < 1 && count.prematch < 1) {\n                dom.live.addClass('m-invisible');\n                dom.prematch.addClass('m-invisible');\n            } else {\n                dom.live.removeClass('m-invisible');\n                dom.prematch.removeClass('m-invisible');\n            }\n        }\n        function live() {\n            //(count.live < 1) ? dom.live.addClass('m-invisible') : dom.live.removeClass('m-invisible').html(count.live);\n            dom.live.html(count.live);\n            isAlone();\n        }\n        function prematch() {\n            //(count.prematch < 1) ? dom.prematch.addClass('m-invisible') : dom.prematch.removeClass('m-invisible').html(count.prematch);\n            dom.prematch.html(count.prematch);\n            isAlone();\n        }\n        return {\n            live: live,\n            prematch: prematch,\n\t\t\tall: function () {\n\t\t\t\tlive();\n\t\t\t\tprematch();\n\t\t\t}\n        }\n    };\n\n    var decFavCount = function (isLive) {\n        if (isLive) {\n            count.live = (count.live <= 0) ? 0 : count.live - 1;\n            update().live();\n        }\n        else {\n            count.prematch = (count.prematch <= 0) ? 0 : count.prematch - 1;\n            update().prematch();\n        }\n    };\n\n    var incFavCount = function (isLive) {\n        var domNode;\n        if (isLive) {\n            count.live++;\n            update().live();\n            domNode = dom.live;\n        }\n        else {\n            count.prematch++;\n            update().prematch();\n            domNode = dom.prematch;\n        }\n        domNode.addClass('jump');\n\t\tsetTimeout(function () { domNode.removeClass('jump') }, 400);\n        //domNode.one('animationend', () => domNode.removeClass('jump'));\n    };\n\n\n\n    return {\n        init: init,\n        dec: decFavCount,\n        inc: incFavCount\n    }\n}());","window.Help = (function () {\n\tvar dom = {};\n\tvar selectors = {\n        scrollArea: '#m-page-content-scrollbar-scrollarea',\n        pageNavigation: '#help-page__navigation-links',\n        pageNavigationLinks: '.help-page__navigation-link',\n        aboutContent: '#about-content',\n        rulesSections: '.help-page__content-part[id]',\n        rulesSectionsCom: '.rules-section',\n\t};\n    var pageNavigationOffsets = [];\n    var pageNavigationOffsetTop = 0;\n\n\n\treturn {\n        init: function () {\n            dom.pageNavigation = $(selectors.pageNavigation);\n            var hashBlock;\n            dom.scrollArea = $(selectors.scrollArea);\n            if (dom.scrollArea.length == 0) {\n                dom.scrollArea = { position: function () { return { top: 0 } } };\n            }\n\n            pageNavigationOffsetTop = dom.pageNavigation.position().top - dom.scrollArea.position().top;\n\n            this.createNavigationMenu();\n            this.updateHeadingTopOffset();\n\n            if(window.location.hash) {\n                hashBlock = $(window.location.hash);\n                if (hashBlock.length > 0) {\n                    $(selectors.scrollArea).scrollTop(hashBlock.position().top - 70);\n                }\n            } else {\n                this.setActiveNavigationItem(0);\n            }\n\n            this.bindUI();\n\t\t},\n\t\tbindUI: function () {\n\t\t\tvar self = this;\n\n            var scrollTimer;\n            \n            $(selectors.scrollArea).on('scroll.pageHelp', function() {\n                var scrollTop = $(this).scrollTop();\n\n                if (app.isIE()) {\n                    self.toggleFixedPageNavigation(scrollTop);\n                }\n\n                if (scrollTimer) {\n                    clearTimeout(scrollTimer);\n                }\n\n                scrollTimer = setTimeout(function () {\n                    self.setActiveNavigationItem(scrollTop);\n                }, 50);\n            });\n            \n            $(window).on('resize.pageHelp', function() {\n                self.updateHeadingTopOffset();\n            });\n\t\t},\n        unbindUI: function () {\n            $(selectors.scrollArea).off('scroll.pageHelp');\n            $(window).off('resize.pageHelp');\n        },\n        updateHeadingTopOffset: function() {\n            var scrollAreaTopOffset = dom.scrollArea.position().top;\n\n            $(selectors.pageNavigationLinks).each(function (index) {\n                var id = $(this).attr('href');\n                var heading = $(id);\n                pageNavigationOffsets.push({\n                    id: id,\n                    offsetTop: index === 0 ? 0 : heading.position().top - scrollAreaTopOffset - 80\n                })\n            });\n        },\n        toggleFixedPageNavigation: function (scrollTop) {\n            var delta = scrollTop - pageNavigationOffsetTop;\n\n            dom.pageNavigation.css({\n                transform: 'translateY(' + (delta > 0 ? delta : 0) + 'px)'\n            });\n        },\n        setActiveNavigationItem: function (scrollTop) {\n            let mobile = window.globalAppSettings.isMobileDevice;\n            if (mobile) return;\n            for (let i = 0; i < pageNavigationOffsets.length; ++i) {\n                if (scrollTop >= pageNavigationOffsets[i].offsetTop && (i + 1 >= pageNavigationOffsets.length || scrollTop < pageNavigationOffsets[i + 1].offsetTop)) {\n                    $(selectors.pageNavigationLinks).removeClass('m-active');\n                    $(selectors.pageNavigationLinks).filter('[href=\"' + pageNavigationOffsets[i].id + '\"]').addClass('m-active');\n\n                    if (history.pushState && window.location.hash !== pageNavigationOffsets[i].id) {\n                        history.pushState(null, null, pageNavigationOffsets[i].id);\n                    }\n                }\n            }\n        },\n        createNavigationMenu: function () {\n            $(selectors.rulesSections).each((index, section) => {\n                const sectionId = section.id;\n                const headingText = $(section).find('h2').text();\n                const link = `<a href=\"#${sectionId}\" class=\"help-page__navigation-link\" data-mtm-trigger=\"d-i08-e11\">${headingText}</a>`;\n                dom.pageNavigation.append(link);\n            });\n\n            $(selectors.rulesSectionsCom).each((index, headingEl) => {\n                const sectionNumber = index + 1;\n                headingEl.id = \"rules-section-\" + sectionNumber;\n                const link = `<a href=\"#${headingEl.id}\" class=\"help-page__navigation-link\">${sectionNumber}. ${headingEl.textContent}</a>`;\n                dom.pageNavigation.append(link);\n            });\n        }\n\t}\n}());\n\n$(function () {\n\n    if ($('#help-page').length > 0) {\n        window.Help.init();\n        if (globalAppSettings.isMobileDevice && UpButton) {\n            UpButton.init();\n            if ($('#contentEl').length > 0) {\n                var point = $('.help-page__content').offset().top;\n                $(window).scrollTop(point - 50);\n            }\n        }\n    }\n\n});","var HomeWidgets = window.HomeWidgets = (function () {\n\tvar selectors = {\n\t\thomeWidget: '[js-node=\"home-widget\"]',\n\t\theader: '[js-node=\"home-widget-header\"]'\n\t}\n\n\tvar init = function () {\n\t\tbindUI();\n\t}\n\n\tvar dispose = function () {\n\t\tunblindUI();\n\t}\n\n\tvar bindUI = function () {\n\t\t$(document).on('click.homeWidgetHeader', selectors.header, function () {\n\t\t\t$(this).closest(selectors.homeWidget).toggleClass('m-collapsed');\n\t\t});\n\t}\n\n\tvar unbindUI = function () {\n\t\t$(document).off('click.homeWidgetHeader');\n\t}\n\n\treturn {\n\t\tinit: init,\n\t\tdispose: dispose,\n\t\tbindUI: bindUI,\n\t\tunbindUI: unbindUI\n\t}\n}());\n\n$(function () {\n\tHomeWidgets.init();\n});","var WidgetBanners = window.WidgetBanners = (function () {\n    var WidgetBanners = function (container) {\n        this.dom = {\n            container: null,\n            slides: [],\n            linksContainer: null,\n            links: [],\n            slidesContainer: null,\n        };\n\n        this.timer = null;\n        this.delay = 7500;\n        this.activeIndex = 0;\n\n        this.dom.container = container;\n\n        this.dom.slides = container.find('[js-node=\"widget-banners-slide\"]');\n        this.dom.linksContainer = container.find(\n            '[js-node=\"widget-banners-slides-links-container\"]'\n        );\n\n        this.dom.slidesContainer = container.find(\n            '[js-node=\"widget-banners-items-wrapper\"]'\n        );\n\n        if (this.dom.slides.length > 1) {\n            this.createLinks();\n            this.setActiveSlide(0);\n            this.startTimer();\n        } else {\n            this.dom.slides.eq(0).addClass('m-active');\n            setInterval(() => {\n                this.showCoefs(0);\n                this.setActiveSlide(0);\n            }, 4000);\n        }\n\n        this.bindUI();\n\n        document.addEventListener('visibilitychange', () => {\n            if (document.visibilityState === 'visible') {\n                if (!this.timer) this.startTimer();\n            } else if (document.visibilityState === 'hidden') {\n                if (this.timer) this.stopTimer();\n            }\n        });\n    };\n\n    WidgetBanners.prototype.dispose = function () {\n        this.unbindUI();\n    };\n\n    WidgetBanners.prototype.pushMtmEvent = function (type) {\n        document.dispatchEvent(\n            new CustomEvent('mtmCustomEvent', {\n                detail: {\n                    id: 'd-i02-e9',\n                    container: this.dom.container[0],\n                    trigger: type,\n                    index: this.activeIndex + 1,\n                    slides: this.dom.slides.length,\n                },\n            })\n        );\n    };\n\n    WidgetBanners.prototype.bindUI = function () {\n        var self = this;\n\n        self.dom.container.on(\n            'click',\n            '[js-node=\"widget-banners-slide-link\"]',\n            function () {\n                self.handleEvent($(this).index());\n                self.pushMtmEvent('pagination');\n            }\n        );\n\n        self.dom.container.swipe({\n            swipeRight: function () {\n                if (self.activeIndex !== 0) {\n                    self.handleEvent(self.activeIndex - 1);\n                    self.pushMtmEvent('swipe');\n                }\n            },\n            swipeLeft: function () {\n                if (self.activeIndex !== self.dom.slides.length - 1) {\n                    self.handleEvent(self.activeIndex + 1);\n                    self.pushMtmEvent('swipe');\n                }\n            },\n            allowPageScroll: 'none',\n            threshold: 30,\n        });\n    };\n\n    WidgetBanners.prototype.unbindUI = function () {\n        app.console.log('unbind WidgetBanners');\n    };\n\n    WidgetBanners.prototype.handleEvent = function (newActiveIndex) {\n        this.activeIndex = newActiveIndex;\n        this.setActiveSlide(this.activeIndex);\n        this.stopTimer();\n        this.startTimer();\n    };\n\n    WidgetBanners.prototype.createLinks = function () {\n        var self = this;\n\n        self.dom.slides.each(function () {\n            self.dom.linksContainer.append(\n                '<li class=\"widget-banners__slide-link\" js-node=\"widget-banners-slide-link\"></li>'\n            );\n        });\n\n        self.dom.links = self.dom.container.find(\n            '[js-node=\"widget-banners-slide-link\"]'\n        );\n    };\n\n    WidgetBanners.prototype.showCoefs = function (i) {\n        $('.widget-banners__event-info-wrapper').remove();\n        if ($('.widget-banners__event-live').hasClass('m-show')) {\n            $('.widget-banners__event-live').removeClass('m-show');\n        }\n        let slideItem = this.dom.slides.eq(i);\n        let coefContainer = $(slideItem).next('.j-banner-event-info');\n\n        const isClientCartEnabled =\n            window?.globalAppSettings?.isClientCartEnabled;\n\n        function isInCart(oId) {\n            if (isClientCartEnabled) {\n                return window.ClientCart.hasOutcome(Number(oId));\n            }\n            return BettingCart.hasItem(Number(oId));\n        }\n\n        if (coefContainer.length > 0) {\n            let eventId = coefContainer.attr('data-event-id');\n            let isLive = coefContainer.attr('data-event-is-live');\n\n            const fetchUrl =\n                slideItem.parent().data().apiUrl +\n                `/api/event/banner/${eventId}?live=${isLive}`;\n\n            fetch(fetchUrl, {\n                headers: {\n                    bb_appSource: slideItem.parent().data().apiSource,\n                    'Content-Type': 'application/json; charset=utf-8',\n                },\n                method: 'GET',\n            })\n                .then((response) => {\n                    if (response.ok) {\n                        let result = response.json();\n\n                        return result;\n                    } else {\n                        console.log('Something went wrong');\n                        return {};\n                    }\n                })\n                .then((data) => {\n                    if (!data.eventId) return;\n                    if (data.isLive) {\n                        $('.widget-banners__event-live').addClass('m-show');\n                    }\n                    if (data.isActive) {\n                        let html =\n                            '<div class=\"widget-banners__event-info-wrapper\">';\n                        if (data.outcome1) {\n                            let activeCoef = isInCart(data.outcome1.coefId)\n                                ? 'm-active'\n                                : '';\n                            html += `\n<a onclick=\"widgetsBanner.handleCoefClick(this); return false;\"\n                    data-eid=${data.eventId}\n                    data-val=${data.outcome1.value}\n                    data-aid=\"${data.outcome1.coefId}\"\n                    data-is-live=\"${data.isLive}\"\n                    data-oid=\"${data.outcome1.coefId}\"\n                    data-coefvalue=\"${data.outcome1.value.toFixed(2)}\"\n                    class=\"widget-banners__event-coef1 ${activeCoef}\" ><span class=\"widget-banners__coef-sign\">1</span>${window.Utils.displayCoefValue(\n                                data.outcome1.value\n                            )}</a>`;\n                        } else {\n                            html +=\n                                '<div class=\"widget-banners__event-coef-empty\"></div>';\n                        }\n\n                        if (data.outcomeX) {\n                            let activeCoef = isInCart(data.outcomeX.coefId)\n                                ? 'm-active'\n                                : '';\n                            html += `\n<a onclick=\"widgetsBanner.handleCoefClick(this); return false;\"\n                    data-eid=${data.eventId}\n                    data-val=${data.outcomeX.value}\n                    data-aid=\"${data.outcomeX.coefId}\"\n                    data-is-live=\"${data.isLive}\"\n                    data-oid=\"${data.outcomeX.coefId}\"\n                    data-coefvalue=\"${data.outcomeX.value.toFixed(2)}\"\n                    class=\"widget-banners__event-coefX ${activeCoef}\"><span class=\"widget-banners__coef-sign\">X</span>${window.Utils.displayCoefValue(\n                                data.outcomeX.value\n                            )}</a>`;\n                        } else {\n                            html +=\n                                '<div class=\"widget-banners__event-coef-empty\"></div>';\n                        }\n\n                        if (data.outcome2) {\n                            let activeCoef = isInCart(data.outcome2.coefId)\n                                ? 'm-active'\n                                : '';\n                            html += `\n    <a onclick=\"widgetsBanner.handleCoefClick(this); return false;\"\n                    data-eid=${data.eventId}\n                    data-val=${data.outcome2.value}\n                    data-aid=\"${data.outcome2.coefId}\"\n                    data-is-live=\"${data.isLive}\"\n                    data-oid=\"${data.outcome2.coefId}\"\n                    data-coefvalue=\"${data.outcome2.value.toFixed(2)}\"\n                    class=\"widget-banners__event-coef2 ${activeCoef}\"><span class=\"widget-banners__coef-sign\">2</span>${window.Utils.displayCoefValue(\n                                data.outcome2.value\n                            )}</a>`;\n                        } else {\n                            html +=\n                                '<div class=\"widget-banners__event-coef-empty\"></div>';\n                        }\n\n                        html += '</div>';\n                        $(coefContainer).html(html);\n                    }\n                });\n        }\n    };\n\n    WidgetBanners.prototype.setActiveSlide = function (i) {\n        let slideItem = this.dom.slides.eq(i);\n        this.showCoefs(i);\n        this.dom.slides.removeClass('m-active');\n        slideItem.addClass('m-active');\n\n        if (this.dom.slides.length == 1) return;\n\n        this.dom.links.removeClass('m-active');\n\n        const currentLink = this.dom.links.eq(i);\n        currentLink.addClass('m-active');\n\n        var stepSize = this.dom.container.outerWidth() * i;\n\n        this.dom.slides.css({\n            transform: 'translateX(-' + stepSize + 'px)',\n        });\n    };\n\n    WidgetBanners.prototype.startTimer = function () {\n        var self = this;\n\n        self.timer = setInterval(function () {\n            if (self.dom.slides.length == 1) {\n                self.showCoefs(0);\n                return;\n            }\n\n            ++self.activeIndex;\n\n            if (self.activeIndex == self.dom.slides.length)\n                self.activeIndex = 0;\n\n            self.setActiveSlide(self.activeIndex);\n        }, self.delay);\n    };\n\n    WidgetBanners.prototype.stopTimer = function () {\n        clearInterval(this.timer);\n        this.timer = null;\n    };\n\n    return WidgetBanners;\n})();\n\nvar widgetsBanner = window.widgetsBanner = (function () {\n    const isClientCartEnabled = window?.globalAppSettings?.isClientCartEnabled;\n\n    function removeFromCart(oId) {\n        if (isClientCartEnabled) {\n            window.ClientCart.removeOutcome(Number(oId));\n        } else {\n            BettingCart.removeItem(oId);\n        }\n    }\n\n    function addToCart(sData) {\n        if (isClientCartEnabled) {\n            window.ClientCart.addOutcome({\n                oId: Number(sData.oId),\n                eId: Number(sData.eId),\n            });\n        } else {\n            BettingCart.addItem(sData);\n        }\n    }\n\n    function isInCart(oId) {\n        if (isClientCartEnabled) {\n            return window.ClientCart.hasOutcome(Number(oId));\n        }\n        return BettingCart.hasItem(Number(oId));\n    }\n\n    var data = {\n        widgets: [],\n    };\n\n    return {\n        data: data,\n        init: function () {\n            $('[js-node=\"widget-banners\"]').each(function () {\n                var container = $(this);\n                data.widgets.push(new WidgetBanners(container));\n            });\n        },\n        dispose: function () {},\n        handleCoefClick: function (a) {\n            a = $(a);\n\n            let coef = {\n                oId: a.data().oid,\n                aId: a.data().aid,\n                val: a.data().val,\n                eId: a.data().eid,\n                isLive: a.data().isLive,\n            };\n\n            if (isInCart(coef.oId)) {\n                removeFromCart(coef.oId);\n                a.removeClass('m-active');\n            } else {\n                addToCart(coef);\n                a.addClass('m-active');\n            }\n        },\n    };\n})();\n\n$(function () {\n    widgetsBanner.init();\n});\n","var WidgetHelp = window.WidgetHelp = (function () {\n    var WidgetHelp = function (container) {\n        this.dom = {\n            container: null,\n            slider: null,\n            leftArrow: null,\n            rightArrow: null,\n        };\n\n        this.dom.container = container;\n        this.dom.slider = container.find('[js-node=\"widget-help-slider\"]');\n        this.dom.leftArrow = container.find(\n            '[js-node=\"widget-help-arrow-left\"]'\n        );\n        this.dom.rightArrow = container.find(\n            '[js-node=\"widget-help-arrow-right\"]'\n        );\n\n        this.isArrowClickBlocked = false;\n\n        this.checkScrollPosition(this.dom.slider.scrollLeft());\n\n        this.bindUI();\n    };\n\n    WidgetHelp.prototype.dispose = function () {\n        this.unbindUI();\n    };\n\n    WidgetHelp.prototype.bindUI = function () {\n        var self = this;\n\n        self.dom.rightArrow.on('click', function () {\n            if (!self.isArrowClickBlocked) {\n                self.isArrowClickBlocked = true;\n                self.slide({ direction: 'right' });\n            }\n        });\n\n        self.dom.leftArrow.on('click', function () {\n            if (!self.isArrowClickBlocked) {\n                self.isArrowClickBlocked = true;\n                self.slide({ direction: 'left' });\n            }\n        });\n\n        var windowResizeTimer;\n        $(window).on('resize', function () {\n            clearTimeout(windowResizeTimer);\n            windowResizeTimer = setTimeout(function () {\n                self.checkScrollPosition(self.dom.slider.scrollLeft());\n            }, 100);\n        });\n    };\n\n    WidgetHelp.prototype.unbindUI = function () {\n        app.console.log('unbind WidgetHelp');\n    };\n\n    WidgetHelp.prototype.slide = function (settings) {\n        var self = this;\n        var scrollPosition = self.dom.slider.scrollLeft();\n        var newScrollPosition = 0;\n        var scrollableAreaWidth = 340;\n\n        settings.direction = settings.direction || '';\n\n        if (settings.direction === 'right') {\n            newScrollPosition = scrollPosition + scrollableAreaWidth;\n        } else if (settings.direction === 'left') {\n            newScrollPosition = scrollPosition - scrollableAreaWidth;\n        }\n\n        self.checkScrollPosition(newScrollPosition);\n\n        self.dom.slider.animate(\n            {\n                scrollLeft: newScrollPosition,\n            },\n            600,\n            function () {\n                self.isArrowClickBlocked = false;\n            }\n        );\n    };\n\n    WidgetHelp.prototype.checkScrollPosition = function (scrollPosition) {\n        var self = this;\n        var scrollableAreaWidth =\n            self.dom.slider[0].scrollWidth - self.dom.slider.width();\n\n        self.dom.container.removeClass('m-without-right-arrow');\n        self.dom.container.removeClass('m-without-left-arrow');\n\n        if (scrollPosition <= 0) {\n            self.dom.container.addClass('m-without-left-arrow');\n        }\n\n        if (scrollPosition >= scrollableAreaWidth) {\n            self.dom.container.addClass('m-without-right-arrow');\n        }\n    };\n\n    WidgetHelp.prototype.slideRight = function () {\n        var self = this;\n        var scrollLeft = self.dom.slider.scrollLeft();\n        var newScrollLeft = scrollLeft + 190;\n\n        if (\n            newScrollLeft >=\n            self.dom.slider[0].scrollWidth - self.dom.slider.width()\n        ) {\n            self.dom.container.addClass('m-without-right-arrow');\n        }\n\n        self.dom.slider.scrollLeft(newScrollLeft);\n    };\n\n    return WidgetHelp;\n})();\n\nvar WidgetsHelp = (function () {\n    var data = {\n        widgets: [],\n    };\n\n    return {\n        data: data,\n        init: function () {\n            $('[js-node=\"widget-help\"]').each(function () {\n                var container = $(this);\n                data.widgets.push(new WidgetHelp(container));\n            });\n        },\n        dispose: function () {},\n    };\n})();\n\n$(function () {\n    WidgetsHelp.init();\n});\n","var WidgetPromo = window.WidgetPromo = (function () {\n\n\tvar WidgetPromo = function (container) {\n\t\tthis.dom = {\n\t\t\tcontainer: null,\n\t\t\tslides: [],\n\t\t\tlinksContainer: null,\n\t\t\tlinks: []\n\t\t}\n\n\t\tthis.timer = null;\n\t\tthis.delay = 5000;\n\t\tthis.activeIndex = 0;\n\n\t\tthis.dom.container = container;\n\t\tthis.dom.slides = container.find('[js-node=\"widget-promo-slide\"]');\n\t\tthis.dom.linksContainer = container.find('[js-node=\"widget-promo-slides-links-container\"]');\n\n\t\tif (this.dom.slides.length > 1) {\n\t\t\tthis.createLinks();\n\t\t\tthis.setActiveSlide(0);\n\t\t\tthis.startTimer();\n\t\t} else {\n\t\t\tthis.dom.slides.eq(0).addClass('m-active');\n\t\t}\n\n\t\tthis.bindUI();\n\t};\n\n\tWidgetPromo.prototype.dispose = function () {\n\t\tthis.unbindUI();\n\t};\n\n\tWidgetPromo.prototype.bindUI = function () {\n\t\tvar self = this;\n\n\t\tself.dom.container.on('click', '[js-node=\"widget-promo-slide-link\"]', function () {\n\t\t\tself.activeIndex = $(this).index();\n\t\t\tself.setActiveSlide(self.activeIndex);\n\t\t\tself.stopTimer();\n\t\t\tself.startTimer();\n\t\t});\n\t};\n\n\tWidgetPromo.prototype.unbindUI = function () {\n        app.console.log('unbind WidgetPromo');\n\t};\n\n\tWidgetPromo.prototype.createLinks = function () {\n\t\tvar self = this;\n\n\t\tself.dom.slides.each(function () {\n\t\t\tself.dom.linksContainer.append('<li class=\"widget-promo__slide-link\" js-node=\"widget-promo-slide-link\"></li>')\n\t\t});\n\n\t\tself.dom.links = self.dom.container.find('[js-node=\"widget-promo-slide-link\"]');\n\t};\n\n\tWidgetPromo.prototype.setActiveSlide = function (i, animationType) {\n\t\t// TODO слайд-анимация\n\t\tthis.dom.slides.removeClass('m-active');\n\t\tthis.dom.slides.eq(i).addClass('m-active');\n\n\t\tthis.dom.links.removeClass('m-active');\n\t\tthis.dom.links.eq(i).addClass('m-active');\n\t}\n\n\tWidgetPromo.prototype.startTimer = function () {\n\t\tvar self = this;\n\n\t\tself.timer = setInterval(function () {\n\t\t\t++self.activeIndex;\n\n\t\t\tif (self.activeIndex == self.dom.slides.length)\n\t\t\t\tself.activeIndex = 0;\n\n\t\t\tself.setActiveSlide(self.activeIndex);\n\t\t}, self.delay);\n\t}\n\n\tWidgetPromo.prototype.stopTimer = function () {\n\t\tclearInterval(this.timer);\n\t}\n\n\treturn WidgetPromo;\n}());\n\nvar widgetsPromo = (function () {\n\tvar data = {\n\t\twidgets: []\n\t};\n\n\treturn {\n\t\tdata: data,\n\t\tinit: function () {\n\t\t\t$('[js-node=\"widget-promo\"]').each(function () {\n\t\t\t\tvar container = $(this);\n\t\t\t\tdata.widgets.push(new WidgetPromo(container));\n\t\t\t});\n\t\t},\n\t\tdispose: function () {\n\n\t\t}\n\t}\n}());\n\n$(function () {\n\twidgetsPromo.init();\n});","window.LayoutResolver = (function () {\n    return {\n        resolve: function (scope) {\n\n            if (scope.isLayoutRightColumnVisible !== undefined && !scope.isLayoutRightColumnVisible) {\n                LayoutRightColumn.hide();\n            }\n            else {\n                LayoutRightColumn.show();\n            }\n        }\n    };\n}());","window.LayoutRightColumn = (function() {\n    var selectors = {\n        container: '#layout-right-column'\n    };\n\n    return {\n        show: function () {\n            $(selectors.container).removeClass('m-hidden');\n        },\n        hide: function () {\n            $(selectors.container).addClass('m-hidden');\n        }\n    };\n}());","$(function () {\n    $(document).on('click', '.live-timer__switch-button', function () {\n        $(this).closest('.live-timer').toggleClass('m-show-current');\n    });\n});","window.MainNavigation = (function () {\n\n    var selectors = {\n        pageContent: '#page-content',\n        navItems: '.main-navigation__link',\n        submenuContainer: '#main-navigation__submenu-container',\n        submenuItemsContainer: '#main-navigation__submenu-links',\n        container: '#main-navigation',\n        linksContainer: '#main-navigation__links-container',\n        accountBalance: '.account-widget__balance-sum[js-node=\"view-balance__sum\"]',\n        accountProfileBalance: '.profile__balance-sum[js-node=\"view-balance__sum\"]',\n        profileBonusBalance: '.profile__bonus-sum[js-node=\"view-balance__sum\"]',\n        bonusBalance: '[js-node=\"view-bonus__sum\"]',\n        logout: '[js-node=\"logout\"]'\n    };\n\n\n    var notification = {\n        //v2.0\n        updateAccountBalance: function (val) {\n            accountBalance = val;\n            var accountBalanceEl = $(selectors.accountBalance);\n            var accountProfileBalanceEl = $(selectors.accountProfileBalance);\n            accountBalanceEl.attr('data-sum', val);\n            accountProfileBalanceEl.attr('data-sum', val);\n            if (!isNaN(parseFloat(accountBalanceEl.html()))) {\n                accountBalanceEl.html(app.numberToString(val.toFixed(2)).replace('.', ','));\n                accountProfileBalanceEl.html(app.numberToString(val.toFixed(2)).replace('.', ','));\n            }\n        },\n        //v2.0\n        updateAccountBonusPoints: function (val) {\n            globalAppSettings.currentUser.bonuses = parseInt(val);\n            var bonusBalanceEl = $(selectors.bonusBalance);\n            var profileBonusBalanceEl = $(selectors.profileBonusBalance);\n            bonusBalanceEl.attr('data-sum', val);\n            profileBonusBalanceEl.attr('data-sum', val);\n            if (!isNaN(parseFloat(bonusBalanceEl.html()))) {\n                bonusBalanceEl.html(app.numberToString(val));\n                profileBonusBalanceEl.html(app.numberToString(val));\n            }\n        }\n    };\n\n    return {\n        init: function () {\n            if (globalAppSettings.isMobileDevice && !globalAppSettings.isMobileDeviceInDesktopMode) {\n                return;\n            }\n\n            this.items = $(selectors.navItems);\n            this.bindUI();\n            this.updateSubmenu();\n        },\n        bindUI: function () {\n            var self = this;\n            const logout = document.querySelector(selectors.logout);\n\n            if(logout) {\n                logout.addEventListener('click', (e)=> {\n                    const broadcastList = document.getElementById('broadcast-list');\n                    if(broadcastList.children.length) {\n                        e.preventDefault()\n                        const logoutEvent = new CustomEvent('logout', {\n                            bubbles: true,\n                            detail: {\n                                href: e.currentTarget.href,\n                            }\n                        });\n                        document.dispatchEvent(logoutEvent);\n                    }\n                 })\n            }\n\n\n            self.items.on('click', function () {\n                if ($(this).data('nopage') === undefined) {\n                    self.setActive($(this));\n                }\n                setTimeout(function () {\n                    $(selectors.submenu).removeAttr('style');\n                }, 500);\n            });\n\n            $(document).on('mouseenter', '#account-widget__navigation-block', function () {\n                if (accountMenuHideTimeout) {\n                    clearTimeout(accountMenuHideTimeout);\n                }\n\n                $(this).addClass('m-expanded');\n            });\n\n            var accountMenuHideTimeout;\n            $(document).on('mouseleave', '#account-widget__navigation-block', function () {\n                var elem = $(this);\n                accountMenuHideTimeout = setTimeout(function () {\n                    elem.removeClass('m-expanded');\n                }, 500);\n\n            });\n\n            $(window).on('resize', function () {\n                self.updateSubmenu();\n            });\n\n            /**\n             * @param {CustomEvent<{balanceVal: number, bonusPoints: number}>} event - CustomEvent.\n             */\n            function notificationBalanceUpdateHandler (event) {\n                const isDetails = 'detail' in event;\n\n                const balance = isDetails && event.detail.balanceVal ? event.detail.balanceVal : 0;\n                const bonuses = isDetails && event.detail.bonusPoints ? event.detail.bonusPoints : 0;\n\n                notification.updateAccountBalance(balance);\n                notification.updateAccountBonusPoints(bonuses);\n            }\n\n            window.addEventListener('notificationBalanceUpdate', notificationBalanceUpdateHandler);\n        },\n        updatePage: function () {\n            if (globalAppSettings.isMobileDevice && !globalAppSettings.isMobileDeviceInDesktopMode) {\n                return;\n            }\n\n            var self = this;\n\n            var elem = self.items.filter('[data-page=' + $(selectors.pageContent).data('page') + ']');\n            if (elem.length > 0) {\n                self.setActive(elem);\n            }\n        },\n        setActive: function (elem) {\n            this.items.removeClass('m-active');\n            elem.addClass('m-active');\n        },\n        updateSubmenu: function () {\n            var self = this;\n            $(selectors.linksContainer).hide();\n            var containerWidth = $(selectors.container).outerWidth() - $(selectors.submenuContainer).outerWidth() - self.items.eq(self.items.length - 1).width();\n\n            if ($(selectors.submenuContainer).hasClass('is-visible') === false) {\n                containerWidth = containerWidth - $('.main-navigation__submenu-title').outerWidth();\n            }\n\n            $(selectors.linksContainer).show();\n\n            $(selectors.submenuItemsContainer).html('');\n            self.items.removeClass('m-invisible');\n\n            var summaryVisibleWidth = 0;\n            var hasInvisible = false;\n            for (var i = 0; i < self.items.length; i++) {\n                summaryVisibleWidth += self.items.eq(i).outerWidth() + parseInt(self.items.eq(i).css('margin-right'));\n\n                if (summaryVisibleWidth - 1 >= containerWidth) {\n                    $(selectors.submenuItemsContainer).append(self.items.eq(i).clone().removeClass('main-navigation__link').addClass('dropdown__item'));\n                    self.items.eq(i).addClass('m-invisible');\n                    hasInvisible = true;\n                }\n            }\n\n            if (hasInvisible) {\n                $(selectors.submenuContainer).addClass('is-visible');\n            } else {\n                $(selectors.submenuContainer).removeClass('is-visible');\n            }\n        },\n        notification: notification\n    }\n}());","window.MobileAppDownloadButton = (function () {\n\n    function handleDownloadClick(url) {\n        var site = window.globalAppSettings.api.appSource || 'UniRu';\n        var apkName = site === 'UniRu' ? 'BaltBet.apk' : 'Yodds.apk';\n        var link = document.createElement('a');\n        link.setAttribute('href', url);\n        link.setAttribute('download', apkName);\n        document.body.appendChild(link);\n        link.click();\n        document.body.removeChild(link);\n        link.remove();\n\n        return false;\n    }\n\n    function bindUI() {\n        document.addEventListener('click', function (e) {\n            if (e.target.classList.contains('js-app-download-button')) {\n                const button = e.target.dataset.href ? e.target : e.target.parentNode;\n                if (button.dataset.href) {\n                    return handleDownloadClick(button.dataset.href);\n                }\n            }\n        });\n    }\n\n    return {\n        bindUI: bindUI\n    }\n}());\n\nMobileAppDownloadButton.bindUI();","window.ModalMarkets = (function () {\n\treturn {\n\t    init: function (content, ajaxCall, callbacks) {\n\t\t\tvar self = this;\n\n\t\t\tself.ajaxCall = ajaxCall;\n\t\t\tself.dom = {};\n\n\t\t\tself.marketsModal = new app.ModalWindow({\n\t\t\t\tcontent: content,\n\t\t\t\ttitle: window.Localization.getString('Scripts_Shared_Modules.ModalMarkets_28', 'Добавить рынки'),\n\t\t\t\tclassName: 'modal-markets-wrapper',\n\t\t\t\tafterShow: function () {\n\t\t\t\t\tself.dom.body = $('[js-node=\"modal-markets__body\"]');\n\t\t\t\t\tself.dom.submit = $('[js-node=\"modal-markets__submit\"]');\n\t\t\t\t\tself.dom.markets = $('[name=\"modal-markets-market\"]');\n\t\t\t\t\tself.dom.selectAllBtn = $('[js-node=\"modal-markets__select-all\"]');\n\t\t\t\t\tself.dom.selectDefaultBtn = $('[js-node=\"modal-markets__select-default\"]');\n\n\t\t\t\t\tself.bindUI();\n\t\t\t\t\tself.checkButtonsState();\n\n\t\t\t\t\tif (callbacks !== undefined && callbacks.afterShow !== undefined && typeof (callbacks.afterShow) === 'function') {\n\t\t\t\t\t\tcallbacks.afterShow();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tafterHide: function () {\n\t\t\t\t\tself.clear.call(self);\n\t\t\t\t\tif (callbacks !== undefined && callbacks.afterHide !== undefined && typeof (callbacks.afterHide) === 'function') {\n\t\t\t\t\t\tcallbacks.afterHide();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tself.marketsModal.show();\n\n\t\t},\n\t\tbindUI: function () {\n\t\t\tvar self = this;\n\n\t\t\t//EVENT: Отправить рынки\n\t\t\tself.dom.submit.on('click', function () {\n\t\t\t\tvar checkedMarkets = $(app.ModalMarkets.dom.markets).filter(':checked');\n\t\t\t\tif (app.ModalMarkets.dom.markets.length > 0 && checkedMarkets.length === 0) {\n\t\t\t\t\tself.marketsModal.dom.body.fadeOut().fadeIn();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar checkedIds = [];\n\t\t\t\tcheckedMarkets.each(function () {\n\t\t\t\t\tcheckedIds.push(this.value);\n\t\t\t\t});\n\n\t\t\t\tif (self.ajaxCall !== undefined && typeof (self.ajaxCall) === 'function') {\n\t\t\t\t    self.ajaxCall(checkedIds);\n\t\t\t\t}\n\t\t\t\tself.marketsModal.hide();\n\t\t\t});\n\n\t\t\tself.dom.selectAllBtn.on('click', function () {\n\t\t\t\tself.toggleAll($(this).prop('checked'));\n\t\t\t\tself.checkButtonsState();\n\t\t\t});\n\n\t\t\tself.dom.selectDefaultBtn.on('click', function () {\n\t\t\t\tself.selectDefault();\n\t\t\t\tself.checkButtonsState();\n\t\t\t});\n\n\t\t\t// при клике на чекбокс рынка проверяем если выбраны все / все по умолчанию\t\t\t\t\t\t\n\t\t\tself.dom.markets.on('click', function () {\n\t\t\t\tself.checkButtonsState();\n\t\t\t});\n\t\t},\n\t\tclear: function () {\n\t\t\tdelete this.dom;\n\t\t\tdelete this.marketsModal;\n\t\t\tdelete this.ajaxCall;\n\t\t},\n\t\ttoggleAll: function (selected) {\n\t\t\tthis.dom.markets.each(function () {\n\t\t\t\t$(this).prop('checked', selected);\n\t\t\t});\n\t\t},\n\t\tselectDefault: function () {\n\t\t\tthis.dom.markets.each(function () {\n\t\t\t\tif ($(this).data('default') === 1)\n\t\t\t\t\t$(this).prop('checked', true);\n\t\t\t\telse\n\t\t\t\t\t$(this).prop('checked', false);\n\t\t\t});\n\t\t},\n\t\tcheckButtonsState: function () {\n\t\t\tvar checkedAll = true,\n\t\t\t\t\tcheckedOnlyDefaults = true;\n\n\t\t\tthis.dom.markets.each(function () {\n\t\t\t\tvar marketInput = $(this);\n\n\t\t\t\t// пусть кнопка \"по умолчанию\" будет всегда активна\t\t\t\t\n\t\t\t\t/*if (marketInput.prop('checked') === false && marketInput.data('default') === 1 || marketInput.prop('checked') === true && marketInput.data('default') === 0)\n\t\t\t\t\tcheckedOnlyDefaults = false;*/\n\n\t\t\t\tif (marketInput.prop('checked') === false)\n\t\t\t\t\tcheckedAll = false;\n\t\t\t});\n\n\t\t\tthis.setCheckAllBtnState(checkedAll);\n\t\t\t//this.setCheckDefaultsBtnState(checkedOnlyDefaults);\n\t\t},\n\t\tsetCheckAllBtnState: function (state) {\n\t\t\tthis.dom.selectAllBtn.prop('checked', state);\n\t\t},\n\t\tsetCheckDefaultsBtnState: function (isAllChecked) {\t\t\t\n\t\t\tif (isAllChecked === true)\n\t\t\t\tthis.dom.selectDefaultBtn.addClass('disabled');\n\t\t\telse\n\t\t\t\tthis.dom.selectDefaultBtn.removeClass('disabled');\n\t\t}\n\t}\n}());","window.ModalWindow = (function() {\n    function ModalWindow(settings) {\n        this.settings = {\n            // Содержимое (текст, html)\n            content: settings.content || '',\n            // Заголовок\n            title: settings.title || '',\n            // Подпись рядом с заголовком\n            subtitle: settings.subtitle || '',\n            // Нужна ли обертка для содержимого (header с кнопкой закрытия, body с установленными стилями)\n            hasWrapper: settings.hasWrapper === false ? false : true,\n            // Закрывать окно по клику на фон (затенение)\n            closeByBackground: settings.closeByBackground === false ? false : true,\n            // Закрывать окно по клику на клавишу Esc\n            closeByEscape: settings.closeByEscape === false ? false : true,\n            // Дополнительный css-класс, присваеваемый родительскому элементу модального окна (overlay)\n            className: settings.className || '',\n            // Нужно ли выравнивать окно по центру экрана\n            shouldBeCentrified: settings.shouldBeCentrified === false ? false : true,\n\n            // При закрытии окна не удаляет его из DOM\n            hideWithoutRemoving: settings.hideWithoutRemoving === true ? true : false,\n\n            // Можно ли менять размер окна и перетаскивать его\n            resizable: settings.resizable === true ? true : false,\n\n            // дополнительный css-класс для body\n            bodyClassname: settings.bodyClassname || '',\n\n            // Событие, срабатывающее перед открытием окна\n            beforeShow: settings.beforeShow || function() {},\n            // Событие, срабатывающее перед закрытием окна\n            beforeHide: settings.beforeHide || function() {},\n            // Событие, срабатывающее после открытия окна\n            afterShow: settings.afterShow || function() {},\n            // Событие, срабатывающее после закрытия окна\n            afterHide: settings.afterHide || function () { },\n\n            containerWidth: settings.containerWidth,\n            containerHeight: settings.containerHeight\n        };\n\n        return this;\n    };\n\n    ModalWindow.prototype.generateDOM = function() {\n        var body = $('body'),\n            html = $(generateHTML(this.settings)),\n            content = this.settings.content;\n\n        this.dom = {\n            overlay: html,\n            container: html.find('[js-node=\"modal-container\"]'),\n            title: html.find('[js-node=\"modal-title\"]'),\n            subtitle: html.find('[js-node=\"modal-subtitle\"]'),\n            closeBtn: html.find('[js-node=\"modal-close\"]'),\n            body: html.find('[js-node=\"modal-body\"]'),\n        };\n\n        if(this.settings.hasWrapper === false)\n            this.dom.container.html(content);\n\n        body.append(html);\n    };\n\n    ModalWindow.prototype.bindUIActions = function() {\n        var self = this;\n\n        if(self.settings.closeByBackground) {\n            this.dom.overlay.on('click', function (e) {\n                if ($(e.target).attr('js-node') === 'modal-overlay')\n                    self.hide();\n            });\n        }\n\n        this.dom.closeBtn.on('click', function(e) {\n            self.hide();\n        });\n\n        if(self.settings.closeByEscape) {\n            $(document).on('keyup.hideModalWindow', function (e) {\n                if (e.keyCode === 27) {\n                    self.hide();\n                }\n            });\n        }\n    };\n\n    ModalWindow.prototype.unbindUIActions = function() {\n        this.dom.overlay.off('click');\n        this.dom.closeBtn.off('click');\n        $(document).off('keyup.hideModalWindow');\n    };\n\n        /**\n            var data = {\n                content: '',\n                title: '',\n                    subtitle: ''\n            }\n        **/\n    ModalWindow.prototype.updateContent = function (data) {\n        if(data.hasOwnProperty('content')) {\n            if (this.settings.hasWrapper)\n                this.dom.body.html(data.content);\n            else\n                this.dom.container.html(data.content);\n        }\n\n        if(data.hasOwnProperty('title')) {\n            if (this.dom.title) {\n                this.dom.title.html(data.title);\n            }\n        }\n\n        if(data.hasOwnProperty('subtitle')) {\n            if (this.dom.subtitle) {\n                this.dom.subtitle.html(data.subtitle);\n            }\n        }\n\n        this.updateDimension();\n    };\n\n    ModalWindow.prototype.updateDimension = function () {\n        if (this.settings.shouldBeCentrified) {\n            this.dom.container.css({\n                'margin-left': -this.dom.container.width() / 2,\n                'margin-top': -this.dom.container.height() / 2,\n            });\n        }\n    };\n\n    ModalWindow.prototype.moveTo = function (x, y) {\n        this.dom.container.css({\n            left: x,\n            top: y\n        });\n    };\n\n    ModalWindow.prototype.show = function (animationDuration) {\n        var self = this;\n\n        animationDuration = animationDuration || 200;\n\n        if (this.hasOwnProperty('dom') === false) {\n            this.generateDOM();\n            this.bindUIActions();\n        }\n\n        this.settings.beforeShow();\n\n        this.dom.overlay.fadeIn(animationDuration, function () {\n            self.settings.afterShow();\n        });\n        //this.dom.container.addClass('opened');\n        this.updateDimension();\n    };\n\n    ModalWindow.prototype.hide = function (animationDuration) {\n        var self = this;\n\n        animationDuration = animationDuration || 200;\n\n        if (!this.dom) return;\n\n        this.settings.beforeHide();\n\n        this.dom.overlay.fadeOut(animationDuration, function () {\n            self.settings.afterHide();\n\n            if (self.settings.hideWithoutRemoving === false) {\n                self.unbindUIActions();\n                self.dom.overlay.remove();\n\n                delete self.dom;\n                delete self.settings;\n            }\n        });\n\n        //this.dom.container.removeClass('opened');\n    };\n\n    ModalWindow.prototype.destroy = function() {\n        this.unbindUIActions();\n        this.dom.overlay.remove();\n    };\n\n    ModalWindow.prototype.loadingEnable = function () {\n        this.dom.container.find('[js-node=\"modal__loader-overlay\"]').addClass('visible');\n    };\n\n    ModalWindow.prototype.loadingDisable = function () {\n        this.dom.container.find('[js-node=\"modal__loader-overlay\"]').removeClass('visible');\n    };\n\n    function generateHTML(settings) {\n        var className = settings.className !== '' ? ' ' + settings.className : '';\n        var style = '';\n        if (settings.containerWidth)\n            style += 'width: ' + settings.containerWidth + 'px;';\n        if (settings.containerHeight)\n            style += 'height: ' + settings.containerHeight + 'px;';\n\n        return [\n            '<div class=\"modal__overlay' + className + '\" js-node=\"modal-overlay\">',\n                '<div class=\"modal__container\" js-node=\"modal-container\" style=\"' + style + '\">',\n                    settings.hasWrapper === true ? generateWrapper(settings) : '',\n                '</div>',\n            '</div>'\n        ].join('\\n');\n    };\n\n    function generateWrapper(settings) {\n        return [\n            '<div class=\"modal__header\">',\n                '<div class=\"modal__title\">',\n                    '<span class=\"modal__title-text\" js-node=\"modal-title\">' + settings.title + '</span>',\n                    settings.subtitle.length > 0 ? '<span class=\"modal__subtitle\" js-node=\"modal-subtitle\">' + settings.subtitle + '</span>' : '',\n                '</div>',\n                '<div class=\"modal__close-button\" js-node=\"modal-close\">',\n                    Utils.svgHtml('close', 'modal__close-icon'),\n                '</div>',\n            '</div>',\n            '<div class=\"modal__body ' + settings.bodyClassname + '\" js-node=\"modal-body\">',\n                settings.content,\n            '</div>',\n                        '<div class=\"modal__loader\" js-node=\"modal__loader-overlay\">',\n                '<div class=\"modal__loader-spiner-wrapper\">',\n                    '<div class=\"modal__loader-spiner-container\">',\n                        '<div class=\"modal__loader-spiner-speeding-wheel\"></div>',\n                    '</div>',\n                '</div>',\n                '<div class=\"modal__loader-text\">'+ window.Localization.getString('Scripts_Shared_Modules.ModalWindow_29', 'Идёт отправка') + '</div>',\n            '</div>',\n        ].join('\\n');\n    };\n\n    return ModalWindow;\n}());","window.PageContent = (function () {\n    return {\n        init: function () {\n            if (globalAppSettings.isMobileDevice) {\n                return;\n            }\n\n            this.scrollbar = new AwesomeScrollbar('#page-content__scrollbar-container', 'm-page-content-scrollbar');\n            this.rightColScrollbar = new AwesomeScrollbar('#app-body__right-col-scroll-area', 'app-body__right-col-scrollbar-area-wrapper');\n        }\n    };\n}());","window.PageNavigation = (function () {\n\n    const selectors = {\n        slider: '.page-navigation__slider',\n        sliderWrapper: '#page-navigation-slider-wrapper',\n        btnLeft: '#page-navigation-arrow-left',\n        btnRight: '#page-navigation-arrow-right'\n    };\n\n    let sliderWidth = $(selectors.slider).width();\n    let sliderWrapperWidth = $(selectors.sliderWrapper).width();\n    let sliderWrapperMargins = parseInt($(selectors.sliderWrapper).css('margin-left') + $(selectors.sliderWrapper).css('margin-right'));\n    let scrollPosition = $(selectors.sliderWrapper).scrollLeft();\n    let newScrollPosition = 0;\n    let scrollableAreaWidth = 220;\n    let windowResizeTimer;\n   \n    return {\n        init: function () {            \n            this.bindUI();\n            this.appendBtn();\n        },\n\n        bindUI: function () {\n            var self = this;\n\n            $(window).on('resize', function () {\n                if (windowResizeTimer) clearTimeout(windowResizeTimer);\n                windowResizeTimer = setTimeout(function () {\n                    self.appendBtn();\n                }, 100);\n            });\n\n            $(selectors.btnLeft).click(function () {\n                self.scrollLeft();\n                $(selectors.btnRight).removeClass('m-disable');\n            });\n\n            $(selectors.btnRight).click(function () {\n                self.scrollRight();\n                $(selectors.btnLeft).removeClass('m-disable');\n            }); \n        },\n\n        scrollLeft: function () {\n            scrollPosition = $(selectors.sliderWrapper).scrollLeft();\n            newScrollPosition = scrollPosition - scrollableAreaWidth;\n\n            $(selectors.sliderWrapper).animate({\n                scrollLeft: newScrollPosition\n            }, 600);\n\n            if (newScrollPosition <= 0) {\n                $(selectors.btnLeft).addClass('m-disable');\n            }\n        },\n\n        scrollRight: function () {\n            scrollPosition = $(selectors.sliderWrapper).scrollLeft();\n            newScrollPosition = scrollPosition + scrollableAreaWidth;\n\n            $(selectors.sliderWrapper).animate({\n                scrollLeft: newScrollPosition\n            }, 600);\n            \n            if (sliderWrapperWidth + newScrollPosition - sliderWrapperMargins >= sliderWidth) {\n                $(selectors.btnRight).addClass('m-disable');\n            }\n        },\n\n        appendBtn: function () {\n            if (sliderWidth <= ($(selectors.sliderWrapper).outerWidth())) {\n                $(selectors.btnLeft).addClass('m-disable');\n                $(selectors.btnRight).addClass('m-disable');\n            } else {\n                $(selectors.btnRight).removeClass('m-disable');\n            }\n        }\n    }\n\n}());\n\n$(function () {\n    if (!globalAppSettings.isMobileDevice) {\n        PageNavigation.init();\n    }    \n});","window.Search = (function () {\n\n    var self;\n    const selectors = {\n        input: '#search-input',\n        eventsItem: '[search-event]',\n        resultsContainer: '#search-results',\n        resultsItemsContainer: '#search-results-items',\n        resultsItemsWrapper: '#search-results__items-wrapper',\n        resultsScrollarea: '.awesome-scrollbar__area-wrapper.m-search .awesome-scrollbar__content-wrapper',\n        resultsCountNode: '#search-results-count',\n        closeButton: '#search__close',\n        submitButton: '#search__submit'\n    };\n\n    const _timeSpan = 500;\n    var searchTimeout,\n        selectedResultIndex = -1;\n    var currentSearchMode;\n    var currentSearchParams;\n\n    var highlightFounded = function (query, str) {\n        var regex = new RegExp('(' + query + ')', 'gi');\n        var highlightedString = str.replace(regex, '<span class=\"highlight\">$1</span>');\n        return highlightedString !== '' ? highlightedString : str;\n    };\n\n    const generateItemHtmlHandlers = {\n        'default': {\n            overflowResult: function() {\n                return [\n                    '<div class=\"search-results__item-empty\">' + Localization.getString('Search.ManyEvents','Найдено слишком много событий. Пожалуйста, уточните запрос.') + '</div>'\n                ].join('\\n');\n            },\n            result: function(data, query) {\n                var isfavClassname = data.isfav === true ? ' m-active' : ' ',\n                    highlightedTitle = query ? highlightFounded(query, data.title) : data.title,\n                    highlightedLeague = query ? highlightFounded(query, data.league) : data.league,\n                    highlightetId = query ? highlightFounded(query, data.id.toString()) : data.id;\n\n\n                var html = [\n            '<div class=\"search-results__item\" search-event data-id=\"' + data.id + '\" data-link=\"' + data.weblink + '\" data-mtm-trigger=\"search-item\">',\n                '<div class=\"search-results__item-icon\">',\n                    app.svgSports(data.sportid,'search__sport-icon'),\n                                '<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"/Content/' + globalAppSettings.site + '/images/sprites/svg-icons-sports.svg#sport-' + data.sportid + '\"></use>' +\n                            '</svg>',\n                '</div>',\n                '<div class=\"search-results__item-title\">',\n                '<span class=\"highlight\"></span>' + highlightedTitle + '<br />',\n                    '<span class=\"search-results__item-group\">' + highlightedLeague + (data.eventPositionText || \"\") + '</span>',\n                        '</div>',\n                ];\n                if (currentSearchMode === 'results') {\n                    html = html.concat([\n                        '<div class=\"search-results__item-score m-main\">' + data.score + '</div>',\n                        '<div class=\"search-results__item-score\">' + data.detailed + '</div>'\n                    ]);\n                }\n\n                html = html.concat([\n                    '<div class=\"search-results__item-number\">' + highlightetId + '</div>',\n                    '<div class=\"search-results__item-datetime\">',\n                        '<div class=\"search-results__item-date\">' + data.date + '</div>',\n                        '<div class=\"search-results__item-time\">' + data.time + '</div>',\n                    '</div>'\n                ]);\n\n                if (currentSearchMode === 'results') {\n                    html = html.concat([\n                        '<div class=\"search-results__item-fav\"></div>'\n                    ]);\n                } else {\n                    if(data.isNested && window.globalAppSettings.site === \"cps\") {\n                        html = html.concat([\n                            '<div class=\" search-results__item-spacer\"></div>',\n\n                        ]);\n                    } else {\n                        html = html.concat([\n                            '<div class=\"favorites-button search-results__item-fav' + isfavClassname + '\" search-favstar data-mtm-trigger=\"search-fav\">',\n                        Utils.svgHtml('favorites', 'favorites-button__icon'),\n                    '</div>'\n                        ]);\n\n                    }\n                }\n                html = html.concat(['</div>']);\n                return html.join('\\n');\n            }\n        },\n        'addresses': {\n            overflowResult: function() {\n                return [\n                    '<div class=\"search-results__item-empty\">' + Localization.getString('Search.ManyAddresses','Найдено слишком много адресов. Пожалуйста, уточните запрос.') + '</div>'\n                ].join('\\n');\n            },\n            result: function(data, query) {\n                var highlightFounded = function(query, str) {\n                    var splits = query.split(' ');\n                    var highlightedString = str;\n                    for (var i = 0; i < splits.length; i++) {\n                        var regex = new RegExp('(' + splits[i] + ')', 'gi');\n\n                        highlightedString = highlightedString.replace(regex, '<span class=\"highlight\">$1</span>');\n                    }\n                    return highlightedString !== '' ? highlightedString : str;\n                };\n\n                var highlightedTitle = query ? highlightFounded(query, data.city) : data.city,\n                    highlightedLeague = query ? highlightFounded(query, data.address) : data.address;\n\n                var html = [\n                    '<div class=\"search-results__item\" search-event data-id=\"' + data.id + '\" style=\"display:flex; padding: 10px;\" data-mtm-trigger=\"search-item\">',\n                    '<div class=\"search-results__item-title\">', // style=\"flex: 2\"\n                            '<span class=\"highlight\"></span>' + highlightedTitle + '<br />',\n                            '<span class=\"search-results__item-group\">' + highlightedLeague + '</span>',\n                        '</div>',\n                        '<div class=\"search-results__item-datetime\">', // style=\"flex: 1\"\n                            '<div class=\"search-results__item-date\">' + data.time + '</div>',\n                        '</div>',\n                        '<div class=\"favorites-button search-results__item-fav \" search-favstar=\"\" data-mtm-trigger=\"search-fav\"></div>',\n                    '</div>'\n                ];\n                return html.join('\\n');\n            }\n        }\n    }\n\n    const generateEmptyHtmlHandlers = {\n        'default': function() {\n            return [\n                '<div class=\"search-results__item-empty\">' + Localization.getString('Search.NoResults','Ничего не найдено. Пожалуйста, уточните запрос.') + '</div>'\n            ].join('\\n');\n        }\n    };\n\n    const searchHandlers = {\n        'live': function (query) {\n            if (query.length < 1) //TODO: redundant?\n                return;\n\n            Ajax.postJson(\"/Live/Search\", {\n                data: { query: query },\n                doCallAjaxViewParsers: false,\n                success: function (resp) {\n                    self.drawResultEvents(resp, query);\n                    self.show();\n                }\n            });\n            return;\n        },\n        'liveSingleSport': function (query) {\n            if (query.length < 1) //TODO: redundant?\n                return;\n\n            Ajax.postJson(\"/Live/Search\", {\n                data: { query: query, sportType: currentSearchParams.sportType },\n                doCallAjaxViewParsers: false,\n                success: function (resp) {\n                    self.drawResultEvents(resp, query);\n                    self.show();\n                }\n            });\n            return;\n        },\n        'prematch': function (query) {\n            if (query.length < 1)\n                return;\n\n            Ajax.postJson(\"/Prematch/Search\", {\n                data: { string: query }, //sportId: 87\n                doCallAjaxViewParsers: false,\n                success: function (resp) {\n                    self.drawResultEvents(resp, query);\n                    self.show();\n                }\n            });\n            return;\n        },\n        'results': function (query) {\n            if (query.length < 1)\n                return;\n\n            var e = $.Event(\"keypress\");\n            e.which = 13;\n            e.successHandler = function(resp, query) {\n                self.drawResultEvents(resp, query);\n                self.show();\n            }\n            $(selectors.input).trigger(e);\n            return;\n        },\n        'prematchSingleSport': function (query) {\n            if (query.length < 1) //TODO: redundant?\n                return;\n\n            Ajax.postJson(\"/Prematch/Search\", {\n                data: { string: query, sportType: currentSearchParams.sportType },\n                doCallAjaxViewParsers: false,\n                success: function (resp) {\n                    self.drawResultEvents(resp, query);\n                    self.show();\n                }\n            });\n            return;\n        },\n        'favLive': function (query) {\n            if (query.length < 1) //TODO: redundant?\n                return;\n\n            Ajax.postJson(\"/Live/Search\", {\n                data: { query: query },\n                doCallAjaxViewParsers: false,\n                success: function (resp) {\n                    self.drawResultEvents(resp, query);\n                    self.show();\n                }\n            });\n            return;\n            //if (query.length < 1)\n            //    return;\n\n            ////ClientSearch.Search\n        },\n        'addresses': function (query) {\n            if (query.length < 1) //TODO: redundant?\n                return;\n\n            Addresses.search(query);\n            return;\n        }\n    };\n\n    const hideCloseButtonsHandlers = {\n        'results': function() {\n            var e = $.Event('keypress');\n            e.which = 13;\n            $(selectors.input).trigger(e);\n        },\n        'addresses': function (searchNode) {\n            Addresses.reset();\n        }\n    };\n\n    const clickOnEventHandlers = { //распихать по разным модулям поиска или скоупам, добавить default\n        'default': function (clickNode) {\n            var link = $(clickNode).data('link');\n            if (link) {\n                SPA.navigate(link);\n                self.hide();\n            }\n            else {\n                var id = $(clickNode).data('id');\n                if (id) {\n                    SPA.navigate('/event/' + id);\n                    self.hide();\n                }\n            }\n            return;\n        },\n        'prematch': function (clickNode) {\n            return clickOnEventHandlers['default'](clickNode);\n        },\n        'prematchSingleSport': function (clickNode) {\n            return clickOnEventHandlers['default'](clickNode);\n        },\n        'live': function (clickNode) {\n            return clickOnEventHandlers['default'](clickNode);\n        },\n        'liveSingleSport': function (clickNode) {\n            return clickOnEventHandlers['default'](clickNode);\n        },\n        'favLive': function (clickNode) {\n            return clickOnEventHandlers['default'](clickNode);\n        },\n        'results': function (clickNode) {\n            var id = $(clickNode).data('id');\n\n            BinderResults.scrollToEvent(id);\n\n            self.hide();\n            return;\n        },\n        'addresses': function (clickNode) {\n            var id = $(clickNode).data('id');\n\n            Addresses.select(id);\n\n            self.hide();\n            return;\n        }\n    };\n\n    const focusSearchInputHandlers = {\n        'default': function () {\n            if (currentSearchMode === 'favLive' && $(this).val().length < 2) {\n\n            }\n        },\n        'live': function (searchNode) {\n            if ($(searchNode).val() !== '')\n                self.show();\n\n            app.console.log('liveHand');\n            return false;\n        },\n        'liveSingleSport': function (searchNode) {\n            if ($(searchNode).val() !== '')\n                self.show();\n\n            app.console.log('liveHandSingle');\n            return false;\n        },\n        'prematch': function (searchNode) {\n            if ($(searchNode).val() !== '')\n                self.show();\n\n            app.console.log('prematchHand');\n            return false;\n        },\n        'results': function (searchNode) {\n            if ($(searchNode).val() !== '')\n                self.show();\n\n            app.console.log('resultsHand');\n            return false;\n        },\n        'prematchSingleSport': function (searchNode) {\n            if ($(searchNode).val() !== '')\n                self.show();\n\n            app.console.log('prematchHandSingle');\n            return false;\n        },\n        'favLive': function (searchNode) {\n            if ($(searchNode).val() !== '')\n                self.show();\n\n            app.console.log('favliveHand');\n            return false;\n            //if (ClientSearch.isInitiated())\n            //self.show();\n            //return false;\n        },\n        'addresses': function (searchNode) {\n            if ($(searchNode).val() !== '')\n                self.show();\n\n            app.console.log('addressesHand');\n            return false;\n        }\n    };\n\n    function selectNextResult() {\n        var newIndex = selectedResultIndex + 1;\n\n        if (newIndex > $(selectors.eventsItem).length - 1)\n            newIndex = 0;\n\n        selectResult(newIndex);\n    }\n\n    function selectPrevResult() {\n        var newIndex = selectedResultIndex - 1;\n\n        if (newIndex < 0)\n            newIndex = $(selectors.eventsItem).length - 1;\n\n        selectResult(newIndex);\n    }\n\n    function selectResult(i) {\n        var events = $(selectors.eventsItem);\n\n        events.removeClass('m-selected');\n        events.eq(i).addClass('m-selected');\n\n        selectedResultIndex = i;\n\n        scrollToSelected();\n    }\n\n    function scrollToSelected() {\n        var scrollarea = $(selectors.resultsScrollarea),\n            scrollareaHeight = scrollarea.height(),\n            currentScrollTop = scrollarea.scrollTop(),\n            selectedRowPositionTop = $(selectors.eventsItem).eq(selectedResultIndex).position().top;\n\n        if (scrollareaHeight <= selectedRowPositionTop - currentScrollTop || selectedRowPositionTop - currentScrollTop < 0) {\n            scrollarea.scrollTop(selectedRowPositionTop);\n        }\n    }\n\n\n    return {\n        init: function (searchMode, searchParams) {\n            this.scrollbar = new AwesomeScrollbar(selectors.resultsItemsContainer, 'm-search');\n            this.setCurrentSearchMode(searchMode);\n            this.setSearchParams(searchParams);\n            this.unbindUI();\n            this.bindUI();\n        },\n        setCurrentSearchMode: function (mode) {\n            if (!mode) {\n                mode = 'default';\n            }\n            currentSearchMode = mode;\n        },\n        setSearchParams: function (params) {\n            params = params || {};\n            currentSearchParams = params;\n        },\n        bindUI: function () {\n            self = this;\n            var body = app.body;\n\n            body.on('focus', selectors.input, function () {\n                focusSearchInputHandlers[currentSearchMode](this);\n            });\n\n            body.on('click', selectors.resultsContainer, function (e) {\n                return;\n            });\n\n            body.on('click', selectors.eventsItem, function (e) {\n                if(e.target.closest('.favorites-button')) {\n                    return;\n                }\n                clickOnEventHandlers[currentSearchMode](this);\n            });\n\n            body.on('mouseenter', selectors.eventsItem, function () {\n                selectResult($(this).index());\n            });\n\n            this.bindCloseButtonHandler();\n\n            body.on('keyup', selectors.input, function (e) {\n                var val = $(this).val().trim();\n\n                if ($.inArray(e.which, [13, 38, 40, 27]) === -1) {\n                    clearTimeout(searchTimeout);\n\n                    if (val.length === 0) {\n                        self.hideCloseButton();\n                    } else if (val.length < 2) {\n                        self.hide();\n                    } else {\n                        searchTimeout = setTimeout(searchHandlers[currentSearchMode], _timeSpan, val);\n                    }\n                }\n\n                return;\n            });\n        },\n        unbindUI: function () {\n            $('body').off('click', selectors.resultsContainer)\n                .off('focus', selectors.input)\n                .off('click', selectors.eventsItem)\n                .off('mouseenter', selectors.eventsItem)\n                .off('keyup', selectors.input);\n\n            this.unbindCloseButtonHandler();\n        },\n        show: function () {\n            var self = this;\n\n            selectedResultIndex = null;\n\n            $(selectors.resultsContainer).addClass('m-visible');\n\n            $(document).on('click.searchResults', function (e) {\n                if (e.target !== $(selectors.input).get(0))\n                    self.hide();\n            });\n\n            $('body').on('keyup.searchResults', function (e) {\n                // arrow down\n                if (e.key === \"ArrowDown\") {\n                    selectNextResult();\n                }\n                // arrow up\n                else if (e.key === \"ArrowUp\") {\n                    selectPrevResult();\n                }\n                // enter\n                    else if (e.key === \"Enter\") {\n                    if (selectedResultIndex === null) {\n                        $(selectors.eventsItem).length === 1 ? clickOnEventHandlers[currentSearchMode]($(selectors.eventsItem).first()) : clickOnEventHandlers[currentSearchMode]();\n                    } else {\n                        $(selectors.eventsItem).eq(selectedResultIndex).click()\n                    }\n                }\n                // escape\n                else if (e.key === \"Escape\") {\n                    self.hide();\n                }\n\n                e.stopImmediatePropagation();\n                return false;\n            });\n        },\n        hide: function () {\n            $(selectors.resultsContainer).removeClass('m-visible');\n            $(document).off('click.searchResults');\n            $('body').off('keyup.searchResults');\n        },\n        drawResultEvents: function (response, query) {\n\n            var html = '',\n                events = response.events,\n                isOverflow = response.overflow,\n                eventsCnt = events.length;\n            query = query || null;\n\n            if (eventsCnt > 0) {\n                var generateHandlers = (generateItemHtmlHandlers[currentSearchMode] || generateItemHtmlHandlers['default']);\n\n                for (var i = 0; i < eventsCnt; i++) {\n                    html += generateHandlers.result(events[i], query);\n                }\n                if (isOverflow) {\n                    html += generateHandlers.overflowResult();\n                }\n            } else {\n                html += (generateEmptyHtmlHandlers[currentSearchMode] || generateEmptyHtmlHandlers['default'])();\n            }\n\n\n            $(selectors.resultsCountNode).text(eventsCnt);\n            $(selectors.resultsItemsContainer).html(html);\n\n            if (eventsCnt > 7) {\n                $(selectors.resultsItemsWrapper).addClass('m-with-scroll');\n            } else {\n                $(selectors.resultsItemsWrapper).removeClass('m-with-scroll');\n            }\n        },\n        showCloseButton: function () {\n            $(selectors.closeButton).show();\n            $(selectors.submitButton).hide();\n        },\n        hideCloseButton: function () {\n            $(selectors.closeButton).hide();\n            $(selectors.submitButton).show();\n\n            if (hideCloseButtonsHandlers[currentSearchMode])\n                hideCloseButtonsHandlers[currentSearchMode](this);\n        },\n        bindCloseButtonHandler: function () {\n            var self = this;\n\n            $(selectors.input).on('keyup.closeButton', function () {\n                if ($(this).val().length > 0) {\n                    self.showCloseButton();\n                } else {\n                    self.hideCloseButton();\n                }\n            })\n\n            $(document).on('click', selectors.closeButton, function (e) {\n                self.clear();\n                $(selectors.input).trigger('keyup');\n            });\n        },\n        unbindCloseButtonHandler: function () {\n            $(selectors.input).off('keyup.closeButton');\n\n            $(document).off('click', selectors.closeButton);\n        },\n        clear: function () {\n            var self = this;\n            $(selectors.input).val('');\n            self.hide();\n            self.hideCloseButton();\n        },\n        focusOnInput: function () {\n            $(selectors.input).focus();\n        }\n    }\n}());\n\n//$(function () {\n//    window.Search.init();\n//});","window.ErrorHandler = (function () {\n\tvar selectors = {\n\t\terrorContainer: '#app__error'\n\t}\n\n\tfunction show() {\n\t\t$(selectors.errorContainer).addClass('m-visible');\n\t}\n\n\tfunction hide() {\n\t\t$(selectors.errorContainer).removeClass('m-visible');\n\t}\n\n\tfunction handle(jqXHR, textStatus, errorThrown) {\n\t    show();\n\t    setTimeout(function () {\n\t        Ajax.redirect(window.location.pathname);\n\t    }, 2000);\n\n\n/*\n\t\tconsole.log('textStatus: ', textStatus);\n\t\tconsole.log('errorThrown: ', errorThrown);\n\t\tconsole.log('XHR: ', jqXHR);\n\t\tconsole.log('XHR.responseJSON: ', jqXHR.responseJSON);\n\t\tconsole.log('XHR.responseTEXT(first 20): ', jqXHR.responseText);\n*/\n\t}\n\n\treturn {\n\t\tshow: show,\n\t\thide: hide,\n\t\thandle: handle\n\t}\n}());\n\n","window.StatisticsSingle = (function () {\n    var selectors = {\n        externalStatistics: '[show-estat]'\n    };\n\n    var lastEventId,\n\t\tmodalWin;\n\n    function bindUI() {\n\n        $('body').on('click', selectors.externalStatistics, function () {\n            var externalId = Number($(this).attr('show-estat'));\n\n            if (!isNaN(externalId)) {\n                showExternalStatistics(externalId);\n            }\n        });\n    }\n\n    var showExternalStatistics = function (newEventId) {\n        if (newEventId !== lastEventId) {\n            modalWin.updateContent({\n                content: `<iframe src=\"${globalAppSettings.matchStatLink.replace(\"(eventId)\", newEventId)}\" width=\"1280px\" height=\"790px\" style=\"border: none;\"></iframe>\n                    <div class=\"modal-statistics-baltstat-logo\">\n                        <a href=\"${globalAppSettings.generalStatLink}\" target=\"_blank\" rel=\"norefferer\">\n                            <span>${window.Localization.getString('Scripts_Shared_Modules.StatisticsGeneral_30', 'Статистика предоставлена')}</span>\n                            <svg class=\"icon icon-baltstat\"><use xlink:href=\"${globalAppSettings.svg.defaultSprite}#baltstat\"></use></svg>\n                        </a>\n                    </div>`\n            });\n            lastEventId = newEventId;\n        }\n        modalWin.show();\n    };\n\n    function init() {\n        modalWin = new ModalWindow({\n            title: Localization.getString('Events.Statistic','Статистика'),\n            content: '',\n            className: 'm-modal-win-statistics-single'\n        });\n\n        modalWin.generateDOM();\n        modalWin.bindUIActions();\n\n        modalWin.show = function () {\n            this.dom.overlay.fadeIn(200);\n            this.updateDimension();\n        };\n\n        modalWin.hide = function () {\n            this.dom.overlay.fadeOut(200);\n        };\n\n        bindUI();\n    }\n\n    return {\n        init: init,\n        //show: show,\n        //mw: () => { return modalWin; }\n    };\n}());\n\n$(function () {\n    window.StatisticsSingle.init();\n});","window.Superexpress = (function () {\n    var selectors = {\n        seCurrentBetplace: '[se-current_drawing_betplace]',\n        seCurrentContent: '#se-current_drawing_content',\n        seLastBetplace: '[se-last_drawing_betplace]',\n        seLastContent: '#se-last_drawing_content',\n\n        seShowBetForm: '#se-show_bet_form',\n        seShowBetList: '#se-show_bet_list',\n        showFileTab: '#se-showFile',\n        showTextTab:'#se-showText',\n        seBetFormControls: '#se-bet_form_controls',\n        seShowPackageForm: '#se-show_package_form',\n\n        seToggleBet: '[se-togglebet]',\n        couponInfoToggle: '[coupon-info-toggle]',\n        seShowBetsByVariantCount: '[se-show_bets_by_variantcount]',\n\n        sePaginationLink: '[se-pagination_link]',\n        sePaginationInput: '[se-pagination_input]',\n\n        seSendBet: '[js-node=\"express-current__send-btn\"]',\n\n        seSendPackageBetBtn: '[js-node=\"se-send_package_bet_btn\"]',\n        packageBetTableRowInfo: '[package-bet-table-rowinfo]',\n        packageBetTableMinSumCell: '[package-bet-table-minsum-cell]',\n        packageBetTableCurrentSumCell: '[package-bet-table-currentsum-cell]',\n        packageBetCoefs: '[package-bet-coefs]',\n        packageBetCoupon: '[package-bet-coupon]',\n        packageBetReset: '[bet-package-reset-btn]',\n        packageBetConfirm: '[package-bet-confirm]',\n        packageBetStatusContainer: '[package-bet-status-container]',\n        packageBetPreviewToggle: \"[package-bet-preview-toggle]\",\n        packageBetInfo: '[package-bet-info]',\n        packageBetRemoveItem: '.superexpress-batch-bet__table-cell-remove',\n        packageBetControls: '#superexpress-batch-bet-textarea',\n        packageBetClear:\".superexpress-switcher__button-reset\",\n\n\n        local: {\n            betSumInput: '[js-node=\"express-current__bet-sum-input\"]',\n            errorPopup: '[js-node=\"superexpress-events__item-errors\"]',\n            currencySelect: '#express-current__currency-select',\n            checkboxes: '[js-node=\"express-current__market-input\"]',\n            eventsRows: '[js-node=\"express-current__event-row\"]',\n            minBetSum: '[js-node=\"express-current__min-bet-sum\"]',\n            optionsCnt: '[js-node=\"express-current__opt-count\"]',\n            percentageHintCheckbox: '[js-node=\"express__percentage-hint-switcher\"]',\n            probabilityPercentsVals: '[js-node=\"express-current__probability-percent-value\"]',\n            poolDistVals: '[js-node=\"express-current__pool-dist-value\"]',\n            randomBtn: '[js-node=\"express__random-btn\"]',\n            resetBtn: '[js-node=\"express-current__reset-btn\"]',\n            notSelectedBtn: '[js-node=\"express-current__notselected-btn\"]',\n            activeStateSwitcher: '[js-node=express_active-state-switcher]',\n            detailedBetLast: '[js-node=express_detailed-bet-last]',\n            stateActiveResult: '[se-state_active_result]'\n        }\n    };\n\n    var currency = 'RUB';\n\n    var notSelectedPressed = false;\n    var savedChoice = [];\n\n    var state = {\n        isPercentageHintVisible: true,\n    };\n\n    var getResultMessage = function (status, msg) {\n        if (status !== 'error' && status !== 'success')\n            return '';\n        return [\n            '<div class=\"feedback__success-body\">',\n            '<div class=\"feedback__success-icon\"><div class=\"icon-balance-request-win-' + status + '\"></div></div>',\n            '<div class=\"feedback__success-text\" style=\"margin: 0\">' + msg + '</div>',\n            '</div>'\n        ].join('\\n');\n    };\n\n    var getSuperexpressPageType = function () {\n        if ($(selectors.seCurrentBetplace).length > 0)\n            return 'current';\n        else if ($(selectors.seLastBetplace).length > 0)\n            return 'last';\n        else\n            return 'all';\n    };\n\n    var init = function () {\n        switch (getSuperexpressPageType()) {\n            case 'current':\n                UIbinder.bind.current();\n                checkedInputsStateHandler.load();\n                calcForm();\n\n                showPercentageHint(state.isPercentageHintVisible);\n                $(selectors.local.percentageHintCheckbox).prop('checked', state.isPercentageHintVisible);\n                break;\n            case 'last':\n                UIbinder.bind.last();\n                break;\n            default:\n                UIbinder.bind.all();\n                break;\n        }\n    };\n\n    var dispose = function () {\n        switch (getSuperexpressPageType()) {\n            case 'current':\n                UIbinder.unBind.current();\n                break;\n            case 'last':\n                UIbinder.unBind.last();\n                break;\n            default:\n                UIbinder.unBind.all();\n                break;\n        }\n    };\n\n    var actions = {\n        filterBefore: function (element) {\n            var body = app.body;\n            app.enableLoading();\n\n            if (body.find(selectors.seCurrentBetplace + ' ' + selectors.seShowBetList).is(element)) {\n                $(selectors.seBetFormControls).hide();\n                $(selectors.seShowBetForm).removeClass('active');\n            }\n            else if (body.find(selectors.seLastBetplace + ' ' + selectors.seShowBetList).is(element)) {\n                $(selectors.seShowBetForm).removeClass('active');\n            }\n        },\n        filterAfter: function (element) {\n            app.disableLoading();\n        },\n        recalculatePackageBet: function () {\n            let cntrlVal = $(selectors.packageBetControls).val();\n            if (cntrlVal) {\n                $('#resultstring').html(cntrlVal.split('\\n').filter(x => x.trim().length > 0).length);  //кол-во строк\n                $('#resultsimbols').html(cntrlVal.length);  //кол-во символов\n\n                if (cntrlVal.length > 0) {\n                    $('#superexpress-batch-bet-reset').removeClass('disabled');\n                } else {\n                    $('#superexpress-batch-bet-reset').addClass('disabled');\n                }\n\n                let found = cntrlVal.match(/^\\d*/gm);\n                let total = found.reduce(function (total, amountString) {\n                    let amount = parseInt(amountString);\n                    amount = isNaN(amount) ? 0 : amount;\n                    return total + amount;\n                }, 0);\n                $('#sumBet').html(total);\n            }\n        },\n        /*dispatch custom event for matoma purpose*/\n        dispatchCustomSubmitEvent: function  (responseStatus = 'success') {\n            const eventId = responseStatus === 'success' ? 'd-i10-e9' : 'd-i10-e10';\n            document.dispatchEvent(new CustomEvent(\"mtmCustomEvent\", {\n                bubbles: true,\n                detail: {\n                    id: eventId,\n                    responseStatus: responseStatus\n                }\n            }));\n        }\n    };\n\n    var UIbinder = (function () {\n        var body = app.body;\n\n        function bindCurrent() {\n            //#region LOCAL\n\n            // Сбросить\n            body.on('click', selectors.local.resetBtn, function () {\n                $(selectors.local.errorPopup  + ':first').css( 'display', 'none');\n                resetChoice();\n                checkedInputsStateHandler.clearStorageForCurrentAccount();\n                calcForm();\n            });\n\n            // Случайный выбор\n            body.on('click', selectors.local.randomBtn, function () {\n                $(selectors.local.errorPopup  + ':first').css( 'display', 'none');\n                randomBtnClickHandler();\n                checkedInputsStateHandler.addAll();\n            });\n\n            body.on('click', selectors.local.notSelectedBtn, function () {\n                notSelectedPressed = !notSelectedPressed;\n                if (notSelectedPressed) {\n                    $(this).addClass('m-pressed');\n                }\n                else {\n                    $(this).removeClass('m-pressed');\n                }\n\n            });\n\n            // Подсказки в процентах\n            body.on('change', selectors.local.percentageHintCheckbox, function () {\n                showPercentageHint($(this).prop('checked'));\n            });\n\n            // выбор коэффициента\n            body.on('click', selectors.local.checkboxes, function () {\n                var input = $(this);\n                var id = input.data('id');\n                if (input.prop('checked')) {\n\n                    checkedInputsStateHandler.add(id);\n\n                    if (savedChoice.indexOf(id) < 0) {\n                        savedChoice.push(id);\n                    }\n\n                    var savedCount = 0;\n\n                    $(selectors.local.eventsRows).each(function () {\n\n                        if ($(this).find(selectors.local.checkboxes + ':checked').length > 0) {\n                            savedCount++;\n                        }\n                    });\n\n                    if (savedCount >= globalAppSettings.seCount) {\n                        $(selectors.local.notSelectedBtn).addClass('m-disabled');\n                    }\n                    else if (savedCount > 0) {\n                        $(selectors.local.notSelectedBtn).removeClass('m-disabled');\n                    }\n\n                } else {\n\n                    checkedInputsStateHandler.remove(id);\n\n                    var index = savedChoice.indexOf(id);\n                    if (index > -1) {\n                        savedChoice.splice(index, 1);\n                    }\n\n                    savedCount = 0;\n\n                    $(selectors.local.eventsRows).each(function () {\n\n                        if ($(this).find(selectors.local.checkboxes + ':checked').length > 0) {\n                            savedCount++;\n                        }\n                    });\n\n                    if (savedCount < globalAppSettings.seCount) {\n                        $(selectors.local.notSelectedBtn).removeClass('m-disabled');\n                    }\n\n                    if (savedCount === 0) {\n                        $(selectors.local.notSelectedBtn).addClass('m-disabled');\n                    }\n                }\n\n                calcForm();\n                checkInputAndTooltip();\n            });\n\n            // ввод суммы ставки\n            body.on('focus', selectors.local.betSumInput, function () {\n                $(this).select();\n            });\n            body.on('keypress', selectors.local.betSumInput, function (e) {\n                if (app.inputIsInteger(e) === false)\n                    return false;\n            });\n            body.on('keyup', selectors.local.betSumInput, function () {\n                if(!$(this).val().trim()) {\n                    $(selectors.local.errorPopup  + ':first').css( 'display', 'none');\n                    return;\n                }\n                checkInputAndTooltip();\n                var val = app.stringToNumber($(this).val());\n\n                validateForm();\n                $(this).val(app.numberToString(val));\n            });\n\n            // выбор валюты\n            body.on('change', selectors.local.currencySelect, function () {\n                var newCurrency = $(this).val();\n\n                if (currency !== newCurrency) {\n                    var sumInput = $(selectors.local.betSumInput);\n                    var betSum = app.stringToNumber(sumInput.val());\n\n                    switch (newCurrency) {\n                        case 'Bonuses':\n                            sumInput.val(app.numberToString(betSum * window.globalAppSettings.bonusExchangeRate));\n                            break;\n                        case 'RUB':\n                            var newSum = Math.floor(betSum / window.globalAppSettings.bonusExchangeRate);\n                            sumInput.val(newSum > 1 ? app.numberToString(newSum) : 1);\n                            break;\n                    }\n\n                    currency = newCurrency;\n                    checkInputAndTooltip();\n                }\n            });\n\n            // Подсветить результаты (Last.DetailedBetItem)\n            body.on('change', selectors.local.activeStateSwitcher, function () {\n                highlightBetActiveStates(this);\n            });\n\n            //#endregion\n\n            //#region  CURRENT\n\n            // кнопка \"Текущий\" v2.0\n            body.on('click', selectors.seCurrentBetplace + ' ' + selectors.seShowBetForm, function () {\n                var number = $(selectors.seCurrentBetplace).data('number');\n\n                this.dispatchEvent(new CustomEvent(\"mtmCustomEvent\", { bubbles: true, detail: { id: 'd-i10-e2', triggerText: $(selectors.seShowBetForm).text() } }));\n\n                app.enableLoading();\n                Ajax.postJson(\"/baltsystem/CurrentDrawingForm\", {\n                    data: { number: number },\n                    success: function () {\n                        calcForm();\n                        checkedInputsStateHandler.load();\n                        app.disableLoading();\n\n                        showPercentageHint(state.isPercentageHintVisible);\n                        $(selectors.local.percentageHintCheckbox).prop('checked', state.isPercentageHintVisible);\n                    }\n                });\n                $(selectors.seBetFormControls).show();\n                $(selectors.seShowBetList).removeClass('active');\n                $(this).addClass('active');\n\n                return false;\n            });\n\n            function restartPackageBet() {\n                app.enableLoading();\n                var drawingNumber = $(selectors.seCurrentBetplace).data('number');\n                Ajax.postJson(\"/baltsystem/resetpackagebetform\", {\n                    data: { drawingNumber: drawingNumber },\n                    success: function () {\n                        app.disableLoading();\n                        actions.recalculatePackageBet();\n                    }\n                });\n            }\n\n            body.on('click', selectors.seCurrentBetplace + ' ' + selectors.seShowPackageForm, function () {\n                restartPackageBet();\n            });\n\n\n            body.on('click', selectors.seCurrentBetplace + ' ' + selectors.packageBetConfirm, function () {\n                app.enableLoading();\n                Ajax.postJson(\"/baltsystem/confirmpackagebet\", {\n                    success: function () {\n                        app.disableLoading();\n                    }\n                })\n            });\n\n            body.on('click', selectors.seCurrentBetplace + ' ' + '.betpackage-help-trigger', function () {\n                var helpEelement = $(selectors.seCurrentBetplace + ' ' + '#se-help_batch_main');\n                var subelements = helpEelement.children('.superexpress-batch-bet__help-body');\n                if (subelements.length > 0) {\n                    subelements.each(function (index) {\n                        var subelement = $(subelements[index]);\n                        subelement.toggle();\n                    });\n                }\n            });\n\n            body.on('click', selectors.seCurrentBetplace + ' ' + '.superexpress-batch-bet__help-close-icon', function () {\n                $('.superexpress-batch-bet__help').toggle();\n            });\n\n            body.on('click', selectors.seCurrentBetplace + ' ' + selectors.packageBetReset, function () {\n                restartPackageBet();\n            });\n\n            body.on('click', selectors.seCurrentContent + ' ' + selectors.couponInfoToggle, function () {\n                var couponNode = $(this).closest('[data-coupon-number]');\n                var couponNumber = couponNode.attr('data-coupon-number');\n                var isExpanded = couponNode.is('[state-expanded]');\n                var betNode = couponNode.closest('[data-betnumber]');\n                var betNumber = betNode.data('betnumber');\n                var drawingNumber = $(selectors.seCurrentBetplace).data('number');\n                var ajaxUrl = (isExpanded) ? '/baltsystem/getbriefcouponinfo' : '/baltsystem/getdetailedcouponinfo';\n                app.enableLoading();\n                Ajax.postJson(ajaxUrl, {\n                    data: { drawingNumber: drawingNumber, betNumber: betNumber, couponNumber: couponNumber, isCurrent: true  },\n                    success: function () {\n                        app.disableLoading();\n                    }\n                });\n            });\n\n\n            // Expand/collapse bet in CurrentDrawingBetList v2.0\n            body.on('click', selectors.seCurrentContent + ' ' + selectors.seToggleBet, function () {\n                var betNode = $(this).closest('[data-betnumber]');\n                var isExpanded = betNode.is('[state-expanded]');\n                var betNumber = betNode.data('betnumber');\n\n                var isPackageBet = $(this).is(selectors.packageBetInfo);\n                var ajaxUrl = undefined;\n                var drawingNumber = $(selectors.seCurrentBetplace).data('number');\n                if (isPackageBet) {\n                    ajaxUrl = (isExpanded) ? \"/baltsystem/CurrentDrawingBet\" : \"/baltsystem/getcurrentdrawingdetailedpackagebet\";\n                }\n                else {\n                    ajaxUrl = (isExpanded) ? \"/baltsystem/CurrentDrawingBet\" : \"/baltsystem/CurrentDrawingDetailedBet\";\n                }\n\n                app.enableLoading();\n                Ajax.postJson(ajaxUrl, {\n                    data: { number: drawingNumber, betNumber: betNumber },\n                    success: function () {\n                        app.disableLoading();\n                    }\n                });\n                return false;\n            });\n\n            body.on('click', selectors.packageBetStatusContainer + ' ' + selectors.packageBetPreviewToggle, function () {\n                var couponNode = $(this).closest('[data-preview-packagebet-coupon]');\n                var couponNumber = couponNode.attr('data-preview-packagebet-coupon');\n                var isExpanded = couponNode.is('[state-expanded]');\n                var ajaxUrl = (isExpanded) ? \"/baltsystem/getcouponbriefinfo\" : \"/baltsystem/getcoupondetailedinfo\";\n                app.enableLoading();\n                Ajax.postJson(ajaxUrl,\n                    {\n                        data: { couponId: couponNumber },\n                        success: function () { app.disableLoading(); }\n                    });\n            });\n\n            // отправить ставку\n            body.on('click', selectors.seSendBet, function () {\n                if (!validateForm())\n                    return false;\n                var formResults = getFormResults();\n                var drawingNumber = $(selectors.seCurrentBetplace).data('number');\n                var drawingTitle = $(selectors.seCurrentBetplace).data('title');\n                if (currency === 'Bonuses') {\n                    formResults.sum = Math.round(formResults.sum / window.globalAppSettings.bonusExchangeRate);\n                }\n\n                app.enableLoading();\n                Ajax.postJson(\"/baltsystem/SubmitBet\", {\n                    data: { number: drawingNumber, moneyValue: formResults.sum, coefs: formResults.coefs, currency: currency },\n                    success: function (data) {\n                        var message = (data.result) ? getResultMessage('success', window.Localization.getString('Scripts_Shared_Modules.Superexpress_31', 'Ваше пари успешно принято.')) : getResultMessage('error', data.errorMessage);\n                        var messageWin = new app.ModalWindow({\n                            content: message,\n                            title: drawingTitle,\n                        });\n                        if (data.result) {\n                            actions.dispatchCustomSubmitEvent()\n\n                            Ajax.getJson(\"/baltsystem/GetViewSet\", {\n                                data: { number: drawingNumber },\n                                success: function () {\n                                    currency = 'RUB';\n                                    calcForm();\n                                    messageWin.show();\n                                    app.disableLoading();\n                                    CustomSelect.init([selectors.local.currencySelect]);\n                                    checkedInputsStateHandler.clearStorageForCurrentAccount();\n                                    const updateSuperexpressControlsBehaviour = new CustomEvent('triggerSuperexpressPagerBehaviour', {\n                                        bubbles: true,\n                                    });\n                                    document.dispatchEvent(updateSuperexpressControlsBehaviour);\n\n                                }\n                            });\n                        }\n                        else {\n                            const RESPONSE_STATUS = 'error';\n                            actions.dispatchCustomSubmitEvent(RESPONSE_STATUS)\n                            messageWin.show();\n                            app.disableLoading();\n                        }\n                    }\n                });\n                return false;\n            });\n\n            body.on('click', selectors.showFileTab, function () {\n                $(this).addClass('m-active');\n                $(selectors.showTextTab).removeClass('m-active');\n                $('#fileUploadArea').show();\n                $('#textUploadArea').hide();\n            });\n\n            body.on('click', selectors.showTextTab, function () {\n                $(this).addClass('m-active');\n                $(selectors.showFileTab).removeClass('m-active');\n                $('#fileUploadArea').hide();\n                $('#textUploadArea').show();\n            });\n\n            body.on('input', selectors.packageBetControls, function () {\n                actions.recalculatePackageBet();\n            });\n\n            body.on('click', selectors.packageBetClear, function () {\n                $(selectors.packageBetControls).val('');\n                $(this).addClass('disabled');\n            });\n            //#endregion -- CURRENT --\n        }\n\n        function bindLast() {\n            // кнопка \"Результаты\" v2.0\n            body.on('click', selectors.seLastBetplace + ' ' + selectors.seShowBetForm, function (e) {\n                this.dispatchEvent(new CustomEvent(\"mtmCustomEvent\", { bubbles: true, detail: { id: 'd-i10-e2', triggerText: $(selectors.seShowBetForm).text() } }));\n\n                var number = $(selectors.seLastBetplace).data('number');\n                app.enableLoading();\n                Ajax.postJson(\"/baltsystem/DrawingResult\", {\n                    data: { number: number },\n                    success: function () {\n                        app.disableLoading();\n                    }\n                });\n                $(selectors.seShowBetList).removeClass('active');\n                $(this).addClass('active');\n                return false;\n            });\n\n            body.on('click', selectors.seLastContent + ' ' + selectors.couponInfoToggle, function () {\n                var couponNode = $(this).closest('[data-coupon-number]');\n                var couponNumber = couponNode.attr('data-coupon-number');\n                var isExpanded = couponNode.is('[state-expanded]');\n                var betNode = couponNode.closest('[data-betnumber]');\n                var betNumber = betNode.data('betnumber');\n                var drawingNumber = $(selectors.seLastBetplace).data('number');\n                var ajaxUrl = (isExpanded) ? '/baltsystem/getbriefcouponinfo' : '/baltsystem/getdetailedcouponinfo';\n                app.enableLoading();\n                Ajax.postJson(ajaxUrl, {\n                    data: { drawingNumber: drawingNumber, betNumber: betNumber, couponNumber: couponNumber, isCurrent: false },\n                    success: function () {\n                        app.disableLoading();\n                    }\n                });\n            });\n\n            // Expand/collapse bet in LastDrawingBetList v2.0\n            body.on('click', selectors.seLastContent + ' ' + selectors.seToggleBet, function () {\n                var betNode = $(this).closest('[data-betnumber]');\n                var isExpanded = betNode.is('[state-expanded]');\n                var betNumber = betNode.data('betnumber');\n                var drawingNumber = $(selectors.seLastBetplace).data('number');\n                var isPackageBet = $(this).is(selectors.packageBetInfo);\n                var selectedVariantCount = isPackageBet ? parseInt($('[selected-variant-count]').attr('selected-variant-count')) : 0;\n                var ajaxUrl = undefined;\n                if (isPackageBet) {\n                    ajaxUrl = (isExpanded) ? \"/baltsystem/DrawingBet\" : \"/baltsystem/getlastdrawingdetailedpackagebet\";\n                }\n                else {\n                    ajaxUrl = (isExpanded) ? \"/baltsystem/DrawingBet\" : \"/baltsystem/DrawingDetailedBet\";\n                }\n\n\n                app.enableLoading();\n                Ajax.postJson(ajaxUrl, {\n                    data: { number: drawingNumber, betNumber: betNumber, selectedvariantcount: selectedVariantCount },\n                    success: function () {\n                        SPA.updatePageLinks();\n                        app.disableLoading();\n                    }\n                });\n                return false;\n            });\n\n            // Подсветить результаты (Last.DetailedBetItem)\n            body.on('change', selectors.local.activeStateSwitcher, function () {\n                highlightBetActiveStates(this);\n            });\n\n            //#endregion -- LAST --\n        }\n\n        function unBindCurrent() {\n            //LOCAL\n            body.off('click', selectors.local.resetBtn)\n                .off('click', selectors.local.randomBtn)\n                .off('change', selectors.local.percentageHintCheckbox)\n                .off('click', selectors.local.checkboxes)\n                .off('focus', selectors.local.betSumInput)\n                .off('keypress', selectors.local.betSumInput)\n                .off('keyup', selectors.local.betSumInput)\n                .off('change', selectors.local.activeStateSwitcher)\n                .off('click', selectors.seCurrentBetplace + ' ' + selectors.seShowBetForm)\n                .off('click', selectors.seCurrentBetplace + ' ' + selectors.seShowBetList)\n                .off('click', selectors.seCurrentContent + ' ' + selectors.seToggleBet)\n                .off('click', selectors.seCurrentContent + ' ' + selectors.sePaginationLink)\n                .off('keypress', selectors.seCurrentContent + ' ' + selectors.sePaginationInput)\n                .off('click', selectors.seSendBet);\n        }\n\n        function unBindLast() {\n            //LAST\n            app.body\n                .off('click', selectors.seLastBetplace + ' ' + selectors.seShowBetForm)\n                .off('click', selectors.seLastBetplace + ' ' + selectors.seShowBetList)\n                .off('click', selectors.seLastContent + ' ' + selectors.seToggleBet)\n                .off('click', selectors.seLastContent + ' ' + selectors.seShowBetsByVariantCount)\n                .off('click', selectors.seLastContent + ' ' + selectors.sePaginationLink)\n                .off('keypress', selectors.seLastContent + ' ' + selectors.sePaginationInput)\n                .off('change', selectors.local.activeStateSwitcher);\n        }\n\n        return {\n            bind: {\n                current: function () {\n                    unBindCurrent();\n                    bindCurrent();\n                },\n                last: function () {\n                    unBindLast();\n                    bindLast();\n                },\n                all: function () {\n                    return false;\n                }\n            },\n            unBind: {\n                current: unBindCurrent,\n                last: unBindLast,\n                all: function () {\n                    return false;\n                }\n            }\n        }\n\n    }());\n\n    //todo:'superexpressCheckedInputs' - переписать это порно superexpressData то сериализованный, то нет объект, суется в одну переменную WHYYYYYY??? и так везде, выделить в отдельные методы\n    var checkedInputsStateHandler = (function () {\n        var ids = [];\n\n        function save() {\n            var accountId = sessionStorage.getItem('accountId');\n            var superexpressData = sessionStorage.getItem('superexpressCheckedInputs') || null;\n\n            if (superexpressData) {\n                superexpressData = JSON.parse(superexpressData);\n                if (superexpressData == null) {\n                    superexpressData = {};\n                }\n            } else {\n                superexpressData = {};\n            }\n\n            superexpressData[accountId] = ids;\n\n            sessionStorage.setItem('superexpressCheckedInputs', JSON.stringify(superexpressData));\n        }\n\n        function load() {\n            var accountId = sessionStorage.getItem('accountId');\n            var superexpressCheckedInputs = sessionStorage.getItem('superexpressCheckedInputs');\n\n            if (superexpressCheckedInputs) {\n                superexpressCheckedInputs = JSON.parse(superexpressCheckedInputs);\n                if (superexpressCheckedInputs != null) {\n                    if (superexpressCheckedInputs[accountId]) {\n                        ids = superexpressCheckedInputs[accountId];\n\n                        if (accountId !== 'unauthorized') {\n                            superexpressCheckedInputs['unauthorized'] = [];\n                            sessionStorage.setItem('superexpressCheckedInputs', JSON.stringify(superexpressCheckedInputs));\n                        }\n\n                    }\n                    else if (superexpressCheckedInputs['unauthorized']) {\n                        if (superexpressCheckedInputs['unauthorized'].length > 0) {\n                            superexpressCheckedInputs[accountId] = superexpressCheckedInputs['unauthorized'];\n                            superexpressCheckedInputs['unauthorized'] = [];\n\n                            sessionStorage.setItem('superexpressCheckedInputs', JSON.stringify(superexpressCheckedInputs));\n\n                            ids = superexpressCheckedInputs[accountId];\n                        }\n                    }\n                }\n            }\n\n\n            setChecked();\n        }\n\n        function clearStorageForCurrentAccount() {\n            var accountId = sessionStorage.getItem('accountId');\n            var superexpressCheckedInputs = sessionStorage.getItem('superexpressCheckedInputs');\n\n            if (superexpressCheckedInputs) {\n                superexpressCheckedInputs = JSON.parse(superexpressCheckedInputs);\n                if (superexpressCheckedInputs) {\n                    superexpressCheckedInputs[accountId] = [];\n                    delete superexpressCheckedInputs[accountId];\n                }\n            }\n\n            ids = [];\n\n            sessionStorage.setItem('superexpressCheckedInputs', JSON.stringify(superexpressCheckedInputs));\n        }\n\n        function setChecked() {\n            var checkboxes = $(selectors.local.checkboxes);\n            for (var i = 0; i < ids.length; i++) {\n                checkboxes.filter('[data-id=\"' + ids[i] + '\"]').prop('checked', true);\n            }\n\n            calcForm();\n        }\n\n        return {\n            load: function () {\n                load();\n            },\n            add: function (id) {\n                if (ids.indexOf(id) < 0) {\n                    ids.push(id);\n                    save();\n                }\n            },\n            remove: function (id) {\n                var index = ids.indexOf(id);\n\n                if (index > -1) {\n                    ids.splice(index, 1);\n                    save();\n                }\n            },\n            addAll: function () {\n                var inputs = [];\n\n                $(selectors.local.checkboxes).filter(':checked').prop('checked', true).each(function () {\n                    inputs.push($(this).data('id'));\n                });\n\n                ids = inputs;\n\n                save();\n            },\n            clearStorageForCurrentAccount: clearStorageForCurrentAccount\n        }\n    }());\n\n    var showPercentageHint = function (newState) {\n        if (newState === true) {\n            $(selectors.local.probabilityPercentsVals).removeClass('hidden');\n            $(selectors.local.poolDistVals).removeClass('hidden');\n        } else {\n            $(selectors.local.probabilityPercentsVals).addClass('hidden');\n            $(selectors.local.poolDistVals).addClass('hidden');\n        }\n        state.isPercentageHintVisible = newState;\n    };\n\n    var randomBtnClickHandler = function () {\n\n        if (!notSelectedPressed) {\n            resetChoice();\n        }\n        else {\n            partialReset();\n        }\n        randomChoice();\n        calcForm();\n    };\n\n    var resetChoice = function () {\n        $(selectors.local.checkboxes).prop('checked', false);\n        savedChoice = [];\n        notSelectedPressed = false;\n        $(selectors.local.notSelectedBtn).removeClass('m-pressed');\n        $(selectors.local.notSelectedBtn).addClass('m-disabled');\n    };\n\n    var partialReset = function () {\n        $(selectors.local.eventsRows).each(function () {\n\n            checkboxes = $(this).find(selectors.local.checkboxes);\n\n            checkboxes.each(function () {\n\n                id = $(this).data('id');\n\n                if (savedChoice.indexOf(id) < 0) {\n                    $(this).prop('checked', false);\n                }\n\n            });\n        });\n    };\n\n\n    var randomChoice = function () {\n        const lowerBounds = [0, 40, 60];\n        var rand, checkboxes;\n\n        $(selectors.local.eventsRows).each(function () {\n\n            if ($(this).find(selectors.local.checkboxes + ':checked').length === 0) {\n                rand = Math.ceil((Math.random() * 100));\n                checkboxes = $(this).find(selectors.local.checkboxes);\n\n                for (var i = lowerBounds.length - 1; i >= 0; i--) {\n                    if (rand >= lowerBounds[i]) {\n                        checkboxes.eq(i).prop('checked', true);\n                        var id = checkboxes.eq(i).data('id');\n                        if (!notSelectedPressed && savedChoice.indexOf(id) < 0) { savedChoice.push(id); }\n                        break;\n                    }\n                }\n            }\n        });\n\n        if (!notSelectedPressed) { $(selectors.local.notSelectedBtn).addClass('m-disabled'); }\n    };\n\n    var calcForm = function () {\n        var checkedOptionsCnt = 1,\n            minBetSum = globalAppSettings.minSuperexpressBetSum || 30,\n            betSumInput = $(selectors.local.betSumInput),\n            checkedCnt = 0;\n\n        $(selectors.local.eventsRows).each(function () {\n            checkedCtn = $(this).find(selectors.local.checkboxes + ':checked').length;\n            checkedOptionsCnt = checkedOptionsCnt * checkedCtn;\n        });\n\n        minBetSum = checkedOptionsCnt * minBetSum;\n\n        $(selectors.local.optionsCnt).html(checkedOptionsCnt);\n        $(selectors.local.minBetSum).html(minBetSum);\n\n\n        var localMinBetSum = minBetSum;\n        if (currency === 'Bonuses') {\n            localMinBetSum *= window.globalAppSettings.bonusExchangeRate;\n        }\n\n        betSumInput.val(app.numberToString(localMinBetSum));\n\n        validateForm();\n    };\n\n    var isBonusBet = function () {\n        return currency === 'Bonuses';\n    };\n\n    var calcMinBetSum = function () {\n        var minBetSum = parseInt($(selectors.local.minBetSum).html());\n        return isBonusBet() ? minBetSum * window.globalAppSettings.bonusExchangeRate : minBetSum;\n    }\n\n    var getMinBetSumErrorText = function () {\n        return 'Минимальная сумма пари составляет ' + calcMinBetSum() + (isBonusBet() ? ' бонусов' : ' руб.');\n    };\n\n    var checkInputAndTooltip = function () {\n        if(validateSum()) {\n            $(selectors.local.errorPopup  + ':first').css( 'display', 'none');\n        } else {\n            $(selectors.local.errorPopup + ':first').css( 'display', 'block');\n            $(selectors.local.errorPopup + ':first').attr('bb-tool', getMinBetSumErrorText());\n        }\n    };\n\n    var validateSum = function () {\n        var betSum = app.stringToNumber($(selectors.local.betSumInput).val());\n        return betSum >= calcMinBetSum();\n    };\n\n    var validateForm = function () {\n        var result = validateSum();\n        if(result) {\n            $(selectors.local.eventsRows).each(function () {\n                if ($(this).find(selectors.local.checkboxes + ':checked').length === 0) {\n                    result = false;\n                }\n            });\n        }\n        sendBtnState(result);\n        return result;\n    };\n\n    var getFormResults = function () {\n        var coefs = [];\n\n        $(selectors.local.checkboxes).each(function () {\n            if ($(this).prop('checked')) {\n                var id = $(this).data('id');\n                var eventId = $(this).closest(selectors.local.eventsRows).data('eventid');\n                coefs.push({\n                    coefid: id,\n                    eventId: eventId\n                });\n            }\n        });\n\n        return {\n            'sum': app.stringToNumber($(selectors.local.betSumInput).val()),\n            'coefs': coefs,\n        };\n    };\n\n    var highlightBetActiveStates = function (switchNode) {\n        switchNode = $(switchNode);\n        var activeResultNodes = switchNode.closest(selectors.local.detailedBetLast).find(selectors.local.stateActiveResult);\n\n        if (switchNode.prop('checked') === true) {\n\n            let toActivate = activeResultNodes.filter('[data-isactive=True]');\n            let toDeactivate = activeResultNodes.filter('[data-isactive=False]');\n\n            toActivate.addClass('active');\n            toDeactivate.addClass('inactive');\n        } else {\n            activeResultNodes.removeClass('active');\n            activeResultNodes.removeClass('inactive');\n        }\n    };\n\n    var sendBtnState = function (newState) {\n        if (newState === true)\n            $(selectors.seSendBet).removeClass('m-disabled');\n        else\n            $(selectors.seSendBet).addClass('m-disabled');\n    };\n\n\n\n    return {\n        init: init,\n        dispose: dispose,\n        getFormResults: getFormResults,\n        highlightBetActiveStates: highlightBetActiveStates,\n        actions: actions\n    };\n}());","/* TODO УДАЛИТЬ ПОСЛЕ НАСТРОЙКИ УНИФИЦИРОВАННОЙ ПАГИНАЦИИ */\n(function () {\n    var selectors = {\n        current: '[js-node=\"pagination__current\"]',\n        input: '[js-node=\"pagination__current-input\"]'\n    };\n\n    var bindUI = function () {\n        $(document).on('click', selectors.current, function () {\n            showInput($(this).parent());\n        });\n\n        $(document).on('keypress', selectors.input, function (e) {\n            if (app.inputIsInteger(e) === false) {\n                return false;\n            }\n        })\n\n        $(document).on('blur', selectors.input, function () {\n            hideInput($(this).parent());\n        });\n    };\n\n    var showInput = function (parent) {\n        if (parent) {\n            parent.addClass('visible-input');\n            parent.find(selectors.input).select();\n        }\n    };\n\n    var hideInput = function (parent) {\n        if (parent) {\n            parent.removeClass('visible-input');\n        }\n    };\n\n    $(function () {\n        bindUI();\n    });\n}());","window.TimeZone = (function () {\n\n    const selectors = {\n        timeZone: '#tz-select',\n        authorizeLocalDateTime: '.LoginLocalDateTime'\n    };\n\n    return {\n        init: function () {\n            this.unbindUI();\n            this.bindUI();\n        },\n\n        bindUI: function () {\n            $(document).on('change.timezone', selectors.timeZone, function () {\n                Ajax.postJson($(selectors.timeZone).data(\"ajaxurl\"), {\n                    data: { tzId: $(this).val() }\n                });\n                return false;\n            });\n\n            $(document).ready(function () {\n                $(selectors.authorizeLocalDateTime).val(getLocalDateTimeOffsetString());\n            });\n        },\n        unbindUI: function () {\n            $(document).off('change.timezone', selectors.timeZone);\n        }\n    }\n\n    function getLocalDateTimeOffsetString() {\n        var date = new Date();\n        return date.toISOString();\n    }\n}());\n","window.Tooltip = (function () {\n    const ERROR_DELAY = 3000;\n    var element, content, container, innerContainer;\n    var delayTimeout,\n        defaultDelay = 2000;\n    var isVisible = false;\n\n    const MAIN_ATTR = 'bb-tool',\n        DELAY_ATTR = 'bb-tool-delay',\n        TYPE_ATTR = 'bb-tool-type',\n        TEXT_SELECTOR_ATTR = 'bb-tool-text-selector';\n\n    var Tooltip = function () {\n        container = $('<div/>', {\n            class: 'tooltip',\n        });\n\n        innerContainer = $('<div/>', {\n            class: 'tooltip__inner',\n        }).appendTo(container);\n\n        container.appendTo('body');\n\n        bindUI();\n    };\n\n    var bindUI = function () {\n        let attrSelector = '[' + MAIN_ATTR + ']';\n\n        $(document).on('mouseenter', attrSelector, function () {\n            element = $(this);\n            mouseenterHandler();\n        });\n\n        $(document).on('mouseleave', attrSelector, function () {\n            hide();\n            if (delayTimeout) {\n                clearTimeout(delayTimeout);\n            }\n        });\n    };\n\n    var mouseenterHandler = function () {\n        var delay;\n\n        if (isVisible) {\n            hide();\n        }\n\n        content = element[0].hasAttribute(TEXT_SELECTOR_ATTR)\n            ? $($(element).attr(TEXT_SELECTOR_ATTR)).html()\n            : element.attr(MAIN_ATTR);\n        if (content === '') {\n            return;\n        }\n\n        if (element[0].hasAttribute(DELAY_ATTR)) {\n            delay = parseInt(element.attr(DELAY_ATTR));\n\n            if (delay !== 0) {\n                delayTimeout = setTimeout(show, delay);\n            } else {\n                show();\n            }\n        } else {\n            show();\n        }\n\n        // dispatch event for Matomo Analytics\n        document.dispatchEvent(\n            new CustomEvent('showTooltip', {\n                detail: {\n                    data: content,\n                    elem: element,\n                },\n            })\n        );\n\n        element.one('remove', hide);\n    };\n\n    var afterContentInsertedAction = function () {\n        innerContainer.height('auto');\n\n        container.removeClass('error attention learning success');\n\n        switch (element.attr(TYPE_ATTR)) {\n            case 'error':\n                container.addClass('error');\n                break;\n            case 'attention':\n                container.addClass('attention');\n                break;\n            case 'learning':\n                container.addClass('learning');\n                break;\n            case 'success':\n                container.addClass('success');\n                break;\n            case 'wide':\n                container.addClass('m-wide');\n                break;\n            default:\n                break;\n        }\n        container.removeClass('left right top bottom height-limited');\n        setPosition();\n        isVisible = true;\n    };\n\n    var show = function () {\n        innerContainer.html(content).promise().done(afterContentInsertedAction);\n    };\n\n    var setPosition = function () {\n        var elementOffset = element.offset(),\n            elementWidth = element.outerWidth(),\n            elementHeight = element.outerHeight(),\n            tooltipOffset = {\n                left: 0,\n                top: 0,\n            },\n            tooltipWidth = container.outerWidth(),\n            tooltipHeight = container.outerHeight(),\n            windowWidth = $(window).width(),\n            windowHeight = $(window).height(),\n            positionClassname = 'top';\n\n        // по умолчанию отображается сверху от элемента\n        tooltipOffset.left =\n            elementOffset.left + elementWidth / 2 - tooltipWidth / 2;\n        tooltipOffset.top = elementOffset.top - tooltipHeight - 10;\n\n        // если выходит за верхнюю границу окна - снизу\n        if (tooltipOffset.top < 0) {\n            tooltipOffset.top = elementOffset.top + elementHeight + 10;\n            positionClassname = 'bottom';\n\n            // если и так выходит за границу окна - отображаем сверху, и обрезаем часть содержимого\n            // TODO то же самое для случая, когда элемент отображается в верхней части страницы (тултип должен так же обрезаться и располагаться снизу)\n            if (tooltipOffset.top + tooltipHeight > windowHeight) {\n                var maxHeight = elementOffset.top - elementHeight - 40;\n\n                innerContainer.height(maxHeight);\n\n                tooltipOffset.top = 10;\n                positionClassname = 'top height-limited';\n            }\n        }\n\n        // если выходит за правую границу окна - слева\n        if (tooltipOffset.left + tooltipWidth > windowWidth) {\n            tooltipOffset.left = elementOffset.left - tooltipWidth - 10;\n            tooltipOffset.top =\n                elementOffset.top + elementHeight / 2 - tooltipHeight / 2;\n            positionClassname = 'left';\n        }\n\n        // если выходит за левую границу окна - справа\n        if (tooltipOffset.left < 0) {\n            tooltipOffset.left = elementOffset.left + elementWidth + 10;\n            tooltipOffset.top =\n                elementOffset.top + elementHeight / 2 - tooltipHeight / 2;\n            positionClassname = 'right';\n        }\n\n        container.show();\n\n        container\n            .css({\n                left: tooltipOffset.left,\n                top: tooltipOffset.top,\n            })\n            .off('transitionend')\n            .addClass(positionClassname + ' visible');\n    };\n\n    var hide = function () {\n        isVisible = false;\n\n        container.removeClass('visible').on('transitionend', function () {\n            container.hide();\n            container.removeClass('left right top bottom');\n        });\n\n        if (typeof element !== 'undefined') {\n            element.off('remove');\n        }\n        $(document).off('touchstart.hideTooltip');\n    };\n\n    var update = function (elem) {\n        if (elem) mouseenterHandler(elem);\n    };\n\n    function destroyConcrete(node) {\n        node.removeAttr(MAIN_ATTR).removeAttr(TYPE_ATTR);\n        hide();\n    }\n\n    function showNode(node, message, type, persistent) {\n        if (node === undefined) return false;\n\n        if (!(node instanceof jQuery)) {\n            node = $(node);\n        }\n\n        node.attr(MAIN_ATTR, message).attr(TYPE_ATTR, type);\n        element = node;\n        mouseenterHandler(node);\n        if (persistent) return true;\n        container.addClass('jump').one('animationend', function (e) {\n            container.removeClass('jump');\n            var destroyTOID = setTimeout(function () {\n                destroyConcrete(node);\n            }, ERROR_DELAY);\n            node.one('mouseleave', function () {\n                destroyConcrete(node);\n                clearTimeout(destroyTOID);\n            });\n        });\n        return true;\n    }\n\n    function errorNode(node, message, persistent) {\n        return showNode(node, message, 'error', persistent);\n    }\n\n    function successNode(node, message, persistent) {\n        return showNode(node, message, 'success', persistent);\n    }\n\n    function updateOpenedTooltipText(node, message) {\n        if (node === undefined || !isVisible || node[0] !== element[0]) return;\n        innerContainer.html(message).promise().done(afterContentInsertedAction);\n    }\n\n    $(function () {\n        Tooltip();\n    });\n\n    return {\n        update: update,\n        hide: hide,\n        errorNode: errorNode,\n        successNode: successNode,\n        updateOpenedTooltipText: updateOpenedTooltipText,\n    };\n})();\n","window.TooltipEventInfo = (function () {\n    var container, innerContainer, tooltipClass;\n\n    var TooltipEventInfo = function () {\n        container = $('<div/>', {\n            class: 'tooltip--event tooltip event-tooltip',\n        });\n\n        innerContainer = $('<div/>', {\n            class: 'tooltip__inner event-tooltip__inner',\n        }).appendTo(container);\n\n        container.appendTo('body');\n\n        isMobile = globalAppSettings.isMobileDevice;\n\n        bindUI();\n    };\n\n    var bindUI = function () {\n        $(document).on('mouseenter', '[tooltip-event-info]', function () {\n            mouseenterHandler($(this));\n        });\n\n        if (isMobile) {\n            $(document).on('touchstart', function () {\n                hide();\n            });\n        } else {\n            $(document).on('mouseleave', '[tooltip-event-info]', function () {\n                hide($(this));\n            });\n        }\n    };\n\n    var mouseenterHandler = function (elem) {\n        var data = {\n            id: elem.attr('data-id'),\n            date: elem.attr('data-date'),\n            tv: elem.attr('data-tv'),\n            title: elem.attr('data-title'),\n            league: elem.attr('data-league'),\n            comment: elem.attr('data-comment'),\n        };\n\n        tooltipClass = elem.attr('tooltip-class');\n\n        if (tooltipClass) {\n            container.addClass(tooltipClass);\n        }\n\n        var html = [\n            '<div class=\"event-tooltip__header\">',\n            '<span class=\"event-tooltip__id\">' + data.id + '</span>',\n            '<span class=\"event-tooltip__date\">' + data.date + '</span>',\n            data.tv\n                ? '<span class=\"event-tooltip__tv\">' +\n                  data.tv +\n                  '</span><div class=\"icon-tv-tooltip\"></div>'\n                : '',\n            '</div>',\n            '<div class=\"event-tooltip__title\">' + data.title + '</div>',\n            data.league\n                ? '<div class =\"event-tooltip__league\">' +\n                  data.league +\n                  '</div>'\n                : '',\n            data.comment\n                ? '<div class =\"event-tooltip__comment\">' +\n                  data.comment.trim() +\n                  '</div>'\n                : '',\n        ].join('\\n');\n\n        innerContainer\n            .html(html)\n            .promise()\n            .done(function () {\n                innerContainer.height('auto');\n                setPosition(elem);\n            });\n\n        // dispatch event for Matomo Analytics\n        document.dispatchEvent(\n            new CustomEvent('showEventTooltip', {\n                detail: {\n                    data,\n                    element: elem[0],\n                },\n            })\n        );\n\n        elem.on('remove', function () {\n            hide(elem);\n        });\n    };\n\n    var setPosition = function (element) {\n        var elementOffset = element.offset(),\n            elementWidth = element.outerWidth(),\n            tooltipOffset = {\n                left: 0,\n                top: 0,\n            },\n            tooltipWidth = container.outerWidth(),\n            tooltipHeight = container.outerHeight(),\n            positionClassname = 'top';\n\n        // по умолчанию отображается сверху от элемента\n        tooltipOffset.left = elementOffset.left + elementWidth - tooltipWidth;\n        tooltipOffset.top = elementOffset.top - tooltipHeight + 3;\n\n        container.show();\n\n        container\n            .css({\n                left: tooltipOffset.left,\n                top: tooltipOffset.top,\n            })\n            .off('transitionend')\n            .addClass(positionClassname + ' visible');\n    };\n\n    var hide = function (elem) {\n        if (elem) {\n            elem.off('remove');\n        }\n\n        if (tooltipClass) {\n            container.removeClass(tooltipClass);\n            tooltipClass = null;\n        }\n\n        container.removeClass('visible').on('transitionend', function () {\n            container.hide();\n            container.removeClass('left right top bottom');\n        });\n    };\n\n    var update = function (elem) {\n        if (elem) mouseenterHandler(elem);\n    };\n\n    $(function () {\n        TooltipEventInfo();\n    });\n\n    return {\n        update: update,\n        hide: hide,\n    };\n})();\n","window.TooltipEventScore = (function () {\n    const SCOREMAP = {\n        general: 'g',\n        detailed: 't',\n        points: 'p',\n        innings: 'i',\n        advant: 'a',\n        team1: 'f',\n        team2: 's',\n    };\n    const ATTR = 'tooltip-event-score';\n    const ATTR_CLASSNAME = 'tooltip-event-score-classname';\n\n    var container, innerContainer;\n\n    const isMobileDevice = window.globalAppSettings.isMobileDevice\n\n    var TooltipEventScore = function () {\n        container = $('<div/>', {\n            class: 'tooltip--event-score tooltip event-tooltip',\n        });\n\n        innerContainer = $('<div/>', {\n            class: 'tooltip__inner event-tooltip-score__inner',\n        }).appendTo(container);\n\n        container.appendTo('body');\n\n        !isMobileDevice && bindDesktopUI();\n        isMobileDevice && bindMobileUI();\n    };\n\n    var bindDesktopUI = function () {\n        $(document).on('mouseenter', '[' + ATTR + ']', function () {\n            tooltipTriggerHandler($(this));\n        });\n\n        $(document).on('mouseleave', '[' + ATTR + ']', function () {\n            hide($(this));\n        });\n    };\n\n    var bindMobileUI = function () {\n        const eventType = 'touchstart';\n        $(document).on(eventType, '[' + ATTR + ']', function () {\n            tooltipTriggerHandler($(this));\n        });\n    };\n\n    var tooltipTriggerHandler = function (elem) {\n        var data = elem.attr(ATTR);\n\n        if (!data) return;\n\n        container.addClass(elem.attr(ATTR_CLASSNAME) || '');\n\n        data = JSON.parse(data);\n\n        if (!data[SCOREMAP.general]) {\n            data[SCOREMAP.general] = {};\n        }\n\n        var html = [\n            '<div class=\"event-tooltip-score\">',\n            '<div class=\"event-tooltip-score__column\">',\n            '<div class=\"event-tooltip-score__header\"></div>',\n            '<div class=\"event-tooltip-score__team\">' +\n                window.Localization.getString(\n                    'Scripts_Shared_Modules.TooltipEventScore_32',\n                    'К1'\n                ) +\n                '</div>',\n            '<div class=\"event-tooltip-score__team\">' +\n                window.Localization.getString(\n                    'Scripts_Shared_Modules.TooltipEventScore_33',\n                    'К2'\n                ) +\n                '</div>',\n            '</div>',\n            '<div class=\"event-tooltip-score__column\">',\n            '<div class=\"event-tooltip-score__header\">' +\n                window.Localization.getString(\n                    'Scripts_Shared_Modules.TooltipEventScore_34',\n                    'ОБЩ'\n                ) +\n                '</div>',\n            '<div class=\"event-tooltip-score__value m-total\">' +\n                (data[SCOREMAP.general][SCOREMAP.team1] || '0') +\n                '</div>',\n            '<div class=\"event-tooltip-score__value m-total\">' +\n                (data[SCOREMAP.general][SCOREMAP.team2] || '0') +\n                '</div>',\n            '</div>',\n            '<div class=\"event-tooltip-score__columns-wrapper\">',\n            getDetailedScoreHtml(data),\n            getPointsHtml(data),\n            '</div>',\n            '</div>',\n        ].join('\\n');\n\n        innerContainer\n            .html(html)\n            .promise()\n            .done(function () {\n                innerContainer.height('auto');\n                setPosition(elem);\n            });\n\n        dispatchAnalyticsEvent(data, elem)\n\n        if(isMobileDevice) {\n            setTooltipVisibility(elem);\n            return;\n        }\n\n        elem.on('remove', function () {\n            hide(elem);\n        });\n    };\n\n    var getDetailedScoreHtml = function (data) {\n        var detailedScoreTableHtml = '';\n        if (!data[SCOREMAP.detailed] || data[SCOREMAP.detailed].length === 0)\n            return detailedScoreTableHtml;\n\n        for (i = 0; i <= data[SCOREMAP.detailed].length - 1; i++) {\n            detailedScoreTableHtml += [\n                '<div class=\"event-tooltip-score__column\">',\n                '<div class=\"event-tooltip-score__header\">' +\n                    (i + 1) +\n                    '</div>',\n                '<div class=\"event-tooltip-score__value\">' +\n                    data[SCOREMAP.detailed][i][SCOREMAP.team1] +\n                    '</div>',\n                '<div class=\"event-tooltip-score__value\">' +\n                    data[SCOREMAP.detailed][i][SCOREMAP.team2] +\n                    '</div>',\n                '</div>',\n            ].join('\\n');\n        }\n\n        return detailedScoreTableHtml;\n    };\n\n    var getPointsHtml = function (data) {\n        var pointsHtml = '';\n\n        if (\n            data[SCOREMAP.points] &&\n            data[SCOREMAP.points][SCOREMAP.team1] !== undefined &&\n            data[SCOREMAP.points][SCOREMAP.team2] !== undefined\n        ) {\n            pointsHtml = [\n                '<div class=\"event-tooltip-score__column m-current-score\">',\n                '<div class=\"event-tooltip-score__header\">' +\n                    window.Localization.getString(\n                        'Scripts_Shared_Modules.TooltipEventScore_35',\n                        'ОЧКИ'\n                    ) +\n                    '</div>',\n                '<div class=\"event-tooltip-score__value\">' +\n                    data[SCOREMAP.points][SCOREMAP.team1] +\n                    '</div>',\n                '<div class=\"event-tooltip-score__value\">' +\n                    data[SCOREMAP.points][SCOREMAP.team2] +\n                    '</div>',\n                '</div>',\n                '<div class=\"event-tooltip-score__column m-innings\">',\n                '<div class=\"event-tooltip-score__header\"></div>',\n                '<div class=\"event-tooltip-score__innings' +\n                    (data[SCOREMAP.innings] == 1 ? ' m-active' : '') +\n                    '\"></div>',\n                '<div class=\"event-tooltip-score__innings' +\n                    (data[SCOREMAP.innings] == 2 ? ' m-active' : '') +\n                    '\"></div>',\n                '</div>',\n            ].join('\\n');\n        } else if (data[SCOREMAP.advant] && data[SCOREMAP.advant] != 0) {\n            pointsHtml = [\n                '<div class=\"event-tooltip-score__column m-current-score\">',\n                '<div class=\"event-tooltip-score__header\">' +\n                    window.Localization.getString(\n                        'Scripts_Shared_Modules.TooltipEventScore_35',\n                        'ОЧКИ'\n                    ) +\n                    '</div>',\n                '<div class=\"event-tooltip-score__value\">' +\n                    (data[SCOREMAP.advant] == 1 ? 'A' : '40') +\n                    '</div>',\n                '<div class=\"event-tooltip-score__value\">' +\n                    (data[SCOREMAP.advant] == 2 ? 'A' : '40') +\n                    '</div>',\n                '</div>',\n                '<div class=\"event-tooltip-score__column m-innings\">',\n                '<div class=\"event-tooltip-score__header\"></div>',\n                '<div class=\"event-tooltip-score__innings' +\n                    (data[SCOREMAP.innings] == 1 ? ' m-active' : '') +\n                    '\"></div>',\n                '<div class=\"event-tooltip-score__innings' +\n                    (data[SCOREMAP.innings] == 2 ? ' m-active' : '') +\n                    '\"></div>',\n                '</div>',\n            ].join('\\n');\n        }\n\n        return pointsHtml;\n    };\n\n    var setPosition = function (element) {\n        var elementOffset = element.offset(),\n            elementWidth = element.outerWidth(),\n            tooltipOffset = {\n                left: 0,\n                top: 0,\n            },\n            tooltipWidth = container.outerWidth(),\n            tooltipHeight = container.outerHeight(),\n            positionClassname = 'top';\n\n        const Y_AXIS_MIN = 0,\n            PAGE_CONTENT_PADDING = 10;\n\n        // по умолчанию отображается сверху от элемента\n        tooltipOffset.left = elementOffset.left + elementWidth - tooltipWidth;\n        tooltipOffset.top = elementOffset.top - tooltipHeight;\n\n        container.show();\n\n        container\n            .css({\n                left: tooltipOffset.left < Y_AXIS_MIN ? PAGE_CONTENT_PADDING : tooltipOffset.left,\n                top: tooltipOffset.top,\n            })\n            .off('transitionend')\n            .addClass(positionClassname + ' visible');\n    };\n\n    var dispatchAnalyticsEvent = function (d, e) {\n        document.dispatchEvent(\n            new CustomEvent('showScoreTooltip', {\n                detail: {\n                    d,\n                    element: e[0],\n                },\n            })\n        );\n    }\n\n    var setTooltipVisibility = function (e) {\n        $(document).on('touchstart', function (eventObject) {\n            const isScoreTooltipArea = $('.tooltip--event-score').has(eventObject.target).length;\n            if(isScoreTooltipArea) return;\n            hide(e);\n            $(document).off('touchstart')\n            bindMobileUI();\n        });\n    }\n\n    var hide = function (elem) {\n        if (elem) {\n            elem.off('remove');\n        }\n\n        container.removeClass('visible').on('transitionend', function () {\n            container.hide();\n            container.removeClass('left right top bottom');\n        });\n    };\n\n    var update = function (elem) {\n        if (elem) tooltipTriggerHandler(elem);\n    };\n\n    $(function () {\n        TooltipEventScore();\n    });\n\n    return {\n        update: update,\n        hide: hide,\n    };\n})();\n","window.UpButton = (function () {\n   \n    const selectors = {\n        btnUp: '#go-top',\n        placeBtn: '.layout__body',\n        placeBtnMobile: '[data-mtm-section=\"mobile-layout\"]',\n    };\n\n    return {\n        init: function () {\n            this.renderBtn();\n            this.bindUI();\n        },\n        bindUI: function () {\n            var self = this;\n\n\n            $(window).on('scroll touchmove', function () {\n                self.scrollPageUp();\n            });\n            $(selectors.btnUp).click(function () {\n                $(selectors.btnUp).css('pointer-events', 'none');\n                self.scrollTopBtn();\n                setTimeout(function () {\n                    $(selectors.btnUp).css('pointer-events', '');\n                }, 2000);\n            });\n        },\n        htmlSvgIcon: function (filename, classname) {\n            return '<svg class=\"icon ' + classname + '\"><use xlink:href=\"/Content/cps/images/sprites/svg-icons.svg#' + filename + '\"></use></svg>';\n        },\n        renderBtn: function () {\n            $(selectors.placeBtn).append('<a href=\"#\" class=\"up-button m-close\" id=\"go-top\">' + this.htmlSvgIcon('arrow', 'up-button__icon') + '</a>');\n            $(selectors.placeBtnMobile).append('<a href=\"#\" class=\"up-button m-mobile m-close\" id=\"go-top\">' + this.htmlSvgIcon('arrow', 'up-button__icon') + '</a>');\n        },\n\n        scrollPageUp: function () {\n            if ($(window).scrollTop() <= \"250\") $(selectors.btnUp).addClass('m-close');\n            else $(selectors.btnUp).removeClass('m-close');\n        },\n\n        scrollTopBtn: function () {\n            $(\"html\").animate({ scrollTop: 0 }, 1000);\n        }\n    }\n}());","window.VerticalMenu = (function () {\n\n    var selectors = {\n        verticalMenu: '#vertical-menu',\n        itemsWrapper: '#vm-sports-filter-items'\n    };\n\n    return {\n        init: function () {\n            if (!globalAppSettings.isMobileDevice) {\n                this.createScrollbar();\n            }\n        },\n        dispose: function () {\n            this.removeScrollbar();\n        },\n        show: function () {\n            $(selectors.verticalMenu).removeClass('hidden');\n        },\n        hide: function () {\n            $(selectors.verticalMenu).addClass('hidden');\n        },\n        createScrollbar: function () {\n            var self = this;\n            self.scrollbar = new window.AwesomeScrollbar(selectors.itemsWrapper, 'm-sports-filter-scrollbar');\n        },\n        removeScrollbar: function () {\n            var self = this;\n            if (self.scrollbar)\n                self.scrollbar.destroy();\n        },\n        changeFavorites: function () {\n            $('.sports-filter__sports-icon.m-favorites').addClass('m-animated');\n            setTimeout(function () {\n                $('.sports-filter__sports-icon.m-favorites').removeClass('m-animated');\n            }, 400);\n        },\n    }\n}());","var app = window.app = (function () {\n    var body = $('#app').first();\n\n    return {\n        body: body,\n        init: function () {\n            this.AwesomeScrollbar = window.AwesomeScrollbar || {};\n            this.AwesomeHorizontalScrollbar = window.AwesomeHorizontalScrollbar || {};\n            this.Balance = window.Balance || { init: function () { } };\n            this.CurrentDatetime = window.CurrentDatetime || { init: function () { } };\n            this.CustomSelect = window.CustomSelect || {};\n            this.Favorites = window.Favorites || { init: function () { } };\n            this.MainNavigation = window.MainNavigation || { init: function () { } };\n            this.VerticalMenu = window.VerticalMenu || {};\n            this.ModalMarkets = window.ModalMarkets || {};\n            this.Broadcast = window.Broadcast || {};\n            this.ModalWindow = window.ModalWindow || {};\n            this.ModeTableLive = window.ModeTableLive || {};\n            this.ModeTablePrematch = window.ModeTablePrematch || {};\n            this.PageContent = window.PageContent || { init: function () { } };\n            this.SportsFilter = window.SportsFilter || {};\n            this.Tooltip = window.Tooltip || {};\n            this.Superexpress = window.Superexpress || {};\n            this.OpenEvent = window.OpenEvent || {};\n            this.ErrorHandler = window.ErrorHandler || {};\n            this.LogoutTimer = window.LogoutTimer || {};\n            this.Search = window.Search || {};\n            this.Multi = window.Multi || {};\n            this.TimeZone = window.TimeZone || { init: function () { } };\n\n            ////shared inits\n            this.MainNavigation.init();     // 8.5 ms -- first method + atr-selectors\n            this.CurrentDatetime.init();    // 1.1 ms\n            this.Favorites.init();          // 0.6 ms\n            this.PageContent.init();        // 4.0 ms --awesome sb\n            this.Balance.init();            // 1.0 ms\n            this.TimeZone.init();\n\n            // disable drag and drop on links (default browsers feature)\n            //TODO: в цуписе включить\n            //$(document).on('dragstart', 'a', () => false);\n\n            body.addClass('m-straight-visible');\n        },\n        //TODO: в utils\n        bindModelHtml: function (obj, property, domElement) {\n            if (obj.hasOwnProperty('prevValues') === false)\n                obj.prevValues = {};\n\n            obj.prevValues[property] = null;\n\n            Object.defineProperty(obj, property, {\n                get: function () {\n                    return domElement.html();\n                },\n                set: function (newValue) {\n                    if (obj.prevValues[property] !== newValue) {\n                        obj.prevValues[property] = newValue;\n                        domElement.html(newValue);\n                    }\n                },\n                configurable: true\n            });\n        },\n        //TODO: в utils\n        inputIsInteger: function (e) {\n            return !(e.which !== 8 && e.which !== 0 && (e.which < 48 || e.which > 57));\n        },\n        //TODO: в utils\n        numberToString: function (num) {\n            return num ? num.toString().replace(/(\\d)(?=(\\d\\d\\d)+([^\\d]|$))/g, '$1 ') : '0';\n        },\n        //TODO: в utils\n        stringToNumber: function (str) {\n            return str ? parseInt(str.replace(/\\s+/g, '')) : null;\n        },\n        getUrlParams: function (param) {\n            var req = window.location.search.substring(1);\n            return (req.length === 0)\n                ? undefined\n                : req.split('&').map(function (x) {\n                    return x.split('=');\n                }).reduce(function (map, obj) {\n                    map[obj[0]] = obj[1].split(',');\n                    return map;\n                }, {})[param];\n        },\n        enableLoading: function () {\n            body.addClass('is-loading');\n        },\n        disableLoading: function () {\n            body.removeClass('is-loading');\n        },\n        console: localStorage.getItem('debug') ? window.console : {\n            log: function () { },\n            error: function () { },\n            debug: function () { },\n            warn: function () { },\n            info: function () { },\n            time: function () { },\n            timeEnd: function () { },\n            group: function () { }\n        },\n        debug: {\n            enable: function (type) {\n                type ? localStorage.setItem('debug_' + app.debug.types[type], true) : localStorage.setItem('debug', true);\n                window.location.reload();\n                return true;\n            },\n            disable: function (type) {\n                type ? localStorage.removeItem('debug_' + app.debug.types[type]) : localStorage.removeItem('debug');\n                window.location.reload();\n                return false;\n            },\n            log: function (msg, type) {\n                if (localStorage.getItem('debug_' + this.types[type])) {\n                    console.log(msg);\n                }\n            }\n        },\n        generateGUID: function () {\n            return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>\n                (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)\n            );\n        },\n        htmlSvgIcon: function (filename, classname) {\n            return '<svg class=\"icon ' + classname + '\"><use xlink:href=\"/Content/cps/images/sprites/svg-icons.svg#' + filename + '\"></use></svg>';\n        },\n        isIE: function () {\n            var ua = window.navigator.userAgent;\n\n            var msie = ua.indexOf('MSIE ');\n            if (msie > 0) {\n                // IE 10 or older => return version number\n                return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n            }\n\n            var trident = ua.indexOf('Trident/');\n            if (trident > 0) {\n                // IE 11 => return version number\n                var rv = ua.indexOf('rv:');\n                return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n            }\n\n            var edge = ua.indexOf('Edge/');\n            if (edge > 0) {\n                // Edge (IE 12+) => return version number\n                return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n            }\n\n            // other browser\n            return false;\n        },\n        svgSports: function (sportId, className) {\n            sportId = sportId || '0';\n            className = className || '';\n            return '<svg class=\"icon icon-sport icon-sport-' + sportId + ' ' + className + '\"><use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"' + globalAppSettings.svg.defaultSpriteSports + '#sport-' + sportId + '\"></use></svg>';\n        }\n    };\n}());\n\n$(function () {\n    app.init();\n\n    if ($('#classic-betting-cart').length > 0) {\n        if (globalAppSettings.isFreeBetEnabled) {\n            if (Freebet) {\n                Freebet.init();\n            }\n        }\n        BettingCart.load();\n        BettingCart.settings.bindUI();\n    }\n    if (globalAppSettings.isMobileDevice && window.Mobile) {\n        window.Mobile.init();\n    }\n\n\n\n    // switch-case helper for Handlebars\n    if (typeof(Handlebars) !== 'undefined') {\n        Handlebars.registerHelper('switch', function (value, options) {\n            this.switch_value = value;\n            this.switch_break = false;\n            return options.fn(this);\n        });\n\n        Handlebars.registerHelper('case', function (value, options) {\n            if (value == this.switch_value) {\n                this.switch_break = true;\n                return options.fn(this);\n            }\n        });\n\n        Handlebars.registerHelper('default', function (value, options) {\n            if (this.switch_break == false) {\n                return value;\n            }\n        });\n\n        Handlebars.registerHelper('if_eq', function (v1, v2, options) {\n            if (v1 === v2) {\n                return options.fn(this);\n            }\n            return options.inverse(this);\n        });\n    }\n});\n\n// polyfill for ie\nif (!String.prototype.startsWith) {\n    String.prototype.startsWith = function (searchString, position) {\n        position = position || 0;\n        return this.indexOf(searchString, position) === position;\n    };\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","import './Shared/app.js';\nimport './Shared/Modules/AwesomeScrollbar.js';\nimport './Shared/Modules/AwesomeHorizontalScrollbar.js';\nimport './Shared/Modules/About.js';\nimport './Shared/Modules/ContentSlider.ts';\nimport './Shared/Modules/CurrentDatetime.js';\nimport './Shared/Modules/CustomSelect.js';\nimport './Shared/Modules/Help.js';\nimport './Shared/Modules/PageContent.js';\nimport './Shared/Modules/PageNavigation.js';\nimport './Shared/Modules/MainNavigation.js';\nimport './Shared/Modules/LiveTimer.js';\nimport './Shared/Modules/ModalWindow.js';\nimport './Shared/Modules/ModalMarkets.js';\nimport './Shared/Modules/Broadcast.ts';\nimport './Shared/Modules/VerticalMenu.js';\nimport './Shared/Modules/Balance.js';\nimport './Shared/Modules/LayoutRightColumn.js';\nimport './Shared/Modules/LayoutResolver.js';\nimport './Shared/Modules/Favorites.js';\nimport './Shared/Modules/Search.js';\nimport './Shared/Modules/StatisticsSingle.js';\nimport './Shared/Modules/Tooltip.js';\nimport './Shared/Modules/TooltipEventInfo.js';\nimport './Shared/Modules/TooltipEventScore.js';\nimport './Shared/Modules/Combobox.js';\nimport './Shared/Modules/ConfirmButton.js';\nimport './Shared/Modules/SuperexpressPagination.js';\nimport './Shared/Modules/UpButton.js';\nimport './Shared/Modules/MobileAppDownloadButton.js';\nimport './Shared/Modules/AccountMessage.js';\nimport './Shared/Modules/TimeZone.js';\n\n//HomeWidgets\nimport './Shared/Modules/HomeWidgets/HomeWidgets.js';\nimport './Shared/Modules/HomeWidgets/WidgetBanners.js';\nimport './Shared/Modules/HomeWidgets/WidgetHelp.js';\nimport './Shared/Modules/HomeWidgets/WidgetPromo.js';\n\n//Split by spa-areas\n//---empty\n\nimport './Shared/Modules/BettingCart/Freebet.js';\nimport './Shared/Modules/BettingCart/StandardCart.js';\nimport './Shared/Modules/BettingCart/StandardCartItem.js';\nimport './Shared/Modules/BettingCart/StandardCartCalc.js';\nimport './Shared/Modules/BettingCart/OneclickCart.js';\nimport './Shared/Modules/BettingCart/BettingCart.js';\n\nimport './Shared/Modules/BookmakerPromocode.js';\n\nimport './Shared/Modules/Superexpress.js';\n\n//old inceptions (to order)\nimport './Shared/Modules/Shared/ErrorHandler.js';\n"],"names":[],"sourceRoot":""}