package Ġio . horizontal systems . bitcoin core . utils Ċ Ċ import Ġio . horizontal systems . bitcoin core . models . Transaction Output Ċ import Ġio . horizontal systems . bitcoin core . storage . Un spent Output Ċ Ċ object ĠB ip 6 9 Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval Ġbefore Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġconst Ġval Ġequal Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġconst Ġval Ġafter Ġ= Ġ 1 ĊĊĠĠĠ Ġval Ġoutput Comparator Ġ= Ġkotlin . Comparator < Transaction Output > Ġ{ Ġo 1 , Ġo 2 Ġ-> ĊĠĠĠĠĠĠĠ Ġ// sort Ġby Ġamount Ġfirst ĊĠĠĠĠĠĠĠ Ġval Ġvalue Compare Result Ġ= Ġo 1 . value . compareTo ( o 2 . value ) ĊĠĠĠĠĠĠĠ Ġif Ġ( value Compare Result Ġ!= Ġequal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Comparator Ġvalue Compare Result ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġkey Hash 1 Ġ= Ġo 1 . key Hash Ġ?: Ġreturn @ Comparator Ġafter ĊĠĠĠĠĠĠĠ Ġval Ġkey Hash 2 Ġ= Ġo 2 . key Hash Ġ?: Ġreturn @ Comparator Ġbefore ĊĊĠĠĠĠĠĠĠ Ġ// when Ġamounts Ġare Ġequal , Ġsort Ġby Ġhash ĊĠĠĠĠĠĠĠ Ġval Ġhash Compare Result Ġ= Ġcompare Byte Arrays ( key Hash 1 , Ġkey Hash 2 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( hash Compare Result Ġ!= Ġequal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Comparator Ġhash Compare Result ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// sort Ġby Ġhash Ġsize ĊĠĠĠĠĠĠĠ Ġreturn @ Comparator Ġkey Hash 1 . size . compareTo ( key Hash 2 . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġinput Comparator Ġ= Ġkotlin . Comparator < Un spent Output > Ġ{ Ġo 1 , Ġo 2 Ġ-> ĊĠĠĠĠĠĠĠ Ġ// sort Ġby Ġhash Ġfirst ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompare Byte Arrays ( o 1 . output . transaction Hash , Ġo 2 . output . transaction Hash ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġequal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Comparator Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// sort Ġby Ġindex ĊĠĠĠĠĠĠĠ Ġreturn @ Comparator Ġo 1 . output . index . compareTo ( o 2 . output . index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompare Byte Arrays ( b 1 : ĠByteArray , Ġb 2 : ĠByteArray ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpos Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( pos Ġ< Ġb 1 . size Ġ&& Ġpos Ġ< Ġb 2 . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ( b 1 [ pos ]. toInt () Ġand Ġ 0 xff ). compareTo ( b 2 [ pos ]. toInt () Ġand Ġ 0 xff ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġequal ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpos ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġequal ĊĠĠĠ Ġ} Ċ } Ċ