| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -97,7 +97,7 @@ struct ArenaStateInfo {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    start_ns: usize,
 | 
					 | 
					 | 
					 | 
					    start_ns: usize,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#[derive(Serialize, Deserialize, Debug)]
 | 
					 | 
					 | 
					 | 
					#[derive(Serialize, Deserialize, Debug, Clone, Copy)]
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					enum Round {
 | 
					 | 
					 | 
					 | 
					enum Round {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    None = 0,
 | 
					 | 
					 | 
					 | 
					    None = 0,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    Practice = 1,
 | 
					 | 
					 | 
					 | 
					    Practice = 1,
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -115,13 +115,32 @@ enum Round {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    Eliminations = 21,
 | 
					 | 
					 | 
					 | 
					    Eliminations = 21,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#[derive(Serialize, Deserialize, Debug)]
 | 
					 | 
					 | 
					 | 
					fn int_to_round(round: i32) -> Round {
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    match round {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        1  => Round::Practice,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        2  => Round::Qualification,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        3  => Round::QuarterFinals,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        4  => Round::SemiFinals,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        5  => Round::Finals,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        6  => Round::RoundOf16,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        7  => Round::RoundOf32,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        8  => Round::RoundOf64,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        9  => Round::RoundOf128,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        15 => Round::TopN,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        16 => Round::RoundRobin,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        20 => Round::PreEliminations,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        21 => Round::Eliminations,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        _  => Round::None,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#[derive(Serialize, Deserialize, Debug, Clone, Copy)]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					struct MatchTuple {
 | 
					 | 
					 | 
					 | 
					struct MatchTuple {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    division: String,
 | 
					 | 
					 | 
					 | 
					    division: i32,
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    round: Round,
 | 
					 | 
					 | 
					 | 
					    round: Round,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    instance: usize,
 | 
					 | 
					 | 
					 | 
					    instance: i32,
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    match_num: usize,
 | 
					 | 
					 | 
					 | 
					    match_num: i32,
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    session: usize,
 | 
					 | 
					 | 
					 | 
					    session: i32,
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#[derive(Serialize, Deserialize, Debug)]
 | 
					 | 
					 | 
					 | 
					#[derive(Serialize, Deserialize, Debug)]
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -136,41 +155,77 @@ struct MQTTMessage {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    payload: String,
 | 
					 | 
					 | 
					 | 
					    payload: String,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#[derive(Debug)]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					struct Event {
 | 
					 | 
					 | 
					 | 
					struct Event {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    name: String,
 | 
					 | 
					 | 
					 | 
					    name: String,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    divisions: Vec<Division>,
 | 
					 | 
					 | 
					 | 
					    divisions: HashMap<i32, Division>,
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					impl Event {
 | 
					 | 
					 | 
					 | 
					impl Event {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    fn new(name: String) -> Event {
 | 
					 | 
					 | 
					 | 
					    fn new(name: String) -> Event {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        Event{
 | 
					 | 
					 | 
					 | 
					        Event{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            name,
 | 
					 | 
					 | 
					 | 
					            name,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            divisions: Vec::new(),
 | 
					 | 
					 | 
					 | 
					            divisions: HashMap::new(),
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        }
 | 
					 | 
					 | 
					 | 
					        }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    fn parse_match_list(self: &Event, match_list: BackendMessage) {
 | 
					 | 
					 | 
					 | 
					    fn parse_match_list(self: &mut Event, msg: BackendMessage) {
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        let divisions: Vec<Division> = Vec::new();
 | 
					 | 
					 | 
					 | 
					        match msg.data.match_list {
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            Some(matches) => {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                for m in matches.matches.iter() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                    let match_tuple = MatchTuple{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                        division: m.division.unwrap(),
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                        round: int_to_round(m.round.unwrap()),
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                        instance: m.instance.unwrap(),
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                        match_num: m.r#match.unwrap(),
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                        session: m.session.unwrap(),
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                    };
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                    match self.divisions.get_mut(&match_tuple.division) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                        Some(division) => {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                            division.matches.push(Match{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                match_tuple: match_tuple.clone(),
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                            })
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                        },
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                        None => {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                            let mut new_division = Division{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                name: String::from(""),
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                matches: Vec::new(),
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                field_set: None,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                            };
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                            new_division.matches.push(Match{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                match_tuple: match_tuple.clone(),
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                            });
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                            self.divisions.insert(match_tuple.division, new_division);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                        },
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            },
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            None => log::warn!("Parsed match list without match_list"),
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#[derive(Debug)]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					struct Division {
 | 
					 | 
					 | 
					 | 
					struct Division {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    name: String,
 | 
					 | 
					 | 
					 | 
					    name: String,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    matches: Vec<Match>,
 | 
					 | 
					 | 
					 | 
					    matches: Vec<Match>,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    field_set: FieldSet,
 | 
					 | 
					 | 
					 | 
					    field_set: Option<FieldSet>,
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#[derive(Debug)]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					struct FieldSet {
 | 
					 | 
					 | 
					 | 
					struct FieldSet {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    fields: Vec<Field>,
 | 
					 | 
					 | 
					 | 
					    fields: Vec<Field>,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#[derive(Debug)]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					struct Field {
 | 
					 | 
					 | 
					 | 
					struct Field {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    name: String,
 | 
					 | 
					 | 
					 | 
					    name: String,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    current_match: u32,
 | 
					 | 
					 | 
					 | 
					    current_match: u32,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#[derive(Debug)]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					struct Match {
 | 
					 | 
					 | 
					 | 
					struct Match {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    name: String,
 | 
					 | 
					 | 
					 | 
					    match_tuple: MatchTuple,
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#[derive(Debug)]
 | 
					 | 
					 | 
					 | 
					#[derive(Debug)]
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -691,6 +746,7 @@ fn main() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    let get_match_list_resp = tm_connection.responses.recv().unwrap();
 | 
					 | 
					 | 
					 | 
					    let get_match_list_resp = tm_connection.responses.recv().unwrap();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    event.parse_match_list(*get_match_list_resp);
 | 
					 | 
					 | 
					 | 
					    event.parse_match_list(*get_match_list_resp);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    println!("Event after parse: {:?}", event);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    while running {
 | 
					 | 
					 | 
					 | 
					    while running {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        thread::sleep(Duration::from_millis(1000));
 | 
					 | 
					 | 
					 | 
					        thread::sleep(Duration::from_millis(1000));
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
 
 |