package Ġsz ew eq . cr after y . util Ċ Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġkotlinx . coroutines . flow . flow On Ċ import Ġorg . object web . asm . tree . Abstract Insn Node Ċ import Ġorg . object web . asm . tree . Field Node Ċ import Ġorg . object web . asm . tree . Insn List Ċ import Ġsz ew eq . desk to pose . core . Long Bi Consumer Ċ import Ġsz ew eq . kt . Kt Util Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . OutputStream Ċ import Ġjava . util .* Ċ import Ġjava . util . stream . Collectors Ċ import Ġjava . util . stream . Stream Ċ import Ġjava . util . stream . Stream Support Ċ import Ġjava . util . zip . Zip Entry Ċ import Ġjava . util . zip . Zip InputStream Ċ Ċ val ĠField Node . fixed Desc : ĠString Ġget () Ġ= Ġif Ġ( desc . startsWith (' L ')) Ġdesc . substring ( 1 , Ġdesc . length Ġ- Ġ 1 ) Ġelse Ġdesc Ċ Ċ inline Ġfun Ġ< re ified ĠK , Ġre ified ĠV > ĠMap < K , ĠV >. entry Pair Stream (): ĠStream < Pair < K , ĠV >> Ġ= ĊĠĠĠ ĠK t Util . stream Entries From ( this ) Ċ fun ĠIn sn List . stream (): ĠStream < Abstract Insn Node > Ġ= ĊĠĠĠ ĠStream Support . stream ( ĊĠĠĠĠĠĠĠ ĠSpl iter ators . spl iterator ( iterator (), Ġsize (). to Long (), ĠSpl iterator . ORDER ED ), ĊĠĠĠĠĠĠĠ Ġsize () Ġ> Ġ 1 0 ĊĠĠĠ Ġ) Ċ fun Ġ< T > ĠStream < T >. toSet (): ĠSet < T > Ġ= Ġcollect ( Collectors . to Un modifiable Set ()) Ċ Ċ inline Ġfun Ġ< re ified ĠR > ĠStream <* >. filter By Instance (): ĠStream < R > Ġ= ĠK t Util . stream Instances ( this , ĠR :: class . java ) Ċ Ċ /** Ċ Ġ* ĠIter ates Ġover Ġeach Ġentry Ġfound Ġin ĠZIP Ġinput Ġstream . Ċ Ġ*/ Ċ inline Ġfun ĠZip InputStream . each Entry ( fn : Ġ( Zip Entry ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġvar Ġlast Entry : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġze Ġ= Ġnext Entry ĊĠĠĠĠĠĠĠ Ġwhile Ġ( ze Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Entry Ġ= Ġze . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfn ( ze ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġze Ġ= Ġnext Entry ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprint (" Error Ġoccured Ġwhile Ġreading Ġentry : Ġ$ last Entry ") ĊĠĠĠĠĠĠĠ Ġex . printStackTrace () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠZip InputStream . entry Stream Flow () Ġ= Ġflow < Pair < Zip Entry , ĠInputStream >> Ġ{ ĊĠĠĠ Ġvar Ġlast Entry : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġze Ġ= Ġnext Entry ĊĠĠĠĠĠĠĠ Ġwhile Ġ( ze Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Entry Ġ= Ġze . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! ze . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb ais Ġ= ĠByteArrayInputStream ( read All Bytes ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( ze Ġto Ġb ais ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġze Ġ= Ġnext Entry ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprint (" Error Ġoccured Ġwhile Ġreading Ġentry : Ġ$ last Entry ") ĊĠĠĠĠĠĠĠ Ġex . printStackTrace () ĊĠĠĠ Ġ} Ċ }. flow On ( Dispatch ers . IO ) Ċ Ċ fun ĠInputStream . copy With Progress ( out : ĠOutputStream , Ġtotal : ĠLong , Ġprogress : ĠLong Bi Consumer ): ĠLong Ġ{ ĊĠĠĠ Ġvar Ġbytes Copied : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġval Ġbuffer Ġ= ĠByteArray ( DEFAULT _ BUFFER _ SIZE ) ĊĠĠĠ Ġvar Ġbytes Ġ= Ġread ( buffer ) ĊĠĠĠ Ġwhile Ġ( bytes Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġout . write ( buffer , Ġ 0 , Ġbytes ) ĊĠĠĠĠĠĠĠ Ġbytes Copied Ġ+= Ġbytes ĊĠĠĠĠĠĠĠ Ġprogress . accept ( bytes Copied , Ġtotal ) ĊĠĠĠĠĠĠĠ Ġbytes Ġ= Ġread ( buffer ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġbytes Copied Ċ } Ċ