package Ġtoo th pick Ċ Ċ import Ġorg . cad ix dev . at . Access Change Ċ import Ġorg . cad ix dev . at . Access Transform Set Ċ import Ġorg . cad ix dev . at . Modifier Change Ċ import Ġorg . cad ix dev . bom be . jar . Jar Class Entry Ċ import Ġorg . cad ix dev . bom be . jar . Jar Entry Transformer Ċ import Ġorg . cad ix dev . bom be . type . signature . Method Signature Ċ import Ġorg . object web . asm .* Ċ import Ġjava . lang . reflect . Modifier ĊĊ Ċ class ĠAccess Transform ing Jar Entry Transformer ( private Ġval Ġat s : ĠAccess Transform Set ) Ġ: ĠJar Entry Transformer Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġtransform ( entry : ĠJar Class Entry ): ĠJar Class Entry ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠClass Reader ( entry . contents ) ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠClass Writer ( reader , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreader . accept ( AT Class Visitor ( ats , Ġwriter ), Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġex . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠJar Class Entry ( entry . name , Ġentry . time , Ġwriter . toByteArray ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠAT Class Visitor ( private Ġval Ġat s : ĠAccess Transform Set , Ġwriter : ĠClass Writer ) Ġ: ĠClass Visitor ( Op codes . ASM 7 , Ġwriter ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar ĠclassName : ĠString ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit ( version : ĠInt , Ġaccess : ĠInt , Ġname : ĠString ?, Ġsignature : ĠString ?, Ġsuper Name : ĠString ?, Ġinterfaces : ĠArray < out ĠString > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName Ġ= Ġname !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( ats ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġklass Ġ= Ġat s . get OrCreate Class ( className ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnew Access Ġ= Ġvisit ( access , Ġklass . get (). access , Ġklass . get (). final , Ġnull ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( className . contains (" Packet Play Out Player Info \$ Player Info Data ")) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Access Ġ= Ġnew Access Ġor ĠModifier . STATIC Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . visit ( version , Ġnew Access , Ġname , Ġsignature , Ġsuper Name , Ġinterfaces ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . visit ( version , Ġaccess , Ġname , Ġsignature , Ġsuper Name , Ġinterfaces ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Field ( access : ĠInt , Ġname : ĠString ?, Ġdescriptor : ĠString ?, Ġsignature : ĠString ?, Ġvalue : ĠAny ?): ĠField Visitor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( ats ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġklass Ġ= Ġat s . get OrCreate Class ( className ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Ġ= Ġklass . getField ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . visit Field ( visit ( access , Ġfield . access , Ġfield . final , Ġname ), Ġname , Ġdescriptor , Ġsignature , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . visit Field ( access , Ġname , Ġdescriptor , Ġsignature , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Method ( access : ĠInt , Ġname : ĠString ?, Ġdescriptor : ĠString ?, Ġsignature : ĠString ?, Ġexceptions : ĠArray < out ĠString >? ): ĠMethod Visitor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( ats ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġklass Ġ= Ġat s . get OrCreate Class ( className ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġklass . getMethod ( Method Signature . of ( name , Ġdescriptor )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . visit Method ( visit ( access , Ġmethod . access , Ġmethod . final , Ġnull ), Ġname , Ġdescriptor , Ġsignature , Ġexceptions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . visit Method ( access , Ġname , Ġdescriptor , Ġsignature , Ġexceptions ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġvisit ( access : ĠInt , Ġaccess Change : ĠAccess Change , Ġmodifier : ĠModifier Change , Ġfield : ĠString ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnew Access Ġ= Ġaccess ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpacket Override Ġ= Ġ( field Ġ!= Ġnull Ġ&& ĠclassName . substring After Last ("/ "). startsWith (" Packet ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( access Change Ġ== ĠAccess Change . PUBLIC Ġ|| Ġpacket Override ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Access Ġ= Ġaccess Ġor ĠModifier . PUBLIC ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Access Ġand ĠModifier . PROTECT ED Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Access Ġ= Ġnew Access Ġand ĠModifier . PROTECT ED . inv () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Access Ġand ĠModifier . PRIVATE Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Access Ġ= Ġnew Access Ġand ĠModifier . PRIVATE . inv () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( modifier Ġ== ĠModifier Change . REMOVE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Access Ġ= Ġnew Access Ġand ĠModifier . FINAL . inv () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew Access ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ