/* Ċ Ġ* ĠCopyright Ġ 2 0 1 2 , ĠAs amm ĠSoftware , Ġs . Ġr . Ġo . Ċ Ġ* Ċ Ġ* ĠThis Ġfile Ġis Ġpart Ġof ĠL ocus API . Ċ Ġ* Ċ Ġ* ĠL ocus API Ġis Ġfree Ġsoftware : Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify Ċ Ġ* Ġit Ġunder Ġthe Ġterms Ġof Ġthe ĠLesser ĠGNU ĠGeneral ĠPublic ĠLicense Ċ Ġ* Ġas Ġpublished Ġby Ġthe ĠFree ĠSoftware ĠFoundation , Ġeither Ġversion Ġ 3 Ċ Ġ* Ġof Ġthe ĠLicense , Ġor Ġ( at Ġyour Ġoption ) Ġany Ġlater Ġversion . Ċ Ġ* Ċ Ġ* ĠL ocus API Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , Ċ Ġ* Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof Ċ Ġ* ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ġ ĠSee Ġthe Ċ Ġ* ĠLesser ĠGNU ĠGeneral ĠPublic ĠLicense Ġfor Ġmore Ġdetails . Ċ Ġ* Ċ Ġ* ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠLesser ĠGNU ĠGeneral ĠPublic Ċ Ġ* ĠLicense Ġalong Ġwith ĠL ocus API . ĠIf Ġnot , Ġsee Ċ Ġ* Ġ< http :// www . gnu . org / licenses / lg pl . html />. Ċ Ġ*/ Ċ Ċ package Ġloc us . api . objects . geo Data Ċ Ċ import Ġloc us . api . objects . extra . Geo Data Extra Ċ import Ġloc us . api . objects . extra . Location Ċ import Ġloc us . api . objects . ge oc aching . Ge oc aching Data Ċ import Ġloc us . api . utils . DataReader BigEndian Ċ import Ġloc us . api . utils . Data Writer BigEndian Ċ import Ġloc us . api . utils . Logger Ċ import Ġjava . io . IOException Ċ Ċ class ĠPoint () Ġ: ĠGeo Data () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLocation Ġof Ġcurrent Ġpoint . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġlocation : ĠLocation Ġ= ĠLocation () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdditional Ġgeo Caching Ġdata ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġgc Data : ĠGe oc aching Data ? Ġ= Ġnull ĊĊĠĠĠ Ġ// ĠEX TRA ĠCALL BACK ĊĊĠĠĠ Ġval Ġextra Callback : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Parameter ( Geo Data Extra . PAR _ INT ENT _ EXTRA _ CALLBACK ) ĊĊĠĠĠ Ġval Ġextra On Display : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Parameter ( Geo Data Extra . PAR _ INT ENT _ EXTRA _ ON _ DISPLAY ) ĊĊĠĠĠ Ġ// ĠGE OC ACH ING ĠDATA ĊĊĠĠĠ Ġvar Ġge oc aching Data : ĠByteArray ? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdw Ġ= ĠData Writer BigEndian () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Ge oc aching Data ( dw ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdw . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . log E ( TAG , Ġ" get Ge oc aching Data ()", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset ( data ) Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgc Data Ġ= Ġread Ge oc aching Data ( DataReader BigEndian ( data )) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . log E ( TAG , Ġ" set Ge oc aching Data ($ data )", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgc Data Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġpoint Ġwith Ġknown Ġname Ġand Ġit 's Ġlocation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( name : ĠString , Ġloc : ĠLocation ) Ġ: Ġthis () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġthis . location Ġ= Ġloc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSimply Ġallow Ġset Ġcallback Ġvalue Ġon Ġpoint . ĠThis Ġappear Ġwhen Ġyou Ġclick Ġon Ġpoint ĊĠĠĠĠ Ġ* Ġand Ġthen Ġunder Ġlast Ġbutton Ġwill Ġbe Ġyour Ġbutton . ĠClick ing Ġon Ġit , Ġlaunch Ġby Ġyou , ĊĠĠĠĠ Ġ* Ġdefined Ġintent ĊĠĠĠĠ Ġ* Ġ< br ></ br >< br ></ br > ĊĠĠĠĠ Ġ* ĠDo Ġnot Ġforget Ġto Ġset Ġthis Ġhttp :// developer . android . com / guide / topics / manifest / activity - element . html # exported ĊĠĠĠĠ Ġ* Ġto Ġyour Ġactivity , Ġif Ġyou 'll Ġset Ġcallback Ġto Ġother Ġthen Ġlauncher Ġactivity ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbtn Name ĠĠĠĠĠĠĠĠ ĠName Ġdisplayed Ġon Ġbutton ĊĠĠĠĠ Ġ* Ġ@ param ĠpackageName ĠĠĠĠ Ġthis Ġvalue Ġis Ġused Ġfor Ġcreating Ġintent Ġthat ĊĠĠĠĠ Ġ* Ġwill Ġbe Ġcalled Ġin Ġcallback Ġ( for Ġexample Ġcom . super . application ) ĊĠĠĠĠ Ġ* Ġ@ param ĠclassName ĠĠĠĠĠĠ Ġthe Ġname Ġof Ġthe Ġclass Ġinside Ġof Ġcom . super . application ĊĠĠĠĠ Ġ* Ġthat Ġimplements Ġthe Ġcomponent Ġ( for Ġexample Ġcom . super . application . Main ) ĊĠĠĠĠ Ġ* Ġ@ param Ġreturn Data Name Ġ ĠString Ġunder Ġwhich Ġdata Ġwill Ġbe Ġstored . ĠCan Ġbe ĊĠĠĠĠ Ġ* Ġretrieved Ġby ĠString Ġdata Ġ= Ġget Intent . getString Extra (" return Data "); ĊĠĠĠĠ Ġ* Ġ@ param Ġreturn Data Value ĠString Ġunder Ġwhich Ġdata Ġwill Ġbe Ġstored . ĠCan Ġbe ĊĠĠĠĠ Ġ* Ġretrieved Ġby ĠString Ġdata Ġ= Ġget Intent . getString Extra (" return Data "); ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Extra Callback ( btn Name : ĠString , ĠpackageName : ĠString , ĠclassName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Data Name : ĠString , Ġreturn Data Value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġprepare Ġcallback ĊĠĠĠĠĠĠĠ Ġval Ġcall Back Ġ= ĠGeo Data Extra . generate Callback String ( btn Name , ĠpackageName , ĠclassName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Data Name , Ġreturn Data Value ) ĊĠĠĠĠĠĠĠ Ġif Ġ( call Back . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġgenerate Ġfinal Ġtext ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġb . append ( TAG _ EXTRA _ CALLBACK ). append ("; ") ĊĠĠĠĠĠĠĠ Ġb . append ( call Back ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġfinally Ġinsert Ġparameter ĊĠĠĠĠĠĠĠ Ġadd Parameter ( Geo Data Extra . PAR _ INT ENT _ EXTRA _ CALLBACK , Ġb . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIf Ġyou Ġwant Ġto Ġremove ĠPAR _ INT ENT _ EXTRA _ CALLBACK Ġparame tr Ġfrom ĠL ocus Ġdatabase , ĊĠĠĠĠ Ġ* Ġyou Ġneed Ġto Ġsend Ġ" clear " Ġvalue Ġin Ġupdated Ġway point Ġback Ġto ĠL ocus . ĠAfter Ġthat , ĊĠĠĠĠ Ġ* ĠL ocus Ġwill Ġremove Ġthis Ġparameter Ġfrom Ġnew Ġstored Ġpoint . ĊĠĠĠĠ Ġ* Ġ< br ></ br >< br ></ br > ĊĠĠĠĠ Ġ* ĠSecond Ġalternative , Ġhow Ġto Ġremove Ġthis Ġcallback , Ġis Ġto Ġsend Ġnew Ġway points ĊĠĠĠĠ Ġ* Ġwith Ġforce Overwrite Ġparameter Ġset Ġto Ġ` true `, Ġthat Ġwill Ġoverwrite ĊĠĠĠĠ Ġ* Ġcompletely Ġall Ġdata ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Extra Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Parameter ( Geo Data Extra . PAR _ INT ENT _ EXTRA _ CALLBACK , Ġ" clear ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExtra Ġfeature Ġthat Ġallow Ġto Ġsend Ġto Ġloc us Ġonly Ġpartial Ġpoint Ġdata . ĠWhen Ġyou Ġclick Ġon ĊĠĠĠĠ Ġ* Ġpoint Ġ( in Ġtime Ġwhen Ġsmall Ġpoint Ġdialog Ġshould Ġappear ), Ġloc us Ġsend Ġintent Ġto Ġyour Ġapp , ĊĠĠĠĠ Ġ* Ġyou Ġcan Ġthen Ġfill Ġcomplete Ġpoint Ġand Ġsend Ġit Ġback Ġto ĠL ocus . ĠClear Ġand Ġcle ver ĊĠĠĠĠ Ġ* Ġ< br ></ br >< br ></ br > ĊĠĠĠĠ Ġ* ĠDo Ġnot Ġforget Ġto Ġset Ġthis Ġhttp :// developer . android . com / guide / topics / manifest / activity - element . html # exported ĊĠĠĠĠ Ġ* Ġto Ġyour Ġactivity , Ġif Ġyou 'll Ġset Ġcallback Ġto Ġother Ġthen Ġlauncher Ġactivity ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠpackageName ĠĠĠĠ Ġthis Ġvalue Ġis Ġused Ġfor Ġcreating Ġintent Ġthat ĊĠĠĠĠ Ġ* Ġwill Ġbe Ġcalled Ġin Ġcallback Ġ( for Ġexample Ġcom . super . application ) ĊĠĠĠĠ Ġ* Ġ@ param ĠclassName ĠĠĠĠĠĠ Ġthe Ġname Ġof Ġthe Ġclass Ġinside Ġof Ġcom . super . application ĊĠĠĠĠ Ġ* Ġthat Ġimplements Ġthe Ġcomponent Ġ( for Ġexample Ġcom . super . application . Main ) ĊĠĠĠĠ Ġ* Ġ@ param Ġreturn Data Name Ġ ĠString Ġunder Ġwhich Ġdata Ġwill Ġbe Ġstored . ĠCan Ġbe ĊĠĠĠĠ Ġ* Ġretrieved Ġby ĠString Ġdata Ġ= Ġget Intent . getString Extra (" return Data "); ĊĠĠĠĠ Ġ* Ġ@ param Ġreturn Data Value Ġvalue Ġthat Ġwill Ġbe Ġreceived Ġwhen Ġyou Ġtry Ġto Ġget ĊĠĠĠĠ Ġ* Ġdata Ġfrom Ġreceived Ġresponse ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Extra On Display ( packageName : ĠString , ĠclassName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Data Name : ĠString , Ġreturn Data Value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġsb . append ( TAG _ EXTRA _ ON _ DISPLAY ). append ("; ") ĊĠĠĠĠĠĠĠ Ġsb . append ( packageName ). append ("; ") ĊĠĠĠĠĠĠĠ Ġsb . append ( className ). append ("; ") ĊĠĠĠĠĠĠĠ Ġsb . append ( return Data Name ). append ("; ") ĊĠĠĠĠĠĠĠ Ġsb . append ( return Data Value ). append ("; ") ĊĠĠĠĠĠĠĠ Ġadd Parameter ( Geo Data Extra . PAR _ INT ENT _ EXTRA _ ON _ DISPLAY , Ġsb . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIf Ġyou Ġwant Ġto Ġremove ĠPAR _ INT ENT _ EXTRA _ ON _ DISPLAY Ġparameter Ġfrom ĠL ocus Ġdatabase , ĊĠĠĠĠ Ġ* Ġyou Ġneed Ġto Ġsend Ġ" clear " Ġvalue Ġin Ġupdated Ġway point Ġback Ġto ĠL ocus . ĠAfter Ġthat , ĊĠĠĠĠ Ġ* ĠL ocus Ġwill Ġremove Ġthis Ġparameter Ġfrom Ġnew Ġstored Ġpoint . ĊĠĠĠĠ Ġ* Ġ< br ></ br >< br ></ br > ĊĠĠĠĠ Ġ* ĠSecond Ġalternative , Ġhow Ġto Ġremove Ġthis Ġcallback , Ġis Ġto Ġsend Ġnew Ġway points ĊĠĠĠĠ Ġ* Ġwith Ġforce Overwrite Ġparameter Ġset Ġto Ġ` true `, Ġthat Ġwill Ġoverwrite ĊĠĠĠĠ Ġ* Ġcompletely Ġall Ġdata ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Extra On Display () Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Parameter ( Geo Data Extra . PAR _ INT ENT _ EXTRA _ ON _ DISPLAY , Ġ" clear ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ************************************************ * ĊĠĠĠ Ġ// ĠSTOR ABLE ĊĠĠĠ Ġ// ************************************************ * ĊĊĠĠĠ Ġoverride Ġfun Ġget Version (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 4 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġread Object ( version : ĠInt , Ġdr : ĠData Reader BigEndian ) Ġ{ ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġdr . read Long () ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġdr . readString () ĊĠĠĠĠĠĠĠ Ġlocation Ġ= ĠLocation (). apply Ġ{ Ġread ( dr ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġread Ġextra Ġdata ĊĠĠĠĠĠĠĠ Ġread Extra Data ( dr ) ĊĠĠĠĠĠĠĠ Ġread Styles ( dr ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġread Ġge oc aching ĊĠĠĠĠĠĠĠ Ġgc Data Ġ= Ġread Ge oc aching Data ( dr ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠV 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( version Ġ>= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Created Ġ= Ġdr . read Long () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠV 2 ĊĠĠĠĠĠĠĠ Ġif Ġ( version Ġ>= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Write Mode Ġ= ĠRead Write Mode . values ()[ dr . readInt ()] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠV 3 ĊĠĠĠĠĠĠĠ Ġif Ġ( version Ġ>= Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Updated Ġ= Ġdr . read Long () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠV 4 ĊĠĠĠĠĠĠĠ Ġif Ġ( version Ġ>= Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprivacy Value Ġ= Ġdr . readString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivacy Ġ= ĠPrivacy . values (). find Ġ{ Ġit . name Ġ== Ġprivacy Value Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġprivacy ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġwrite Object ( dw : ĠData Writer BigEndian ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdw . write Long ( id ) ĊĠĠĠĠĠĠĠ Ġdw . writeString ( name ) ĊĠĠĠĠĠĠĠ Ġlocation . write ( dw ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwrite Ġextra Ġdata ĊĠĠĠĠĠĠĠ Ġwrite Extra Data ( dw ) ĊĠĠĠĠĠĠĠ Ġwrite Styles ( dw ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwrite Ġge oc aching Ġdata ĊĠĠĠĠĠĠĠ Ġwrite Ge oc aching Data ( dw ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠV 1 ĊĠĠĠĠĠĠĠ Ġdw . write Long ( time Created ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠV 2 ĊĠĠĠĠĠĠĠ Ġdw . writeInt ( read Write Mode . ordinal ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠV 3 ĊĠĠĠĠĠĠĠ Ġdw . write Long ( time Updated ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠV 4 ĊĠĠĠĠĠĠĠ Ġdw . writeString ( privacy . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġwrite Ge oc aching Data ( dw : ĠData Writer BigEndian ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgc Data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdw . write Boolean ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . write ( dw ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdw . write Boolean ( false ) ĊĠĠĠĠĠĠĠ Ġ} () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġtag Ġfor Ġlogger ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Point " ĊĊĠĠĠĠĠĠĠ Ġ// Ġcallback Ġparameter ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG _ EXTRA _ CALLBACK Ġ= Ġ" TAG _ EXTRA _ CALLBACK " ĊĊĠĠĠĠĠĠĠ Ġ// Ġextra Ġon - display Ġparameter ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG _ EXTRA _ ON _ DISPLAY Ġ= Ġ" TAG _ EXTRA _ ON _ DISPLAY " ĊĊĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠ Ġfun Ġread Ge oc aching Data ( dr : ĠData Reader BigEndian ): ĠGe oc aching Data ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( dr . read Boolean ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGe oc aching Data (). apply Ġ{ Ġread ( dr ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ