package Ġcom . tap track . car rot . k ios k control Ċ Ċ import Ġandroid . n fc . N def Message Ċ import Ġcom . tap track . t cmp t appy 2 . Malformed Payload Exception Ċ import Ġcom . tap track . t cmp t appy 2 . Message Resolver Mux Ċ import Ġcom . tap track . t cmp t appy 2 . TC MP Message Ċ import Ġcom . tap track . t cmp t appy 2 . command f amilies . basic n fc . Basic N fc Command Resolver Ċ import Ġcom . tap track . t cmp t appy 2 . command f amilies . basic n fc . responses . N def Found Response Ċ import Ġcom . tap track . t cmp t appy 2 . command f amilies . basic n fc . responses . Tag Found Response Ċ import Ġcom . tap track . t cmp t appy 2 . command f amilies . system family . System Command Resolver Ċ import Ġcom . tap track . t cmp t appy 2 . command f amilies . system family . responses . Ping Response Ċ import Ġjava . util .* Ċ Ċ sealed Ġclass ĠResolved Message Ġ{ ĊĠĠĠ Ġdata Ġclass ĠN def ( val Ġuid : ĠByteArray , Ġval Ġtag Type : ĠByte , Ġval Ġn def : ĠN def Message , Ġval Ġreceived At : ĠLong ) Ġ: ĠResolved Message () Ġ{ ĊĠĠĠĠĠĠĠ Ġconstructor ( uid : ĠByteArray , Ġ Ġtag Type : ĠByte , Ġn def : ĠN def Message ) Ġ: Ġthis ( uid , Ġtag Type , Ġn def , ĠSystem . currentTimeMillis ()) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Ġas ĠN def ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Arrays . equals ( uid , Ġother . uid )) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ndef Ġ!= Ġother . ndef ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tag Type Ġ!= Ġother . tag Type ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( received At Ġ!= Ġother . received At ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĠArrays . hashCode ( uid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġn def . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġtag Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġreceived At . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠTag ( val Ġuid : ĠByteArray , Ġval Ġtag Type : ĠByte , Ġval Ġreceived At : ĠLong ) Ġ: ĠResolved Message () Ġ{ ĊĠĠĠĠĠĠĠ Ġconstructor ( uid : ĠByteArray , Ġtag Type : ĠByte ) Ġ: Ġthis ( uid , Ġtag Type , ĠSystem . currentTimeMillis ()) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Ġas ĠTag ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Arrays . equals ( uid , Ġother . uid )) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tag Type Ġ!= Ġother . tag Type ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( received At Ġ!= Ġother . received At ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĠArrays . hashCode ( uid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġtag Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġreceived At . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠPing ( val Ġreceived At : ĠLong ): ĠResolved Message () Ġ{ ĊĠĠĠĠĠĠĠ Ġconstructor () Ġ: Ġthis ( System . currentTimeMillis ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠUnexpected Response ( val Ġreceived At : ĠLong ): ĠResolved Message (){ ĊĠĠĠĠĠĠĠ Ġconstructor () Ġ: Ġthis ( System . currentTimeMillis ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠK ios k Resolver Ġ{ ĊĠĠĠ Ġprivate Ġval Ġresolver Ġ= ĠMessage Resolver Mux ( System Command Resolver (), Basic N fc Command Resolver ()) ĊĊĠĠĠ Ġfun Ġresolve ( msg : ĠT CMP Message ): ĠResolved Message ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolved Ġ= Ġresolver . resolve Response ( msg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( resolved ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠN def Found Response Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn def Msg Ġ= Ġresolved . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( ndef Msg Ġ== Ġnull Ġ|| Ġn def Msg . records ?. size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResolved Message . Unexpected Response () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResolved Message . N def ( resolved . tag Code , Ġresolved . tag Type , Ġn def Msg , ĠSystem . currentTimeMillis ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTag Found Response Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResolved Message . Tag ( resolved . tag Code , Ġresolved . tag Type , ĠSystem . currentTimeMillis ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPing Response Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResolved Message . Ping ( System . currentTimeMillis ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResolved Message . Unexpected Response () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠMal formed Payload Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResolved Message . Unexpected Response () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }