diff --git a/README.md b/README.md index 4461b1a..38c7bda 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,12 @@ # baseball-streaming -Java CLI application for fetching live data from WBSC game data (MyBallClub) and continuously write text and image files to disk. +Java CLI application for fetching live data from WBSC game data (Ballclubz) and continuously write text and image files to disk. The produced files can then be consumed by, for instance, OBS Studio to produce overlays for a live stream. +> **Version >= 2.0.0 only relies on game data ([example](https://game.wbsc.org/gamedata/158979/play123.json)), no stats are scraped from websites anylonger.** ## Download -> **Make sure you have Java JDK 11 installed on your computer. OpenJDK 11 for windows may be downloaded [here](https://docs.microsoft.com/en-us/java/openjdk/download)** +> **Make sure you have Java JDK 21 installed on your computer. OpenJDK 21 for windows may be downloaded [here](https://docs.microsoft.com/en-us/java/openjdk/download)** Download the desired release jar from [the release page](https://github.com/keero/baseball-streaming/releases) @@ -32,9 +33,6 @@ usage: baseball-streaming to 'live' -P,--plays-base-url Base url where to fetch plays from. Defaults to 'https://game.wbsc.org' - -S,--stats-base-url Base url where to fetch stats from. Defaults - to 'https://www.wbsceurope.org' - -s,--series Series ID. E.g., '2021-juniorserien-baseboll' -t,--target Target directory for the output. E.g., '~/obs/resources' ``` @@ -44,32 +42,70 @@ You may either create a config file (more on that further down) or provide the e The `-t` option specifies the output directory where the output text and image files will be rendered. The `-g` option specifies which game you are streaming. This is typically a 5 digit number such as `84908` -The `-s` option specifies the series in which the game is played. This is typically in the form `--` such as `2021-elitserien-baseboll`. -Assuming you want to stream the game with id `84908` in `2021-elitserien-baseboll` to the directory `C:/obs-studio/resources`, then you issue the follwoing command: +Assuming you want to stream the game with id `84908` to the directory `C:/obs-studio/resources`, then you issue the follwoing command: ```bash -java -jar -t C:/obs-studio/resources -s 2021-elitserien-baseboll -g 84908 +java -jar -t C:/obs-studio/resources -g 84908 ``` -If you don't know the game id and series you can find the on the game page at for instance https://www.wbsceurope.org/ or https://stats.baseboll-softboll.se/ +If you don't know the game id you can find the on the game page at for instance https://www.wbsceurope.org/ or https://stats.baseboll-softboll.se/ -For instance the Swedish 2021 Championship final game can be found @ [https://www.wbsceurope.org/en/events/**2021-elitserien-baseboll**/schedule-and-results/box-score/**84908**](https://www.wbsceurope.org/en/events/2021-elitserien-baseboll/schedule-and-results/box-score/84908) +For instance the Swedish 2021 Championship final game can be found @ [https://www.wbsceurope.org/en/events/2021-elitserien-baseboll/schedule-and-results/box-score/**84908**](https://www.wbsceurope.org/en/events/2021-elitserien-baseboll/schedule-and-results/box-score/84908) -The series and game id can be found in the URL (marked with bold above). +The game id can be found in the URL (marked with bold above). The application will output what is currently happening live. If you want to test it out with no actual game being played at the moment you can use the `replay` mode by including the option `-m replay` in the command. ## The text and image files produced in the target directory +A batter directory consists of the following files: +``` +. +├── avg.txt +├── batting-title.txt +├── batting.txt +├── firstname.txt +├── flag.png +├── fullname.txt +├── hr.txt +├── image.png +├── lastname.txt +├── ops.txt +├── pos.txt +├── stats_for_series.txt +└── team_color.png +``` + +A pitcher directory consists of the following files: +``` +. +├── count.txt +├── era.txt +├── firstname.txt +├── flag.png +├── fullname.txt +├── image.png +├── innings.txt +├── lastname.txt +├── pitching-title.txt +├── pitching.txt +├── stats_for_series.txt +├── strikeouts.txt +├── team_color.png +└── walks.txt +``` + +The complete output directory is structured as follows: ``` . ├── away_color.png ├── away_errors.txt +├── away_flag.png ├── away_hits.txt ├── away_score.txt ├── away_team.txt -├── baseball-streaming-all-overlays.json +├── balls.txt ├── bases │   ├── ooo.png │   ├── oox.png @@ -82,582 +118,107 @@ The application will output what is currently happening live. If you want to tes ├── bases.png ├── count.txt ├── current_batter -│   ├── avg.txt -│   ├── batting.txt -│   ├── career -│   │   ├── atbats.txt -│   │   ├── avg.txt -│   │   ├── games.txt -│   │   ├── hits.txt -│   │   ├── hr.txt -│   │   ├── ops.txt -│   │   ├── rbi.txt -│   │   └── sb.txt -│   ├── firstname.txt -│   ├── flag.png -│   ├── fullname.txt -│   ├── hr.txt -│   ├── image.png -│   ├── lastname.txt -│   ├── ops.txt -│   ├── pos.txt -│   ├── rbi.txt -│   ├── stats_for_series.txt -│   └── team_color.png +│   └── +├── ondeck_batter +│   └── +├── inhole_batter +│   └── ├── current_pitcher -│   ├── career -│   │   ├── era.txt -│   │   ├── games.txt -│   │   ├── hits.txt -│   │   ├── hrs-allowed.txt -│   │   ├── innings.txt -│   │   ├── strikeouts.txt -│   │   ├── walks.txt -│   │   └── wins-losses.txt -│   ├── count.txt -│   ├── era.txt -│   ├── firstname.txt -│   ├── flag.png -│   ├── fullname.txt -│   ├── games.txt -│   ├── hits.txt -│   ├── hrs-allowed.txt -│   ├── image.png -│   ├── innings.txt -│   ├── lastname.txt -│   ├── stats_for_series.txt -│   ├── strikeouts.txt -│   ├── team_color.png -│   ├── walks.txt -│   └── wins-losses.txt +│   └── ├── home_color.png ├── home_errors.txt +├── home_flag.png ├── home_hits.txt ├── home_score.txt ├── home_team.txt -├── inhole_batter -│   ├── avg.txt -│   ├── batting.txt -│   ├── career -│   │   ├── atbats.txt -│   │   ├── avg.txt -│   │   ├── games.txt -│   │   ├── hits.txt -│   │   ├── hr.txt -│   │   ├── ops.txt -│   │   ├── rbi.txt -│   │   └── sb.txt -│   ├── firstname.txt -│   ├── flag.png -│   ├── fullname.txt -│   ├── hr.txt -│   ├── image.png -│   ├── lastname.txt -│   ├── ops.txt -│   ├── pos.txt -│   ├── rbi.txt -│   ├── stats_for_series.txt -│   └── team_color.png ├── inning_half.txt ├── inning_text.txt ├── inning.txt ├── lineups │   ├── away │   │   ├── 1 -│   │   │   ├── avg.txt -│   │   │   ├── batting.txt -│   │   │   ├── career -│   │   │   │   ├── atbats.txt -│   │   │   │   ├── avg.txt -│   │   │   │   ├── games.txt -│   │   │   │   ├── hits.txt -│   │   │   │   ├── hr.txt -│   │   │   │   ├── ops.txt -│   │   │   │   ├── rbi.txt -│   │   │   │   └── sb.txt -│   │   │   ├── firstname.txt -│   │   │   ├── flag.png -│   │   │   ├── fullname.txt -│   │   │   ├── hr.txt -│   │   │   ├── image.png -│   │   │   ├── lastname.txt -│   │   │   ├── ops.txt -│   │   │   ├── pos.txt -│   │   │   ├── rbi.txt -│   │   │   ├── stats_for_series.txt -│   │   │   └── team_color.png +│   │   │   └── │   │   ├── 2 -│   │   │   ├── avg.txt -│   │   │   ├── batting.txt -│   │   │   ├── career -│   │   │   │   ├── atbats.txt -│   │   │   │   ├── avg.txt -│   │   │   │   ├── games.txt -│   │   │   │   ├── hits.txt -│   │   │   │   ├── hr.txt -│   │   │   │   ├── ops.txt -│   │   │   │   ├── rbi.txt -│   │   │   │   └── sb.txt -│   │   │   ├── firstname.txt -│   │   │   ├── flag.png -│   │   │   ├── fullname.txt -│   │   │   ├── hr.txt -│   │   │   ├── image.png -│   │   │   ├── lastname.txt -│   │   │   ├── ops.txt -│   │   │   ├── pos.txt -│   │   │   ├── rbi.txt -│   │   │   ├── stats_for_series.txt -│   │   │   └── team_color.png +│   │   │   └── │   │   ├── 3 -│   │   │   ├── avg.txt -│   │   │   ├── batting.txt -│   │   │   ├── career -│   │   │   │   ├── atbats.txt -│   │   │   │   ├── avg.txt -│   │   │   │   ├── games.txt -│   │   │   │   ├── hits.txt -│   │   │   │   ├── hr.txt -│   │   │   │   ├── ops.txt -│   │   │   │   ├── rbi.txt -│   │   │   │   └── sb.txt -│   │   │   ├── firstname.txt -│   │   │   ├── flag.png -│   │   │   ├── fullname.txt -│   │   │   ├── hr.txt -│   │   │   ├── image.png -│   │   │   ├── lastname.txt -│   │   │   ├── ops.txt -│   │   │   ├── pos.txt -│   │   │   ├── rbi.txt -│   │   │   ├── stats_for_series.txt -│   │   │   └── team_color.png +│   │   │   └── │   │   ├── 4 -│   │   │   ├── avg.txt -│   │   │   ├── batting.txt -│   │   │   ├── career -│   │   │   │   ├── atbats.txt -│   │   │   │   ├── avg.txt -│   │   │   │   ├── games.txt -│   │   │   │   ├── hits.txt -│   │   │   │   ├── hr.txt -│   │   │   │   ├── ops.txt -│   │   │   │   ├── rbi.txt -│   │   │   │   └── sb.txt -│   │   │   ├── firstname.txt -│   │   │   ├── flag.png -│   │   │   ├── fullname.txt -│   │   │   ├── hr.txt -│   │   │   ├── image.png -│   │   │   ├── lastname.txt -│   │   │   ├── ops.txt -│   │   │   ├── pos.txt -│   │   │   ├── rbi.txt -│   │   │   ├── stats_for_series.txt -│   │   │   └── team_color.png +│   │   │   └── │   │   ├── 5 -│   │   │   ├── avg.txt -│   │   │   ├── batting.txt -│   │   │   ├── career -│   │   │   │   ├── atbats.txt -│   │   │   │   ├── avg.txt -│   │   │   │   ├── games.txt -│   │   │   │   ├── hits.txt -│   │   │   │   ├── hr.txt -│   │   │   │   ├── ops.txt -│   │   │   │   ├── rbi.txt -│   │   │   │   └── sb.txt -│   │   │   ├── firstname.txt -│   │   │   ├── flag.png -│   │   │   ├── fullname.txt -│   │   │   ├── hr.txt -│   │   │   ├── image.png -│   │   │   ├── lastname.txt -│   │   │   ├── ops.txt -│   │   │   ├── pos.txt -│   │   │   ├── rbi.txt -│   │   │   ├── stats_for_series.txt -│   │   │   └── team_color.png +│   │   │   └── │   │   ├── 6 -│   │   │   ├── avg.txt -│   │   │   ├── batting.txt -│   │   │   ├── career -│   │   │   │   ├── atbats.txt -│   │   │   │   ├── avg.txt -│   │   │   │   ├── games.txt -│   │   │   │   ├── hits.txt -│   │   │   │   ├── hr.txt -│   │   │   │   ├── ops.txt -│   │   │   │   ├── rbi.txt -│   │   │   │   └── sb.txt -│   │   │   ├── firstname.txt -│   │   │   ├── flag.png -│   │   │   ├── fullname.txt -│   │   │   ├── hr.txt -│   │   │   ├── image.png -│   │   │   ├── lastname.txt -│   │   │   ├── ops.txt -│   │   │   ├── pos.txt -│   │   │   ├── rbi.txt -│   │   │   ├── stats_for_series.txt -│   │   │   └── team_color.png +│   │   │   └── │   │   ├── 7 -│   │   │   ├── avg.txt -│   │   │   ├── batting.txt -│   │   │   ├── career -│   │   │   │   ├── atbats.txt -│   │   │   │   ├── avg.txt -│   │   │   │   ├── games.txt -│   │   │   │   ├── hits.txt -│   │   │   │   ├── hr.txt -│   │   │   │   ├── ops.txt -│   │   │   │   ├── rbi.txt -│   │   │   │   └── sb.txt -│   │   │   ├── firstname.txt -│   │   │   ├── flag.png -│   │   │   ├── fullname.txt -│   │   │   ├── hr.txt -│   │   │   ├── image.png -│   │   │   ├── lastname.txt -│   │   │   ├── ops.txt -│   │   │   ├── pos.txt -│   │   │   ├── rbi.txt -│   │   │   ├── stats_for_series.txt -│   │   │   └── team_color.png +│   │   │   └── │   │   ├── 8 -│   │   │   ├── avg.txt -│   │   │   ├── batting.txt -│   │   │   ├── career -│   │   │   │   ├── atbats.txt -│   │   │   │   ├── avg.txt -│   │   │   │   ├── games.txt -│   │   │   │   ├── hits.txt -│   │   │   │   ├── hr.txt -│   │   │   │   ├── ops.txt -│   │   │   │   ├── rbi.txt -│   │   │   │   └── sb.txt -│   │   │   ├── firstname.txt -│   │   │   ├── flag.png -│   │   │   ├── fullname.txt -│   │   │   ├── hr.txt -│   │   │   ├── image.png -│   │   │   ├── lastname.txt -│   │   │   ├── ops.txt -│   │   │   ├── pos.txt -│   │   │   ├── rbi.txt -│   │   │   ├── stats_for_series.txt -│   │   │   └── team_color.png +│   │   │   └── │   │   ├── 9 -│   │   │   ├── avg.txt -│   │   │   ├── batting.txt -│   │   │   ├── career -│   │   │   │   ├── atbats.txt -│   │   │   │   ├── avg.txt -│   │   │   │   ├── games.txt -│   │   │   │   ├── hits.txt -│   │   │   │   ├── hr.txt -│   │   │   │   ├── ops.txt -│   │   │   │   ├── rbi.txt -│   │   │   │   └── sb.txt -│   │   │   ├── firstname.txt -│   │   │   ├── flag.png -│   │   │   ├── fullname.txt -│   │   │   ├── hr.txt -│   │   │   ├── image.png -│   │   │   ├── lastname.txt -│   │   │   ├── ops.txt -│   │   │   ├── pos.txt -│   │   │   ├── rbi.txt -│   │   │   ├── stats_for_series.txt -│   │   │   └── team_color.png +│   │   │   └── +│   │   ├── [P or DH] +│   │   │   └── +│   │   ├── C +│   │   │   └── +│   │   ├── 1B +│   │   │   └── +│   │   ├── 2B +│   │   │   └── +│   │   ├── 3B +│   │   │   └── +│   │   ├── SS +│   │   │  └── +│   │   ├── LF +│   │   │   └── +│   │   ├── CF +│   │   │   └── +│   │   ├── RF +│   │   │   └── │   │   └── pitcher -│   │   ├── career -│   │   │   ├── era.txt -│   │   │   ├── games.txt -│   │   │   ├── hits.txt -│   │   │   ├── hrs-allowed.txt -│   │   │   ├── innings.txt -│   │   │   ├── strikeouts.txt -│   │   │   ├── walks.txt -│   │   │   └── wins-losses.txt -│   │   ├── count.txt -│   │   ├── era.txt -│   │   ├── firstname.txt -│   │   ├── flag.png -│   │   ├── fullname.txt -│   │   ├── games.txt -│   │   ├── hits.txt -│   │   ├── hrs-allowed.txt -│   │   ├── image.png -│   │   ├── innings.txt -│   │   ├── lastname.txt -│   │   ├── stats_for_series.txt -│   │   ├── strikeouts.txt -│   │   ├── team_color.png -│   │   ├── walks.txt -│   │   └── wins-losses.txt +│   │      └── │   └── home -│   ├── 1 -│   │   ├── avg.txt -│   │   ├── batting.txt -│   │   ├── career -│   │   │   ├── atbats.txt -│   │   │   ├── avg.txt -│   │   │   ├── games.txt -│   │   │   ├── hits.txt -│   │   │   ├── hr.txt -│   │   │   ├── ops.txt -│   │   │   ├── rbi.txt -│   │   │   └── sb.txt -│   │   ├── firstname.txt -│   │   ├── flag.png -│   │   ├── fullname.txt -│   │   ├── hr.txt -│   │   ├── image.png -│   │   ├── lastname.txt -│   │   ├── ops.txt -│   │   ├── pos.txt -│   │   ├── rbi.txt -│   │   ├── stats_for_series.txt -│   │   └── team_color.png -│   ├── 2 -│   │   ├── avg.txt -│   │   ├── batting.txt -│   │   ├── career -│   │   │   ├── atbats.txt -│   │   │   ├── avg.txt -│   │   │   ├── games.txt -│   │   │   ├── hits.txt -│   │   │   ├── hr.txt -│   │   │   ├── ops.txt -│   │   │   ├── rbi.txt -│   │   │   └── sb.txt -│   │   ├── firstname.txt -│   │   ├── flag.png -│   │   ├── fullname.txt -│   │   ├── hr.txt -│   │   ├── image.png -│   │   ├── lastname.txt -│   │   ├── ops.txt -│   │   ├── pos.txt -│   │   ├── rbi.txt -│   │   ├── stats_for_series.txt -│   │   └── team_color.png -│   ├── 3 -│   │   ├── avg.txt -│   │   ├── batting.txt -│   │   ├── career -│   │   │   ├── atbats.txt -│   │   │   ├── avg.txt -│   │   │   ├── games.txt -│   │   │   ├── hits.txt -│   │   │   ├── hr.txt -│   │   │   ├── ops.txt -│   │   │   ├── rbi.txt -│   │   │   └── sb.txt -│   │   ├── firstname.txt -│   │   ├── flag.png -│   │   ├── fullname.txt -│   │   ├── hr.txt -│   │   ├── image.png -│   │   ├── lastname.txt -│   │   ├── ops.txt -│   │   ├── pos.txt -│   │   ├── rbi.txt -│   │   ├── stats_for_series.txt -│   │   └── team_color.png -│   ├── 4 -│   │   ├── avg.txt -│   │   ├── batting.txt -│   │   ├── career -│   │   │   ├── atbats.txt -│   │   │   ├── avg.txt -│   │   │   ├── games.txt -│   │   │   ├── hits.txt -│   │   │   ├── hr.txt -│   │   │   ├── ops.txt -│   │   │   ├── rbi.txt -│   │   │   └── sb.txt -│   │   ├── firstname.txt -│   │   ├── flag.png -│   │   ├── fullname.txt -│   │   ├── hr.txt -│   │   ├── image.png -│   │   ├── lastname.txt -│   │   ├── ops.txt -│   │   ├── pos.txt -│   │   ├── rbi.txt -│   │   ├── stats_for_series.txt -│   │   └── team_color.png -│   ├── 5 -│   │   ├── avg.txt -│   │   ├── batting.txt -│   │   ├── career -│   │   │   ├── atbats.txt -│   │   │   ├── avg.txt -│   │   │   ├── games.txt -│   │   │   ├── hits.txt -│   │   │   ├── hr.txt -│   │   │   ├── ops.txt -│   │   │   ├── rbi.txt -│   │   │   └── sb.txt -│   │   ├── firstname.txt -│   │   ├── flag.png -│   │   ├── fullname.txt -│   │   ├── hr.txt -│   │   ├── image.png -│   │   ├── lastname.txt -│   │   ├── ops.txt -│   │   ├── pos.txt -│   │   ├── rbi.txt -│   │   ├── stats_for_series.txt -│   │   └── team_color.png -│   ├── 6 -│   │   ├── avg.txt -│   │   ├── batting.txt -│   │   ├── career -│   │   │   ├── atbats.txt -│   │   │   ├── avg.txt -│   │   │   ├── games.txt -│   │   │   ├── hits.txt -│   │   │   ├── hr.txt -│   │   │   ├── ops.txt -│   │   │   ├── rbi.txt -│   │   │   └── sb.txt -│   │   ├── firstname.txt -│   │   ├── flag.png -│   │   ├── fullname.txt -│   │   ├── hr.txt -│   │   ├── image.png -│   │   ├── lastname.txt -│   │   ├── ops.txt -│   │   ├── pos.txt -│   │   ├── rbi.txt -│   │   ├── stats_for_series.txt -│   │   └── team_color.png -│   ├── 7 -│   │   ├── avg.txt -│   │   ├── batting.txt -│   │   ├── career -│   │   │   ├── atbats.txt -│   │   │   ├── avg.txt -│   │   │   ├── games.txt -│   │   │   ├── hits.txt -│   │   │   ├── hr.txt -│   │   │   ├── ops.txt -│   │   │   ├── rbi.txt -│   │   │   └── sb.txt -│   │   ├── firstname.txt -│   │   ├── flag.png -│   │   ├── fullname.txt -│   │   ├── hr.txt -│   │   ├── image.png -│   │   ├── lastname.txt -│   │   ├── ops.txt -│   │   ├── pos.txt -│   │   ├── rbi.txt -│   │   ├── stats_for_series.txt -│   │   └── team_color.png -│   ├── 8 -│   │   ├── avg.txt -│   │   ├── batting.txt -│   │   ├── career -│   │   │   ├── atbats.txt -│   │   │   ├── avg.txt -│   │   │   ├── games.txt -│   │   │   ├── hits.txt -│   │   │   ├── hr.txt -│   │   │   ├── ops.txt -│   │   │   ├── rbi.txt -│   │   │   └── sb.txt -│   │   ├── firstname.txt -│   │   ├── flag.png -│   │   ├── fullname.txt -│   │   ├── hr.txt -│   │   ├── image.png -│   │   ├── lastname.txt -│   │   ├── ops.txt -│   │   ├── pos.txt -│   │   ├── rbi.txt -│   │   ├── stats_for_series.txt -│   │   └── team_color.png -│   ├── 9 -│   │   ├── avg.txt -│   │   ├── batting.txt -│   │   ├── career -│   │   │   ├── atbats.txt -│   │   │   ├── avg.txt -│   │   │   ├── games.txt -│   │   │   ├── hits.txt -│   │   │   ├── hr.txt -│   │   │   ├── ops.txt -│   │   │   ├── rbi.txt -│   │   │   └── sb.txt -│   │   ├── firstname.txt -│   │   ├── flag.png -│   │   ├── fullname.txt -│   │   ├── hr.txt -│   │   ├── image.png -│   │   ├── lastname.txt -│   │   ├── ops.txt -│   │   ├── pos.txt -│   │   ├── rbi.txt -│   │   ├── stats_for_series.txt -│   │   └── team_color.png -│   └── pitcher -│   ├── career -│   │   ├── era.txt -│   │   ├── games.txt -│   │   ├── hits.txt -│   │   ├── hrs-allowed.txt -│   │   ├── innings.txt -│   │   ├── strikeouts.txt -│   │   ├── walks.txt -│   │   └── wins-losses.txt -│   ├── count.txt -│   ├── era.txt -│   ├── firstname.txt -│   ├── flag.png -│   ├── fullname.txt -│   ├── games.txt -│   ├── hits.txt -│   ├── hrs-allowed.txt -│   ├── image.png -│   ├── innings.txt -│   ├── lastname.txt -│   ├── stats_for_series.txt -│   ├── strikeouts.txt -│   ├── team_color.png -│   ├── walks.txt -│   └── wins-losses.txt -├── ondeck_batter -│   ├── avg.txt -│   ├── batting.txt -│   ├── career -│   │   ├── atbats.txt -│   │   ├── avg.txt -│   │   ├── games.txt -│   │   ├── hits.txt -│   │   ├── hr.txt -│   │   ├── ops.txt -│   │   ├── rbi.txt -│   │   └── sb.txt -│   ├── firstname.txt -│   ├── flag.png -│   ├── fullname.txt -│   ├── hr.txt -│   ├── image.png -│   ├── lastname.txt -│   ├── ops.txt -│   ├── pos.txt -│   ├── rbi.txt -│   ├── stats_for_series.txt -│   └── team_color.png +│      ├── 1 +│      │   └── +│      ├── 2 +│      │   └── +│      ├── 3 +│      │   └── +│      ├── 4 +│      │   └── +│      ├── 5 +│      │   └── +│      ├── 6 +│      │   └── +│      ├── 7 +│      │   └── +│      ├── 8 +│      │   └── +│      ├── 9 +│      │   └── +│      ├── [P or DH] +│      │   └── +│      ├── C +│      │   └── +│      ├── 1B +│      │   └── +│      ├── 2B +│      │   └── +│      ├── 3B +│      │   └── +│      ├── SS +│      │  └── +│      ├── LF +│      │   └── +│      ├── CF +│      │   └── +│      ├── RF +│      │   └── +│      └── pitcher +│         └── ├── outs │   ├── 0.png │   ├── 1.png │   └── 2.png ├── outs.png +├── strikes.txt └── team_resources ├── colors │   ├── ALB.png @@ -667,35 +228,39 @@ The application will output what is currently happening live. If you want to tes │   ├── default_home.png │   ├── ENK.png │   ├── ENS.png + │   ├── EXP.png │   ├── FRS.png + │   ├── GBR.png │   ├── GEF.png │   ├── GOT.png │   ├── KGA.png + │   ├── LDC.png │   ├── LEK.png │   ├── MAL.png + │   ├── MBI.png │   ├── NIC.png │   ├── ORE.png + │   ├── POL.png │   ├── RAT.png │   ├── SKE.png │   ├── SKO.png │   ├── SOD.png │   ├── STO.png + │   ├── SUI.png │   ├── SUN.png │   ├── SVL.png + │   ├── SWE.png │   ├── TRA.png + │   ├── TUR.png │   ├── UME.png - │   └── UPP.png + │   ├── UPP.png + │   ├── VIF.png + │   └── VIL.png ├── flags - │   ├── 1234.png - │   ├── 5678.png │   └── default.png └── player_images - ├── 1234-12345.png - ├── 5678-67890.png - ├── default.png - . - . - . + ├── -.png + └── default.png ``` If you want to use your own images for bases, outs, team flags, or player images; then just replace the files in the `bases/`, `outs/`, `team_resources/...` directories (e.g., copy your own bases empty image to `bases/ooo.png` and so forth). diff --git a/pom.xml b/pom.xml index 091ba79..7c2691f 100644 --- a/pom.xml +++ b/pom.xml @@ -14,17 +14,11 @@ UTF-8 - 11 - 11 + 21 + 21 - - - org.immutables - value - 2.9.0 - com.fasterxml.jackson.core jackson-annotations @@ -59,12 +53,6 @@ okhttp 4.9.3 - - - org.jsoup - jsoup - 1.14.3 - org.slf4j @@ -83,6 +71,11 @@ commons-text 1.11.0 + + io.vavr + vavr + 0.10.6 + @@ -91,6 +84,12 @@ 5.8.2 test + + org.junit.jupiter + junit-jupiter-params + 5.8.2 + test + org.mockito mockito-core @@ -176,12 +175,12 @@ 3.0.0 - com.coveo + com.spotify.fmt fmt-maven-plugin - check + format diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/App.java b/src/main/java/org/sundbybergheat/baseballstreaming/App.java index 8f1c8c9..81cbfde 100644 --- a/src/main/java/org/sundbybergheat/baseballstreaming/App.java +++ b/src/main/java/org/sundbybergheat/baseballstreaming/App.java @@ -11,7 +11,7 @@ import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.sundbybergheat.baseballstreaming.clients.FilesClient; -import org.sundbybergheat.baseballstreaming.clients.StatsClient; +import org.sundbybergheat.baseballstreaming.clients.FilesClient.ImageIOHandler; import org.sundbybergheat.baseballstreaming.clients.WBSCPlayClient; import org.sundbybergheat.baseballstreaming.services.FilesService; import org.sundbybergheat.baseballstreaming.services.PlayByPlayService; @@ -26,17 +26,11 @@ public static void main(String[] args) throws IOException { options.addOption( "t", "target", true, "Target directory for the output. E.g., '~/obs/resources'"); - options.addOption( - "S", - "stats-base-url", - true, - "Base url where to fetch stats from. Defaults to 'https://stats.baseboll-softboll.se'"); options.addOption( "P", "plays-base-url", true, "Base url where to fetch plays from. Defaults to 'https://game.wbsc.org'"); - options.addOption("s", "series", true, "Series ID. E.g., '2021-juniorserien-baseboll'"); options.addOption("g", "game", true, "Game ID. E.g., '84917'"); options.addOption("c", "config-file", true, "Path to config file"); options.addOption( @@ -46,7 +40,6 @@ public static void main(String[] args) throws IOException { "delay", true, "Delay (milliseconds) between fetching plays. Defaults to 500 for live and 3000 for replay."); - options.addOption("l", "limit-stats", false, "Only use stats from this series"); options.addOption("h", "help", false, "Print this help section"); HelpFormatter formatter = new HelpFormatter(); @@ -66,13 +59,8 @@ public static void main(String[] args) throws IOException { return; } - // Due to rate-limiting on WBSC APIs, always only fetch this series stats - final boolean onlyUseThisSeriesStats = true; - String target = null; - String seriesId = null; String gameId = null; - String statsBaseUrl = null; String playsBaseUrl = null; String runMode = RunMode.live.toString(); String delay = null; @@ -88,16 +76,12 @@ public static void main(String[] args) throws IOException { } target = properties.getProperty("target"); - seriesId = properties.getProperty("series"); gameId = properties.getProperty("game"); - statsBaseUrl = properties.getProperty("stats-base-url", "https://stats.baseboll-softboll.se"); playsBaseUrl = properties.getProperty("plays-base-url", "https://game.wbsc.org"); runMode = properties.getProperty("run-mode", RunMode.live.toString()); } else { target = cmd.getOptionValue("t"); - seriesId = cmd.getOptionValue("s"); gameId = cmd.getOptionValue("g"); - statsBaseUrl = cmd.getOptionValue("S", "https://stats.baseboll-softboll.se"); playsBaseUrl = cmd.getOptionValue("P", "https://game.wbsc.org"); runMode = cmd.getOptionValue("m", RunMode.live.toString()); delay = cmd.getOptionValue("d", runMode.equals(RunMode.live.toString()) ? "500" : "3000"); @@ -108,11 +92,6 @@ public static void main(String[] args) throws IOException { formatter.printHelp("baseball-streaming", options); return; } - if (seriesId == null) { - System.err.println("Missing required config/option: series"); - formatter.printHelp("baseball-streaming", options); - return; - } if (gameId == null) { System.err.println("Missing required config/option: game"); formatter.printHelp("baseball-streaming", options); @@ -126,10 +105,9 @@ public static void main(String[] args) throws IOException { } OkHttpClient okHttpClient = new OkHttpClient(); - FilesClient filesClient = new FilesClient(target); - StatsClient statsClient = new StatsClient(okHttpClient, statsBaseUrl); - FilesService filesService = - new FilesService(filesClient, statsClient, seriesId, onlyUseThisSeriesStats); + ImageIOHandler imageIOHandler = new ImageIOHandler(); + FilesClient filesClient = new FilesClient(target, imageIOHandler); + FilesService filesService = new FilesService(filesClient); WBSCPlayClient wbscPlayClient = new WBSCPlayClient(okHttpClient, playsBaseUrl); filesService.initResources(); diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/clients/CareerStatsTools.java b/src/main/java/org/sundbybergheat/baseballstreaming/clients/CareerStatsTools.java deleted file mode 100644 index 24541aa..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/clients/CareerStatsTools.java +++ /dev/null @@ -1,195 +0,0 @@ -package org.sundbybergheat.baseballstreaming.clients; - -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; -import org.sundbybergheat.baseballstreaming.models.stats.BatterStats; -import org.sundbybergheat.baseballstreaming.models.stats.BatterStatsImpl; -import org.sundbybergheat.baseballstreaming.models.stats.PitcherStats; -import org.sundbybergheat.baseballstreaming.models.stats.PitcherStatsImpl; -import org.sundbybergheat.baseballstreaming.models.stats.SeriesStats; - -public class CareerStatsTools { - public static BatterStats getCareerBattingStats(final Collection stats) { - final List batting = - stats.stream() - .filter(s -> s.batting().isPresent()) - .map(s -> s.batting().get()) - .collect(Collectors.toList()); - - final int games = batting.stream().map(b -> b.games()).reduce((a, b) -> a + b).orElse(0); - final int atBats = batting.stream().map(b -> b.atBats()).reduce((a, b) -> a + b).orElse(0); - final int runs = batting.stream().map(b -> b.runs()).reduce((a, b) -> a + b).orElse(0); - final int hits = batting.stream().map(b -> b.hits()).reduce((a, b) -> a + b).orElse(0); - final int doubles = batting.stream().map(b -> b.doubles()).reduce((a, b) -> a + b).orElse(0); - final int triples = batting.stream().map(b -> b.triples()).reduce((a, b) -> a + b).orElse(0); - final int homeruns = batting.stream().map(b -> b.homeruns()).reduce((a, b) -> a + b).orElse(0); - final int rbi = batting.stream().map(b -> b.runsBattedIn()).reduce((a, b) -> a + b).orElse(0); - final int totalBases = - batting.stream().map(b -> b.totalBases()).reduce((a, b) -> a + b).orElse(0); - final int walks = batting.stream().map(b -> b.walks()).reduce((a, b) -> a + b).orElse(0); - final int hitByPitch = - batting.stream().map(b -> b.hitByPitch()).reduce((a, b) -> a + b).orElse(0); - final int strikeouts = - batting.stream().map(b -> b.strikeouts()).reduce((a, b) -> a + b).orElse(0); - final int gdp = - batting.stream().map(b -> b.groundoutDoublePlay()).reduce((a, b) -> a + b).orElse(0); - final int sacFly = - batting.stream().map(b -> b.sacrificeFlies()).reduce((a, b) -> a + b).orElse(0); - final int sacHits = - batting.stream().map(b -> b.sacrificeHits()).reduce((a, b) -> a + b).orElse(0); - final int stolenBases = - batting.stream().map(b -> b.stolenBases()).reduce((a, b) -> a + b).orElse(0); - final int cs = batting.stream().map(b -> b.caughtStealing()).reduce((a, b) -> a + b).orElse(0); - final int singles = hits - doubles - triples - homeruns; - final double slugging = (singles + 2.0 * doubles + 3.0 * triples + 4.0 * homeruns) / atBats; - final double onBasePercentage = - (double) (hits + walks + hitByPitch) / (atBats + walks + hitByPitch + sacFly); - - final String avg = - atBats > 0 ? String.format("%.3f", (double) hits / atBats).replace("0.", ".") : ".000"; - final String slg = atBats > 0 ? String.format("%.3f", slugging).replace("0.", ".") : ".000"; - final String obp = - (atBats + walks + hitByPitch + sacFly) > 0 - ? String.format("%.3f", onBasePercentage).replace("0.", ".") - : ".000"; - final String ops = String.format("%.3f", onBasePercentage + slugging).replace("0.", "."); - - return BatterStatsImpl.builder() - .playerId("N/A") - .teamId("N/A") - .games(games) - .atBats(atBats) - .runs(runs) - .hits(hits) - .doubles(doubles) - .triples(triples) - .homeruns(homeruns) - .runsBattedIn(rbi) - .totalBases(totalBases) - .walks(walks) - .hitByPitch(hitByPitch) - .strikeouts(strikeouts) - .groundoutDoublePlay(gdp) - .sacrificeFlies(sacFly) - .sacrificeHits(sacHits) - .stolenBases(stolenBases) - .caughtStealing(cs) - .battingAverage(avg) - .slugging(slg) - .onBasePercentage(obp) - .onBasePercentagePlusSlugging(ops) - .build(); - } - - private static double getInningsPitchedValue(final String inningsPitched) { - String[] split = inningsPitched.split("\\."); - return Double.parseDouble(split[0]) + (Double.parseDouble(split[1]) / 3.0); - } - - public static PitcherStats getCareerPitchingStats(final Collection stats) { - final List pitching = - stats.stream() - .filter(s -> s.pitching().isPresent()) - .map(s -> s.pitching().get()) - .collect(Collectors.toList()); - - final int wins = pitching.stream().map(p -> p.wins()).reduce((a, b) -> a + b).orElse(0); - final int losses = pitching.stream().map(p -> p.losses()).reduce((a, b) -> a + b).orElse(0); - - final double inningsPitchedVal = - pitching.stream() - .map(p -> getInningsPitchedValue(p.inningsPitched())) - .reduce((a, b) -> a + b) - .orElse(0.0); - final int inningsPitchedIntVal = (int) inningsPitchedVal; - final int inningsPitchedDecimalVal = - (int) Math.round((inningsPitchedVal - inningsPitchedIntVal) * 3); - - final String inningsPitched = - String.format("%d.%d", inningsPitchedIntVal, inningsPitchedDecimalVal); - final int earnedRunsTimesGameLength = - pitching.stream() - .map(p -> p.gameLength() * p.earnedRunsAllowed()) - .reduce((a, b) -> a + b) - .orElse(0); - - final double eraVal = - inningsPitchedVal > 0.0 ? earnedRunsTimesGameLength / inningsPitchedVal : 0.0; - final String era = String.format("%.2f", eraVal); - - final int appearances = - pitching.stream().map(p -> p.appearances()).reduce((a, b) -> a + b).orElse(0); - final int gamesStarted = - pitching.stream().map(p -> p.gamesStarted()).reduce((a, b) -> a + b).orElse(0); - final int saves = pitching.stream().map(p -> p.saves()).reduce((a, b) -> a + b).orElse(0); - final int completeGames = - pitching.stream().map(p -> p.completeGames()).reduce((a, b) -> a + b).orElse(0); - final int shutouts = pitching.stream().map(p -> p.shutouts()).reduce((a, b) -> a + b).orElse(0); - final int hitsAllowed = - pitching.stream().map(p -> p.hitsAllowed()).reduce((a, b) -> a + b).orElse(0); - final int runsAllowed = - pitching.stream().map(p -> p.runsAllowed()).reduce((a, b) -> a + b).orElse(0); - final int earnedRunsAllowed = - pitching.stream().map(p -> p.earnedRunsAllowed()).reduce((a, b) -> a + b).orElse(0); - final int walksAllowed = - pitching.stream().map(p -> p.walksAllowed()).reduce((a, b) -> a + b).orElse(0); - final int strikeouts = - pitching.stream().map(p -> p.strikeouts()).reduce((a, b) -> a + b).orElse(0); - final int doublesAllowed = - pitching.stream().map(p -> p.doublesAllowed()).reduce((a, b) -> a + b).orElse(0); - final int triplesAllowed = - pitching.stream().map(p -> p.triplesAllowed()).reduce((a, b) -> a + b).orElse(0); - final int homerunsAllowed = - pitching.stream().map(p -> p.homerunsAllowed()).reduce((a, b) -> a + b).orElse(0); - final int atBats = pitching.stream().map(p -> p.atBats()).reduce((a, b) -> a + b).orElse(0); - final String opponentBattingAverage = - atBats > 0 - ? String.format("%.3f", (double) hitsAllowed / atBats).replace("0.", ".") - : ".000"; - final int wildPitches = - pitching.stream().map(p -> p.wildPitches()).reduce((a, b) -> a + b).orElse(0); - final int hitByPitch = - pitching.stream().map(p -> p.hitByPitch()).reduce((a, b) -> a + b).orElse(0); - final int balks = pitching.stream().map(p -> p.balks()).reduce((a, b) -> a + b).orElse(0); - final int sacrificeFliesAllowed = - pitching.stream().map(p -> p.sacrificeFliesAllowed()).reduce((a, b) -> a + b).orElse(0); - final int sacrificeHitsAllowed = - pitching.stream().map(p -> p.sacrificeHitsAllowed()).reduce((a, b) -> a + b).orElse(0); - final int groundOuts = - pitching.stream().map(p -> p.groundOuts()).reduce((a, b) -> a + b).orElse(0); - final int flyOuts = pitching.stream().map(p -> p.flyOuts()).reduce((a, b) -> a + b).orElse(0); - - return PitcherStatsImpl.builder() - .playerId("N/A") - .teamId("N/A") - .gameLength(-1) - .wins(wins) - .losses(losses) - .era(era) - .appearances(appearances) - .gamesStarted(gamesStarted) - .saves(saves) - .completeGames(completeGames) - .shutouts(shutouts) - .inningsPitched(inningsPitched) - .hitsAllowed(hitsAllowed) - .runsAllowed(runsAllowed) - .earnedRunsAllowed(earnedRunsAllowed) - .walksAllowed(walksAllowed) - .strikeouts(strikeouts) - .doublesAllowed(doublesAllowed) - .triplesAllowed(triplesAllowed) - .homerunsAllowed(homerunsAllowed) - .atBats(atBats) - .opponentBattingAverage(opponentBattingAverage) - .wildPitches(wildPitches) - .hitByPitch(hitByPitch) - .balks(balks) - .sacrificeFliesAllowed(sacrificeFliesAllowed) - .sacrificeHitsAllowed(sacrificeHitsAllowed) - .groundOuts(groundOuts) - .flyOuts(flyOuts) - .build(); - } -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/clients/FilesClient.java b/src/main/java/org/sundbybergheat/baseballstreaming/clients/FilesClient.java index ceec0f2..417752e 100644 --- a/src/main/java/org/sundbybergheat/baseballstreaming/clients/FilesClient.java +++ b/src/main/java/org/sundbybergheat/baseballstreaming/clients/FilesClient.java @@ -1,6 +1,7 @@ package org.sundbybergheat.baseballstreaming.clients; import java.awt.image.BufferedImage; +import java.awt.image.RenderedImage; import java.io.File; import java.io.IOException; import java.net.URL; @@ -18,9 +19,11 @@ public class FilesClient { private static final Logger LOG = LoggerFactory.getLogger(FilesClient.class); private final String resourceBasePath; + private final ImageIOHandler imageIOHandler; - public FilesClient(final String resourceBasePath) { + public FilesClient(final String resourceBasePath, final ImageIOHandler imageIOHandler) { this.resourceBasePath = resourceBasePath; + this.imageIOHandler = imageIOHandler; } public String getResourceBasePath() { @@ -42,7 +45,7 @@ public void copyFileFromURL(final URL url, final String to) throws IOException { public void copyImageFromURL(final URL url, final String to) throws IOException { try { - BufferedImage in = ImageIO.read(url); + BufferedImage in = imageIOHandler.read(url); if (in != null) { writePng(in, to); } else { @@ -58,7 +61,7 @@ public void writePng(final BufferedImage image, final String to) throws IOExcept new File(FilenameUtils.concat(resourceBasePath, FilenameUtils.separatorsToSystem(to))); if (!target.exists()) { FileUtils.createParentDirectories(target); - ImageIO.write(image, "png", target); + imageIOHandler.write(image, "png", target); } } @@ -90,4 +93,14 @@ public boolean fileExists(final String path) { return new File(FilenameUtils.concat(resourceBasePath, FilenameUtils.separatorsToSystem(path))) .exists(); } + + public static class ImageIOHandler { + public BufferedImage read(URL url) throws IOException { + return ImageIO.read(url); + } + + public boolean write(RenderedImage im, String formatName, File output) throws IOException { + return ImageIO.write(im, formatName, output); + } + } } diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/clients/StatsClient.java b/src/main/java/org/sundbybergheat/baseballstreaming/clients/StatsClient.java deleted file mode 100644 index 386eb55..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/clients/StatsClient.java +++ /dev/null @@ -1,398 +0,0 @@ -package org.sundbybergheat.baseballstreaming.clients; - -import com.fasterxml.jackson.databind.exc.MismatchedInputException; -import java.io.IOException; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import org.apache.commons.text.similarity.LevenshteinDistance; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; -import org.jsoup.parser.Tag; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.sundbybergheat.baseballstreaming.models.JsonMapper; -import org.sundbybergheat.baseballstreaming.models.stats.AllStats; -import org.sundbybergheat.baseballstreaming.models.stats.AllStatsImpl; -import org.sundbybergheat.baseballstreaming.models.stats.BatterStats; -import org.sundbybergheat.baseballstreaming.models.stats.BatterStatsImpl; -import org.sundbybergheat.baseballstreaming.models.stats.Category; -import org.sundbybergheat.baseballstreaming.models.stats.CategoryStats; -import org.sundbybergheat.baseballstreaming.models.stats.CategoryStatsImpl; -import org.sundbybergheat.baseballstreaming.models.stats.PitcherStats; -import org.sundbybergheat.baseballstreaming.models.stats.PitcherStatsImpl; -import org.sundbybergheat.baseballstreaming.models.stats.SeriesId; -import org.sundbybergheat.baseballstreaming.models.stats.SeriesStats; -import org.sundbybergheat.baseballstreaming.models.stats.SeriesStatsImpl; -import org.sundbybergheat.baseballstreaming.models.stats.StatsDataSet; -import org.sundbybergheat.baseballstreaming.models.stats.StatsException; -import org.sundbybergheat.baseballstreaming.models.stats.wbsc.BattingStats; -import org.sundbybergheat.baseballstreaming.models.stats.wbsc.CareerStats; -import org.sundbybergheat.baseballstreaming.models.stats.wbsc.CareerStatsImpl; -import org.sundbybergheat.baseballstreaming.models.stats.wbsc.CareerStatsV2; -import org.sundbybergheat.baseballstreaming.models.stats.wbsc.CareerStatsV3; -import org.sundbybergheat.baseballstreaming.models.stats.wbsc.CareerStatsV4; -import org.sundbybergheat.baseballstreaming.models.stats.wbsc.PitchingStats; -import org.sundbybergheat.baseballstreaming.models.stats.wbsc.TotalsRow; - -public class StatsClient { - - private static final Logger LOG = LoggerFactory.getLogger(StatsClient.class); - - private static final String HTTP_CLIENT_USER_AGENT = - "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36"; - - private static final String PLAYER_STATS_URL = "%s/en/events/%s/teams/%s/players/%s"; - private static final String PLAYER_STATS_API_URL = - "%s/api/v1/player/stats?tab=career&fedId=%s&eventCategory=%s&pId=%s"; - - private final OkHttpClient client; - private final String baseUrl; - - public StatsClient(final OkHttpClient client, final String baseUrl) { - this.client = client; - this.baseUrl = baseUrl; - } - - public AllStats getPlayerStats( - final String playerName, - final String playerId, - final String teamId, - final SeriesId seriesId, - final boolean onlyUseThisSeriesStats) - throws StatsException, IOException { - final Map seriesStats = new HashMap(); - final String thisUri = - String.format(PLAYER_STATS_URL, baseUrl, seriesId.id(), teamId, playerId); - - final Document doc = Jsoup.connect(thisUri).get(); - final String fullCareerLink = getFullCareerLink(doc); - Optional teamFlagUrl = parseTeamFlagUrl(doc); - Optional playerImageUrl = parsePlayerImageUrl(doc); - final List categories = getCategories(fullCareerLink); - final String apiPlayerId = getAPIPlayerId(fullCareerLink); - - Category thisCategory = getThisCategory(categories, seriesId.id()); - - Optional careerBatting = Optional.empty(); - Optional careerPitching = Optional.empty(); - - for (Category category : categories) { - final boolean otherSeries = !category.value().equals(thisCategory.value()); - if (onlyUseThisSeriesStats && otherSeries) { - continue; - } - LOG.info("Fetching stats for {} (id={}) in '{}'.", playerName, playerId, category.text()); - CategoryStats categoryStats = getCategoryStats(category, apiPlayerId); - Map mappedStats = - mapCategoryStats( - categoryStats, playerId, otherSeries, seriesId, teamFlagUrl, playerImageUrl); - seriesStats.putAll(mappedStats); - - if (!otherSeries) { - - LOG.info("Selecting '{}' career stats for {}", category.text(), playerName); - - TotalsRow totalsRow = categoryStats.careerStats().totalsRow(); - careerBatting = - totalsRow.batting().map(batting -> parseTotalBatterStats(batting, playerId)); - careerPitching = - totalsRow.pitching().map(pitching -> parseTotalPitcherStats(pitching, playerId)); - } - } - - return AllStatsImpl.builder() - .seriesStats(seriesStats) - .careerBatting(careerBatting) - .careerPitching(careerPitching) - .build(); - } - - private Optional parseTeamFlagUrl(final Document doc) { - Optional findFirst = - doc.getElementsByClass("flag-icon").stream() - .filter(e -> e.tag().equals(Tag.valueOf("img"))) - .map(e -> e.attr("src")) - .findFirst(); - return findFirst; - } - - private Optional parsePlayerImageUrl(final Document doc) { - return doc.getElementsByClass("player-image").stream().map(e -> e.attr("src")).findFirst(); - } - - private Map mapCategoryStats( - final CategoryStats categoryStats, - final String playerId, - final boolean otherSeries, - final SeriesId thisSeriesId, - final Optional teamFlagUrl, - final Optional playerImageUrl) { - Map result = new HashMap(); - List battings = categoryStats.careerStats().batting(); - List pitchings = categoryStats.careerStats().pitching(); - Map batterStats = parseBatterStats(battings, playerId); - Map pitcherStats = parsePitcherStats(pitchings, playerId); - - Set years = new HashSet(batterStats.keySet()); - years.addAll(pitcherStats.keySet()); - - for (String year : years) { - String seriesId = - !otherSeries && thisSeriesId.year().orElse(0).equals(Integer.parseInt(year)) - ? thisSeriesId.id() - : String.format("%s-%s", year, categoryStats.category().value()); - SeriesStats seriesStats = - SeriesStatsImpl.builder() - .id(seriesId) - .year(Integer.parseInt(year)) - .otherSeries(otherSeries) - .seriesName(String.format("%s %s", categoryStats.category().text(), year)) - .batting(Optional.ofNullable(batterStats.getOrDefault(year, null))) - .pitching(Optional.ofNullable(pitcherStats.getOrDefault(year, null))) - .teamFlagUrl(teamFlagUrl) - .playerImageUrl(playerImageUrl) - .build(); - result.put(seriesId, seriesStats); - } - return result; - } - - private Map parseBatterStats( - final List battings, final String playerId) { - - Map result = new HashMap(); - - for (BattingStats batting : battings) { - result.put(Integer.toString(batting.year()), parseTotalBatterStats(batting, playerId)); - } - - return result; - } - - private BatterStats parseTotalBatterStats(final BattingStats batting, final String playerId) { - // @TODO: Remove this now unnecessary mapping between BattingStats -> BatterStats. We should be - // able to use BattingStats directly. - BatterStats batterStats = - BatterStatsImpl.builder() - .playerId(playerId) - .teamId("") - .games(batting.games()) - .atBats(batting.atBats()) - .runs(batting.runs()) - .hits(batting.hits()) - .doubles(batting.doubles()) - .triples(batting.triples()) - .homeruns(batting.homeruns()) - .runsBattedIn(batting.rbi()) - .totalBases(batting.totalBases()) - .walks(batting.walks()) - .hitByPitch(batting.hitByPitch()) - .strikeouts(batting.strikeouts()) - .groundoutDoublePlay(batting.groundoutDoublePlay()) - .sacrificeFlies(batting.sacrificeFlies()) - .sacrificeHits(batting.sacrificeHits()) - .stolenBases(batting.stolenBases()) - .caughtStealing(batting.caughtStealing()) - .battingAverage(batting.battingAverage()) - .slugging(batting.slugging()) - .onBasePercentage(batting.onBasePercentage()) - .onBasePercentagePlusSlugging(batting.onBasePercentagePlusSlugging()) - .build(); - - return batterStats; - } - - private Map parsePitcherStats( - final List pitchings, final String playerId) { - - Map result = new HashMap(); - - for (PitchingStats pitching : pitchings) { - result.put(Integer.toString(pitching.year()), parseTotalPitcherStats(pitching, playerId)); - } - return result; - } - - // @TODO: - private PitcherStats parseTotalPitcherStats(final PitchingStats pitching, final String playerId) { - // @TODO: Remove this now unnecessary mapping between PitchingStats -> PitcherStats. We should - // be able to use PitchingStats directly. - PitcherStats pitcherStats = - PitcherStatsImpl.builder() - .playerId(playerId) - .teamId("") - .appearances(pitching.appearances()) - .wins(pitching.wins()) - .losses(pitching.losses()) - .era(pitching.era()) - .gamesStarted(pitching.gamesStarted()) - .saves(pitching.saves()) - .completeGames(pitching.completeGames()) - .shutouts(pitching.shutouts()) - .inningsPitched(pitching.inningsPitched()) - .hitsAllowed(pitching.hitsAllowed()) - .runsAllowed(pitching.runsAllowed()) - .earnedRunsAllowed(pitching.earnedRunsAllowed()) - .walksAllowed(pitching.walksAllowed()) - .strikeouts(pitching.strikeouts()) - .doublesAllowed(pitching.doublesAllowed()) - .triplesAllowed(pitching.triplesAllowed()) - .homerunsAllowed(pitching.homerunsAllowed()) - .atBats(pitching.atBats()) - .opponentBattingAverage(pitching.opponentBattingAverage()) - .wildPitches(pitching.wildPitches()) - .hitByPitch(pitching.hitByPitch()) - .balks(pitching.balks()) - .sacrificeFliesAllowed(pitching.sacrificeFliesAllowed()) - .sacrificeHitsAllowed(pitching.sacrificeHitsAllowed()) - .groundOuts(pitching.groundOuts()) - .flyOuts(pitching.flyOuts()) - .gameLength(-1) - .build(); - - return pitcherStats; - } - - private String getFullCareerLink(final Document doc) throws StatsException { - final Element fullCareerButton = doc.getElementsByClass("full_career_btn").first(); - - if (fullCareerButton == null) { - throw new StatsException("Full Career button not found on stats page."); - } - return fullCareerButton.parent().attributes().get("href"); - } - - private List getCategories(final String fullCareerLink) - throws StatsException, IOException { - Request request = - new okhttp3.Request.Builder() - .url(fullCareerLink) - .addHeader("user-agent", HTTP_CLIENT_USER_AGENT) - .get() - .build(); - - Response response = client.newCall(request).execute(); - - if (!response.isSuccessful()) { - response.close(); - throw new StatsException( - String.format("Failed to fetch %s (got %d)", fullCareerLink, response.code())); - } - String body = response.body().byteString().utf8(); - response.close(); - Pattern p = Pattern.compile(".*data-filters=\"([^\"]+)\".*", Pattern.DOTALL); - // Pattern p = Pattern.compile(".*dataset\\s+=\\s+\\(([^;]+)\\);.*", Pattern.DOTALL); - Matcher m = p.matcher(body); - if (!m.matches()) { - throw new StatsException(String.format("Could not find Stats dataset @ %s", fullCareerLink)); - } - String json = m.group(1).replaceAll(""", "\""); - StatsDataSet dataSet = JsonMapper.fromJson(json, StatsDataSet.class); - return dataSet.elementRS().categories(); - } - - private String getAPIPlayerId(final String fullCareerLink) throws StatsException { - Pattern pattern = Pattern.compile("^.*-([0-9]+)/history$"); - Matcher matcher = pattern.matcher(fullCareerLink); - if (!matcher.matches()) { - throw new StatsException( - String.format("Unable to get API Player ID from %s.", fullCareerLink)); - } - return matcher.group(1); - } - - private CategoryStats getCategoryStats(final Category category, final String apiPlayerId) - throws StatsException, IOException { - - final String uri = - String.format( - PLAYER_STATS_API_URL, baseUrl, category.fedId(), category.value(), apiPlayerId); - Request request = - new okhttp3.Request.Builder() - .url(uri) - .addHeader("user-agent", HTTP_CLIENT_USER_AGENT) - .get() - .build(); - - Response response = client.newCall(request).execute(); - - if (response.isSuccessful()) { - String body = - response - .body() - .byteString() - .utf8() - .replaceAll("\"Totals\"", "0") - .replaceAll("\\[\\]", "null"); - response.close(); - CareerStats careerStats = null; - // @TODO: The WBSC APIs tend to mix arrays and maps for the same field at times. The ugly - // solution below to try mapping to different java models should be replaced by a custom JSON - // parser that is able to handle the differences. - try { - careerStats = JsonMapper.fromJson(body, CareerStats.class); - } catch (MismatchedInputException e) { - try { - CareerStatsV3 temp = JsonMapper.fromJson(body, CareerStatsV3.class); - careerStats = - CareerStatsImpl.builder() - .batting(temp.batting()) - .pitching(temp.pitching().values().stream().collect(Collectors.toList())) - .totalsRow(temp.totalsRow()) - .build(); - } catch (MismatchedInputException e2) { - try { - CareerStatsV2 temp = JsonMapper.fromJson(body, CareerStatsV2.class); - careerStats = - CareerStatsImpl.builder() - .batting(temp.batting().values().stream().collect(Collectors.toList())) - .pitching(temp.pitching()) - .totalsRow(temp.totalsRow()) - .build(); - } catch (MismatchedInputException e3) { - CareerStatsV4 temp = JsonMapper.fromJson(body, CareerStatsV4.class); - careerStats = - CareerStatsImpl.builder() - .batting(temp.batting().values().stream().collect(Collectors.toList())) - .pitching(temp.pitching().values().stream().collect(Collectors.toList())) - .totalsRow(temp.totalsRow()) - .build(); - } - } - } - return CategoryStatsImpl.builder().careerStats(careerStats).category(category).build(); - } - String responseString = response.toString(); - response.close(); - - if (response.code() == 404) { - throw new StatsException( - "Stats could not be found. Please check that you are using the correct series identifier for this game."); - } - throw new StatsException( - String.format("Unexpected response from %s, got %s", uri, responseString)); - } - - private Category getThisCategory(final List categories, final String seriesId) - throws StatsException { - LevenshteinDistance distance = LevenshteinDistance.getDefaultInstance(); - return categories.stream() - .sorted( - (a, b) -> - distance.apply(seriesId.toLowerCase(), a.value().toLowerCase()) - - distance.apply(seriesId.toLowerCase(), b.value().toLowerCase())) - .findFirst() - .orElseThrow(() -> new StatsException("Unable to get current series category")); - } -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/clients/WBSCPlayClient.java b/src/main/java/org/sundbybergheat/baseballstreaming/clients/WBSCPlayClient.java index 0b63c0b..178bb38 100644 --- a/src/main/java/org/sundbybergheat/baseballstreaming/clients/WBSCPlayClient.java +++ b/src/main/java/org/sundbybergheat/baseballstreaming/clients/WBSCPlayClient.java @@ -9,9 +9,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.sundbybergheat.baseballstreaming.models.JsonMapper; -import org.sundbybergheat.baseballstreaming.models.wbsc.Play; -import org.sundbybergheat.baseballstreaming.models.wbsc.PlayImpl; import org.sundbybergheat.baseballstreaming.models.wbsc.WBSCException; +import org.sundbybergheat.baseballstreaming.models.wbsc.play.Play; +import org.sundbybergheat.baseballstreaming.models.wbsc.play.PlayWrapper; public class WBSCPlayClient { private static final Logger LOG = LoggerFactory.getLogger(WBSCPlayClient.class); @@ -57,11 +57,11 @@ public Optional getLatestPlay(final String gameId) throws IOException, throw new WBSCException(String.format("Unexpected response from WBSC: %s", responseString)); } - public Optional optimisticGetPlay(final String gameId, final int play) + public Optional optimisticGetPlay(final String gameId, final int play) throws IOException, WBSCException { for (int i = 2; i > 0; i -= 1) { try { - Optional maybePlay = getPlay(gameId, play + i); + Optional maybePlay = getPlay(gameId, play + i); if (maybePlay.isPresent()) { LOG.info("Successfully obtained play {} ahead of {}.", play + i, play); return maybePlay; @@ -73,7 +73,7 @@ public Optional optimisticGetPlay(final String gameId, final int play) return getPlay(gameId, play); } - public Optional getPlay(final String gameId, final int play) + public Optional getPlay(final String gameId, final int play) throws IOException, WBSCException { String uri = String.format(PLAY_URL, baseUrl, gameId, play, Instant.now().toEpochMilli()); @@ -89,8 +89,7 @@ public Optional getPlay(final String gameId, final int play) if (response.isSuccessful()) { String body = response.body().byteString().utf8(); response.close(); - return Optional.of( - PlayImpl.builder().from(JsonMapper.fromJson(body, Play.class)).playNumber(play).build()); + return Optional.of(new PlayWrapper(play, JsonMapper.fromJson(body, Play.class))); } if (response.code() == 404) { diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/EitherModule.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/EitherModule.java new file mode 100644 index 0000000..4b08a67 --- /dev/null +++ b/src/main/java/org/sundbybergheat/baseballstreaming/models/EitherModule.java @@ -0,0 +1,121 @@ +package org.sundbybergheat.baseballstreaming.models; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.BeanProperty; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.deser.ContextualDeserializer; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.StdDelegatingSerializer; +import com.fasterxml.jackson.databind.util.StdConverter; +import io.vavr.control.Either; +import java.io.IOException; + +/** + * EitherModule is an extension of + * com.fasterxml.jackson.databind.module.SimpleModule. The purpose of this module is to + * enable proper (de)serialization of the io.vavr.control.Either type from/to JSON. + * Example use cases: The JSON source provides (for the same type) {"field": 1234} as + * well as {"field": "some string"} At a first glanse this seems like an inconsistency + * from the JSON source but it is in fact perfectly valid and can be (de)serialized in a type + * correct and safe manner using the io.vavr.control.Either type and this + * EitherModule. + * + *

Example: + * + *

+ * + *
+ *
+ * record MyRecord(Either<Integer, String> field) {}
+ *
+ * ObjectMapper mapper = new ObjectMapper(new JsonFactory())
+ *     .registerModule(new EitherModule());
+ *
+ * MyRecord my1 = mapper.readValue("{\"field\": 1234}", MyRecord.class);
+ *
+ * // my1 == MyRecord[field=Left(1234)]
+ *
+ * MyRecord my2 = mapper.readValue("{\"field\": \"some string\"}", MyRecord.class);
+ *
+ * // my2 == MyRecord[field=Right(some string)]
+ *
+ * String json = mapper.writeValueAsString(new EitherTestModel(Either.left(1234)));
+ *
+ * // json == "{\"field\":1234}"
+ *
+ * 
+ * + *
+ * + *

+ * + * @author Martin Kero + */ +public class EitherModule extends SimpleModule { + + private static class EitherDeserializer extends JsonDeserializer> + implements ContextualDeserializer { + + private JavaType left; + private JavaType right; + + public EitherDeserializer() {} + + private EitherDeserializer(final JavaType left, final JavaType right) { + this.left = left; + this.right = right; + } + + @Override + public JsonDeserializer> createContextual( + DeserializationContext ctxt, BeanProperty property) throws JsonMappingException { + JavaType leftType = property.getType().containedType(0); + JavaType rightType = property.getType().containedType(1); + return new EitherDeserializer(leftType, rightType); + } + + @Override + public Either deserialize(JsonParser p, DeserializationContext ctxt) + throws IOException, JacksonException { + try { + return Either.left(ctxt.readValue(p, left)); + } catch (Exception e1) { + try { + return Either.right(ctxt.readValue(p, right)); + } catch (Exception e2) { + throw new JsonParseException( + p, + "Unable to deserialize Either<%s,%s> from token %s" + .formatted( + left.getRawClass().getSimpleName(), + right.getRawClass().getSimpleName(), + p.getCurrentToken())); + } + } + } + } + + private static class EitherConverter extends StdConverter, Object> { + @Override + public Object convert(Either value) { + if (value.isLeft()) { + return value.getLeft(); + } else if (value.isRight()) { + return value.get(); + } else { + return null; + } + } + } + + public EitherModule() { + super(); + this.addDeserializer(Either.class, new EitherDeserializer()) + .addSerializer(Either.class, new StdDelegatingSerializer(new EitherConverter())); + } +} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/JsonMapper.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/JsonMapper.java index 9b729fc..aab7ec9 100644 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/JsonMapper.java +++ b/src/main/java/org/sundbybergheat/baseballstreaming/models/JsonMapper.java @@ -13,6 +13,7 @@ public class JsonMapper { private static final ObjectMapper JSON = new ObjectMapper(new JsonFactory()) .registerModule(new Jdk8Module()) + .registerModule(new EitherModule()) .enable(JsonParser.Feature.STRICT_DUPLICATE_DETECTION) .setSerializationInclusion(Include.NON_NULL) .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/AllStats.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/AllStats.java deleted file mode 100644 index dccc79a..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/AllStats.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.stats; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import java.util.Collections; -import java.util.Map; -import java.util.Optional; -import org.immutables.value.Value.Default; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = AllStatsImpl.class) -@JsonDeserialize(as = AllStatsImpl.class) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface AllStats { - @Default - default Map seriesStats() { - return Collections.emptyMap(); - } - - Optional careerBatting(); - - Optional careerPitching(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/BatterStats.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/BatterStats.java deleted file mode 100644 index 231cd5b..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/BatterStats.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.stats; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; -import org.jetbrains.annotations.Nullable; - -@Immutable -@JsonSerialize(as = BatterStatsImpl.class) -@JsonDeserialize(as = BatterStatsImpl.class) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface BatterStats { - String playerId(); - - String teamId(); - - int games(); - - int atBats(); - - int runs(); - - int hits(); - - @Nullable - Integer doubles(); - - @Nullable - Integer triples(); - - @Nullable - Integer homeruns(); - - int runsBattedIn(); - - @Nullable - Integer totalBases(); - - String battingAverage(); - - @Nullable - String slugging(); - - @Nullable - String onBasePercentage(); - - @Nullable - String onBasePercentagePlusSlugging(); - - @Nullable - Integer walks(); - - @Nullable - Integer hitByPitch(); - - @Nullable - Integer strikeouts(); - - @Nullable - Integer groundoutDoublePlay(); - - @Nullable - Integer sacrificeFlies(); - - @Nullable - Integer sacrificeHits(); - - @Nullable - Integer stolenBases(); - - @Nullable - Integer caughtStealing(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/Category.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/Category.java deleted file mode 100644 index 1fda371..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/Category.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.stats; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = CategoryImpl.class) -@JsonDeserialize(as = CategoryImpl.class) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface Category { - String text(); - - String value(); - - int fedId(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/CategoryStats.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/CategoryStats.java deleted file mode 100644 index aac36f0..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/CategoryStats.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.stats; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; -import org.sundbybergheat.baseballstreaming.models.stats.wbsc.CareerStats; - -@Immutable -@JsonSerialize(as = CategoryStatsImpl.class) -@JsonDeserialize(as = CategoryStatsImpl.class) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface CategoryStats { - Category category(); - - CareerStats careerStats(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/ElementRS.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/ElementRS.java deleted file mode 100644 index 3ebffc6..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/ElementRS.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.stats; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import java.util.List; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = ElementRSImpl.class) -@JsonDeserialize(as = ElementRSImpl.class) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface ElementRS { - List categories(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/PitcherStats.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/PitcherStats.java deleted file mode 100644 index 52e676c..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/PitcherStats.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.stats; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = PitcherStatsImpl.class) -@JsonDeserialize(as = PitcherStatsImpl.class) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface PitcherStats { - - String playerId(); - - String teamId(); - - int gameLength(); - - int wins(); - - int losses(); - - String era(); - - int appearances(); - - int gamesStarted(); - - int saves(); - - int completeGames(); - - int shutouts(); - - String inningsPitched(); - - int hitsAllowed(); - - int runsAllowed(); - - int earnedRunsAllowed(); - - int walksAllowed(); - - int strikeouts(); - - int doublesAllowed(); - - int triplesAllowed(); - - int homerunsAllowed(); - - int atBats(); - - String opponentBattingAverage(); - - int wildPitches(); - - int hitByPitch(); - - int balks(); - - int sacrificeFliesAllowed(); - - int sacrificeHitsAllowed(); - - int groundOuts(); - - int flyOuts(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/SeriesId.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/SeriesId.java deleted file mode 100644 index aabe873..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/SeriesId.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.stats; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import java.util.Optional; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = SeriesIdImpl.class) -@JsonDeserialize(as = SeriesIdImpl.class) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface SeriesId { - String id(); - - Optional year(); - - Optional prefix(); - - Optional postfix(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/SeriesStats.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/SeriesStats.java deleted file mode 100644 index 101564b..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/SeriesStats.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.stats; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import java.util.Optional; -import org.immutables.value.Value.Default; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = SeriesStatsImpl.class) -@JsonDeserialize(as = SeriesStatsImpl.class) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface SeriesStats { - - String id(); - - Optional year(); - - @Default - default boolean otherSeries() { - return false; - } - - String seriesName(); - - Optional teamFlagUrl(); - - Optional playerImageUrl(); - - Optional batting(); - - Optional pitching(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/Stats.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/Stats.java deleted file mode 100644 index 0dbf5bf..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/Stats.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.stats; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = StatsImpl.class) -@JsonDeserialize(as = StatsImpl.class) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface Stats { - String b(); - - String p(); - - String f(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/StatsDataSet.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/StatsDataSet.java deleted file mode 100644 index 4365935..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/StatsDataSet.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.stats; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = StatsDataSetImpl.class) -@JsonDeserialize(as = StatsDataSetImpl.class) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface StatsDataSet { - ElementRS elementRS(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/StatsException.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/StatsException.java deleted file mode 100644 index b3ad7bd..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/StatsException.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.stats; - -public class StatsException extends Exception { - - public StatsException(final String message) { - super(message); - } -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/Total.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/Total.java deleted file mode 100644 index 8270a89..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/Total.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.stats; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = TotalImpl.class) -@JsonDeserialize(as = TotalImpl.class) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface Total { - String battingTotal(); - - String fieldingTotal(); - - String pitchingTotal(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/BattingStats.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/BattingStats.java deleted file mode 100644 index 2857d16..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/BattingStats.java +++ /dev/null @@ -1,103 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.stats.wbsc; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; -import org.jetbrains.annotations.Nullable; - -@Immutable -@JsonSerialize(as = BattingStatsImpl.class) -@JsonDeserialize(as = BattingStatsImpl.class) -@JsonIgnoreProperties(ignoreUnknown = true) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface BattingStats { - int year(); - - String teamcode(); - - @JsonProperty("pos") - String position(); - - @JsonProperty("g") - int games(); - - @JsonProperty("gs") - int gamesStarted(); - - @JsonProperty("ab") - int atBats(); - - @JsonProperty("r") - int runs(); - - @JsonProperty("h") - int hits(); - - @Nullable - @JsonProperty("double") - Integer doubles(); - - @Nullable - @JsonProperty("triple") - Integer triples(); - - @Nullable - @JsonProperty("hr") - Integer homeruns(); - - int rbi(); - - @Nullable - @JsonProperty("tb") - Integer totalBases(); - - @JsonProperty("avg") - String battingAverage(); - - @Nullable - @JsonProperty("slg") - String slugging(); - - @Nullable - @JsonProperty("obp") - String onBasePercentage(); - - @Nullable - @JsonProperty("ops") - String onBasePercentagePlusSlugging(); - - @Nullable - @JsonProperty("bb") - Integer walks(); - - @Nullable - @JsonProperty("hbp") - Integer hitByPitch(); - - @Nullable - @JsonProperty("so") - Integer strikeouts(); - - @Nullable - @JsonProperty("gdp") - Integer groundoutDoublePlay(); - - @Nullable - @JsonProperty("sf") - Integer sacrificeFlies(); - - @Nullable - @JsonProperty("sh") - Integer sacrificeHits(); - - @Nullable - @JsonProperty("sb") - Integer stolenBases(); - - @Nullable - @JsonProperty("cs") - Integer caughtStealing(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/CareerStats.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/CareerStats.java deleted file mode 100644 index 2e7d8bd..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/CareerStats.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.stats.wbsc; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import java.util.List; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = CareerStatsImpl.class) -@JsonDeserialize(as = CareerStatsImpl.class) -@JsonIgnoreProperties(ignoreUnknown = true) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface CareerStats { - List batting(); - - List pitching(); - - TotalsRow totalsRow(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/CareerStatsV2.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/CareerStatsV2.java deleted file mode 100644 index 6286e0e..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/CareerStatsV2.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.stats.wbsc; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import java.util.List; -import java.util.Map; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = CareerStatsV2Impl.class) -@JsonDeserialize(as = CareerStatsV2Impl.class) -@JsonIgnoreProperties(ignoreUnknown = true) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface CareerStatsV2 { - Map batting(); - - List pitching(); - - TotalsRow totalsRow(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/CareerStatsV3.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/CareerStatsV3.java deleted file mode 100644 index 3e43de3..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/CareerStatsV3.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.stats.wbsc; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import java.util.List; -import java.util.Map; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = CareerStatsV3Impl.class) -@JsonDeserialize(as = CareerStatsV3Impl.class) -@JsonIgnoreProperties(ignoreUnknown = true) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface CareerStatsV3 { - List batting(); - - Map pitching(); - - TotalsRow totalsRow(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/CareerStatsV4.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/CareerStatsV4.java deleted file mode 100644 index 1336e41..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/CareerStatsV4.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.stats.wbsc; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import java.util.Map; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = CareerStatsV4Impl.class) -@JsonDeserialize(as = CareerStatsV4Impl.class) -@JsonIgnoreProperties(ignoreUnknown = true) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface CareerStatsV4 { - Map batting(); - - Map pitching(); - - TotalsRow totalsRow(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/PitchingStats.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/PitchingStats.java deleted file mode 100644 index 88218ea..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/PitchingStats.java +++ /dev/null @@ -1,101 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.stats.wbsc; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = PitchingStatsImpl.class) -@JsonDeserialize(as = PitchingStatsImpl.class) -@JsonIgnoreProperties(ignoreUnknown = true) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface PitchingStats { - int year(); - - String teamcode(); - - String pos(); - - @JsonProperty("pitch_win") - int wins(); - - @JsonProperty("pitch_loss") - int losses(); - - String era(); - - @JsonProperty("pitch_appear") - int appearances(); - - @JsonProperty("pitch_gs") - int gamesStarted(); - - @JsonProperty("pitch_save") - int saves(); - - @JsonProperty("pitch_cg") - int completeGames(); - - @JsonProperty("pitch_sho") - int shutouts(); - - @JsonProperty("pitch_ip") - String inningsPitched(); - - @JsonProperty("pitch_h") - int hitsAllowed(); - - @JsonProperty("pitch_r") - int runsAllowed(); - - @JsonProperty("pitch_er") - int earnedRunsAllowed(); - - @JsonProperty("pitch_bb") - int walksAllowed(); - - @JsonProperty("pitch_so") - int strikeouts(); - - @JsonProperty("pitch_double") - int doublesAllowed(); - - @JsonProperty("pitch_triple") - int triplesAllowed(); - - @JsonProperty("pitch_hr") - int homerunsAllowed(); - - @JsonProperty("pitch_ab") - int atBats(); - - @JsonProperty("bavg") - String opponentBattingAverage(); - - @JsonProperty("pitch_wp") - int wildPitches(); - - @JsonProperty("pitch_hbp") - int hitByPitch(); - - @JsonProperty("pitch_bk") - int balks(); - - @JsonProperty("pitch_sfa") - int sacrificeFliesAllowed(); - - @JsonProperty("pitch_sha") - int sacrificeHitsAllowed(); - - @JsonProperty("pitch_ground") - int groundOuts(); - - @JsonProperty("pitch_fly") - int flyOuts(); - - @JsonProperty("pitch_whip") - float walksAndHitsPerInningPitched(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/TotalsRow.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/TotalsRow.java deleted file mode 100644 index aa53c7b..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/stats/wbsc/TotalsRow.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.stats.wbsc; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import java.util.Optional; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = TotalsRowImpl.class) -@JsonDeserialize(as = TotalsRowImpl.class) -@JsonIgnoreProperties(ignoreUnknown = true) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface TotalsRow { - Optional batting(); - - Optional pitching(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/AllowNulls.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/AllowNulls.java deleted file mode 100644 index fdb8b69..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/AllowNulls.java +++ /dev/null @@ -1,3 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.wbsc; - -public @interface AllowNulls {} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/Animation.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/Animation.java deleted file mode 100644 index 245b076..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/Animation.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.wbsc; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = AnimationImpl.class) -@JsonDeserialize(as = AnimationImpl.class) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface Animation { - int batter(); - - int strike(); - - int ball(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/Arm.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/Arm.java deleted file mode 100644 index 8fd6ceb..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/Arm.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.wbsc; - -public enum Arm { - R, - L, - S -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/BoxScore.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/BoxScore.java deleted file mode 100644 index e7c223f..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/BoxScore.java +++ /dev/null @@ -1,125 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.wbsc; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import java.util.Optional; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = BoxScoreImpl.class) -@JsonDeserialize(as = BoxScoreImpl.class) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface BoxScore { - String name(); - - @JsonProperty("firstname") - String firstName(); - - @JsonProperty("lastname") - String lastName(); - - @JsonProperty("playerid") - String playerId(); - - @JsonProperty("teamid") - String teamId(); - - @JsonProperty("teamcode") - String teamCode(); - - String image(); - - @JsonProperty("inplay") - String inPlay(); - - int reentry(); - - @JsonProperty("POS") - Optional position(); - - @JsonProperty("AB") - Optional atBats(); - - @JsonProperty("R") - Optional runs(); - - @JsonProperty("H") - Optional hits(); - - @JsonProperty("RBI") - Optional runsBattedIn(); - - @JsonProperty("BB") - Optional walks(); - - @JsonProperty("SO") - Optional strikeOuts(); - - @JsonProperty("DOUBLE") - Optional doubles(); - - @JsonProperty("TRIPLE") - Optional triples(); - - @JsonProperty("HR") - Optional homeruns(); - - @JsonProperty("SB") - Optional stolenBases(); - - @JsonProperty("CS") - Optional caughtStealing(); - - @JsonProperty("LOB") - Optional leftOnBase(); - - @JsonProperty("AVG") - Optional average(); - - @JsonProperty("OBP") - Optional onBasePercentage(); - - @JsonProperty("SLG") - Optional slugging(); - - @JsonProperty("OPS") - Optional obpPlusSlugging(); - - @JsonProperty("PO") - int putOuts(); - - @JsonProperty("A") - int assists(); - - @JsonProperty("E") - int errors(); - - @JsonProperty("PITCHIP") - Optional inningsPitched(); - - @JsonProperty("PITCHER") - Optional earnedRuns(); - - @JsonProperty("PITCHR") - Optional pitcherRuns(); - - @JsonProperty("PITCHH") - Optional pitcherHits(); - - @JsonProperty("PITCHBB") - Optional pitcherWalks(); - - @JsonProperty("PITCHSO") - Optional pitcherStrikeouts(); - - @JsonProperty("PITCHES") - Optional pitches(); - - @JsonProperty("STRIKES") - Optional strikes(); - - @JsonProperty("ERA") - Optional era(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/LineScore.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/LineScore.java deleted file mode 100644 index ee047d8..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/LineScore.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.wbsc; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import java.util.List; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = LineScoreImpl.class) -@JsonDeserialize(as = LineScoreImpl.class) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface LineScore { - - @JsonProperty("awayruns") - @AllowNulls - List awayRuns(); - - @JsonProperty("awaytotals") - Score awayTotals(); - - @JsonProperty("homeruns") - @AllowNulls - List homeRuns(); - - @JsonProperty("hometotals") - Score homeTotals(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/PlateCount.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/PlateCount.java deleted file mode 100644 index d4d4cd9..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/PlateCount.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.wbsc; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import java.util.List; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = PlateCountImpl.class) -@JsonDeserialize(as = PlateCountImpl.class) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface PlateCount { - int id(); - - int type(); - - String label(); - - String pitch(); - - List coords(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/Play.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/Play.java deleted file mode 100644 index f1ce669..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/Play.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.wbsc; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import org.immutables.value.Value.Default; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = PlayImpl.class) -@JsonDeserialize(as = PlayImpl.class) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface Play { - - @JsonIgnore - @Default - default int playNumber() { - return 0; - } - - @JsonProperty("debug_lastplay") - int debugLastPlay(); - - @JsonProperty("lastplayloaded") - int lastPlayLoaded(); - - @JsonProperty("gameid") - String gameId(); - - @JsonProperty("debugcode") - String debugCode(); - - @JsonProperty("eventlocation") - String eventLocation(); - - @JsonProperty("eventhome") - String eventHome(); - - @JsonProperty("eventaway") - String eventAway(); - - @JsonProperty("eventhomeid") - String eventHomeId(); - - @JsonProperty("eventawayid") - String eventAwayId(); - - @JsonProperty("eventurl") - String eventUrl(); - - @JsonProperty("gameover") - int gameOver(); - - String innings(); - - @JsonProperty("platecount") - @Default - default List plateCount() { - return Collections.emptyList(); - } - - Situation situation(); - - @JsonProperty("boxscore") - @Default - default Map boxScore() { - return Collections.emptyMap(); - } - - @JsonProperty("linescore") - LineScore lineScore(); - - Animation animation(); - - @JsonProperty("playdata") - @Default - default List playData() { - return Collections.emptyList(); - } -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/PlayData.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/PlayData.java deleted file mode 100644 index c59016d..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/PlayData.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.wbsc; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = PlayDataImpl.class) -@JsonDeserialize(as = PlayDataImpl.class) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface PlayData { - @JsonProperty("t") - Long timestamp(); - - @JsonProperty("p") - String pitcher(); - - @JsonProperty("n") - String text(); - - @JsonProperty("b") - String batter(); - - @JsonProperty("a") - String atBat(); - - String r1(); - - String r2(); - - @JsonProperty("i") - String inning(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/Score.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/Score.java deleted file mode 100644 index d7b725e..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/Score.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.wbsc; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; - -@Immutable -@JsonSerialize(as = ScoreImpl.class) -@JsonDeserialize(as = ScoreImpl.class) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface Score { - @JsonProperty("R") - int runs(); - - @JsonProperty("H") - int hits(); - - @JsonProperty("E") - int errors(); - - @JsonProperty("LOB") - int leftOnBase(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/Situation.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/Situation.java deleted file mode 100644 index b3b7b90..0000000 --- a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/Situation.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.sundbybergheat.baseballstreaming.models.wbsc; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Style; -import org.jetbrains.annotations.Nullable; - -@Immutable -@JsonSerialize(as = SituationImpl.class) -@JsonDeserialize(as = SituationImpl.class) -@Style(jdkOnly = true, typeImmutable = "*Impl") -public interface Situation { - String inning(); - - String uniform(); - - String gender(); - - String batter(); - - @JsonProperty("batterid") - String batterId(); - - @Nullable - Arm bats(); - - String batting(); - - String avg(); - - String pitcher(); - - @JsonProperty("pitcherid") - String pitcherId(); - - @JsonProperty("pitcherthrows") - @Nullable - Arm pitcherThrows(); - - @JsonProperty("pitcherera") - String pitcherERA(); - - @JsonProperty("pitcherip") - String pitcherIP(); - - int runner1(); - - int runner2(); - - int runner3(); - - int outs(); - - int balls(); - - int strikes(); - - @JsonProperty("currentinning") - String currentInning(); -} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/Animation.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/Animation.java new file mode 100644 index 0000000..888bf55 --- /dev/null +++ b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/Animation.java @@ -0,0 +1,9 @@ +package org.sundbybergheat.baseballstreaming.models.wbsc.play; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Optional; + +public record Animation( + @JsonProperty("batter") Optional batter, + @JsonProperty("strike") Optional strike, + @JsonProperty("ball") Optional ball) {} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/LineScore.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/LineScore.java new file mode 100644 index 0000000..2d47322 --- /dev/null +++ b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/LineScore.java @@ -0,0 +1,17 @@ +package org.sundbybergheat.baseballstreaming.models.wbsc.play; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; +import io.vavr.control.Either; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +public record LineScore( + @JsonProperty("awayruns") @JsonSetter(nulls = Nulls.AS_EMPTY) + Either, Map> awayRuns, + @JsonProperty("awaytotals") Optional awayTotals, + @JsonProperty("homeruns") @JsonSetter(nulls = Nulls.AS_EMPTY) + Either, Map> homeRuns, + @JsonProperty("hometotals") Optional homeTotals) {} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/PlateCount.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/PlateCount.java new file mode 100644 index 0000000..392d1a9 --- /dev/null +++ b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/PlateCount.java @@ -0,0 +1,14 @@ +package org.sundbybergheat.baseballstreaming.models.wbsc.play; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; +import java.util.List; +import java.util.Optional; + +public record PlateCount( + @JsonProperty("id") Optional id, + @JsonProperty("type") Optional type, + @JsonProperty("label") Optional label, + @JsonProperty("pitch") Optional pitch, + @JsonProperty("coords") @JsonSetter(nulls = Nulls.AS_EMPTY) List coords) {} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/Play.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/Play.java new file mode 100644 index 0000000..5cee286 --- /dev/null +++ b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/Play.java @@ -0,0 +1,28 @@ +package org.sundbybergheat.baseballstreaming.models.wbsc.play; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +public record Play( + @JsonProperty("debug_lastplay") Optional debugLastPlay, + @JsonProperty("lastplayloaded") Optional lastPlayLoaded, + @JsonProperty("gameid") Optional gameId, + @JsonProperty("debugcode") Optional debugCode, + @JsonProperty("eventlocation") Optional eventLocation, + @JsonProperty("eventhome") Optional eventHome, + @JsonProperty("eventaway") Optional eventAway, + @JsonProperty("eventhomeid") Optional eventHomeId, + @JsonProperty("eventawayid") Optional eventAwayId, + @JsonProperty("eventurl") Optional eventUrl, + @JsonProperty("gameover") Optional gameOver, + @JsonProperty("innings") Optional innings, + @JsonProperty("platecount") @JsonSetter(nulls = Nulls.AS_EMPTY) List plateCount, + @JsonProperty("situation") Optional situation, + @JsonProperty("boxscore") @JsonSetter(nulls = Nulls.AS_EMPTY) Map boxScore, + @JsonProperty("linescore") Optional lineScore, + @JsonProperty("animation") Optional animation, + @JsonProperty("playdata") @JsonSetter(nulls = Nulls.AS_EMPTY) List playData) {} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/PlayData.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/PlayData.java new file mode 100644 index 0000000..378635c --- /dev/null +++ b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/PlayData.java @@ -0,0 +1,12 @@ +package org.sundbybergheat.baseballstreaming.models.wbsc.play; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Optional; + +public record PlayData( + @JsonProperty("t") Optional timestamp, + @JsonProperty("p") Optional pitcher, + @JsonProperty("n") Optional text, + @JsonProperty("b") Optional batter, + @JsonProperty("a") Optional atBat, + @JsonProperty("i") Optional inning) {} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/PlayWrapper.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/PlayWrapper.java new file mode 100644 index 0000000..45773ad --- /dev/null +++ b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/PlayWrapper.java @@ -0,0 +1,3 @@ +package org.sundbybergheat.baseballstreaming.models.wbsc.play; + +public record PlayWrapper(int number, Play play) {} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/Player.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/Player.java new file mode 100644 index 0000000..a8477c2 --- /dev/null +++ b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/Player.java @@ -0,0 +1,49 @@ +package org.sundbybergheat.baseballstreaming.models.wbsc.play; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Optional; + +public record Player( + @JsonProperty("name") Optional fullName, + @JsonProperty("firstname") Optional firstName, + @JsonProperty("lastname") Optional lastName, + @JsonProperty("playerid") Optional playerId, + @JsonProperty("teamid") Optional teamId, + @JsonProperty("teamcode") Optional teamCode, + @JsonProperty("image") Optional imageUrl, + @JsonProperty("inplay") Optional inPlay, + @JsonProperty("reentry") Optional reEntry, + @JsonProperty("POS") Optional position, + @JsonProperty("PA") Optional plateAppearances, + @JsonProperty("AB") Optional atBats, + @JsonProperty("R") Optional runs, + @JsonProperty("H") Optional hits, + @JsonProperty("RBI") Optional runsbattedIn, + @JsonProperty("BB") Optional walks, + @JsonProperty("SO") Optional strikeouts, + @JsonProperty("DOUBLE") Optional doubles, + @JsonProperty("TRIPLE") Optional triples, + @JsonProperty("HR") Optional homeruns, + @JsonProperty("SF") Optional sacFlies, + @JsonProperty("HBP") Optional hitByPitch, + @JsonProperty("SB") Optional stolenBases, + @JsonProperty("CS") Optional caughtStealing, + @JsonProperty("SEASON") Optional seasonStats, + @JsonProperty("LOB") Optional leftOnBase, + @JsonProperty("AVG") Optional battingAverage, + @JsonProperty("OBP") Optional onBasePercentage, + @JsonProperty("SLG") Optional slugging, + @JsonProperty("OPS") Optional onBasePercentagePlusSlugging, + @JsonProperty("PO") Optional putOuts, + @JsonProperty("A") Optional assists, + @JsonProperty("E") Optional errors, + @JsonProperty("PITCHIP") Optional inningsPitched, + @JsonProperty("PITCHER") Optional earnedRuns, + @JsonProperty("PITCHR") Optional pitcherRuns, + @JsonProperty("PITCHH") Optional pitcherHits, + @JsonProperty("PITCHBB") Optional pitcherWalks, + @JsonProperty("PITCHSO") Optional pitcherStrikeouts, + @JsonProperty("PITCHES") Optional pitches, + @JsonProperty("STRIKES") Optional strikes, + @JsonProperty("PITCHOUTS") Optional outs, + @JsonProperty("ERA") Optional earnedRunsAverage) {} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/PlayerSeasonStats.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/PlayerSeasonStats.java new file mode 100644 index 0000000..9d0736d --- /dev/null +++ b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/PlayerSeasonStats.java @@ -0,0 +1,19 @@ +package org.sundbybergheat.baseballstreaming.models.wbsc.play; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Optional; + +public record PlayerSeasonStats( + @JsonProperty("PA") Optional plateAppearances, + @JsonProperty("AB") Optional atBats, + @JsonProperty("H") Optional hits, + @JsonProperty("BB") Optional walks, + @JsonProperty("DOUBLE") Optional doubles, + @JsonProperty("TRIPLE") Optional triples, + @JsonProperty("HR") Optional homeruns, + @JsonProperty("SF") Optional sacFlies, + @JsonProperty("HBP") Optional hitByPitch, + @JsonProperty("PITCHER") Optional earnedRuns, + @JsonProperty("PITCHOUTS") Optional outs, + @JsonProperty("PITCHBB") Optional pitcherWalks, + @JsonProperty("PITCHSO") Optional pitcherStrikeouts) {} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/Situation.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/Situation.java new file mode 100644 index 0000000..125b842 --- /dev/null +++ b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/Situation.java @@ -0,0 +1,27 @@ +package org.sundbybergheat.baseballstreaming.models.wbsc.play; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Optional; + +public record Situation( + @JsonProperty("inning") Optional inning, + @JsonProperty("uniform") Optional uniform, + @JsonProperty("gender") Optional gender, + @JsonProperty("batter") Optional batter, + @JsonProperty("batterid") Optional batterId, + @JsonProperty("bats") Optional bats, + @JsonProperty("batting") Optional batting, + @JsonProperty("avg") Optional avg, + @JsonProperty("pitcher") Optional pitcher, + @JsonProperty("pitcherid") Optional pitcherId, + @JsonProperty("pitcherthrows") Optional pitcherThrows, + @JsonProperty("pitcherera") Optional pitcherERA, + @JsonProperty("pitcherip") Optional pitcherIP, + @JsonProperty("runner1") Optional runnerOnFirst, + @JsonProperty("runner2") Optional runnerOnSecond, + @JsonProperty("runner3") Optional runnerOnThird, + @JsonProperty("outs") Optional outs, + @JsonProperty("balls") Optional balls, + @JsonProperty("strikes") Optional strikes, + @JsonProperty("extrainnings") Optional extraInnings, + @JsonProperty("currentinning") Optional currentInning) {} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/Totals.java b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/Totals.java new file mode 100644 index 0000000..e73407d --- /dev/null +++ b/src/main/java/org/sundbybergheat/baseballstreaming/models/wbsc/play/Totals.java @@ -0,0 +1,10 @@ +package org.sundbybergheat.baseballstreaming.models.wbsc.play; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Optional; + +public record Totals( + @JsonProperty("R") Optional runs, + @JsonProperty("H") Optional hits, + @JsonProperty("E") Optional errors, + @JsonProperty("LOB") Optional leftOnBase) {} diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/services/BatterTools.java b/src/main/java/org/sundbybergheat/baseballstreaming/services/BatterTools.java index 0815daf..781a1a6 100644 --- a/src/main/java/org/sundbybergheat/baseballstreaming/services/BatterTools.java +++ b/src/main/java/org/sundbybergheat/baseballstreaming/services/BatterTools.java @@ -2,146 +2,184 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; -import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.sundbybergheat.baseballstreaming.models.stats.AllStats; -import org.sundbybergheat.baseballstreaming.models.stats.BatterStats; -import org.sundbybergheat.baseballstreaming.models.stats.SeriesStats; -import org.sundbybergheat.baseballstreaming.models.wbsc.BoxScore; -import org.sundbybergheat.baseballstreaming.models.wbsc.BoxScoreImpl; -import org.sundbybergheat.baseballstreaming.models.wbsc.Play; -import org.sundbybergheat.baseballstreaming.models.wbsc.PlayData; +import org.apache.commons.lang3.math.NumberUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.sundbybergheat.baseballstreaming.models.wbsc.play.Play; +import org.sundbybergheat.baseballstreaming.models.wbsc.play.PlayData; +import org.sundbybergheat.baseballstreaming.models.wbsc.play.Player; +import org.sundbybergheat.baseballstreaming.models.wbsc.play.PlayerSeasonStats; public class BatterTools { - public static BoxScore aggregatedBoxScore(final String playerId, final Play play) { + private static final Logger LOG = LoggerFactory.getLogger(BatterTools.class); + + public static Optional aggregatedBoxScore(final String playerId, final Play play) { return play.boxScore().entrySet().stream() .filter(kv -> kv.getKey().startsWith("10") || kv.getKey().startsWith("20")) .map(kv -> kv.getValue()) - .filter(bs -> playerId.equals(bs.playerId())) + .filter(bs -> playerId.equals(bs.playerId().orElse(""))) .reduce( (a, b) -> - BoxScoreImpl.builder() - .firstName(a.firstName()) - .lastName(a.lastName()) - .name(a.name()) - .teamId(a.teamId()) - .teamCode(a.teamCode()) - .image(a.image()) - .inPlay(a.inPlay()) - .position( + new Player( + a.fullName(), + a.firstName(), + a.lastName(), + a.playerId(), + a.teamId(), + a.teamCode(), + a.imageUrl(), + a.inPlay(), + addNumbers(a.reEntry(), b.reEntry()), + Optional.of( String.join( "/", Stream.concat( Arrays.stream(a.position().orElse("").split("/")), Arrays.stream(b.position().orElse("").split("/"))) - .collect(Collectors.toSet()))) - .reentry(a.reentry() + b.reentry()) - .playerId(a.playerId()) - .assists(a.assists() + b.assists()) - .atBats(a.atBats().orElse(0) + b.atBats().orElse(0)) - .caughtStealing(a.caughtStealing().orElse(0) + b.caughtStealing().orElse(0)) - .doubles(a.doubles().orElse(0) + b.doubles().orElse(0)) - .errors(a.errors() + b.errors()) - .hits(a.hits().orElse(0) + b.hits().orElse(0)) - .homeruns(a.homeruns().orElse(0) + b.homeruns().orElse(0)) - .leftOnBase(a.leftOnBase().orElse(0) + b.leftOnBase().orElse(0)) - .putOuts(a.putOuts() + b.putOuts()) - .runs(a.runs().orElse(0) + b.runs().orElse(0)) - .runsBattedIn(a.runsBattedIn().orElse(0) + b.runsBattedIn().orElse(0)) - .stolenBases(a.stolenBases().orElse(0) + b.stolenBases().orElse(0)) - .strikeOuts(a.strikeOuts().orElse(0) + b.strikeOuts().orElse(0)) - .triples(a.triples().orElse(0) + b.triples().orElse(0)) - .walks(a.walks().orElse(0) + b.walks().orElse(0)) - .build()) - .get(); + .collect(Collectors.toSet()))), + addNumbers(a.plateAppearances(), b.plateAppearances()), + addNumbers(a.atBats(), b.atBats()), + addNumbers(a.runs(), b.runs()), + addNumbers(a.hits(), b.hits()), + addNumbers(a.runsbattedIn(), b.runsbattedIn()), + addNumbers(a.walks(), b.walks()), + addNumbers(a.strikeouts(), b.strikeouts()), + addNumbers(a.doubles(), b.doubles()), + addNumbers(a.triples(), b.triples()), + addNumbers(a.homeruns(), b.homeruns()), + addNumbers(a.sacFlies(), b.sacFlies()), + addNumbers(a.hitByPitch(), b.hitByPitch()), + addNumbers(a.stolenBases(), b.stolenBases()), + addNumbers(a.caughtStealing(), b.caughtStealing()), + a.seasonStats(), + addNumbers(a.leftOnBase(), b.leftOnBase()), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + addNumbers(a.putOuts(), b.putOuts()), + addNumbers(a.assists(), b.assists()), + addNumbers(a.errors(), b.errors()), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty())); } - private static List plateAppearances(final BoxScore batter, final Play play) { + private static List plateAppearances(final Player batter, final Play play) { + + if (batter.playerId().isEmpty()) { + LOG.error("Cannot fetch plate appearances for batter without ID. {}", batter); + return Collections.emptyList(); + } + + final String batterId = batter.playerId().get(); List batterPlays = play.playData().stream() .filter( pd -> - (pd.batter().startsWith("10") || pd.batter().startsWith("20")) - && batter.playerId().equals(play.boxScore().get(pd.batter()).playerId())) + (pd.batter().orElse("").startsWith("10") + || pd.batter().orElse("").startsWith("20")) + && batterId.equals( + play.boxScore().get(pd.batter().orElse("")).playerId().orElse(""))) .sorted( (a, b) -> { - int atBatCompare = Integer.parseInt(b.atBat()) - Integer.parseInt(a.atBat()); + int atBatCompare = + NumberUtils.toInt(b.atBat().orElse("0")) + - NumberUtils.toInt((a.atBat().orElse("0"))); if (atBatCompare != 0) { return atBatCompare; } - return Long.valueOf(b.timestamp() - a.timestamp()).intValue(); + return Long.valueOf( + NumberUtils.toLong(b.timestamp().orElse("0")) + - NumberUtils.toLong(a.timestamp().orElse("0"))) + .intValue(); }) .collect(Collectors.toList()); List plateApperances = batterPlays.stream() - .filter(bp -> bp.text().toLowerCase().startsWith(batter.name().toLowerCase())) + .filter( + bp -> + bp.text() + .orElse("") + .toLowerCase() + .startsWith(batter.fullName().orElse("").toLowerCase())) .collect(Collectors.toList()); return plateApperances; } - public static String batterNarrative( - final BoxScore batter, - final Map stats, - final String seriesId, - final Play play) { + public static String batterNarrative(final Player batter, final Play play) { List plateApperances = plateAppearances(batter, play); - if (plateApperances.size() > 0) { + if (batter.plateAppearances().map(pa -> NumberUtils.toInt(pa)).orElse(0) > 0) { return summaryOfGame(batter, plateApperances); } - return summaryOfSeries(stats, batter.playerId(), seriesId); + if (batter.seasonStats().isPresent()) { + return summaryOfSeason(batter.seasonStats().get()); + } + return ""; } - public static String batterNarrative( - final BoxScore batter, final SeriesStats stats, final Play play) { - List plateApperances = plateAppearances(batter, play); - if (plateApperances.size() > 0) { - return summaryOfGame(batter, plateApperances); - } - return summaryOfSeries(stats); + public static String batterNarrativeTitle(final Player batter) { + return batter.plateAppearances().map(pa -> NumberUtils.toInt(pa)).orElse(0) > 0 + ? "In This Game" + : "This Season"; } - public static String batterNarrativeTitle( - final BoxScore batter, final Play play, final String seriesName) { - List plateApperances = plateAppearances(batter, play); - if (plateApperances.size() > 0) { - return "In This Game"; + private static String summaryOfGame(final Player batter, final List plateApperances) { + + int plateAppearances = batter.plateAppearances().map(x -> NumberUtils.toInt(x)).orElse(0); + int atBats = batter.atBats().map(x -> NumberUtils.toInt(x)).orElse(0); + int hits = batter.hits().map(x -> NumberUtils.toInt(x)).orElse(0); + int homeruns = batter.homeruns().map(x -> NumberUtils.toInt(x)).orElse(0); + int triples = batter.triples().map(x -> NumberUtils.toInt(x)).orElse(0); + int doubles = batter.doubles().map(x -> NumberUtils.toInt(x)).orElse(0); + int strikeouts = batter.strikeouts().map(x -> NumberUtils.toInt(x)).orElse(0); + int walks = batter.walks().map(x -> NumberUtils.toInt(x)).orElse(0); + int hitByPitch = batter.hitByPitch().map(x -> NumberUtils.toInt(x)).orElse(0); + int stolenBases = batter.stolenBases().map(x -> NumberUtils.toInt(x)).orElse(0); + int runsbattedIn = batter.runsbattedIn().map(x -> NumberUtils.toInt(x)).orElse(0); + int runs = batter.runs().map(x -> NumberUtils.toInt(x)).orElse(0); + + if (plateAppearances == 0) { + return "First plate appearance"; } - return seriesName; - } - private static String summaryOfGame(final BoxScore batter, final List plateApperances) { List summary = new ArrayList(); - if (batter.atBats().orElse(0) > 0) { - summary.add(String.format("%d for %d", batter.hits().orElse(0), batter.atBats().orElse(0))); + if (atBats > 0) { + summary.add(String.format("%s for %s", hits, atBats)); - if (batter.hits().orElse(0) > 0) { - if (batter.homeruns().orElse(0) > 1) { - summary.add(batter.homeruns().get() + " HOME RUNS"); - } else if (batter.homeruns().orElse(0) == 1) { + if (hits > 0) { + if (homeruns > 1) { + summary.add(homeruns + " HOME RUNS"); + } else if (homeruns == 1) { summary.add("HOME RUN"); } - if (batter.triples().orElse(0) > 1) { - summary.add(batter.triples().get() + " TRIPLES"); - } else if (batter.triples().orElse(0) == 1) { + if (triples > 1) { + summary.add(triples + " TRIPLES"); + } else if (triples == 1) { summary.add("TRIPLE"); } - if (batter.doubles().orElse(0) > 1) { - summary.add(batter.doubles().get() + " DOUBLES"); - } else if (batter.doubles().orElse(0) == 1) { + if (doubles > 1) { + summary.add(doubles + " DOUBLES"); + } else if (doubles == 1) { summary.add("DOUBLE"); } - int singles = - batter.hits().orElse(0) - - batter.homeruns().orElse(0) - - batter.triples().orElse(0) - - batter.doubles().orElse(0); + int singles = hits - homeruns - triples - doubles; if (singles > 1) { summary.add(singles + " SINGLES"); @@ -151,7 +189,7 @@ private static String summaryOfGame(final BoxScore batter, final List } else { long sacFlies = plateApperances.stream() - .filter(pa -> pa.text().toLowerCase().contains("sacrifice fly")) + .filter(pa -> pa.text().orElse("").toLowerCase().contains("sacrifice fly")) .count(); if (sacFlies > 1) { summary.add(sacFlies + " SAC FLIES"); @@ -161,7 +199,7 @@ private static String summaryOfGame(final BoxScore batter, final List long sacHits = plateApperances.stream() - .filter(pa -> pa.text().toLowerCase().contains("sacrifice hit")) + .filter(pa -> pa.text().orElse("").toLowerCase().contains("sacrifice hit")) .count(); if (sacHits > 1) { summary.add(sacHits + " SAC HITS"); @@ -169,15 +207,17 @@ private static String summaryOfGame(final BoxScore batter, final List summary.add("SAC HIT"); } - if (batter.strikeOuts().orElse(0) > 1) { - summary.add(batter.strikeOuts().get() + " STRIKEOUTS"); - } else if (batter.strikeOuts().orElse(0) == 1) { + if (strikeouts > 1) { + summary.add(strikeouts + " STRIKEOUTS"); + } else if (strikeouts == 1) { summary.add("STRIKEOUT"); } long flyOuts = plateApperances.stream() - .filter(pa -> pa.text().toLowerCase().contains("flies out")) + .filter(pa -> pa.text().orElse("").toLowerCase().contains("flies out")) + // Don't count sac fly as fly out. + .filter(pa -> !pa.text().orElse("").toLowerCase().contains("sacrifice fly")) .count(); if (flyOuts > 1) { summary.add(flyOuts + " FLYOUTS"); @@ -187,7 +227,7 @@ private static String summaryOfGame(final BoxScore batter, final List long groundOuts = plateApperances.stream() - .filter(pa -> pa.text().toLowerCase().contains("grounds out")) + .filter(pa -> pa.text().orElse("").toLowerCase().contains("grounds out")) .count(); if (groundOuts > 1) { summary.add(groundOuts + " GROUNDOUTS"); @@ -197,7 +237,8 @@ private static String summaryOfGame(final BoxScore batter, final List long gdp = plateApperances.stream() - .filter(pa -> pa.text().toLowerCase().contains("hits into a double play")) + .filter( + pa -> pa.text().orElse("").toLowerCase().contains("hits into a double play")) .count(); if (gdp > 1) { summary.add(gdp + " GDP"); @@ -207,24 +248,19 @@ private static String summaryOfGame(final BoxScore batter, final List } } - if (batter.walks().orElse(0) > 1) { - summary.add(batter.walks().get() + " WALKS"); - } else if (batter.walks().orElse(0) == 1) { + if (walks > 1) { + summary.add(walks + " WALKS"); + } else if (walks == 1) { summary.add("WALK"); } - long hbp = - plateApperances.stream() - .filter(pa -> pa.text().toLowerCase().contains("hit by pitch")) - .count(); - - if (hbp > 0) { + if (hitByPitch > 0) { summary.add("HIT BY PITCH"); } long roe = plateApperances.stream() - .filter(pa -> pa.text().matches(".*reaches on [ a-z]*error.*")) + .filter(pa -> pa.text().orElse("").matches(".*reaches on [ a-z]*error.*")) .count(); if (roe > 0) { summary.add("REACH ON ERROR"); @@ -232,15 +268,15 @@ private static String summaryOfGame(final BoxScore batter, final List long fc = plateApperances.stream() - .filter(pa -> pa.text().toLowerCase().contains("reaches on fielders choice")) + .filter(pa -> pa.text().orElse("").toLowerCase().contains("reaches on fielders choice")) .count(); if (fc > 0) { summary.add("FIELDER'S CHOICE"); } - if (batter.stolenBases().orElse(0) > 1) { - summary.add(batter.stolenBases().get() + " STOLEN BASES"); - } else if (batter.stolenBases().orElse(0) == 1) { + if (stolenBases > 1) { + summary.add(stolenBases + " STOLEN BASES"); + } else if (stolenBases == 1) { summary.add("STOLEN BASE"); } @@ -248,107 +284,56 @@ private static String summaryOfGame(final BoxScore batter, final List summary = summary.subList(0, 4); } - if (batter.runsBattedIn().orElse(0) > 1) { - summary.add(batter.runsBattedIn().get() + " RBI"); - } else if (batter.runsBattedIn().orElse(0) == 1) { + if (runsbattedIn > 1) { + summary.add(runsbattedIn + " RBI"); + } else if (runsbattedIn == 1) { summary.add("RBI"); } - if (batter.runs().orElse(0) > 1) { - summary.add(batter.runs().get() + " RUNS"); - } else if (batter.runs().orElse(0) == 1) { + if (runs > 1) { + summary.add(runs + " RUNS"); + } else if (runs == 1) { summary.add("RUN"); } if (summary.size() > 0) { return String.join(", ", summary); } - return "First plate appearance"; - } - - private static String summaryOfSeries( - final Map stats, final String playerId, final String seriesId) { - - final SeriesStats thisSeriesStats = stats.get(playerId).seriesStats().get(seriesId); - - if (seriesContainsEnoughStats(thisSeriesStats)) { - return String.format("This season: %s", summaryOfSeries(thisSeriesStats)); - } - - if (thisSeriesStats != null) { - final Optional lastSeason = - stats.get(playerId).seriesStats().values().stream() - .filter( - ss -> - !ss.id().equals(seriesId) - && !ss.otherSeries() - && thisSeriesStats.year().orElse(0) - 1 == ss.year().orElse(0)) - .findFirst(); - - if (lastSeason.map(ls -> seriesContainsEnoughStats(ls)).orElse(false)) { - return String.format("Last season: %s", summaryOfSeries(lastSeason.get())); - } - } - - final List otherSeries = - stats.get(playerId).seriesStats().values().stream() - .filter(ss -> !ss.id().equals(seriesId) && ss.otherSeries()) - .sorted((a, b) -> b.year().orElse(0) - a.year().orElse(0)) - .collect(Collectors.toList()); - - for (SeriesStats other : otherSeries) { - if (seriesContainsEnoughStats(other)) { - return String.format("%s:\n %s", other.seriesName(), summaryOfSeries(other)); - } - } return ""; } - private static boolean seriesContainsEnoughStats(final SeriesStats seriesStats) { - if (seriesStats == null || seriesStats.batting().isEmpty()) { - return false; - } - BatterStats stats = seriesStats.batting().get(); - - final Integer atBats = stats.atBats(); - final Integer walksAndHitByPitch = stats.walks() + stats.hitByPitch(); + private static String summaryOfSeason(final PlayerSeasonStats stats) { final Integer plateAppearances = - atBats + walksAndHitByPitch + stats.sacrificeFlies() + stats.sacrificeHits(); - if (plateAppearances == 0 && ".000".equals(stats.onBasePercentage())) { - return false; - } - return true; - } - - private static String summaryOfSeries(final SeriesStats seriesStats) { - if (seriesStats == null || seriesStats.batting() == null || seriesStats.batting().isEmpty()) { + stats.plateAppearances().map(x -> NumberUtils.toInt(x)).orElse(0); + final Integer atBats = stats.atBats().map(x -> NumberUtils.toInt(x)).orElse(0); + final Integer hits = stats.hits().map(x -> NumberUtils.toInt(x)).orElse(0); + final Integer walks = stats.walks().map(x -> NumberUtils.toInt(x)).orElse(0); + final Integer doubles = stats.doubles().map(x -> NumberUtils.toInt(x)).orElse(0); + final Integer triples = stats.triples().map(x -> NumberUtils.toInt(x)).orElse(0); + final Integer homeruns = stats.homeruns().map(x -> NumberUtils.toInt(x)).orElse(0); + final Integer hitByPitch = stats.hitByPitch().map(x -> NumberUtils.toInt(x)).orElse(0); + + if (plateAppearances == 0) { return "First plate appearance"; } - BatterStats stats = seriesStats.batting().get(); - - final Integer atBats = stats.atBats(); - final Integer walksAndHitByPitch = stats.walks() + stats.hitByPitch(); - final Integer stolenBases = stats.stolenBases(); - final Integer plateAppearances = - atBats + walksAndHitByPitch + stats.sacrificeFlies() + stats.sacrificeHits(); - final List summary = new ArrayList(); - if (plateAppearances == 0 && ".000".equals(stats.onBasePercentage())) { - return "First plate appearance"; + if (atBats > 0) { + summary.add(String.format("%d for %d", hits, atBats)); } - if (atBats > 0) { - summary.add(String.format("%d for %d", stats.hits(), atBats)); + if (homeruns > 0) { + summary.add(String.format("%d HOMERUN%s", homeruns, homeruns > 1 ? "S" : "")); } - if (stats.homeruns() > 0) { - summary.add(String.format("%d HOMERUN%s", stats.homeruns(), stats.homeruns() > 1 ? "S" : "")); + if (summary.size() > 1) { + return String.format( + "%s %s", summary.get(0), String.join(", ", summary.subList(1, summary.size()))); } - if (stolenBases > 2 && stolenBases.doubleValue() / plateAppearances.doubleValue() > 0.2) { - summary.add(String.format("%d STOLEN BASES", stolenBases)); + if (doubles + triples + homeruns > 1) { + summary.add(String.format("%d EXTRA BASE HITS", doubles + triples + homeruns)); } if (summary.size() > 1) { @@ -356,16 +341,20 @@ private static String summaryOfSeries(final SeriesStats seriesStats) { "%s %s", summary.get(0), String.join(", ", summary.subList(1, summary.size()))); } - if (stats.walks() > 0) { - summary.add(String.format("%d WALK%s", stats.walks(), stats.walks() > 1 ? "S" : "")); + if (walks > 0) { + summary.add(String.format("%d WALK%s", walks, walks > 1 ? "S" : "")); } - if (stats.hitByPitch() > 0) { - summary.add( - String.format( - "HIT BY PITCH %d TIME%s", stats.hitByPitch(), stats.hitByPitch() > 1 ? "S" : "")); + if (hitByPitch > 1) { + summary.add(String.format("HIT BY PITCH %d TIMES", hitByPitch)); } return String.join(", ", summary); } + + private static Optional addNumbers(Optional maybeA, Optional maybeB) { + int a = maybeA.map(x -> NumberUtils.toInt(x)).orElse(0); + int b = maybeB.map(x -> NumberUtils.toInt(x)).orElse(0); + return Optional.of("%d".formatted(a + b)); + } } diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/services/FilesService.java b/src/main/java/org/sundbybergheat/baseballstreaming/services/FilesService.java index e95d985..c5b0963 100644 --- a/src/main/java/org/sundbybergheat/baseballstreaming/services/FilesService.java +++ b/src/main/java/org/sundbybergheat/baseballstreaming/services/FilesService.java @@ -1,67 +1,31 @@ package org.sundbybergheat.baseballstreaming.services; import java.io.IOException; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.util.Collection; +import java.net.URI; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.math.NumberUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.sundbybergheat.baseballstreaming.clients.FilesClient; -import org.sundbybergheat.baseballstreaming.clients.StatsClient; -import org.sundbybergheat.baseballstreaming.models.stats.AllStats; -import org.sundbybergheat.baseballstreaming.models.stats.BatterStats; -import org.sundbybergheat.baseballstreaming.models.stats.PitcherStats; -import org.sundbybergheat.baseballstreaming.models.stats.SeriesId; -import org.sundbybergheat.baseballstreaming.models.stats.SeriesIdImpl; -import org.sundbybergheat.baseballstreaming.models.stats.SeriesStats; -import org.sundbybergheat.baseballstreaming.models.stats.StatsException; -import org.sundbybergheat.baseballstreaming.models.wbsc.BoxScore; -import org.sundbybergheat.baseballstreaming.models.wbsc.Play; +import org.sundbybergheat.baseballstreaming.models.wbsc.play.Play; +import org.sundbybergheat.baseballstreaming.models.wbsc.play.Player; +import org.sundbybergheat.baseballstreaming.models.wbsc.play.PlayerSeasonStats; public class FilesService { private static final Logger LOG = LoggerFactory.getLogger(FilesService.class); - private static final int MINIMUM_GAMES_BATTING_STATS = 2; - private static final int MINIMUM_APPEARANCES_PITCHING_STATS = 3; - private Play play = null; private final FilesClient filesClient; - private final StatsClient statsClient; - private final String seriesId; - private final boolean onlyUseThisSeriesStats; - - private Map stats = new HashMap(); - private String inHoleBatter = null; - - public FilesService( - final FilesClient filesClient, - final StatsClient statsClient, - final String seriesId, - final boolean onlyUseThisSeriesStats) { + + public FilesService(final FilesClient filesClient) { this.filesClient = filesClient; - this.statsClient = statsClient; - this.seriesId = seriesId; - this.onlyUseThisSeriesStats = onlyUseThisSeriesStats; } public void initResources() throws IOException { - - if (!filesClient.fileExists("baseball-streaming-all-overlays.json")) { - String obsScenes = - IOUtils.resourceToString( - "/obs/baseball-streaming-all-overlays.json", StandardCharsets.UTF_8); - filesClient.writeStringToFile( - "baseball-streaming-all-overlays.json", - obsScenes.replace("[PATH_TO_OBS_RESOURCE_DIR]", filesClient.getResourceBasePath())); - } filesClient.copyFileFromResource("/bases/ooo.png", "bases/ooo.png"); filesClient.copyFileFromResource("/bases/oox.png", "bases/oox.png"); filesClient.copyFileFromResource("/bases/oxo.png", "bases/oxo.png"); @@ -90,15 +54,22 @@ public void initResources() throws IOException { } catch (IOException e) { LOG.error("Unable to write team color file for {}", entry.getKey(), e); } + try { + filesClient.copyFileFromResource( + "/images/team_flags/%s.png".formatted(entry.getKey()), + "team_resources/flags/%s.png".formatted(entry.getKey())); + } catch (IOException e) { + LOG.debug("Unable to find club flag file for {}", entry.getKey(), e); + } }); } - protected void updatePlay(final Play play) throws StatsException { + protected void updatePlay(final Play play) { this.play = play; updateState(); } - private void updateState() throws StatsException { + private void updateState() { try { updateScoreBoard(); updateLineups(); @@ -111,625 +82,410 @@ private void updateState() throws StatsException { } } + private void copyFileByPriority( + final String pattern, final List fileNames, final String to) throws IOException { + for (String fileName : fileNames) { + if (fileName != null && fileName.length() > 0) { + final String from = pattern.formatted(fileName); + if (filesClient.fileExists(from)) { + filesClient.copyFile(from, to); + return; + } + } + } + } + private void updateScoreBoard() throws IOException { - String homeColorFile = String.format("team_resources/colors/%s.png", play.eventHome()); - String awayColorFile = String.format("team_resources/colors/%s.png", play.eventAway()); - String homeFlagFile = String.format("team_resources/flags/%s.png", play.eventHomeId()); - String awayFlagFile = String.format("team_resources/flags/%s.png", play.eventAwayId()); - String defaultHomeColorFile = "team_resources/colors/default_home.png"; - String defaultAwayColorFile = "team_resources/colors/default_away.png"; - String defaultFlagFile = "team_resources/flags/default.png"; - - filesClient.copyFile( - filesClient.fileExists(homeColorFile) ? homeColorFile : defaultHomeColorFile, - "home_color.png"); - filesClient.copyFile( - filesClient.fileExists(awayColorFile) ? awayColorFile : defaultAwayColorFile, - "away_color.png"); - filesClient.copyFile( - filesClient.fileExists(homeFlagFile) ? homeFlagFile : defaultFlagFile, "home_flag.png"); - filesClient.copyFile( - filesClient.fileExists(awayFlagFile) ? awayFlagFile : defaultFlagFile, "away_flag.png"); - filesClient.writeStringToFile("home_team.txt", play.eventHome()); - filesClient.writeStringToFile("away_team.txt", play.eventAway()); - filesClient.writeStringToFile( - "home_score.txt", Integer.toString(play.lineScore().homeTotals().runs())); - filesClient.writeStringToFile( - "away_score.txt", Integer.toString(play.lineScore().awayTotals().runs())); - filesClient.writeStringToFile( - "home_hits.txt", Integer.toString(play.lineScore().homeTotals().hits())); - filesClient.writeStringToFile( - "away_hits.txt", Integer.toString(play.lineScore().awayTotals().hits())); - filesClient.writeStringToFile( - "home_errors.txt", Integer.toString(play.lineScore().homeTotals().errors())); - filesClient.writeStringToFile( - "away_errors.txt", Integer.toString(play.lineScore().awayTotals().errors())); + + copyFileByPriority( + "team_resources/colors/%s.png", + List.of(play.eventHome().orElse(""), "default_home"), "home_color.png"); + copyFileByPriority( + "team_resources/colors/%s.png", + List.of(play.eventAway().orElse(""), "default_away"), "away_color.png"); + copyFileByPriority( + "team_resources/flags/%s.png", + List.of(play.eventHomeId().orElse(""), play.eventHome().orElse(""), "default"), + "home_flag.png"); + copyFileByPriority( + "team_resources/flags/%s.png", + List.of(play.eventAwayId().orElse(""), play.eventAway().orElse(""), "default"), + "away_flag.png"); + + filesClient.writeStringToFile("home_team.txt", play.eventHome().orElse("HOME")); + filesClient.writeStringToFile("away_team.txt", play.eventAway().orElse("AWAY")); + + final Map lineScore = new HashMap<>(6); + + play.lineScore() + .ifPresent( + ls -> { + ls.homeTotals() + .ifPresent( + ht -> { + lineScore.put("homeScore", ht.runs().orElse("0")); + lineScore.put("homeHits", ht.hits().orElse("0")); + lineScore.put("homeErrors", ht.errors().orElse("0")); + }); + ls.awayTotals() + .ifPresent( + at -> { + lineScore.put("awayScore", at.runs().orElse("0")); + lineScore.put("awayHits", at.hits().orElse("0")); + lineScore.put("awayErrors", at.errors().orElse("0")); + }); + }); + + filesClient.writeStringToFile("home_score.txt", lineScore.getOrDefault("homeScore", "0")); + filesClient.writeStringToFile("away_score.txt", lineScore.getOrDefault("awayScore", "0")); + filesClient.writeStringToFile("home_hits.txt", lineScore.getOrDefault("homeHits", "0")); + filesClient.writeStringToFile("away_hits.txt", lineScore.getOrDefault("awayHits", "0")); + filesClient.writeStringToFile("home_errors.txt", lineScore.getOrDefault("homeErrors", "0")); + filesClient.writeStringToFile("away_errors.txt", lineScore.getOrDefault("awayErrors", "0")); updateBases(); updateOuts(); - if (!"FINAL".equals(play.situation().currentInning())) { + String currentInning = play.situation().map(s -> s.currentInning().orElse("")).orElse(""); + if (!"FINAL".equals(currentInning)) { filesClient.writeStringToFile( - "inning_half.txt", - play.situation().currentInning().startsWith("TOP") ? "\u25B2" : "\u25BC"); - filesClient.writeStringToFile("inning.txt", play.situation().currentInning().split(" ")[1]); + "inning_half.txt", currentInning.startsWith("TOP") ? "\u25B2" : "\u25BC"); + List innningParts = List.of(currentInning.split(" ")); + String inning = innningParts.size() > 1 ? innningParts.get(1) : ""; + filesClient.writeStringToFile("inning.txt", inning); } - filesClient.writeStringToFile("inning_text.txt", play.situation().currentInning()); + filesClient.writeStringToFile("inning_text.txt", currentInning); + + final Map situation = new HashMap<>(2); + + play.situation() + .ifPresent( + s -> { + situation.put("balls", s.balls().orElse("0")); + situation.put("strikes", s.strikes().orElse("0")); + }); + filesClient.writeStringToFile( "count.txt", - String.format("%d - %d", play.situation().balls(), play.situation().strikes())); - filesClient.writeStringToFile("balls.txt", Integer.toString(play.situation().balls())); - filesClient.writeStringToFile("strikes.txt", Integer.toString(play.situation().strikes())); + String.format( + "%s - %s", + situation.getOrDefault("balls", "0"), situation.getOrDefault("strikes", "0"))); + filesClient.writeStringToFile("balls.txt", situation.getOrDefault("balls", "0")); + filesClient.writeStringToFile("strikes.txt", situation.getOrDefault("strikes", "0")); } private void updateBases() throws IOException { + final Map runners = new HashMap<>(3); String basesTarget = "bases.png"; - char first = play.situation().runner1() > 0 ? 'x' : 'o'; - char second = play.situation().runner2() > 0 ? 'x' : 'o'; - char third = play.situation().runner3() > 0 ? 'x' : 'o'; - String basesSource = String.format("bases/%c%c%c.png", third, second, first); + play.situation() + .ifPresent( + s -> { + runners.put("first", "0".equals(s.runnerOnFirst().orElse("0")) ? 'o' : 'x'); + runners.put("second", "0".equals(s.runnerOnSecond().orElse("0")) ? 'o' : 'x'); + runners.put("third", "0".equals(s.runnerOnThird().orElse("0")) ? 'o' : 'x'); + }); + String basesSource = + String.format( + "bases/%c%c%c.png", + runners.getOrDefault("third", 'o'), + runners.getOrDefault("second", 'o'), + runners.getOrDefault("first", 'o')); filesClient.copyFile(basesSource, basesTarget); } private void updateOuts() throws IOException { + String outs = play.situation().flatMap(s -> s.outs()).orElse("0"); + filesClient.writeStringToFile("outs.txt", outs); String outsTarget = "outs.png"; - if (play.situation().outs() == 1) { + if ("1".equals(outs)) { filesClient.copyFile("outs/1.png", outsTarget); - } else if (play.situation().outs() == 2) { + } else if ("2".equals(outs)) { filesClient.copyFile("outs/2.png", outsTarget); } else { filesClient.copyFile("outs/0.png", outsTarget); } } - private void updateCurrentPitcher() throws IOException, StatsException { - BoxScore pitcher = + private void updateCurrentPitcher() throws IOException { + String currentInning = play.situation().map(s -> s.currentInning().orElse("")).orElse(""); + + Optional pitcher = play.boxScore().entrySet().stream() - .filter( - kv -> - kv.getKey() - .startsWith( - play.situation().currentInning().startsWith("TOP") ? "29" : "19")) + .filter(kv -> kv.getKey().startsWith(currentInning.startsWith("TOP") ? "29" : "19")) .sorted((a, b) -> Integer.parseInt(b.getKey()) - Integer.parseInt(a.getKey())) .findFirst() - .map(kv -> kv.getValue()) - .get(); - updatePitcher(pitcher, "current_pitcher"); - } - - private void updatePitcher(final BoxScore pitcher, final String subdir) - throws IOException, StatsException { - filesClient.writeStringToFile( - subdir + "/count.txt", pitcher.pitches().map(p -> String.format("P: %d", p)).orElse("")); - - filesClient.writeStringToFile(subdir + "/firstname.txt", pitcher.firstName()); - filesClient.writeStringToFile(subdir + "/fullname.txt", pitcher.name()); - filesClient.writeStringToFile(subdir + "/lastname.txt", pitcher.lastName()); - if (!stats.containsKey(pitcher.playerId())) { - stats.put( - pitcher.playerId(), - statsClient.getPlayerStats( - pitcher.name(), - pitcher.playerId(), - pitcher.teamId(), - parseSeriesId(seriesId), - onlyUseThisSeriesStats)); - } + .map(kv -> kv.getValue()); - AllStats allStats = stats.get(pitcher.playerId()); - - // Update images - if (allStats.seriesStats().containsKey(seriesId)) { - updateImages( - subdir, allStats.seriesStats().get(seriesId), pitcher.teamId(), pitcher.playerId()); + if (pitcher.isPresent()) { + updatePitcher(pitcher.get(), "current_pitcher"); } else { - filesClient.copyFile("team_resources/player_images/default.png", subdir + "/image.png"); - filesClient.copyFile("team_resources/flags/default.png", subdir + "/flag.png"); + LOG.error("Failed to find current pitcher."); } + } - SeriesStats selectedSeries = - onlyUseThisSeriesStats - ? allStats.seriesStats().get(seriesId) - : selectSeriesPitching(allStats, seriesId); - - filesClient.writeStringToFile( - subdir + "/pitching.txt", PitcherTools.pitcherNarrative(pitcher, stats, seriesId)); + private void updatePitcher(final Player pitcher, final String subdir) throws IOException { filesClient.writeStringToFile( - subdir + "/pitching-title.txt", - PitcherTools.pitcherNarrativeTitle(pitcher, stats, seriesId)); - - if (selectedSeries == null || selectedSeries.pitching().isEmpty()) { - LOG.warn("No stats for pitcher {} (id={})", pitcher.name(), pitcher.playerId()); - filesClient.writeStringToFile(subdir + "/era.txt", "-"); - filesClient.writeStringToFile(subdir + "/games.txt", "0"); - filesClient.writeStringToFile(subdir + "/hits.txt", "0"); - filesClient.writeStringToFile(subdir + "/hrs-allowed.txt", "0"); - filesClient.writeStringToFile(subdir + "/innings.txt", "0.0"); - filesClient.writeStringToFile(subdir + "/strikeouts.txt", "0"); - filesClient.writeStringToFile(subdir + "/walks.txt", "0"); - filesClient.writeStringToFile(subdir + "/wins-losses.txt", "0 - 0"); - return; - } - PitcherStats pitcherStats = selectedSeries.pitching().get(); + subdir + "/count.txt", String.format("P: %s", pitcher.pitches().orElse("0"))); - filesClient.writeStringToFile(subdir + "/era.txt", pitcherStats.era()); - filesClient.writeStringToFile( - subdir + "/games.txt", Integer.toString(pitcherStats.appearances())); - filesClient.writeStringToFile( - subdir + "/hits.txt", Integer.toString(pitcherStats.hitsAllowed())); - filesClient.writeStringToFile( - subdir + "/hrs-allowed.txt", Integer.toString(pitcherStats.homerunsAllowed())); - filesClient.writeStringToFile(subdir + "/innings.txt", pitcherStats.inningsPitched()); - filesClient.writeStringToFile( - subdir + "/strikeouts.txt", Integer.toString(pitcherStats.strikeouts())); - filesClient.writeStringToFile( - subdir + "/walks.txt", Integer.toString(pitcherStats.walksAllowed())); - filesClient.writeStringToFile( - subdir + "/wins-losses.txt", - String.format("%d - %d", pitcherStats.wins(), pitcherStats.losses())); - String statsForSeries = ""; - if (selectedSeries.otherSeries()) { - statsForSeries = String.format("Stats for %s", selectedSeries.seriesName()); - } else { - statsForSeries = - selectedSeries.id().equals(seriesId) - ? "Stats for this season" - : String.format( - "Stats for %s season", - selectedSeries.year().map(y -> y.toString()).orElse("other")); + filesClient.writeStringToFile(subdir + "/firstname.txt", pitcher.firstName().orElse("")); + filesClient.writeStringToFile(subdir + "/fullname.txt", pitcher.fullName().orElse("")); + filesClient.writeStringToFile(subdir + "/lastname.txt", pitcher.lastName().orElse("")); + + // Update images + updateImages(pitcher, subdir); + + int gameLength = play.innings().map(i -> NumberUtils.toInt(i, 9)).orElse(9); + filesClient.writeStringToFile( + subdir + "/pitching.txt", PitcherTools.pitcherNarrative(pitcher, gameLength)); + filesClient.writeStringToFile( + subdir + "/pitching-title.txt", PitcherTools.pitcherNarrativeTitle(pitcher)); + + // Initialize season stats with stats so far in this game + Integer earnedRuns = pitcher.earnedRuns().map(er -> NumberUtils.toInt(er)).orElse(0); + Integer outs = + Long.valueOf( + Math.round(3 * PitcherTools.inningsVal(pitcher.inningsPitched().orElse("0.0")))) + .intValue(); + Integer walks = pitcher.pitcherWalks().map(bb -> NumberUtils.toInt(bb)).orElse(0); + Integer strikeouts = pitcher.pitcherStrikeouts().map(so -> NumberUtils.toInt(so)).orElse(0); + Double innings = 0.0; + Double era = 0.0; + + if (pitcher.seasonStats().isPresent()) { + PlayerSeasonStats stats = pitcher.seasonStats().get(); + // Add on season stats if available + earnedRuns += stats.earnedRuns().map(er -> NumberUtils.toInt(er, 0)).orElse(0); + outs += stats.outs().map(er -> NumberUtils.toInt(er, 0)).orElse(0); + walks += stats.pitcherWalks().map(er -> NumberUtils.toInt(er, 0)).orElse(0); + strikeouts += stats.pitcherStrikeouts().map(er -> NumberUtils.toInt(er, 0)).orElse(0); + if (outs > 0) { + innings = outs / 3.0; + era = earnedRuns / (innings / gameLength); + } } - filesClient.writeStringToFile(subdir + "/stats_for_series.txt", statsForSeries); filesClient.writeStringToFile( - subdir + "/career/era.txt", allStats.careerPitching().map(s -> s.era()).orElse("-")); - filesClient.writeStringToFile( - subdir + "/career/games.txt", - allStats.careerPitching().map(s -> Integer.toString(s.appearances())).orElse("0")); - filesClient.writeStringToFile( - subdir + "/career/hits.txt", - allStats.careerPitching().map(s -> Integer.toString(s.hitsAllowed())).orElse("0")); - filesClient.writeStringToFile( - subdir + "/career/hrs-allowed.txt", - allStats.careerPitching().map(s -> Integer.toString(s.homerunsAllowed())).orElse("0")); - filesClient.writeStringToFile( - subdir + "/career/innings.txt", - allStats.careerPitching().map(s -> s.inningsPitched()).orElse("0.0")); - filesClient.writeStringToFile( - subdir + "/career/strikeouts.txt", - allStats.careerPitching().map(s -> Integer.toString(s.strikeouts())).orElse("0")); - filesClient.writeStringToFile( - subdir + "/career/walks.txt", - allStats.careerPitching().map(s -> Integer.toString(s.walksAllowed())).orElse("0")); - filesClient.writeStringToFile( - subdir + "/career/wins-losses.txt", - allStats - .careerPitching() - .map(s -> String.format("%d - %d", s.wins(), s.losses())) - .orElse("0 - 0")); + subdir + "/era.txt", String.format("%.2f", era).replace(",", ".")); + filesClient.writeStringToFile(subdir + "/innings.txt", PitcherTools.inningsVal(innings)); + filesClient.writeStringToFile(subdir + "/strikeouts.txt", strikeouts.toString()); + filesClient.writeStringToFile(subdir + "/walks.txt", walks.toString()); + filesClient.writeStringToFile(subdir + "/stats_for_series.txt", "Stats for this season"); } - private void updateCurrentBatter() throws IOException, StatsException { - String batterId = play.situation().batterId(); - BoxScore batter = BatterTools.aggregatedBoxScore(batterId, play); - updateBatter(batter, "current_batter"); - } + private void updateCurrentBatter() throws IOException { + Optional batterId = play.situation().map(s -> s.batterId()).orElse(Optional.empty()); - private void updateOnDeckBatter() throws IOException, StatsException { - String currentBatterKey = - play.playData().stream() - .sorted((a, b) -> Integer.parseInt(b.atBat()) - Integer.parseInt(a.atBat())) - .findFirst() - .get() - .batter(); - int side = Integer.parseInt(currentBatterKey.substring(0, 2)); - int order = Integer.parseInt(currentBatterKey.substring(2, 3)); - int nextOrder = order == 9 ? 1 : order + 1; - String prefix = String.format("%d%d", side, nextOrder); - String key = - play.boxScore().keySet().stream() - .filter(k -> k.startsWith(prefix)) - .sorted((a, b) -> Integer.parseInt(b) - Integer.parseInt(a)) - .findFirst() - .get(); - BoxScore batter = BatterTools.aggregatedBoxScore(play.boxScore().get(key).playerId(), play); - updateBatter(batter, "ondeck_batter"); + if (batterId.isPresent()) { + Optional batter = BatterTools.aggregatedBoxScore(batterId.get(), play); + if (batter.isPresent()) { + updateBatter(batter.get(), "current_batter"); + } else { + LOG.error("Failed to find data for current batter (id={}).", batterId.get()); + } + } else { + LOG.error("Failed to find current batter."); + } } - private void updateInHoleBatter() throws IOException, StatsException { - String currentBatterKey = + private void updateOnDeckBatter() throws IOException { + Optional maybeCurrentBatterKey = play.playData().stream() - .sorted((a, b) -> Integer.parseInt(b.atBat()) - Integer.parseInt(a.atBat())) + .sorted( + (a, b) -> + Integer.parseInt(b.atBat().orElse("0")) + - Integer.parseInt(a.atBat().orElse("0"))) .findFirst() - .get() - .batter(); - int side = Integer.parseInt(currentBatterKey.substring(0, 2)); - int order = Integer.parseInt(currentBatterKey.substring(2, 3)); - int nextNextOrder = order == 8 ? 1 : (order == 9 ? 2 : order + 2); - String prefix = String.format("%d%d", side, nextNextOrder); - String key = - play.boxScore().keySet().stream() - .filter(k -> k.startsWith(prefix)) - .sorted((a, b) -> Integer.parseInt(b) - Integer.parseInt(a)) - .findFirst() - .get(); - BoxScore batter = BatterTools.aggregatedBoxScore(play.boxScore().get(key).playerId(), play); - if (batter.playerId().equals(inHoleBatter)) { - return; - } - inHoleBatter = batter.playerId(); - stats.put( - batter.playerId(), - statsClient.getPlayerStats( - batter.name(), - batter.playerId(), - batter.teamId(), - parseSeriesId(seriesId), - onlyUseThisSeriesStats)); - - updateBatter(batter, "inhole_batter"); - } - - private void updateBatter(final BoxScore batter, final String subdir) - throws IOException, StatsException { - - filesClient.writeStringToFile(subdir + "/firstname.txt", batter.firstName()); - filesClient.writeStringToFile(subdir + "/lastname.txt", batter.lastName().toUpperCase()); - filesClient.writeStringToFile(subdir + "/pos.txt", batter.position().orElse("")); - filesClient.writeStringToFile(subdir + "/fullname.txt", batter.name()); - - if (!stats.containsKey(batter.playerId())) { - stats.put( - batter.playerId(), - statsClient.getPlayerStats( - batter.name(), - batter.playerId(), - batter.teamId(), - parseSeriesId(seriesId), - onlyUseThisSeriesStats)); + .flatMap(pd -> pd.batter()); + Optional onDeckBatterId = Optional.empty(); + if (maybeCurrentBatterKey.isPresent()) { + String currentBatterKey = maybeCurrentBatterKey.get(); + int side = Integer.parseInt(currentBatterKey.substring(0, 2)); + int order = Integer.parseInt(currentBatterKey.substring(2, 3)); + int nextOrder = order == 9 ? 1 : order + 1; + String prefix = String.format("%d%d", side, nextOrder); + Optional key = + play.boxScore().keySet().stream() + .filter(k -> k.startsWith(prefix)) + .sorted((a, b) -> Integer.parseInt(b) - Integer.parseInt(a)) + .findFirst(); + if (key.isPresent()) { + onDeckBatterId = play.boxScore().get(key.get()).playerId(); + } } - - AllStats allStats = stats.get(batter.playerId()); - - // Update images - if (allStats.seriesStats().containsKey(seriesId)) { - updateImages( - subdir, allStats.seriesStats().get(seriesId), batter.teamId(), batter.playerId()); + if (onDeckBatterId.isPresent()) { + Optional batter = BatterTools.aggregatedBoxScore(onDeckBatterId.get(), play); + if (batter.isPresent()) { + updateBatter(batter.get(), "ondeck_batter"); + } else { + LOG.error("Failed to find data for on-deck batter (id={}).", onDeckBatterId.get()); + } } else { - filesClient.copyFile("team_resources/player_images/default.png", subdir + "/image.png"); - filesClient.copyFile("team_resources/flags/default.png", subdir + "/flag.png"); + LOG.error("Failed to find on-deck batter."); } + } - SeriesStats selectedSeries = - onlyUseThisSeriesStats - ? allStats.seriesStats().get(seriesId) - : selectSeriesBatting(allStats, seriesId); - final String batterNarrative = - onlyUseThisSeriesStats - ? BatterTools.batterNarrative(batter, selectedSeries, play) - : BatterTools.batterNarrative(batter, stats, seriesId, play); - filesClient.writeStringToFile(subdir + "/batting.txt", batterNarrative); - - if (selectedSeries == null || selectedSeries.batting().isEmpty()) { - LOG.warn("No stats for batter {} (id={})", batter.name(), batter.playerId()); - filesClient.writeStringToFile(subdir + "/avg.txt", ""); - filesClient.writeStringToFile(subdir + "/ops.txt", ""); - filesClient.writeStringToFile(subdir + "/hr.txt", ""); - filesClient.writeStringToFile(subdir + "/rbi.txt", ""); - filesClient.writeStringToFile(subdir + "/stats_for_series.txt", ""); - filesClient.writeStringToFile(subdir + "/batting-title.txt", ""); - return; + private void updateInHoleBatter() throws IOException { + Optional maybeCurrentBatterKey = + play.playData().stream() + .sorted( + (a, b) -> + Integer.parseInt(b.atBat().orElse("0")) + - Integer.parseInt(a.atBat().orElse("0"))) + .findFirst() + .flatMap(pd -> pd.batter()); + Optional inHoleBatterId = Optional.empty(); + if (maybeCurrentBatterKey.isPresent()) { + String currentBatterKey = maybeCurrentBatterKey.get(); + int side = Integer.parseInt(currentBatterKey.substring(0, 2)); + int order = Integer.parseInt(currentBatterKey.substring(2, 3)); + int nextNextOrder = order == 8 ? 1 : (order == 9 ? 2 : order + 2); + String prefix = String.format("%d%d", side, nextNextOrder); + Optional key = + play.boxScore().keySet().stream() + .filter(k -> k.startsWith(prefix)) + .sorted((a, b) -> Integer.parseInt(b) - Integer.parseInt(a)) + .findFirst(); + if (key.isPresent()) { + inHoleBatterId = play.boxScore().get(key.get()).playerId(); + } } - - BatterStats batterStats = selectedSeries.batting().get(); - - filesClient.writeStringToFile(subdir + "/avg.txt", batterStats.battingAverage()); - filesClient.writeStringToFile(subdir + "/ops.txt", batterStats.onBasePercentagePlusSlugging()); - filesClient.writeStringToFile(subdir + "/hr.txt", Integer.toString(batterStats.homeruns())); - filesClient.writeStringToFile( - subdir + "/rbi.txt", Integer.toString(batterStats.runsBattedIn())); - - filesClient.writeStringToFile( - subdir + "/batting-title.txt", - BatterTools.batterNarrativeTitle(batter, play, selectedSeries.seriesName())); - - String statsForSeries = ""; - if (selectedSeries.otherSeries()) { - statsForSeries = String.format("Stats for %s", selectedSeries.seriesName()); + if (inHoleBatterId.isPresent()) { + Optional batter = BatterTools.aggregatedBoxScore(inHoleBatterId.get(), play); + if (batter.isPresent()) { + updateBatter(batter.get(), "inhole_batter"); + } else { + LOG.error("Failed to find data for in-hole batter (id={}).", inHoleBatterId.get()); + } } else { - statsForSeries = - selectedSeries.id().equals(seriesId) - ? "Stats for this season" - : String.format( - "Stats for %s season", - selectedSeries.year().map(y -> y.toString()).orElse("other")); + LOG.error("Failed to find in-hole batter."); } - filesClient.writeStringToFile(subdir + "/stats_for_series.txt", statsForSeries); - - filesClient.writeStringToFile( - subdir + "/career/games.txt", - allStats.careerBatting().map(s -> Integer.toString(s.games())).orElse("")); - filesClient.writeStringToFile( - subdir + "/career/avg.txt", - allStats.careerBatting().map(s -> s.battingAverage()).orElse("")); - filesClient.writeStringToFile( - subdir + "/career/ops.txt", - allStats.careerBatting().map(s -> s.onBasePercentagePlusSlugging()).orElse("")); - filesClient.writeStringToFile( - subdir + "/career/hr.txt", - allStats.careerBatting().map(s -> Integer.toString(s.homeruns())).orElse("")); - filesClient.writeStringToFile( - subdir + "/career/rbi.txt", - allStats.careerBatting().map(s -> Integer.toString(s.runsBattedIn())).orElse("")); - filesClient.writeStringToFile( - subdir + "/career/hits.txt", - allStats.careerBatting().map(s -> Integer.toString(s.hits())).orElse("")); - filesClient.writeStringToFile( - subdir + "/career/atbats.txt", - allStats.careerBatting().map(s -> Integer.toString(s.atBats())).orElse("")); - filesClient.writeStringToFile( - subdir + "/career/sb.txt", - allStats.careerBatting().map(s -> Integer.toString(s.stolenBases())).orElse("")); } - private SeriesStats selectSeriesBatting(final AllStats stats, final String seriesId) { - - final SeriesId seriesIdParsed = parseSeriesId(seriesId); - - Collection seriesStats = stats.seriesStats().values(); - - // Select this season if stats are available - Optional thisSeason = - seriesStats.stream() - .filter( - s -> - s.year().orElse(0).intValue() == seriesIdParsed.year().orElse(-1).intValue() - && !s.otherSeries()) - .findFirst(); - if (thisSeason.isPresent() - && thisSeason - .get() - .batting() - .map(b -> b.games() > MINIMUM_GAMES_BATTING_STATS) - .orElse(false)) { - return thisSeason.get(); - } - - // else try to find last season stats - Optional lastSeason = - seriesStats.stream() - .filter( - s -> - s.year().orElse(0).intValue() - == (seriesIdParsed.year().orElse(-1).intValue() - 1) - && !s.otherSeries()) - .findFirst(); - if (lastSeason - .map(s -> s.batting().map(b -> b.games() > MINIMUM_GAMES_BATTING_STATS).orElse(false)) - .orElse(false)) { - return lastSeason.get(); - } - - // else try to find other series stats this year - Optional otherSeries = - seriesStats.stream() - .filter( - s -> - s.year().filter(y -> y.equals(seriesIdParsed.year().orElse(0))).isPresent() - && s.otherSeries()) - .findFirst(); - if (otherSeries - .map(s -> s.batting().map(b -> b.games() > MINIMUM_GAMES_BATTING_STATS).orElse(false)) - .orElse(false)) { - return otherSeries.get(); - } + private void updateBatter(final Player batter, final String subdir) throws IOException { - // else try to find previous season stats - Optional prevSeason = - seriesStats.stream() - .filter( - s -> - s.year().orElse(0).intValue() < seriesIdParsed.year().orElse(-1).intValue() - && !s.otherSeries()) - .sorted((a, b) -> b.year().orElse(0).intValue() - a.year().orElse(0).intValue()) - .findFirst(); - if (prevSeason - .map(s -> s.batting().map(b -> b.games() > MINIMUM_GAMES_BATTING_STATS).orElse(false)) - .orElse(false)) { - return prevSeason.get(); - } + filesClient.writeStringToFile(subdir + "/firstname.txt", batter.firstName().orElse("")); + filesClient.writeStringToFile( + subdir + "/lastname.txt", batter.lastName().map(ln -> ln.toUpperCase()).orElse("")); + filesClient.writeStringToFile(subdir + "/pos.txt", batter.position().orElse("")); + filesClient.writeStringToFile(subdir + "/fullname.txt", batter.fullName().orElse("")); - // else try to find other series previous season stats - Optional otherSeriesLastSeason = - seriesStats.stream() - .filter(s -> s.otherSeries()) - .sorted((a, b) -> b.year().orElse(0).intValue() - a.year().orElse(0).intValue()) - .findFirst(); - if (otherSeriesLastSeason - .map(s -> s.batting().map(b -> b.games() > MINIMUM_GAMES_BATTING_STATS).orElse(false)) - .orElse(false)) { - return otherSeriesLastSeason.get(); + // Update images + updateImages(batter, subdir); + filesClient.writeStringToFile( + subdir + "/batting.txt", BatterTools.batterNarrative(batter, play)); + filesClient.writeStringToFile( + subdir + "/batting-title.txt", BatterTools.batterNarrativeTitle(batter)); + + Integer hits = batter.hits().map(h -> NumberUtils.toInt(h)).orElse(0); + Integer doubles = batter.doubles().map(d -> NumberUtils.toInt(d)).orElse(0); + Integer triples = batter.triples().map(t -> NumberUtils.toInt(t)).orElse(0); + Integer homeruns = batter.homeruns().map(hr -> NumberUtils.toInt(hr)).orElse(0); + Integer singles = hits - doubles - triples - homeruns; + Integer walks = batter.walks().map(bb -> NumberUtils.toInt(bb)).orElse(0); + Integer hitByPitch = batter.hitByPitch().map(hbp -> NumberUtils.toInt(hbp)).orElse(0); + Integer plateAppearances = batter.plateAppearances().map(pa -> NumberUtils.toInt(pa)).orElse(0); + Integer atBats = batter.atBats().map(ab -> NumberUtils.toInt(ab)).orElse(0); + + if (batter.seasonStats().isPresent()) { + final PlayerSeasonStats stats = batter.seasonStats().get(); + hits += stats.hits().map(h -> NumberUtils.toInt(h)).orElse(0); + doubles += stats.doubles().map(d -> NumberUtils.toInt(d)).orElse(0); + triples += stats.triples().map(t -> NumberUtils.toInt(t)).orElse(0); + homeruns += stats.homeruns().map(hr -> NumberUtils.toInt(hr)).orElse(0); + singles = hits - doubles - triples - homeruns; + walks += stats.walks().map(bb -> NumberUtils.toInt(bb)).orElse(0); + hitByPitch += stats.hitByPitch().map(hbp -> NumberUtils.toInt(hbp)).orElse(0); + plateAppearances += stats.plateAppearances().map(pa -> NumberUtils.toInt(pa)).orElse(0); + atBats += stats.atBats().map(ab -> NumberUtils.toInt(ab)).orElse(0); } - // else pick any stats - return seriesStats.stream() - .filter(s -> s.batting().map(b -> b.games() > MINIMUM_GAMES_BATTING_STATS).orElse(false)) - .findFirst() - .orElse(null); + Double battingAverage = atBats > 0 ? hits.doubleValue() / atBats.doubleValue() : 0.0; + Double onBasePercentage = + plateAppearances > 0 ? (hits + walks + hitByPitch) / plateAppearances.doubleValue() : 0.0; + Double sluggingPercentage = + atBats > 0 + ? (singles + doubles * 2.0 + triples * 3.0 + homeruns * 4.0) / atBats.doubleValue() + : 0.0; + + String battingAverageString = "%.3f".formatted(battingAverage).replace(",", "."); + String opsString = "%.3f".formatted(onBasePercentage + sluggingPercentage).replace(",", "."); + filesClient.writeStringToFile( + subdir + "/avg.txt", + battingAverageString.startsWith("0") + ? battingAverageString.substring(1) + : battingAverageString); + filesClient.writeStringToFile( + subdir + "/ops.txt", opsString.startsWith("0") ? opsString.substring(1) : opsString); + filesClient.writeStringToFile(subdir + "/hr.txt", homeruns.toString()); + filesClient.writeStringToFile(subdir + "/stats_for_series.txt", "Stats for this season"); } - private SeriesStats selectSeriesPitching(final AllStats stats, final String seriesId) { - - final SeriesId seriesIdParsed = parseSeriesId(seriesId); - - Collection seriesStats = stats.seriesStats().values(); - - // Matcher matcher = Pattern.compile("^.*(2[0-9]{3}).*$").matcher(seriesId); - // Map seriesStats = stats.seriesStats(); - // Optional thisYear = - // matcher.matches() ? Optional.of(Integer.parseInt(matcher.group(1))) : Optional.empty(); - - // Select this season if stats are available - Optional thisSeason = - seriesStats.stream() - .filter( - s -> - s.year().orElse(0).intValue() == seriesIdParsed.year().orElse(-1).intValue() - && !s.otherSeries()) - .findFirst(); - if (thisSeason.isPresent() - && thisSeason - .get() - .pitching() - .map(p -> p.appearances() > MINIMUM_APPEARANCES_PITCHING_STATS) - .orElse(false)) { - return thisSeason.get(); - } - - // else try to find last season stats - Optional lastSeason = - seriesStats.stream() - .filter( - s -> - s.year().orElse(0).intValue() - == (seriesIdParsed.year().orElse(-1).intValue() - 1) - && !s.otherSeries()) - .findFirst(); - if (lastSeason - .map( - s -> - s.pitching() - .map(p -> p.appearances() > MINIMUM_APPEARANCES_PITCHING_STATS) - .orElse(false)) - .orElse(false)) { - return lastSeason.get(); - } - - // else try to find other series stats this year - Optional otherSeries = - seriesStats.stream() - .filter( - s -> - s.year().filter(y -> y.equals(seriesIdParsed.year().orElse(0))).isPresent() - && s.otherSeries()) - .findFirst(); - if (otherSeries - .map( - s -> - s.pitching() - .map(p -> p.appearances() > MINIMUM_APPEARANCES_PITCHING_STATS) - .orElse(false)) - .orElse(false)) { - return otherSeries.get(); - } - - // else try to find previous season stats - Optional prevSeason = - seriesStats.stream() - .filter( - s -> - s.year().orElse(0).intValue() < seriesIdParsed.year().orElse(-1).intValue() - && !s.otherSeries()) - .sorted((a, b) -> b.year().orElse(0).intValue() - a.year().orElse(0).intValue()) - .findFirst(); - if (prevSeason - .map( - s -> - s.pitching() - .map(p -> p.appearances() > MINIMUM_APPEARANCES_PITCHING_STATS) - .orElse(false)) - .orElse(false)) { - return prevSeason.get(); - } + private void updateImages(final Player player, final String subdir) throws IOException { + Optional teamFlagPath = + player.teamId().map(tId -> String.format("team_resources/flags/%s.png", tId)); + Optional clubFlagPath = + player.teamCode().map(tc -> String.format("team_resources/flags/%s.png", tc)); - // else try to find other series previous season stats - Optional otherSeriesLastSeason = - seriesStats.stream() - .filter(s -> s.otherSeries()) - .sorted((a, b) -> b.year().orElse(0).intValue() - a.year().orElse(0).intValue()) - .findFirst(); - if (otherSeriesLastSeason - .map( - s -> - s.pitching() - .map(p -> p.appearances() > MINIMUM_APPEARANCES_PITCHING_STATS) - .orElse(false)) - .orElse(false)) { - return otherSeriesLastSeason.get(); + if (teamFlagPath.map(tfp -> filesClient.fileExists(tfp)).orElse(false)) { + filesClient.copyFile(teamFlagPath.get(), subdir + "/flag.png"); + } else if (clubFlagPath.map(cfp -> filesClient.fileExists(cfp)).orElse(false)) { + filesClient.copyFile(clubFlagPath.get(), subdir + "/flag.png"); + } else { + filesClient.copyFile("team_resources/flags/default.png", subdir + "/flag.png"); } - // else pick stats with most appearances - return seriesStats.stream() - .sorted( - (s1, s2) -> - s2.pitching().map(p -> p.appearances()).orElse(0).intValue() - - s1.pitching().map(p -> p.appearances()).orElse(0).intValue()) - .findFirst() - .orElse(null); - } - - private void updateImages( - final String subdir, - final SeriesStats selectedSeries, - final String teamId, - final String playerId) - throws IOException { - String teamFlagPath = String.format("team_resources/flags/%s.png", teamId); - if (!filesClient.fileExists(teamFlagPath)) { - if (selectedSeries.teamFlagUrl().isEmpty() - || selectedSeries.teamFlagUrl().get().isEmpty() - || selectedSeries.teamFlagUrl().get().toLowerCase().endsWith(".svg")) { - filesClient.copyFile("team_resources/flags/default.png", subdir + "/flag.png"); - } else { - filesClient.copyImageFromURL(new URL(selectedSeries.teamFlagUrl().get()), teamFlagPath); - if (filesClient.fileExists(teamFlagPath)) { - filesClient.copyFile(teamFlagPath, subdir + "/flag.png"); - } else { - filesClient.copyFile("team_resources/flags/default.png", subdir + "/flag.png"); - } + boolean imageCopied = false; + if (player.teamId().isPresent() && player.playerId().isPresent()) { + String playerImagePath = + String.format( + "team_resources/player_images/%s-%s.png", + player.teamId().get(), player.playerId().get()); + + // If player image doesn't exist locally but we have a URL (that is not default image) to + // download from, then download it + if (!filesClient.fileExists(playerImagePath) + && player + .imageUrl() + .map(url -> !"https://static.wbsc.org/assets/images/default-player.jpg".equals(url)) + .orElse(false)) { + filesClient.copyImageFromURL(URI.create(player.imageUrl().get()).toURL(), playerImagePath); } - } else { - filesClient.copyFile(teamFlagPath, subdir + "/flag.png"); - } - String playerImagePath = - String.format("team_resources/player_images/%s-%s.png", teamId, playerId); - if (!filesClient.fileExists(playerImagePath)) { - if (selectedSeries.playerImageUrl().isEmpty() - || selectedSeries.playerImageUrl().get().isEmpty() - || selectedSeries.playerImageUrl().get().toLowerCase().endsWith(".svg")) { - filesClient.copyFile("team_resources/player_images/default.png", subdir + "/image.png"); - } else { - filesClient.copyImageFromURL( - new URL(selectedSeries.playerImageUrl().get()), playerImagePath); - if (filesClient.fileExists(playerImagePath)) { - filesClient.copyFile(playerImagePath, subdir + "/image.png"); - } else { - filesClient.copyFile("team_resources/player_images/default.png", subdir + "/image.png"); - } + // If the player image exists, then copy it to the target dir + if (filesClient.fileExists(playerImagePath)) { + filesClient.copyFile(playerImagePath, subdir + "/image.png"); + imageCopied = true; } - } else { - filesClient.copyFile(playerImagePath, subdir + "/image.png"); + } + // If player image hasn't been copied, then use default image + if (!imageCopied) { + filesClient.copyFile("team_resources/player_images/default.png", subdir + "/image.png"); } - filesClient.copyFile( - teamId.equals(play.eventHomeId()) ? "home_color.png" : "away_color.png", - subdir + "/team_color.png"); + String teamColorFile = "home_color.png"; + if (player.teamId().isPresent() && play.eventHomeId().isPresent()) { + String teamId = player.teamId().get(); + String eventHomeId = play.eventHomeId().get(); + teamColorFile = teamId.equals(eventHomeId) ? "home_color.png" : "away_color.png"; + } + filesClient.copyFile(teamColorFile, subdir + "/team_color.png"); } - private void updateLineups() throws IOException, StatsException { - List homeLineup = LineupTools.getHomeLineup(play); - List awayLineup = LineupTools.getAwayLineup(play); + private void updateLineups() throws IOException { + List homeLineup = LineupTools.getHomeLineup(play); + List awayLineup = LineupTools.getAwayLineup(play); if (homeLineup.size() != 9 || awayLineup.size() != 9) { - throw new StatsException( - String.format( - "Invalid lineups. Expected 9 batters each but got %d home batters and %d away batters.", - homeLineup.size(), awayLineup.size())); + LOG.error( + "Invalid lineups. Expected 9 batters each but got {} home batters and {} away batters.", + homeLineup.size(), + awayLineup.size()); + return; } for (int order = 1; order < 10; order += 1) { updateBatter(homeLineup.get(order - 1), "lineups/home/" + order); } - for (BoxScore batter : homeLineup) { + for (Player batter : homeLineup) { String position = batter .position() @@ -739,7 +495,7 @@ private void updateLineups() throws IOException, StatsException { return split.length > 0 ? split[split.length - 1] : ""; }) .orElse(""); - if (isValidPosition(position)) { + if (position.length() > 0) { updateBatter(batter, "lineups/home/" + position); } } @@ -748,7 +504,7 @@ private void updateLineups() throws IOException, StatsException { updateBatter(awayLineup.get(order - 1), "lineups/away/" + order); } - for (BoxScore batter : awayLineup) { + for (Player batter : awayLineup) { String position = batter .position() @@ -758,7 +514,7 @@ private void updateLineups() throws IOException, StatsException { return split.length > 0 ? split[split.length - 1] : ""; }) .orElse(""); - if (isValidPosition(position)) { + if (position.length() > 0) { updateBatter(batter, "lineups/away/" + position); } } @@ -766,23 +522,4 @@ private void updateLineups() throws IOException, StatsException { updatePitcher(LineupTools.getHomePitcher(play), "lineups/home/pitcher"); updatePitcher(LineupTools.getAwayPitcher(play), "lineups/away/pitcher"); } - - private boolean isValidPosition(final String position) { - return List.of("P", "C", "1B", "2B", "3B", "SS", "LF", "CF", "RF").contains(position); - } - - private SeriesId parseSeriesId(final String seriesId) { - - SeriesIdImpl.Builder builder = SeriesIdImpl.builder().id(seriesId); - final Pattern pattern = Pattern.compile("^(.*)(2[0-9]{3})(.*)$"); - final Matcher matcher = pattern.matcher(seriesId); - - if (matcher.matches()) { - builder - .prefix(matcher.group(1)) - .year(Integer.parseInt(matcher.group(2))) - .postfix(matcher.group(3)); - } - return builder.build(); - } } diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/services/LineupTools.java b/src/main/java/org/sundbybergheat/baseballstreaming/services/LineupTools.java index c1365a7..af7f599 100644 --- a/src/main/java/org/sundbybergheat/baseballstreaming/services/LineupTools.java +++ b/src/main/java/org/sundbybergheat/baseballstreaming/services/LineupTools.java @@ -2,20 +2,21 @@ import java.util.ArrayList; import java.util.List; -import org.sundbybergheat.baseballstreaming.models.wbsc.BoxScore; -import org.sundbybergheat.baseballstreaming.models.wbsc.Play; +import java.util.Optional; +import org.sundbybergheat.baseballstreaming.models.wbsc.play.Play; +import org.sundbybergheat.baseballstreaming.models.wbsc.play.Player; public class LineupTools { - public static BoxScore getAwayPitcher(final Play play) { + public static Player getAwayPitcher(final Play play) { return getPitcher(play, "190"); } - public static BoxScore getHomePitcher(final Play play) { + public static Player getHomePitcher(final Play play) { return getPitcher(play, "290"); } - private static BoxScore getPitcher(final Play play, final String prefix) { + private static Player getPitcher(final Play play, final String prefix) { return play.boxScore().entrySet().stream() .filter(entry -> entry.getKey().startsWith(prefix)) .sorted((a, b) -> Integer.parseInt(b.getKey()) - Integer.parseInt(a.getKey())) @@ -24,25 +25,24 @@ private static BoxScore getPitcher(final Play play, final String prefix) { .orElseThrow(); } - public static List getAwayLineup(final Play play) { + public static List getAwayLineup(final Play play) { return getLineup(play, 101); } - public static List getHomeLineup(final Play play) { + public static List getHomeLineup(final Play play) { return getLineup(play, 201); } - private static List getLineup(final Play play, final int prefixBase) { - List result = new ArrayList(9); + private static List getLineup(final Play play, final int prefixBase) { + List result = new ArrayList(9); for (int prefix = prefixBase; prefix < prefixBase + 9; prefix += 1) { final String strPrefix = Integer.toString(prefix); - final String curr = + final Optional curr = play.boxScore().keySet().stream() .filter(key -> key.startsWith(strPrefix)) .sorted((a, b) -> Integer.parseInt(b) - Integer.parseInt(a)) - .findFirst() - .orElseThrow(); - result.add(play.boxScore().get(curr)); + .findFirst(); + curr.ifPresent(c -> result.add(play.boxScore().get(c))); } return result; } diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/services/PitcherTools.java b/src/main/java/org/sundbybergheat/baseballstreaming/services/PitcherTools.java index 8892dab..cd94da5 100644 --- a/src/main/java/org/sundbybergheat/baseballstreaming/services/PitcherTools.java +++ b/src/main/java/org/sundbybergheat/baseballstreaming/services/PitcherTools.java @@ -1,134 +1,71 @@ package org.sundbybergheat.baseballstreaming.services; -import java.util.Map; -import java.util.Optional; -import org.sundbybergheat.baseballstreaming.models.stats.AllStats; -import org.sundbybergheat.baseballstreaming.models.stats.PitcherStats; -import org.sundbybergheat.baseballstreaming.models.stats.SeriesStats; -import org.sundbybergheat.baseballstreaming.models.wbsc.BoxScore; +import org.apache.commons.lang3.math.NumberUtils; +import org.sundbybergheat.baseballstreaming.models.wbsc.play.Player; +import org.sundbybergheat.baseballstreaming.models.wbsc.play.PlayerSeasonStats; public class PitcherTools { - public static String pitcherNarrative(final BoxScore pitcher, final SeriesStats stats) { + public static String pitcherNarrative(final Player pitcher, final int gameLength) { double inningsPitchedVal = inningsVal(pitcher.inningsPitched().orElse("0.0")); if (inningsPitchedVal > 2.0) { return summaryOfGame(pitcher); } - return summaryOfSeries(stats); + return pitcher + .seasonStats() + .map(ss -> summaryOfSeason(ss, gameLength)) + .orElse("No stats available yet."); } - public static String pitcherNarrative( - final BoxScore pitcher, final Map stats, final String seriesId) { - double inningsPitchedVal = inningsVal(pitcher.inningsPitched().orElse("0.0")); - if (inningsPitchedVal > 2.0) { - return summaryOfGame(pitcher); - } - return summaryOfSeries(stats, pitcher.playerId(), seriesId); - } - - public static String pitcherNarrativeTitle( - final BoxScore pitcher, final Map stats, final String seriesId) { + public static String pitcherNarrativeTitle(final Player pitcher) { double inningsPitchedVal = inningsVal(pitcher.inningsPitched().orElse("0.0")); if (inningsPitchedVal > 2.0) { return "In This Game"; } + return "This Season"; + } - final String playerId = pitcher.playerId(); - final SeriesStats thisSeriesStats = stats.get(playerId).seriesStats().get(seriesId); - - if (thisSeriesStats != null) { - if (thisSeriesStats.pitching().isPresent()) { - return "This Season"; - } - - final Optional lastSeason = - stats.get(playerId).seriesStats().values().stream() - .filter( - ss -> - !ss.id().equals(seriesId) - && !ss.otherSeries() - && ss.pitching().isPresent() - && thisSeriesStats.year().orElse(0) - 1 == ss.year().orElse(0)) - .findFirst(); - if (lastSeason.isPresent()) { - return "Last season"; - } - } - - final Optional otherSeries = - stats.get(playerId).seriesStats().values().stream() - .filter( - ss -> !ss.id().equals(seriesId) && ss.otherSeries() && ss.pitching().isPresent()) - .sorted((a, b) -> b.year().orElse(0) - a.year().orElse(0)) - .findFirst(); - - return otherSeries.map(os -> os.seriesName()).orElse(""); + public static String inningsVal(final double inningsPitched) { + Double whole = Math.floor(inningsPitched); + Long rest = Math.round((inningsPitched - whole) * 3.0); + return "%d.%d".formatted(whole.intValue(), rest); } - private static double inningsVal(String inningsPitched) { + public static double inningsVal(String inningsPitched) { String[] split = inningsPitched.split("\\."); double inningsPitchedVal = Double.parseDouble(split[0]) + Double.parseDouble(split[1]) / 3.0; return inningsPitchedVal; } - private static String summaryOfSeries( - final Map stats, final String playerId, final String seriesId) { - final SeriesStats thisSeriesStats = stats.get(playerId).seriesStats().get(seriesId); - - if (thisSeriesStats != null) { - if (thisSeriesStats.pitching().isPresent()) { - return summaryOfSeries(thisSeriesStats); - } - - final Optional lastSeason = - stats.get(playerId).seriesStats().values().stream() - .filter( - ss -> - !ss.id().equals(seriesId) - && !ss.otherSeries() - && ss.pitching().isPresent() - && thisSeriesStats.year().orElse(0) - 1 == ss.year().orElse(0)) - .findFirst(); - if (lastSeason.isPresent()) { - return summaryOfSeries(lastSeason.get()); - } - } - - final Optional otherSeries = - stats.get(playerId).seriesStats().values().stream() - .filter( - ss -> !ss.id().equals(seriesId) && ss.otherSeries() && ss.pitching().isPresent()) - .sorted((a, b) -> b.year().orElse(0) - a.year().orElse(0)) - .findFirst(); - - return otherSeries.map(os -> summaryOfSeries(os)).orElse(""); - } + private static String summaryOfSeason(final PlayerSeasonStats stats, final int gameLength) { + final Integer earnedRuns = NumberUtils.toInt(stats.earnedRuns().orElse("0")); + final Integer outs = NumberUtils.toInt(stats.outs().orElse("0")); + final Integer walks = NumberUtils.toInt(stats.pitcherWalks().orElse("0")); + final Integer strikeouts = NumberUtils.toInt(stats.pitcherStrikeouts().orElse("0")); - private static String summaryOfSeries(final SeriesStats seriesStats) { - if (seriesStats == null || seriesStats.pitching() == null || seriesStats.pitching().isEmpty()) { + if (earnedRuns == 0 && outs == 0 && walks == 0 && strikeouts == 0) { return "First appearance"; } - PitcherStats stats = seriesStats.pitching().get(); - double innings = inningsVal(stats.inningsPitched()); - double whip = (stats.hitsAllowed() + stats.walksAllowed()) / innings; - double k9 = (stats.strikeouts() / innings) * 9.0; - return String.format( - "%s IP %s ERA %s WHIP %s K/9", - stats.inningsPitched(), - stats.era(), - String.format("%.2f", whip).replace(",", "."), - String.format("%.2f", k9).replace(",", ".")); + double innings = outs / 3.0; + double era = earnedRuns / (innings / gameLength); + double k9 = (strikeouts / innings) * 9.0; + return "%s IP %s ERA %s K/9 %d BB" + .formatted( + inningsVal(innings), + String.format("%.2f", era).replace(",", "."), + String.format("%.2f", k9).replace(",", "."), + walks); } - private static String summaryOfGame(BoxScore pitcher) { - return String.format( - "%s IP %d H %d R %d ER %d BB %s K", - pitcher.inningsPitched().orElse("0.0"), - pitcher.pitcherHits().orElse(0), - pitcher.pitcherRuns().orElse(0), - pitcher.earnedRuns().orElse(0), - pitcher.pitcherWalks().orElse(0), - pitcher.pitcherStrikeouts().orElse(0)); + private static String summaryOfGame(Player pitcher) { + return "%s IP %s H %s R %s ER %s BB %s K" + .formatted( + pitcher.inningsPitched().orElse("0.0"), + pitcher.pitcherHits().orElse("0"), + pitcher.pitcherRuns().orElse("0"), + pitcher.earnedRuns().orElse("0"), + pitcher.pitcherWalks().orElse("0"), + pitcher.pitcherStrikeouts().orElse("0")); } } diff --git a/src/main/java/org/sundbybergheat/baseballstreaming/services/PlayByPlayService.java b/src/main/java/org/sundbybergheat/baseballstreaming/services/PlayByPlayService.java index 29d592c..6bf95df 100644 --- a/src/main/java/org/sundbybergheat/baseballstreaming/services/PlayByPlayService.java +++ b/src/main/java/org/sundbybergheat/baseballstreaming/services/PlayByPlayService.java @@ -6,10 +6,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.sundbybergheat.baseballstreaming.clients.WBSCPlayClient; -import org.sundbybergheat.baseballstreaming.models.stats.StatsException; -import org.sundbybergheat.baseballstreaming.models.wbsc.Play; -import org.sundbybergheat.baseballstreaming.models.wbsc.PlayData; import org.sundbybergheat.baseballstreaming.models.wbsc.WBSCException; +import org.sundbybergheat.baseballstreaming.models.wbsc.play.PlayData; +import org.sundbybergheat.baseballstreaming.models.wbsc.play.PlayWrapper; public class PlayByPlayService implements Runnable { private static final Logger LOG = LoggerFactory.getLogger(PlayByPlayService.class); @@ -21,7 +20,6 @@ public class PlayByPlayService implements Runnable { private final int delay; private int currentPlay = 0; - private int latestHandledPlay = 0; private int lastPlay = 0; public PlayByPlayService( @@ -57,14 +55,14 @@ public void run() { } continue; } - Optional play = Optional.empty(); + Optional play = Optional.empty(); if (runMode.equals(RunMode.live)) { int nextPlay = Math.max(maybeLatestPlay.get(), currentPlay); play = client.optimisticGetPlay(gameId, nextPlay); - if (currentPlay == play.map(p -> p.playNumber()).orElse(currentPlay)) { + if (currentPlay == play.map(p -> p.number()).orElse(currentPlay)) { continue; } - currentPlay = play.map(p -> p.playNumber()).orElse(currentPlay); + currentPlay = play.map(p -> p.number()).orElse(currentPlay); } else { if (currentPlay == lastPlay) { lastPlay = maybeLatestPlay.get(); @@ -82,19 +80,22 @@ public void run() { LOG.warn("Play # {} could not be found.", currentPlay); continue; } - filesService.updatePlay(play.get()); + filesService.updatePlay(play.get().play()); PlayData playData = - play.get().playData().stream() - .sorted((a, b) -> Integer.valueOf(b.atBat()) - Integer.valueOf(a.atBat())) + play.get().play().playData().stream() + .sorted( + (a, b) -> + b.atBat().map(ab -> Integer.valueOf(ab)).orElse(0) + - a.atBat().map(ab -> Integer.valueOf(ab)).orElse(0)) .findFirst() .get(); - playText = playData.text(); + playText = playData.text().orElse(""); LOG.info( "Play # {} ({}): {}", currentPlay, - Instant.ofEpochMilli(playData.timestamp()), + playData.timestamp().map(t -> Instant.ofEpochMilli(Long.parseLong(t))).orElse(null), playText); - } catch (IOException | WBSCException | InterruptedException | StatsException e) { + } catch (IOException | WBSCException | InterruptedException e) { LOG.error("Something went wrong. {}", e.getMessage()); } } diff --git a/src/main/resources/images/team_flags/ALB.png b/src/main/resources/images/team_flags/ALB.png new file mode 100644 index 0000000..d1df5c0 Binary files /dev/null and b/src/main/resources/images/team_flags/ALB.png differ diff --git a/src/main/resources/images/team_flags/ENK.png b/src/main/resources/images/team_flags/ENK.png new file mode 100644 index 0000000..45155b0 Binary files /dev/null and b/src/main/resources/images/team_flags/ENK.png differ diff --git a/src/main/resources/images/team_flags/ENS.png b/src/main/resources/images/team_flags/ENS.png new file mode 100644 index 0000000..f54a291 Binary files /dev/null and b/src/main/resources/images/team_flags/ENS.png differ diff --git a/src/main/resources/images/team_flags/FIN.png b/src/main/resources/images/team_flags/FIN.png new file mode 100644 index 0000000..78c4081 Binary files /dev/null and b/src/main/resources/images/team_flags/FIN.png differ diff --git a/src/main/resources/images/team_flags/GEF.png b/src/main/resources/images/team_flags/GEF.png new file mode 100644 index 0000000..7601dde Binary files /dev/null and b/src/main/resources/images/team_flags/GEF.png differ diff --git a/src/main/resources/images/team_flags/GOT.png b/src/main/resources/images/team_flags/GOT.png new file mode 100644 index 0000000..aeb9f64 Binary files /dev/null and b/src/main/resources/images/team_flags/GOT.png differ diff --git a/src/main/resources/images/team_flags/KGA.png b/src/main/resources/images/team_flags/KGA.png new file mode 100644 index 0000000..2b96899 Binary files /dev/null and b/src/main/resources/images/team_flags/KGA.png differ diff --git a/src/main/resources/images/team_flags/LEK.png b/src/main/resources/images/team_flags/LEK.png new file mode 100644 index 0000000..c0e7407 Binary files /dev/null and b/src/main/resources/images/team_flags/LEK.png differ diff --git a/src/main/resources/images/team_flags/MAL.png b/src/main/resources/images/team_flags/MAL.png new file mode 100644 index 0000000..75ba408 Binary files /dev/null and b/src/main/resources/images/team_flags/MAL.png differ diff --git a/src/main/resources/images/team_flags/RAT.png b/src/main/resources/images/team_flags/RAT.png new file mode 100644 index 0000000..3c3c229 Binary files /dev/null and b/src/main/resources/images/team_flags/RAT.png differ diff --git a/src/main/resources/images/team_flags/SKE.png b/src/main/resources/images/team_flags/SKE.png new file mode 100644 index 0000000..8bb9e35 Binary files /dev/null and b/src/main/resources/images/team_flags/SKE.png differ diff --git a/src/main/resources/images/team_flags/SKO.png b/src/main/resources/images/team_flags/SKO.png new file mode 100644 index 0000000..0f4e628 Binary files /dev/null and b/src/main/resources/images/team_flags/SKO.png differ diff --git a/src/main/resources/images/team_flags/STO.png b/src/main/resources/images/team_flags/STO.png new file mode 100644 index 0000000..8461b18 Binary files /dev/null and b/src/main/resources/images/team_flags/STO.png differ diff --git a/src/main/resources/images/team_flags/SUN.png b/src/main/resources/images/team_flags/SUN.png new file mode 100644 index 0000000..46810d0 Binary files /dev/null and b/src/main/resources/images/team_flags/SUN.png differ diff --git a/src/main/resources/images/team_flags/SVL.png b/src/main/resources/images/team_flags/SVL.png new file mode 100644 index 0000000..b8a832b Binary files /dev/null and b/src/main/resources/images/team_flags/SVL.png differ diff --git a/src/main/resources/images/team_flags/SWE.png b/src/main/resources/images/team_flags/SWE.png new file mode 100644 index 0000000..c5da357 Binary files /dev/null and b/src/main/resources/images/team_flags/SWE.png differ diff --git a/src/main/resources/images/team_flags/UME.png b/src/main/resources/images/team_flags/UME.png new file mode 100644 index 0000000..132dac2 Binary files /dev/null and b/src/main/resources/images/team_flags/UME.png differ diff --git a/src/main/resources/obs/baseball-streaming-all-overlays.json b/src/main/resources/obs/baseball-streaming-all-overlays.json deleted file mode 100644 index 2655705..0000000 --- a/src/main/resources/obs/baseball-streaming-all-overlays.json +++ /dev/null @@ -1,14846 +0,0 @@ -{ - "current_program_scene": "Baseball Streaming All Overlays", - "current_scene": "Baseball Streaming All Overlays", - "current_transition": "Fade", - "groups": [ - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "group", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "custom_size": true, - "cx": 500, - "cy": 700, - "id_counter": 0, - "items": [ - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 311, - "locked": false, - "name": "Current Pitcher Frame", - "pos": { - "x": 0.0, - "y": 0.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 500.0, - "y": 700.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 312, - "locked": false, - "name": "Current Pitcher Background", - "pos": { - "x": 5.0, - "y": 5.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.2552083432674408, - "y": 0.6388888955116272 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 313, - "locked": false, - "name": "Current Pitcher Frame", - "pos": { - "x": 10.0, - "y": 8.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 480.0, - "y": 5.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 314, - "locked": false, - "name": "Current Pitcher Frame", - "pos": { - "x": 10.0, - "y": 183.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 480.0, - "y": 5.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 315, - "locked": false, - "name": "Current Pitcher Frame", - "pos": { - "x": 10.0, - "y": 191.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 480.0, - "y": 50.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 316, - "locked": false, - "name": "Current Pitcher Frame", - "pos": { - "x": 10.0, - "y": 244.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 480.0, - "y": 441.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 317, - "locked": false, - "name": "Current Pitcher Frame", - "pos": { - "x": 10.0, - "y": 687.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 480.0, - "y": 5.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 2, - "blend_type": "normal", - "bounds": { - "x": 124.0, - "y": 164.0 - }, - "bounds_align": 2, - "bounds_type": 1, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 318, - "locked": false, - "name": "Current Pitcher Player Image", - "pos": { - "x": 134.0, - "y": 98.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.27133458852767944, - "y": 0.27049165964126587 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 6, - "blend_type": "normal", - "bounds": { - "x": 254.0, - "y": 80.0 - }, - "bounds_align": 2, - "bounds_type": 5, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 319, - "locked": false, - "name": "Current Picther Team Flag", - "pos": { - "x": 485.0, - "y": 20.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 9, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 320, - "locked": false, - "name": "Current Pitcher First Name", - "pos": { - "x": 145.0, - "y": 145.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 321, - "locked": false, - "name": "Current Pitcher Last Name", - "pos": { - "x": 145.0, - "y": 145.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 322, - "locked": false, - "name": "Current Pitcher Stats For Season", - "pos": { - "x": 250.0, - "y": 213.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 323, - "locked": false, - "name": "Current Pitcher Games", - "pos": { - "x": 30.0, - "y": 265.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 324, - "locked": false, - "name": "Current Pitcher Era", - "pos": { - "x": 30.0, - "y": 310.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 325, - "locked": false, - "name": "Current Pitcher Record", - "pos": { - "x": 30.0, - "y": 355.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 326, - "locked": false, - "name": "Current Pitcher Innings", - "pos": { - "x": 30.0, - "y": 435.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 327, - "locked": false, - "name": "Current Pitcher Hits", - "pos": { - "x": 30.0, - "y": 480.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 328, - "locked": false, - "name": "Current Pitcher Walks", - "pos": { - "x": 30.0, - "y": 525.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 329, - "locked": false, - "name": "Current Pitcher Strikeouts", - "pos": { - "x": 30.0, - "y": 570.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 330, - "locked": false, - "name": "Current Pitcher HR Allowed", - "pos": { - "x": 30.0, - "y": 615.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 331, - "locked": false, - "name": "Current Pitcher Games Value", - "pos": { - "x": 420.0, - "y": 263.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 332, - "locked": false, - "name": "Current Pitcher Era Value", - "pos": { - "x": 420.0, - "y": 308.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 333, - "locked": false, - "name": "Current Pitcher Record Value", - "pos": { - "x": 420.0, - "y": 353.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 334, - "locked": false, - "name": "Current Pitcher Innings Value", - "pos": { - "x": 420.0, - "y": 433.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 335, - "locked": false, - "name": "Current Pitcher Hits Value", - "pos": { - "x": 420.0, - "y": 478.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 336, - "locked": false, - "name": "Current Pitcher Walks Value", - "pos": { - "x": 420.0, - "y": 523.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 337, - "locked": false, - "name": "Current Pitcher Strikeouts Value", - "pos": { - "x": 420.0, - "y": 568.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 338, - "locked": false, - "name": "Current Pitcher HR Allowed Value", - "pos": { - "x": 420.0, - "y": 613.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - } - ] - }, - "sync": 0, - "versioned_id": "group", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": { - "libobs.hide_scene_item.Lineups 1": [], - "libobs.hide_scene_item.Lineups 2": [], - "libobs.hide_scene_item.Lineups 3": [], - "libobs.hide_scene_item.Lineups 4": [], - "libobs.hide_scene_item.Lineups 5": [], - "libobs.hide_scene_item.Lineups 6": [], - "libobs.hide_scene_item.Lineups 7": [], - "libobs.hide_scene_item.Lineups 8": [], - "libobs.hide_scene_item.Lineups 9": [], - "libobs.hide_scene_item.Lineups Away Flag": [], - "libobs.hide_scene_item.Lineups Away Frame": [], - "libobs.hide_scene_item.Lineups Away Name 1": [], - "libobs.hide_scene_item.Lineups Away Name 2": [], - "libobs.hide_scene_item.Lineups Away Name 3": [], - "libobs.hide_scene_item.Lineups Away Name 4": [], - "libobs.hide_scene_item.Lineups Away Name 5": [], - "libobs.hide_scene_item.Lineups Away Name 6": [], - "libobs.hide_scene_item.Lineups Away Name 7": [], - "libobs.hide_scene_item.Lineups Away Name 8": [], - "libobs.hide_scene_item.Lineups Away Name 9": [], - "libobs.hide_scene_item.Lineups Away Pos 1": [], - "libobs.hide_scene_item.Lineups Away Pos 2": [], - "libobs.hide_scene_item.Lineups Away Pos 3": [], - "libobs.hide_scene_item.Lineups Away Pos 4": [], - "libobs.hide_scene_item.Lineups Away Pos 5": [], - "libobs.hide_scene_item.Lineups Away Pos 6": [], - "libobs.hide_scene_item.Lineups Away Pos 7": [], - "libobs.hide_scene_item.Lineups Away Pos 8": [], - "libobs.hide_scene_item.Lineups Away Pos 9": [], - "libobs.hide_scene_item.Lineups Away Team": [], - "libobs.hide_scene_item.Lineups Background": [], - "libobs.hide_scene_item.Lineups Home Flag": [], - "libobs.hide_scene_item.Lineups Home Frame": [], - "libobs.hide_scene_item.Lineups Home Name 1": [], - "libobs.hide_scene_item.Lineups Home Name 2": [], - "libobs.hide_scene_item.Lineups Home Name 3": [], - "libobs.hide_scene_item.Lineups Home Name 4": [], - "libobs.hide_scene_item.Lineups Home Name 5": [], - "libobs.hide_scene_item.Lineups Home Name 6": [], - "libobs.hide_scene_item.Lineups Home Name 7": [], - "libobs.hide_scene_item.Lineups Home Name 8": [], - "libobs.hide_scene_item.Lineups Home Name 9": [], - "libobs.hide_scene_item.Lineups Home Pos 1": [], - "libobs.hide_scene_item.Lineups Home Pos 2": [], - "libobs.hide_scene_item.Lineups Home Pos 3": [], - "libobs.hide_scene_item.Lineups Home Pos 4": [], - "libobs.hide_scene_item.Lineups Home Pos 5": [], - "libobs.hide_scene_item.Lineups Home Pos 6": [], - "libobs.hide_scene_item.Lineups Home Pos 7": [], - "libobs.hide_scene_item.Lineups Home Pos 8": [], - "libobs.hide_scene_item.Lineups Home Pos 9": [], - "libobs.hide_scene_item.Lineups Home Team": [], - "libobs.hide_scene_item.Lineups Line Separator": [], - "libobs.hide_scene_item.Lineups Starting Lineup": [], - "libobs.show_scene_item.Lineups 1": [], - "libobs.show_scene_item.Lineups 2": [], - "libobs.show_scene_item.Lineups 3": [], - "libobs.show_scene_item.Lineups 4": [], - "libobs.show_scene_item.Lineups 5": [], - "libobs.show_scene_item.Lineups 6": [], - "libobs.show_scene_item.Lineups 7": [], - "libobs.show_scene_item.Lineups 8": [], - "libobs.show_scene_item.Lineups 9": [], - "libobs.show_scene_item.Lineups Away Flag": [], - "libobs.show_scene_item.Lineups Away Frame": [], - "libobs.show_scene_item.Lineups Away Name 1": [], - "libobs.show_scene_item.Lineups Away Name 2": [], - "libobs.show_scene_item.Lineups Away Name 3": [], - "libobs.show_scene_item.Lineups Away Name 4": [], - "libobs.show_scene_item.Lineups Away Name 5": [], - "libobs.show_scene_item.Lineups Away Name 6": [], - "libobs.show_scene_item.Lineups Away Name 7": [], - "libobs.show_scene_item.Lineups Away Name 8": [], - "libobs.show_scene_item.Lineups Away Name 9": [], - "libobs.show_scene_item.Lineups Away Pos 1": [], - "libobs.show_scene_item.Lineups Away Pos 2": [], - "libobs.show_scene_item.Lineups Away Pos 3": [], - "libobs.show_scene_item.Lineups Away Pos 4": [], - "libobs.show_scene_item.Lineups Away Pos 5": [], - "libobs.show_scene_item.Lineups Away Pos 6": [], - "libobs.show_scene_item.Lineups Away Pos 7": [], - "libobs.show_scene_item.Lineups Away Pos 8": [], - "libobs.show_scene_item.Lineups Away Pos 9": [], - "libobs.show_scene_item.Lineups Away Team": [], - "libobs.show_scene_item.Lineups Background": [], - "libobs.show_scene_item.Lineups Home Flag": [], - "libobs.show_scene_item.Lineups Home Frame": [], - "libobs.show_scene_item.Lineups Home Name 1": [], - "libobs.show_scene_item.Lineups Home Name 2": [], - "libobs.show_scene_item.Lineups Home Name 3": [], - "libobs.show_scene_item.Lineups Home Name 4": [], - "libobs.show_scene_item.Lineups Home Name 5": [], - "libobs.show_scene_item.Lineups Home Name 6": [], - "libobs.show_scene_item.Lineups Home Name 7": [], - "libobs.show_scene_item.Lineups Home Name 8": [], - "libobs.show_scene_item.Lineups Home Name 9": [], - "libobs.show_scene_item.Lineups Home Pos 1": [], - "libobs.show_scene_item.Lineups Home Pos 2": [], - "libobs.show_scene_item.Lineups Home Pos 3": [], - "libobs.show_scene_item.Lineups Home Pos 4": [], - "libobs.show_scene_item.Lineups Home Pos 5": [], - "libobs.show_scene_item.Lineups Home Pos 6": [], - "libobs.show_scene_item.Lineups Home Pos 7": [], - "libobs.show_scene_item.Lineups Home Pos 8": [], - "libobs.show_scene_item.Lineups Home Pos 9": [], - "libobs.show_scene_item.Lineups Home Team": [], - "libobs.show_scene_item.Lineups Line Separator": [], - "libobs.show_scene_item.Lineups Starting Lineup": [] - }, - "id": "group", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "custom_size": true, - "cx": 1520, - "cy": 805, - "id_counter": 0, - "items": [ - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 111, - "locked": false, - "name": "Lineups Away Frame", - "pos": { - "x": 0.0, - "y": 195.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 710.0, - "y": 610.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 112, - "locked": false, - "name": "Lineups Background", - "pos": { - "x": 5.0, - "y": 200.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.3645833432674408, - "y": 0.55555558204650879 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 113, - "locked": false, - "name": "Lineups Away Frame", - "pos": { - "x": 15.0, - "y": 265.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 680.0, - "y": 4.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 114, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 15.0, - "y": 325.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 115, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 15.0, - "y": 383.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 116, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 15.0, - "y": 441.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 117, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 15.0, - "y": 499.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 118, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 15.0, - "y": 557.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 119, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 15.0, - "y": 615.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 120, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 15.0, - "y": 673.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 121, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 15.0, - "y": 731.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 122, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 15.0, - "y": 789.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 6, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 123, - "locked": false, - "name": "Lineups Starting Lineup", - "pos": { - "x": 330.0, - "y": 205.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 124, - "locked": false, - "name": "Lineups Away Team", - "pos": { - "x": 340.0, - "y": 205.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 125, - "locked": false, - "name": "Lineups 1", - "pos": { - "x": 30.0, - "y": 290.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 126, - "locked": false, - "name": "Lineups 2", - "pos": { - "x": 30.0, - "y": 348.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 127, - "locked": false, - "name": "Lineups 3", - "pos": { - "x": 30.0, - "y": 406.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 128, - "locked": false, - "name": "Lineups 4", - "pos": { - "x": 30.0, - "y": 464.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 129, - "locked": false, - "name": "Lineups 5", - "pos": { - "x": 30.0, - "y": 522.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 130, - "locked": false, - "name": "Lineups 6", - "pos": { - "x": 30.0, - "y": 580.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 131, - "locked": false, - "name": "Lineups 7", - "pos": { - "x": 30.0, - "y": 638.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 132, - "locked": false, - "name": "Lineups 8", - "pos": { - "x": 30.0, - "y": 696.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 133, - "locked": false, - "name": "Lineups 9", - "pos": { - "x": 30.0, - "y": 754.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 134, - "locked": false, - "name": "Lineups Away Name 1", - "pos": { - "x": 70.0, - "y": 290.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 135, - "locked": false, - "name": "Lineups Away Name 2", - "pos": { - "x": 70.0, - "y": 348.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 136, - "locked": false, - "name": "Lineups Away Name 3", - "pos": { - "x": 70.0, - "y": 406.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 137, - "locked": false, - "name": "Lineups Away Name 4", - "pos": { - "x": 70.0, - "y": 464.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 138, - "locked": false, - "name": "Lineups Away Name 5", - "pos": { - "x": 70.0, - "y": 522.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 139, - "locked": false, - "name": "Lineups Away Name 6", - "pos": { - "x": 70.0, - "y": 580.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 140, - "locked": false, - "name": "Lineups Away Name 7", - "pos": { - "x": 70.0, - "y": 638.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 141, - "locked": false, - "name": "Lineups Away Name 8", - "pos": { - "x": 70.0, - "y": 696.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 142, - "locked": false, - "name": "Lineups Away Name 9", - "pos": { - "x": 70.0, - "y": 754.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 143, - "locked": false, - "name": "Lineups Away Pos 1", - "pos": { - "x": 660.0, - "y": 290.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 144, - "locked": false, - "name": "Lineups Away Pos 2", - "pos": { - "x": 660.0, - "y": 348.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 145, - "locked": false, - "name": "Lineups Away Pos 3", - "pos": { - "x": 660.0, - "y": 406.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 146, - "locked": false, - "name": "Lineups Away Pos 4", - "pos": { - "x": 660.0, - "y": 464.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 147, - "locked": false, - "name": "Lineups Away Pos 5", - "pos": { - "x": 660.0, - "y": 522.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 148, - "locked": false, - "name": "Lineups Away Pos 6", - "pos": { - "x": 660.0, - "y": 580.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 149, - "locked": false, - "name": "Lineups Away Pos 7", - "pos": { - "x": 660.0, - "y": 638.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 150, - "locked": false, - "name": "Lineups Away Pos 8", - "pos": { - "x": 660.0, - "y": 696.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 151, - "locked": false, - "name": "Lineups Away Pos 9", - "pos": { - "x": 660.0, - "y": 754.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 152, - "locked": false, - "name": "Lineups Home Frame", - "pos": { - "x": 810.0, - "y": 195.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 710.0, - "y": 610.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 153, - "locked": false, - "name": "Lineups Background", - "pos": { - "x": 815.0, - "y": 200.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.3645833432674408, - "y": 0.55555558204650879 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 154, - "locked": false, - "name": "Lineups Home Frame", - "pos": { - "x": 825.0, - "y": 265.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 680.0, - "y": 4.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 163, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 825.0, - "y": 325.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 155, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 825.0, - "y": 383.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 156, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 825.0, - "y": 441.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 157, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 825.0, - "y": 499.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 158, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 825.0, - "y": 557.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 159, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 825.0, - "y": 615.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 160, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 825.0, - "y": 673.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 161, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 825.0, - "y": 731.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 162, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 825.0, - "y": 789.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 6, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 164, - "locked": false, - "name": "Lineups Starting Lineup", - "pos": { - "x": 1140.0, - "y": 205.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 165, - "locked": false, - "name": "Lineups Home Team", - "pos": { - "x": 1150.0, - "y": 205.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 174, - "locked": false, - "name": "Lineups 1", - "pos": { - "x": 840.0, - "y": 290.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 166, - "locked": false, - "name": "Lineups 2", - "pos": { - "x": 840.0, - "y": 348.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 167, - "locked": false, - "name": "Lineups 3", - "pos": { - "x": 840.0, - "y": 406.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 168, - "locked": false, - "name": "Lineups 4", - "pos": { - "x": 840.0, - "y": 464.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 169, - "locked": false, - "name": "Lineups 5", - "pos": { - "x": 840.0, - "y": 522.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 170, - "locked": false, - "name": "Lineups 6", - "pos": { - "x": 840.0, - "y": 580.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 171, - "locked": false, - "name": "Lineups 7", - "pos": { - "x": 840.0, - "y": 638.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 172, - "locked": false, - "name": "Lineups 8", - "pos": { - "x": 840.0, - "y": 696.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 173, - "locked": false, - "name": "Lineups 9", - "pos": { - "x": 840.0, - "y": 754.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 183, - "locked": false, - "name": "Lineups Home Name 1", - "pos": { - "x": 880.0, - "y": 290.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 175, - "locked": false, - "name": "Lineups Home Name 2", - "pos": { - "x": 880.0, - "y": 348.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 176, - "locked": false, - "name": "Lineups Home Name 3", - "pos": { - "x": 880.0, - "y": 406.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 177, - "locked": false, - "name": "Lineups Home Name 4", - "pos": { - "x": 880.0, - "y": 464.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 178, - "locked": false, - "name": "Lineups Home Name 5", - "pos": { - "x": 880.0, - "y": 522.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 179, - "locked": false, - "name": "Lineups Home Name 6", - "pos": { - "x": 880.0, - "y": 580.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 180, - "locked": false, - "name": "Lineups Home Name 7", - "pos": { - "x": 880.0, - "y": 638.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 181, - "locked": false, - "name": "Lineups Home Name 8", - "pos": { - "x": 880.0, - "y": 696.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 182, - "locked": false, - "name": "Lineups Home Name 9", - "pos": { - "x": 880.0, - "y": 754.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 192, - "locked": false, - "name": "Lineups Home Pos 1", - "pos": { - "x": 1470.0, - "y": 290.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 184, - "locked": false, - "name": "Lineups Home Pos 2", - "pos": { - "x": 1470.0, - "y": 348.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 185, - "locked": false, - "name": "Lineups Home Pos 3", - "pos": { - "x": 1470.0, - "y": 406.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 186, - "locked": false, - "name": "Lineups Home Pos 4", - "pos": { - "x": 1470.0, - "y": 464.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 187, - "locked": false, - "name": "Lineups Home Pos 5", - "pos": { - "x": 1470.0, - "y": 522.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 188, - "locked": false, - "name": "Lineups Home Pos 6", - "pos": { - "x": 1470.0, - "y": 580.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 189, - "locked": false, - "name": "Lineups Home Pos 7", - "pos": { - "x": 1470.0, - "y": 638.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 190, - "locked": false, - "name": "Lineups Home Pos 8", - "pos": { - "x": 1470.0, - "y": 696.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 191, - "locked": false, - "name": "Lineups Home Pos 9", - "pos": { - "x": 1470.0, - "y": 754.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 8, - "blend_type": "normal", - "bounds": { - "x": 226.0, - "y": 170.0 - }, - "bounds_align": 8, - "bounds_type": 5, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 193, - "locked": false, - "name": "Lineups Away Flag", - "pos": { - "x": 355.0, - "y": 170.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.8828125, - "y": 0.88082903623580933 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 8, - "blend_type": "normal", - "bounds": { - "x": 226.0, - "y": 170.0 - }, - "bounds_align": 8, - "bounds_type": 5, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 194, - "locked": false, - "name": "Lineups Home Flag", - "pos": { - "x": 1165.0, - "y": 170.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.88281238079071045, - "y": 0.880828857421875 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - } - ] - }, - "sync": 0, - "versioned_id": "group", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": { - "libobs.hide_scene_item.Away Score": [], - "libobs.hide_scene_item.Away Score Background": [], - "libobs.hide_scene_item.Away Team": [], - "libobs.hide_scene_item.Bases": [], - "libobs.hide_scene_item.Count": [], - "libobs.hide_scene_item.Home Score": [], - "libobs.hide_scene_item.Home Score Background": [], - "libobs.hide_scene_item.Home Team": [], - "libobs.hide_scene_item.Inning": [], - "libobs.hide_scene_item.Inning Half": [], - "libobs.hide_scene_item.Main Score Background": [], - "libobs.hide_scene_item.Outs": [], - "libobs.hide_scene_item.Pitch Count": [], - "libobs.hide_scene_item.Pitcher Lastname": [], - "libobs.hide_scene_item.Scoreboard Background": [], - "libobs.show_scene_item.Away Score": [], - "libobs.show_scene_item.Away Score Background": [], - "libobs.show_scene_item.Away Team": [], - "libobs.show_scene_item.Bases": [], - "libobs.show_scene_item.Count": [], - "libobs.show_scene_item.Home Score": [], - "libobs.show_scene_item.Home Score Background": [], - "libobs.show_scene_item.Home Team": [], - "libobs.show_scene_item.Inning": [], - "libobs.show_scene_item.Inning Half": [], - "libobs.show_scene_item.Main Score Background": [], - "libobs.show_scene_item.Outs": [], - "libobs.show_scene_item.Pitch Count": [], - "libobs.show_scene_item.Pitcher Lastname": [], - "libobs.show_scene_item.Scoreboard Background": [] - }, - "id": "group", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Scoreboard", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "custom_size": true, - "cx": 350, - "cy": 156, - "id_counter": 0, - "items": [ - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 21, - "locked": false, - "name": "Scoreboard Background", - "pos": { - "x": 0.0, - "y": 0.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0028653144836426, - "y": 1.0129870176315308 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 22, - "locked": false, - "name": "Away Score Background", - "pos": { - "x": 3.0, - "y": 3.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 156.0, - "y": 55.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 23, - "locked": false, - "name": "Home Score Background", - "pos": { - "x": 3.0, - "y": 61.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 156.0, - "y": 55.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 24, - "locked": false, - "name": "Main Score Background", - "pos": { - "x": 162.0, - "y": 3.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 185.0, - "y": 113.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 66.0, - "y": 30.0 - }, - "bounds_align": 0, - "bounds_type": 2, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 25, - "locked": false, - "name": "Away Team", - "pos": { - "x": 15.0, - "y": 10.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 66.0, - "y": 30.0 - }, - "bounds_align": 0, - "bounds_type": 2, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 26, - "locked": false, - "name": "Away Score", - "pos": { - "x": 125.0, - "y": 10.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 66.0, - "y": 30.0 - }, - "bounds_align": 0, - "bounds_type": 2, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 27, - "locked": false, - "name": "Home Team", - "pos": { - "x": 15.0, - "y": 68.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 66.0, - "y": 30.0 - }, - "bounds_align": 0, - "bounds_type": 2, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 28, - "locked": false, - "name": "Home Score", - "pos": { - "x": 125.0, - "y": 68.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 29, - "locked": false, - "name": "Bases", - "pos": { - "x": 175.0, - "y": 16.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.12878787517547607, - "y": 0.12809917330741882 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 30, - "locked": false, - "name": "Outs", - "pos": { - "x": 194.0, - "y": 85.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.13407821953296661, - "y": 0.13380281627178192 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 31, - "locked": false, - "name": "Inning Half", - "pos": { - "x": 285.0, - "y": 21.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 32, - "locked": false, - "name": "Inning", - "pos": { - "x": 323.0, - "y": 11.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 33, - "locked": false, - "name": "Count", - "pos": { - "x": 272.0, - "y": 73.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 34, - "locked": false, - "name": "Pitcher Lastname", - "pos": { - "x": 15.0, - "y": 121.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 6, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 35, - "locked": false, - "name": "Pitch Count", - "pos": { - "x": 340.0, - "y": 121.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - } - ] - }, - "sync": 0, - "versioned_id": "group", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": { - "libobs.hide_scene_item.Current Batter AVG": [], - "libobs.hide_scene_item.Current Batter AVG Value": [], - "libobs.hide_scene_item.Current Batter Background": [], - "libobs.hide_scene_item.Current Batter Frame": [], - "libobs.hide_scene_item.Current Batter HR": [], - "libobs.hide_scene_item.Current Batter HR Value": [], - "libobs.hide_scene_item.Current Batter Name": [], - "libobs.hide_scene_item.Current Batter Narrative": [], - "libobs.hide_scene_item.Current Batter Narrative Background": [], - "libobs.hide_scene_item.Current Batter OPS": [], - "libobs.hide_scene_item.Current Batter OPS Value": [], - "libobs.hide_scene_item.Current Batter Player Image": [], - "libobs.hide_scene_item.Current Batter Position": [], - "libobs.hide_scene_item.Current Batter RBI": [], - "libobs.hide_scene_item.Current Batter RBI Value": [], - "libobs.hide_scene_item.Current Batter Stats Series": [], - "libobs.hide_scene_item.Current Batter Team Flag": [], - "libobs.show_scene_item.Current Batter AVG": [], - "libobs.show_scene_item.Current Batter AVG Value": [], - "libobs.show_scene_item.Current Batter Background": [], - "libobs.show_scene_item.Current Batter Frame": [], - "libobs.show_scene_item.Current Batter HR": [], - "libobs.show_scene_item.Current Batter HR Value": [], - "libobs.show_scene_item.Current Batter Name": [], - "libobs.show_scene_item.Current Batter Narrative": [], - "libobs.show_scene_item.Current Batter Narrative Background": [], - "libobs.show_scene_item.Current Batter OPS": [], - "libobs.show_scene_item.Current Batter OPS Value": [], - "libobs.show_scene_item.Current Batter Player Image": [], - "libobs.show_scene_item.Current Batter Position": [], - "libobs.show_scene_item.Current Batter RBI": [], - "libobs.show_scene_item.Current Batter RBI Value": [], - "libobs.show_scene_item.Current Batter Stats Series": [], - "libobs.show_scene_item.Current Batter Team Flag": [] - }, - "id": "group", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Batter", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "custom_size": true, - "cx": 1469, - "cy": 190, - "id_counter": 0, - "items": [ - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 43, - "locked": false, - "name": "Current Batter Frame", - "pos": { - "x": 155.0, - "y": 0.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1060.0, - "y": 190.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 44, - "locked": false, - "name": "Current Batter Background", - "pos": { - "x": 158.0, - "y": 3.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.54895836114883423, - "y": 0.17037037014961243 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 45, - "locked": false, - "name": "Current Batter Narrative Background", - "pos": { - "x": 162.0, - "y": 48.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 46, - "locked": false, - "name": "Current Batter Frame", - "pos": { - "x": 162.0, - "y": 48.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1046.0, - "y": 3.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 47, - "locked": false, - "name": "Current Batter Frame", - "pos": { - "x": 421.0, - "y": 146.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.0, - "y": 32.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 48, - "locked": false, - "name": "Current Batter Frame", - "pos": { - "x": 685.0, - "y": 146.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.0, - "y": 32.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 49, - "locked": false, - "name": "Current Batter Frame", - "pos": { - "x": 949.0, - "y": 146.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.0, - "y": 32.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 9, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 50, - "locked": false, - "name": "Current Batter OPS", - "pos": { - "x": 1083.0, - "y": 173.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.5, - "y": 1.5499999523162842 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 9, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 51, - "locked": false, - "name": "Current Batter RBI", - "pos": { - "x": 820.0, - "y": 173.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.5, - "y": 1.5499999523162842 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 9, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 53, - "locked": false, - "name": "Current Batter HR", - "pos": { - "x": 556.0, - "y": 173.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.5, - "y": 1.5499999523162842 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 9, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 54, - "locked": false, - "name": "Current Batter AVG", - "pos": { - "x": 293.0, - "y": 173.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.5, - "y": 1.5499999523162842 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 10, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 55, - "locked": false, - "name": "Current Batter OPS Value", - "pos": { - "x": 1077.0, - "y": 173.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.5, - "y": 1.5499999523162842 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 10, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 56, - "locked": false, - "name": "Current Batter RBI Value", - "pos": { - "x": 814.0, - "y": 173.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.5, - "y": 1.5499999523162842 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 10, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 58, - "locked": false, - "name": "Current Batter HR Value", - "pos": { - "x": 550.0, - "y": 173.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.5, - "y": 1.5499999523162842 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 10, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 59, - "locked": false, - "name": "Current Batter AVG Value", - "pos": { - "x": 287.0, - "y": 173.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.5, - "y": 1.5499999523162842 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 6, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 60, - "locked": false, - "name": "Current Batter Stats Series", - "pos": { - "x": 1205.0, - "y": 5.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 980.0, - "y": 47.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 61, - "locked": false, - "name": "Current Batter Narrative", - "pos": { - "x": 221.0, - "y": 91.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 6, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 62, - "locked": false, - "name": "Current Batter Position", - "pos": { - "x": 295.0, - "y": 13.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 63, - "locked": false, - "name": "Current Batter Name", - "pos": { - "x": 305.0, - "y": 1.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 6, - "blend_type": "normal", - "bounds": { - "x": 145.0, - "y": 184.0 - }, - "bounds_align": 2, - "bounds_type": 5, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 64, - "locked": false, - "name": "Current Batter Player Image", - "pos": { - "x": 145.0, - "y": 3.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.1006944477558136, - "y": 0.095833331346511841 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 244.0, - "y": 184.0 - }, - "bounds_align": 1, - "bounds_type": 5, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 65, - "locked": false, - "name": "Current Batter Team Flag", - "pos": { - "x": 1225.0, - "y": 3.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - } - ] - }, - "sync": 0, - "versioned_id": "group", - "volume": 1.0 - } - ], - "modules": { - "auto-scene-switcher": { - "active": false, - "interval": 300, - "non_matching_scene": "", - "switch_if_not_matching": false, - "switches": [] - }, - "decklink_captions": { - "source": "" - }, - "output-timer": { - "autoStartRecordTimer": false, - "autoStartStreamTimer": false, - "pauseRecordTimer": true, - "recordTimerHours": 0, - "recordTimerMinutes": 0, - "recordTimerSeconds": 30, - "streamTimerHours": 0, - "streamTimerMinutes": 0, - "streamTimerSeconds": 30 - }, - "scripts-tool": [] - }, - "name": "baseball-streaming", - "preview_locked": false, - "quick_transitions": [ - { - "duration": 300, - "fade_to_black": false, - "hotkeys": [], - "id": 13, - "name": "Cut" - }, - { - "duration": 300, - "fade_to_black": false, - "hotkeys": [], - "id": 14, - "name": "Fade" - }, - { - "duration": 300, - "fade_to_black": true, - "hotkeys": [], - "id": 15, - "name": "Fade" - } - ], - "saved_projectors": [], - "scaling_enabled": false, - "scaling_level": 0, - "scaling_off_x": 0.0, - "scaling_off_y": 0.0, - "scene_order": [ - { - "name": "Baseball Streaming All Overlays" - } - ], - "sources": [ - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher Last Name", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 32, - "style": "Bold" - }, - "from_file": true, - "text": "", - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_pitcher/lastname.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher HR Allowed", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 0, - "size": 36, - "style": "Regular" - }, - "text": "HR ALLOWED" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher Strikeouts", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 0, - "size": 36, - "style": "Regular" - }, - "text": "STRIKEOUTS" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher Walks", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 0, - "size": 36, - "style": "Regular" - }, - "text": "WALKS" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher Hits", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 0, - "size": 36, - "style": "Regular" - }, - "text": "HITS" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher Innings", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 0, - "size": 36, - "style": "Regular" - }, - "text": "INNINGS" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher Games", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 0, - "size": 36, - "style": "Regular" - }, - "text": "GAMES" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher First Name", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 350, - "font": { - "face": "Arial", - "flags": 0, - "size": 32, - "style": "Regular" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_pitcher/firstname.txt", - "undo_sname": "Current Pitcher First Name", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "image_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher Player Image", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "file": "[PATH_TO_OBS_RESOURCE_DIR]/current_pitcher/image.png" - }, - "sync": 0, - "versioned_id": "image_source", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "image_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Background", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "file": "[PATH_TO_OBS_RESOURCE_DIR]/static_background.jpg" - }, - "sync": 0, - "versioned_id": "image_source", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "image_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Flag", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/home/1/flag.png" - }, - "sync": 0, - "versioned_id": "image_source", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "image_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Flag", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/away/1/flag.png" - }, - "sync": 0, - "versioned_id": "image_source", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Pos 1", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/home/1/pos.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Pos 9", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/home/9/pos.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Pos 8", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/home/8/pos.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Pos 7", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/home/7/pos.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Pos 6", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/home/6/pos.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Pos 5", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/home/5/pos.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Pos 4", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/home/4/pos.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Pos 3", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/home/3/pos.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Pos 2", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/home/2/pos.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Name 1", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 580, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/home/1/fullname.txt", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Name 9", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 580, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/home/9/fullname.txt", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Name 8", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 580, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/home/8/fullname.txt", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Name 7", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 580, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/home/7/fullname.txt", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Name 6", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 580, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/home/6/fullname.txt", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Name 5", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 580, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/home/5/fullname.txt", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Name 4", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 580, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/home/4/fullname.txt", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Name 3", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 580, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/home/3/fullname.txt", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Name 2", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 580, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/home/2/fullname.txt", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Team", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 42, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/home_team.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "image_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Home Frame", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "file": "[PATH_TO_OBS_RESOURCE_DIR]/home_color.png" - }, - "sync": 0, - "versioned_id": "image_source", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Pos 9", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/away/9/pos.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Pos 8", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/away/8/pos.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Pos 7", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/away/7/pos.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Pos 6", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/away/6/pos.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Pos 5", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/away/5/pos.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Pos 4", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/away/4/pos.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Pos 3", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/away/3/pos.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Pos 2", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/away/2/pos.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Name 9", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 580, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/away/9/fullname.txt", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Name 8", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 580, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/away/8/fullname.txt", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Name 7", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 580, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/away/7/fullname.txt", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Name 6", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 580, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/away/6/fullname.txt", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Name 5", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 580, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/away/5/fullname.txt", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Name 4", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 580, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/away/4/fullname.txt", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Name 3", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 580, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/away/3/fullname.txt", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Name 2", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 580, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/away/2/fullname.txt", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups 9", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "text": "9" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups 8", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "text": "8" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups 7", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "text": "7" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups 6", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "text": "6" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups 5", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "text": "5" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups 4", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "text": "4" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups 3", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "text": "3" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups 2", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "text": "2" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Pos 1", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/away/1/pos.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Name 1", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 580, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/lineups/away/1/fullname.txt", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups 1", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 28, - "style": "Bold" - }, - "text": "1" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Team", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 42, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/away_team.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Starting Lineup", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 42, - "style": "Bold" - }, - "text": "Starting Lineup" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "color_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Line Separator", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color": 4287137928, - "height": 1, - "width": 215 - }, - "sync": 0, - "versioned_id": "color_source_v3", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "color_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Background", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color": 4292927967 - }, - "sync": 0, - "versioned_id": "color_source_v3", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "image_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Lineups Away Frame", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "file": "[PATH_TO_OBS_RESOURCE_DIR]/away_color.png" - }, - "sync": 0, - "versioned_id": "image_source", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Batter Narrative", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "custom_width": 980, - "font": { - "face": "Arial", - "flags": 1, - "size": 38, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_batter/batting.txt", - "word_wrap": true - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Batter Stats Series", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4282071867, - "color2": 4282071867, - "font": { - "face": "Arial", - "flags": 2, - "size": 22, - "style": "Italic" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_batter/stats_for_series.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Batter AVG Value", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 24, - "style": "Bold" - }, - "from_file": true, - "text": "", - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_batter/avg.txt", - "undo_sname": "Current Batter OPS Value" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Batter HR Value", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 24, - "style": "Bold" - }, - "from_file": true, - "text": "", - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_batter/hr.txt", - "undo_sname": "Current Batter OPS Value" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Batter RBI Value", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 24, - "style": "Bold" - }, - "from_file": true, - "text": "", - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_batter/rbi.txt", - "undo_sname": "Current Batter OPS Value" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Batter RBI", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 0, - "size": 18, - "style": "Regular" - }, - "text": "RBI" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Batter OPS", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 0, - "size": 18, - "style": "Regular" - }, - "text": "OPS" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "color_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Batter Narrative Background", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color": 4291282887, - "height": 90, - "width": 1046 - }, - "sync": 0, - "versioned_id": "color_source_v3", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "image_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Batter Frame", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "file": "[PATH_TO_OBS_RESOURCE_DIR]/current_batter/team_color.png" - }, - "sync": 0, - "versioned_id": "image_source", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "image_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Main Score Background", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "file": "[PATH_TO_OBS_RESOURCE_DIR]/home_color.png" - }, - "sync": 0, - "versioned_id": "image_source", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "image_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Away Score Background", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "file": "[PATH_TO_OBS_RESOURCE_DIR]/away_color.png", - "undo_sname": "Away Score Background" - }, - "sync": 0, - "versioned_id": "image_source", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": { - "OBSBasic.SelectScene": [], - "libobs.hide_scene_item.Background": [], - "libobs.hide_scene_item.Current Batter": [], - "libobs.hide_scene_item.Current Picther Team Flag": [], - "libobs.hide_scene_item.Current Pitcher": [], - "libobs.hide_scene_item.Current Pitcher Background": [], - "libobs.hide_scene_item.Current Pitcher Era": [], - "libobs.hide_scene_item.Current Pitcher Era Value": [], - "libobs.hide_scene_item.Current Pitcher First Name": [], - "libobs.hide_scene_item.Current Pitcher Frame": [], - "libobs.hide_scene_item.Current Pitcher Games": [], - "libobs.hide_scene_item.Current Pitcher Games Value": [], - "libobs.hide_scene_item.Current Pitcher HR Allowed": [], - "libobs.hide_scene_item.Current Pitcher HR Allowed Value": [], - "libobs.hide_scene_item.Current Pitcher Hits": [], - "libobs.hide_scene_item.Current Pitcher Hits Value": [], - "libobs.hide_scene_item.Current Pitcher Innings": [], - "libobs.hide_scene_item.Current Pitcher Innings Value": [], - "libobs.hide_scene_item.Current Pitcher Last Name": [], - "libobs.hide_scene_item.Current Pitcher Player Image": [], - "libobs.hide_scene_item.Current Pitcher Record": [], - "libobs.hide_scene_item.Current Pitcher Record Value": [], - "libobs.hide_scene_item.Current Pitcher Stats For Season": [], - "libobs.hide_scene_item.Current Pitcher Strikeouts": [], - "libobs.hide_scene_item.Current Pitcher Strikeouts Value": [], - "libobs.hide_scene_item.Current Pitcher Walks": [], - "libobs.hide_scene_item.Current Pitcher Walks Value": [], - "libobs.hide_scene_item.Lineups": [], - "libobs.hide_scene_item.Scoreboard": [], - "libobs.show_scene_item.Background": [], - "libobs.show_scene_item.Current Batter": [], - "libobs.show_scene_item.Current Picther Team Flag": [], - "libobs.show_scene_item.Current Pitcher": [], - "libobs.show_scene_item.Current Pitcher Background": [], - "libobs.show_scene_item.Current Pitcher Era": [], - "libobs.show_scene_item.Current Pitcher Era Value": [], - "libobs.show_scene_item.Current Pitcher First Name": [], - "libobs.show_scene_item.Current Pitcher Frame": [], - "libobs.show_scene_item.Current Pitcher Games": [], - "libobs.show_scene_item.Current Pitcher Games Value": [], - "libobs.show_scene_item.Current Pitcher HR Allowed": [], - "libobs.show_scene_item.Current Pitcher HR Allowed Value": [], - "libobs.show_scene_item.Current Pitcher Hits": [], - "libobs.show_scene_item.Current Pitcher Hits Value": [], - "libobs.show_scene_item.Current Pitcher Innings": [], - "libobs.show_scene_item.Current Pitcher Innings Value": [], - "libobs.show_scene_item.Current Pitcher Last Name": [], - "libobs.show_scene_item.Current Pitcher Player Image": [], - "libobs.show_scene_item.Current Pitcher Record": [], - "libobs.show_scene_item.Current Pitcher Record Value": [], - "libobs.show_scene_item.Current Pitcher Stats For Season": [], - "libobs.show_scene_item.Current Pitcher Strikeouts": [], - "libobs.show_scene_item.Current Pitcher Strikeouts Value": [], - "libobs.show_scene_item.Current Pitcher Walks": [], - "libobs.show_scene_item.Current Pitcher Walks Value": [], - "libobs.show_scene_item.Lineups": [], - "libobs.show_scene_item.Scoreboard": [] - }, - "id": "scene", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Baseball Streaming All Overlays", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "custom_size": false, - "id_counter": 339, - "items": [ - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 0.0, - "y": 0.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 196, - "locked": false, - "name": "Background", - "pos": { - "x": 0.0, - "y": 0.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": false - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 21, - "locked": false, - "name": "Scoreboard Background", - "pos": { - "x": 95.0, - "y": 54.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0028653144836426, - "y": 1.0129870176315308 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 22, - "locked": false, - "name": "Away Score Background", - "pos": { - "x": 98.0, - "y": 57.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 156.0, - "y": 55.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 23, - "locked": false, - "name": "Home Score Background", - "pos": { - "x": 98.0, - "y": 115.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 156.0, - "y": 55.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 24, - "locked": false, - "name": "Main Score Background", - "pos": { - "x": 257.0, - "y": 57.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 185.0, - "y": 113.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 66.0, - "y": 30.0 - }, - "bounds_align": 0, - "bounds_type": 2, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 25, - "locked": false, - "name": "Away Team", - "pos": { - "x": 110.0, - "y": 64.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 66.0, - "y": 30.0 - }, - "bounds_align": 0, - "bounds_type": 2, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 26, - "locked": false, - "name": "Away Score", - "pos": { - "x": 220.0, - "y": 64.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 66.0, - "y": 30.0 - }, - "bounds_align": 0, - "bounds_type": 2, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 27, - "locked": false, - "name": "Home Team", - "pos": { - "x": 110.0, - "y": 122.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 66.0, - "y": 30.0 - }, - "bounds_align": 0, - "bounds_type": 2, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 28, - "locked": false, - "name": "Home Score", - "pos": { - "x": 220.0, - "y": 122.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 29, - "locked": false, - "name": "Bases", - "pos": { - "x": 270.0, - "y": 70.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.12878787517547607, - "y": 0.12809917330741882 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 30, - "locked": false, - "name": "Outs", - "pos": { - "x": 289.0, - "y": 139.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.13407821953296661, - "y": 0.13380281627178192 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 31, - "locked": false, - "name": "Inning Half", - "pos": { - "x": 380.0, - "y": 75.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 32, - "locked": false, - "name": "Inning", - "pos": { - "x": 418.0, - "y": 65.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 33, - "locked": false, - "name": "Count", - "pos": { - "x": 367.0, - "y": 127.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 34, - "locked": false, - "name": "Pitcher Lastname", - "pos": { - "x": 110.0, - "y": 175.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 6, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 35, - "locked": false, - "name": "Pitch Count", - "pos": { - "x": 435.0, - "y": 175.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 0.0, - "y": 0.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 40, - "locked": true, - "name": "Scoreboard", - "pos": { - "x": 95.0, - "y": 54.0 - }, - "private_settings": { - "collapsed": true - }, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": false - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 43, - "locked": false, - "name": "Current Batter Frame", - "pos": { - "x": 430.0, - "y": 855.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1060.0, - "y": 190.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 44, - "locked": false, - "name": "Current Batter Background", - "pos": { - "x": 433.0, - "y": 858.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.54895836114883423, - "y": 0.17037037014961243 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 45, - "locked": false, - "name": "Current Batter Narrative Background", - "pos": { - "x": 437.0, - "y": 903.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 46, - "locked": false, - "name": "Current Batter Frame", - "pos": { - "x": 437.0, - "y": 903.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1046.0, - "y": 3.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 47, - "locked": false, - "name": "Current Batter Frame", - "pos": { - "x": 696.0, - "y": 1001.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.0, - "y": 32.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 48, - "locked": false, - "name": "Current Batter Frame", - "pos": { - "x": 960.0, - "y": 1001.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.0, - "y": 32.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 49, - "locked": false, - "name": "Current Batter Frame", - "pos": { - "x": 1224.0, - "y": 1001.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.0, - "y": 32.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 9, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 50, - "locked": false, - "name": "Current Batter OPS", - "pos": { - "x": 1358.0, - "y": 1028.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.5, - "y": 1.5499999523162842 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 9, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 51, - "locked": false, - "name": "Current Batter RBI", - "pos": { - "x": 1095.0, - "y": 1028.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.5, - "y": 1.5499999523162842 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 9, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 53, - "locked": false, - "name": "Current Batter HR", - "pos": { - "x": 831.0, - "y": 1028.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.5, - "y": 1.5499999523162842 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 9, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 54, - "locked": false, - "name": "Current Batter AVG", - "pos": { - "x": 568.0, - "y": 1028.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.5, - "y": 1.5499999523162842 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 10, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 55, - "locked": false, - "name": "Current Batter OPS Value", - "pos": { - "x": 1352.0, - "y": 1028.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.5, - "y": 1.5499999523162842 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 10, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 56, - "locked": false, - "name": "Current Batter RBI Value", - "pos": { - "x": 1089.0, - "y": 1028.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.5, - "y": 1.5499999523162842 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 10, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 58, - "locked": false, - "name": "Current Batter HR Value", - "pos": { - "x": 825.0, - "y": 1028.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.5, - "y": 1.5499999523162842 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 10, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 59, - "locked": false, - "name": "Current Batter AVG Value", - "pos": { - "x": 562.0, - "y": 1028.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.5, - "y": 1.5499999523162842 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 6, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 60, - "locked": false, - "name": "Current Batter Stats Series", - "pos": { - "x": 1480.0, - "y": 860.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 980.0, - "y": 47.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 61, - "locked": false, - "name": "Current Batter Narrative", - "pos": { - "x": 496.0, - "y": 946.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 6, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 62, - "locked": false, - "name": "Current Batter Position", - "pos": { - "x": 570.0, - "y": 868.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 63, - "locked": false, - "name": "Current Batter Name", - "pos": { - "x": 580.0, - "y": 856.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 6, - "blend_type": "normal", - "bounds": { - "x": 145.0, - "y": 184.0 - }, - "bounds_align": 2, - "bounds_type": 5, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 64, - "locked": false, - "name": "Current Batter Player Image", - "pos": { - "x": 420.0, - "y": 858.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.1006944477558136, - "y": 0.095833331346511841 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 244.0, - "y": 184.0 - }, - "bounds_align": 1, - "bounds_type": 5, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 65, - "locked": false, - "name": "Current Batter Team Flag", - "pos": { - "x": 1500.0, - "y": 858.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 0.0, - "y": 0.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 66, - "locked": true, - "name": "Current Batter", - "pos": { - "x": 275.0, - "y": 855.0 - }, - "private_settings": { - "collapsed": true - }, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": false - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 111, - "locked": false, - "name": "Lineups Away Frame", - "pos": { - "x": 200.0, - "y": 345.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 710.0, - "y": 610.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 112, - "locked": false, - "name": "Lineups Background", - "pos": { - "x": 205.0, - "y": 350.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.3645833432674408, - "y": 0.55555558204650879 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 113, - "locked": false, - "name": "Lineups Away Frame", - "pos": { - "x": 215.0, - "y": 415.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 680.0, - "y": 4.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 114, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 215.0, - "y": 475.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 115, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 215.0, - "y": 533.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 116, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 215.0, - "y": 591.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 117, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 215.0, - "y": 649.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 118, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 215.0, - "y": 707.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 119, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 215.0, - "y": 765.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 120, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 215.0, - "y": 823.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 121, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 215.0, - "y": 881.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 122, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 215.0, - "y": 939.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 6, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 123, - "locked": false, - "name": "Lineups Starting Lineup", - "pos": { - "x": 530.0, - "y": 355.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 124, - "locked": false, - "name": "Lineups Away Team", - "pos": { - "x": 540.0, - "y": 355.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 125, - "locked": false, - "name": "Lineups 1", - "pos": { - "x": 230.0, - "y": 440.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 126, - "locked": false, - "name": "Lineups 2", - "pos": { - "x": 230.0, - "y": 498.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 127, - "locked": false, - "name": "Lineups 3", - "pos": { - "x": 230.0, - "y": 556.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 128, - "locked": false, - "name": "Lineups 4", - "pos": { - "x": 230.0, - "y": 614.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 129, - "locked": false, - "name": "Lineups 5", - "pos": { - "x": 230.0, - "y": 672.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 130, - "locked": false, - "name": "Lineups 6", - "pos": { - "x": 230.0, - "y": 730.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 131, - "locked": false, - "name": "Lineups 7", - "pos": { - "x": 230.0, - "y": 788.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 132, - "locked": false, - "name": "Lineups 8", - "pos": { - "x": 230.0, - "y": 846.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 133, - "locked": false, - "name": "Lineups 9", - "pos": { - "x": 230.0, - "y": 904.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 134, - "locked": false, - "name": "Lineups Away Name 1", - "pos": { - "x": 270.0, - "y": 440.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 135, - "locked": false, - "name": "Lineups Away Name 2", - "pos": { - "x": 270.0, - "y": 498.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 136, - "locked": false, - "name": "Lineups Away Name 3", - "pos": { - "x": 270.0, - "y": 556.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 137, - "locked": false, - "name": "Lineups Away Name 4", - "pos": { - "x": 270.0, - "y": 614.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 138, - "locked": false, - "name": "Lineups Away Name 5", - "pos": { - "x": 270.0, - "y": 672.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 139, - "locked": false, - "name": "Lineups Away Name 6", - "pos": { - "x": 270.0, - "y": 730.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 140, - "locked": false, - "name": "Lineups Away Name 7", - "pos": { - "x": 270.0, - "y": 788.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 141, - "locked": false, - "name": "Lineups Away Name 8", - "pos": { - "x": 270.0, - "y": 846.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 142, - "locked": false, - "name": "Lineups Away Name 9", - "pos": { - "x": 270.0, - "y": 904.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 143, - "locked": false, - "name": "Lineups Away Pos 1", - "pos": { - "x": 860.0, - "y": 440.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 144, - "locked": false, - "name": "Lineups Away Pos 2", - "pos": { - "x": 860.0, - "y": 498.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 145, - "locked": false, - "name": "Lineups Away Pos 3", - "pos": { - "x": 860.0, - "y": 556.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 146, - "locked": false, - "name": "Lineups Away Pos 4", - "pos": { - "x": 860.0, - "y": 614.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 147, - "locked": false, - "name": "Lineups Away Pos 5", - "pos": { - "x": 860.0, - "y": 672.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 148, - "locked": false, - "name": "Lineups Away Pos 6", - "pos": { - "x": 860.0, - "y": 730.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 149, - "locked": false, - "name": "Lineups Away Pos 7", - "pos": { - "x": 860.0, - "y": 788.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 150, - "locked": false, - "name": "Lineups Away Pos 8", - "pos": { - "x": 860.0, - "y": 846.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 151, - "locked": false, - "name": "Lineups Away Pos 9", - "pos": { - "x": 860.0, - "y": 904.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 152, - "locked": false, - "name": "Lineups Home Frame", - "pos": { - "x": 1010.0, - "y": 345.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 710.0, - "y": 610.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 153, - "locked": false, - "name": "Lineups Background", - "pos": { - "x": 1015.0, - "y": 350.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.3645833432674408, - "y": 0.55555558204650879 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 154, - "locked": false, - "name": "Lineups Home Frame", - "pos": { - "x": 1025.0, - "y": 415.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 680.0, - "y": 4.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 163, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 1025.0, - "y": 475.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 155, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 1025.0, - "y": 533.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 156, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 1025.0, - "y": 591.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 157, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 1025.0, - "y": 649.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 158, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 1025.0, - "y": 707.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 159, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 1025.0, - "y": 765.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 160, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 1025.0, - "y": 823.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 161, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 1025.0, - "y": 881.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 162, - "locked": false, - "name": "Lineups Line Separator", - "pos": { - "x": 1025.0, - "y": 939.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 3.1627907752990723, - "y": 2.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 6, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 164, - "locked": false, - "name": "Lineups Starting Lineup", - "pos": { - "x": 1340.0, - "y": 355.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 165, - "locked": false, - "name": "Lineups Home Team", - "pos": { - "x": 1350.0, - "y": 355.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 174, - "locked": false, - "name": "Lineups 1", - "pos": { - "x": 1040.0, - "y": 440.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 166, - "locked": false, - "name": "Lineups 2", - "pos": { - "x": 1040.0, - "y": 498.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 167, - "locked": false, - "name": "Lineups 3", - "pos": { - "x": 1040.0, - "y": 556.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 168, - "locked": false, - "name": "Lineups 4", - "pos": { - "x": 1040.0, - "y": 614.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 169, - "locked": false, - "name": "Lineups 5", - "pos": { - "x": 1040.0, - "y": 672.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 170, - "locked": false, - "name": "Lineups 6", - "pos": { - "x": 1040.0, - "y": 730.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 171, - "locked": false, - "name": "Lineups 7", - "pos": { - "x": 1040.0, - "y": 788.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 172, - "locked": false, - "name": "Lineups 8", - "pos": { - "x": 1040.0, - "y": 846.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 173, - "locked": false, - "name": "Lineups 9", - "pos": { - "x": 1040.0, - "y": 904.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 183, - "locked": false, - "name": "Lineups Home Name 1", - "pos": { - "x": 1080.0, - "y": 440.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 175, - "locked": false, - "name": "Lineups Home Name 2", - "pos": { - "x": 1080.0, - "y": 498.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 176, - "locked": false, - "name": "Lineups Home Name 3", - "pos": { - "x": 1080.0, - "y": 556.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 177, - "locked": false, - "name": "Lineups Home Name 4", - "pos": { - "x": 1080.0, - "y": 614.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 178, - "locked": false, - "name": "Lineups Home Name 5", - "pos": { - "x": 1080.0, - "y": 672.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 179, - "locked": false, - "name": "Lineups Home Name 6", - "pos": { - "x": 1080.0, - "y": 730.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 180, - "locked": false, - "name": "Lineups Home Name 7", - "pos": { - "x": 1080.0, - "y": 788.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 181, - "locked": false, - "name": "Lineups Home Name 8", - "pos": { - "x": 1080.0, - "y": 846.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 1, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 182, - "locked": false, - "name": "Lineups Home Name 9", - "pos": { - "x": 1080.0, - "y": 904.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 192, - "locked": false, - "name": "Lineups Home Pos 1", - "pos": { - "x": 1670.0, - "y": 440.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 184, - "locked": false, - "name": "Lineups Home Pos 2", - "pos": { - "x": 1670.0, - "y": 498.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 185, - "locked": false, - "name": "Lineups Home Pos 3", - "pos": { - "x": 1670.0, - "y": 556.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 186, - "locked": false, - "name": "Lineups Home Pos 4", - "pos": { - "x": 1670.0, - "y": 614.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 187, - "locked": false, - "name": "Lineups Home Pos 5", - "pos": { - "x": 1670.0, - "y": 672.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 188, - "locked": false, - "name": "Lineups Home Pos 6", - "pos": { - "x": 1670.0, - "y": 730.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 189, - "locked": false, - "name": "Lineups Home Pos 7", - "pos": { - "x": 1670.0, - "y": 788.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 190, - "locked": false, - "name": "Lineups Home Pos 8", - "pos": { - "x": 1670.0, - "y": 846.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 191, - "locked": false, - "name": "Lineups Home Pos 9", - "pos": { - "x": 1670.0, - "y": 904.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 8, - "blend_type": "normal", - "bounds": { - "x": 226.0, - "y": 170.0 - }, - "bounds_align": 8, - "bounds_type": 5, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 193, - "locked": false, - "name": "Lineups Away Flag", - "pos": { - "x": 555.0, - "y": 320.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.8828125, - "y": 0.88082903623580933 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 8, - "blend_type": "normal", - "bounds": { - "x": 226.0, - "y": 170.0 - }, - "bounds_align": 8, - "bounds_type": 5, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 194, - "locked": false, - "name": "Lineups Home Flag", - "pos": { - "x": 1365.0, - "y": 320.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.88281238079071045, - "y": 0.880828857421875 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 195, - "locked": true, - "name": "Lineups", - "pos": { - "x": 200.0, - "y": 150.0 - }, - "private_settings": { - "collapsed": true - }, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": false - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 311, - "locked": false, - "name": "Current Pitcher Frame", - "pos": { - "x": 1300.0, - "y": 245.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 500.0, - "y": 700.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 312, - "locked": false, - "name": "Current Pitcher Background", - "pos": { - "x": 1305.0, - "y": 250.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.2552083432674408, - "y": 0.6388888955116272 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 313, - "locked": false, - "name": "Current Pitcher Frame", - "pos": { - "x": 1310.0, - "y": 253.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 480.0, - "y": 5.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 314, - "locked": false, - "name": "Current Pitcher Frame", - "pos": { - "x": 1310.0, - "y": 428.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 480.0, - "y": 5.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 315, - "locked": false, - "name": "Current Pitcher Frame", - "pos": { - "x": 1310.0, - "y": 436.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 480.0, - "y": 50.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 316, - "locked": false, - "name": "Current Pitcher Frame", - "pos": { - "x": 1310.0, - "y": 489.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 480.0, - "y": 441.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 317, - "locked": false, - "name": "Current Pitcher Frame", - "pos": { - "x": 1310.0, - "y": 932.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 480.0, - "y": 5.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 2, - "blend_type": "normal", - "bounds": { - "x": 124.0, - "y": 164.0 - }, - "bounds_align": 2, - "bounds_type": 1, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 318, - "locked": false, - "name": "Current Pitcher Player Image", - "pos": { - "x": 1434.0, - "y": 343.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 0.27133458852767944, - "y": 0.27049165964126587 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 6, - "blend_type": "normal", - "bounds": { - "x": 254.0, - "y": 80.0 - }, - "bounds_align": 2, - "bounds_type": 5, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 319, - "locked": false, - "name": "Current Picther Team Flag", - "pos": { - "x": 1785.0, - "y": 265.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 9, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 320, - "locked": false, - "name": "Current Pitcher First Name", - "pos": { - "x": 1445.0, - "y": 390.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 321, - "locked": false, - "name": "Current Pitcher Last Name", - "pos": { - "x": 1445.0, - "y": 390.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 0, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 322, - "locked": false, - "name": "Current Pitcher Stats For Season", - "pos": { - "x": 1550.0, - "y": 458.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 323, - "locked": false, - "name": "Current Pitcher Games", - "pos": { - "x": 1330.0, - "y": 510.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 324, - "locked": false, - "name": "Current Pitcher Era", - "pos": { - "x": 1330.0, - "y": 555.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 325, - "locked": false, - "name": "Current Pitcher Record", - "pos": { - "x": 1330.0, - "y": 600.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 326, - "locked": false, - "name": "Current Pitcher Innings", - "pos": { - "x": 1330.0, - "y": 680.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 327, - "locked": false, - "name": "Current Pitcher Hits", - "pos": { - "x": 1330.0, - "y": 725.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 328, - "locked": false, - "name": "Current Pitcher Walks", - "pos": { - "x": 1330.0, - "y": 770.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 329, - "locked": false, - "name": "Current Pitcher Strikeouts", - "pos": { - "x": 1330.0, - "y": 815.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 330, - "locked": false, - "name": "Current Pitcher HR Allowed", - "pos": { - "x": 1330.0, - "y": 860.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 331, - "locked": false, - "name": "Current Pitcher Games Value", - "pos": { - "x": 1720.0, - "y": 508.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 332, - "locked": false, - "name": "Current Pitcher Era Value", - "pos": { - "x": 1720.0, - "y": 553.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 333, - "locked": false, - "name": "Current Pitcher Record Value", - "pos": { - "x": 1720.0, - "y": 598.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 334, - "locked": false, - "name": "Current Pitcher Innings Value", - "pos": { - "x": 1720.0, - "y": 678.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 335, - "locked": false, - "name": "Current Pitcher Hits Value", - "pos": { - "x": 1720.0, - "y": 723.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 336, - "locked": false, - "name": "Current Pitcher Walks Value", - "pos": { - "x": 1720.0, - "y": 768.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 337, - "locked": false, - "name": "Current Pitcher Strikeouts Value", - "pos": { - "x": 1720.0, - "y": 813.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 4, - "blend_type": "normal", - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 338, - "locked": false, - "name": "Current Pitcher HR Allowed Value", - "pos": { - "x": 1720.0, - "y": 858.0 - }, - "private_settings": {}, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_type": "normal", - "bounds": { - "x": 0.0, - "y": 0.0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 339, - "locked": true, - "name": "Current Pitcher", - "pos": { - "x": 1300.0, - "y": 245.0 - }, - "private_settings": { - "collapsed": true - }, - "rot": 0.0, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": false - } - ] - }, - "sync": 0, - "versioned_id": "scene", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "color_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Scoreboard Background", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color": 4292927967, - "height": 154, - "width": 349 - }, - "sync": 0, - "versioned_id": "color_source_v3", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "image_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Home Score Background", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "file": "[PATH_TO_OBS_RESOURCE_DIR]/home_color.png", - "undo_sname": "Home Score Background" - }, - "sync": 0, - "versioned_id": "image_source", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Away Team", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 1, - "size": 32, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/away_team.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Away Score", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "antialiasing": true, - "color1": 4294967295, - "color2": 4294967295, - "drop_shadow": false, - "font": { - "face": "Arial", - "flags": 1, - "size": 32, - "style": "Bold" - }, - "from_file": true, - "log_lines": 6, - "outline": false, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/away_score.txt", - "word_wrap": false - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Home Team", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 1, - "size": 32, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/home_team.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Home Score", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "antialiasing": true, - "color1": 4294967295, - "color2": 4294967295, - "drop_shadow": false, - "font": { - "face": "Arial", - "flags": 1, - "size": 32, - "style": "Bold" - }, - "from_file": true, - "log_lines": 6, - "outline": false, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/home_score.txt", - "word_wrap": false - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "image_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Bases", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "file": "[PATH_TO_OBS_RESOURCE_DIR]/bases.png" - }, - "sync": 0, - "versioned_id": "image_source", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "image_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Outs", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "file": "[PATH_TO_OBS_RESOURCE_DIR]/outs.png" - }, - "sync": 0, - "versioned_id": "image_source", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Inning Half", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 1, - "size": 20, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/inning_half.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Inning", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 1, - "size": 32, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/inning.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Count", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 1, - "size": 32, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/count.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Pitcher Lastname", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "antialiasing": true, - "color1": 4278190080, - "color2": 4278190080, - "drop_shadow": false, - "font": { - "face": "Arial", - "flags": 0, - "size": 28, - "style": "Regular" - }, - "from_file": true, - "log_lines": 6, - "outline": false, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_pitcher/lastname.txt", - "word_wrap": false - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Pitch Count", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 0, - "size": 28, - "style": "Regular" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_pitcher/count.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "color_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Batter Background", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color": 4292927967 - }, - "sync": 0, - "versioned_id": "color_source_v3", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Batter HR", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 0, - "size": 18, - "style": "Regular" - }, - "text": "HR" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Batter AVG", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 0, - "size": 18, - "style": "Regular" - }, - "text": "AVG" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Batter OPS Value", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 24, - "style": "Bold" - }, - "from_file": true, - "text": "OPS", - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_batter/ops.txt", - "undo_sname": "Current Batter OPS Value" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Batter Position", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 0, - "size": 30, - "style": "Regular" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_batter/pos.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Batter Name", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4278190080, - "color2": 4278190080, - "font": { - "face": "Arial", - "flags": 1, - "size": 42, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_batter/fullname.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "image_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Batter Player Image", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "file": "[PATH_TO_OBS_RESOURCE_DIR]/current_batter/image.png" - }, - "sync": 0, - "versioned_id": "image_source", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "image_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Batter Team Flag", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "file": "[PATH_TO_OBS_RESOURCE_DIR]/current_batter/flag.png" - }, - "sync": 0, - "versioned_id": "image_source", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "image_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher Frame", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "file": "[PATH_TO_OBS_RESOURCE_DIR]/current_pitcher/team_color.png" - }, - "sync": 0, - "versioned_id": "image_source", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "color_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher Background", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color": 4292927967 - }, - "sync": 0, - "versioned_id": "color_source_v3", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "image_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Picther Team Flag", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "file": "[PATH_TO_OBS_RESOURCE_DIR]/current_pitcher/flag.png" - }, - "sync": 0, - "versioned_id": "image_source", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher Stats For Season", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "color1": 4292927967, - "color2": 4292927967, - "font": { - "face": "Arial", - "flags": 0, - "size": 28, - "style": "Regular" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_pitcher/stats_for_series.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher Era", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 0, - "size": 36, - "style": "Regular" - }, - "text": "ERA" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher Record", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 0, - "size": 36, - "style": "Regular" - }, - "text": "RECORD" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher Games Value", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 1, - "size": 36, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_pitcher/games.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher Era Value", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 1, - "size": 36, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_pitcher/era.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher Record Value", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 1, - "size": 36, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_pitcher/wins-losses.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher Innings Value", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 1, - "size": 36, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_pitcher/innings.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher Hits Value", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 1, - "size": 36, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_pitcher/hits.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher Walks Value", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 1, - "size": 36, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_pitcher/walks.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher Strikeouts Value", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 1, - "size": 36, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_pitcher/strikeouts.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Current Pitcher HR Allowed Value", - "prev_ver": 453115906, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Arial", - "flags": 1, - "size": 36, - "style": "Bold" - }, - "from_file": true, - "text_file": "[PATH_TO_OBS_RESOURCE_DIR]/current_pitcher/hrs-allowed.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1.0 - } - ], - "transition_duration": 300, - "transitions": [] -} \ No newline at end of file diff --git a/src/main/resources/team_colors.json b/src/main/resources/team_colors.json index 454210f..3dd87a7 100644 --- a/src/main/resources/team_colors.json +++ b/src/main/resources/team_colors.json @@ -24,6 +24,7 @@ "ORE": "092d47", "GBR": "000066", "SWE": "0C1250", + "FIN": "0a2b5b", "POL": "DC143C", "TUR": "F31930", "SUI": "D52B1E", diff --git a/src/test/java/org/sundbybergheat/baseballstreaming/models/wbsc/PlayTest.java b/src/test/java/org/sundbybergheat/baseballstreaming/models/wbsc/PlayTest.java index 7c870ab..f16af1c 100644 --- a/src/test/java/org/sundbybergheat/baseballstreaming/models/wbsc/PlayTest.java +++ b/src/test/java/org/sundbybergheat/baseballstreaming/models/wbsc/PlayTest.java @@ -2,14 +2,27 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.util.stream.Stream; import org.apache.commons.io.IOUtils; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.sundbybergheat.baseballstreaming.models.JsonMapper; public class PlayTest { - @Test - void shouldParsePlayJson() throws IOException { - String playJson = IOUtils.resourceToString("/wbsc/playXX.json", StandardCharsets.UTF_8); - JsonMapper.fromJson(playJson, Play.class); + + private static Stream createPlayInput() { + return Stream.of( + Arguments.of("/wbsc/first_play.json"), + Arguments.of("/wbsc/last_play.json"), + Arguments.of("/wbsc/end_of_inning_play.json"), + Arguments.of("/wbsc/extra_inning_play.json")); + } + + @ParameterizedTest + @MethodSource("createPlayInput") + void shouldParsePlayJson(String playJsonFile) throws IOException { + String playJson = IOUtils.resourceToString(playJsonFile, StandardCharsets.UTF_8); + JsonMapper.fromJson(playJson, org.sundbybergheat.baseballstreaming.models.wbsc.play.Play.class); } } diff --git a/src/test/java/org/sundbybergheat/baseballstreaming/services/FilesServiceTest.java b/src/test/java/org/sundbybergheat/baseballstreaming/services/FilesServiceTest.java new file mode 100644 index 0000000..5f74bde --- /dev/null +++ b/src/test/java/org/sundbybergheat/baseballstreaming/services/FilesServiceTest.java @@ -0,0 +1,313 @@ +package org.sundbybergheat.baseballstreaming.services; + +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Optional; +import java.util.stream.Stream; +import javax.imageio.ImageIO; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.sundbybergheat.baseballstreaming.clients.FilesClient; +import org.sundbybergheat.baseballstreaming.clients.FilesClient.ImageIOHandler; +import org.sundbybergheat.baseballstreaming.models.JsonMapper; +import org.sundbybergheat.baseballstreaming.models.wbsc.play.Play; + +public class FilesServiceTest { + + private static final List EXPECTED_POSITIONS = + List.of("C", "1B", "2B", "3B", "SS", "LF", "CF", "RF"); + + @Test + void willInitializeResources(@TempDir File tempDir) throws IOException { + ImageIOHandler imageIOHandler = new ImageIOHandler(); + FilesClient client = new FilesClient(tempDir.toString(), imageIOHandler); + FilesService service = new FilesService(client); + service.initResources(); + + Optional basesDir = + Stream.of(tempDir.listFiles((f) -> f.isDirectory() && f.getName().equals("bases"))) + .findFirst(); + Optional teamResourcesDir = + Stream.of(tempDir.listFiles((f) -> f.isDirectory() && f.getName().equals("team_resources"))) + .findFirst(); + Optional outsDir = + Stream.of(tempDir.listFiles((f) -> f.isDirectory() && f.getName().equals("outs"))) + .findFirst(); + + assertTrue(basesDir.isPresent()); + assertTrue(outsDir.isPresent()); + assertTrue(teamResourcesDir.isPresent()); + + assertTrue(fileExistAndIsNonEmpty(basesDir.get(), "ooo.png")); + assertTrue(fileExistAndIsNonEmpty(basesDir.get(), "oox.png")); + assertTrue(fileExistAndIsNonEmpty(basesDir.get(), "oxo.png")); + assertTrue(fileExistAndIsNonEmpty(basesDir.get(), "oxx.png")); + assertTrue(fileExistAndIsNonEmpty(basesDir.get(), "xoo.png")); + assertTrue(fileExistAndIsNonEmpty(basesDir.get(), "xox.png")); + assertTrue(fileExistAndIsNonEmpty(basesDir.get(), "xxo.png")); + assertTrue(fileExistAndIsNonEmpty(basesDir.get(), "xxx.png")); + + assertTrue(fileExistAndIsNonEmpty(outsDir.get(), "0.png")); + assertTrue(fileExistAndIsNonEmpty(outsDir.get(), "1.png")); + assertTrue(fileExistAndIsNonEmpty(outsDir.get(), "2.png")); + + Optional playerImagesDir = + Stream.of( + teamResourcesDir + .get() + .listFiles((f) -> f.isDirectory() && f.getName().equals("player_images"))) + .findFirst(); + Optional flagsDir = + Stream.of( + teamResourcesDir + .get() + .listFiles((f) -> f.isDirectory() && f.getName().equals("flags"))) + .findFirst(); + Optional colorsDir = + Stream.of( + teamResourcesDir + .get() + .listFiles((f) -> f.isDirectory() && f.getName().equals("colors"))) + .findFirst(); + + assertTrue(playerImagesDir.isPresent()); + assertTrue(flagsDir.isPresent()); + assertTrue(colorsDir.isPresent()); + + assertTrue(fileExistAndIsNonEmpty(playerImagesDir.get(), "default.png")); + assertTrue(fileExistAndIsNonEmpty(flagsDir.get(), "default.png")); + assertTrue(fileExistAndIsNonEmpty(flagsDir.get(), "ALB.png")); + assertTrue(fileExistAndIsNonEmpty(flagsDir.get(), "KGA.png")); + assertTrue(fileExistAndIsNonEmpty(flagsDir.get(), "LEK.png")); + assertTrue(fileExistAndIsNonEmpty(flagsDir.get(), "RAT.png")); + assertTrue(fileExistAndIsNonEmpty(flagsDir.get(), "STO.png")); + assertTrue(fileExistAndIsNonEmpty(flagsDir.get(), "SUN.png")); + assertTrue(fileExistAndIsNonEmpty(flagsDir.get(), "SVL.png")); + assertTrue(fileExistAndIsNonEmpty(flagsDir.get(), "UME.png")); + + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "LEK.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "KGA.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "RAT.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "STO.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "SUN.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "SVL.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "UME.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "ALB.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "BRO.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "CIT.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "ENK.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "ENS.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "GEF.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "GOT.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "NIC.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "MAL.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "SKE.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "SKO.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "TRA.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "UPP.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "FRS.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "SOD.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "ORE.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "GBR.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "SWE.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "POL.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "TUR.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "SUI.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "VIL.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "EXP.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "MBI.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "LDC.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "VIF.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "default_home.png")); + assertTrue(fileExistAndIsNonEmpty(colorsDir.get(), "default_away.png")); + } + + @Test + void shouldHandleEmptyPlay(@TempDir File tempDir) throws IOException { + ImageIOHandler imageIOHandler = mock(ImageIOHandler.class); + when(imageIOHandler.read(any(URL.class))) + .thenReturn(ImageIO.read(IOUtils.resourceToURL("/wbsc/default-player.jpg"))); + String playJson = "{}"; + FilesClient client = new FilesClient(tempDir.toString(), imageIOHandler); + FilesService service = new FilesService(client); + Play play = JsonMapper.fromJson(playJson, Play.class); + service.updatePlay(play); + } + + private static Stream createPlayInput() { + return Stream.of( + Arguments.of("/wbsc/first_play.json"), + Arguments.of("/wbsc/last_play.json"), + Arguments.of("/wbsc/end_of_inning_play.json"), + Arguments.of("/wbsc/extra_inning_play.json")); + } + + @ParameterizedTest + @MethodSource("createPlayInput") + void shouldUpdatePlay(String playJsonFile, @TempDir File tempDir) throws IOException { + ImageIOHandler imageIOHandler = mock(ImageIOHandler.class); + when(imageIOHandler.read(any(URL.class))) + .thenReturn(ImageIO.read(IOUtils.resourceToURL("/wbsc/default-player.jpg"))); + String playJson = IOUtils.resourceToString(playJsonFile, StandardCharsets.UTF_8); + FilesClient client = new FilesClient(tempDir.toString(), imageIOHandler); + client.copyFileFromResource( + "/wbsc/default-player.jpg", "team_resources/player_images/default.png"); + FilesService service = new FilesService(client); + Play play = JsonMapper.fromJson(playJson, Play.class); + service.updatePlay(play); + + Optional currentPitcherDir = + Stream.of( + tempDir.listFiles((f) -> f.isDirectory() && f.getName().equals("current_pitcher"))) + .findFirst(); + assertTrue(currentPitcherDir.isPresent()); + + assertTrue(fileExistAndIsNonEmpty(currentPitcherDir.get(), "innings.txt")); + assertTrue(fileExistAndIsNonEmpty(currentPitcherDir.get(), "strikeouts.txt")); + assertTrue(fileExistAndIsNonEmpty(currentPitcherDir.get(), "firstname.txt")); + assertTrue(fileExistAndIsNonEmpty(currentPitcherDir.get(), "era.txt")); + assertTrue(fileExistAndIsNonEmpty(currentPitcherDir.get(), "pitching-title.txt")); + assertTrue(fileExistAndIsNonEmpty(currentPitcherDir.get(), "stats_for_series.txt")); + assertTrue(fileExistAndIsNonEmpty(currentPitcherDir.get(), "image.png")); + assertTrue(fileExistAndIsNonEmpty(currentPitcherDir.get(), "walks.txt")); + assertTrue(fileExistAndIsNonEmpty(currentPitcherDir.get(), "count.txt")); + assertTrue(fileExistAndIsNonEmpty(currentPitcherDir.get(), "fullname.txt")); + assertTrue(fileExistAndIsNonEmpty(currentPitcherDir.get(), "pitching.txt")); + assertTrue(fileExistAndIsNonEmpty(currentPitcherDir.get(), "lastname.txt")); + + Optional lineupsDir = + Stream.of(tempDir.listFiles((f) -> f.isDirectory() && f.getName().equals("lineups"))) + .findFirst(); + assertTrue(lineupsDir.isPresent()); + + Optional lineupsHomeDir = + Stream.of(lineupsDir.get().listFiles((f) -> f.isDirectory() && f.getName().equals("home"))) + .findFirst(); + assertTrue(lineupsHomeDir.isPresent()); + assertLineupIsInOrder(lineupsHomeDir.get()); + + Optional lineupsAwayDir = + Stream.of(lineupsDir.get().listFiles((f) -> f.isDirectory() && f.getName().equals("away"))) + .findFirst(); + assertTrue(lineupsAwayDir.isPresent()); + assertLineupIsInOrder(lineupsAwayDir.get()); + + Optional currentBatterDir = + Stream.of(tempDir.listFiles((f) -> f.isDirectory() && f.getName().equals("current_batter"))) + .findFirst(); + assertTrue(currentBatterDir.isPresent()); + assertBatterIsInOrder(currentBatterDir.get()); + + Optional onDeckBatterDir = + Stream.of(tempDir.listFiles((f) -> f.isDirectory() && f.getName().equals("ondeck_batter"))) + .findFirst(); + assertTrue(onDeckBatterDir.isPresent()); + assertBatterIsInOrder(onDeckBatterDir.get()); + + Optional inHoleBatterDir = + Stream.of(tempDir.listFiles((f) -> f.isDirectory() && f.getName().equals("inhole_batter"))) + .findFirst(); + assertTrue(inHoleBatterDir.isPresent()); + assertBatterIsInOrder(inHoleBatterDir.get()); + + assertTrue(fileExistAndIsNonEmpty(tempDir, "home_team.txt")); + assertTrue(fileExistAndIsNonEmpty(tempDir, "home_score.txt")); + assertTrue(fileExistAndIsNonEmpty(tempDir, "home_hits.txt")); + assertTrue(fileExistAndIsNonEmpty(tempDir, "home_errors.txt")); + + assertTrue(fileExistAndIsNonEmpty(tempDir, "away_team.txt")); + assertTrue(fileExistAndIsNonEmpty(tempDir, "away_score.txt")); + assertTrue(fileExistAndIsNonEmpty(tempDir, "away_hits.txt")); + assertTrue(fileExistAndIsNonEmpty(tempDir, "away_errors.txt")); + + assertTrue(fileExistAndIsNonEmpty(tempDir, "count.txt")); + assertTrue(fileExistAndIsNonEmpty(tempDir, "balls.txt")); + assertTrue(fileExistAndIsNonEmpty(tempDir, "strikes.txt")); + + assertTrue(fileExistAndIsNonEmpty(tempDir, "inning_text.txt")); + + File inningsTextFile = + Stream.of(tempDir.listFiles((f) -> f.isFile() && f.getName().equals("inning_text.txt"))) + .findFirst() + .orElseThrow(); + String content = FileUtils.readFileToString(inningsTextFile, StandardCharsets.UTF_8); + if (!content.startsWith("FINAL")) { + assertTrue(fileExistAndIsNonEmpty(tempDir, "inning.txt")); + assertTrue(fileExistAndIsNonEmpty(tempDir, "inning_half.txt")); + } + } + + private void assertLineupIsInOrder(final File lineupsDir) throws IOException { + for (int i = 1; i < 10; i++) { + final String orderDirName = "%d".formatted(i); + Optional orderDir = + Stream.of( + lineupsDir.listFiles((f) -> f.isDirectory() && f.getName().equals(orderDirName))) + .findFirst(); + assertTrue(orderDir.isPresent()); + assertBatterIsInOrder(orderDir.get()); + } + + for (String pos : EXPECTED_POSITIONS) { + Optional positionDir = + Stream.of(lineupsDir.listFiles((f) -> f.isDirectory() && f.getName().equals(pos))) + .findFirst(); + assertTrue(positionDir.isPresent()); + assertBatterIsInOrder(positionDir.get()); + } + + Optional lineupsPitcherDir = + Stream.of(lineupsDir.listFiles((f) -> f.isDirectory() && f.getName().equals("P"))) + .findFirst(); + Optional lineupsDHDir = + Stream.of(lineupsDir.listFiles((f) -> f.isDirectory() && f.getName().equals("DH"))) + .findFirst(); + + assertTrue(lineupsPitcherDir.isPresent() || lineupsDHDir.isPresent()); + if (lineupsPitcherDir.isPresent()) { + assertBatterIsInOrder(lineupsPitcherDir.get()); + } + if (lineupsDHDir.isPresent()) { + assertBatterIsInOrder(lineupsDHDir.get()); + } + } + + private void assertBatterIsInOrder(final File batterDir) throws IOException { + assertTrue(fileExistAndIsNonEmpty(batterDir, "avg.txt")); + assertTrue(fileExistAndIsNonEmpty(batterDir, "firstname.txt")); + assertTrue(fileExistAndIsNonEmpty(batterDir, "stats_for_series.txt")); + assertTrue(fileExistAndIsNonEmpty(batterDir, "image.png")); + assertTrue(fileExistAndIsNonEmpty(batterDir, "pos.txt")); + assertTrue(fileExistAndIsNonEmpty(batterDir, "batting-title.txt")); + assertTrue(fileExistAndIsNonEmpty(batterDir, "ops.txt")); + assertTrue(fileExistAndIsNonEmpty(batterDir, "fullname.txt")); + assertTrue(fileExistAndIsNonEmpty(batterDir, "lastname.txt")); + assertTrue(fileExistAndIsNonEmpty(batterDir, "hr.txt")); + assertTrue(fileExistAndIsNonEmpty(batterDir, "batting.txt")); + } + + private boolean fileExistAndIsNonEmpty(final File parent, final String fileName) + throws IOException { + Optional file = + Stream.of(parent.listFiles((dir, name) -> name.equals(fileName))).findFirst(); + boolean exists = file.map(File::isFile).orElse(false); + if (exists) { + String content = FileUtils.readFileToString(file.get(), StandardCharsets.UTF_8); + return content.length() > 0; + } + return false; + } +} diff --git a/src/test/resources/wbsc/default-player.jpg b/src/test/resources/wbsc/default-player.jpg new file mode 100644 index 0000000..2361f87 Binary files /dev/null and b/src/test/resources/wbsc/default-player.jpg differ diff --git a/src/test/resources/wbsc/end_of_inning_play.json b/src/test/resources/wbsc/end_of_inning_play.json new file mode 100644 index 0000000..1b3affa --- /dev/null +++ b/src/test/resources/wbsc/end_of_inning_play.json @@ -0,0 +1,4796 @@ +{ + "debug_lastplay": 233, + "lastplayloaded": 233, + "gameid": "166964", + "debugcode": "596678", + "eventlocation": "Kutno", + "eventhome": "SWE", + "eventaway": "UKR", + "eventhomeid": "35433", + "eventawayid": "35434", + "eventurl": "", + "gameover": 0, + "innings": "7", + "platecount": [ + { + "id": 2, + "type": 0, + "label": "End of the 6th
0 runs, 1 lob", + "pitch": "Unknown", + "coords": [ + 0, + 0 + ] + }, + { + "id": 1, + "type": 3, + "label": "ÅNGSTRöM Dante grounds out 4-3. 3 out. ", + "pitch": "Unknown", + "coords": [ + 0, + 0 + ] + } + ], + "situation": { + "inning": "7.0", + "uniform": "standard-home", + "gender": "", + "batter": "SOKUR Andrii", + "batterid": "596678", + "bats": "R", + "batting": "0 for 3", + "avg": ".000", + "pitcher": "STEUERNAGEL Emil", + "pitcherid": "601550", + "pitcherthrows": "R", + "pitcherera": "7.00", + "pitcherip": "1.0", + "runner1": 0, + "runner2": 0, + "runner3": 0, + "outs": 0, + "balls": 0, + "strikes": 0, + "extrainnings": null, + "currentinning": "TOP 7" + }, + "gameinfo": null, + "boxscore": { + "1010": { + "name": "NIKOLAIENKO Stanislav", + "firstname": "Stanislav", + "lastname": "NIKOLAIENKO", + "playerid": "596992", + "teamid": "35434", + "teamcode": "UKR", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/c493c6de-0ac7-061d-a92f-f02356e9e099.jpg", + "inplay": "", + "reentry": 0, + "POS": "CF", + "PA": 4, + "AB": 4, + "R": 1, + "H": 2, + "RBI": 0, + "BB": 0, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "8", + "AB": "3", + "H": "1", + "BB": "4", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "1" + }, + "LOB": 0, + "AVG": ".500", + "OBP": ".500", + "SLG": ".500", + "OPS": "1.000", + "PO": 2, + "A": 0, + "E": 0 + }, + "1020": { + "name": "HRYTSENKO Oleksii", + "firstname": "Oleksii", + "lastname": "HRYTSENKO", + "playerid": "597384", + "teamid": "35434", + "teamcode": "UKR", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/b7825b45-2097-343c-cc5a-5c046583327c.jpg", + "inplay": "", + "reentry": 0, + "POS": "DH", + "PA": 4, + "AB": 3, + "R": 0, + "H": 1, + "RBI": 1, + "BB": 1, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "6", + "AB": "4", + "H": "1", + "BB": "2", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".333", + "OBP": ".500", + "SLG": ".333", + "OPS": ".833", + "PO": 0, + "A": 0, + "E": 0 + }, + "1030": { + "name": "PROFATYLO Nazar", + "firstname": "Nazar", + "lastname": "PROFATYLO", + "playerid": "597394", + "teamid": "35434", + "teamcode": "UKR", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/891e1e84-a9a5-6199-93b9-71efdba86c90.jpg", + "inplay": "", + "reentry": 0, + "POS": "2B", + "PA": 4, + "AB": 3, + "R": 0, + "H": 1, + "RBI": 1, + "BB": 1, + "SO": 1, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "8", + "AB": "7", + "H": "3", + "BB": "0", + "DOUBLE": "1", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "1" + }, + "LOB": 0, + "AVG": ".333", + "OBP": ".500", + "SLG": ".333", + "OPS": ".833", + "PO": 2, + "A": 2, + "E": 1 + }, + "1040": { + "name": "NESYN Artem", + "firstname": "Artem", + "lastname": "NESYN", + "playerid": "596996", + "teamid": "35434", + "teamcode": "UKR", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/59a2152e-a65b-99f7-5533-20464abc7608.jpg", + "inplay": "", + "reentry": 0, + "POS": "RF", + "PA": 4, + "AB": 3, + "R": 0, + "H": 1, + "RBI": 2, + "BB": 1, + "SO": 1, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "6", + "AB": "5", + "H": "1", + "BB": "1", + "DOUBLE": "1", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".333", + "OBP": ".500", + "SLG": ".333", + "OPS": ".833", + "PO": 0, + "A": 0, + "E": 0 + }, + "1050": { + "name": "SOKUR Andrii", + "firstname": "Andrii", + "lastname": "SOKUR", + "playerid": "596678", + "teamid": "35434", + "teamcode": "UKR", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/0a058166-662e-4228-a456-bd4ae0a92281.jpg", + "inplay": "", + "reentry": 0, + "POS": "C", + "PA": 3, + "AB": 3, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 0, + "SO": 2, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "8", + "AB": "6", + "H": "0", + "BB": "2", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": 3, + "A": 2, + "E": 0 + }, + "1060": { + "name": "ZADNIPRIANYI Tymofii", + "firstname": "Tymofii", + "lastname": "ZADNIPRIANYI", + "playerid": "596971", + "teamid": "35434", + "teamcode": "UKR", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/d7900f8e-6a9f-c2cd-3878-5a55e143c563.jpg", + "inplay": "", + "reentry": 0, + "POS": "3B", + "PA": 3, + "AB": 2, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 1, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "8", + "AB": "8", + "H": "2", + "BB": "0", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".333", + "SLG": ".000", + "OPS": ".333", + "PO": 0, + "A": 5, + "E": 0 + }, + "1070": { + "name": "SYVORAKSHA Yehor", + "firstname": "Yehor", + "lastname": "SYVORAKSHA", + "playerid": "597395", + "teamid": "35434", + "teamcode": "UKR", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/a7725815-7098-3944-5782-b8bf02f979da.jpg", + "inplay": "", + "reentry": 0, + "POS": "LF", + "PA": 3, + "AB": 2, + "R": 1, + "H": 0, + "RBI": 0, + "BB": 1, + "SO": 1, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "5", + "AB": "5", + "H": "1", + "BB": "0", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".333", + "SLG": ".000", + "OPS": ".333", + "PO": 1, + "A": 0, + "E": 2 + }, + "1071": { + "name": "SIDELNYK Pavlo", + "firstname": "Pavlo", + "lastname": "SIDELNYK", + "playerid": "597399", + "teamid": "35434", + "teamcode": "UKR", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/d3981c95-e99e-dd7f-4964-b309942af731.jpg", + "inplay": "", + "reentry": 0, + "POS": "LF", + "PA": 0, + "AB": 0, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 0, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "0", + "AB": "0", + "H": "0", + "BB": "0", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": 0, + "A": 0, + "E": 0 + }, + "1080": { + "name": "KOVALENKO Taras", + "firstname": "Taras", + "lastname": "KOVALENKO", + "playerid": "596975", + "teamid": "35434", + "teamcode": "UKR", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/9806f7e4-309d-4eff-c44b-a488d1186ffa.jpg", + "inplay": "", + "reentry": 0, + "POS": "1B", + "PA": 3, + "AB": 1, + "R": 2, + "H": 0, + "RBI": 0, + "BB": 1, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 1, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "4", + "AB": "3", + "H": "0", + "BB": "1", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".667", + "SLG": ".000", + "OPS": ".667", + "PO": 9, + "A": 0, + "E": 0 + }, + "1090": { + "name": "KHOMENKO Artem", + "firstname": "Artem", + "lastname": "KHOMENKO", + "playerid": "597386", + "teamid": "35434", + "teamcode": "UKR", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/d9238d86-6f53-bc11-38c2-dcf7cd90cc28.jpg", + "inplay": "", + "reentry": 0, + "POS": "SS", + "PA": 3, + "AB": 2, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 1, + "SO": 1, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "6", + "AB": "5", + "H": "0", + "BB": "0", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "1" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".333", + "SLG": ".000", + "OPS": ".333", + "PO": 1, + "A": 3, + "E": 0 + }, + "1901": { + "name": "ROZHKO YEVHENII", + "firstname": "YEVHENII", + "lastname": "ROZHKO", + "playerid": "596981", + "teamid": "35434", + "teamcode": "UKR", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/7e90e3da-fddb-b04a-5968-27d6bd0d3c21.jpg", + "inplay": "", + "reentry": 0, + "PITCHIP": "6.0", + "PITCHER": 2, + "PITCHR": 2, + "PITCHH": 3, + "PITCHBB": 2, + "PITCHSO": 3, + "PITCHES": 82, + "STRIKES": 56, + "PITCHOUTS": 18, + "SEASON": { + "PITCHER": "0", + "PITCHOUTS": "1", + "PITCHBB": "0", + "PITCHSO": "0" + }, + "ERA": "2.33", + "PO": 0, + "A": 1, + "E": 1 + }, + "2010": { + "name": "ASP Erik", + "firstname": "Erik", + "lastname": "ASP", + "playerid": "601533", + "teamid": "35433", + "teamcode": "SWE", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/27c58893-f043-6393-6dfc-e0206486d0d3.png", + "inplay": "", + "reentry": 0, + "POS": "3B", + "PA": 3, + "AB": 3, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 0, + "SO": 2, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "6", + "AB": "1", + "H": "1", + "BB": "3", + "DOUBLE": "1", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "2" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": 0, + "A": 1, + "E": 1 + }, + "2020": { + "name": "HERMAN Sam", + "firstname": "Sam", + "lastname": "HERMAN", + "playerid": "601544", + "teamid": "35433", + "teamcode": "SWE", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/4c8cab7c-dc10-6fe3-aff6-360eb6a40dcb.png", + "inplay": "", + "reentry": 0, + "POS": "CF", + "PA": 3, + "AB": 3, + "R": 1, + "H": 2, + "RBI": 0, + "BB": 0, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "8", + "AB": "8", + "H": "4", + "BB": "0", + "DOUBLE": "1", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".667", + "OBP": ".667", + "SLG": ".667", + "OPS": "1.333", + "PO": 1, + "A": 0, + "E": 0 + }, + "2030": { + "name": "GEORGE Elias", + "firstname": "Elias", + "lastname": "GEORGE", + "playerid": "601581", + "teamid": "35433", + "teamcode": "SWE", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/b07a5206-5a8a-c404-5ca0-04798692bd45.png", + "inplay": "", + "reentry": 0, + "POS": "C", + "PA": 3, + "AB": 3, + "R": 1, + "H": 1, + "RBI": 0, + "BB": 0, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 1, + "SEASON": { + "PA": "6", + "AB": "6", + "H": "3", + "BB": "0", + "DOUBLE": "1", + "TRIPLE": "0", + "HR": "1", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".333", + "OBP": ".333", + "SLG": ".333", + "OPS": ".667", + "PO": 6, + "A": 0, + "E": 0 + }, + "2040": { + "name": "NORLING RADER Erik", + "firstname": "Erik", + "lastname": "NORLING RADER", + "playerid": "601547", + "teamid": "35433", + "teamcode": "SWE", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/81dd5a74-141c-6fc4-d697-a4e6ee41f00c.png", + "inplay": "", + "reentry": 0, + "POS": "DH", + "PA": 3, + "AB": 3, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 0, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "4", + "AB": "3", + "H": "0", + "BB": "1", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": 0, + "A": 0, + "E": 0 + }, + "2050": { + "name": "ÖIJEN Gustav", + "firstname": "Gustav", + "lastname": "ÖIJEN", + "playerid": "601557", + "teamid": "35433", + "teamcode": "SWE", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/f1cc9a98-1859-52db-e25c-990cb2ca3797.png", + "inplay": "", + "reentry": 0, + "POS": "RF", + "PA": 3, + "AB": 2, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 1, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "4", + "AB": "1", + "H": "0", + "BB": "3", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".333", + "SLG": ".000", + "OPS": ".333", + "PO": 1, + "A": 0, + "E": 0 + }, + "2060": { + "name": "CANNEHAG Casper", + "firstname": "Casper", + "lastname": "CANNEHAG", + "playerid": "601534", + "teamid": "35433", + "teamcode": "SWE", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/332ec689-9960-5c71-1edf-cbd6a91c77a9.png", + "inplay": "", + "reentry": 0, + "POS": "1B", + "PA": 3, + "AB": 1, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 1, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 1, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "6", + "AB": "2", + "H": "0", + "BB": "2", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "2", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".667", + "SLG": ".000", + "OPS": ".667", + "PO": 5, + "A": 0, + "E": 0 + }, + "2070": { + "name": "ÅNGSTRöM Dante", + "firstname": "Dante", + "lastname": "ÅNGSTRöM", + "playerid": "601555", + "teamid": "35433", + "teamcode": "SWE", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/33610c15-188e-f448-3552-c7ab09542252.png", + "inplay": "", + "reentry": 0, + "POS": "SS", + "PA": 3, + "AB": 2, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 0, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "7", + "AB": "7", + "H": "2", + "BB": "0", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": 1, + "A": 1, + "E": 0 + }, + "2080": { + "name": "LAUFKE Kasper", + "firstname": "Kasper", + "lastname": "LAUFKE", + "playerid": "601546", + "teamid": "35433", + "teamcode": "SWE", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/8f056b49-b86b-dc0c-3a43-c3a26381bd4b.png", + "inplay": "", + "reentry": 0, + "POS": "2B", + "PA": 2, + "AB": 2, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 0, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "0", + "AB": "0", + "H": "0", + "BB": "0", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": 0, + "A": 1, + "E": 0 + }, + "2090": { + "name": "LIDFORS Anton", + "firstname": "Anton", + "lastname": "LIDFORS", + "playerid": "601563", + "teamid": "35433", + "teamcode": "SWE", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/f979ea58-7fc0-4209-c1d0-bc560cd9a22d.png", + "inplay": "", + "reentry": 0, + "POS": "LF", + "PA": 2, + "AB": 2, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 0, + "SO": 1, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "2", + "AB": "1", + "H": "0", + "BB": "0", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "1" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": 2, + "A": 0, + "E": 0 + }, + "2901": { + "name": "WILLIAMS Erik", + "firstname": "Erik", + "lastname": "WILLIAMS", + "playerid": "601553", + "teamid": "35433", + "teamcode": "SWE", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/8cf88644-811d-61d9-560e-a346468eacbe.png", + "inplay": "", + "reentry": 0, + "PITCHIP": "2.2", + "PITCHER": 3, + "PITCHR": 3, + "PITCHH": 3, + "PITCHBB": 7, + "PITCHSO": 4, + "PITCHES": 78, + "STRIKES": 34, + "PITCHOUTS": 8, + "SEASON": { + "PITCHER": "0", + "PITCHOUTS": "0", + "PITCHBB": "0", + "PITCHSO": "0" + }, + "ERA": "7.88", + "PO": 0, + "A": 0, + "E": 0 + }, + "2902": { + "name": "STRANDBERG Noah", + "firstname": "Noah", + "lastname": "STRANDBERG", + "playerid": "601585", + "teamid": "35433", + "teamcode": "SWE", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/a8dbc93c-8dab-764f-4f19-1433eb948972.png", + "inplay": "", + "reentry": 0, + "PITCHIP": "2.1", + "PITCHER": 0, + "PITCHR": 0, + "PITCHH": 0, + "PITCHBB": 0, + "PITCHSO": 2, + "PITCHES": 36, + "STRIKES": 23, + "PITCHOUTS": 7, + "SEASON": { + "PITCHER": "0", + "PITCHOUTS": "0", + "PITCHBB": "0", + "PITCHSO": "0" + }, + "ERA": "0.00", + "PO": 0, + "A": 0, + "E": 0 + }, + "2903": { + "name": "STEUERNAGEL Emil", + "firstname": "Emil", + "lastname": "STEUERNAGEL", + "playerid": "601550", + "teamid": "35433", + "teamcode": "SWE", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/278/photos/c2740b1e-d2d0-bd8b-8fd1-d8d4ab19c19f.png", + "inplay": "", + "reentry": 0, + "PITCHIP": "1.0", + "PITCHER": 1, + "PITCHR": 1, + "PITCHH": 2, + "PITCHBB": 0, + "PITCHSO": 0, + "PITCHES": 11, + "STRIKES": 10, + "PITCHOUTS": 3, + "SEASON": { + "PITCHER": "0", + "PITCHOUTS": "0", + "PITCHBB": "0", + "PITCHSO": "0" + }, + "ERA": "7.00", + "PO": 2, + "A": 0, + "E": 0 + } + }, + "linescore": { + "awayruns": [ + null, + 1, + 2, + 0, + 0, + 0, + 1 + ], + "awaytotals": { + "R": 4, + "H": 5, + "E": 4, + "LOB": 9 + }, + "homeruns": [ + null, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "hometotals": { + "R": 2, + "H": 3, + "E": 1, + "LOB": 5 + } + }, + "animation": { + "batter": 0, + "strike": 0, + "ball": 0 + }, + "playdata": [ + { + "t": "1752158670249", + "p": "1901", + "n": "End of the 6th
0 runs, 1 lob", + "b": "2080", + "a": "57", + "r1": "0", + "r2": "0", + "i": "6", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158661583", + "p": "1901", + "n": "ÅNGSTRöM Dante grounds out 4-3. 3 out. ", + "b": "2070", + "a": "56", + "r1": "9", + "r2": "3", + "i": "6", + "x": "8", + "y": "21", + "hd": "15", + "hp": "80", + "hl": "0" + }, + { + "t": "1752158611821", + "p": "1901", + "n": "CANNEHAG Casper flies out to center field. F8. 2 out. ", + "b": "2060", + "a": "55", + "r1": "9", + "r2": "4", + "i": "6", + "x": "-16", + "y": "64", + "hd": "-5", + "hp": "226", + "hl": "35" + }, + { + "t": 0, + "p": 0, + "n": "Defensive Substitution: #21 SIDELNYK for #20 SYVORAKSHA at LF", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 6 + }, + { + "t": "1752158561431", + "p": "1901", + "n": "ÖIJEN Gustav reaches on dropped fly error. E7. ÖIJEN Gustav to 2nd. ", + "b": "2050", + "a": "54", + "r1": "9", + "r2": "12", + "i": "6", + "x": "-18", + "y": "49", + "hd": "-30", + "hp": "226", + "hl": "35" + }, + { + "t": "1752158557420", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2050", + "a": "54", + "r1": "4", + "r2": "0", + "i": "6", + "x": "-9", + "y": "29", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158555912", + "p": "1901", + "n": "Ball 1. ", + "b": "2050", + "a": "54", + "r1": "2", + "r2": "0", + "i": "6", + "x": "35", + "y": "26", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158545130", + "p": "1901", + "n": "NORLING RADER Erik flies out. L4. 1 out. ", + "b": "2040", + "a": "53", + "r1": "9", + "r2": "4", + "i": "6", + "x": "9", + "y": "49", + "hd": "15", + "hp": "113", + "hl": "20" + }, + { + "t": "1752158545130", + "p": 0, + "n": "***BOT 6", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "6", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1752158531344", + "p": "2903", + "n": "Middle of the 6th
1 runs, 2 lob", + "b": "1050", + "a": "53", + "r1": "0", + "r2": "0", + "i": "6", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158526186", + "p": "2903", + "n": "NESYN Artem flies out to right field. F9. 3 out. ", + "b": "1040", + "a": "52", + "r1": "9", + "r2": "4", + "i": "6", + "x": "7", + "y": "55", + "hd": "30", + "hp": "226", + "hl": "35" + }, + { + "t": "1752158515597", + "p": "2903", + "n": "PROFATYLO Nazar flies out. P1. 2 out. ", + "b": "1030", + "a": "51", + "r1": "9", + "r2": "4", + "i": "6", + "x": "4", + "y": "55", + "hd": "3", + "hp": "57", + "hl": "70" + }, + { + "t": "1752158513207", + "p": "2903", + "n": "Called Strike 1. ", + "b": "1030", + "a": "51", + "r1": "4", + "r2": "0", + "i": "6", + "x": "3", + "y": "46", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158493967", + "p": "2903", + "n": "HRYTSENKO Oleksii singles to right field. KOVALENKO Taras scores. NIKOLAIENKO Stanislav to 3rd. 1 RBI. ", + "b": "1020", + "a": "50", + "r1": "9", + "r2": "18", + "i": "6", + "x": "4", + "y": "61", + "hd": "33", + "hp": "179", + "hl": "20" + }, + { + "t": "1752158488266", + "p": "2903", + "n": "Pickoff Attempt at 1st", + "b": "1020", + "a": "50", + "r1": "0", + "r2": "0", + "i": "6", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158480736", + "p": "2903", + "n": "Called Strike 1. ", + "b": "1020", + "a": "50", + "r1": "4", + "r2": "0", + "i": "6", + "x": "-11", + "y": "25", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158461896", + "p": "2903", + "n": "NIKOLAIENKO Stanislav singles to left field. KOVALENKO Taras to 3rd. ", + "b": "1010", + "a": "49", + "r1": "9", + "r2": "18", + "i": "6", + "x": "-15", + "y": "45", + "hd": "-27", + "hp": "179", + "hl": "20" + }, + { + "t": "1752158457133", + "p": "2903", + "n": "Called Strike 1. ", + "b": "1010", + "a": "49", + "r1": "4", + "r2": "0", + "i": "6", + "x": "-12", + "y": "28", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158440670", + "p": "2903", + "n": "KHOMENKO Artem flies out. P1. 1 out. ", + "b": "1090", + "a": "48", + "r1": "9", + "r2": "4", + "i": "6", + "x": "19", + "y": "53", + "hd": "3", + "hp": "57", + "hl": "70" + }, + { + "t": "1752158435927", + "p": "2903", + "n": "KOVALENKO Taras Hit By Pitch. ", + "b": "1080", + "a": "47", + "r1": "3", + "r2": "15", + "i": "6", + "x": "-51", + "y": "26", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158433570", + "p": "2903", + "n": "Foul. ", + "b": "1080", + "a": "47", + "r1": "6", + "r2": "0", + "i": "6", + "x": "11", + "y": "41", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158430704", + "p": "2903", + "n": "Called Strike 1. ", + "b": "1080", + "a": "47", + "r1": "4", + "r2": "0", + "i": "6", + "x": "-2", + "y": "41", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": 0, + "p": 0, + "n": "Pitching Change: #6 STEUERNAGEL for #12 STRANDBERG", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 6 + }, + { + "t": "1752158430704", + "p": 0, + "n": "***TOP 6", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "6", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1752158406822", + "p": "1901", + "n": "End of the 5th
0 runs, 0 lob", + "b": "2040", + "a": "47", + "r1": "0", + "r2": "0", + "i": "5", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158402705", + "p": "1901", + "n": "GEORGE Elias flies out to left field. F7. 3 out. ", + "b": "2030", + "a": "46", + "r1": "9", + "r2": "4", + "i": "5", + "x": "-16", + "y": "62", + "hd": "-30", + "hp": "226", + "hl": "35" + }, + { + "t": "1752158400528", + "p": "1901", + "n": "Foul. ", + "b": "2030", + "a": "46", + "r1": "6", + "r2": "0", + "i": "5", + "x": "0", + "y": "33", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158398703", + "p": "1901", + "n": "Swinging Strike 1. ", + "b": "2030", + "a": "46", + "r1": "5", + "r2": "0", + "i": "5", + "x": "-1", + "y": "56", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158390200", + "p": "1901", + "n": "HERMAN Sam grounds out 6-3. 2 out. ", + "b": "2020", + "a": "45", + "r1": "9", + "r2": "3", + "i": "5", + "x": "-1", + "y": "11", + "hd": "-15", + "hp": "113", + "hl": "0" + }, + { + "t": "1752158387355", + "p": "1901", + "n": "Foul. ", + "b": "2020", + "a": "45", + "r1": "6", + "r2": "0", + "i": "5", + "x": "19", + "y": "47", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158385487", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2020", + "a": "45", + "r1": "4", + "r2": "0", + "i": "5", + "x": "-3", + "y": "13", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158361792", + "p": "1901", + "n": "ASP Erik flies out foul. FP3. 1 out. ", + "b": "2010", + "a": "44", + "r1": "9", + "r2": "4", + "i": "5", + "x": "6", + "y": "60", + "hd": "48", + "hp": "126", + "hl": "70" + }, + { + "t": "1752158358711", + "p": "1901", + "n": "Ball 1. ", + "b": "2010", + "a": "44", + "r1": "2", + "r2": "0", + "i": "5", + "x": "31", + "y": "55", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158357288", + "p": "1901", + "n": "Called Strike 2. ", + "b": "2010", + "a": "44", + "r1": "4", + "r2": "0", + "i": "5", + "x": "18", + "y": "54", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158355954", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2010", + "a": "44", + "r1": "4", + "r2": "0", + "i": "5", + "x": "-13", + "y": "37", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158355954", + "p": 0, + "n": "***BOT 5", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "5", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1752158342562", + "p": "2902", + "n": "Middle of the 5th
0 runs, 0 lob", + "b": "1080", + "a": "44", + "r1": "0", + "r2": "0", + "i": "5", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158339903", + "p": "2902", + "n": "SYVORAKSHA Yehor flies out to left field. F7. 3 out. ", + "b": "1070", + "a": "43", + "r1": "9", + "r2": "4", + "i": "5", + "x": "-1", + "y": "60", + "hd": "-30", + "hp": "226", + "hl": "35" + }, + { + "t": "1752158337134", + "p": "2902", + "n": "Foul. ", + "b": "1070", + "a": "43", + "r1": "6", + "r2": "0", + "i": "5", + "x": "2", + "y": "18", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158335439", + "p": "2902", + "n": "Ball 1. ", + "b": "1070", + "a": "43", + "r1": "2", + "r2": "0", + "i": "5", + "x": "33", + "y": "1", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158312485", + "p": "2902", + "n": "ZADNIPRIANYI Tymofii flies out. F3. 2 out. ", + "b": "1060", + "a": "42", + "r1": "9", + "r2": "4", + "i": "5", + "x": "8", + "y": "55", + "hd": "35", + "hp": "94", + "hl": "50" + }, + { + "t": "1752158306532", + "p": "2902", + "n": "SOKUR Andrii flies out to center field. F8. 1 out. ", + "b": "1050", + "a": "41", + "r1": "9", + "r2": "4", + "i": "5", + "x": "-14", + "y": "50", + "hd": "-5", + "hp": "226", + "hl": "35" + }, + { + "t": "1752158303832", + "p": "2902", + "n": "Ball 2. ", + "b": "1050", + "a": "41", + "r1": "2", + "r2": "0", + "i": "5", + "x": "30", + "y": "42", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158299625", + "p": "2902", + "n": "Foul. ", + "b": "1050", + "a": "41", + "r1": "6", + "r2": "0", + "i": "5", + "x": "15", + "y": "53", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158293656", + "p": "2902", + "n": "Swinging Strike 1. ", + "b": "1050", + "a": "41", + "r1": "5", + "r2": "0", + "i": "5", + "x": "5", + "y": "26", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158292179", + "p": "2902", + "n": "Ball 1. ", + "b": "1050", + "a": "41", + "r1": "2", + "r2": "0", + "i": "5", + "x": "36", + "y": "7", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158292179", + "p": 0, + "n": "***TOP 5", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "5", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1752158285528", + "p": "1901", + "n": "End of the 4th
0 runs, 1 lob", + "b": "2010", + "a": "41", + "r1": "0", + "r2": "0", + "i": "4", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158280740", + "p": "1901", + "n": "LIDFORS Anton grounds out 5-3. 3 out. ", + "b": "2090", + "a": "40", + "r1": "9", + "r2": "3", + "i": "4", + "x": "-18", + "y": "19", + "hd": "-35", + "hp": "94", + "hl": "0" + }, + { + "t": "1752158277657", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2090", + "a": "40", + "r1": "4", + "r2": "0", + "i": "4", + "x": "-6", + "y": "31", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158261563", + "p": "1901", + "n": "LAUFKE Kasper grounds out 6-3. 2 out. ", + "b": "2080", + "a": "39", + "r1": "9", + "r2": "3", + "i": "4", + "x": "-12", + "y": "28", + "hd": "-15", + "hp": "67", + "hl": "0" + }, + { + "t": "1752158257136", + "p": "1901", + "n": "Foul. ", + "b": "2080", + "a": "39", + "r1": "6", + "r2": "0", + "i": "4", + "x": "-12", + "y": "37", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158255811", + "p": "1901", + "n": "Foul. ", + "b": "2080", + "a": "39", + "r1": "6", + "r2": "0", + "i": "4", + "x": "19", + "y": "36", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158247194", + "p": "1901", + "n": "Ball 2. CANNEHAG Casper to 3rd on wild pitch. ", + "b": "2080", + "a": "39", + "r1": "2", + "r2": "0", + "i": "4", + "x": "35", + "y": "43", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158245809", + "p": "1901", + "n": "Ball 1. ", + "b": "2080", + "a": "39", + "r1": "2", + "r2": "0", + "i": "4", + "x": "37", + "y": "31", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158225078", + "p": "1901", + "n": "ÅNGSTRöM Dante out on sacrifice hit 53. Bunt. CANNEHAG Casper to 2nd. 1 out. ", + "b": "2070", + "a": "38", + "r1": "9", + "r2": "3", + "i": "4", + "x": "-12", + "y": "51", + "hd": "-10", + "hp": "38", + "hl": "5" + }, + { + "t": "1752158220011", + "p": "1901", + "n": "Swinging Strike 1. ", + "b": "2070", + "a": "38", + "r1": "5", + "r2": "0", + "i": "4", + "x": "-3", + "y": "60", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158216702", + "p": "1901", + "n": "CANNEHAG Casper Hit By Pitch. ", + "b": "2060", + "a": "37", + "r1": "3", + "r2": "15", + "i": "4", + "x": "-57", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158214139", + "p": "1901", + "n": "Foul. ", + "b": "2060", + "a": "37", + "r1": "6", + "r2": "0", + "i": "4", + "x": "18", + "y": "35", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158214139", + "p": 0, + "n": "***BOT 4", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "4", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1752158204669", + "p": "2902", + "n": "Middle of the 4th
0 runs, 0 lob", + "b": "1050", + "a": "37", + "r1": "0", + "r2": "0", + "i": "4", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158203232", + "p": "2902", + "n": "NESYN Artem strikes out looking. 3 out. ", + "b": "1040", + "a": "36", + "r1": "4", + "r2": "1", + "i": "4", + "x": "-19", + "y": "17", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158201217", + "p": "2902", + "n": "Ball 1. ", + "b": "1040", + "a": "36", + "r1": "2", + "r2": "0", + "i": "4", + "x": "32", + "y": "17", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158199636", + "p": "2902", + "n": "Foul. ", + "b": "1040", + "a": "36", + "r1": "6", + "r2": "0", + "i": "4", + "x": "-3", + "y": "19", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158197753", + "p": "2902", + "n": "Called Strike 2. ", + "b": "1040", + "a": "36", + "r1": "4", + "r2": "0", + "i": "4", + "x": "0", + "y": "16", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158196586", + "p": "2902", + "n": "Called Strike 1. ", + "b": "1040", + "a": "36", + "r1": "4", + "r2": "0", + "i": "4", + "x": "11", + "y": "18", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158191452", + "p": "2902", + "n": "PROFATYLO Nazar strikes out swinging. 2 out. ", + "b": "1030", + "a": "35", + "r1": "5", + "r2": "2", + "i": "4", + "x": "-7", + "y": "12", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158190004", + "p": "2902", + "n": "Foul. ", + "b": "1030", + "a": "35", + "r1": "6", + "r2": "0", + "i": "4", + "x": "-14", + "y": "20", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158188397", + "p": "2902", + "n": "Foul. ", + "b": "1030", + "a": "35", + "r1": "6", + "r2": "0", + "i": "4", + "x": "16", + "y": "30", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158186896", + "p": "2902", + "n": "Ball 3. ", + "b": "1030", + "a": "35", + "r1": "2", + "r2": "0", + "i": "4", + "x": "38", + "y": "38", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158184665", + "p": "2902", + "n": "Foul. ", + "b": "1030", + "a": "35", + "r1": "6", + "r2": "0", + "i": "4", + "x": "2", + "y": "22", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158179914", + "p": "2902", + "n": "Foul. ", + "b": "1030", + "a": "35", + "r1": "6", + "r2": "0", + "i": "4", + "x": "-4", + "y": "47", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158176631", + "p": "2902", + "n": "Called Strike 1. ", + "b": "1030", + "a": "35", + "r1": "4", + "r2": "0", + "i": "4", + "x": "11", + "y": "12", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158175034", + "p": "2902", + "n": "Ball 2. ", + "b": "1030", + "a": "35", + "r1": "2", + "r2": "0", + "i": "4", + "x": "35", + "y": "2", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158173676", + "p": "2902", + "n": "Ball 1. ", + "b": "1030", + "a": "35", + "r1": "2", + "r2": "0", + "i": "4", + "x": "32", + "y": "39", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158166347", + "p": "2902", + "n": "HRYTSENKO Oleksii flies out to left field. F7. 1 out. ", + "b": "1020", + "a": "34", + "r1": "9", + "r2": "4", + "i": "4", + "x": "-13", + "y": "45", + "hd": "-30", + "hp": "226", + "hl": "35" + }, + { + "t": "1752158164092", + "p": "2902", + "n": "Ball 3. ", + "b": "1020", + "a": "34", + "r1": "2", + "r2": "0", + "i": "4", + "x": "39", + "y": "35", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158162652", + "p": "2902", + "n": "Swinging Strike 2. ", + "b": "1020", + "a": "34", + "r1": "5", + "r2": "0", + "i": "4", + "x": "-11", + "y": "18", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158160898", + "p": "2902", + "n": "Ball 2. ", + "b": "1020", + "a": "34", + "r1": "2", + "r2": "0", + "i": "4", + "x": "36", + "y": "69", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158159280", + "p": "2902", + "n": "Ball 1. ", + "b": "1020", + "a": "34", + "r1": "2", + "r2": "0", + "i": "4", + "x": "36", + "y": "38", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158157712", + "p": "2902", + "n": "Called Strike 1. ", + "b": "1020", + "a": "34", + "r1": "4", + "r2": "0", + "i": "4", + "x": "-15", + "y": "44", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158157712", + "p": 0, + "n": "***TOP 4", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "4", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1752158143221", + "p": "1901", + "n": "End of the 3rd
0 runs, 1 lob", + "b": "2060", + "a": "34", + "r1": "0", + "r2": "0", + "i": "3", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158136530", + "p": "1901", + "n": "ÖIJEN Gustav flies out to center field. F8. 3 out. ", + "b": "2050", + "a": "33", + "r1": "9", + "r2": "4", + "i": "3", + "x": "18", + "y": "57", + "hd": "-5", + "hp": "226", + "hl": "35" + }, + { + "t": "1752158133040", + "p": "1901", + "n": "NORLING RADER Erik to 2nd on balk. ", + "b": "2050", + "a": "33", + "r1": "0", + "r2": "0", + "i": "3", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158129358", + "p": "1901", + "n": "Foul. ", + "b": "2050", + "a": "33", + "r1": "6", + "r2": "0", + "i": "3", + "x": "-6", + "y": "54", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158127226", + "p": "1901", + "n": "Ball 2. ", + "b": "2050", + "a": "33", + "r1": "2", + "r2": "0", + "i": "3", + "x": "39", + "y": "34", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158124977", + "p": "1901", + "n": "Foul. ", + "b": "2050", + "a": "33", + "r1": "6", + "r2": "0", + "i": "3", + "x": "-15", + "y": "36", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158123093", + "p": "1901", + "n": "Foul. ", + "b": "2050", + "a": "33", + "r1": "6", + "r2": "0", + "i": "3", + "x": "-10", + "y": "60", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158106404", + "p": "1901", + "n": "Pickoff Attempt at 1st", + "b": "2050", + "a": "33", + "r1": "0", + "r2": "0", + "i": "3", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158102681", + "p": "1901", + "n": "Ball 1. ", + "b": "2050", + "a": "33", + "r1": "2", + "r2": "0", + "i": "3", + "x": "31", + "y": "49", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158084909", + "p": "1901", + "n": "NORLING RADER Erik reaches on fielders choice. HERMAN Sam out at 2nd 54. 2 out. ", + "b": "2040", + "a": "32", + "r1": "9", + "r2": "11", + "i": "3", + "x": "-14", + "y": "19", + "hd": "-35", + "hp": "94", + "hl": "0" + }, + { + "t": "1752158078601", + "p": "1901", + "n": "Foul. ", + "b": "2040", + "a": "32", + "r1": "6", + "r2": "0", + "i": "3", + "x": "-4", + "y": "20", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158075586", + "p": "1901", + "n": "Pickoff Attempt at 1st", + "b": "2040", + "a": "32", + "r1": "0", + "r2": "0", + "i": "3", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158055055", + "p": "1901", + "n": "GEORGE Elias flies out foul. FF2. 1 out. ", + "b": "2030", + "a": "31", + "r1": "9", + "r2": "4", + "i": "3", + "x": "-13", + "y": "56", + "hd": "-51", + "hp": "46", + "hl": "50" + }, + { + "t": "1752158052706", + "p": "1901", + "n": "Ball 1. ", + "b": "2030", + "a": "31", + "r1": "2", + "r2": "0", + "i": "3", + "x": "35", + "y": "55", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158036680", + "p": "1901", + "n": "HERMAN Sam singles to shortstop. ", + "b": "2020", + "a": "30", + "r1": "9", + "r2": "18", + "i": "3", + "x": "8", + "y": "28", + "hd": "-10", + "hp": "108", + "hl": "0" + }, + { + "t": "1752158033276", + "p": "1901", + "n": "Swinging Strike 1. ", + "b": "2020", + "a": "30", + "r1": "5", + "r2": "0", + "i": "3", + "x": "-20", + "y": "50", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158031966", + "p": "1901", + "n": "Ball 1. ", + "b": "2020", + "a": "30", + "r1": "2", + "r2": "0", + "i": "3", + "x": "36", + "y": "69", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158031966", + "p": 0, + "n": "***BOT 3", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "3", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1752158015784", + "p": "2902", + "n": "Middle of the 3rd
0 runs, 2 lob", + "b": "1020", + "a": "30", + "r1": "0", + "r2": "0", + "i": "3", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158006862", + "p": "2902", + "n": "NIKOLAIENKO Stanislav flies out foul. FF3. 3 out. ", + "b": "1010", + "a": "29", + "r1": "9", + "r2": "4", + "i": "3", + "x": "9", + "y": "63", + "hd": "50", + "hp": "129", + "hl": "50" + }, + { + "t": "1752158002569", + "p": "2902", + "n": "Ball 3. ", + "b": "1010", + "a": "29", + "r1": "2", + "r2": "0", + "i": "3", + "x": "39", + "y": "1", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752158000112", + "p": "2902", + "n": "Foul. ", + "b": "1010", + "a": "29", + "r1": "6", + "r2": "0", + "i": "3", + "x": "-13", + "y": "47", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157998347", + "p": "2902", + "n": "Ball 2. ", + "b": "1010", + "a": "29", + "r1": "2", + "r2": "0", + "i": "3", + "x": "33", + "y": "40", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157996674", + "p": "2902", + "n": "Swinging Strike 2. ", + "b": "1010", + "a": "29", + "r1": "5", + "r2": "0", + "i": "3", + "x": "-3", + "y": "24", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157995067", + "p": "2902", + "n": "Called Strike 1. ", + "b": "1010", + "a": "29", + "r1": "4", + "r2": "0", + "i": "3", + "x": "-9", + "y": "26", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157992735", + "p": "2902", + "n": "Ball 1. ", + "b": "1010", + "a": "29", + "r1": "2", + "r2": "0", + "i": "3", + "x": "34", + "y": "15", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": 0, + "p": 0, + "n": "Pitching Change: #12 STRANDBERG for #26 WILLIAMS", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 3 + }, + { + "t": "1752157965469", + "p": "2901", + "n": "KHOMENKO Artem walks. ", + "b": "1090", + "a": "28", + "r1": "2", + "r2": "13", + "i": "3", + "x": "33", + "y": "69", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157963661", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1090", + "a": "28", + "r1": "4", + "r2": "0", + "i": "3", + "x": "12", + "y": "54", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157961309", + "p": "2901", + "n": "Ball 3. ", + "b": "1090", + "a": "28", + "r1": "2", + "r2": "0", + "i": "3", + "x": "30", + "y": "17", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157958944", + "p": "2901", + "n": "Pickoff Attempt at 2nd", + "b": "1090", + "a": "28", + "r1": "0", + "r2": "0", + "i": "3", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157951470", + "p": "2901", + "n": "Ball 2. ", + "b": "1090", + "a": "28", + "r1": "2", + "r2": "0", + "i": "3", + "x": "34", + "y": "52", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157947776", + "p": "2901", + "n": "Ball 1. ", + "b": "1090", + "a": "28", + "r1": "2", + "r2": "0", + "i": "3", + "x": "31", + "y": "67", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157934095", + "p": "2901", + "n": "KOVALENKO Taras flies out foul. FF3. 2 out. ", + "b": "1080", + "a": "27", + "r1": "9", + "r2": "4", + "i": "3", + "x": "9", + "y": "45", + "hd": "50", + "hp": "112", + "hl": "50" + }, + { + "t": "1752157932205", + "p": "2901", + "n": "Ball 2. ", + "b": "1080", + "a": "27", + "r1": "2", + "r2": "0", + "i": "3", + "x": "32", + "y": "61", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157929917", + "p": "2901", + "n": "Ball 1. ", + "b": "1080", + "a": "27", + "r1": "2", + "r2": "0", + "i": "3", + "x": "35", + "y": "21", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157921152", + "p": "2901", + "n": "SYVORAKSHA Yehor strikes out swinging. 1 out. ", + "b": "1070", + "a": "26", + "r1": "5", + "r2": "2", + "i": "3", + "x": "12", + "y": "13", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157917187", + "p": "2901", + "n": "ZADNIPRIANYI Tymofii to 2nd on balk. ", + "b": "1070", + "a": "26", + "r1": "0", + "r2": "0", + "i": "3", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157913340", + "p": "2901", + "n": "Called Strike 2. ", + "b": "1070", + "a": "26", + "r1": "4", + "r2": "0", + "i": "3", + "x": "9", + "y": "30", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157911561", + "p": "2901", + "n": "Ball 2. ", + "b": "1070", + "a": "26", + "r1": "2", + "r2": "0", + "i": "3", + "x": "33", + "y": "53", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157910718", + "p": "2901", + "n": "Ball 1. ", + "b": "1070", + "a": "26", + "r1": "2", + "r2": "0", + "i": "3", + "x": "36", + "y": "4", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157909554", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1070", + "a": "26", + "r1": "4", + "r2": "0", + "i": "3", + "x": "12", + "y": "42", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157903041", + "p": "2901", + "n": "ZADNIPRIANYI Tymofii walks. ", + "b": "1060", + "a": "25", + "r1": "2", + "r2": "13", + "i": "3", + "x": "37", + "y": "25", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157901009", + "p": "2901", + "n": "Foul. ", + "b": "1060", + "a": "25", + "r1": "6", + "r2": "0", + "i": "3", + "x": "-5", + "y": "56", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157899281", + "p": "2901", + "n": "Foul. ", + "b": "1060", + "a": "25", + "r1": "6", + "r2": "0", + "i": "3", + "x": "7", + "y": "14", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157897785", + "p": "2901", + "n": "Ball 3. ", + "b": "1060", + "a": "25", + "r1": "2", + "r2": "0", + "i": "3", + "x": "39", + "y": "53", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157895123", + "p": "2901", + "n": "Ball 2. ", + "b": "1060", + "a": "25", + "r1": "2", + "r2": "0", + "i": "3", + "x": "37", + "y": "42", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157893972", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1060", + "a": "25", + "r1": "4", + "r2": "0", + "i": "3", + "x": "-7", + "y": "26", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157892264", + "p": "2901", + "n": "Ball 1. ", + "b": "1060", + "a": "25", + "r1": "2", + "r2": "0", + "i": "3", + "x": "38", + "y": "69", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157892264", + "p": 0, + "n": "***TOP 3", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "3", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1752157872529", + "p": "1901", + "n": "End of the 2nd
0 runs, 0 lob", + "b": "2020", + "a": "25", + "r1": "0", + "r2": "0", + "i": "2", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752157870556", + "p": "1901", + "n": "ASP Erik strikes out swinging KS23. 3 out. ", + "b": "2010", + "a": "24", + "r1": "5", + "r2": "2", + "i": "2", + "x": "18", + "y": "32", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752150133503", + "p": "1901", + "n": "Called Strike 2. ", + "b": "2010", + "a": "24", + "r1": "4", + "r2": "0", + "i": "2", + "x": "2", + "y": "47", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752150116777", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2010", + "a": "24", + "r1": "4", + "r2": "0", + "i": "2", + "x": "19", + "y": "27", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752150099100", + "p": "1901", + "n": "Ball 1. ", + "b": "2010", + "a": "24", + "r1": "2", + "r2": "0", + "i": "2", + "x": "36", + "y": "36", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752150042334", + "p": "1901", + "n": "LIDFORS Anton strikes out swinging. LAUFKE Kasper out at 2nd 26. Double Play. 2 out. ", + "b": "2090", + "a": "23", + "r1": "5", + "r2": "2", + "i": "2", + "x": "-8", + "y": "28", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752150023743", + "p": "1901", + "n": "Swinging Strike 2. ", + "b": "2090", + "a": "23", + "r1": "5", + "r2": "0", + "i": "2", + "x": "4", + "y": "54", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149999289", + "p": "1901", + "n": "Foul. ", + "b": "2090", + "a": "23", + "r1": "6", + "r2": "0", + "i": "2", + "x": "-10", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149984788", + "p": "1901", + "n": "Pickoff Attempt at 1st", + "b": "2090", + "a": "23", + "r1": "0", + "r2": "0", + "i": "2", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149957551", + "p": "1901", + "n": "Ball 1. ", + "b": "2090", + "a": "23", + "r1": "2", + "r2": "0", + "i": "2", + "x": "37", + "y": "16", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149926719", + "p": "1901", + "n": "LAUFKE Kasper reaches on fielding error. E4. ", + "b": "2080", + "a": "22", + "r1": "9", + "r2": "12", + "i": "2", + "x": "14", + "y": "13", + "hd": "15", + "hp": "78", + "hl": "0" + }, + { + "t": "1752149898487", + "p": "1901", + "n": "Foul. ", + "b": "2080", + "a": "22", + "r1": "6", + "r2": "0", + "i": "2", + "x": "12", + "y": "25", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149877604", + "p": "1901", + "n": "Foul. ", + "b": "2080", + "a": "22", + "r1": "6", + "r2": "0", + "i": "2", + "x": "11", + "y": "44", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149851362", + "p": "1901", + "n": "Foul. ", + "b": "2080", + "a": "22", + "r1": "6", + "r2": "0", + "i": "2", + "x": "-17", + "y": "49", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149830896", + "p": "1901", + "n": "Ball 2. ", + "b": "2080", + "a": "22", + "r1": "2", + "r2": "0", + "i": "2", + "x": "39", + "y": "54", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149815061", + "p": "1901", + "n": "Ball 1. ", + "b": "2080", + "a": "22", + "r1": "2", + "r2": "0", + "i": "2", + "x": "30", + "y": "12", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149795976", + "p": "1901", + "n": "Called Strike 2. ", + "b": "2080", + "a": "22", + "r1": "4", + "r2": "0", + "i": "2", + "x": "12", + "y": "38", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149778633", + "p": "1901", + "n": "Swinging Strike 1. ", + "b": "2080", + "a": "22", + "r1": "5", + "r2": "0", + "i": "2", + "x": "-18", + "y": "36", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149778633", + "p": 0, + "n": "***BOT 2", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "2", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1752149638721", + "p": "2901", + "n": "Middle of the 2nd
2 runs, 3 lob", + "b": "1060", + "a": "22", + "r1": "0", + "r2": "0", + "i": "2", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149637375", + "p": "2901", + "n": "SOKUR Andrii strikes out swinging. 3 out. ", + "b": "1050", + "a": "21", + "r1": "5", + "r2": "2", + "i": "2", + "x": "15", + "y": "24", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149618750", + "p": "2901", + "n": "Ball 1. ", + "b": "1050", + "a": "21", + "r1": "2", + "r2": "0", + "i": "2", + "x": "37", + "y": "25", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149603414", + "p": "2901", + "n": "Swinging Strike 2. ", + "b": "1050", + "a": "21", + "r1": "5", + "r2": "0", + "i": "2", + "x": "2", + "y": "55", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149589302", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1050", + "a": "21", + "r1": "4", + "r2": "0", + "i": "2", + "x": "6", + "y": "36", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149555065", + "p": "2901", + "n": "NESYN Artem walks. KOVALENKO Taras scores. HRYTSENKO Oleksii to 3rd. PROFATYLO Nazar to 2nd. 1 RBI. ", + "b": "1040", + "a": "20", + "r1": "2", + "r2": "13", + "i": "2", + "x": "31", + "y": "63", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149525423", + "p": "2901", + "n": "Ball 3. ", + "b": "1040", + "a": "20", + "r1": "2", + "r2": "0", + "i": "2", + "x": "30", + "y": "55", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149508755", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1040", + "a": "20", + "r1": "4", + "r2": "0", + "i": "2", + "x": "15", + "y": "16", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149495841", + "p": "2901", + "n": "Ball 2. ", + "b": "1040", + "a": "20", + "r1": "2", + "r2": "0", + "i": "2", + "x": "37", + "y": "9", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149479074", + "p": "2901", + "n": "Ball 1. ", + "b": "1040", + "a": "20", + "r1": "2", + "r2": "0", + "i": "2", + "x": "37", + "y": "42", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149471773", + "p": "2901", + "n": "Coaching Visit", + "b": "1040", + "a": "20", + "r1": "0", + "r2": "0", + "i": "2", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149443804", + "p": "2901", + "n": "PROFATYLO Nazar walks. SYVORAKSHA Yehor scores. KOVALENKO Taras to 3rd. HRYTSENKO Oleksii to 2nd. 1 RBI. ", + "b": "1030", + "a": "19", + "r1": "2", + "r2": "13", + "i": "2", + "x": "34", + "y": "31", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149369053", + "p": "2901", + "n": "Ball 3. ", + "b": "1030", + "a": "19", + "r1": "2", + "r2": "0", + "i": "2", + "x": "31", + "y": "13", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149344101", + "p": "2901", + "n": "Foul. ", + "b": "1030", + "a": "19", + "r1": "6", + "r2": "0", + "i": "2", + "x": "19", + "y": "45", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149321503", + "p": "2901", + "n": "Ball 2. ", + "b": "1030", + "a": "19", + "r1": "2", + "r2": "0", + "i": "2", + "x": "32", + "y": "50", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149294919", + "p": "2901", + "n": "Ball 1. ", + "b": "1030", + "a": "19", + "r1": "2", + "r2": "0", + "i": "2", + "x": "30", + "y": "59", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149258003", + "p": "2901", + "n": "HRYTSENKO Oleksii walks. ", + "b": "1020", + "a": "18", + "r1": "2", + "r2": "13", + "i": "2", + "x": "37", + "y": "54", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149236062", + "p": "2901", + "n": "Foul. ", + "b": "1020", + "a": "18", + "r1": "6", + "r2": "0", + "i": "2", + "x": "-14", + "y": "51", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149197763", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1020", + "a": "18", + "r1": "4", + "r2": "0", + "i": "2", + "x": "19", + "y": "52", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149188656", + "p": "2901", + "n": "Ball 3. ", + "b": "1020", + "a": "18", + "r1": "2", + "r2": "0", + "i": "2", + "x": "34", + "y": "33", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149182855", + "p": "2901", + "n": "Ball 2. ", + "b": "1020", + "a": "18", + "r1": "2", + "r2": "0", + "i": "2", + "x": "35", + "y": "39", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149181486", + "p": "2901", + "n": "Ball 1. ", + "b": "1020", + "a": "18", + "r1": "2", + "r2": "0", + "i": "2", + "x": "35", + "y": "40", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149159971", + "p": "2901", + "n": "NIKOLAIENKO Stanislav grounds out 5-3. SYVORAKSHA Yehor to 3rd. KOVALENKO Taras to 2nd. 2 out. ", + "b": "1010", + "a": "17", + "r1": "9", + "r2": "3", + "i": "2", + "x": "-7", + "y": "21", + "hd": "-35", + "hp": "94", + "hl": "0" + }, + { + "t": "1752149085524", + "p": "2901", + "n": "Pickoff Attempt at 2nd", + "b": "1010", + "a": "17", + "r1": "0", + "r2": "0", + "i": "2", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149061858", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1010", + "a": "17", + "r1": "4", + "r2": "0", + "i": "2", + "x": "-20", + "y": "33", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149028656", + "p": "2901", + "n": "KHOMENKO Artem strikes out swinging. 1 out. ", + "b": "1090", + "a": "16", + "r1": "5", + "r2": "2", + "i": "2", + "x": "5", + "y": "14", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752149007815", + "p": "2901", + "n": "Foul. ", + "b": "1090", + "a": "16", + "r1": "6", + "r2": "0", + "i": "2", + "x": "-5", + "y": "39", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148970797", + "p": "2901", + "n": "Ball 2. ", + "b": "1090", + "a": "16", + "r1": "2", + "r2": "0", + "i": "2", + "x": "34", + "y": "2", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148948794", + "p": "2901", + "n": "Ball 1. ", + "b": "1090", + "a": "16", + "r1": "2", + "r2": "0", + "i": "2", + "x": "35", + "y": "23", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148929035", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1090", + "a": "16", + "r1": "4", + "r2": "0", + "i": "2", + "x": "-5", + "y": "16", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148899762", + "p": "2901", + "n": "KOVALENKO Taras walks. SYVORAKSHA Yehor to 2nd. ", + "b": "1080", + "a": "15", + "r1": "2", + "r2": "13", + "i": "2", + "x": "37", + "y": "38", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148871056", + "p": "2901", + "n": "Ball 3. ", + "b": "1080", + "a": "15", + "r1": "2", + "r2": "0", + "i": "2", + "x": "30", + "y": "36", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148851301", + "p": "2901", + "n": "Catcher Pickoff Attempt at 1st", + "b": "1080", + "a": "15", + "r1": "0", + "r2": "0", + "i": "2", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148846150", + "p": "2901", + "n": "Ball 2. ", + "b": "1080", + "a": "15", + "r1": "2", + "r2": "0", + "i": "2", + "x": "35", + "y": "70", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148824386", + "p": "2901", + "n": "Ball 1. ", + "b": "1080", + "a": "15", + "r1": "2", + "r2": "0", + "i": "2", + "x": "32", + "y": "44", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148801689", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1080", + "a": "15", + "r1": "4", + "r2": "0", + "i": "2", + "x": "5", + "y": "49", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148767968", + "p": "2901", + "n": "SYVORAKSHA Yehor walks. ", + "b": "1070", + "a": "14", + "r1": "2", + "r2": "13", + "i": "2", + "x": "35", + "y": "48", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148752782", + "p": "2901", + "n": "Ball 3. ", + "b": "1070", + "a": "14", + "r1": "2", + "r2": "0", + "i": "2", + "x": "34", + "y": "4", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148736669", + "p": "2901", + "n": "Ball 2. ", + "b": "1070", + "a": "14", + "r1": "2", + "r2": "0", + "i": "2", + "x": "34", + "y": "64", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148713630", + "p": "2901", + "n": "Ball 1. ", + "b": "1070", + "a": "14", + "r1": "2", + "r2": "0", + "i": "2", + "x": "36", + "y": "32", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148713630", + "p": 0, + "n": "***TOP 2", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "2", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1752148558465", + "p": "1901", + "n": "End of the 1st
2 runs, 2 lob", + "b": "2080", + "a": "14", + "r1": "0", + "r2": "0", + "i": "1", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148544967", + "p": "1901", + "n": "ÅNGSTRöM Dante grounds out 4-3. 3 out. ", + "b": "2070", + "a": "13", + "r1": "9", + "r2": "3", + "i": "1", + "x": "9", + "y": "21", + "hd": "15", + "hp": "77", + "hl": "0" + }, + { + "t": "1752148519047", + "p": "1901", + "n": "Ball 1. ", + "b": "2070", + "a": "13", + "r1": "2", + "r2": "0", + "i": "1", + "x": "38", + "y": "59", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148502716", + "p": "1901", + "n": "Pickoff Attempt at 2nd", + "b": "2070", + "a": "13", + "r1": "0", + "r2": "0", + "i": "1", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148474921", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2070", + "a": "13", + "r1": "4", + "r2": "0", + "i": "1", + "x": "-1", + "y": "41", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148418340", + "p": "1901", + "n": "Coaching Visit", + "b": "2070", + "a": "13", + "r1": "0", + "r2": "0", + "i": "1", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148398044", + "p": "1901", + "n": "CANNEHAG Casper walks. ÖIJEN Gustav to 2nd. ", + "b": "2060", + "a": "12", + "r1": "2", + "r2": "13", + "i": "1", + "x": "37", + "y": "21", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148381436", + "p": "1901", + "n": "Ball 3. ", + "b": "2060", + "a": "12", + "r1": "2", + "r2": "0", + "i": "1", + "x": "32", + "y": "53", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148374493", + "p": "1901", + "n": "Ball 2. ", + "b": "2060", + "a": "12", + "r1": "2", + "r2": "0", + "i": "1", + "x": "34", + "y": "56", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148371950", + "p": "1901", + "n": "Ball 1. ", + "b": "2060", + "a": "12", + "r1": "2", + "r2": "0", + "i": "1", + "x": "38", + "y": "19", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148363051", + "p": "1901", + "n": "ÖIJEN Gustav walks. ", + "b": "2050", + "a": "11", + "r1": "2", + "r2": "13", + "i": "1", + "x": "30", + "y": "56", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148357915", + "p": "1901", + "n": "Ball 3. ", + "b": "2050", + "a": "11", + "r1": "2", + "r2": "0", + "i": "1", + "x": "31", + "y": "27", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148356300", + "p": "1901", + "n": "Ball 2. ", + "b": "2050", + "a": "11", + "r1": "2", + "r2": "0", + "i": "1", + "x": "36", + "y": "66", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148354668", + "p": "1901", + "n": "Foul. ", + "b": "2050", + "a": "11", + "r1": "6", + "r2": "0", + "i": "1", + "x": "-13", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148351662", + "p": "1901", + "n": "Ball 1. ", + "b": "2050", + "a": "11", + "r1": "2", + "r2": "0", + "i": "1", + "x": "36", + "y": "26", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148336923", + "p": "1901", + "n": "NORLING RADER Erik grounds out 5-3. 2 out. ", + "b": "2040", + "a": "10", + "r1": "9", + "r2": "3", + "i": "1", + "x": "-13", + "y": "19", + "hd": "-35", + "hp": "94", + "hl": "0" + }, + { + "t": "1752148279669", + "p": "1901", + "n": "GEORGE Elias scores on 165E1. ", + "b": "2040", + "a": "10", + "r1": "0", + "r2": "0", + "i": "1", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148184492", + "p": "1901", + "n": "Ball 1. ", + "b": "2040", + "a": "10", + "r1": "2", + "r2": "0", + "i": "1", + "x": "36", + "y": "14", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148099616", + "p": "1901", + "n": "GEORGE Elias singles down LF line. HERMAN Sam to 3rd. HERMAN Sam scores on E7. GEORGE Elias to 2nd on E7. ", + "b": "2030", + "a": "9", + "r1": "9", + "r2": "18", + "i": "1", + "x": "-16", + "y": "16", + "hd": "-40", + "hp": "220", + "hl": "0" + }, + { + "t": "1752148048413", + "p": "1901", + "n": "Foul. ", + "b": "2030", + "a": "9", + "r1": "6", + "r2": "0", + "i": "1", + "x": "-20", + "y": "49", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148028305", + "p": "1901", + "n": "Swinging Strike 1. ", + "b": "2030", + "a": "9", + "r1": "5", + "r2": "0", + "i": "1", + "x": "15", + "y": "21", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752148013635", + "p": "1901", + "n": "Ball 1. ", + "b": "2030", + "a": "9", + "r1": "2", + "r2": "0", + "i": "1", + "x": "38", + "y": "9", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147981288", + "p": "1901", + "n": "HERMAN Sam singles up the middle. ", + "b": "2020", + "a": "8", + "r1": "9", + "r2": "18", + "i": "1", + "x": "-8", + "y": "21", + "hd": "-10", + "hp": "179", + "hl": "0" + }, + { + "t": "1752147940401", + "p": "1901", + "n": "ASP Erik strikes out swinging. 1 out. ", + "b": "2010", + "a": "7", + "r1": "5", + "r2": "2", + "i": "1", + "x": "13", + "y": "54", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147918587", + "p": "1901", + "n": "Foul. ", + "b": "2010", + "a": "7", + "r1": "6", + "r2": "0", + "i": "1", + "x": "10", + "y": "34", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147900934", + "p": "1901", + "n": "Ball 2. ", + "b": "2010", + "a": "7", + "r1": "2", + "r2": "0", + "i": "1", + "x": "36", + "y": "3", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147880718", + "p": "1901", + "n": "Foul. ", + "b": "2010", + "a": "7", + "r1": "6", + "r2": "0", + "i": "1", + "x": "5", + "y": "21", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147863674", + "p": "1901", + "n": "Ball 1. ", + "b": "2010", + "a": "7", + "r1": "2", + "r2": "0", + "i": "1", + "x": "34", + "y": "54", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147848707", + "p": "1901", + "n": "Called Strike 2. ", + "b": "2010", + "a": "7", + "r1": "4", + "r2": "0", + "i": "1", + "x": "-15", + "y": "35", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147832919", + "p": "1901", + "n": "Foul. ", + "b": "2010", + "a": "7", + "r1": "6", + "r2": "0", + "i": "1", + "x": "-4", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147832919", + "p": 0, + "n": "***BOT 1", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "1", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1752147819053", + "p": "2901", + "n": "Middle of the 1st
1 runs, 2 lob", + "b": "1070", + "a": "7", + "r1": "0", + "r2": "0", + "i": "1", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147812812", + "p": "2901", + "n": "ZADNIPRIANYI Tymofii hits into a double play. GDP 463. NESYN Artem out at 2nd 46. 3 out. ", + "b": "1060", + "a": "6", + "r1": "9", + "r2": "5", + "i": "1", + "x": "7", + "y": "11", + "hd": "15", + "hp": "113", + "hl": "0" + }, + { + "t": "1752147807018", + "p": "2901", + "n": "SOKUR Andrii strikes out swinging. 1 out. ", + "b": "1050", + "a": "5", + "r1": "5", + "r2": "2", + "i": "1", + "x": "-1", + "y": "56", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147615627", + "p": "2901", + "n": "Ball 3. ", + "b": "1050", + "a": "5", + "r1": "2", + "r2": "0", + "i": "1", + "x": "33", + "y": "2", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147596196", + "p": "2901", + "n": "Ball 2. ", + "b": "1050", + "a": "5", + "r1": "2", + "r2": "0", + "i": "1", + "x": "30", + "y": "2", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147568935", + "p": "2901", + "n": "Swinging Strike 2. ", + "b": "1050", + "a": "5", + "r1": "5", + "r2": "0", + "i": "1", + "x": "5", + "y": "20", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147549710", + "p": "2901", + "n": "Ball 1. ", + "b": "1050", + "a": "5", + "r1": "2", + "r2": "0", + "i": "1", + "x": "39", + "y": "67", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147532044", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1050", + "a": "5", + "r1": "4", + "r2": "0", + "i": "1", + "x": "8", + "y": "43", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147491131", + "p": "2901", + "n": "NESYN Artem singles to center field. NIKOLAIENKO Stanislav scores. HRYTSENKO Oleksii to 3rd. PROFATYLO Nazar to 2nd. 1 RBI. ", + "b": "1040", + "a": "4", + "r1": "9", + "r2": "18", + "i": "1", + "x": "13", + "y": "54", + "hd": "3", + "hp": "242", + "hl": "20" + }, + { + "t": "1752147467294", + "p": "2901", + "n": "Ball 1. ", + "b": "1040", + "a": "4", + "r1": "2", + "r2": "0", + "i": "1", + "x": "37", + "y": "41", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147432765", + "p": "2901", + "n": "PROFATYLO Nazar singles to right center. NIKOLAIENKO Stanislav to 3rd. HRYTSENKO Oleksii to 2nd. ", + "b": "1030", + "a": "3", + "r1": "9", + "r2": "18", + "i": "1", + "x": "12", + "y": "59", + "hd": "13", + "hp": "224", + "hl": "20" + }, + { + "t": "1752147401060", + "p": "2901", + "n": "Ball 2. ", + "b": "1030", + "a": "3", + "r1": "2", + "r2": "0", + "i": "1", + "x": "34", + "y": "57", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147381277", + "p": "2901", + "n": "Ball 1. ", + "b": "1030", + "a": "3", + "r1": "2", + "r2": "0", + "i": "1", + "x": "36", + "y": "11", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147353600", + "p": "2901", + "n": "HRYTSENKO Oleksii reaches on fielding error. E5. NIKOLAIENKO Stanislav to 2nd. ", + "b": "1020", + "a": "2", + "r1": "9", + "r2": "12", + "i": "1", + "x": "-3", + "y": "25", + "hd": "-19", + "hp": "80", + "hl": "0" + }, + { + "t": "1752147330663", + "p": "2901", + "n": "Called Strike 2. ", + "b": "1020", + "a": "2", + "r1": "4", + "r2": "0", + "i": "1", + "x": "-14", + "y": "32", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147316072", + "p": "2901", + "n": "Pickoff Attempt at 1st", + "b": "1020", + "a": "2", + "r1": "0", + "r2": "0", + "i": "1", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147300374", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1020", + "a": "2", + "r1": "4", + "r2": "0", + "i": "1", + "x": "-6", + "y": "20", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147282415", + "p": "2901", + "n": "Ball 1. ", + "b": "1020", + "a": "2", + "r1": "2", + "r2": "0", + "i": "1", + "x": "32", + "y": "1", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147260575", + "p": "2901", + "n": "NIKOLAIENKO Stanislav singles to left field. ", + "b": "1010", + "a": "1", + "r1": "9", + "r2": "18", + "i": "1", + "x": "-20", + "y": "53", + "hd": "-34", + "hp": "234", + "hl": "20" + }, + { + "t": "1752147232359", + "p": "2901", + "n": "Ball 2. ", + "b": "1010", + "a": "1", + "r1": "2", + "r2": "0", + "i": "1", + "x": "37", + "y": "37", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147207197", + "p": "2901", + "n": "Foul. ", + "b": "1010", + "a": "1", + "r1": "6", + "r2": "0", + "i": "1", + "x": "-2", + "y": "51", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147188740", + "p": "2901", + "n": "Swinging Strike 2. ", + "b": "1010", + "a": "1", + "r1": "5", + "r2": "0", + "i": "1", + "x": "-15", + "y": "61", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147174211", + "p": "2901", + "n": "Ball 1. ", + "b": "1010", + "a": "1", + "r1": "2", + "r2": "0", + "i": "1", + "x": "35", + "y": "22", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752147162239", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1010", + "a": "1", + "r1": "4", + "r2": "0", + "i": "1", + "x": "-8", + "y": "56", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752146249444", + "p": "2901", + "n": "Play Ball", + "b": "1010", + "a": "1", + "r1": "0", + "r2": "0", + "i": "1", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1752146249444", + "p": 0, + "n": "***TOP 1", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "1", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + } + ] +} diff --git a/src/test/resources/wbsc/extra_inning_play.json b/src/test/resources/wbsc/extra_inning_play.json new file mode 100644 index 0000000..d1f866e --- /dev/null +++ b/src/test/resources/wbsc/extra_inning_play.json @@ -0,0 +1,6193 @@ +{ + "debug_lastplay": 299, + "lastplayloaded": 299, + "gameid": "133482", + "debugcode": "416614", + "eventlocation": "", + "eventhome": "KGA", + "eventaway": "RAT", + "eventhomeid": "30156", + "eventawayid": "30160", + "eventurl": "", + "gameover": 0, + "innings": 10, + "platecount": [ + { + "id": 1, + "type": 2, + "label": "Foul. ", + "pitch": "Unknown", + "coords": [ + 0, + 0 + ] + } + ], + "situation": { + "inning": "10.1", + "uniform": "standard-home", + "gender": "", + "batter": "CALSON Anton", + "batterid": "416614", + "bats": "L", + "batting": "2 for 3", + "avg": ".667", + "pitcher": "JOHNSON Joel", + "pitcherid": "436619", + "pitcherthrows": "R", + "pitcherera": "5.00", + "pitcherip": "2.0", + "runner1": 0, + "runner2": 2040, + "runner3": 0, + "outs": 0, + "balls": 0, + "strikes": 1, + "extrainnings": null, + "currentinning": "BOT 10" + }, + "gameinfo": null, + "boxscore": { + "1010": { + "name": "JOHNSON Joel", + "firstname": "Joel", + "lastname": "JOHNSON", + "playerid": "436619", + "teamid": "30160", + "teamcode": "RAT", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "CF/P", + "PA": 5, + "AB": 5, + "R": 1, + "H": 1, + "RBI": 0, + "BB": 0, + "SO": 2, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 1, + "CS": 0, + "SEASON": { + "PA": "85", + "AB": "62", + "H": "26", + "BB": "21", + "DOUBLE": "3", + "TRIPLE": "6", + "HR": "1", + "SF": "1", + "HBP": "1" + }, + "LOB": 0, + "AVG": ".200", + "OBP": ".200", + "SLG": ".200", + "OPS": ".400", + "PO": 2, + "A": 0, + "E": 0 + }, + "1020": { + "name": "JOHNSON Benjamin", + "firstname": "Benjamin", + "lastname": "JOHNSON", + "playerid": "436615", + "teamid": "30160", + "teamcode": "RAT", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "DH/2B", + "PA": 5, + "AB": 5, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 0, + "SO": 1, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "77", + "AB": "65", + "H": "32", + "BB": "6", + "DOUBLE": "8", + "TRIPLE": "1", + "HR": "1", + "SF": "1", + "HBP": "5" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": 2, + "A": 3, + "E": 0 + }, + "1030": { + "name": "KäCK Albin", + "firstname": "Albin", + "lastname": "KäCK", + "playerid": "436623", + "teamid": "30160", + "teamcode": "RAT", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "LF/RF", + "PA": 5, + "AB": 5, + "R": 1, + "H": 2, + "RBI": 0, + "BB": 0, + "SO": 1, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "81", + "AB": "71", + "H": "25", + "BB": "7", + "DOUBLE": "5", + "TRIPLE": "3", + "HR": "1", + "SF": "1", + "HBP": "2" + }, + "LOB": 0, + "AVG": ".400", + "OBP": ".400", + "SLG": ".400", + "OPS": ".800", + "PO": 2, + "A": 0, + "E": 0 + }, + "1040": { + "name": "JOHNSON Daniel", + "firstname": "Daniel", + "lastname": "JOHNSON", + "playerid": "436624", + "teamid": "30160", + "teamcode": "RAT", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "SS", + "PA": 5, + "AB": 4, + "R": 2, + "H": 1, + "RBI": 0, + "BB": 0, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 1, + "SB": 1, + "CS": 0, + "SEASON": { + "PA": "99", + "AB": "80", + "H": "35", + "BB": "10", + "DOUBLE": "10", + "TRIPLE": "3", + "HR": "0", + "SF": "3", + "HBP": "4" + }, + "LOB": 0, + "AVG": ".250", + "OBP": ".400", + "SLG": ".250", + "OPS": ".650", + "PO": 1, + "A": 2, + "E": 1 + }, + "1050": { + "name": "BöRJES Sam", + "firstname": "Sam", + "lastname": "BöRJES", + "playerid": "436628", + "teamid": "30160", + "teamcode": "RAT", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "3B/P/3B", + "PA": 5, + "AB": 3, + "R": 1, + "H": 2, + "RBI": 4, + "BB": 1, + "SO": 0, + "DOUBLE": 1, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 1, + "SB": 1, + "CS": 0, + "SEASON": { + "PA": "78", + "AB": "63", + "H": "23", + "BB": "10", + "DOUBLE": "6", + "TRIPLE": "0", + "HR": "1", + "SF": "1", + "HBP": "2" + }, + "LOB": 0, + "AVG": ".667", + "OBP": ".800", + "SLG": "1.000", + "OPS": "1.800", + "PO": 1, + "A": 3, + "E": 0 + }, + "1060": { + "name": "HöGLUND Kalle", + "firstname": "Kalle", + "lastname": "HöGLUND", + "playerid": "436620", + "teamid": "30160", + "teamcode": "RAT", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "1B", + "PA": 5, + "AB": 5, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 0, + "SO": 1, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "33", + "AB": "27", + "H": "8", + "BB": "3", + "DOUBLE": "2", + "TRIPLE": "1", + "HR": "0", + "SF": "1", + "HBP": "2" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": 8, + "A": 2, + "E": 0 + }, + "1070": { + "name": "JOHNSON Jan-Mikael", + "firstname": "Jan-Mikael", + "lastname": "JOHNSON", + "playerid": "436614", + "teamid": "30160", + "teamcode": "RAT", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "RF/CF", + "PA": 5, + "AB": 5, + "R": 1, + "H": 1, + "RBI": 1, + "BB": 0, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "70", + "AB": "59", + "H": "18", + "BB": "9", + "DOUBLE": "4", + "TRIPLE": "1", + "HR": "0", + "SF": "2", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".200", + "OBP": ".200", + "SLG": ".200", + "OPS": ".400", + "PO": 1, + "A": 0, + "E": 0 + }, + "1080": { + "name": "BERG Teo", + "firstname": "Teo", + "lastname": "BERG", + "playerid": "436611", + "teamid": "30160", + "teamcode": "RAT", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "2B", + "PA": 1, + "AB": 1, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 0, + "SO": 1, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "23", + "AB": "17", + "H": "3", + "BB": "6", + "DOUBLE": "1", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": 2, + "A": 1, + "E": 0 + }, + "1081": { + "name": "WILSON Dustin", + "firstname": "Dustin", + "lastname": "WILSON", + "playerid": "436627", + "teamid": "30160", + "teamcode": "RAT", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "PH", + "PA": 1, + "AB": 1, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 0, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "69", + "AB": "58", + "H": "12", + "BB": "9", + "DOUBLE": "3", + "TRIPLE": "1", + "HR": "1", + "SF": "1", + "HBP": "1" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": 0, + "A": 0, + "E": 0 + }, + "1082": { + "name": "LAUFKE Wilhelm", + "firstname": "Wilhelm", + "lastname": "LAUFKE", + "playerid": "436618", + "teamid": "30160", + "teamcode": "RAT", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "2B", + "PA": 0, + "AB": 0, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 0, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "15", + "AB": "13", + "H": "3", + "BB": "1", + "DOUBLE": "1", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "1" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": 0, + "A": 0, + "E": 0 + }, + "1083": { + "name": "JERFSTEN Olle", + "firstname": "Olle", + "lastname": "JERFSTEN", + "playerid": "436617", + "teamid": "30160", + "teamcode": "RAT", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "3B", + "PA": 2, + "AB": 2, + "R": 0, + "H": 1, + "RBI": 1, + "BB": 0, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "67", + "AB": "52", + "H": "15", + "BB": "10", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "1", + "HBP": "4" + }, + "LOB": 0, + "AVG": ".500", + "OBP": ".500", + "SLG": ".500", + "OPS": "1.000", + "PO": 0, + "A": 0, + "E": 0 + }, + "1084": { + "name": "STOR Anders", + "firstname": "Anders", + "lastname": "STOR", + "playerid": "436621", + "teamid": "30160", + "teamcode": "RAT", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "LF", + "PA": 0, + "AB": 0, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 0, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "26", + "AB": "21", + "H": "2", + "BB": "5", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": 0, + "A": 0, + "E": 0 + }, + "1090": { + "name": "NORDSELL Elias", + "firstname": "Elias", + "lastname": "NORDSELL", + "playerid": "436612", + "teamid": "30160", + "teamcode": "RAT", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "C", + "PA": 4, + "AB": 4, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 0, + "SO": 1, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "62", + "AB": "55", + "H": "18", + "BB": "4", + "DOUBLE": "0", + "TRIPLE": "2", + "HR": "0", + "SF": "0", + "HBP": "3" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": 8, + "A": 0, + "E": 0 + }, + "1901": { + "name": "JOHNSON Benjamin", + "firstname": "Benjamin", + "lastname": "JOHNSON", + "playerid": "436615", + "teamid": "30160", + "teamcode": "RAT", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "PITCHIP": "5.0", + "PITCHER": 2, + "PITCHR": 2, + "PITCHH": 4, + "PITCHBB": 0, + "PITCHSO": 4, + "PITCHES": 52, + "STRIKES": 43, + "PITCHOUTS": 15, + "SEASON": { + "PITCHER": "3", + "PITCHOUTS": "39", + "PITCHBB": "2", + "PITCHSO": "11" + }, + "ERA": "4.00", + "PO": 0, + "A": 0, + "E": 0 + }, + "1902": { + "name": "BöRJES Sam", + "firstname": "Sam", + "lastname": "BöRJES", + "playerid": "436628", + "teamid": "30160", + "teamcode": "RAT", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "PITCHIP": "2.0", + "PITCHER": 3, + "PITCHR": 3, + "PITCHH": 4, + "PITCHBB": 2, + "PITCHSO": 2, + "PITCHES": 51, + "STRIKES": 32, + "PITCHOUTS": 6, + "SEASON": { + "PITCHER": "11", + "PITCHOUTS": "86", + "PITCHBB": "19", + "PITCHSO": "43" + }, + "ERA": "15.00", + "PO": 0, + "A": 0, + "E": 0 + }, + "1903": { + "name": "JOHNSON Joel", + "firstname": "Joel", + "lastname": "JOHNSON", + "playerid": "436619", + "teamid": "30160", + "teamcode": "RAT", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "PITCHIP": "2.0", + "PITCHER": 1, + "PITCHR": 1, + "PITCHH": 1, + "PITCHBB": 2, + "PITCHSO": 2, + "PITCHES": 40, + "STRIKES": 25, + "PITCHOUTS": 6, + "SEASON": { + "PITCHER": "7", + "PITCHOUTS": "76", + "PITCHBB": "6", + "PITCHSO": "32" + }, + "ERA": "5.00", + "PO": 0, + "A": 0, + "E": 0 + }, + "2010": { + "name": "TAKAHASHI Koki", + "firstname": "Koki", + "lastname": "TAKAHASHI", + "playerid": "443306", + "teamid": "30156", + "teamcode": "KGA", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "2B", + "PA": 5, + "AB": 5, + "R": 1, + "H": 2, + "RBI": 0, + "BB": 0, + "SO": 2, + "DOUBLE": 1, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "91", + "AB": "79", + "H": "34", + "BB": "8", + "DOUBLE": "12", + "TRIPLE": "1", + "HR": "1", + "SF": "1", + "HBP": "3" + }, + "LOB": 0, + "AVG": ".400", + "OBP": ".400", + "SLG": ".600", + "OPS": "1.000", + "PO": 0, + "A": 8, + "E": 1 + }, + "2020": { + "name": "ÖIJEN Gustav", + "firstname": "Gustav", + "lastname": "ÖIJEN", + "playerid": "416632", + "teamid": "30156", + "teamcode": "KGA", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/1d2654ca-af96-c0d8-cca1-deaf225a689e.jpg", + "inplay": "", + "reentry": 0, + "POS": "RF/CF", + "PA": 5, + "AB": 5, + "R": 0, + "H": 1, + "RBI": 0, + "BB": 0, + "SO": 3, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "78", + "AB": "63", + "H": "14", + "BB": "13", + "DOUBLE": "4", + "TRIPLE": "1", + "HR": "1", + "SF": "1", + "HBP": "1" + }, + "LOB": 0, + "AVG": ".200", + "OBP": ".200", + "SLG": ".200", + "OPS": ".400", + "PO": 3, + "A": 0, + "E": 0 + }, + "2030": { + "name": "LINDKVIST Jakob", + "firstname": "Jakob", + "lastname": "LINDKVIST", + "playerid": "416624", + "teamid": "30156", + "teamcode": "KGA", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/fc7f682b-b37d-5d51-98bb-920f1e9b4e5f.jpg", + "inplay": "", + "reentry": 0, + "POS": "C", + "PA": 5, + "AB": 4, + "R": 2, + "H": 1, + "RBI": 1, + "BB": 1, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 1, + "CS": 0, + "SEASON": { + "PA": "92", + "AB": "77", + "H": "34", + "BB": "12", + "DOUBLE": "4", + "TRIPLE": "3", + "HR": "4", + "SF": "1", + "HBP": "2" + }, + "LOB": 0, + "AVG": ".250", + "OBP": ".400", + "SLG": ".250", + "OPS": ".650", + "PO": 6, + "A": 0, + "E": 0 + }, + "2040": { + "name": "STEIGERT Samuel", + "firstname": "Samuel", + "lastname": "STEIGERT", + "playerid": "451495", + "teamid": "30156", + "teamcode": "KGA", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "P", + "PA": 5, + "AB": 5, + "R": 1, + "H": 1, + "RBI": 0, + "BB": 0, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "75", + "AB": "58", + "H": "23", + "BB": "15", + "DOUBLE": "4", + "TRIPLE": "0", + "HR": "3", + "SF": "2", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".200", + "OBP": ".200", + "SLG": ".200", + "OPS": ".400", + "PO": 0, + "A": 0, + "E": 0 + }, + "2050": { + "name": "CALSON Anton", + "firstname": "Anton", + "lastname": "CALSON", + "playerid": "416614", + "teamid": "30156", + "teamcode": "KGA", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/d671cd96-3d64-1d06-8cab-608430c99b64.jpg", + "inplay": "", + "reentry": 0, + "POS": "1B", + "PA": 4, + "AB": 3, + "R": 1, + "H": 2, + "RBI": 1, + "BB": 1, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 1, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "66", + "AB": "57", + "H": "20", + "BB": "8", + "DOUBLE": "3", + "TRIPLE": "0", + "HR": "1", + "SF": "1", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".667", + "OBP": ".750", + "SLG": "1.333", + "OPS": "2.083", + "PO": 16, + "A": 0, + "E": 0 + }, + "2060": { + "name": "FAGERLUND Emil", + "firstname": "Emil", + "lastname": "FAGERLUND", + "playerid": "416619", + "teamid": "30156", + "teamcode": "KGA", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/dced9b18-fd9a-d324-d80e-e30e6ae1a6c2.jpg", + "inplay": "", + "reentry": 0, + "POS": "3B", + "PA": 4, + "AB": 3, + "R": 0, + "H": 1, + "RBI": 1, + "BB": 1, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 1, + "CS": 0, + "SEASON": { + "PA": "37", + "AB": "32", + "H": "13", + "BB": "3", + "DOUBLE": "2", + "TRIPLE": "1", + "HR": "0", + "SF": "0", + "HBP": "1" + }, + "LOB": 0, + "AVG": ".333", + "OBP": ".500", + "SLG": ".333", + "OPS": ".833", + "PO": 0, + "A": 3, + "E": 0 + }, + "2070": { + "name": "BRODDESSON Alexander", + "firstname": "Alexander", + "lastname": "BRODDESSON", + "playerid": "416613", + "teamid": "30156", + "teamcode": "KGA", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/4319e21e-1c29-6a8b-fb08-afe0a7117fed.jpg", + "inplay": "", + "reentry": 0, + "POS": "LF/RF", + "PA": 4, + "AB": 4, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 0, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "89", + "AB": "76", + "H": "17", + "BB": "8", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "1", + "HBP": "4" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": 3, + "A": 0, + "E": 0 + }, + "2080": { + "name": "GRYTH Calle", + "firstname": "Calle", + "lastname": "GRYTH", + "playerid": "416621", + "teamid": "30156", + "teamcode": "KGA", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/0485b54a-310c-ef02-bdab-8ac4826b021d.jpg", + "inplay": "", + "reentry": 0, + "POS": "CF", + "PA": 3, + "AB": 3, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 0, + "SO": 1, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "27", + "AB": "25", + "H": "3", + "BB": "2", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": 1, + "A": 0, + "E": 0 + }, + "2081": { + "name": "BJURSTRöM BLAD Alex", + "firstname": "Alex", + "lastname": "BJURSTRöM BLAD", + "playerid": "416611", + "teamid": "30156", + "teamcode": "KGA", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/9512f6ec-2725-2672-d7f1-999eeaef63ab.jpg", + "inplay": "", + "reentry": 0, + "POS": "PH/LF", + "PA": 1, + "AB": 1, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 0, + "SO": 1, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "53", + "AB": "47", + "H": "11", + "BB": "3", + "DOUBLE": "1", + "TRIPLE": "0", + "HR": "0", + "SF": "1", + "HBP": "2" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": 0, + "A": 0, + "E": 0 + }, + "2090": { + "name": "WESTERLUND Oscar", + "firstname": "Oscar", + "lastname": "WESTERLUND", + "playerid": "416631", + "teamid": "30156", + "teamcode": "KGA", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "SS", + "PA": 4, + "AB": 3, + "R": 1, + "H": 1, + "RBI": 0, + "BB": 1, + "SO": 1, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 1, + "CS": 0, + "SEASON": { + "PA": "36", + "AB": "30", + "H": "5", + "BB": "4", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "1" + }, + "LOB": 0, + "AVG": ".333", + "OBP": ".500", + "SLG": ".333", + "OPS": ".833", + "PO": 1, + "A": 4, + "E": 0 + }, + "2901": { + "name": "STEIGERT Samuel", + "firstname": "Samuel", + "lastname": "STEIGERT", + "playerid": "451495", + "teamid": "30156", + "teamcode": "KGA", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "PITCHIP": "10.0", + "PITCHER": 6, + "PITCHR": 6, + "PITCHH": 8, + "PITCHBB": 1, + "PITCHSO": 7, + "PITCHES": 133, + "STRIKES": 93, + "PITCHOUTS": 30, + "SEASON": { + "PITCHER": "15", + "PITCHOUTS": "146", + "PITCHBB": "1", + "PITCHSO": "48" + }, + "ERA": "6.00", + "PO": 0, + "A": 0, + "E": 0 + } + }, + "linescore": { + "awayruns": [ + null, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 0, + 0 + ], + "awaytotals": { + "R": 6, + "H": 8, + "E": 1, + "LOB": 8 + }, + "homeruns": [ + null, + 0, + 1, + 1, + 0, + 0, + 2, + 0, + 1, + 1 + ], + "hometotals": { + "R": 6, + "H": 9, + "E": 1, + "LOB": 7 + } + }, + "animation": { + "batter": 0, + "strike": 0, + "ball": 0 + }, + "playdata": [ + { + "t": "1724507275535", + "p": "1903", + "n": "Foul. ", + "b": "2050", + "a": "84", + "r1": "6", + "r2": "0", + "i": "10", + "x": "18", + "y": "12", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724507124374", + "p": "1903", + "n": "-", + "b": "2040", + "a": "84", + "r1": "0", + "r2": "28", + "i": "10", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724507124374", + "p": 0, + "n": "***BOT 10", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "10", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1724507123932", + "p": "2901", + "n": "Middle of the 10th
0 runs, 2 lob", + "b": "1084", + "a": "84", + "r1": "0", + "r2": "0", + "i": "10", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724507120482", + "p": "2901", + "n": "JOHNSON Jan-Mikael flies out to right field. F9. 3 out. ", + "b": "1070", + "a": "83", + "r1": "9", + "r2": "4", + "i": "10", + "x": "7", + "y": "55", + "hd": "30", + "hp": "226", + "hl": "35" + }, + { + "t": "1724507086718", + "p": "2901", + "n": "Swinging Strike 2. ", + "b": "1070", + "a": "83", + "r1": "5", + "r2": "0", + "i": "10", + "x": "-17", + "y": "60", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724507063098", + "p": "2901", + "n": "Foul. ", + "b": "1070", + "a": "83", + "r1": "6", + "r2": "0", + "i": "10", + "x": "19", + "y": "13", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724507026581", + "p": "2901", + "n": "Ball 1. ", + "b": "1070", + "a": "83", + "r1": "2", + "r2": "0", + "i": "10", + "x": "34", + "y": "43", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506980631", + "p": "2901", + "n": "HöGLUND Kalle grounds out 6-3. 2 out. ", + "b": "1060", + "a": "82", + "r1": "9", + "r2": "3", + "i": "10", + "x": "-14", + "y": "25", + "hd": "-15", + "hp": "113", + "hl": "0" + }, + { + "t": "1724506969702", + "p": "2901", + "n": "Ball 1. ", + "b": "1060", + "a": "82", + "r1": "2", + "r2": "0", + "i": "10", + "x": "30", + "y": "65", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506928317", + "p": "2901", + "n": "BöRJES Sam is intentionally walked. BöRJES Sam to 2nd on stolen base. ", + "b": "1050", + "a": "81", + "r1": "1", + "r2": "14", + "i": "10", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506892213", + "p": "2901", + "n": "JOHNSON Daniel grounds out 6-3. KäCK Albin to 3rd. 1 out. ", + "b": "1040", + "a": "80", + "r1": "9", + "r2": "3", + "i": "10", + "x": "-17", + "y": "14", + "hd": "-15", + "hp": "113", + "hl": "0" + }, + { + "t": "1724506842597", + "p": "2901", + "n": "Foul. ", + "b": "1040", + "a": "80", + "r1": "6", + "r2": "0", + "i": "10", + "x": "-16", + "y": "59", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": 0, + "p": 0, + "n": "Defensive Change: #6 BJURSTRöM BLAD to LF", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 10 + }, + { + "t": 0, + "p": 0, + "n": "Defensive Change: #44 BRODDESSON to RF", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 10 + }, + { + "t": 0, + "p": 0, + "n": "Defensive Change: #13 ÖIJEN to CF", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 10 + }, + { + "t": "1724506627236", + "p": "2901", + "n": "-", + "b": "1030", + "a": "80", + "r1": "0", + "r2": "28", + "i": "10", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506627236", + "p": 0, + "n": "***TOP 10", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "10", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1724506626811", + "p": "1903", + "n": "End of the 9th
1 runs, 2 lob", + "b": "2050", + "a": "80", + "r1": "0", + "r2": "0", + "i": "9", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506621077", + "p": "1903", + "n": "STEIGERT Samuel grounds out 6-3. 3 out. ", + "b": "2040", + "a": "79", + "r1": "9", + "r2": "3", + "i": "9", + "x": "-14", + "y": "13", + "hd": "-15", + "hp": "113", + "hl": "0" + }, + { + "t": "1724506585247", + "p": "1903", + "n": "Foul. ", + "b": "2040", + "a": "79", + "r1": "6", + "r2": "0", + "i": "9", + "x": "10", + "y": "41", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506564077", + "p": "1903", + "n": "Called Strike 1. ", + "b": "2040", + "a": "79", + "r1": "4", + "r2": "0", + "i": "9", + "x": "15", + "y": "61", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506540556", + "p": "1903", + "n": "LINDKVIST Jakob reaches on fielding error. E6. WESTERLUND Oscar scores. TAKAHASHI Koki to 3rd. ", + "b": "2030", + "a": "78", + "r1": "9", + "r2": "12", + "i": "9", + "x": "-7", + "y": "24", + "hd": "-15", + "hp": "113", + "hl": "0" + }, + { + "t": "1724506464476", + "p": "1903", + "n": "Ball 2. ", + "b": "2030", + "a": "78", + "r1": "2", + "r2": "0", + "i": "9", + "x": "36", + "y": "37", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506438213", + "p": "1903", + "n": "Foul. ", + "b": "2030", + "a": "78", + "r1": "6", + "r2": "0", + "i": "9", + "x": "7", + "y": "23", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506342159", + "p": "1903", + "n": "Called Strike 2. ", + "b": "2030", + "a": "78", + "r1": "4", + "r2": "0", + "i": "9", + "x": "-14", + "y": "23", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506325260", + "p": "1903", + "n": "Called Strike 1. ", + "b": "2030", + "a": "78", + "r1": "4", + "r2": "0", + "i": "9", + "x": "11", + "y": "45", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506281742", + "p": "1903", + "n": "Ball 1. ", + "b": "2030", + "a": "78", + "r1": "2", + "r2": "0", + "i": "9", + "x": "39", + "y": "24", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506245978", + "p": "1903", + "n": "ÖIJEN Gustav strikes out swinging. 2 out. ", + "b": "2020", + "a": "77", + "r1": "5", + "r2": "2", + "i": "9", + "x": "-11", + "y": "50", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506223425", + "p": "1903", + "n": "Swinging Strike 2. ", + "b": "2020", + "a": "77", + "r1": "5", + "r2": "0", + "i": "9", + "x": "-5", + "y": "57", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506197326", + "p": "1903", + "n": "Swinging Strike 1. ", + "b": "2020", + "a": "77", + "r1": "5", + "r2": "0", + "i": "9", + "x": "-9", + "y": "31", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506142357", + "p": "1903", + "n": "TAKAHASHI Koki singles to left center. WESTERLUND Oscar to 2nd. ", + "b": "2010", + "a": "76", + "r1": "9", + "r2": "18", + "i": "9", + "x": "-20", + "y": "61", + "hd": "-10", + "hp": "179", + "hl": "20" + }, + { + "t": "1724506116424", + "p": "1903", + "n": "Ball 1. ", + "b": "2010", + "a": "76", + "r1": "2", + "r2": "0", + "i": "9", + "x": "31", + "y": "63", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506099808", + "p": "1903", + "n": "Called Strike 2. ", + "b": "2010", + "a": "76", + "r1": "4", + "r2": "0", + "i": "9", + "x": "-14", + "y": "41", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506069340", + "p": "1903", + "n": "Called Strike 1. ", + "b": "2010", + "a": "76", + "r1": "4", + "r2": "0", + "i": "9", + "x": "7", + "y": "12", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506041173", + "p": "1903", + "n": "WESTERLUND Oscar walks. ", + "b": "2090", + "a": "75", + "r1": "2", + "r2": "13", + "i": "9", + "x": "33", + "y": "24", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506029074", + "p": "1903", + "n": "Ball 3. ", + "b": "2090", + "a": "75", + "r1": "2", + "r2": "0", + "i": "9", + "x": "34", + "y": "44", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724506016889", + "p": "1903", + "n": "Ball 2. ", + "b": "2090", + "a": "75", + "r1": "2", + "r2": "0", + "i": "9", + "x": "35", + "y": "32", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505988189", + "p": "1903", + "n": "Called Strike 2. ", + "b": "2090", + "a": "75", + "r1": "4", + "r2": "0", + "i": "9", + "x": "12", + "y": "55", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505976840", + "p": "1903", + "n": "Ball 1. ", + "b": "2090", + "a": "75", + "r1": "2", + "r2": "0", + "i": "9", + "x": "37", + "y": "65", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505964255", + "p": "1903", + "n": "Called Strike 1. ", + "b": "2090", + "a": "75", + "r1": "4", + "r2": "0", + "i": "9", + "x": "-7", + "y": "25", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505944090", + "p": "1903", + "n": "BJURSTRöM BLAD Alex strikes out looking. 1 out. ", + "b": "2081", + "a": "74", + "r1": "4", + "r2": "1", + "i": "9", + "x": "16", + "y": "23", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505929505", + "p": "1903", + "n": "Swinging Strike 2. ", + "b": "2081", + "a": "74", + "r1": "5", + "r2": "0", + "i": "9", + "x": "-15", + "y": "47", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505919139", + "p": "1903", + "n": "Swinging Strike 1. ", + "b": "2081", + "a": "74", + "r1": "5", + "r2": "0", + "i": "9", + "x": "8", + "y": "41", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": 0, + "p": 0, + "n": "Pinch Hitter: #6 BJURSTRöM BLAD for #4 GRYTH", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 9 + }, + { + "t": "1724505919139", + "p": 0, + "n": "***BOT 9", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "9", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1724505792486", + "p": "2901", + "n": "Middle of the 9th
0 runs, 0 lob", + "b": "1040", + "a": "74", + "r1": "0", + "r2": "0", + "i": "9", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505791323", + "p": "2901", + "n": "KäCK Albin strikes out swinging. 3 out. ", + "b": "1030", + "a": "73", + "r1": "5", + "r2": "2", + "i": "9", + "x": "17", + "y": "54", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505770432", + "p": "2901", + "n": "Ball 1. ", + "b": "1030", + "a": "73", + "r1": "2", + "r2": "0", + "i": "9", + "x": "36", + "y": "57", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505751555", + "p": "2901", + "n": "Foul. ", + "b": "1030", + "a": "73", + "r1": "6", + "r2": "0", + "i": "9", + "x": "-16", + "y": "38", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505734811", + "p": "2901", + "n": "Swinging Strike 1. ", + "b": "1030", + "a": "73", + "r1": "5", + "r2": "0", + "i": "9", + "x": "-19", + "y": "54", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505714616", + "p": "2901", + "n": "JOHNSON Benjamin grounds out 4-3. 2 out. ", + "b": "1020", + "a": "72", + "r1": "9", + "r2": "3", + "i": "9", + "x": "7", + "y": "16", + "hd": "15", + "hp": "113", + "hl": "0" + }, + { + "t": "1724505686138", + "p": "2901", + "n": "Foul. ", + "b": "1020", + "a": "72", + "r1": "6", + "r2": "0", + "i": "9", + "x": "-7", + "y": "24", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505666356", + "p": "2901", + "n": "Foul. ", + "b": "1020", + "a": "72", + "r1": "6", + "r2": "0", + "i": "9", + "x": "-4", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505634202", + "p": "2901", + "n": "JOHNSON Joel grounds out 5-3. 1 out. ", + "b": "1010", + "a": "71", + "r1": "9", + "r2": "3", + "i": "9", + "x": "-19", + "y": "25", + "hd": "-35", + "hp": "94", + "hl": "0" + }, + { + "t": "1724505610220", + "p": "2901", + "n": "Swinging Strike 1. ", + "b": "1010", + "a": "71", + "r1": "5", + "r2": "0", + "i": "9", + "x": "14", + "y": "44", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505610220", + "p": 0, + "n": "***TOP 9", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "9", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1724505486918", + "p": "1903", + "n": "End of the 8th
1 runs, 1 lob", + "b": "2080", + "a": "71", + "r1": "0", + "r2": "0", + "i": "8", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505481318", + "p": "1903", + "n": "BRODDESSON Alexander grounds out 3-1. 3 out. ", + "b": "2070", + "a": "70", + "r1": "9", + "r2": "3", + "i": "8", + "x": "9", + "y": "27", + "hd": "35", + "hp": "94", + "hl": "0" + }, + { + "t": "1724505451702", + "p": "1903", + "n": "Ball 2. LINDKVIST Jakob scores on stolen base. FAGERLUND Emil to 2nd on stolen base. ", + "b": "2070", + "a": "70", + "r1": "2", + "r2": "0", + "i": "8", + "x": "31", + "y": "63", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505396186", + "p": "1903", + "n": "Ball 1. ", + "b": "2070", + "a": "70", + "r1": "2", + "r2": "0", + "i": "8", + "x": "35", + "y": "65", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505347863", + "p": "1903", + "n": "FAGERLUND Emil reaches on fielders choice. LINDKVIST Jakob to 3rd. CALSON Anton out at 2nd 46. 2 out. ", + "b": "2060", + "a": "69", + "r1": "9", + "r2": "11", + "i": "8", + "x": "14", + "y": "12", + "hd": "15", + "hp": "113", + "hl": "0" + }, + { + "t": "1724505318371", + "p": "1903", + "n": "Called Strike 1. ", + "b": "2060", + "a": "69", + "r1": "4", + "r2": "0", + "i": "8", + "x": "16", + "y": "42", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505295867", + "p": "1903", + "n": "Ball 1. ", + "b": "2060", + "a": "69", + "r1": "2", + "r2": "0", + "i": "8", + "x": "35", + "y": "17", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505257779", + "p": "1903", + "n": "CALSON Anton walks. LINDKVIST Jakob to 2nd. ", + "b": "2050", + "a": "68", + "r1": "2", + "r2": "13", + "i": "8", + "x": "38", + "y": "7", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505223900", + "p": "1903", + "n": "Ball 3. ", + "b": "2050", + "a": "68", + "r1": "2", + "r2": "0", + "i": "8", + "x": "36", + "y": "28", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505203399", + "p": "1903", + "n": "Ball 2. ", + "b": "2050", + "a": "68", + "r1": "2", + "r2": "0", + "i": "8", + "x": "32", + "y": "70", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505188566", + "p": "1903", + "n": "Ball 1. ", + "b": "2050", + "a": "68", + "r1": "2", + "r2": "0", + "i": "8", + "x": "39", + "y": "9", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505158877", + "p": "1903", + "n": "STEIGERT Samuel flies out. L5. 1 out. ", + "b": "2040", + "a": "67", + "r1": "9", + "r2": "4", + "i": "8", + "x": "-19", + "y": "56", + "hd": "-35", + "hp": "94", + "hl": "20" + }, + { + "t": "1724505138633", + "p": "1903", + "n": "Swinging Strike 2. ", + "b": "2040", + "a": "67", + "r1": "5", + "r2": "0", + "i": "8", + "x": "-15", + "y": "12", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505121533", + "p": "1903", + "n": "Ball 1. ", + "b": "2040", + "a": "67", + "r1": "2", + "r2": "0", + "i": "8", + "x": "35", + "y": "38", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724505103898", + "p": "1903", + "n": "Foul. ", + "b": "2040", + "a": "67", + "r1": "6", + "r2": "0", + "i": "8", + "x": "11", + "y": "44", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": 0, + "p": 0, + "n": "Pitching Change: #13 JOHNSON for #33 BöRJES", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 8 + }, + { + "t": 0, + "p": 0, + "n": "Defensive Change: #19 KäCK to RF", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 8 + }, + { + "t": 0, + "p": 0, + "n": "Defensive Change: #5 JOHNSON to CF", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 8 + }, + { + "t": 0, + "p": 0, + "n": "Defensive Change: #33 BöRJES to 3B", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 8 + }, + { + "t": 0, + "p": 0, + "n": "Defensive Substitution: #15 STOR for #9 JERFSTEN at LF", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 8 + }, + { + "t": "1724504901313", + "p": "1902", + "n": "LINDKVIST Jakob singles to left center. ", + "b": "2030", + "a": "66", + "r1": "9", + "r2": "18", + "i": "8", + "x": "17", + "y": "53", + "hd": "-10", + "hp": "179", + "hl": "20" + }, + { + "t": "1724504877233", + "p": "1902", + "n": "Foul. ", + "b": "2030", + "a": "66", + "r1": "6", + "r2": "0", + "i": "8", + "x": "1", + "y": "42", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504862763", + "p": "1902", + "n": "Foul. ", + "b": "2030", + "a": "66", + "r1": "6", + "r2": "0", + "i": "8", + "x": "-15", + "y": "51", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504850746", + "p": "1902", + "n": "Ball 3. ", + "b": "2030", + "a": "66", + "r1": "2", + "r2": "0", + "i": "8", + "x": "38", + "y": "47", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504837596", + "p": "1902", + "n": "Called Strike 2. ", + "b": "2030", + "a": "66", + "r1": "4", + "r2": "0", + "i": "8", + "x": "-11", + "y": "14", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504825061", + "p": "1902", + "n": "Ball 2. ", + "b": "2030", + "a": "66", + "r1": "2", + "r2": "0", + "i": "8", + "x": "33", + "y": "69", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504814179", + "p": "1902", + "n": "Ball 1. ", + "b": "2030", + "a": "66", + "r1": "2", + "r2": "0", + "i": "8", + "x": "38", + "y": "5", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504798078", + "p": "1902", + "n": "Swinging Strike 1. ", + "b": "2030", + "a": "66", + "r1": "5", + "r2": "0", + "i": "8", + "x": "4", + "y": "21", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504798078", + "p": 0, + "n": "***BOT 8", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "8", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1724504684043", + "p": "2901", + "n": "Middle of the 8th
4 runs, 1 lob", + "b": "1010", + "a": "66", + "r1": "0", + "r2": "0", + "i": "8", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504676128", + "p": "2901", + "n": "NORDSELL Elias reaches on fielders choice. JERFSTEN Olle out at 2nd 6. 3 out. ", + "b": "1090", + "a": "65", + "r1": "9", + "r2": "11", + "i": "8", + "x": "-14", + "y": "27", + "hd": "-15", + "hp": "113", + "hl": "0" + }, + { + "t": "1724504653844", + "p": "2901", + "n": "Ball 1. ", + "b": "1090", + "a": "65", + "r1": "2", + "r2": "0", + "i": "8", + "x": "37", + "y": "69", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504616743", + "p": "2901", + "n": "JERFSTEN Olle singles to right field. JOHNSON Jan-Mikael scores. 1 RBI. ", + "b": "1083", + "a": "64", + "r1": "9", + "r2": "18", + "i": "8", + "x": "0", + "y": "62", + "hd": "31", + "hp": "179", + "hl": "20" + }, + { + "t": "1724504591893", + "p": "2901", + "n": "Ball 3. ", + "b": "1083", + "a": "64", + "r1": "2", + "r2": "0", + "i": "8", + "x": "36", + "y": "45", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504571627", + "p": "2901", + "n": "Ball 2. ", + "b": "1083", + "a": "64", + "r1": "2", + "r2": "0", + "i": "8", + "x": "31", + "y": "52", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504548898", + "p": "2901", + "n": "Foul. ", + "b": "1083", + "a": "64", + "r1": "6", + "r2": "0", + "i": "8", + "x": "3", + "y": "52", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504529592", + "p": "2901", + "n": "Ball 1. ", + "b": "1083", + "a": "64", + "r1": "2", + "r2": "0", + "i": "8", + "x": "38", + "y": "56", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504453525", + "p": "2901", + "n": "JOHNSON Jan-Mikael singles to left center. BöRJES Sam scores. JOHNSON Jan-Mikael to 2nd on throw. 1 RBI. ", + "b": "1070", + "a": "63", + "r1": "9", + "r2": "18", + "i": "8", + "x": "15", + "y": "60", + "hd": "-10", + "hp": "179", + "hl": "20" + }, + { + "t": "1724504413809", + "p": "2901", + "n": "Ball 1. ", + "b": "1070", + "a": "63", + "r1": "2", + "r2": "0", + "i": "8", + "x": "35", + "y": "1", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504391675", + "p": "2901", + "n": "Foul. ", + "b": "1070", + "a": "63", + "r1": "6", + "r2": "0", + "i": "8", + "x": "-6", + "y": "48", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504369724", + "p": "2901", + "n": "Foul. ", + "b": "1070", + "a": "63", + "r1": "6", + "r2": "0", + "i": "8", + "x": "11", + "y": "47", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504342689", + "p": "2901", + "n": "HöGLUND Kalle strikes out swinging. 2 out. ", + "b": "1060", + "a": "62", + "r1": "5", + "r2": "2", + "i": "8", + "x": "-17", + "y": "17", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504316242", + "p": "2901", + "n": "Ball 1. ", + "b": "1060", + "a": "62", + "r1": "2", + "r2": "0", + "i": "8", + "x": "31", + "y": "48", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504287474", + "p": "2901", + "n": "Foul. ", + "b": "1060", + "a": "62", + "r1": "6", + "r2": "0", + "i": "8", + "x": "17", + "y": "47", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504260241", + "p": "2901", + "n": "Foul. ", + "b": "1060", + "a": "62", + "r1": "6", + "r2": "0", + "i": "8", + "x": "13", + "y": "25", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504220557", + "p": "2901", + "n": "BöRJES Sam reaches on throwing error. E4T. KäCK Albin scores. JOHNSON Daniel scores. BöRJES Sam to 2nd. 2 RBI. ", + "b": "1050", + "a": "61", + "r1": "9", + "r2": "12", + "i": "8", + "x": "12", + "y": "25", + "hd": "15", + "hp": "113", + "hl": "0" + }, + { + "t": "1724504179638", + "p": "2901", + "n": "Ball 1. ", + "b": "1050", + "a": "61", + "r1": "2", + "r2": "0", + "i": "8", + "x": "38", + "y": "63", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504122056", + "p": "2901", + "n": "JOHNSON Daniel singles to center field. KäCK Albin to 2nd. ", + "b": "1040", + "a": "60", + "r1": "9", + "r2": "18", + "i": "8", + "x": "-7", + "y": "57", + "hd": "5", + "hp": "179", + "hl": "20" + }, + { + "t": "1724504087621", + "p": "2901", + "n": "KäCK Albin singles to right field. ", + "b": "1030", + "a": "59", + "r1": "9", + "r2": "18", + "i": "8", + "x": "18", + "y": "52", + "hd": "34", + "hp": "203", + "hl": "20" + }, + { + "t": "1724504066537", + "p": "2901", + "n": "Swinging Strike 1. ", + "b": "1030", + "a": "59", + "r1": "5", + "r2": "0", + "i": "8", + "x": "-1", + "y": "30", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504058473", + "p": "2901", + "n": "Ball 1. ", + "b": "1030", + "a": "59", + "r1": "2", + "r2": "0", + "i": "8", + "x": "37", + "y": "56", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504022269", + "p": "2901", + "n": "JOHNSON Benjamin flies out to right field. F9. 1 out. ", + "b": "1020", + "a": "58", + "r1": "9", + "r2": "4", + "i": "8", + "x": "4", + "y": "63", + "hd": "30", + "hp": "226", + "hl": "35" + }, + { + "t": "1724504002205", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1020", + "a": "58", + "r1": "4", + "r2": "0", + "i": "8", + "x": "17", + "y": "13", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724504002205", + "p": 0, + "n": "***TOP 8", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "8", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1724503880548", + "p": "1902", + "n": "End of the 7th
0 runs, 1 lob", + "b": "2030", + "a": "58", + "r1": "0", + "r2": "0", + "i": "7", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503879115", + "p": "1902", + "n": "ÖIJEN Gustav strikes out looking. 3 out. ", + "b": "2020", + "a": "57", + "r1": "4", + "r2": "1", + "i": "7", + "x": "-4", + "y": "39", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503837436", + "p": "1902", + "n": "Swinging Strike 2. ", + "b": "2020", + "a": "57", + "r1": "5", + "r2": "0", + "i": "7", + "x": "-1", + "y": "45", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503780618", + "p": "1902", + "n": "Swinging Strike 1. ", + "b": "2020", + "a": "57", + "r1": "5", + "r2": "0", + "i": "7", + "x": "7", + "y": "32", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503740703", + "p": "1902", + "n": "TAKAHASHI Koki strikes out swinging. 2 out. ", + "b": "2010", + "a": "56", + "r1": "5", + "r2": "2", + "i": "7", + "x": "15", + "y": "55", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503709652", + "p": "1902", + "n": "Swinging Strike 2. ", + "b": "2010", + "a": "56", + "r1": "5", + "r2": "0", + "i": "7", + "x": "6", + "y": "49", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503669888", + "p": "1902", + "n": "Called Strike 1. ", + "b": "2010", + "a": "56", + "r1": "4", + "r2": "0", + "i": "7", + "x": "7", + "y": "60", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503641383", + "p": "1902", + "n": "Ball 1. WESTERLUND Oscar to 2nd on stolen base. ", + "b": "2010", + "a": "56", + "r1": "2", + "r2": "0", + "i": "7", + "x": "37", + "y": "43", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503585435", + "p": "1902", + "n": "WESTERLUND Oscar singles to center field. ", + "b": "2090", + "a": "55", + "r1": "9", + "r2": "18", + "i": "7", + "x": "-11", + "y": "47", + "hd": "1", + "hp": "179", + "hl": "20" + }, + { + "t": "1724503567382", + "p": "1902", + "n": "Ball 2. ", + "b": "2090", + "a": "55", + "r1": "2", + "r2": "0", + "i": "7", + "x": "37", + "y": "63", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503554054", + "p": "1902", + "n": "Swinging Strike 2. ", + "b": "2090", + "a": "55", + "r1": "5", + "r2": "0", + "i": "7", + "x": "8", + "y": "28", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503544848", + "p": "1902", + "n": "Called Strike 1. ", + "b": "2090", + "a": "55", + "r1": "4", + "r2": "0", + "i": "7", + "x": "19", + "y": "42", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503529714", + "p": "1902", + "n": "Ball 1. ", + "b": "2090", + "a": "55", + "r1": "2", + "r2": "0", + "i": "7", + "x": "33", + "y": "27", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503507728", + "p": "1902", + "n": "GRYTH Calle flies out to left field. F7. 1 out. ", + "b": "2080", + "a": "54", + "r1": "9", + "r2": "4", + "i": "7", + "x": "-15", + "y": "51", + "hd": "-30", + "hp": "226", + "hl": "35" + }, + { + "t": "1724503486499", + "p": "1902", + "n": "Foul. ", + "b": "2080", + "a": "54", + "r1": "6", + "r2": "0", + "i": "7", + "x": "4", + "y": "15", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503469267", + "p": "1902", + "n": "Swinging Strike 2. ", + "b": "2080", + "a": "54", + "r1": "5", + "r2": "0", + "i": "7", + "x": "-3", + "y": "20", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503458515", + "p": "1902", + "n": "Swinging Strike 1. ", + "b": "2080", + "a": "54", + "r1": "5", + "r2": "0", + "i": "7", + "x": "-16", + "y": "50", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503458515", + "p": 0, + "n": "***BOT 7", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "7", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1724503330859", + "p": "2901", + "n": "Middle of the 7th
0 runs, 1 lob", + "b": "1020", + "a": "54", + "r1": "0", + "r2": "0", + "i": "7", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503325912", + "p": "2901", + "n": "JOHNSON Joel grounds out 5-3. 3 out. ", + "b": "1010", + "a": "53", + "r1": "9", + "r2": "3", + "i": "7", + "x": "-4", + "y": "28", + "hd": "-35", + "hp": "94", + "hl": "0" + }, + { + "t": "1724503305398", + "p": "2901", + "n": "Ball 1. ", + "b": "1010", + "a": "53", + "r1": "2", + "r2": "0", + "i": "7", + "x": "38", + "y": "51", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503266025", + "p": "2901", + "n": "NORDSELL Elias reaches on a strikeout passed ball. ", + "b": "1090", + "a": "52", + "r1": "5", + "r2": "26", + "i": "7", + "x": "-5", + "y": "19", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503234664", + "p": "2901", + "n": "Swinging Strike 2. ", + "b": "1090", + "a": "52", + "r1": "5", + "r2": "0", + "i": "7", + "x": "14", + "y": "29", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503220230", + "p": "2901", + "n": "Ball 1. ", + "b": "1090", + "a": "52", + "r1": "2", + "r2": "0", + "i": "7", + "x": "37", + "y": "6", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503199114", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1090", + "a": "52", + "r1": "4", + "r2": "0", + "i": "7", + "x": "-17", + "y": "60", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503172111", + "p": "2901", + "n": "JERFSTEN Olle grounds out 4-3. 2 out. ", + "b": "1083", + "a": "51", + "r1": "9", + "r2": "3", + "i": "7", + "x": "10", + "y": "19", + "hd": "15", + "hp": "113", + "hl": "0" + }, + { + "t": "1724503157379", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1083", + "a": "51", + "r1": "4", + "r2": "0", + "i": "7", + "x": "-20", + "y": "47", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503130643", + "p": "2901", + "n": "JOHNSON Jan-Mikael flies out to right field. F9. 1 out. ", + "b": "1070", + "a": "50", + "r1": "9", + "r2": "4", + "i": "7", + "x": "11", + "y": "56", + "hd": "30", + "hp": "189", + "hl": "35" + }, + { + "t": "1724503106979", + "p": "2901", + "n": "Foul. ", + "b": "1070", + "a": "50", + "r1": "6", + "r2": "0", + "i": "7", + "x": "3", + "y": "43", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503090609", + "p": "2901", + "n": "Ball 1. ", + "b": "1070", + "a": "50", + "r1": "2", + "r2": "0", + "i": "7", + "x": "33", + "y": "26", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503079029", + "p": "2901", + "n": "Called Strike 2. ", + "b": "1070", + "a": "50", + "r1": "4", + "r2": "0", + "i": "7", + "x": "14", + "y": "23", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503067396", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1070", + "a": "50", + "r1": "4", + "r2": "0", + "i": "7", + "x": "16", + "y": "42", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724503067396", + "p": 0, + "n": "***TOP 7", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "7", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1724502958540", + "p": "1902", + "n": "End of the 6th
2 runs, 1 lob", + "b": "2080", + "a": "50", + "r1": "0", + "r2": "0", + "i": "6", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502956059", + "p": "1902", + "n": "BRODDESSON Alexander flies out to right field. F9. 3 out. ", + "b": "2070", + "a": "49", + "r1": "9", + "r2": "4", + "i": "6", + "x": "8", + "y": "62", + "hd": "30", + "hp": "226", + "hl": "35" + }, + { + "t": "1724502918444", + "p": "1902", + "n": "Ball 2. STEIGERT Samuel scores on passed ball. FAGERLUND Emil to 2nd on passed ball. ", + "b": "2070", + "a": "49", + "r1": "2", + "r2": "0", + "i": "6", + "x": "32", + "y": "30", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502895478", + "p": "1902", + "n": "Swinging Strike 1. ", + "b": "2070", + "a": "49", + "r1": "5", + "r2": "0", + "i": "6", + "x": "3", + "y": "12", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502876440", + "p": "1902", + "n": "Ball 1. ", + "b": "2070", + "a": "49", + "r1": "2", + "r2": "0", + "i": "6", + "x": "36", + "y": "60", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502843607", + "p": "1902", + "n": "FAGERLUND Emil walks. ", + "b": "2060", + "a": "48", + "r1": "2", + "r2": "13", + "i": "6", + "x": "34", + "y": "18", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502815394", + "p": "1902", + "n": "Foul. ", + "b": "2060", + "a": "48", + "r1": "6", + "r2": "0", + "i": "6", + "x": "-6", + "y": "54", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502809210", + "p": "1902", + "n": "Ball 3. ", + "b": "2060", + "a": "48", + "r1": "2", + "r2": "0", + "i": "6", + "x": "35", + "y": "13", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502798109", + "p": "1902", + "n": "Ball 2. ", + "b": "2060", + "a": "48", + "r1": "2", + "r2": "0", + "i": "6", + "x": "39", + "y": "27", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502775893", + "p": "1902", + "n": "Foul. ", + "b": "2060", + "a": "48", + "r1": "6", + "r2": "0", + "i": "6", + "x": "17", + "y": "33", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502750535", + "p": "1902", + "n": "CALSON Anton out at 2nd 143. 2 out. ", + "b": "2060", + "a": "48", + "r1": "0", + "r2": "0", + "i": "6", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502707008", + "p": "1902", + "n": "Called Strike 1. ", + "b": "2060", + "a": "48", + "r1": "4", + "r2": "0", + "i": "6", + "x": "-2", + "y": "57", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502690491", + "p": "1902", + "n": "Ball 1. ", + "b": "2060", + "a": "48", + "r1": "2", + "r2": "0", + "i": "6", + "x": "30", + "y": "52", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502657176", + "p": "1902", + "n": "CALSON Anton singles to center field. LINDKVIST Jakob scores. STEIGERT Samuel to 3rd. 1 RBI. ", + "b": "2050", + "a": "47", + "r1": "9", + "r2": "18", + "i": "6", + "x": "-15", + "y": "48", + "hd": "6", + "hp": "232", + "hl": "20" + }, + { + "t": "1724502614041", + "p": "1902", + "n": "Swinging Strike 2. ", + "b": "2050", + "a": "47", + "r1": "5", + "r2": "0", + "i": "6", + "x": "10", + "y": "60", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502592007", + "p": "1902", + "n": "Swinging Strike 1. ", + "b": "2050", + "a": "47", + "r1": "5", + "r2": "0", + "i": "6", + "x": "-2", + "y": "34", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502572907", + "p": "1902", + "n": "Ball 1. ", + "b": "2050", + "a": "47", + "r1": "2", + "r2": "0", + "i": "6", + "x": "33", + "y": "55", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502538660", + "p": "1902", + "n": "STEIGERT Samuel singles to third base. LINDKVIST Jakob to 2nd. ", + "b": "2040", + "a": "46", + "r1": "9", + "r2": "18", + "i": "6", + "x": "-8", + "y": "64", + "hd": "-32", + "hp": "37", + "hl": "20" + }, + { + "t": "1724502491839", + "p": "1902", + "n": "LINDKVIST Jakob walks. ", + "b": "2030", + "a": "45", + "r1": "2", + "r2": "13", + "i": "6", + "x": "39", + "y": "25", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502477572", + "p": "1902", + "n": "Called Strike 2. ", + "b": "2030", + "a": "45", + "r1": "4", + "r2": "0", + "i": "6", + "x": "5", + "y": "13", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502463252", + "p": "1902", + "n": "Called Strike 1. ", + "b": "2030", + "a": "45", + "r1": "4", + "r2": "0", + "i": "6", + "x": "11", + "y": "26", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502448973", + "p": "1902", + "n": "Ball 3. ", + "b": "2030", + "a": "45", + "r1": "2", + "r2": "0", + "i": "6", + "x": "38", + "y": "16", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502434889", + "p": "1902", + "n": "Ball 2. ", + "b": "2030", + "a": "45", + "r1": "2", + "r2": "0", + "i": "6", + "x": "38", + "y": "35", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502422210", + "p": "1902", + "n": "Ball 1. ", + "b": "2030", + "a": "45", + "r1": "2", + "r2": "0", + "i": "6", + "x": "35", + "y": "23", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502393356", + "p": "1902", + "n": "ÖIJEN Gustav grounds out 3U. 1 out. ", + "b": "2020", + "a": "44", + "r1": "9", + "r2": "3", + "i": "6", + "x": "19", + "y": "16", + "hd": "35", + "hp": "94", + "hl": "0" + }, + { + "t": "1724502377056", + "p": "1902", + "n": "Ball 2. ", + "b": "2020", + "a": "44", + "r1": "2", + "r2": "0", + "i": "6", + "x": "35", + "y": "67", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502361122", + "p": "1902", + "n": "Swinging Strike 2. ", + "b": "2020", + "a": "44", + "r1": "5", + "r2": "0", + "i": "6", + "x": "-19", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502348506", + "p": "1902", + "n": "Ball 1. ", + "b": "2020", + "a": "44", + "r1": "2", + "r2": "0", + "i": "6", + "x": "38", + "y": "23", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502339721", + "p": "1902", + "n": "Called Strike 1. ", + "b": "2020", + "a": "44", + "r1": "4", + "r2": "0", + "i": "6", + "x": "-2", + "y": "23", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": 0, + "p": 0, + "n": "Pitching Change: #33 BöRJES for #6 JOHNSON", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 6 + }, + { + "t": 0, + "p": 0, + "n": "Defensive Change: #6 JOHNSON to 2B", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 6 + }, + { + "t": 0, + "p": 0, + "n": "Defensive Substitution: #9 JERFSTEN for #12 LAUFKE at 3B", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 6 + }, + { + "t": "1724502339721", + "p": 0, + "n": "***BOT 6", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "6", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1724502163149", + "p": "2901", + "n": "Middle of the 6th
0 runs, 2 lob", + "b": "1070", + "a": "44", + "r1": "0", + "r2": "0", + "i": "6", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502156400", + "p": "2901", + "n": "HöGLUND Kalle flies out to left field. F7. 3 out. ", + "b": "1060", + "a": "43", + "r1": "9", + "r2": "4", + "i": "6", + "x": "-20", + "y": "51", + "hd": "-30", + "hp": "209", + "hl": "35" + }, + { + "t": "1724502118518", + "p": "2901", + "n": "Called Strike 2. ", + "b": "1060", + "a": "43", + "r1": "4", + "r2": "0", + "i": "6", + "x": "2", + "y": "54", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502088966", + "p": "2901", + "n": "Ball 2. ", + "b": "1060", + "a": "43", + "r1": "2", + "r2": "0", + "i": "6", + "x": "38", + "y": "65", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502057436", + "p": "2901", + "n": "Foul. ", + "b": "1060", + "a": "43", + "r1": "6", + "r2": "0", + "i": "6", + "x": "-4", + "y": "46", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724502032901", + "p": "2901", + "n": "Ball 1. ", + "b": "1060", + "a": "43", + "r1": "2", + "r2": "0", + "i": "6", + "x": "34", + "y": "61", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501999684", + "p": "2901", + "n": "BöRJES Sam Hit By Pitch. ", + "b": "1050", + "a": "42", + "r1": "3", + "r2": "15", + "i": "6", + "x": "-56", + "y": "61", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501973833", + "p": "2901", + "n": "Ball 2. ", + "b": "1050", + "a": "42", + "r1": "2", + "r2": "0", + "i": "6", + "x": "30", + "y": "39", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501956984", + "p": "2901", + "n": "Ball 1. ", + "b": "1050", + "a": "42", + "r1": "2", + "r2": "0", + "i": "6", + "x": "32", + "y": "22", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501924698", + "p": "2901", + "n": "JOHNSON Daniel grounds out 4-3. KäCK Albin to 2nd. 2 out. ", + "b": "1040", + "a": "41", + "r1": "9", + "r2": "3", + "i": "6", + "x": "13", + "y": "12", + "hd": "15", + "hp": "113", + "hl": "0" + }, + { + "t": "1724501889255", + "p": "2901", + "n": "KäCK Albin singles to first base. ", + "b": "1030", + "a": "40", + "r1": "9", + "r2": "18", + "i": "6", + "x": "0", + "y": "17", + "hd": "29", + "hp": "130", + "hl": "0" + }, + { + "t": "1724501861419", + "p": "2901", + "n": "Foul. ", + "b": "1030", + "a": "40", + "r1": "6", + "r2": "0", + "i": "6", + "x": "-13", + "y": "27", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501848951", + "p": "2901", + "n": "Ball 1. ", + "b": "1030", + "a": "40", + "r1": "2", + "r2": "0", + "i": "6", + "x": "32", + "y": "21", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501827979", + "p": "2901", + "n": "Foul. ", + "b": "1030", + "a": "40", + "r1": "6", + "r2": "0", + "i": "6", + "x": "6", + "y": "14", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501800549", + "p": "2901", + "n": "Foul. ", + "b": "1030", + "a": "40", + "r1": "6", + "r2": "0", + "i": "6", + "x": "10", + "y": "53", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501772048", + "p": "2901", + "n": "JOHNSON Benjamin grounds out 4-3. 1 out. ", + "b": "1020", + "a": "39", + "r1": "9", + "r2": "3", + "i": "6", + "x": "8", + "y": "19", + "hd": "15", + "hp": "113", + "hl": "0" + }, + { + "t": "1724501755799", + "p": "2901", + "n": "Swinging Strike 2. ", + "b": "1020", + "a": "39", + "r1": "5", + "r2": "0", + "i": "6", + "x": "-3", + "y": "61", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501746649", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1020", + "a": "39", + "r1": "4", + "r2": "0", + "i": "6", + "x": "-6", + "y": "20", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501746649", + "p": 0, + "n": "***TOP 6", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "6", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1724501626030", + "p": "1901", + "n": "End of the 5th
0 runs, 0 lob", + "b": "2020", + "a": "39", + "r1": "0", + "r2": "0", + "i": "5", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501624714", + "p": "1901", + "n": "TAKAHASHI Koki strikes out swinging. 3 out. ", + "b": "2010", + "a": "38", + "r1": "5", + "r2": "2", + "i": "5", + "x": "-2", + "y": "48", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501597098", + "p": "1901", + "n": "Foul. ", + "b": "2010", + "a": "38", + "r1": "6", + "r2": "0", + "i": "5", + "x": "6", + "y": "31", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501567830", + "p": "1901", + "n": "Swinging Strike 1. ", + "b": "2010", + "a": "38", + "r1": "5", + "r2": "0", + "i": "5", + "x": "-13", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501535081", + "p": "1901", + "n": "WESTERLUND Oscar strikes out swinging. 2 out. ", + "b": "2090", + "a": "37", + "r1": "5", + "r2": "2", + "i": "5", + "x": "18", + "y": "46", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501515512", + "p": "1901", + "n": "Called Strike 2. ", + "b": "2090", + "a": "37", + "r1": "4", + "r2": "0", + "i": "5", + "x": "14", + "y": "30", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501500978", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2090", + "a": "37", + "r1": "4", + "r2": "0", + "i": "5", + "x": "-3", + "y": "55", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501473379", + "p": "1901", + "n": "GRYTH Calle strikes out swinging. 1 out. ", + "b": "2080", + "a": "36", + "r1": "5", + "r2": "2", + "i": "5", + "x": "-3", + "y": "49", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501460831", + "p": "1901", + "n": "Swinging Strike 2. ", + "b": "2080", + "a": "36", + "r1": "5", + "r2": "0", + "i": "5", + "x": "18", + "y": "53", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501443562", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2080", + "a": "36", + "r1": "4", + "r2": "0", + "i": "5", + "x": "13", + "y": "38", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": 0, + "p": 0, + "n": "Defensive Substitution: #12 LAUFKE for #25 WILSON at 2B", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 5 + }, + { + "t": "1724501443562", + "p": 0, + "n": "***BOT 5", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "5", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1724501287795", + "p": "2901", + "n": "Middle of the 5th
0 runs, 0 lob", + "b": "1020", + "a": "36", + "r1": "0", + "r2": "0", + "i": "5", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501285845", + "p": "2901", + "n": "JOHNSON Joel strikes out looking. 3 out. ", + "b": "1010", + "a": "35", + "r1": "4", + "r2": "1", + "i": "5", + "x": "-12", + "y": "57", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501272212", + "p": "2901", + "n": "Ball 1. ", + "b": "1010", + "a": "35", + "r1": "2", + "r2": "0", + "i": "5", + "x": "36", + "y": "70", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501251444", + "p": "2901", + "n": "Foul. ", + "b": "1010", + "a": "35", + "r1": "6", + "r2": "0", + "i": "5", + "x": "18", + "y": "55", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501218824", + "p": "2901", + "n": "Foul. ", + "b": "1010", + "a": "35", + "r1": "6", + "r2": "0", + "i": "5", + "x": "3", + "y": "24", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501191758", + "p": "2901", + "n": "NORDSELL Elias grounds out 6-3. 2 out. ", + "b": "1090", + "a": "34", + "r1": "9", + "r2": "3", + "i": "5", + "x": "-14", + "y": "16", + "hd": "-15", + "hp": "113", + "hl": "0" + }, + { + "t": "1724501174730", + "p": "2901", + "n": "WILSON Dustin grounds out 4-3. 1 out. ", + "b": "1081", + "a": "33", + "r1": "9", + "r2": "3", + "i": "5", + "x": "16", + "y": "26", + "hd": "15", + "hp": "113", + "hl": "0" + }, + { + "t": 0, + "p": 0, + "n": "Pinch Hitter: #25 WILSON for #1 BERG", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 5 + }, + { + "t": "1724501174730", + "p": 0, + "n": "***TOP 5", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "5", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1724501041346", + "p": "1901", + "n": "End of the 4th
0 runs, 0 lob", + "b": "2080", + "a": "33", + "r1": "0", + "r2": "0", + "i": "4", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724501035017", + "p": "1901", + "n": "BRODDESSON Alexander grounds out 5-3. 3 out. ", + "b": "2070", + "a": "32", + "r1": "9", + "r2": "3", + "i": "4", + "x": "-6", + "y": "17", + "hd": "-35", + "hp": "94", + "hl": "0" + }, + { + "t": "1724500999337", + "p": "1901", + "n": "FAGERLUND Emil flies out. F4. 2 out. ", + "b": "2060", + "a": "31", + "r1": "9", + "r2": "4", + "i": "4", + "x": "13", + "y": "45", + "hd": "15", + "hp": "113", + "hl": "50" + }, + { + "t": "1724500968505", + "p": "1901", + "n": "CALSON Anton grounds out 4-3. 1 out. ", + "b": "2050", + "a": "30", + "r1": "9", + "r2": "3", + "i": "4", + "x": "0", + "y": "14", + "hd": "15", + "hp": "113", + "hl": "0" + }, + { + "t": "1724500944923", + "p": "1901", + "n": "Ball 1. ", + "b": "2050", + "a": "30", + "r1": "2", + "r2": "0", + "i": "4", + "x": "36", + "y": "63", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724500929321", + "p": "1901", + "n": "Called Strike 2. ", + "b": "2050", + "a": "30", + "r1": "4", + "r2": "0", + "i": "4", + "x": "-14", + "y": "55", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724500910771", + "p": "1901", + "n": "Foul. ", + "b": "2050", + "a": "30", + "r1": "6", + "r2": "0", + "i": "4", + "x": "-5", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724500910771", + "p": 0, + "n": "***BOT 4", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "4", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1724500775162", + "p": "2901", + "n": "Middle of the 4th
0 runs, 1 lob", + "b": "1080", + "a": "30", + "r1": "0", + "r2": "0", + "i": "4", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724500769204", + "p": "2901", + "n": "JOHNSON Jan-Mikael grounds out 5-3. 3 out. ", + "b": "1070", + "a": "29", + "r1": "9", + "r2": "3", + "i": "4", + "x": "-4", + "y": "18", + "hd": "-35", + "hp": "94", + "hl": "0" + }, + { + "t": "1724500748424", + "p": "2901", + "n": "Ball 1. ", + "b": "1070", + "a": "29", + "r1": "2", + "r2": "0", + "i": "4", + "x": "35", + "y": "40", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724500708704", + "p": "2901", + "n": "HöGLUND Kalle flies out to right field. F9. 2 out. ", + "b": "1060", + "a": "28", + "r1": "9", + "r2": "4", + "i": "4", + "x": "18", + "y": "45", + "hd": "30", + "hp": "226", + "hl": "35" + }, + { + "t": "1724500693154", + "p": "2901", + "n": "BöRJES Sam doubles to left center. ", + "b": "1050", + "a": "27", + "r1": "9", + "r2": "19", + "i": "4", + "x": "-7", + "y": "51", + "hd": "-15", + "hp": "235", + "hl": "20" + }, + { + "t": "1724500645689", + "p": "2901", + "n": "Ball 2. ", + "b": "1050", + "a": "27", + "r1": "2", + "r2": "0", + "i": "4", + "x": "35", + "y": "36", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724500624786", + "p": "2901", + "n": "Foul. ", + "b": "1050", + "a": "27", + "r1": "6", + "r2": "0", + "i": "4", + "x": "-3", + "y": "49", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724500604189", + "p": "2901", + "n": "Called Strike 2. ", + "b": "1050", + "a": "27", + "r1": "4", + "r2": "0", + "i": "4", + "x": "10", + "y": "51", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724500591172", + "p": "2901", + "n": "Foul. ", + "b": "1050", + "a": "27", + "r1": "6", + "r2": "0", + "i": "4", + "x": "6", + "y": "61", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724500577372", + "p": "2901", + "n": "Ball 1. ", + "b": "1050", + "a": "27", + "r1": "2", + "r2": "0", + "i": "4", + "x": "31", + "y": "40", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724500567004", + "p": "2901", + "n": "JOHNSON Daniel flies out. F3. 1 out. ", + "b": "1040", + "a": "26", + "r1": "9", + "r2": "4", + "i": "4", + "x": "13", + "y": "55", + "hd": "35", + "hp": "94", + "hl": "50" + }, + { + "t": "1724500567004", + "p": 0, + "n": "***TOP 4", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "4", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1724500433723", + "p": "1901", + "n": "End of the 3rd
1 runs, 1 lob", + "b": "2050", + "a": "26", + "r1": "0", + "r2": "0", + "i": "3", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724500426187", + "p": "1901", + "n": "STEIGERT Samuel flies out to center field. F8. 3 out. ", + "b": "2040", + "a": "25", + "r1": "9", + "r2": "4", + "i": "3", + "x": "6", + "y": "63", + "hd": "-5", + "hp": "189", + "hl": "50" + }, + { + "t": "1724500397171", + "p": "1901", + "n": "Foul. ", + "b": "2040", + "a": "25", + "r1": "6", + "r2": "0", + "i": "3", + "x": "-18", + "y": "52", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724500316508", + "p": "1901", + "n": "Ball 1. ", + "b": "2040", + "a": "25", + "r1": "2", + "r2": "0", + "i": "3", + "x": "32", + "y": "7", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724500287169", + "p": "1901", + "n": "Foul. ", + "b": "2040", + "a": "25", + "r1": "6", + "r2": "0", + "i": "3", + "x": "18", + "y": "20", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724500267313", + "p": "1901", + "n": "Foul. ", + "b": "2040", + "a": "25", + "r1": "6", + "r2": "0", + "i": "3", + "x": "8", + "y": "54", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724500243369", + "p": "1901", + "n": "LINDKVIST Jakob grounds out 6-3. TAKAHASHI Koki scores. ÖIJEN Gustav to 2nd. 2 out. 1 RBI. ", + "b": "2030", + "a": "24", + "r1": "9", + "r2": "3", + "i": "3", + "x": "-16", + "y": "15", + "hd": "-15", + "hp": "76", + "hl": "0" + }, + { + "t": "1724500195772", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2030", + "a": "24", + "r1": "4", + "r2": "0", + "i": "3", + "x": "-1", + "y": "19", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724500152738", + "p": "1901", + "n": "ÖIJEN Gustav singles to left center. TAKAHASHI Koki to 3rd. ", + "b": "2020", + "a": "23", + "r1": "9", + "r2": "18", + "i": "3", + "x": "4", + "y": "56", + "hd": "-10", + "hp": "179", + "hl": "20" + }, + { + "t": "1724500119405", + "p": "1901", + "n": "Ball 1. ", + "b": "2020", + "a": "23", + "r1": "2", + "r2": "0", + "i": "3", + "x": "31", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724500073755", + "p": "1901", + "n": "TAKAHASHI Koki doubles to right field. ", + "b": "2010", + "a": "22", + "r1": "9", + "r2": "19", + "i": "3", + "x": "13", + "y": "53", + "hd": "39", + "hp": "235", + "hl": "20" + }, + { + "t": "1724500035301", + "p": "1901", + "n": "WESTERLUND Oscar flies out to left field. F7. 1 out. ", + "b": "2090", + "a": "21", + "r1": "9", + "r2": "4", + "i": "3", + "x": "-5", + "y": "48", + "hd": "-30", + "hp": "226", + "hl": "35" + }, + { + "t": "1724500035301", + "p": 0, + "n": "***BOT 3", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "3", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1724499869357", + "p": "2901", + "n": "Middle of the 3rd
0 runs, 0 lob", + "b": "1040", + "a": "21", + "r1": "0", + "r2": "0", + "i": "3", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499861988", + "p": "2901", + "n": "KäCK Albin flies out to center field. F8. 3 out. ", + "b": "1030", + "a": "20", + "r1": "9", + "r2": "4", + "i": "3", + "x": "4", + "y": "47", + "hd": "-5", + "hp": "181", + "hl": "35" + }, + { + "t": "1724499844806", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1030", + "a": "20", + "r1": "4", + "r2": "0", + "i": "3", + "x": "10", + "y": "38", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499821187", + "p": "2901", + "n": "JOHNSON Benjamin strikes out swinging. 2 out. ", + "b": "1020", + "a": "19", + "r1": "5", + "r2": "2", + "i": "3", + "x": "9", + "y": "38", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499805188", + "p": "2901", + "n": "Ball 2. ", + "b": "1020", + "a": "19", + "r1": "2", + "r2": "0", + "i": "3", + "x": "34", + "y": "4", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499789223", + "p": "2901", + "n": "Foul. ", + "b": "1020", + "a": "19", + "r1": "6", + "r2": "0", + "i": "3", + "x": "-15", + "y": "51", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499772287", + "p": "2901", + "n": "Ball 1. ", + "b": "1020", + "a": "19", + "r1": "2", + "r2": "0", + "i": "3", + "x": "36", + "y": "13", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499760303", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1020", + "a": "19", + "r1": "4", + "r2": "0", + "i": "3", + "x": "-14", + "y": "32", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499733289", + "p": "2901", + "n": "JOHNSON Joel strikes out swinging. 1 out. ", + "b": "1010", + "a": "18", + "r1": "5", + "r2": "2", + "i": "3", + "x": "-20", + "y": "23", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499714238", + "p": "2901", + "n": "Ball 1. ", + "b": "1010", + "a": "18", + "r1": "2", + "r2": "0", + "i": "3", + "x": "35", + "y": "15", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499691639", + "p": "2901", + "n": "Foul. ", + "b": "1010", + "a": "18", + "r1": "6", + "r2": "0", + "i": "3", + "x": "-3", + "y": "30", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499668271", + "p": "2901", + "n": "Foul. ", + "b": "1010", + "a": "18", + "r1": "6", + "r2": "0", + "i": "3", + "x": "4", + "y": "42", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499655120", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1010", + "a": "18", + "r1": "4", + "r2": "0", + "i": "3", + "x": "9", + "y": "15", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499655120", + "p": 0, + "n": "***TOP 3", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "3", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1724499542287", + "p": "1901", + "n": "End of the 2nd
1 runs, 1 lob", + "b": "2090", + "a": "18", + "r1": "0", + "r2": "0", + "i": "2", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499535020", + "p": "1901", + "n": "GRYTH Calle flies out. P1. 3 out. ", + "b": "2080", + "a": "17", + "r1": "9", + "r2": "4", + "i": "2", + "x": "-5", + "y": "48", + "hd": "3", + "hp": "57", + "hl": "70" + }, + { + "t": "1724499495334", + "p": "1901", + "n": "BRODDESSON Alexander reaches on fielders choice. FAGERLUND Emil out at 2nd 14. 2 out. ", + "b": "2070", + "a": "16", + "r1": "9", + "r2": "11", + "i": "2", + "x": "-7", + "y": "25", + "hd": "3", + "hp": "57", + "hl": "0" + }, + { + "t": "1724499471024", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2070", + "a": "16", + "r1": "4", + "r2": "0", + "i": "2", + "x": "3", + "y": "49", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499443505", + "p": "1901", + "n": "FAGERLUND Emil singles to right center. CALSON Anton scores. 1 RBI. ", + "b": "2060", + "a": "15", + "r1": "9", + "r2": "18", + "i": "2", + "x": "15", + "y": "57", + "hd": "17", + "hp": "179", + "hl": "20" + }, + { + "t": "1724499412670", + "p": "1901", + "n": "Foul. ", + "b": "2060", + "a": "15", + "r1": "6", + "r2": "0", + "i": "2", + "x": "-15", + "y": "43", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499329564", + "p": "1901", + "n": "CALSON Anton triples to right field. ", + "b": "2050", + "a": "14", + "r1": "9", + "r2": "20", + "i": "2", + "x": "18", + "y": "58", + "hd": "34", + "hp": "232", + "hl": "35" + }, + { + "t": "1724499286838", + "p": "1901", + "n": "Ball 2. ", + "b": "2050", + "a": "14", + "r1": "2", + "r2": "0", + "i": "2", + "x": "31", + "y": "55", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499258086", + "p": "1901", + "n": "Foul. ", + "b": "2050", + "a": "14", + "r1": "6", + "r2": "0", + "i": "2", + "x": "9", + "y": "32", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499233305", + "p": "1901", + "n": "Foul. ", + "b": "2050", + "a": "14", + "r1": "6", + "r2": "0", + "i": "2", + "x": "3", + "y": "43", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499211655", + "p": "1901", + "n": "Ball 1. ", + "b": "2050", + "a": "14", + "r1": "2", + "r2": "0", + "i": "2", + "x": "36", + "y": "13", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499187319", + "p": "1901", + "n": "Foul. ", + "b": "2050", + "a": "14", + "r1": "6", + "r2": "0", + "i": "2", + "x": "-16", + "y": "51", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499152120", + "p": "1901", + "n": "STEIGERT Samuel grounds out 5-3. 1 out. ", + "b": "2040", + "a": "13", + "r1": "9", + "r2": "3", + "i": "2", + "x": "-6", + "y": "29", + "hd": "-35", + "hp": "94", + "hl": "0" + }, + { + "t": "1724499124225", + "p": "1901", + "n": "Ball 1. ", + "b": "2040", + "a": "13", + "r1": "2", + "r2": "0", + "i": "2", + "x": "34", + "y": "22", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499110921", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2040", + "a": "13", + "r1": "4", + "r2": "0", + "i": "2", + "x": "16", + "y": "13", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724499110921", + "p": 0, + "n": "***BOT 2", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "2", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1724498953306", + "p": "2901", + "n": "Middle of the 2nd
0 runs, 0 lob", + "b": "1010", + "a": "13", + "r1": "0", + "r2": "0", + "i": "2", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498944417", + "p": "2901", + "n": "NORDSELL Elias grounds out 4-3. 3 out. ", + "b": "1090", + "a": "12", + "r1": "9", + "r2": "3", + "i": "2", + "x": "4", + "y": "11", + "hd": "15", + "hp": "99", + "hl": "0" + }, + { + "t": "1724498926005", + "p": "2901", + "n": "Ball 2. ", + "b": "1090", + "a": "12", + "r1": "2", + "r2": "0", + "i": "2", + "x": "36", + "y": "31", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498911623", + "p": "2901", + "n": "Ball 1. ", + "b": "1090", + "a": "12", + "r1": "2", + "r2": "0", + "i": "2", + "x": "30", + "y": "46", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498900788", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1090", + "a": "12", + "r1": "4", + "r2": "0", + "i": "2", + "x": "18", + "y": "50", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498870837", + "p": "2901", + "n": "BERG Teo strikes out looking. 2 out. ", + "b": "1080", + "a": "11", + "r1": "4", + "r2": "1", + "i": "2", + "x": "14", + "y": "54", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498848771", + "p": "2901", + "n": "Foul. ", + "b": "1080", + "a": "11", + "r1": "6", + "r2": "0", + "i": "2", + "x": "17", + "y": "19", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498830104", + "p": "2901", + "n": "Foul. ", + "b": "1080", + "a": "11", + "r1": "6", + "r2": "0", + "i": "2", + "x": "3", + "y": "29", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498807871", + "p": "2901", + "n": "Foul. ", + "b": "1080", + "a": "11", + "r1": "6", + "r2": "0", + "i": "2", + "x": "6", + "y": "22", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498795157", + "p": "2901", + "n": "Called Strike 2. ", + "b": "1080", + "a": "11", + "r1": "4", + "r2": "0", + "i": "2", + "x": "7", + "y": "56", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498783290", + "p": "2901", + "n": "Ball 2. ", + "b": "1080", + "a": "11", + "r1": "2", + "r2": "0", + "i": "2", + "x": "31", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498765822", + "p": "2901", + "n": "Ball 1. ", + "b": "1080", + "a": "11", + "r1": "2", + "r2": "0", + "i": "2", + "x": "37", + "y": "67", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498754922", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1080", + "a": "11", + "r1": "4", + "r2": "0", + "i": "2", + "x": "-13", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498728416", + "p": "2901", + "n": "JOHNSON Jan-Mikael grounds out 4-3. 1 out. ", + "b": "1070", + "a": "10", + "r1": "9", + "r2": "3", + "i": "2", + "x": "0", + "y": "27", + "hd": "15", + "hp": "113", + "hl": "0" + }, + { + "t": "1724498711104", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1070", + "a": "10", + "r1": "4", + "r2": "0", + "i": "2", + "x": "3", + "y": "24", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498700373", + "p": "2901", + "n": "Ball 3. ", + "b": "1070", + "a": "10", + "r1": "2", + "r2": "0", + "i": "2", + "x": "39", + "y": "10", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498688139", + "p": "2901", + "n": "Ball 2. ", + "b": "1070", + "a": "10", + "r1": "2", + "r2": "0", + "i": "2", + "x": "38", + "y": "69", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498676636", + "p": "2901", + "n": "Ball 1. ", + "b": "1070", + "a": "10", + "r1": "2", + "r2": "0", + "i": "2", + "x": "31", + "y": "37", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498676636", + "p": 0, + "n": "***TOP 2", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "2", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1724498559513", + "p": "1901", + "n": "End of the 1st
0 runs, 0 lob", + "b": "2040", + "a": "10", + "r1": "0", + "r2": "0", + "i": "1", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498546235", + "p": "1901", + "n": "LINDKVIST Jakob flies out foul. FF3. 3 out. ", + "b": "2030", + "a": "9", + "r1": "9", + "r2": "4", + "i": "1", + "x": "4", + "y": "48", + "hd": "58", + "hp": "55", + "hl": "50" + }, + { + "t": "1724498516755", + "p": "1901", + "n": "Foul. ", + "b": "2030", + "a": "9", + "r1": "6", + "r2": "0", + "i": "1", + "x": "-19", + "y": "12", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498495838", + "p": "1901", + "n": "Swinging Strike 2. ", + "b": "2030", + "a": "9", + "r1": "5", + "r2": "0", + "i": "1", + "x": "10", + "y": "39", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498483439", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2030", + "a": "9", + "r1": "4", + "r2": "0", + "i": "1", + "x": "5", + "y": "26", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498448987", + "p": "1901", + "n": "ÖIJEN Gustav strikes out swinging. 2 out. ", + "b": "2020", + "a": "8", + "r1": "5", + "r2": "2", + "i": "1", + "x": "19", + "y": "54", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498422422", + "p": "1901", + "n": "Ball 1. ", + "b": "2020", + "a": "8", + "r1": "2", + "r2": "0", + "i": "1", + "x": "31", + "y": "61", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498405055", + "p": "1901", + "n": "Called Strike 2. ", + "b": "2020", + "a": "8", + "r1": "4", + "r2": "0", + "i": "1", + "x": "10", + "y": "20", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498388421", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2020", + "a": "8", + "r1": "4", + "r2": "0", + "i": "1", + "x": "-8", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498357321", + "p": "1901", + "n": "TAKAHASHI Koki grounds out 3-1. 1 out. ", + "b": "2010", + "a": "7", + "r1": "9", + "r2": "3", + "i": "1", + "x": "0", + "y": "14", + "hd": "35", + "hp": "94", + "hl": "0" + }, + { + "t": "1724498332552", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2010", + "a": "7", + "r1": "4", + "r2": "0", + "i": "1", + "x": "-8", + "y": "32", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498311369", + "p": "1901", + "n": "Ball 2. ", + "b": "2010", + "a": "7", + "r1": "2", + "r2": "0", + "i": "1", + "x": "39", + "y": "48", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498295121", + "p": "1901", + "n": "Ball 1. ", + "b": "2010", + "a": "7", + "r1": "2", + "r2": "0", + "i": "1", + "x": "31", + "y": "50", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498295121", + "p": 0, + "n": "***BOT 1", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "1", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1724498089608", + "p": "2901", + "n": "Middle of the 1st
2 runs, 1 lob", + "b": "1070", + "a": "7", + "r1": "0", + "r2": "0", + "i": "1", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498085967", + "p": "2901", + "n": "HöGLUND Kalle flies out to left field. F7. 3 out. ", + "b": "1060", + "a": "6", + "r1": "9", + "r2": "4", + "i": "1", + "x": "-12", + "y": "63", + "hd": "-30", + "hp": "226", + "hl": "35" + }, + { + "t": "1724498065536", + "p": "2901", + "n": "Ball 1. ", + "b": "1060", + "a": "6", + "r1": "2", + "r2": "0", + "i": "1", + "x": "39", + "y": "22", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498049274", + "p": "2901", + "n": "Called Strike 2. ", + "b": "1060", + "a": "6", + "r1": "4", + "r2": "0", + "i": "1", + "x": "9", + "y": "32", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498039833", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1060", + "a": "6", + "r1": "4", + "r2": "0", + "i": "1", + "x": "-12", + "y": "57", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724498006705", + "p": "2901", + "n": "BöRJES Sam singles to center field. JOHNSON Joel scores. JOHNSON Daniel scores. 2 RBI. ", + "b": "1050", + "a": "5", + "r1": "9", + "r2": "18", + "i": "1", + "x": "-4", + "y": "52", + "hd": "-3", + "hp": "207", + "hl": "20" + }, + { + "t": "1724497974068", + "p": "2901", + "n": "Called Strike 2. ", + "b": "1050", + "a": "5", + "r1": "4", + "r2": "0", + "i": "1", + "x": "18", + "y": "52", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724497890269", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1050", + "a": "5", + "r1": "4", + "r2": "0", + "i": "1", + "x": "4", + "y": "37", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724497876172", + "p": "2901", + "n": "Ball 1. JOHNSON Daniel to 2nd on stolen base. ", + "b": "1050", + "a": "5", + "r1": "2", + "r2": "0", + "i": "1", + "x": "37", + "y": "5", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724497845623", + "p": "2901", + "n": "JOHNSON Daniel Hit By Pitch. ", + "b": "1040", + "a": "4", + "r1": "3", + "r2": "15", + "i": "1", + "x": "-56", + "y": "23", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724497817637", + "p": "2901", + "n": "KäCK Albin grounds out 4-3. 2 out. ", + "b": "1030", + "a": "3", + "r1": "9", + "r2": "3", + "i": "1", + "x": "10", + "y": "29", + "hd": "15", + "hp": "113", + "hl": "0" + }, + { + "t": "1724497783052", + "p": "2901", + "n": "JOHNSON Benjamin grounds out 6-3. JOHNSON Joel to 3rd. 1 out. ", + "b": "1020", + "a": "2", + "r1": "9", + "r2": "3", + "i": "1", + "x": "-17", + "y": "25", + "hd": "-15", + "hp": "113", + "hl": "0" + }, + { + "t": "1724497753457", + "p": "2901", + "n": "Ball 2. ", + "b": "1020", + "a": "2", + "r1": "2", + "r2": "0", + "i": "1", + "x": "36", + "y": "64", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724497733669", + "p": "2901", + "n": "Called Strike 2. JOHNSON Joel to 2nd on stolen base. ", + "b": "1020", + "a": "2", + "r1": "4", + "r2": "0", + "i": "1", + "x": "-2", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724497696739", + "p": "2901", + "n": "Ball 1. ", + "b": "1020", + "a": "2", + "r1": "2", + "r2": "0", + "i": "1", + "x": "31", + "y": "22", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724497678889", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1020", + "a": "2", + "r1": "4", + "r2": "0", + "i": "1", + "x": "5", + "y": "16", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724497653669", + "p": "2901", + "n": "JOHNSON Joel singles to center field. ", + "b": "1010", + "a": "1", + "r1": "9", + "r2": "18", + "i": "1", + "x": "-7", + "y": "47", + "hd": "-2", + "hp": "213", + "hl": "20" + }, + { + "t": "1724497630953", + "p": "2901", + "n": "Ball 1. ", + "b": "1010", + "a": "1", + "r1": "2", + "r2": "0", + "i": "1", + "x": "36", + "y": "32", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724497618353", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1010", + "a": "1", + "r1": "4", + "r2": "0", + "i": "1", + "x": "16", + "y": "61", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724497115730", + "p": "2901", + "n": "Play Ball", + "b": "1010", + "a": "1", + "r1": "0", + "r2": "0", + "i": "1", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1724497115730", + "p": 0, + "n": "***TOP 1", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "1", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + } + ] +} diff --git a/src/test/resources/wbsc/first_play.json b/src/test/resources/wbsc/first_play.json new file mode 100644 index 0000000..f781a7d --- /dev/null +++ b/src/test/resources/wbsc/first_play.json @@ -0,0 +1,975 @@ +{ + "debug_lastplay": 0, + "lastplayloaded": 0, + "gameid": "160399", + "debugcode": "577623", + "eventlocation": "", + "eventhome": "SUN", + "eventaway": "LEK", + "eventhomeid": "35726", + "eventawayid": "35723", + "eventurl": "", + "gameover": 0, + "innings": "9", + "platecount": [ + { + "id": 1, + "type": 0, + "label": "Awaiting Play Ball", + "pitch": "Unknown", + "coords": [ + 0, + 0 + ] + } + ], + "situation": { + "inning": "1.0", + "uniform": "standard-home", + "gender": "", + "batter": "NORDSELL Elias", + "batterid": "577623", + "bats": "R", + "batting": " for ", + "avg": ".000", + "pitcher": "MARQVARDSEN Povl Erik", + "pitcherid": "616846", + "pitcherthrows": "R", + "pitcherera": "99.99", + "pitcherip": "0.0", + "runner1": 0, + "runner2": 0, + "runner3": 0, + "outs": 0, + "balls": 0, + "strikes": 0, + "extrainnings": null, + "currentinning": "TOP 1" + }, + "gameinfo": null, + "boxscore": { + "1010": { + "name": "NORDSELL Elias", + "firstname": "Elias", + "lastname": "NORDSELL", + "playerid": "577623", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "C", + "PA": null, + "AB": null, + "R": null, + "H": null, + "RBI": null, + "BB": null, + "SO": null, + "DOUBLE": null, + "TRIPLE": null, + "HR": null, + "SF": null, + "HBP": null, + "SB": null, + "CS": null, + "SEASON": { + "PA": "59", + "AB": "45", + "H": "10", + "BB": "8", + "DOUBLE": "2", + "TRIPLE": "0", + "HR": "0", + "SF": "1", + "HBP": "5" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": null, + "A": null, + "E": null + }, + "1020": { + "name": "STERNER Malek", + "firstname": "Malek", + "lastname": "STERNER", + "playerid": "577633", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "RF", + "PA": null, + "AB": null, + "R": null, + "H": null, + "RBI": null, + "BB": null, + "SO": null, + "DOUBLE": null, + "TRIPLE": null, + "HR": null, + "SF": null, + "HBP": null, + "SB": null, + "CS": null, + "SEASON": { + "PA": "13", + "AB": "10", + "H": "2", + "BB": "3", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": null, + "A": null, + "E": null + }, + "1030": { + "name": "CZECH Tucker", + "firstname": "Tucker", + "lastname": "CZECH", + "playerid": "597690", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "DH", + "PA": null, + "AB": null, + "R": null, + "H": null, + "RBI": null, + "BB": null, + "SO": null, + "DOUBLE": null, + "TRIPLE": null, + "HR": null, + "SF": null, + "HBP": null, + "SB": null, + "CS": null, + "SEASON": { + "PA": "26", + "AB": "23", + "H": "6", + "BB": "3", + "DOUBLE": "0", + "TRIPLE": "1", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": null, + "A": null, + "E": null + }, + "1040": { + "name": "KENT Colton", + "firstname": "Colton", + "lastname": "KENT", + "playerid": "597688", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "3B", + "PA": null, + "AB": null, + "R": null, + "H": null, + "RBI": null, + "BB": null, + "SO": null, + "DOUBLE": null, + "TRIPLE": null, + "HR": null, + "SF": null, + "HBP": null, + "SB": null, + "CS": null, + "SEASON": { + "PA": "18", + "AB": "18", + "H": "3", + "BB": "0", + "DOUBLE": "1", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": null, + "A": null, + "E": null + }, + "1050": { + "name": "NORDLING Jakob", + "firstname": "Jakob", + "lastname": "NORDLING", + "playerid": "577629", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "1B", + "PA": null, + "AB": null, + "R": null, + "H": null, + "RBI": null, + "BB": null, + "SO": null, + "DOUBLE": null, + "TRIPLE": null, + "HR": null, + "SF": null, + "HBP": null, + "SB": null, + "CS": null, + "SEASON": { + "PA": "19", + "AB": "18", + "H": "1", + "BB": "0", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": null, + "A": null, + "E": null + }, + "1060": { + "name": "ANDERSSON Olle", + "firstname": "Olle", + "lastname": "ANDERSSON", + "playerid": "577664", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "CF", + "PA": null, + "AB": null, + "R": null, + "H": null, + "RBI": null, + "BB": null, + "SO": null, + "DOUBLE": null, + "TRIPLE": null, + "HR": null, + "SF": null, + "HBP": null, + "SB": null, + "CS": null, + "SEASON": { + "PA": "46", + "AB": "40", + "H": "12", + "BB": "5", + "DOUBLE": "1", + "TRIPLE": "0", + "HR": "0", + "SF": "1", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": null, + "A": null, + "E": null + }, + "1070": { + "name": "BERG Teo", + "firstname": "Teo", + "lastname": "BERG", + "playerid": "577640", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "2B", + "PA": null, + "AB": null, + "R": null, + "H": null, + "RBI": null, + "BB": null, + "SO": null, + "DOUBLE": null, + "TRIPLE": null, + "HR": null, + "SF": null, + "HBP": null, + "SB": null, + "CS": null, + "SEASON": { + "PA": "49", + "AB": "36", + "H": "4", + "BB": "10", + "DOUBLE": "1", + "TRIPLE": "0", + "HR": "0", + "SF": "1", + "HBP": "1" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": null, + "A": null, + "E": null + }, + "1080": { + "name": "ÅNGSTRöM Dante", + "firstname": "Dante", + "lastname": "ÅNGSTRöM", + "playerid": "588515", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "SS", + "PA": null, + "AB": null, + "R": null, + "H": null, + "RBI": null, + "BB": null, + "SO": null, + "DOUBLE": null, + "TRIPLE": null, + "HR": null, + "SF": null, + "HBP": null, + "SB": null, + "CS": null, + "SEASON": { + "PA": "47", + "AB": "43", + "H": "4", + "BB": "4", + "DOUBLE": "1", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": null, + "A": null, + "E": null + }, + "1090": { + "name": "MAALOUF Oliver", + "firstname": "Oliver", + "lastname": "MAALOUF", + "playerid": "577636", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "LF", + "PA": null, + "AB": null, + "R": null, + "H": null, + "RBI": null, + "BB": null, + "SO": null, + "DOUBLE": null, + "TRIPLE": null, + "HR": null, + "SF": null, + "HBP": null, + "SB": null, + "CS": null, + "SEASON": { + "PA": "19", + "AB": "18", + "H": "3", + "BB": "1", + "DOUBLE": "1", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": null, + "A": null, + "E": null + }, + "1901": { + "name": "SJöRS Per", + "firstname": "Per", + "lastname": "SJöRS", + "playerid": "597691", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "PITCHIP": "0.0", + "PITCHER": null, + "PITCHR": null, + "PITCHH": null, + "PITCHBB": null, + "PITCHSO": null, + "PITCHES": null, + "STRIKES": null, + "PITCHOUTS": null, + "SEASON": { + "PITCHER": "5", + "PITCHOUTS": "12", + "PITCHBB": "3", + "PITCHSO": "1" + }, + "ERA": "99.99", + "PO": null, + "A": null, + "E": null + }, + "2010": { + "name": "SEQUERA Fernando José", + "firstname": "Fernando José", + "lastname": "SEQUERA", + "playerid": "595813", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/adc26505-2595-7bf2-48cb-b3c1c84174b7.jpg", + "inplay": "", + "reentry": 0, + "POS": "CF", + "PA": null, + "AB": null, + "R": null, + "H": null, + "RBI": null, + "BB": null, + "SO": null, + "DOUBLE": null, + "TRIPLE": null, + "HR": null, + "SF": null, + "HBP": null, + "SB": null, + "CS": null, + "SEASON": { + "PA": "57", + "AB": "40", + "H": "10", + "BB": "12", + "DOUBLE": "1", + "TRIPLE": "1", + "HR": "0", + "SF": "1", + "HBP": "3" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": null, + "A": null, + "E": null + }, + "2020": { + "name": "JELLNOR Lukas", + "firstname": "Lukas", + "lastname": "JELLNOR", + "playerid": "588446", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/6f7248ad-cb66-cedb-1ddb-60834a1349db.jpg", + "inplay": "", + "reentry": 0, + "POS": "C", + "PA": null, + "AB": null, + "R": null, + "H": null, + "RBI": null, + "BB": null, + "SO": null, + "DOUBLE": null, + "TRIPLE": null, + "HR": null, + "SF": null, + "HBP": null, + "SB": null, + "CS": null, + "SEASON": { + "PA": "68", + "AB": "57", + "H": "19", + "BB": "11", + "DOUBLE": "4", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": null, + "A": null, + "E": null + }, + "2030": { + "name": "CASTILLO Anthony", + "firstname": "Anthony", + "lastname": "CASTILLO", + "playerid": "588464", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/3d4b25cd-cfd9-4c06-6acf-85585914698a.jpg", + "inplay": "", + "reentry": 0, + "POS": "2B", + "PA": null, + "AB": null, + "R": null, + "H": null, + "RBI": null, + "BB": null, + "SO": null, + "DOUBLE": null, + "TRIPLE": null, + "HR": null, + "SF": null, + "HBP": null, + "SB": null, + "CS": null, + "SEASON": { + "PA": "51", + "AB": "44", + "H": "19", + "BB": "6", + "DOUBLE": "4", + "TRIPLE": "1", + "HR": "0", + "SF": "1", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": null, + "A": null, + "E": null + }, + "2040": { + "name": "HERNANDEZ José", + "firstname": "José", + "lastname": "HERNANDEZ", + "playerid": "595809", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/7f0954fb-3801-e135-30ea-1afc8e299a8c.jpg", + "inplay": "", + "reentry": 0, + "POS": "SS", + "PA": null, + "AB": null, + "R": null, + "H": null, + "RBI": null, + "BB": null, + "SO": null, + "DOUBLE": null, + "TRIPLE": null, + "HR": null, + "SF": null, + "HBP": null, + "SB": null, + "CS": null, + "SEASON": { + "PA": "59", + "AB": "49", + "H": "25", + "BB": "7", + "DOUBLE": "4", + "TRIPLE": "1", + "HR": "1", + "SF": "1", + "HBP": "2" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": null, + "A": null, + "E": null + }, + "2050": { + "name": "SJöLUND Linus", + "firstname": "Linus", + "lastname": "SJöLUND", + "playerid": "588460", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/196a8def-450b-2081-984d-0be9e90205a1.jpg", + "inplay": "", + "reentry": 0, + "POS": "DH", + "PA": null, + "AB": null, + "R": null, + "H": null, + "RBI": null, + "BB": null, + "SO": null, + "DOUBLE": null, + "TRIPLE": null, + "HR": null, + "SF": null, + "HBP": null, + "SB": null, + "CS": null, + "SEASON": { + "PA": "37", + "AB": "28", + "H": "11", + "BB": "5", + "DOUBLE": "3", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "4" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": null, + "A": null, + "E": null + }, + "2060": { + "name": "ESTATI Bryan", + "firstname": "Bryan", + "lastname": "ESTATI", + "playerid": "588451", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/54b7ae2c-c086-3645-89d1-bb7db6c9332d.jpg", + "inplay": "", + "reentry": 0, + "POS": "3B", + "PA": null, + "AB": null, + "R": null, + "H": null, + "RBI": null, + "BB": null, + "SO": null, + "DOUBLE": null, + "TRIPLE": null, + "HR": null, + "SF": null, + "HBP": null, + "SB": null, + "CS": null, + "SEASON": { + "PA": "42", + "AB": "33", + "H": "9", + "BB": "7", + "DOUBLE": "2", + "TRIPLE": "0", + "HR": "2", + "SF": "1", + "HBP": "1" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": null, + "A": null, + "E": null + }, + "2070": { + "name": "FLEMING Braizell", + "firstname": "Braizell", + "lastname": "FLEMING", + "playerid": "595817", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/37debb5e-edd0-fb9d-9c82-72b29489b70b.jpg", + "inplay": "", + "reentry": 0, + "POS": "RF", + "PA": null, + "AB": null, + "R": null, + "H": null, + "RBI": null, + "BB": null, + "SO": null, + "DOUBLE": null, + "TRIPLE": null, + "HR": null, + "SF": null, + "HBP": null, + "SB": null, + "CS": null, + "SEASON": { + "PA": "35", + "AB": "30", + "H": "9", + "BB": "2", + "DOUBLE": "2", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "3" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": null, + "A": null, + "E": null + }, + "2080": { + "name": "SOUTHERINGTON Max", + "firstname": "Max", + "lastname": "SOUTHERINGTON", + "playerid": "588447", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/304e6373-0c75-ecb8-e115-002e8cfc4682.jpg", + "inplay": "", + "reentry": 0, + "POS": "1B", + "PA": null, + "AB": null, + "R": null, + "H": null, + "RBI": null, + "BB": null, + "SO": null, + "DOUBLE": null, + "TRIPLE": null, + "HR": null, + "SF": null, + "HBP": null, + "SB": null, + "CS": null, + "SEASON": { + "PA": "30", + "AB": "24", + "H": "4", + "BB": "4", + "DOUBLE": "0", + "TRIPLE": "1", + "HR": "0", + "SF": "1", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": null, + "A": null, + "E": null + }, + "2090": { + "name": "BENGTSSON Axel", + "firstname": "Axel", + "lastname": "BENGTSSON", + "playerid": "588450", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/405e9d50-6e15-7f3a-b22a-63898437f3d4.jpg", + "inplay": "", + "reentry": 0, + "POS": "LF", + "PA": null, + "AB": null, + "R": null, + "H": null, + "RBI": null, + "BB": null, + "SO": null, + "DOUBLE": null, + "TRIPLE": null, + "HR": null, + "SF": null, + "HBP": null, + "SB": null, + "CS": null, + "SEASON": { + "PA": "8", + "AB": "7", + "H": "1", + "BB": "1", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": null, + "A": null, + "E": null + }, + "2901": { + "name": "MARQVARDSEN Povl Erik", + "firstname": "Povl Erik", + "lastname": "MARQVARDSEN", + "playerid": "616846", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "PITCHIP": "0.0", + "PITCHER": null, + "PITCHR": null, + "PITCHH": null, + "PITCHBB": null, + "PITCHSO": null, + "PITCHES": null, + "STRIKES": null, + "PITCHOUTS": null, + "SEASON": { + "PITCHER": "1", + "PITCHOUTS": "24", + "PITCHBB": "6", + "PITCHSO": "8" + }, + "ERA": "99.99", + "PO": null, + "A": null, + "E": null + } + }, + "linescore": { + "awayruns": [], + "awaytotals": { + "R": 0, + "H": 0, + "E": 0, + "LOB": 0 + }, + "homeruns": [], + "hometotals": { + "R": 0, + "H": 0, + "E": 0, + "LOB": 0 + } + }, + "animation": { + "batter": 0, + "strike": 0, + "ball": 0 + }, + "playdata": [ + { + "t": "1754146317886", + "p": "2901", + "n": "Awaiting Play Ball", + "b": "1010", + "a": "1", + "r1": "0", + "r2": "0", + "i": "1", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146317886", + "p": 0, + "n": "***TOP 1", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "1", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + } + ] +} diff --git a/src/test/resources/wbsc/last_play.json b/src/test/resources/wbsc/last_play.json new file mode 100644 index 0000000..e4e4356 --- /dev/null +++ b/src/test/resources/wbsc/last_play.json @@ -0,0 +1,7667 @@ +{ + "debug_lastplay": 398, + "lastplayloaded": 398, + "gameid": "160399", + "debugcode": "577634", + "eventlocation": "", + "eventhome": "SUN", + "eventaway": "LEK", + "eventhomeid": "35726", + "eventawayid": "35723", + "eventurl": "", + "gameover": 2, + "innings": "9", + "platecount": [ + { + "id": 2, + "type": 0, + "label": "GAME OVER
SUN wins 11-9
Win: SEQUERA
Loss: MARKSTRöM
undefined", + "pitch": "Unknown", + "coords": [ + 0, + 0 + ] + }, + { + "id": 1, + "type": 3, + "label": "ÅNGSTRöM Dante flies out to right field. L9. ANDERSSON Olle out at 2nd 946. Double Play. 3 out. ", + "pitch": "Unknown", + "coords": [ + 0, + 0 + ] + } + ], + "situation": { + "inning": "9.0", + "uniform": "standard-home", + "gender": "", + "batter": "LEJON Måns", + "batterid": "577634", + "bats": "R", + "batting": "0 for 1", + "avg": ".000", + "pitcher": "SEQUERA Fernando José", + "pitcherid": "595813", + "pitcherthrows": "R", + "pitcherera": "0.00", + "pitcherip": "2.0", + "runner1": 0, + "runner2": 0, + "runner3": 0, + "outs": 0, + "balls": 0, + "strikes": 0, + "extrainnings": null, + "currentinning": "FINAL" + }, + "gameinfo": null, + "boxscore": { + "1010": { + "name": "NORDSELL Elias", + "firstname": "Elias", + "lastname": "NORDSELL", + "playerid": "577623", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "C", + "PA": 6, + "AB": 2, + "R": 3, + "H": 0, + "RBI": 0, + "BB": 2, + "SO": 1, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 1, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "59", + "AB": "45", + "H": "10", + "BB": "8", + "DOUBLE": "2", + "TRIPLE": "0", + "HR": "0", + "SF": "1", + "HBP": "5" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".600", + "SLG": ".000", + "OPS": ".600", + "PO": 9, + "A": 0, + "E": 0 + }, + "1020": { + "name": "STERNER Malek", + "firstname": "Malek", + "lastname": "STERNER", + "playerid": "577633", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "RF", + "PA": 6, + "AB": 2, + "R": 1, + "H": 0, + "RBI": 0, + "BB": 3, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 1, + "CS": 0, + "SEASON": { + "PA": "13", + "AB": "10", + "H": "2", + "BB": "3", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".600", + "SLG": ".000", + "OPS": ".600", + "PO": 4, + "A": 1, + "E": 0 + }, + "1030": { + "name": "CZECH Tucker", + "firstname": "Tucker", + "lastname": "CZECH", + "playerid": "597690", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "DH", + "PA": 6, + "AB": 3, + "R": 2, + "H": 2, + "RBI": 2, + "BB": 2, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 1, + "SB": 3, + "CS": 0, + "SEASON": { + "PA": "26", + "AB": "23", + "H": "6", + "BB": "3", + "DOUBLE": "0", + "TRIPLE": "1", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".667", + "OBP": ".833", + "SLG": ".667", + "OPS": "1.500", + "PO": 0, + "A": 0, + "E": 0 + }, + "1031": { + "name": "FASTING Isak", + "firstname": "Isak", + "lastname": "FASTING", + "playerid": "577626", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "1B", + "PA": 0, + "AB": 0, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 0, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "20", + "AB": "17", + "H": "4", + "BB": "3", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".000", + "SLG": ".000", + "OPS": ".000", + "PO": 1, + "A": 0, + "E": 0 + }, + "1040": { + "name": "KENT Colton", + "firstname": "Colton", + "lastname": "KENT", + "playerid": "597688", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "3B/P", + "PA": 6, + "AB": 4, + "R": 1, + "H": 1, + "RBI": 2, + "BB": 2, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 1, + "CS": 0, + "SEASON": { + "PA": "18", + "AB": "18", + "H": "3", + "BB": "0", + "DOUBLE": "1", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".250", + "OBP": ".500", + "SLG": ".250", + "OPS": ".750", + "PO": 1, + "A": 2, + "E": 0 + }, + "1050": { + "name": "NORDLING Jakob", + "firstname": "Jakob", + "lastname": "NORDLING", + "playerid": "577629", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "1B/3B", + "PA": 6, + "AB": 4, + "R": 0, + "H": 1, + "RBI": 2, + "BB": 2, + "SO": 2, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "19", + "AB": "18", + "H": "1", + "BB": "0", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".250", + "OBP": ".500", + "SLG": ".250", + "OPS": ".750", + "PO": 4, + "A": 0, + "E": 0 + }, + "1060": { + "name": "ANDERSSON Olle", + "firstname": "Olle", + "lastname": "ANDERSSON", + "playerid": "577664", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "CF", + "PA": 6, + "AB": 4, + "R": 0, + "H": 1, + "RBI": 1, + "BB": 1, + "SO": 2, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 1, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "46", + "AB": "40", + "H": "12", + "BB": "5", + "DOUBLE": "1", + "TRIPLE": "0", + "HR": "0", + "SF": "1", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".250", + "OBP": ".500", + "SLG": ".250", + "OPS": ".750", + "PO": 0, + "A": 0, + "E": 1 + }, + "1070": { + "name": "BERG Teo", + "firstname": "Teo", + "lastname": "BERG", + "playerid": "577640", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "2B", + "PA": 6, + "AB": 4, + "R": 0, + "H": 0, + "RBI": 1, + "BB": 2, + "SO": 1, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 1, + "CS": 0, + "SEASON": { + "PA": "49", + "AB": "36", + "H": "4", + "BB": "10", + "DOUBLE": "1", + "TRIPLE": "0", + "HR": "0", + "SF": "1", + "HBP": "1" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".333", + "SLG": ".000", + "OPS": ".333", + "PO": 4, + "A": 2, + "E": 0 + }, + "1080": { + "name": "ÅNGSTRöM Dante", + "firstname": "Dante", + "lastname": "ÅNGSTRöM", + "playerid": "588515", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "SS", + "PA": 6, + "AB": 4, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 2, + "SO": 1, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "47", + "AB": "43", + "H": "4", + "BB": "4", + "DOUBLE": "1", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".333", + "SLG": ".000", + "OPS": ".333", + "PO": 0, + "A": 4, + "E": 1 + }, + "1090": { + "name": "MAALOUF Oliver", + "firstname": "Oliver", + "lastname": "MAALOUF", + "playerid": "577636", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "LF", + "PA": 3, + "AB": 1, + "R": 1, + "H": 0, + "RBI": 0, + "BB": 1, + "SO": 1, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "19", + "AB": "18", + "H": "3", + "BB": "1", + "DOUBLE": "1", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".500", + "SLG": ".000", + "OPS": ".500", + "PO": 1, + "A": 0, + "E": 0 + }, + "1091": { + "name": "LEJON Måns", + "firstname": "Måns", + "lastname": "LEJON", + "playerid": "577634", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "POS": "LF", + "PA": 2, + "AB": 1, + "R": 1, + "H": 0, + "RBI": 0, + "BB": 1, + "SO": 1, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "0", + "AB": "0", + "H": "0", + "BB": "0", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".500", + "SLG": ".000", + "OPS": ".500", + "PO": 0, + "A": 0, + "E": 0 + }, + "1901": { + "name": "SJöRS Per", + "firstname": "Per", + "lastname": "SJöRS", + "playerid": "597691", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "PITCHIP": "4.2", + "PITCHER": 5, + "PITCHR": 5, + "PITCHH": 5, + "PITCHBB": 4, + "PITCHSO": 4, + "PITCHES": 102, + "STRIKES": 53, + "PITCHOUTS": 14, + "SEASON": { + "PITCHER": "5", + "PITCHOUTS": "12", + "PITCHBB": "3", + "PITCHSO": "1" + }, + "ERA": "9.64", + "PO": 0, + "A": 0, + "E": 0 + }, + "1902": { + "name": "MARKSTRöM Oliver", + "firstname": "Oliver", + "lastname": "MARKSTRöM", + "playerid": "577637", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "PITCHIP": "2.2", + "PITCHER": 6, + "PITCHR": 6, + "PITCHH": 6, + "PITCHBB": 3, + "PITCHSO": 4, + "PITCHES": 51, + "STRIKES": 30, + "PITCHOUTS": 8, + "SEASON": { + "PITCHER": "19", + "PITCHOUTS": "19", + "PITCHBB": "13", + "PITCHSO": "2" + }, + "ERA": "20.25", + "PO": 0, + "A": 0, + "E": 0 + }, + "1903": { + "name": "KENT Colton", + "firstname": "Colton", + "lastname": "KENT", + "playerid": "597688", + "teamid": "35723", + "teamcode": "LEK", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "PITCHIP": "0.2", + "PITCHER": 0, + "PITCHR": 0, + "PITCHH": 0, + "PITCHBB": 0, + "PITCHSO": 1, + "PITCHES": 5, + "STRIKES": 4, + "PITCHOUTS": 2, + "SEASON": { + "PITCHER": "1", + "PITCHOUTS": "6", + "PITCHBB": "0", + "PITCHSO": "6" + }, + "ERA": "0.00", + "PO": 0, + "A": 0, + "E": 0 + }, + "2010": { + "name": "SEQUERA Fernando José", + "firstname": "Fernando José", + "lastname": "SEQUERA", + "playerid": "595813", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/adc26505-2595-7bf2-48cb-b3c1c84174b7.jpg", + "inplay": "", + "reentry": 0, + "POS": "CF/P", + "PA": 5, + "AB": 5, + "R": 0, + "H": 1, + "RBI": 1, + "BB": 0, + "SO": 2, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "57", + "AB": "40", + "H": "10", + "BB": "12", + "DOUBLE": "1", + "TRIPLE": "1", + "HR": "0", + "SF": "1", + "HBP": "3" + }, + "LOB": 0, + "AVG": ".200", + "OBP": ".200", + "SLG": ".200", + "OPS": ".400", + "PO": 1, + "A": 2, + "E": 0 + }, + "2020": { + "name": "JELLNOR Lukas", + "firstname": "Lukas", + "lastname": "JELLNOR", + "playerid": "588446", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/6f7248ad-cb66-cedb-1ddb-60834a1349db.jpg", + "inplay": "", + "reentry": 0, + "POS": "C/1B", + "PA": 5, + "AB": 4, + "R": 2, + "H": 2, + "RBI": 1, + "BB": 1, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "68", + "AB": "57", + "H": "19", + "BB": "11", + "DOUBLE": "4", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".500", + "OBP": ".600", + "SLG": ".500", + "OPS": "1.100", + "PO": 8, + "A": 0, + "E": 0 + }, + "2030": { + "name": "CASTILLO Anthony", + "firstname": "Anthony", + "lastname": "CASTILLO", + "playerid": "588464", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/3d4b25cd-cfd9-4c06-6acf-85585914698a.jpg", + "inplay": "", + "reentry": 0, + "POS": "2B/3B/2B", + "PA": 5, + "AB": 4, + "R": 2, + "H": 1, + "RBI": 0, + "BB": 1, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "51", + "AB": "44", + "H": "19", + "BB": "6", + "DOUBLE": "4", + "TRIPLE": "1", + "HR": "0", + "SF": "1", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".250", + "OBP": ".400", + "SLG": ".250", + "OPS": ".650", + "PO": 0, + "A": 1, + "E": 0 + }, + "2040": { + "name": "HERNANDEZ José", + "firstname": "José", + "lastname": "HERNANDEZ", + "playerid": "595809", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/7f0954fb-3801-e135-30ea-1afc8e299a8c.jpg", + "inplay": "", + "reentry": 0, + "POS": "SS", + "PA": 5, + "AB": 4, + "R": 2, + "H": 3, + "RBI": 2, + "BB": 0, + "SO": 1, + "DOUBLE": 1, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 1, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "59", + "AB": "49", + "H": "25", + "BB": "7", + "DOUBLE": "4", + "TRIPLE": "1", + "HR": "1", + "SF": "1", + "HBP": "2" + }, + "LOB": 0, + "AVG": ".750", + "OBP": ".800", + "SLG": "1.000", + "OPS": "1.800", + "PO": 3, + "A": 1, + "E": 2 + }, + "2050": { + "name": "SJöLUND Linus", + "firstname": "Linus", + "lastname": "SJöLUND", + "playerid": "588460", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/196a8def-450b-2081-984d-0be9e90205a1.jpg", + "inplay": "", + "reentry": 0, + "POS": "DH", + "PA": 2, + "AB": 2, + "R": 1, + "H": 1, + "RBI": 0, + "BB": 0, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "37", + "AB": "28", + "H": "11", + "BB": "5", + "DOUBLE": "3", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "4" + }, + "LOB": 0, + "AVG": ".500", + "OBP": ".500", + "SLG": ".500", + "OPS": "1.000", + "PO": 0, + "A": 0, + "E": 0 + }, + "2051": { + "name": "LINDGREN Henry", + "firstname": "Henry", + "lastname": "LINDGREN", + "playerid": "588456", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/ab775ad2-b4d5-0d58-77ff-7296a6ede024.jpg", + "inplay": "", + "reentry": 0, + "POS": "RF", + "PA": 3, + "AB": 2, + "R": 2, + "H": 0, + "RBI": 0, + "BB": 1, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 1, + "CS": 0, + "SEASON": { + "PA": "11", + "AB": "11", + "H": "1", + "BB": "0", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".333", + "SLG": ".000", + "OPS": ".333", + "PO": 1, + "A": 1, + "E": 0 + }, + "2060": { + "name": "ESTATI Bryan", + "firstname": "Bryan", + "lastname": "ESTATI", + "playerid": "588451", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/54b7ae2c-c086-3645-89d1-bb7db6c9332d.jpg", + "inplay": "", + "reentry": 0, + "POS": "3B/P/3B", + "PA": 5, + "AB": 4, + "R": 0, + "H": 1, + "RBI": 1, + "BB": 1, + "SO": 2, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "42", + "AB": "33", + "H": "9", + "BB": "7", + "DOUBLE": "2", + "TRIPLE": "0", + "HR": "2", + "SF": "1", + "HBP": "1" + }, + "LOB": 0, + "AVG": ".250", + "OBP": ".400", + "SLG": ".250", + "OPS": ".650", + "PO": 1, + "A": 5, + "E": 1 + }, + "2070": { + "name": "FLEMING Braizell", + "firstname": "Braizell", + "lastname": "FLEMING", + "playerid": "595817", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/37debb5e-edd0-fb9d-9c82-72b29489b70b.jpg", + "inplay": "", + "reentry": 0, + "POS": "RF/2B/CF", + "PA": 5, + "AB": 3, + "R": 1, + "H": 2, + "RBI": 1, + "BB": 2, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 2, + "CS": 0, + "SEASON": { + "PA": "35", + "AB": "30", + "H": "9", + "BB": "2", + "DOUBLE": "2", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "3" + }, + "LOB": 0, + "AVG": ".667", + "OBP": ".800", + "SLG": ".667", + "OPS": "1.467", + "PO": 3, + "A": 2, + "E": 0 + }, + "2080": { + "name": "SOUTHERINGTON Max", + "firstname": "Max", + "lastname": "SOUTHERINGTON", + "playerid": "588447", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/304e6373-0c75-ecb8-e115-002e8cfc4682.jpg", + "inplay": "", + "reentry": 0, + "POS": "1B", + "PA": 2, + "AB": 1, + "R": 1, + "H": 0, + "RBI": 1, + "BB": 1, + "SO": 0, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 0, + "SB": 1, + "CS": 0, + "SEASON": { + "PA": "30", + "AB": "24", + "H": "4", + "BB": "4", + "DOUBLE": "0", + "TRIPLE": "1", + "HR": "0", + "SF": "1", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".500", + "SLG": ".000", + "OPS": ".500", + "PO": 5, + "A": 0, + "E": 0 + }, + "2081": { + "name": "KAWADA Osuto", + "firstname": "Osuto", + "lastname": "KAWADA", + "playerid": "586187", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/cca099b5-6e7f-3d49-b581-7641c751c91e.jpg", + "inplay": "", + "reentry": 0, + "POS": "C", + "PA": 3, + "AB": 2, + "R": 0, + "H": 0, + "RBI": 1, + "BB": 0, + "SO": 2, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 1, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "45", + "AB": "41", + "H": "6", + "BB": "4", + "DOUBLE": "2", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".333", + "SLG": ".000", + "OPS": ".333", + "PO": 5, + "A": 0, + "E": 1 + }, + "2090": { + "name": "BENGTSSON Axel", + "firstname": "Axel", + "lastname": "BENGTSSON", + "playerid": "588450", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/405e9d50-6e15-7f3a-b22a-63898437f3d4.jpg", + "inplay": "", + "reentry": 0, + "POS": "LF", + "PA": 5, + "AB": 4, + "R": 0, + "H": 0, + "RBI": 0, + "BB": 0, + "SO": 2, + "DOUBLE": 0, + "TRIPLE": 0, + "HR": 0, + "SF": 0, + "HBP": 1, + "SB": 0, + "CS": 0, + "SEASON": { + "PA": "8", + "AB": "7", + "H": "1", + "BB": "1", + "DOUBLE": "0", + "TRIPLE": "0", + "HR": "0", + "SF": "0", + "HBP": "0" + }, + "LOB": 0, + "AVG": ".000", + "OBP": ".200", + "SLG": ".000", + "OPS": ".200", + "PO": 0, + "A": 0, + "E": 0 + }, + "2901": { + "name": "MARQVARDSEN Povl Erik", + "firstname": "Povl Erik", + "lastname": "MARQVARDSEN", + "playerid": "616846", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://static.wbsc.org/assets/images/default-player.jpg", + "inplay": "", + "reentry": 0, + "PITCHIP": "4.0", + "PITCHER": 4, + "PITCHR": 4, + "PITCHH": 2, + "PITCHBB": 8, + "PITCHSO": 4, + "PITCHES": 98, + "STRIKES": 47, + "PITCHOUTS": 12, + "SEASON": { + "PITCHER": "1", + "PITCHOUTS": "24", + "PITCHBB": "6", + "PITCHSO": "8" + }, + "ERA": "9.00", + "PO": 0, + "A": 1, + "E": 0 + }, + "2902": { + "name": "ESTATI Bryan", + "firstname": "Bryan", + "lastname": "ESTATI", + "playerid": "588451", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/54b7ae2c-c086-3645-89d1-bb7db6c9332d.jpg", + "inplay": "", + "reentry": 0, + "PITCHIP": "3.0", + "PITCHER": 3, + "PITCHR": 3, + "PITCHH": 2, + "PITCHBB": 7, + "PITCHSO": 4, + "PITCHES": 72, + "STRIKES": 28, + "PITCHOUTS": 9, + "SEASON": { + "PITCHER": "1", + "PITCHOUTS": "2", + "PITCHBB": "2", + "PITCHSO": "0" + }, + "ERA": "9.00", + "PO": 0, + "A": 0, + "E": 0 + }, + "2903": { + "name": "SEQUERA Fernando José", + "firstname": "Fernando José", + "lastname": "SEQUERA", + "playerid": "595813", + "teamid": "35726", + "teamcode": "SUN", + "image": "https://s3-eu-west-1.amazonaws.com/static.wbsc.org/uploads/federations/34/photos/adc26505-2595-7bf2-48cb-b3c1c84174b7.jpg", + "inplay": "", + "reentry": 0, + "PITCHIP": "2.0", + "PITCHER": 0, + "PITCHR": 2, + "PITCHH": 1, + "PITCHBB": 3, + "PITCHSO": 1, + "PITCHES": 43, + "STRIKES": 20, + "PITCHOUTS": 6, + "SEASON": { + "PITCHER": "17", + "PITCHOUTS": "43", + "PITCHBB": "13", + "PITCHSO": "8" + }, + "ERA": "0.00", + "PO": 0, + "A": 0, + "E": 0 + } + }, + "linescore": { + "awayruns": [ + null, + 2, + 1, + 0, + 1, + 0, + 2, + 1, + 2, + 0 + ], + "awaytotals": { + "R": 9, + "H": 5, + "E": 2, + "LOB": 17 + }, + "homeruns": [ + null, + 0, + 0, + 1, + 2, + 2, + 1, + 1, + 4, + "X" + ], + "hometotals": { + "R": 11, + "H": 11, + "E": 4, + "LOB": 10 + } + }, + "animation": { + "batter": 0, + "strike": 0, + "ball": 0 + }, + "playdata": [ + { + "t": "1754157653699", + "p": "2903", + "n": "GAME OVER
SUN wins 11-9
Win: SEQUERA
Loss: MARKSTRöM
undefined", + "b": "1091", + "a": "100", + "r1": "0", + "r2": "0", + "i": "9", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754157574142", + "p": "2903", + "n": "ÅNGSTRöM Dante flies out to right field. L9. ANDERSSON Olle out at 2nd 946. Double Play. 3 out. ", + "b": "1080", + "a": "99", + "r1": "9", + "r2": "4", + "i": "9", + "x": "6", + "y": "49", + "hd": "30", + "hp": "195", + "hl": "20" + }, + { + "t": "1754157520352", + "p": "2903", + "n": "BERG Teo grounds out 1-3. ANDERSSON Olle to 2nd. 1 out. ", + "b": "1070", + "a": "98", + "r1": "9", + "r2": "3", + "i": "9", + "x": "-3", + "y": "25", + "hd": "-14", + "hp": "49", + "hl": "0" + }, + { + "t": "1754157495618", + "p": "2903", + "n": "Called Strike 1. ", + "b": "1070", + "a": "98", + "r1": "4", + "r2": "0", + "i": "9", + "x": "-15", + "y": "17", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754157467053", + "p": "2903", + "n": "ANDERSSON Olle singles to left field. ", + "b": "1060", + "a": "97", + "r1": "9", + "r2": "18", + "i": "9", + "x": "-19", + "y": "46", + "hd": "-34", + "hp": "158", + "hl": "50" + }, + { + "t": "1754157443584", + "p": "2903", + "n": "Ball 3. ", + "b": "1060", + "a": "97", + "r1": "2", + "r2": "0", + "i": "9", + "x": "39", + "y": "34", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754157431214", + "p": "2903", + "n": "Called Strike 2. ", + "b": "1060", + "a": "97", + "r1": "4", + "r2": "0", + "i": "9", + "x": "-13", + "y": "23", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754157420068", + "p": "2903", + "n": "Ball 2. ", + "b": "1060", + "a": "97", + "r1": "2", + "r2": "0", + "i": "9", + "x": "38", + "y": "34", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754157403200", + "p": "2903", + "n": "Ball 1. ", + "b": "1060", + "a": "97", + "r1": "2", + "r2": "0", + "i": "9", + "x": "30", + "y": "2", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754157381049", + "p": "2903", + "n": "Swinging Strike 1. ", + "b": "1060", + "a": "97", + "r1": "5", + "r2": "0", + "i": "9", + "x": "13", + "y": "31", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754157381049", + "p": 0, + "n": "***TOP 9", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "9", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1754157271410", + "p": "1903", + "n": "End of the 8th
4 runs, 1 lob", + "b": "2010", + "a": "97", + "r1": "0", + "r2": "0", + "i": "8", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754157260374", + "p": "1903", + "n": "BENGTSSON Axel flies out foul. FF3. 3 out. ", + "b": "2090", + "a": "96", + "r1": "9", + "r2": "4", + "i": "8", + "x": "16", + "y": "46", + "hd": "56", + "hp": "90", + "hl": "50" + }, + { + "t": "1754157225092", + "p": "1903", + "n": "KAWADA Osuto strikes out swinging. 2 out. ", + "b": "2081", + "a": "95", + "r1": "5", + "r2": "2", + "i": "8", + "x": "-12", + "y": "31", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754157197186", + "p": "1903", + "n": "Foul. ", + "b": "2081", + "a": "95", + "r1": "6", + "r2": "0", + "i": "8", + "x": "-16", + "y": "32", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754157182957", + "p": "1903", + "n": "Ball 1. ", + "b": "2081", + "a": "95", + "r1": "2", + "r2": "0", + "i": "8", + "x": "35", + "y": "7", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754157176795", + "p": "1903", + "n": "Pickoff Attempt at 1st", + "b": "2081", + "a": "95", + "r1": "0", + "r2": "0", + "i": "8", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754157160891", + "p": "1903", + "n": "LINDGREN Henry scores on stolen base. ", + "b": "2081", + "a": "95", + "r1": "0", + "r2": "0", + "i": "8", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754157149515", + "p": "1903", + "n": "Called Strike 1. ", + "b": "2081", + "a": "95", + "r1": "4", + "r2": "0", + "i": "8", + "x": "-16", + "y": "14", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754157130396", + "p": "1903", + "n": "Pickoff Attempt at 1st", + "b": "2081", + "a": "95", + "r1": "0", + "r2": "0", + "i": "8", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": 0, + "p": 0, + "n": "Defensive Substitution: #0 FASTING for #10 CZECH at 1B", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 8 + }, + { + "t": 0, + "p": 0, + "n": "Defensive Change: #36 NORDLING to 3B", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 8 + }, + { + "t": 0, + "p": 0, + "n": "Pitching Change: #25 KENT for #13 MARKSTRöM", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 8 + }, + { + "t": "1754156916739", + "p": "1902", + "n": "FLEMING Braizell singles to right center. LINDGREN Henry to 3rd. ", + "b": "2070", + "a": "94", + "r1": "9", + "r2": "18", + "i": "8", + "x": "-12", + "y": "53", + "hd": "10", + "hp": "151", + "hl": "35" + }, + { + "t": "1754156896536", + "p": "1902", + "n": "Swinging Strike 1. ", + "b": "2070", + "a": "94", + "r1": "5", + "r2": "0", + "i": "8", + "x": "-16", + "y": "60", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156889554", + "p": "1902", + "n": "Ball 1. ", + "b": "2070", + "a": "94", + "r1": "2", + "r2": "0", + "i": "8", + "x": "32", + "y": "50", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156838860", + "p": "1902", + "n": "ESTATI Bryan flies out to right field. F9. 1 out. ", + "b": "2060", + "a": "93", + "r1": "9", + "r2": "4", + "i": "8", + "x": "10", + "y": "64", + "hd": "30", + "hp": "173", + "hl": "50" + }, + { + "t": "1754156776774", + "p": "1902", + "n": "Coaching Visit", + "b": "2060", + "a": "93", + "r1": "0", + "r2": "0", + "i": "8", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156746188", + "p": "1902", + "n": "LINDGREN Henry walks. ", + "b": "2051", + "a": "92", + "r1": "2", + "r2": "13", + "i": "8", + "x": "37", + "y": "44", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156731629", + "p": "1902", + "n": "Ball 3. ", + "b": "2051", + "a": "92", + "r1": "2", + "r2": "0", + "i": "8", + "x": "30", + "y": "57", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156711243", + "p": "1902", + "n": "Ball 2. HERNANDEZ José scores on wild pitch. ", + "b": "2051", + "a": "92", + "r1": "2", + "r2": "0", + "i": "8", + "x": "35", + "y": "3", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156708812", + "p": "1902", + "n": "Ball 1. ", + "b": "2051", + "a": "92", + "r1": "2", + "r2": "0", + "i": "8", + "x": "32", + "y": "68", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156652659", + "p": "1902", + "n": "HERNANDEZ José singles to left center. JELLNOR Lukas scores. CASTILLO Anthony to 2nd. CASTILLO Anthony scores on E8. HERNANDEZ José to 3rd on E8. 1 RBI. ", + "b": "2040", + "a": "91", + "r1": "9", + "r2": "18", + "i": "8", + "x": "13", + "y": "51", + "hd": "-10", + "hp": "179", + "hl": "20" + }, + { + "t": "1754156611824", + "p": "1902", + "n": "Called Strike 1. ", + "b": "2040", + "a": "91", + "r1": "4", + "r2": "0", + "i": "8", + "x": "-16", + "y": "24", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156587255", + "p": "1902", + "n": "Ball 1. ", + "b": "2040", + "a": "91", + "r1": "2", + "r2": "0", + "i": "8", + "x": "30", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156542135", + "p": "1902", + "n": "CASTILLO Anthony singles to center field. JELLNOR Lukas to 2nd. ", + "b": "2030", + "a": "90", + "r1": "9", + "r2": "18", + "i": "8", + "x": "4", + "y": "48", + "hd": "2", + "hp": "179", + "hl": "20" + }, + { + "t": "1754156505900", + "p": "1902", + "n": "JELLNOR Lukas singles to center field. ", + "b": "2020", + "a": "89", + "r1": "9", + "r2": "18", + "i": "8", + "x": "-9", + "y": "47", + "hd": "0", + "hp": "179", + "hl": "20" + }, + { + "t": "1754156486016", + "p": "1902", + "n": "Ball 1. ", + "b": "2020", + "a": "89", + "r1": "2", + "r2": "0", + "i": "8", + "x": "33", + "y": "44", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156486016", + "p": 0, + "n": "***BOT 8", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "8", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1754156357600", + "p": "2903", + "n": "Middle of the 8th
2 runs, 3 lob", + "b": "1060", + "a": "89", + "r1": "0", + "r2": "0", + "i": "8", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156356024", + "p": "2903", + "n": "NORDLING Jakob strikes out looking. 3 out. ", + "b": "1050", + "a": "88", + "r1": "4", + "r2": "1", + "i": "8", + "x": "14", + "y": "36", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156314735", + "p": "2903", + "n": "Foul. ", + "b": "1050", + "a": "88", + "r1": "6", + "r2": "0", + "i": "8", + "x": "2", + "y": "60", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156295821", + "p": "2903", + "n": "Called Strike 2. ", + "b": "1050", + "a": "88", + "r1": "4", + "r2": "0", + "i": "8", + "x": "-7", + "y": "25", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156282669", + "p": "2903", + "n": "Called Strike 1. ", + "b": "1050", + "a": "88", + "r1": "4", + "r2": "0", + "i": "8", + "x": "-10", + "y": "15", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156261020", + "p": "2903", + "n": "Ball 3. ", + "b": "1050", + "a": "88", + "r1": "2", + "r2": "0", + "i": "8", + "x": "38", + "y": "33", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156256149", + "p": "2903", + "n": "Coaching Visit", + "b": "1050", + "a": "88", + "r1": "0", + "r2": "0", + "i": "8", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156223367", + "p": "2903", + "n": "Ball 2. ", + "b": "1050", + "a": "88", + "r1": "2", + "r2": "0", + "i": "8", + "x": "38", + "y": "29", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156209745", + "p": "2903", + "n": "Ball 1. ", + "b": "1050", + "a": "88", + "r1": "2", + "r2": "0", + "i": "8", + "x": "37", + "y": "12", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156182607", + "p": "2903", + "n": "KENT Colton walks. NORDSELL Elias scores. STERNER Malek to 3rd. CZECH Tucker to 2nd. 1 RBI. ", + "b": "1040", + "a": "87", + "r1": "2", + "r2": "13", + "i": "8", + "x": "36", + "y": "44", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156148464", + "p": "2903", + "n": "Ball 3. ", + "b": "1040", + "a": "87", + "r1": "2", + "r2": "0", + "i": "8", + "x": "37", + "y": "18", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156133667", + "p": "2903", + "n": "Swinging Strike 1. ", + "b": "1040", + "a": "87", + "r1": "5", + "r2": "0", + "i": "8", + "x": "2", + "y": "45", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156121433", + "p": "2903", + "n": "Ball 2. ", + "b": "1040", + "a": "87", + "r1": "2", + "r2": "0", + "i": "8", + "x": "37", + "y": "3", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156097740", + "p": "2903", + "n": "Ball 1. ", + "b": "1040", + "a": "87", + "r1": "2", + "r2": "0", + "i": "8", + "x": "36", + "y": "61", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156067358", + "p": "2903", + "n": "CZECH Tucker walks. ", + "b": "1030", + "a": "86", + "r1": "2", + "r2": "13", + "i": "8", + "x": "36", + "y": "19", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156050591", + "p": "2903", + "n": "Ball 3. ", + "b": "1030", + "a": "86", + "r1": "2", + "r2": "0", + "i": "8", + "x": "31", + "y": "32", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156040260", + "p": "2903", + "n": "Ball 2. ", + "b": "1030", + "a": "86", + "r1": "2", + "r2": "0", + "i": "8", + "x": "30", + "y": "69", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754156029867", + "p": "2903", + "n": "Ball 1. LEJON Måns scores on wild pitch. NORDSELL Elias to 3rd on wild pitch. STERNER Malek to 2nd on wild pitch. ", + "b": "1030", + "a": "86", + "r1": "2", + "r2": "0", + "i": "8", + "x": "39", + "y": "52", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155974646", + "p": "2903", + "n": "STERNER Malek reaches on fielding error. E6. LEJON Måns to 3rd. NORDSELL Elias to 2nd. ", + "b": "1020", + "a": "85", + "r1": "9", + "r2": "12", + "i": "8", + "x": "-10", + "y": "28", + "hd": "-15", + "hp": "113", + "hl": "0" + }, + { + "t": "1754155942353", + "p": "2903", + "n": "Ball 1. ", + "b": "1020", + "a": "85", + "r1": "2", + "r2": "0", + "i": "8", + "x": "37", + "y": "18", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155927347", + "p": "2903", + "n": "Called Strike 1. ", + "b": "1020", + "a": "85", + "r1": "4", + "r2": "0", + "i": "8", + "x": "5", + "y": "54", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155883549", + "p": "2903", + "n": "NORDSELL Elias Hit By Pitch. ", + "b": "1010", + "a": "84", + "r1": "3", + "r2": "15", + "i": "8", + "x": "-52", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155842033", + "p": "2903", + "n": "Foul. ", + "b": "1010", + "a": "84", + "r1": "6", + "r2": "0", + "i": "8", + "x": "-19", + "y": "48", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155818968", + "p": "2903", + "n": "Ball 2. LEJON Måns to 2nd on wild pitch. ", + "b": "1010", + "a": "84", + "r1": "2", + "r2": "0", + "i": "8", + "x": "38", + "y": "4", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155791413", + "p": "2903", + "n": "Foul. ", + "b": "1010", + "a": "84", + "r1": "6", + "r2": "0", + "i": "8", + "x": "8", + "y": "30", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155778860", + "p": "2903", + "n": "Ball 1. ", + "b": "1010", + "a": "84", + "r1": "2", + "r2": "0", + "i": "8", + "x": "34", + "y": "30", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155757544", + "p": "2903", + "n": "Foul. ", + "b": "1010", + "a": "84", + "r1": "6", + "r2": "0", + "i": "8", + "x": "1", + "y": "55", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155726360", + "p": "2903", + "n": "LEJON Måns walks. ", + "b": "1091", + "a": "83", + "r1": "2", + "r2": "13", + "i": "8", + "x": "36", + "y": "42", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155708009", + "p": "2903", + "n": "Ball 3. ", + "b": "1091", + "a": "83", + "r1": "2", + "r2": "0", + "i": "8", + "x": "32", + "y": "65", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155690962", + "p": "2903", + "n": "Foul. ", + "b": "1091", + "a": "83", + "r1": "6", + "r2": "0", + "i": "8", + "x": "-11", + "y": "12", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155681070", + "p": "2903", + "n": "Ball 2. ", + "b": "1091", + "a": "83", + "r1": "2", + "r2": "0", + "i": "8", + "x": "37", + "y": "21", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155665494", + "p": "2903", + "n": "Ball 1. ", + "b": "1091", + "a": "83", + "r1": "2", + "r2": "0", + "i": "8", + "x": "35", + "y": "60", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155638481", + "p": "2903", + "n": "ÅNGSTRöM Dante grounds out 6-3. 2 out. ", + "b": "1080", + "a": "82", + "r1": "9", + "r2": "3", + "i": "8", + "x": "-17", + "y": "27", + "hd": "-15", + "hp": "113", + "hl": "0" + }, + { + "t": "1754155616496", + "p": "2903", + "n": "Called Strike 1. ", + "b": "1080", + "a": "82", + "r1": "4", + "r2": "0", + "i": "8", + "x": "5", + "y": "31", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155575815", + "p": "2903", + "n": "Ball 1. BERG Teo out at 2nd PO16. 1 out. ", + "b": "1080", + "a": "82", + "r1": "2", + "r2": "0", + "i": "8", + "x": "39", + "y": "54", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155530759", + "p": "2903", + "n": "BERG Teo reaches on throwing error. E6T. BERG Teo to 2nd. ", + "b": "1070", + "a": "81", + "r1": "9", + "r2": "12", + "i": "8", + "x": "-3", + "y": "14", + "hd": "-15", + "hp": "113", + "hl": "0" + }, + { + "t": 0, + "p": 0, + "n": "Defensive Change: #19 FLEMING to CF", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 8 + }, + { + "t": 0, + "p": 0, + "n": "Defensive Change: #3 CASTILLO to 2B", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 8 + }, + { + "t": 0, + "p": 0, + "n": "Defensive Change: #23 ESTATI to 3B", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 8 + }, + { + "t": 0, + "p": 0, + "n": "Pitching Change: #38 SEQUERA for #23 ESTATI", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 8 + }, + { + "t": "1754155530759", + "p": 0, + "n": "***TOP 8", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "8", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1754155253188", + "p": "1902", + "n": "End of the 7th
1 runs, 1 lob", + "b": "2020", + "a": "80", + "r1": "0", + "r2": "0", + "i": "7", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155202949", + "p": "1902", + "n": "SEQUERA Fernando José singles through the right side. FLEMING Braizell scores. BENGTSSON Axel to 2nd. BENGTSSON Axel out at 3rd 95. 3 out. 1 RBI. ", + "b": "2010", + "a": "79", + "r1": "9", + "r2": "18", + "i": "7", + "x": "16", + "y": "18", + "hd": "24", + "hp": "179", + "hl": "0" + }, + { + "t": "1754155143380", + "p": "1902", + "n": "BENGTSSON Axel Hit By Pitch. ", + "b": "2090", + "a": "78", + "r1": "3", + "r2": "15", + "i": "7", + "x": "-58", + "y": "52", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155118367", + "p": "1902", + "n": "Ball 1. ", + "b": "2090", + "a": "78", + "r1": "2", + "r2": "0", + "i": "7", + "x": "34", + "y": "8", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155096346", + "p": "1902", + "n": "KAWADA Osuto strikes out swinging. 2 out. ", + "b": "2081", + "a": "77", + "r1": "5", + "r2": "2", + "i": "7", + "x": "-9", + "y": "55", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155082801", + "p": "1902", + "n": "Called Strike 2. FLEMING Braizell to 3rd on stolen base. ", + "b": "2081", + "a": "77", + "r1": "4", + "r2": "0", + "i": "7", + "x": "0", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155042292", + "p": "1902", + "n": "Ball 1. FLEMING Braizell to 2nd on stolen base. ", + "b": "2081", + "a": "77", + "r1": "2", + "r2": "0", + "i": "7", + "x": "33", + "y": "63", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754155022691", + "p": "1902", + "n": "Called Strike 1. ", + "b": "2081", + "a": "77", + "r1": "4", + "r2": "0", + "i": "7", + "x": "17", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154984057", + "p": "1902", + "n": "FLEMING Braizell walks. ", + "b": "2070", + "a": "76", + "r1": "2", + "r2": "13", + "i": "7", + "x": "33", + "y": "8", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154963155", + "p": "1902", + "n": "Foul. ", + "b": "2070", + "a": "76", + "r1": "6", + "r2": "0", + "i": "7", + "x": "-5", + "y": "40", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154949556", + "p": "1902", + "n": "Ball 3. ", + "b": "2070", + "a": "76", + "r1": "2", + "r2": "0", + "i": "7", + "x": "31", + "y": "45", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154933618", + "p": "1902", + "n": "Foul. ", + "b": "2070", + "a": "76", + "r1": "6", + "r2": "0", + "i": "7", + "x": "-1", + "y": "24", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154916667", + "p": "1902", + "n": "Ball 2. ", + "b": "2070", + "a": "76", + "r1": "2", + "r2": "0", + "i": "7", + "x": "36", + "y": "68", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154902002", + "p": "1902", + "n": "Swinging Strike 1. ", + "b": "2070", + "a": "76", + "r1": "5", + "r2": "0", + "i": "7", + "x": "9", + "y": "23", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154891714", + "p": "1902", + "n": "Ball 1. ", + "b": "2070", + "a": "76", + "r1": "2", + "r2": "0", + "i": "7", + "x": "37", + "y": "23", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154864513", + "p": "1902", + "n": "ESTATI Bryan strikes out swinging. 1 out. ", + "b": "2060", + "a": "75", + "r1": "5", + "r2": "2", + "i": "7", + "x": "-3", + "y": "37", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154849533", + "p": "1902", + "n": "Swinging Strike 2. ", + "b": "2060", + "a": "75", + "r1": "5", + "r2": "0", + "i": "7", + "x": "12", + "y": "60", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154835407", + "p": "1902", + "n": "Ball 3. ", + "b": "2060", + "a": "75", + "r1": "2", + "r2": "0", + "i": "7", + "x": "34", + "y": "67", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154824346", + "p": "1902", + "n": "Ball 2. ", + "b": "2060", + "a": "75", + "r1": "2", + "r2": "0", + "i": "7", + "x": "35", + "y": "2", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154806580", + "p": "1902", + "n": "Foul. ", + "b": "2060", + "a": "75", + "r1": "6", + "r2": "0", + "i": "7", + "x": "18", + "y": "49", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154792330", + "p": "1902", + "n": "Ball 1. ", + "b": "2060", + "a": "75", + "r1": "2", + "r2": "0", + "i": "7", + "x": "36", + "y": "35", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154792330", + "p": 0, + "n": "***BOT 7", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "7", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1754154671565", + "p": "2902", + "n": "Middle of the 7th
1 runs, 3 lob", + "b": "1070", + "a": "75", + "r1": "0", + "r2": "0", + "i": "7", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154670118", + "p": "2902", + "n": "ANDERSSON Olle strikes out swinging. 3 out. ", + "b": "1060", + "a": "74", + "r1": "5", + "r2": "2", + "i": "7", + "x": "-5", + "y": "40", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154650204", + "p": "2902", + "n": "Ball 3. ", + "b": "1060", + "a": "74", + "r1": "2", + "r2": "0", + "i": "7", + "x": "39", + "y": "9", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154630853", + "p": "2902", + "n": "Ball 2. ", + "b": "1060", + "a": "74", + "r1": "2", + "r2": "0", + "i": "7", + "x": "30", + "y": "11", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154618849", + "p": "2902", + "n": "Called Strike 2. ", + "b": "1060", + "a": "74", + "r1": "4", + "r2": "0", + "i": "7", + "x": "2", + "y": "20", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154608032", + "p": "2902", + "n": "Called Strike 1. ", + "b": "1060", + "a": "74", + "r1": "4", + "r2": "0", + "i": "7", + "x": "-10", + "y": "17", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154597989", + "p": "2902", + "n": "Ball 1. ", + "b": "1060", + "a": "74", + "r1": "2", + "r2": "0", + "i": "7", + "x": "37", + "y": "53", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154553076", + "p": "2902", + "n": "NORDLING Jakob walks. ", + "b": "1050", + "a": "73", + "r1": "2", + "r2": "13", + "i": "7", + "x": "36", + "y": "55", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154540416", + "p": "2902", + "n": "Ball 3. ", + "b": "1050", + "a": "73", + "r1": "2", + "r2": "0", + "i": "7", + "x": "39", + "y": "25", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154523616", + "p": "2902", + "n": "Ball 2. CZECH Tucker to 2nd on stolen base. ", + "b": "1050", + "a": "73", + "r1": "2", + "r2": "0", + "i": "7", + "x": "31", + "y": "3", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154504781", + "p": "2902", + "n": "Ball 1. ", + "b": "1050", + "a": "73", + "r1": "2", + "r2": "0", + "i": "7", + "x": "30", + "y": "23", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154500892", + "p": "2902", + "n": "Pickoff Attempt at 1st", + "b": "1050", + "a": "73", + "r1": "0", + "r2": "0", + "i": "7", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154468812", + "p": "2902", + "n": "Swinging Strike 1. ", + "b": "1050", + "a": "73", + "r1": "5", + "r2": "0", + "i": "7", + "x": "-19", + "y": "57", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154423405", + "p": "2902", + "n": "KENT Colton flies out. P6. 2 out. ", + "b": "1040", + "a": "72", + "r1": "9", + "r2": "4", + "i": "7", + "x": "-8", + "y": "62", + "hd": "-15", + "hp": "113", + "hl": "70" + }, + { + "t": "1754154385706", + "p": "2902", + "n": "Foul. ", + "b": "1040", + "a": "72", + "r1": "6", + "r2": "0", + "i": "7", + "x": "9", + "y": "35", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154347556", + "p": "2902", + "n": "CZECH Tucker singles to center field. NORDSELL Elias scores. STERNER Malek to 3rd. 1 RBI. ", + "b": "1030", + "a": "71", + "r1": "9", + "r2": "18", + "i": "7", + "x": "18", + "y": "45", + "hd": "5", + "hp": "220", + "hl": "20" + }, + { + "t": "1754154311458", + "p": "2902", + "n": "Ball 2. STERNER Malek to 2nd on stolen base. ", + "b": "1030", + "a": "71", + "r1": "2", + "r2": "0", + "i": "7", + "x": "33", + "y": "69", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154296120", + "p": "2902", + "n": "Ball 1. ", + "b": "1030", + "a": "71", + "r1": "2", + "r2": "0", + "i": "7", + "x": "30", + "y": "14", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154275284", + "p": "2902", + "n": "STERNER Malek walks. ", + "b": "1020", + "a": "70", + "r1": "2", + "r2": "13", + "i": "7", + "x": "31", + "y": "21", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154255535", + "p": "2902", + "n": "Ball 3. ", + "b": "1020", + "a": "70", + "r1": "2", + "r2": "0", + "i": "7", + "x": "35", + "y": "8", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154220015", + "p": "2902", + "n": "Ball 2. NORDSELL Elias to 3rd on wild pitch. ", + "b": "1020", + "a": "70", + "r1": "2", + "r2": "0", + "i": "7", + "x": "31", + "y": "12", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154204900", + "p": "2902", + "n": "Ball 1. ", + "b": "1020", + "a": "70", + "r1": "2", + "r2": "0", + "i": "7", + "x": "39", + "y": "32", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154194824", + "p": "2902", + "n": "NORDSELL Elias to 2nd on E1T. ", + "b": "1020", + "a": "70", + "r1": "0", + "r2": "0", + "i": "7", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154189528", + "p": "2902", + "n": "Pickoff Attempt at 1st", + "b": "1020", + "a": "70", + "r1": "0", + "r2": "0", + "i": "7", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154140111", + "p": "2902", + "n": "NORDSELL Elias walks. ", + "b": "1010", + "a": "69", + "r1": "2", + "r2": "13", + "i": "7", + "x": "33", + "y": "52", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154127683", + "p": "2902", + "n": "Ball 3. ", + "b": "1010", + "a": "69", + "r1": "2", + "r2": "0", + "i": "7", + "x": "34", + "y": "22", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154115409", + "p": "2902", + "n": "Ball 2. ", + "b": "1010", + "a": "69", + "r1": "2", + "r2": "0", + "i": "7", + "x": "34", + "y": "52", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154104947", + "p": "2902", + "n": "Ball 1. ", + "b": "1010", + "a": "69", + "r1": "2", + "r2": "0", + "i": "7", + "x": "36", + "y": "47", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154078207", + "p": "2902", + "n": "LEJON Måns strikes out looking. 1 out. ", + "b": "1091", + "a": "68", + "r1": "4", + "r2": "1", + "i": "7", + "x": "-4", + "y": "47", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154071058", + "p": "2902", + "n": "Ball 3. ", + "b": "1091", + "a": "68", + "r1": "2", + "r2": "0", + "i": "7", + "x": "31", + "y": "60", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154056273", + "p": "2902", + "n": "Swinging Strike 2. ", + "b": "1091", + "a": "68", + "r1": "5", + "r2": "0", + "i": "7", + "x": "-7", + "y": "46", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154048995", + "p": "2902", + "n": "Ball 2. ", + "b": "1091", + "a": "68", + "r1": "2", + "r2": "0", + "i": "7", + "x": "39", + "y": "63", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154035211", + "p": "2902", + "n": "Ball 1. ", + "b": "1091", + "a": "68", + "r1": "2", + "r2": "0", + "i": "7", + "x": "34", + "y": "11", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154023775", + "p": "2902", + "n": "Swinging Strike 1. ", + "b": "1091", + "a": "68", + "r1": "5", + "r2": "0", + "i": "7", + "x": "-9", + "y": "37", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754154023775", + "p": 0, + "n": "***TOP 7", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "7", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1754153903949", + "p": "1902", + "n": "End of the 6th
1 runs, 1 lob", + "b": "2060", + "a": "68", + "r1": "0", + "r2": "0", + "i": "6", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153899036", + "p": "1902", + "n": "LINDGREN Henry grounds out 6-3. 3 out. ", + "b": "2051", + "a": "67", + "r1": "9", + "r2": "3", + "i": "6", + "x": "-10", + "y": "11", + "hd": "-15", + "hp": "113", + "hl": "0" + }, + { + "t": "1754153874454", + "p": "1902", + "n": "Called Strike 2. ", + "b": "2051", + "a": "67", + "r1": "4", + "r2": "0", + "i": "6", + "x": "-7", + "y": "14", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153853083", + "p": "1902", + "n": "Called Strike 1. ", + "b": "2051", + "a": "67", + "r1": "4", + "r2": "0", + "i": "6", + "x": "-4", + "y": "28", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153804479", + "p": "1902", + "n": "HERNANDEZ José doubles to center field. CASTILLO Anthony scores. 1 RBI. ", + "b": "2040", + "a": "66", + "r1": "9", + "r2": "19", + "i": "6", + "x": "6", + "y": "51", + "hd": "5", + "hp": "180", + "hl": "20" + }, + { + "t": "1754153747380", + "p": "1902", + "n": "CASTILLO Anthony walks. ", + "b": "2030", + "a": "65", + "r1": "2", + "r2": "13", + "i": "6", + "x": "38", + "y": "47", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153731090", + "p": "1902", + "n": "Ball 3. ", + "b": "2030", + "a": "65", + "r1": "2", + "r2": "0", + "i": "6", + "x": "36", + "y": "70", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153713406", + "p": "1902", + "n": "Ball 2. ", + "b": "2030", + "a": "65", + "r1": "2", + "r2": "0", + "i": "6", + "x": "36", + "y": "4", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153691622", + "p": "1902", + "n": "Foul. ", + "b": "2030", + "a": "65", + "r1": "6", + "r2": "0", + "i": "6", + "x": "19", + "y": "53", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153676857", + "p": "1902", + "n": "Ball 1. ", + "b": "2030", + "a": "65", + "r1": "2", + "r2": "0", + "i": "6", + "x": "35", + "y": "4", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153665551", + "p": "1902", + "n": "Swinging Strike 1. ", + "b": "2030", + "a": "65", + "r1": "5", + "r2": "0", + "i": "6", + "x": "5", + "y": "22", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153651292", + "p": "1902", + "n": "JELLNOR Lukas grounds out 6-3. 2 out. ", + "b": "2020", + "a": "64", + "r1": "9", + "r2": "3", + "i": "6", + "x": "-13", + "y": "20", + "hd": "-15", + "hp": "113", + "hl": "0" + }, + { + "t": "1754153567498", + "p": "1902", + "n": "SEQUERA Fernando José strikes out swinging. 1 out. ", + "b": "2010", + "a": "63", + "r1": "5", + "r2": "2", + "i": "6", + "x": "9", + "y": "14", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153549811", + "p": "1902", + "n": "Foul. ", + "b": "2010", + "a": "63", + "r1": "6", + "r2": "0", + "i": "6", + "x": "16", + "y": "42", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153540537", + "p": "1902", + "n": "Called Strike 1. ", + "b": "2010", + "a": "63", + "r1": "4", + "r2": "0", + "i": "6", + "x": "-10", + "y": "59", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": 0, + "p": 0, + "n": "Defensive Substitution: #0 LEJON for #31 MAALOUF at LF", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 6 + }, + { + "t": "1754153540537", + "p": 0, + "n": "***BOT 6", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "6", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1754153409008", + "p": "2902", + "n": "Middle of the 6th
2 runs, 2 lob", + "b": "1090", + "a": "63", + "r1": "0", + "r2": "0", + "i": "6", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153403505", + "p": "2902", + "n": "ÅNGSTRöM Dante grounds out 4-3. 3 out. ", + "b": "1080", + "a": "62", + "r1": "9", + "r2": "3", + "i": "6", + "x": "12", + "y": "29", + "hd": "15", + "hp": "113", + "hl": "0" + }, + { + "t": "1754153382090", + "p": "2902", + "n": "Swinging Strike 2. ", + "b": "1080", + "a": "62", + "r1": "5", + "r2": "0", + "i": "6", + "x": "-13", + "y": "15", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153372492", + "p": "2902", + "n": "Called Strike 1. BERG Teo to 2nd on stolen base. ", + "b": "1080", + "a": "62", + "r1": "4", + "r2": "0", + "i": "6", + "x": "6", + "y": "35", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153339288", + "p": "2902", + "n": "BERG Teo reaches on fielders choice. NORDLING Jakob to 3rd. ANDERSSON Olle out at 2nd 14. 2 out. ", + "b": "1070", + "a": "61", + "r1": "9", + "r2": "11", + "i": "6", + "x": "-9", + "y": "10", + "hd": "3", + "hp": "57", + "hl": "0" + }, + { + "t": "1754153310968", + "p": "2902", + "n": "Foul. ", + "b": "1070", + "a": "61", + "r1": "6", + "r2": "0", + "i": "6", + "x": "19", + "y": "60", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153292335", + "p": "2902", + "n": "Called Strike 1. ", + "b": "1070", + "a": "61", + "r1": "4", + "r2": "0", + "i": "6", + "x": "-11", + "y": "49", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153275002", + "p": "2902", + "n": "Ball 1. ", + "b": "1070", + "a": "61", + "r1": "2", + "r2": "0", + "i": "6", + "x": "33", + "y": "24", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153247351", + "p": "2902", + "n": "ANDERSSON Olle walks. NORDLING Jakob to 2nd. ", + "b": "1060", + "a": "60", + "r1": "2", + "r2": "13", + "i": "6", + "x": "34", + "y": "15", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153233018", + "p": "2902", + "n": "Called Strike 1. ", + "b": "1060", + "a": "60", + "r1": "4", + "r2": "0", + "i": "6", + "x": "-7", + "y": "35", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153216464", + "p": "2902", + "n": "Ball 3. ", + "b": "1060", + "a": "60", + "r1": "2", + "r2": "0", + "i": "6", + "x": "32", + "y": "53", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153209168", + "p": "2902", + "n": "Ball 2. ", + "b": "1060", + "a": "60", + "r1": "2", + "r2": "0", + "i": "6", + "x": "37", + "y": "35", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153194702", + "p": "2902", + "n": "Ball 1. ", + "b": "1060", + "a": "60", + "r1": "2", + "r2": "0", + "i": "6", + "x": "30", + "y": "57", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153169581", + "p": "2902", + "n": "NORDLING Jakob singles through the right side. CZECH Tucker scores. KENT Colton scores. 2 RBI. ", + "b": "1050", + "a": "59", + "r1": "9", + "r2": "18", + "i": "6", + "x": "11", + "y": "22", + "hd": "30", + "hp": "219", + "hl": "0" + }, + { + "t": "1754153142078", + "p": "2902", + "n": "Ball 1. KENT Colton to 2nd on stolen base. ", + "b": "1050", + "a": "59", + "r1": "2", + "r2": "0", + "i": "6", + "x": "37", + "y": "24", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153112644", + "p": "2902", + "n": "Foul. ", + "b": "1050", + "a": "59", + "r1": "6", + "r2": "0", + "i": "6", + "x": "10", + "y": "18", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153087080", + "p": "2902", + "n": "KENT Colton walks. ", + "b": "1040", + "a": "58", + "r1": "2", + "r2": "13", + "i": "6", + "x": "33", + "y": "40", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153080088", + "p": "2902", + "n": "Ball 3. ", + "b": "1040", + "a": "58", + "r1": "2", + "r2": "0", + "i": "6", + "x": "35", + "y": "61", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153048091", + "p": "2902", + "n": "Ball 2. CZECH Tucker to 2nd on stolen base. CZECH Tucker to 3rd on E2T. ", + "b": "1040", + "a": "58", + "r1": "2", + "r2": "0", + "i": "6", + "x": "39", + "y": "63", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754153024285", + "p": "2902", + "n": "Ball 1. ", + "b": "1040", + "a": "58", + "r1": "2", + "r2": "0", + "i": "6", + "x": "34", + "y": "70", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152996871", + "p": "2902", + "n": "CZECH Tucker Hit By Pitch. ", + "b": "1030", + "a": "57", + "r1": "3", + "r2": "15", + "i": "6", + "x": "-56", + "y": "49", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152958690", + "p": "2902", + "n": "STERNER Malek grounds out 4-3. 1 out. ", + "b": "1020", + "a": "56", + "r1": "9", + "r2": "3", + "i": "6", + "x": "4", + "y": "11", + "hd": "15", + "hp": "113", + "hl": "0" + }, + { + "t": "1754152958690", + "p": 0, + "n": "***TOP 6", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "6", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1754152818008", + "p": "1902", + "n": "End of the 5th
2 runs, 3 lob", + "b": "2010", + "a": "56", + "r1": "0", + "r2": "0", + "i": "5", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152816313", + "p": "1902", + "n": "BENGTSSON Axel strikes out swinging. 3 out. ", + "b": "2090", + "a": "55", + "r1": "5", + "r2": "2", + "i": "5", + "x": "13", + "y": "32", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152797678", + "p": "1902", + "n": "Swinging Strike 2. ", + "b": "2090", + "a": "55", + "r1": "5", + "r2": "0", + "i": "5", + "x": "13", + "y": "45", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152780698", + "p": "1902", + "n": "Called Strike 1. ", + "b": "2090", + "a": "55", + "r1": "4", + "r2": "0", + "i": "5", + "x": "10", + "y": "34", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": 0, + "p": 0, + "n": "Pitching Change: #13 MARKSTRöM for #23 SJöRS", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 5 + }, + { + "t": "1754152490596", + "p": "1901", + "n": "KAWADA Osuto Hit By Pitch. LINDGREN Henry scores. ESTATI Bryan to 3rd. FLEMING Braizell to 2nd. 1 RBI. ", + "b": "2081", + "a": "54", + "r1": "3", + "r2": "15", + "i": "5", + "x": "-59", + "y": "29", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152475897", + "p": "1901", + "n": "Ball 1. ", + "b": "2081", + "a": "54", + "r1": "2", + "r2": "0", + "i": "5", + "x": "33", + "y": "1", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152447780", + "p": "1901", + "n": "FLEMING Braizell walks. JELLNOR Lukas scores. LINDGREN Henry to 3rd. ESTATI Bryan to 2nd. 1 RBI. ", + "b": "2070", + "a": "53", + "r1": "2", + "r2": "13", + "i": "5", + "x": "32", + "y": "28", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152433752", + "p": "1901", + "n": "Ball 3. ", + "b": "2070", + "a": "53", + "r1": "2", + "r2": "0", + "i": "5", + "x": "39", + "y": "13", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152420009", + "p": "1901", + "n": "Ball 2. ", + "b": "2070", + "a": "53", + "r1": "2", + "r2": "0", + "i": "5", + "x": "38", + "y": "14", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152407609", + "p": "1901", + "n": "Ball 1. ", + "b": "2070", + "a": "53", + "r1": "2", + "r2": "0", + "i": "5", + "x": "35", + "y": "28", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152381114", + "p": "1901", + "n": "ESTATI Bryan walks. LINDGREN Henry to 2nd. ", + "b": "2060", + "a": "52", + "r1": "2", + "r2": "13", + "i": "5", + "x": "31", + "y": "52", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152368677", + "p": "1901", + "n": "Ball 3. ", + "b": "2060", + "a": "52", + "r1": "2", + "r2": "0", + "i": "5", + "x": "33", + "y": "45", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152352239", + "p": "1901", + "n": "Ball 2. ", + "b": "2060", + "a": "52", + "r1": "2", + "r2": "0", + "i": "5", + "x": "38", + "y": "60", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152339922", + "p": "1901", + "n": "Ball 1. ", + "b": "2060", + "a": "52", + "r1": "2", + "r2": "0", + "i": "5", + "x": "31", + "y": "62", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152302294", + "p": "1901", + "n": "LINDGREN Henry reaches on fielders choice. JELLNOR Lukas to 3rd. HERNANDEZ José out at 2nd 54. 2 out. ", + "b": "2051", + "a": "51", + "r1": "9", + "r2": "11", + "i": "5", + "x": "-17", + "y": "13", + "hd": "-35", + "hp": "94", + "hl": "0" + }, + { + "t": "1754152280135", + "p": "1901", + "n": "Ball 2. ", + "b": "2051", + "a": "51", + "r1": "2", + "r2": "0", + "i": "5", + "x": "38", + "y": "12", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152264633", + "p": "1901", + "n": "Called Strike 2. ", + "b": "2051", + "a": "51", + "r1": "4", + "r2": "0", + "i": "5", + "x": "-9", + "y": "54", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152245163", + "p": "1901", + "n": "Swinging Strike 1. ", + "b": "2051", + "a": "51", + "r1": "5", + "r2": "0", + "i": "5", + "x": "-4", + "y": "28", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152232590", + "p": "1901", + "n": "Ball 1. ", + "b": "2051", + "a": "51", + "r1": "2", + "r2": "0", + "i": "5", + "x": "36", + "y": "12", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152194101", + "p": "1901", + "n": "HERNANDEZ José Hit By Pitch. ", + "b": "2040", + "a": "50", + "r1": "3", + "r2": "15", + "i": "5", + "x": "-60", + "y": "27", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152162033", + "p": "1901", + "n": "Ball 1. JELLNOR Lukas to 2nd on wild pitch. ", + "b": "2040", + "a": "50", + "r1": "2", + "r2": "0", + "i": "5", + "x": "38", + "y": "7", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152129429", + "p": "1901", + "n": "CASTILLO Anthony flies out down right field line. F9. 1 out. ", + "b": "2030", + "a": "49", + "r1": "9", + "r2": "4", + "i": "5", + "x": "9", + "y": "62", + "hd": "45", + "hp": "172", + "hl": "50" + }, + { + "t": "1754152093494", + "p": "1901", + "n": "JELLNOR Lukas walks. ", + "b": "2020", + "a": "48", + "r1": "2", + "r2": "13", + "i": "5", + "x": "31", + "y": "52", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152079483", + "p": "1901", + "n": "Foul. ", + "b": "2020", + "a": "48", + "r1": "6", + "r2": "0", + "i": "5", + "x": "4", + "y": "16", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152063161", + "p": "1901", + "n": "Foul. ", + "b": "2020", + "a": "48", + "r1": "6", + "r2": "0", + "i": "5", + "x": "11", + "y": "59", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152052774", + "p": "1901", + "n": "Ball 3. ", + "b": "2020", + "a": "48", + "r1": "2", + "r2": "0", + "i": "5", + "x": "36", + "y": "22", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152030256", + "p": "1901", + "n": "Ball 2. ", + "b": "2020", + "a": "48", + "r1": "2", + "r2": "0", + "i": "5", + "x": "32", + "y": "12", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152026743", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2020", + "a": "48", + "r1": "4", + "r2": "0", + "i": "5", + "x": "13", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754152013813", + "p": "1901", + "n": "Ball 1. ", + "b": "2020", + "a": "48", + "r1": "2", + "r2": "0", + "i": "5", + "x": "31", + "y": "17", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": 0, + "p": 0, + "n": "Defensive Substitution: #62 KAWADA for #35 SOUTHERINGTON at C", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 5 + }, + { + "t": "1754152013813", + "p": 0, + "n": "***BOT 5", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "5", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1754151861320", + "p": "2902", + "n": "Middle of the 5th
0 runs, 2 lob", + "b": "1020", + "a": "48", + "r1": "0", + "r2": "0", + "i": "5", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151859495", + "p": "2902", + "n": "NORDSELL Elias strikes out swinging. 3 out. ", + "b": "1010", + "a": "47", + "r1": "5", + "r2": "2", + "i": "5", + "x": "-15", + "y": "38", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151840156", + "p": "2902", + "n": "Called Strike 2. ", + "b": "1010", + "a": "47", + "r1": "4", + "r2": "0", + "i": "5", + "x": "19", + "y": "48", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151821488", + "p": "2902", + "n": "Ball 2. ", + "b": "1010", + "a": "47", + "r1": "2", + "r2": "0", + "i": "5", + "x": "36", + "y": "15", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151803432", + "p": "2902", + "n": "Swinging Strike 1. ", + "b": "1010", + "a": "47", + "r1": "5", + "r2": "0", + "i": "5", + "x": "18", + "y": "24", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151786079", + "p": "2902", + "n": "Ball 1. ", + "b": "1010", + "a": "47", + "r1": "2", + "r2": "0", + "i": "5", + "x": "39", + "y": "12", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151748200", + "p": "2902", + "n": "MAALOUF Oliver out on sacrifice hit 14. Bunt. BERG Teo to 3rd. ÅNGSTRöM Dante to 2nd. 2 out. ", + "b": "1090", + "a": "46", + "r1": "9", + "r2": "3", + "i": "5", + "x": "-4", + "y": "44", + "hd": "2", + "hp": "51", + "hl": "5" + }, + { + "t": "1754151709235", + "p": "2902", + "n": "ÅNGSTRöM Dante walks. BERG Teo to 2nd. ", + "b": "1080", + "a": "45", + "r1": "2", + "r2": "13", + "i": "5", + "x": "36", + "y": "49", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151707915", + "p": "2902", + "n": "Ball 3. ", + "b": "1080", + "a": "45", + "r1": "2", + "r2": "0", + "i": "5", + "x": "35", + "y": "27", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151664745", + "p": "2902", + "n": "Ball 2. ", + "b": "1080", + "a": "45", + "r1": "2", + "r2": "0", + "i": "5", + "x": "30", + "y": "4", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151654395", + "p": "2902", + "n": "Ball 1. ", + "b": "1080", + "a": "45", + "r1": "2", + "r2": "0", + "i": "5", + "x": "31", + "y": "19", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151622928", + "p": "2902", + "n": "BERG Teo walks. ", + "b": "1070", + "a": "44", + "r1": "2", + "r2": "13", + "i": "5", + "x": "38", + "y": "25", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151606394", + "p": "2902", + "n": "Ball 3. ", + "b": "1070", + "a": "44", + "r1": "2", + "r2": "0", + "i": "5", + "x": "39", + "y": "37", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151588541", + "p": "2902", + "n": "Foul. ", + "b": "1070", + "a": "44", + "r1": "6", + "r2": "0", + "i": "5", + "x": "10", + "y": "15", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151576792", + "p": "2902", + "n": "Ball 2. ", + "b": "1070", + "a": "44", + "r1": "2", + "r2": "0", + "i": "5", + "x": "37", + "y": "14", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151567042", + "p": "2902", + "n": "Ball 1. ", + "b": "1070", + "a": "44", + "r1": "2", + "r2": "0", + "i": "5", + "x": "31", + "y": "16", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151538688", + "p": "2902", + "n": "ANDERSSON Olle strikes out swinging. 1 out. ", + "b": "1060", + "a": "43", + "r1": "5", + "r2": "2", + "i": "5", + "x": "18", + "y": "17", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151526064", + "p": "2902", + "n": "Swinging Strike 2. ", + "b": "1060", + "a": "43", + "r1": "5", + "r2": "0", + "i": "5", + "x": "-16", + "y": "28", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151516726", + "p": "2902", + "n": "Called Strike 1. ", + "b": "1060", + "a": "43", + "r1": "4", + "r2": "0", + "i": "5", + "x": "-15", + "y": "43", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151506735", + "p": "2902", + "n": "Ball 3. ", + "b": "1060", + "a": "43", + "r1": "2", + "r2": "0", + "i": "5", + "x": "37", + "y": "24", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151487935", + "p": "2902", + "n": "Ball 2. ", + "b": "1060", + "a": "43", + "r1": "2", + "r2": "0", + "i": "5", + "x": "35", + "y": "45", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151477609", + "p": "2902", + "n": "Ball 1. ", + "b": "1060", + "a": "43", + "r1": "2", + "r2": "0", + "i": "5", + "x": "31", + "y": "53", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": 0, + "p": 0, + "n": "Defensive Change: #21 JELLNOR to 1B", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 5 + }, + { + "t": 0, + "p": 0, + "n": "Defensive Substitution: #0 LINDGREN for #6 SJöLUND at RF", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 5 + }, + { + "t": 0, + "p": 0, + "n": "Defensive Change: #19 FLEMING to 2B", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 5 + }, + { + "t": 0, + "p": 0, + "n": "Defensive Change: #3 CASTILLO to 3B", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 5 + }, + { + "t": 0, + "p": 0, + "n": "Pitching Change: #23 ESTATI for #52 MARQVARDSEN", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": 5 + }, + { + "t": "1754151477609", + "p": 0, + "n": "***TOP 5", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "5", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1754151341195", + "p": "1901", + "n": "End of the 4th
2 runs, 2 lob", + "b": "2020", + "a": "43", + "r1": "0", + "r2": "0", + "i": "4", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151335503", + "p": "1901", + "n": "SEQUERA Fernando José flies out to left field. F7. 3 out. ", + "b": "2010", + "a": "42", + "r1": "9", + "r2": "4", + "i": "4", + "x": "-18", + "y": "55", + "hd": "-30", + "hp": "188", + "hl": "35" + }, + { + "t": "1754151092631", + "p": "1901", + "n": "Ball 1. ", + "b": "2010", + "a": "42", + "r1": "2", + "r2": "0", + "i": "4", + "x": "38", + "y": "14", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151065654", + "p": "1901", + "n": "BENGTSSON Axel reaches on fielders choice. SOUTHERINGTON Max out at 2nd 64. 2 out. ", + "b": "2090", + "a": "41", + "r1": "9", + "r2": "11", + "i": "4", + "x": "10", + "y": "20", + "hd": "-8", + "hp": "94", + "hl": "0" + }, + { + "t": "1754151033753", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2090", + "a": "41", + "r1": "4", + "r2": "0", + "i": "4", + "x": "-18", + "y": "45", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754151011302", + "p": "1901", + "n": "Ball 2. ", + "b": "2090", + "a": "41", + "r1": "2", + "r2": "0", + "i": "4", + "x": "35", + "y": "62", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150996952", + "p": "1901", + "n": "Ball 1. ", + "b": "2090", + "a": "41", + "r1": "2", + "r2": "0", + "i": "4", + "x": "31", + "y": "56", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150967492", + "p": "1901", + "n": "SOUTHERINGTON Max reaches on fielders choice. SJöLUND Linus scores. ESTATI Bryan to 3rd. FLEMING Braizell out at 2nd 64. 1 out. 1 RBI. ", + "b": "2080", + "a": "40", + "r1": "9", + "r2": "11", + "i": "4", + "x": "-11", + "y": "20", + "hd": "-19", + "hp": "96", + "hl": "0" + }, + { + "t": "1754150902989", + "p": "1901", + "n": "Coaching Visit", + "b": "2080", + "a": "40", + "r1": "0", + "r2": "0", + "i": "4", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150874928", + "p": "1901", + "n": "FLEMING Braizell singles to left field. SJöLUND Linus to 3rd. ESTATI Bryan to 2nd. ", + "b": "2070", + "a": "39", + "r1": "9", + "r2": "18", + "i": "4", + "x": "-4", + "y": "48", + "hd": "-31", + "hp": "179", + "hl": "20" + }, + { + "t": "1754150852458", + "p": "1901", + "n": "Ball 3. ", + "b": "2070", + "a": "39", + "r1": "2", + "r2": "0", + "i": "4", + "x": "32", + "y": "18", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150825543", + "p": "1901", + "n": "Ball 2. ", + "b": "2070", + "a": "39", + "r1": "2", + "r2": "0", + "i": "4", + "x": "30", + "y": "2", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150808579", + "p": "1901", + "n": "Ball 1. ", + "b": "2070", + "a": "39", + "r1": "2", + "r2": "0", + "i": "4", + "x": "35", + "y": "61", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150796678", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2070", + "a": "39", + "r1": "4", + "r2": "0", + "i": "4", + "x": "11", + "y": "30", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150761417", + "p": "1901", + "n": "ESTATI Bryan singles to left field. HERNANDEZ José scores. SJöLUND Linus to 2nd. 1 RBI. ", + "b": "2060", + "a": "38", + "r1": "9", + "r2": "18", + "i": "4", + "x": "-7", + "y": "58", + "hd": "-31", + "hp": "212", + "hl": "20" + }, + { + "t": "1754150741970", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2060", + "a": "38", + "r1": "4", + "r2": "0", + "i": "4", + "x": "-18", + "y": "16", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150722896", + "p": "1901", + "n": "Ball 3. ", + "b": "2060", + "a": "38", + "r1": "2", + "r2": "0", + "i": "4", + "x": "32", + "y": "23", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150708206", + "p": "1901", + "n": "Ball 2. ", + "b": "2060", + "a": "38", + "r1": "2", + "r2": "0", + "i": "4", + "x": "38", + "y": "46", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150696546", + "p": "1901", + "n": "Ball 1. ", + "b": "2060", + "a": "38", + "r1": "2", + "r2": "0", + "i": "4", + "x": "37", + "y": "16", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150649540", + "p": "1901", + "n": "SJöLUND Linus singles to center field. HERNANDEZ José to 3rd. ", + "b": "2050", + "a": "37", + "r1": "9", + "r2": "18", + "i": "4", + "x": "17", + "y": "58", + "hd": "-8", + "hp": "223", + "hl": "20" + }, + { + "t": "1754150627798", + "p": "1901", + "n": "Foul. ", + "b": "2050", + "a": "37", + "r1": "6", + "r2": "0", + "i": "4", + "x": "18", + "y": "26", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150608345", + "p": "1901", + "n": "Ball 2. ", + "b": "2050", + "a": "37", + "r1": "2", + "r2": "0", + "i": "4", + "x": "39", + "y": "28", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150595465", + "p": "1901", + "n": "Swinging Strike 2. ", + "b": "2050", + "a": "37", + "r1": "5", + "r2": "0", + "i": "4", + "x": "3", + "y": "32", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150583226", + "p": "1901", + "n": "Ball 1. ", + "b": "2050", + "a": "37", + "r1": "2", + "r2": "0", + "i": "4", + "x": "31", + "y": "22", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150569746", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2050", + "a": "37", + "r1": "4", + "r2": "0", + "i": "4", + "x": "1", + "y": "34", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150541236", + "p": "1901", + "n": "HERNANDEZ José singles up the middle. ", + "b": "2040", + "a": "36", + "r1": "9", + "r2": "18", + "i": "4", + "x": "2", + "y": "28", + "hd": "-10", + "hp": "179", + "hl": "0" + }, + { + "t": "1754150516887", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2040", + "a": "36", + "r1": "4", + "r2": "0", + "i": "4", + "x": "-8", + "y": "54", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150505906", + "p": "1901", + "n": "Ball 2. ", + "b": "2040", + "a": "36", + "r1": "2", + "r2": "0", + "i": "4", + "x": "32", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150494352", + "p": "1901", + "n": "Ball 1. ", + "b": "2040", + "a": "36", + "r1": "2", + "r2": "0", + "i": "4", + "x": "34", + "y": "51", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150494352", + "p": 0, + "n": "***BOT 4", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "4", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1754150365947", + "p": "2901", + "n": "Middle of the 4th
1 runs, 1 lob", + "b": "1060", + "a": "36", + "r1": "0", + "r2": "0", + "i": "4", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150355831", + "p": "2901", + "n": "NORDLING Jakob grounds out 3U. 3 out. ", + "b": "1050", + "a": "35", + "r1": "9", + "r2": "3", + "i": "4", + "x": "12", + "y": "26", + "hd": "35", + "hp": "83", + "hl": "0" + }, + { + "t": "1754150318728", + "p": "2901", + "n": "Ball 3. CZECH Tucker to 3rd on wild pitch. ", + "b": "1050", + "a": "35", + "r1": "2", + "r2": "0", + "i": "4", + "x": "30", + "y": "7", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150282213", + "p": "2901", + "n": "Foul. ", + "b": "1050", + "a": "35", + "r1": "6", + "r2": "0", + "i": "4", + "x": "0", + "y": "59", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150249619", + "p": "2901", + "n": "Foul. ", + "b": "1050", + "a": "35", + "r1": "6", + "r2": "0", + "i": "4", + "x": "-20", + "y": "51", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150224758", + "p": "2901", + "n": "Foul. ", + "b": "1050", + "a": "35", + "r1": "6", + "r2": "0", + "i": "4", + "x": "0", + "y": "42", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150208519", + "p": "2901", + "n": "Ball 2. ", + "b": "1050", + "a": "35", + "r1": "2", + "r2": "0", + "i": "4", + "x": "31", + "y": "34", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150184366", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1050", + "a": "35", + "r1": "4", + "r2": "0", + "i": "4", + "x": "0", + "y": "32", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150170586", + "p": "2901", + "n": "Ball 1. ", + "b": "1050", + "a": "35", + "r1": "2", + "r2": "0", + "i": "4", + "x": "30", + "y": "40", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150140196", + "p": "2901", + "n": "KENT Colton flies out to right field. F9. 2 out. ", + "b": "1040", + "a": "34", + "r1": "9", + "r2": "4", + "i": "4", + "x": "19", + "y": "53", + "hd": "32", + "hp": "185", + "hl": "35" + }, + { + "t": "1754150115367", + "p": "2901", + "n": "Called Strike 1. CZECH Tucker to 2nd on stolen base. ", + "b": "1040", + "a": "34", + "r1": "4", + "r2": "0", + "i": "4", + "x": "-9", + "y": "23", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754150069414", + "p": "2901", + "n": "CZECH Tucker singles up the middle. NORDSELL Elias scores. 1 RBI. ", + "b": "1030", + "a": "33", + "r1": "9", + "r2": "18", + "i": "4", + "x": "18", + "y": "19", + "hd": "7", + "hp": "179", + "hl": "0" + }, + { + "t": "1754150045466", + "p": "2901", + "n": "Ball 3. ", + "b": "1030", + "a": "33", + "r1": "2", + "r2": "0", + "i": "4", + "x": "34", + "y": "2", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149990898", + "p": "2901", + "n": "Foul. ", + "b": "1030", + "a": "33", + "r1": "6", + "r2": "0", + "i": "4", + "x": "-7", + "y": "43", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149974926", + "p": "2901", + "n": "Ball 2. ", + "b": "1030", + "a": "33", + "r1": "2", + "r2": "0", + "i": "4", + "x": "36", + "y": "21", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149963219", + "p": "2901", + "n": "Ball 1. ", + "b": "1030", + "a": "33", + "r1": "2", + "r2": "0", + "i": "4", + "x": "37", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149948941", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1030", + "a": "33", + "r1": "4", + "r2": "0", + "i": "4", + "x": "-4", + "y": "44", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149919389", + "p": "2901", + "n": "STERNER Malek out on sacrifice hit 53. Bunt. NORDSELL Elias to 2nd. 1 out. ", + "b": "1020", + "a": "32", + "r1": "9", + "r2": "3", + "i": "4", + "x": "-9", + "y": "15", + "hd": "-27", + "hp": "41", + "hl": "5" + }, + { + "t": "1754149882523", + "p": "2901", + "n": "NORDSELL Elias walks. ", + "b": "1010", + "a": "31", + "r1": "2", + "r2": "13", + "i": "4", + "x": "37", + "y": "4", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149864854", + "p": "2901", + "n": "Ball 3. ", + "b": "1010", + "a": "31", + "r1": "2", + "r2": "0", + "i": "4", + "x": "39", + "y": "8", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149844666", + "p": "2901", + "n": "Ball 2. ", + "b": "1010", + "a": "31", + "r1": "2", + "r2": "0", + "i": "4", + "x": "31", + "y": "53", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149812609", + "p": "2901", + "n": "Ball 1. ", + "b": "1010", + "a": "31", + "r1": "2", + "r2": "0", + "i": "4", + "x": "32", + "y": "10", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149812609", + "p": 0, + "n": "***TOP 4", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "4", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1754149676908", + "p": "1901", + "n": "End of the 3rd
1 runs, 1 lob", + "b": "2040", + "a": "31", + "r1": "0", + "r2": "0", + "i": "3", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149670419", + "p": "1901", + "n": "CASTILLO Anthony flies out to right field. F9. 3 out. ", + "b": "2030", + "a": "30", + "r1": "9", + "r2": "4", + "i": "3", + "x": "6", + "y": "49", + "hd": "30", + "hp": "195", + "hl": "35" + }, + { + "t": "1754149646939", + "p": "1901", + "n": "Ball 1. ", + "b": "2030", + "a": "30", + "r1": "2", + "r2": "0", + "i": "3", + "x": "34", + "y": "3", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149629631", + "p": "1901", + "n": "Swinging Strike 2. ", + "b": "2030", + "a": "30", + "r1": "5", + "r2": "0", + "i": "3", + "x": "1", + "y": "52", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149606252", + "p": "1901", + "n": "Foul. ", + "b": "2030", + "a": "30", + "r1": "6", + "r2": "0", + "i": "3", + "x": "-10", + "y": "29", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149569701", + "p": "1901", + "n": "JELLNOR Lukas singles up the middle. SOUTHERINGTON Max scores. 1 RBI. ", + "b": "2020", + "a": "29", + "r1": "9", + "r2": "18", + "i": "3", + "x": "-14", + "y": "28", + "hd": "10", + "hp": "179", + "hl": "0" + }, + { + "t": "1754149549880", + "p": "1901", + "n": "Ball 3. ", + "b": "2020", + "a": "29", + "r1": "2", + "r2": "0", + "i": "3", + "x": "32", + "y": "35", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149529096", + "p": "1901", + "n": "Ball 2. ", + "b": "2020", + "a": "29", + "r1": "2", + "r2": "0", + "i": "3", + "x": "38", + "y": "19", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149519100", + "p": "1901", + "n": "Ball 1. ", + "b": "2020", + "a": "29", + "r1": "2", + "r2": "0", + "i": "3", + "x": "39", + "y": "6", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149498765", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2020", + "a": "29", + "r1": "4", + "r2": "0", + "i": "3", + "x": "-20", + "y": "45", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149470275", + "p": "1901", + "n": "SEQUERA Fernando José strikes out swinging KS2. 2 out. ", + "b": "2010", + "a": "28", + "r1": "5", + "r2": "2", + "i": "3", + "x": "-19", + "y": "38", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149443593", + "p": "1901", + "n": "Foul. ", + "b": "2010", + "a": "28", + "r1": "6", + "r2": "0", + "i": "3", + "x": "7", + "y": "14", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149415380", + "p": "1901", + "n": "Foul. ", + "b": "2010", + "a": "28", + "r1": "6", + "r2": "0", + "i": "3", + "x": "17", + "y": "19", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149394421", + "p": "1901", + "n": "Ball 2. SOUTHERINGTON Max to 2nd on stolen base. ", + "b": "2010", + "a": "28", + "r1": "2", + "r2": "0", + "i": "3", + "x": "39", + "y": "58", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149367446", + "p": "1901", + "n": "Ball 1. ", + "b": "2010", + "a": "28", + "r1": "2", + "r2": "0", + "i": "3", + "x": "36", + "y": "9", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149353090", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2010", + "a": "28", + "r1": "4", + "r2": "0", + "i": "3", + "x": "-3", + "y": "48", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149329270", + "p": "1901", + "n": "BENGTSSON Axel strikes out swinging. 1 out. ", + "b": "2090", + "a": "27", + "r1": "5", + "r2": "2", + "i": "3", + "x": "-12", + "y": "21", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149314042", + "p": "1901", + "n": "Ball 1. ", + "b": "2090", + "a": "27", + "r1": "2", + "r2": "0", + "i": "3", + "x": "33", + "y": "2", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149294222", + "p": "1901", + "n": "Foul. ", + "b": "2090", + "a": "27", + "r1": "6", + "r2": "0", + "i": "3", + "x": "3", + "y": "38", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149288947", + "p": "1901", + "n": "Foul. ", + "b": "2090", + "a": "27", + "r1": "6", + "r2": "0", + "i": "3", + "x": "-6", + "y": "33", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149286017", + "p": "1901", + "n": "SOUTHERINGTON Max walks. ", + "b": "2080", + "a": "26", + "r1": "2", + "r2": "13", + "i": "3", + "x": "35", + "y": "45", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149255829", + "p": "1901", + "n": "Foul. ", + "b": "2080", + "a": "26", + "r1": "6", + "r2": "0", + "i": "3", + "x": "13", + "y": "29", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149234321", + "p": "1901", + "n": "Foul. ", + "b": "2080", + "a": "26", + "r1": "6", + "r2": "0", + "i": "3", + "x": "11", + "y": "43", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149202767", + "p": "1901", + "n": "Called Strike 2. ", + "b": "2080", + "a": "26", + "r1": "4", + "r2": "0", + "i": "3", + "x": "12", + "y": "19", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149191534", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2080", + "a": "26", + "r1": "4", + "r2": "0", + "i": "3", + "x": "-12", + "y": "34", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149180877", + "p": "1901", + "n": "Ball 3. ", + "b": "2080", + "a": "26", + "r1": "2", + "r2": "0", + "i": "3", + "x": "37", + "y": "6", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149170325", + "p": "1901", + "n": "Ball 2. ", + "b": "2080", + "a": "26", + "r1": "2", + "r2": "0", + "i": "3", + "x": "36", + "y": "70", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149153829", + "p": "1901", + "n": "Ball 1. ", + "b": "2080", + "a": "26", + "r1": "2", + "r2": "0", + "i": "3", + "x": "34", + "y": "19", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149153829", + "p": 0, + "n": "***BOT 3", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "3", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1754149030930", + "p": "2901", + "n": "Middle of the 3rd
0 runs, 1 lob", + "b": "1010", + "a": "26", + "r1": "0", + "r2": "0", + "i": "3", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149029319", + "p": "2901", + "n": "MAALOUF Oliver strikes out looking. 3 out. ", + "b": "1090", + "a": "25", + "r1": "4", + "r2": "1", + "i": "3", + "x": "-5", + "y": "20", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754149014041", + "p": "2901", + "n": "Called Strike 2. ", + "b": "1090", + "a": "25", + "r1": "4", + "r2": "0", + "i": "3", + "x": "-5", + "y": "18", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148992307", + "p": "2901", + "n": "Ball 3. ", + "b": "1090", + "a": "25", + "r1": "2", + "r2": "0", + "i": "3", + "x": "37", + "y": "11", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148979281", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1090", + "a": "25", + "r1": "4", + "r2": "0", + "i": "3", + "x": "-14", + "y": "38", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148963414", + "p": "2901", + "n": "Ball 2. ", + "b": "1090", + "a": "25", + "r1": "2", + "r2": "0", + "i": "3", + "x": "34", + "y": "12", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148950510", + "p": "2901", + "n": "Ball 1. ", + "b": "1090", + "a": "25", + "r1": "2", + "r2": "0", + "i": "3", + "x": "36", + "y": "62", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148931271", + "p": "2901", + "n": "ÅNGSTRöM Dante walks. ", + "b": "1080", + "a": "24", + "r1": "2", + "r2": "13", + "i": "3", + "x": "38", + "y": "41", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148901032", + "p": "2901", + "n": "Foul. ", + "b": "1080", + "a": "24", + "r1": "6", + "r2": "0", + "i": "3", + "x": "3", + "y": "14", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148892223", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1080", + "a": "24", + "r1": "4", + "r2": "0", + "i": "3", + "x": "-13", + "y": "56", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148876443", + "p": "2901", + "n": "Ball 3. ", + "b": "1080", + "a": "24", + "r1": "2", + "r2": "0", + "i": "3", + "x": "30", + "y": "1", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148865594", + "p": "2901", + "n": "Ball 2. ", + "b": "1080", + "a": "24", + "r1": "2", + "r2": "0", + "i": "3", + "x": "31", + "y": "62", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148849624", + "p": "2901", + "n": "Ball 1. ", + "b": "1080", + "a": "24", + "r1": "2", + "r2": "0", + "i": "3", + "x": "37", + "y": "26", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148822123", + "p": "2901", + "n": "BERG Teo strikes out looking. 2 out. ", + "b": "1070", + "a": "23", + "r1": "4", + "r2": "1", + "i": "3", + "x": "-12", + "y": "38", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148812791", + "p": "2901", + "n": "Called Strike 2. ", + "b": "1070", + "a": "23", + "r1": "4", + "r2": "0", + "i": "3", + "x": "19", + "y": "49", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148809076", + "p": "2901", + "n": "Foul. ", + "b": "1070", + "a": "23", + "r1": "6", + "r2": "0", + "i": "3", + "x": "0", + "y": "57", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148768123", + "p": "2901", + "n": "ANDERSSON Olle grounds out 1-3. 1 out. ", + "b": "1060", + "a": "22", + "r1": "9", + "r2": "3", + "i": "3", + "x": "4", + "y": "12", + "hd": "0", + "hp": "47", + "hl": "0" + }, + { + "t": "1754148750783", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1060", + "a": "22", + "r1": "4", + "r2": "0", + "i": "3", + "x": "17", + "y": "60", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148750783", + "p": 0, + "n": "***TOP 3", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "3", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1754148621046", + "p": "1901", + "n": "End of the 2nd
0 runs, 1 lob", + "b": "2080", + "a": "22", + "r1": "0", + "r2": "0", + "i": "2", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148604610", + "p": "1901", + "n": "FLEMING Braizell reaches on fielders choice. SJöLUND Linus out at 2nd 54. 3 out. ", + "b": "2070", + "a": "21", + "r1": "9", + "r2": "11", + "i": "2", + "x": "-14", + "y": "13", + "hd": "-35", + "hp": "94", + "hl": "0" + }, + { + "t": "1754148574121", + "p": "1901", + "n": "ESTATI Bryan strikes out swinging. 2 out. ", + "b": "2060", + "a": "20", + "r1": "5", + "r2": "2", + "i": "2", + "x": "-1", + "y": "24", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148554069", + "p": "1901", + "n": "Foul. ", + "b": "2060", + "a": "20", + "r1": "6", + "r2": "0", + "i": "2", + "x": "-14", + "y": "50", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148545089", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2060", + "a": "20", + "r1": "4", + "r2": "0", + "i": "2", + "x": "-10", + "y": "53", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148505286", + "p": "1901", + "n": "SJöLUND Linus reaches on fielding error. E6. ", + "b": "2050", + "a": "19", + "r1": "9", + "r2": "12", + "i": "2", + "x": "-10", + "y": "24", + "hd": "-15", + "hp": "113", + "hl": "0" + }, + { + "t": "1754148481970", + "p": "1901", + "n": "Foul. ", + "b": "2050", + "a": "19", + "r1": "6", + "r2": "0", + "i": "2", + "x": "4", + "y": "18", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148443516", + "p": "1901", + "n": "Foul. ", + "b": "2050", + "a": "19", + "r1": "6", + "r2": "0", + "i": "2", + "x": "11", + "y": "12", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148432816", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2050", + "a": "19", + "r1": "4", + "r2": "0", + "i": "2", + "x": "-3", + "y": "22", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148421680", + "p": "1901", + "n": "Ball 2. ", + "b": "2050", + "a": "19", + "r1": "2", + "r2": "0", + "i": "2", + "x": "30", + "y": "21", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148410184", + "p": "1901", + "n": "Ball 1. ", + "b": "2050", + "a": "19", + "r1": "2", + "r2": "0", + "i": "2", + "x": "38", + "y": "49", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148385029", + "p": "1901", + "n": "HERNANDEZ José strikes out swinging. 1 out. ", + "b": "2040", + "a": "18", + "r1": "5", + "r2": "2", + "i": "2", + "x": "9", + "y": "35", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148360217", + "p": "1901", + "n": "Ball 3. ", + "b": "2040", + "a": "18", + "r1": "2", + "r2": "0", + "i": "2", + "x": "31", + "y": "61", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148331393", + "p": "1901", + "n": "Ball 2. ", + "b": "2040", + "a": "18", + "r1": "2", + "r2": "0", + "i": "2", + "x": "38", + "y": "20", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148310375", + "p": "1901", + "n": "Foul. ", + "b": "2040", + "a": "18", + "r1": "6", + "r2": "0", + "i": "2", + "x": "-10", + "y": "38", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148295890", + "p": "1901", + "n": "Ball 1. ", + "b": "2040", + "a": "18", + "r1": "2", + "r2": "0", + "i": "2", + "x": "37", + "y": "65", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148285471", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2040", + "a": "18", + "r1": "4", + "r2": "0", + "i": "2", + "x": "7", + "y": "44", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148285471", + "p": 0, + "n": "***BOT 2", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "2", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1754148170540", + "p": "2901", + "n": "Middle of the 2nd
1 runs, 2 lob", + "b": "1060", + "a": "18", + "r1": "0", + "r2": "0", + "i": "2", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148167266", + "p": "2901", + "n": "NORDLING Jakob strikes out looking. 3 out. ", + "b": "1050", + "a": "17", + "r1": "4", + "r2": "1", + "i": "2", + "x": "-19", + "y": "31", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148130515", + "p": "2901", + "n": "Foul. ", + "b": "1050", + "a": "17", + "r1": "6", + "r2": "0", + "i": "2", + "x": "-10", + "y": "53", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148112583", + "p": "2901", + "n": "Called Strike 2. ", + "b": "1050", + "a": "17", + "r1": "4", + "r2": "0", + "i": "2", + "x": "-4", + "y": "55", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148091260", + "p": "2901", + "n": "Ball 2. ", + "b": "1050", + "a": "17", + "r1": "2", + "r2": "0", + "i": "2", + "x": "30", + "y": "8", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148051989", + "p": "2901", + "n": "Ball 1. ", + "b": "1050", + "a": "17", + "r1": "2", + "r2": "0", + "i": "2", + "x": "35", + "y": "37", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754148033387", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1050", + "a": "17", + "r1": "4", + "r2": "0", + "i": "2", + "x": "-8", + "y": "41", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147996520", + "p": "2901", + "n": "KENT Colton singles up the middle. MAALOUF Oliver scores. STERNER Malek to 2nd. 1 RBI. ", + "b": "1040", + "a": "16", + "r1": "9", + "r2": "18", + "i": "2", + "x": "-18", + "y": "27", + "hd": "-3", + "hp": "179", + "hl": "0" + }, + { + "t": "1754147967285", + "p": "2901", + "n": "Ball 2. ", + "b": "1040", + "a": "16", + "r1": "2", + "r2": "0", + "i": "2", + "x": "32", + "y": "69", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147946983", + "p": "2901", + "n": "Ball 1. ", + "b": "1040", + "a": "16", + "r1": "2", + "r2": "0", + "i": "2", + "x": "31", + "y": "69", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147922632", + "p": "2901", + "n": "Called Strike 2. ", + "b": "1040", + "a": "16", + "r1": "4", + "r2": "0", + "i": "2", + "x": "-9", + "y": "52", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147903182", + "p": "2901", + "n": "Foul. ", + "b": "1040", + "a": "16", + "r1": "6", + "r2": "0", + "i": "2", + "x": "7", + "y": "43", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147877932", + "p": "2901", + "n": "CZECH Tucker flies out. Infield Fly. P5. 2 out. ", + "b": "1030", + "a": "15", + "r1": "9", + "r2": "4", + "i": "2", + "x": "-5", + "y": "63", + "hd": "-39", + "hp": "94", + "hl": "70" + }, + { + "t": "1754147856125", + "p": "2901", + "n": "Ball 1. ", + "b": "1030", + "a": "15", + "r1": "2", + "r2": "0", + "i": "2", + "x": "37", + "y": "1", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147827732", + "p": "2901", + "n": "STERNER Malek walks. ", + "b": "1020", + "a": "14", + "r1": "2", + "r2": "13", + "i": "2", + "x": "31", + "y": "70", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147805511", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1020", + "a": "14", + "r1": "4", + "r2": "0", + "i": "2", + "x": "-14", + "y": "19", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147781843", + "p": "2901", + "n": "Ball 3. ", + "b": "1020", + "a": "14", + "r1": "2", + "r2": "0", + "i": "2", + "x": "38", + "y": "51", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147759174", + "p": "2901", + "n": "Ball 2. ", + "b": "1020", + "a": "14", + "r1": "2", + "r2": "0", + "i": "2", + "x": "30", + "y": "66", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147744112", + "p": "2901", + "n": "Ball 1. ", + "b": "1020", + "a": "14", + "r1": "2", + "r2": "0", + "i": "2", + "x": "31", + "y": "52", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147715379", + "p": "2901", + "n": "NORDSELL Elias out on sacrifice hit 53. Bunt. MAALOUF Oliver to 2nd. 1 out. ", + "b": "1010", + "a": "13", + "r1": "9", + "r2": "3", + "i": "2", + "x": "-12", + "y": "55", + "hd": "-19", + "hp": "45", + "hl": "5" + }, + { + "t": "1754147669326", + "p": "2901", + "n": "MAALOUF Oliver walks. ", + "b": "1090", + "a": "12", + "r1": "2", + "r2": "13", + "i": "2", + "x": "38", + "y": "30", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147654865", + "p": "2901", + "n": "Ball 3. ", + "b": "1090", + "a": "12", + "r1": "2", + "r2": "0", + "i": "2", + "x": "37", + "y": "9", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147636614", + "p": "2901", + "n": "Swinging Strike 2. ", + "b": "1090", + "a": "12", + "r1": "5", + "r2": "0", + "i": "2", + "x": "-13", + "y": "39", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147623381", + "p": "2901", + "n": "Ball 2. ", + "b": "1090", + "a": "12", + "r1": "2", + "r2": "0", + "i": "2", + "x": "30", + "y": "37", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147607648", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1090", + "a": "12", + "r1": "4", + "r2": "0", + "i": "2", + "x": "-10", + "y": "19", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147586696", + "p": "2901", + "n": "Ball 1. ", + "b": "1090", + "a": "12", + "r1": "2", + "r2": "0", + "i": "2", + "x": "38", + "y": "23", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147586696", + "p": 0, + "n": "***TOP 2", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "2", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1754147452407", + "p": "1901", + "n": "End of the 1st
0 runs, 0 lob", + "b": "2040", + "a": "12", + "r1": "0", + "r2": "0", + "i": "1", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147442205", + "p": "1901", + "n": "CASTILLO Anthony grounds out 4-3. 3 out. ", + "b": "2030", + "a": "11", + "r1": "9", + "r2": "3", + "i": "1", + "x": "-11", + "y": "25", + "hd": "8", + "hp": "113", + "hl": "0" + }, + { + "t": "1754147425523", + "p": "1901", + "n": "Ball 1. ", + "b": "2030", + "a": "11", + "r1": "2", + "r2": "0", + "i": "1", + "x": "36", + "y": "18", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147391806", + "p": "1901", + "n": "JELLNOR Lukas flies out to right center. L9. 2 out. ", + "b": "2020", + "a": "10", + "r1": "9", + "r2": "4", + "i": "1", + "x": "13", + "y": "59", + "hd": "19", + "hp": "212", + "hl": "20" + }, + { + "t": "1754147372333", + "p": "1901", + "n": "Ball 1. ", + "b": "2020", + "a": "10", + "r1": "2", + "r2": "0", + "i": "1", + "x": "31", + "y": "23", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147351267", + "p": "1901", + "n": "Foul. ", + "b": "2020", + "a": "10", + "r1": "6", + "r2": "0", + "i": "1", + "x": "15", + "y": "45", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147342435", + "p": "1901", + "n": "Called Strike 1. ", + "b": "2020", + "a": "10", + "r1": "4", + "r2": "0", + "i": "1", + "x": "-6", + "y": "40", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147315383", + "p": "1901", + "n": "SEQUERA Fernando José grounds out 4-3. 1 out. ", + "b": "2010", + "a": "9", + "r1": "9", + "r2": "3", + "i": "1", + "x": "11", + "y": "25", + "hd": "26", + "hp": "136", + "hl": "0" + }, + { + "t": "1754147315383", + "p": 0, + "n": "***BOT 1", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "1", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + }, + { + "t": "1754147138682", + "p": "2901", + "n": "Middle of the 1st
2 runs, 3 lob", + "b": "1090", + "a": "9", + "r1": "0", + "r2": "0", + "i": "1", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147136817", + "p": "2901", + "n": "ÅNGSTRöM Dante strikes out swinging. 3 out. ", + "b": "1080", + "a": "8", + "r1": "5", + "r2": "2", + "i": "1", + "x": "-20", + "y": "61", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147109865", + "p": "2901", + "n": "Foul. ", + "b": "1080", + "a": "8", + "r1": "6", + "r2": "0", + "i": "1", + "x": "-2", + "y": "43", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147090240", + "p": "2901", + "n": "Foul. ", + "b": "1080", + "a": "8", + "r1": "6", + "r2": "0", + "i": "1", + "x": "11", + "y": "36", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147075334", + "p": "2901", + "n": "Swinging Strike 2. ", + "b": "1080", + "a": "8", + "r1": "5", + "r2": "0", + "i": "1", + "x": "2", + "y": "47", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147062373", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1080", + "a": "8", + "r1": "4", + "r2": "0", + "i": "1", + "x": "17", + "y": "21", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147031983", + "p": "2901", + "n": "BERG Teo walks. CZECH Tucker scores. NORDLING Jakob to 3rd. ANDERSSON Olle to 2nd. 1 RBI. ", + "b": "1070", + "a": "7", + "r1": "2", + "r2": "13", + "i": "1", + "x": "36", + "y": "47", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754147005793", + "p": "2901", + "n": "Ball 3. ", + "b": "1070", + "a": "7", + "r1": "2", + "r2": "0", + "i": "1", + "x": "31", + "y": "14", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146982736", + "p": "2901", + "n": "Ball 2. ", + "b": "1070", + "a": "7", + "r1": "2", + "r2": "0", + "i": "1", + "x": "35", + "y": "24", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146964090", + "p": "2901", + "n": "Ball 1. ", + "b": "1070", + "a": "7", + "r1": "2", + "r2": "0", + "i": "1", + "x": "35", + "y": "40", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146945289", + "p": "2901", + "n": "Called Strike 2. ", + "b": "1070", + "a": "7", + "r1": "4", + "r2": "0", + "i": "1", + "x": "17", + "y": "29", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146928616", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1070", + "a": "7", + "r1": "4", + "r2": "0", + "i": "1", + "x": "4", + "y": "14", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146904571", + "p": "2901", + "n": "Defensive Conference", + "b": "1070", + "a": "7", + "r1": "0", + "r2": "0", + "i": "1", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146874868", + "p": "2901", + "n": "ANDERSSON Olle Hit By Pitch. STERNER Malek scores. CZECH Tucker to 3rd. NORDLING Jakob to 2nd. 1 RBI. ", + "b": "1060", + "a": "6", + "r1": "3", + "r2": "15", + "i": "1", + "x": "-54", + "y": "47", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146855855", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1060", + "a": "6", + "r1": "4", + "r2": "0", + "i": "1", + "x": "-15", + "y": "13", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146837949", + "p": "2901", + "n": "Ball 1. ", + "b": "1060", + "a": "6", + "r1": "2", + "r2": "0", + "i": "1", + "x": "39", + "y": "59", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146810545", + "p": "2901", + "n": "NORDLING Jakob walks. CZECH Tucker to 2nd. ", + "b": "1050", + "a": "5", + "r1": "2", + "r2": "13", + "i": "1", + "x": "39", + "y": "21", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146780083", + "p": "2901", + "n": "Ball 3. ", + "b": "1050", + "a": "5", + "r1": "2", + "r2": "0", + "i": "1", + "x": "31", + "y": "60", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146763806", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1050", + "a": "5", + "r1": "4", + "r2": "0", + "i": "1", + "x": "-6", + "y": "48", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146742447", + "p": "2901", + "n": "Ball 2. ", + "b": "1050", + "a": "5", + "r1": "2", + "r2": "0", + "i": "1", + "x": "35", + "y": "68", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146725709", + "p": "2901", + "n": "Ball 1. ", + "b": "1050", + "a": "5", + "r1": "2", + "r2": "0", + "i": "1", + "x": "36", + "y": "16", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146696892", + "p": "2901", + "n": "KENT Colton flies out to left center. F8. STERNER Malek to 3rd. 2 out. ", + "b": "1040", + "a": "4", + "r1": "9", + "r2": "4", + "i": "1", + "x": "-3", + "y": "51", + "hd": "-15", + "hp": "218", + "hl": "35" + }, + { + "t": "1754146660336", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1040", + "a": "4", + "r1": "4", + "r2": "0", + "i": "1", + "x": "-18", + "y": "46", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146639937", + "p": "2901", + "n": "Ball 1. ", + "b": "1040", + "a": "4", + "r1": "2", + "r2": "0", + "i": "1", + "x": "30", + "y": "17", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146609416", + "p": "2901", + "n": "CZECH Tucker walks. STERNER Malek to 2nd. ", + "b": "1030", + "a": "3", + "r1": "2", + "r2": "13", + "i": "1", + "x": "38", + "y": "70", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146589813", + "p": "2901", + "n": "Ball 3. ", + "b": "1030", + "a": "3", + "r1": "2", + "r2": "0", + "i": "1", + "x": "30", + "y": "70", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146567820", + "p": "2901", + "n": "Ball 2. ", + "b": "1030", + "a": "3", + "r1": "2", + "r2": "0", + "i": "1", + "x": "36", + "y": "59", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146546703", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1030", + "a": "3", + "r1": "4", + "r2": "0", + "i": "1", + "x": "-4", + "y": "57", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146527761", + "p": "2901", + "n": "Ball 1. ", + "b": "1030", + "a": "3", + "r1": "2", + "r2": "0", + "i": "1", + "x": "35", + "y": "41", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146493986", + "p": "2901", + "n": "STERNER Malek walks. ", + "b": "1020", + "a": "2", + "r1": "2", + "r2": "13", + "i": "1", + "x": "37", + "y": "30", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146474883", + "p": "2901", + "n": "Ball 3. ", + "b": "1020", + "a": "2", + "r1": "2", + "r2": "0", + "i": "1", + "x": "38", + "y": "45", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146451460", + "p": "2901", + "n": "Ball 2. ", + "b": "1020", + "a": "2", + "r1": "2", + "r2": "0", + "i": "1", + "x": "34", + "y": "14", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146436423", + "p": "2901", + "n": "Ball 1. ", + "b": "1020", + "a": "2", + "r1": "2", + "r2": "0", + "i": "1", + "x": "33", + "y": "34", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146420007", + "p": "2901", + "n": "Called Strike 1. ", + "b": "1020", + "a": "2", + "r1": "4", + "r2": "0", + "i": "1", + "x": "-17", + "y": "22", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146384970", + "p": "2901", + "n": "NORDSELL Elias grounds out 5-3. 1 out. ", + "b": "1010", + "a": "1", + "r1": "9", + "r2": "3", + "i": "1", + "x": "-3", + "y": "17", + "hd": "-35", + "hp": "61", + "hl": "0" + }, + { + "t": "1754146358692", + "p": "2901", + "n": "Ball 2. ", + "b": "1010", + "a": "1", + "r1": "2", + "r2": "0", + "i": "1", + "x": "33", + "y": "49", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146343216", + "p": "2901", + "n": "Ball 1. ", + "b": "1010", + "a": "1", + "r1": "2", + "r2": "0", + "i": "1", + "x": "36", + "y": "7", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146317886", + "p": "2901", + "n": "Play Ball", + "b": "1010", + "a": "1", + "r1": "0", + "r2": "0", + "i": "1", + "x": "0", + "y": "0", + "hd": "0", + "hp": "0", + "hl": "0" + }, + { + "t": "1754146317886", + "p": 0, + "n": "***TOP 1", + "b": 0, + "a": 0, + "r1": 0, + "r2": 0, + "i": "1", + "x": 0, + "y": 0, + "hd": 0, + "hp": 0, + "hl": 0 + } + ] +}