package Ġorg . open rs 2 . de ob . byte code . remap Ċ Ċ import Ġorg . open rs 2 . asm . classpath . Extended Rem apper Ċ import Ġorg . open rs 2 . asm . classpath . Library Ċ Ċ private Ġval ĠBO UND ARY _ CHARS Ġ= Ġchar ArrayOf ('/', Ġ' !') Ċ Ċ public Ġfun ĠString . split At Library Boundary (): ĠPair < String , ĠString > Ġ{ ĊĠĠĠ Ġval Ġindex Ġ= ĠindexOf (' !') ĊĠĠĠ Ġreturn ĠPair ( substring ( 0 , Ġindex ), Ġsubstring ( index Ġ+ Ġ 1 )) Ċ } Ċ Ċ public Ġfun ĠString . get Library And PackageName (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġsubstring ( 0 , Ġlast IndexOf Any ( BOUND ARY _ CHARS ) Ġ+ Ġ 1 ) Ċ } Ċ Ċ public Ġfun ĠString . get ClassName (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġsubstring ( lastIndexOf Any ( BOUND ARY _ CHARS ) Ġ+ Ġ 1 ) Ċ } Ċ Ċ public Ġclass ĠClass Name Prefix Rem apper ( var arg Ġlibraries : ĠLibrary ) Ġ: ĠExtended Rem apper () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmapping Ġ= Ġmutable Map Of < String , ĠString >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( library Ġin Ġlibraries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( clazz Ġin Ġlibrary ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire (! clazz . name . contains (' ! ')) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Input Ġclass Ġname Ġcontains Ġ! , Ġwhich Ġconflicts Ġwith Ġlibrary Ġseparator " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapping . put If Absent ( clazz . name , Ġ"${ library . name }! ${ clazz . name }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmap ( internal Name : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmapping . get OrDefault ( internal Name , Ġinternal Name ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ public Ġobject ĠStrip ClassName Prefix Rem apper Ġ: ĠExtended Rem apper () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġmap ( internal Name : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinternal Name . substring ( internal Name . indexOf (' !') Ġ+ Ġ 1 ) ĊĠĠĠ Ġ} Ċ } Ċ