/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 8 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . backend . jvm . descriptors Ċ Ċ import Ġorg . jetbrains . kotlin . backend . common . descriptors .* Ċ import Ġorg . jetbrains . kotlin . backend . common . ir . Shared Variables Manager Ċ import Ġorg . jetbrains . kotlin . backend . common . ir . addChild Ċ import Ġorg . jetbrains . kotlin . builtins . Kotlin Built Ins Ċ import Ġorg . jetbrains . kotlin . builtins . Primitive Type Ċ import Ġorg . jetbrains . kotlin . descriptors . Module Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . impl . Empty Package Fragment Descriptor Ċ import Ġorg . jetbrains . kotlin . ir . Ir Statement Ċ import Ġorg . jetbrains . kotlin . ir . UNDEFINED _ OFFSET Ċ import Ġorg . jetbrains . kotlin . ir . builders . declarations . build Class Ċ import Ġorg . jetbrains . kotlin . ir . builders . declarations . build Constructor Ċ import Ġorg . jetbrains . kotlin . ir . builders . declarations . build Field Ċ import Ġorg . jetbrains . kotlin . ir . builders . declarations . build Value Parameter Ċ import Ġorg . jetbrains . kotlin . ir . declarations .* Ċ import Ġorg . jetbrains . kotlin . ir . declarations . impl .* Ċ import Ġorg . jetbrains . kotlin . ir . descriptors . Ir Built Ins Ċ import Ġorg . jetbrains . kotlin . ir . expressions .* Ċ import Ġorg . jetbrains . kotlin . ir . expressions . impl .* Ċ import Ġorg . jetbrains . kotlin . ir . symbols . Ir Field Symbol Ċ import Ġorg . jetbrains . kotlin . ir . symbols . Ir Variable Symbol Ċ import Ġorg . jetbrains . kotlin . ir . symbols . impl .* Ċ import Ġorg . jetbrains . kotlin . ir . types .* Ċ import Ġorg . jetbrains . kotlin . ir . types . impl . Ir Simple Type Impl Ċ import Ġorg . jetbrains . kotlin . ir . types . impl . make Type Projection Ċ import Ġorg . jetbrains . kotlin . ir . types . impl . original Kotlin Type Ċ import Ġorg . jetbrains . kotlin . ir . util . default Type Ċ import Ġorg . jetbrains . kotlin . ir . util . parent As Class Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . name . Name Ċ import Ġorg . jetbrains . kotlin . types .* Ċ Ċ private Ġval ĠSHARE D _ VARIABLE _ ORIGIN Ġ= Ġobject Ġ: ĠIr Declaration Origin Impl (" SHARED _ VARIABLE _ ORIGIN ") Ġ{} Ċ private Ġval ĠSHARE D _ VARIABLE _ CON STRUCTOR _ CALL _ ORIGIN Ġ= Ġobject Ġ: ĠIr Statement Origin Impl (" SHARED _ VARIABLE _ CON STRUCTOR _ CALL ") Ġ{} Ċ Ċ class ĠJ vm Shared Variables Manager ( ĊĠĠĠ Ġmodule : ĠModule Descriptor , ĊĠĠĠ Ġval Ġbuilt Ins : ĠKotlin Built Ins , ĊĠĠĠ Ġval Ġir Built Ins : ĠIr Built Ins Ċ ) Ġ: ĠShared Variables Manager Ġ{ ĊĠĠĠ Ġprivate Ġval Ġj vm Internal Package Ġ= ĠIr External Package Fragment Impl ( ĊĠĠĠĠĠĠĠ ĠIr External Package Fragment Symbol Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEmpty Package Fragment Descriptor ( module , ĠF q Name (" kotlin . jvm . internal ")) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġref Namespace Class Ġ= Ġbuild Class Ġ{ ĊĠĠĠĠĠĠĠ Ġname Ġ= ĠName . identifier (" Ref ") ĊĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠ Ġparent Ġ= Ġj vm Internal Package ĊĠĠĠĠĠĠĠ Ġj vm Internal Package . addChild ( this ) ĊĠĠĠĠĠĠĠ Ġsuper Types . add ( ir Built Ins . any Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġabstract Ġclass ĠRef Provider Ġ{ ĊĠĠĠĠĠĠĠ Ġabstract Ġval Ġelement Type : ĠIr Type ĊĠĠĠĠĠĠĠ Ġabstract Ġval Ġref Class : ĠIr Class ĊĠĠĠĠĠĠĠ Ġabstract Ġfun Ġget Ref Type ( valueType : ĠIr Type ): ĠIr Simple Type ĊĊĠĠĠĠĠĠĠ Ġ// ĠHave Ġto Ġinitialize Ġfields Ġl az ily Ġin Ġorder Ġto Ġrefer Ġto Ġref Class . ĊĠĠĠĠĠĠĠ Ġval Ġref Constructor : ĠIr Constructor Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Constructor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Ġ= ĠSHARE D _ VARIABLE _ ORIGIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠreturnType Ġ= Ġref Class . default Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ= Ġref Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġref Class . add Member ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġelement Field : ĠIr Field Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Field Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Ġ= ĠSHARE D _ VARIABLE _ ORIGIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= ĠName . identifier (" element ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġelement Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ= Ġref Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġref Class . add Member ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠPrimitive Ref Provider ( override Ġval Ġelement Type : ĠIr Type ) Ġ: ĠRef Provider () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġref Class Ġ= Ġbuild Class Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Ġ= ĠSHARE D _ VARIABLE _ ORIGIN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= ĠName . identifier ( elementType . class OrNull !!. owner . name . asString () Ġ+ Ġ" Ref ") ĊĠĠĠĠĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ= Ġref Namespace Class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġref Namespace Class . add Member ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper Types . add ( ir Built Ins . any Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Receiver Ġ= Ġbuild Value Parameter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠIr Simple Type Impl ( symbol , Ġhas Question Mark Ġ= Ġfalse , Ġarguments Ġ= Ġempty List (), Ġannotations Ġ= Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= ĠName . identifier ("$ this ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . parent Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Ref Type ( valueType : ĠIr Type ) Ġ= Ġref Class . default Type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġprimitive Ref Providers Ġ= Ġir Built Ins . primitive Ir Types . associate Ġ{ Ġprimitive Type Ġ-> ĊĠĠĠĠĠĠĠ Ġprimitive Type . classifier OrFail Ġto ĠPrimitive Ref Provider ( primitive Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġobject Ref Provider Ġ= Ġobject Ġ: ĠRef Provider () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġref Class Ġ= Ġbuild Class Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Ġ= ĠSHARE D _ VARIABLE _ ORIGIN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= ĠName . identifier (" Object Ref ") ĊĠĠĠĠĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġir Class Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Parameters . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIr Type Parameter Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUN DEFINED _ OFFSET , ĠUN DEFINED _ OFFSET , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSHARE D _ VARIABLE _ ORIGIN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIr Type Parameter Symbol Impl ( Wrapped Type Parameter Descriptor ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠName . identifier (" T "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariance Ġ= ĠVari ance . IN VARIANT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Re ified Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( descriptor Ġas ĠWr apped Type Parameter Descriptor ). bind ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ= Ġir Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper Types . add ( ir Built Ins . any N Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ= Ġref Namespace Class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġref Namespace Class . add Member ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper Types . add ( ir Built Ins . any Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Receiver Ġ= Ġbuild Value Parameter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠIr Simple Type Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsymbol , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Question Mark Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Type Projection ( type Parameters [ 0 ]. default Type , ĠVari ance . IN VARIANT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotations Ġ= Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= ĠName . identifier ("$ this ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . parent Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġelement Type Ġ= Ġref Class . type Parameters [ 0 ]. default Type ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Ref Type ( valueType : ĠIr Type ) Ġ= Ġref Class . type With ( listOf ( valueType )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Provider ( valueType : ĠIr Type ): ĠRef Provider Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( valueType . is Primitive Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprimitive Ref Providers . getValue ( valueType . classifier OrFail ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ref Provider ĊĊĠĠĠ Ġprivate Ġfun Ġget Element Field Symbol ( valueType : ĠIr Type ): ĠIr Field Symbol Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Provider ( valueType ). element Field . symbol ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdeclare Shared Variable ( original Declaration : ĠIr Variable ): ĠIr Variable Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Type Ġ= Ġoriginal Declaration . type ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= Ġget Provider ( valueType ) ĊĠĠĠĠĠĠĠ Ġval Ġref Type Ġ= Ġprovider . get Ref Type ( valueType ) ĊĠĠĠĠĠĠĠ Ġval Ġref Constructor Ġ= Ġprovider . ref Constructor ĊĊĠĠĠĠĠĠĠ Ġval Ġref Constructor Call Ġ= ĠIr Constructor Call Impl . from Symbol Owner ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġref Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġref Constructor . symbol , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSHARE D _ VARIABLE _ CON STRUCTOR _ CALL _ ORIGIN ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠList ( ref Constructor . parent As Class . type Parameters . size ) Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Type Argument ( i , Ġvalue Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠIr Variable Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Declaration . start Offset , Ġoriginal Declaration . end Offset , Ġoriginal Declaration . origin , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIr Variable Symbol Impl ( Wrapped Variable Descriptor ()), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Declaration . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġref Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Declaration . is Var , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Declaration . is Const , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Late init Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( descriptor Ġas ĠWr apped Variable Descriptor ). bind ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitializer Ġ= Ġref Constructor Call ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ= Ġoriginal Declaration . parent ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdefine Shared Value ( ĊĠĠĠĠĠĠĠ Ġoriginal Declaration : ĠIr Variable , ĊĠĠĠĠĠĠĠ Ġshared Variable Declaration : ĠIr Variable ĊĠĠĠ Ġ): ĠIr Statement Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinitializer Ġ= Ġoriginal Declaration . initializer Ġ?: Ġreturn Ġshared Variable Declaration ĊĊĠĠĠĠĠĠĠ Ġval Ġvalue Type Ġ= Ġoriginal Declaration . type ĊĊĠĠĠĠĠĠĠ Ġval Ġshared Variable Initialization Ġ= ĠIr Set Field Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitializer . start Offset , Ġinitializer . end Offset , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Element Field Symbol ( valueType ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIr GetValue Impl ( initializer . start Offset , Ġinitializer . end Offset , Ġshared Variable Declaration . symbol ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitializer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Type ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠIr Composite Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Declaration . start Offset , Ġoriginal Declaration . end Offset , Ġir Built Ins . unit Type , Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( shared Variable Declaration , Ġshared Variable Initialization ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Shared Value ( shared Variable Symbol : ĠIr Variable Symbol , Ġoriginal Get : ĠIr GetValue ): ĠIr Expression Ġ= ĊĠĠĠĠĠĠĠ ĠIr Type Operator Call Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUN DEFINED _ OFFSET , ĠUN DEFINED _ OFFSET , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Get . type , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIr Type Operator . IMP LICIT _ CAST , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Get . type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( original Get . type Ġas ĠIr Simple Type ). classifier , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIr GetField Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Get . start Offset , Ġoriginal Get . end Offset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Element Field Symbol ( original Get . symbol . owner . type ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Get . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIr GetValue Impl ( original Get . start Offset , Ġoriginal Get . end Offset , Ġshared Variable Symbol ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Get . origin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġset Shared Value ( shared Variable Symbol : ĠIr Variable Symbol , Ġoriginal Set : ĠIr Set Variable ): ĠIr Expression Ġ= ĊĠĠĠĠĠĠĠ ĠIr Set Field Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Set . start Offset , Ġoriginal Set . end Offset , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Element Field Symbol ( original Set . symbol . owner . type ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIr GetValue Impl ( original Set . start Offset , Ġoriginal Set . end Offset , Ġshared Variable Symbol ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Set . value , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Set . type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Set . origin ĊĠĠĠĠĠĠĠ Ġ) Ċ } Ċ