package Ġcom . re vol gen x . an ilib . app widget . service Ċ Ċ import Ġandroid . app widget . App Widget Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Remote Views Ċ import Ġandroid . widget . Remote Views Service Ċ import Ġandroidx . core . net . to Uri Ċ import Ġcom . facebook . common . references . Closeable Reference Ċ import Ġcom . facebook . datasource . Data Sources Ċ import Ġcom . facebook . draw ee . backends . pipeline . F resco Ċ import Ġcom . facebook . image pipeline . common . Image Decode Options Ċ import Ġcom . facebook . image pipeline . image . Closeable Image Ċ import Ġcom . facebook . image pipeline . image . Closeable Static Bitmap Ċ import Ġcom . facebook . image pipeline . request . Image RequestBuilder Ċ import Ġcom . re vol gen x . an ilib . R Ċ import Ġcom . re vol gen x . an ilib . app widget . ui . widget . A iring Schedule Widget Ċ import Ġcom . re vol gen x . an ilib . air ing . data . field . A iring Media Field Ċ import Ġcom . re vol gen x . an ilib . air ing . data . model . A iring Schedule Model Ċ import Ġcom . re vol gen x . an ilib . common . repository . util . Resource Ċ import Ġcom . re vol gen x . an ilib . air ing . service . A iring Media Service Ċ import Ġcom . re vol gen x . an ilib . common . preference .* Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . k oin . core . component . K oin Component Ċ import Ġorg . k oin . core . component . inject Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . time . Local Time Ċ import Ġjava . time . Z onedDateTime Ċ import Ġjava . time . temporal . Week Fields Ċ import Ġjava . util .* Ċ import Ġkotlin . coroutines . resume Ċ import Ġkotlin . coroutines . suspend Coroutine Ċ Ċ class ĠA iring Schedule Remote Views Service Ġ: ĠRemote Views Service () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġon Get View Factory ( intent : ĠIntent ): ĠRemote Views Factory Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠA iring Schedule Widget Factory ( application Context , Ġintent ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġclass ĠA iring Schedule Widget Factory ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , Ġintent : ĠIntent ĊĠĠĠ Ġ) Ġ: ĠRemote Views Factory , ĠK oin Component Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġapp Widget Id Ġ= Ġintent . getInt Extra ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Widget Manager . EXTRA _ APP WIDGET _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Widget Manager . INVALID _ APP WIDGET _ ID ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġitems Ġ= Ġmutable ListOf < A iring Schedule Model >() ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġa iring Media Service : ĠA iring Media Service Ġby Ġinject () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcomposite Disposable Ġ= ĠComposite Disposable () ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġfield : ĠA iring Media Field Ġ= ĠA iring Media Field () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġweek Fields Ġby Ġlazy Ġ{ ĠWeek Fields . of ( Locale . getDefault ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstart DateTime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( field . is Week ly Type Date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now (). with ( week Fields . day OfWeek (), Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( Local Time . MIN ) Ġelse ĠZ onedDateTime . now (). with ( Local Time . MIN ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġend DateTime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( field . is Week ly Type Date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now (). with ( week Fields . day OfWeek (), Ġ 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( Local Time . MAX ) Ġelse ĠZ onedDateTime . now (). with ( Local Time . MAX ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġapp Widget Manager Ġ= ĠApp Widget Manager . getInstance ( context ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( logged In ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . userId Ġ= ĠUser Preference . userId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Field () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// TODO Ġsend Ġevent Ċ // ĠĠĠĠĠĠĠ Ġ@ Subscribe ( thread Mode Ġ= ĠThread Mode . MAIN ) Ċ // ĠĠĠĠĠĠĠ Ġfun Ġon Event ( event : ĠList Editor Result Event ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfield . isNew Field Ġ= Ġtrue Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġapp Widget Manager . notify App Widget ViewData Changed ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Widget Id , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . air ing _ widget _ list _ view Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġupdate Field () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget A iring Schedule Field For Widget ( field ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield . air ing GreaterThan Ġ= Ġstart DateTime . to Epoch Second (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield . air ing LessThan Ġ= Ġend DateTime . to Epoch Second (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield . per Page Ġ= Ġ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield . page Ġ= ĠA iring Widget Preference . getPage ( app Widget Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon DataSet Changed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loader ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Field () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsus pended Query Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuspend Coroutine < Resource < List < A iring Schedule Model >>> Ġ{ Ġcontinuation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa iring Media Service . get A iring Media ( field , Ġcomposite Disposable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsus pended Query Ġis ĠResource . Success Ġ&& Ġsus pended Query . data Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa iring Models Ġ= Ġsus pended Query . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . addAll ( air ing Models ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsus pended Query Ġis ĠResource . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( sus pended Query . exception , Ġsus pended Query . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loader ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġitems . size ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget View At ( position : ĠInt ): ĠRemote Views ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( position Ġ>= Ġitems . size ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġitems [ position ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa iring Time Model Ġ= Ġitem . air ing At Model !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa iring At Time Ġ= Ġa iring Time Model . air ing Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa iring At Day Ġ= Ġa iring Time Model . air ing Day Medium ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa iring Episode Ġ= Ġitem . episode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Until A iring Ġ= Ġitem . time Until A iring Model !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcover Image Ġ= Ġitem . media ?. cover Image ?. s Image ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġitem . media ?. title !!. title () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshow Eta Ġ= ĠA iring Widget Preference . show Eta () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremote Views Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRemote Views ( context . packageName , ĠR . layout . air ing _ schedule _ widget _ item _ layout ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfill Intent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfill Intent . putExtra ( A iring Schedule Widget . WIDGET _ MEDIA _ ITEM , Ġitem . media Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote Views . setOn Click Fill In Intent ( R . id . wg _ air ing _ container , Ġfill Intent ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote Views . setText View Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . wg _ media _ name _ tv , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( show Eta ) Ġtitle Ġelse Ġcontext . getString ( R . string . widget _ air ing _ episode , Ġa iring Episode , Ġtitle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Eta ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Views . setView Visibility ( R . id . wg _ air ing _ at _ tv , ĠView . VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Views . setText View Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . wg _ air ing _ at _ tv , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field . is Week ly Type Date ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . widget _ air ing _ at _ weekly _ format , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa iring Episode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Until A iring . day , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Until A iring . hour , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Until A iring . min ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . widget _ air ing _ at _ format , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa iring Episode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Until A iring . hour , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Until A iring . min ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Views . setView Visibility ( R . id . wg _ air ing _ at _ tv , ĠView . GONE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote Views . setText View Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . wg _ air ing _ at _ time _ tv , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field . is Week ly Type Date ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ air ing At Day , Ġ$ air ing At Time " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa iring At Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdataSource Ġ= ĠF resco . getImage Pipeline (). fetch Decoded Image ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage RequestBuilder . newBuilder With Source ( cover Image !!. to Uri ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setImage Decode Options ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage Decode Options . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Force Static Image ( true ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Local Thumbnail Pre views Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Sources . waitFor Final Result < Closeable Reference < Closeable Image >>( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdataSource ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( result . get () Ġas ĠClose able Static Bitmap ). underlying Bitmap . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( result . get () Ġas ĠClose able Static Bitmap ). underlying Bitmap . config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Views . set ImageView Bitmap ( R . id . wg _ air ing _ media _ iv , Ġit ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġremote Views ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Loading View (): ĠRemote Views ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget ViewType Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġposition . to Long () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Stable Ids (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġshow Loader ( b : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidget Remote View Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRemote Views ( context . packageName , ĠR . layout . air ing _ schedule _ widget _ layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidget Remote View . setView Visibility ( R . id . wg _ loading _ bar , ĠView . VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidget Remote View . setView Visibility ( R . id . wg _ loading _ bar , ĠView . GONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Widget Manager . part ially Update App Widget ( app Widget Id , Ġwidget Remote View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{} ĊĠĠĠ Ġ} Ċ }