package Ġcom . ro un del Ċ Ċ import Ġcom . gar min . fit .* Ċ import Ġjava . io . File Ċ import Ġjava . io . FileInputStream Ċ Ċ class ĠEncoder ( destination File : ĠFile , Ġprivate Ġval Ġmaster File : ĠFile , Ġprivate Ġval Ġrecords : ĠList < Record >) Ġ: ĊĠĠĠ ĠFile Id Mes g Listener Ġ{ ĊĠĠĠ Ġprivate Ġval Ġencode : ĠFile Encoder Ġ= ĠFile Encoder ( destination File , ĠFit . Protocol Version . V 2 _ 0 ) ĊĠĠĠ Ġprivate Ġval Ġl aps Ġ= ĠArrayList < Lap Mes g >() ĊĊĠĠĠ Ġfun Ġencode () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdecode Ġ= ĠDecode () ĊĠĠĠĠĠĠĠ Ġval Ġmessage Broad caster Ġ= ĠMes g Broad caster ( decode ) ĊĊĠĠĠĠĠĠĠ Ġmessage Broad caster . addListener ( this ) ĊĠĠĠĠĠĠĠ Ġdecode . read ( FileInputStream ( master File ), Ġmessage Broad caster ) ĊĊĠĠĠĠĠĠĠ Ġl aps . forEach Ġ{ Ġencode . write ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġrecords . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencode . write ( it . get Original Record ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġencode . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd L aps ( lap s : ĠArrayList < Lap Mes g >, Ġtime Shift : ĠLong Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( lap s . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Lap Ġ= ĠLap Mes g ( lap s [ 0 ]) ĊĠĠĠĠĠĠĠ Ġfirst Lap . startTime Ġ= ĠDateTime ( records [ 0 ]. timestamp ) ĊĠĠĠĠĠĠĠ Ġthis . lap s . add ( first Lap ) ĊĊĠĠĠĠĠĠĠ Ġl aps . drop ( 1 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĠLap Mes g ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . startTime . add ( time Shift ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . lap s . add ( msg ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Mes g ( msg : ĠFile Id Mes g ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġencode . write ( msg ) ĊĠĠĠ Ġ} Ċ }