package Ġpb and k . internal . binary Ċ Ċ import Ġkotlin . Any Ċ import Ġpb and k .* Ċ import Ġpb and k . w kt .* Ċ Ċ private Ġval ĠField Descriptor . Type . wire Type : ĠWire Type ĊĠĠĠ Ġget () Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . Double Ġ-> ĠWire Type . FIXED 6 4 ĊĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . Float Ġ-> ĠWire Type . FIXED 3 2 ĊĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . Int 6 4 Ġ-> ĠWire Type . VAR INT ĊĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . UInt 6 4 Ġ-> ĠWire Type . VAR INT ĊĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . Int 3 2 Ġ-> ĠWire Type . VAR INT ĊĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . Fixed 6 4 Ġ-> ĠWire Type . FIXED 6 4 ĊĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . Fixed 3 2 Ġ-> ĠWire Type . FIXED 3 2 ĊĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . Bool Ġ-> ĠWire Type . VAR INT ĊĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . String Ġ-> ĠWire Type . LENGTH _ DE LIMIT ED ĊĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . Bytes Ġ-> ĠWire Type . LENGTH _ DE LIMIT ED ĊĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . UInt 3 2 Ġ-> ĠWire Type . VAR INT ĊĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . S Fixed 3 2 Ġ-> ĠWire Type . FIXED 3 2 ĊĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . S Fixed 6 4 Ġ-> ĠWire Type . FIXED 6 4 ĊĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . S Int 3 2 Ġ-> ĠWire Type . VAR INT ĊĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . S Int 6 4 Ġ-> ĠWire Type . VAR INT ĊĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Message < *> Ġ-> ĠWire Type . LENGTH _ DE LIMIT ED ĊĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Enum < *> Ġ-> ĠWire Type . VAR INT ĊĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Repeated < *> Ġ-> Ġvalue Type . wire Type ĊĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Map < *, Ġ*> Ġ-> ĠWire Type . LENGTH _ DE LIMIT ED ĊĠĠĠ Ġ} Ċ Ċ private Ġfun ĠField Descriptor . Type . allowed Wire Type ( wire Type : ĠWire Type ) Ġ= ĊĠĠĠ Ġthis . wire Type Ġ== ĠwireType Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( this Ġis ĠField Descriptor . Type . Repeated < *> Ġ&& Ġvalue Type . is Pack able Ġ&& ĠwireType Ġ== ĠWire Type . LENGTH _ DE LIMIT ED ) Ċ Ċ private Ġval ĠField Descriptor . Type . binary Read Fn : ĠBinary Wire Unmarshaller . () Ġ-> ĠAny ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠXXX : ĠThe Ġ" use less " Ġcast s Ġbelow Ġare Ġrequired Ġin Ġorder Ġto Ġwork Ġaround Ġa Ġcompiler Ġbug Ġin ĠKotlin Ġ 1 . 3 Ġ( see ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// yout rack . jetbrains . com / issue / KT - 1 2 6 9 3 Ġand Ġlinked Ġissues ). ĠWithout Ġthe Ġcast , Ġthe Ġcompiler Ġcrashes ĊĠĠĠĠĠĠĠ Ġ// Ġwith Ġan Ġob sc ure Ġerror . ĠThis Ġis Ġsupposed ly Ġfixed Ġin ĠKotlin Ġ 1 . 4 . ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" USE LESS _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . Double Ġ-> ĠBinary Wire Unmarshaller :: read Double Ġas ĠBinary Wire Unmarshaller . () Ġ-> ĠAny ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . Float Ġ-> ĠBinary Wire Unmarshaller :: read Float Ġas ĠBinary Wire Unmarshaller . () Ġ-> ĠAny ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . Int 6 4 Ġ-> ĠBinary Wire Unmarshaller :: readInt 6 4 Ġas ĠBinary Wire Unmarshaller . () Ġ-> ĠAny ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . UInt 6 4 Ġ-> ĠBinary Wire Unmarshaller :: read UInt 6 4 Ġas ĠBinary Wire Unmarshaller . () Ġ-> ĠAny ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . Int 3 2 Ġ-> ĠBinary Wire Unmarshaller :: readInt 3 2 Ġas ĠBinary Wire Unmarshaller . () Ġ-> ĠAny ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . Fixed 6 4 Ġ-> ĠBinary Wire Unmarshaller :: read Fixed 6 4 Ġas ĠBinary Wire Unmarshaller . () Ġ-> ĠAny ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . Fixed 3 2 Ġ-> ĠBinary Wire Unmarshaller :: read Fixed 3 2 Ġas ĠBinary Wire Unmarshaller . () Ġ-> ĠAny ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . Bool Ġ-> ĠBinary Wire Unmarshaller :: read Bool Ġas ĠBinary Wire Unmarshaller . () Ġ-> ĠAny ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . String Ġ-> ĠBinary Wire Unmarshaller :: readString Ġas ĠBinary Wire Unmarshaller . () Ġ-> ĠAny ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . Bytes Ġ-> ĠBinary Wire Unmarshaller :: read Bytes Ġas ĠBinary Wire Unmarshaller . () Ġ-> ĠAny ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . UInt 3 2 Ġ-> ĠBinary Wire Unmarshaller :: read UInt 3 2 Ġas ĠBinary Wire Unmarshaller . () Ġ-> ĠAny ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . S Fixed 3 2 Ġ-> ĠBinary Wire Unmarshaller :: read S Fixed 3 2 Ġas ĠBinary Wire Unmarshaller . () Ġ-> ĠAny ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . S Fixed 6 4 Ġ-> ĠBinary Wire Unmarshaller :: read S Fixed 6 4 Ġas ĠBinary Wire Unmarshaller . () Ġ-> ĠAny ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . S Int 3 2 Ġ-> ĠBinary Wire Unmarshaller :: read S Int 3 2 Ġas ĠBinary Wire Unmarshaller . () Ġ-> ĠAny ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Primitive . S Int 6 4 Ġ-> ĠBinary Wire Unmarshaller :: read S Int 6 4 Ġas ĠBinary Wire Unmarshaller . () Ġ-> ĠAny ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Message < *> Ġ-> Ġwhen Ġ( message Companion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDouble Value . Companion Ġ-> Ġfun ĠBinary Wire Unmarshaller . (): ĠAny Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( read Message ( this @ binary Read Fn . message Companion ) Ġas ĠDouble Value ). value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFloat Value . Companion Ġ-> Ġfun ĠBinary Wire Unmarshaller . (): ĠAny Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( read Message ( this @ binary Read Fn . message Companion ) Ġas ĠFloat Value ). value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt 6 4 Value . Companion Ġ-> Ġfun ĠBinary Wire Unmarshaller . (): ĠAny Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( read Message ( this @ binary Read Fn . message Companion ) Ġas ĠInt 6 4 Value ). value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUInt 6 4 Value . Companion Ġ-> Ġfun ĠBinary Wire Unmarshaller . (): ĠAny Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( read Message ( this @ binary Read Fn . message Companion ) Ġas ĠUInt 6 4 Value ). value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt 3 2 Value . Companion Ġ-> Ġfun ĠBinary Wire Unmarshaller . (): ĠAny Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( read Message ( this @ binary Read Fn . message Companion ) Ġas ĠInt 3 2 Value ). value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUInt 3 2 Value . Companion Ġ-> Ġfun ĠBinary Wire Unmarshaller . (): ĠAny Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( read Message ( this @ binary Read Fn . message Companion ) Ġas ĠUInt 3 2 Value ). value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBool Value . Companion Ġ-> Ġfun ĠBinary Wire Unmarshaller . (): ĠAny Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( read Message ( this @ binary Read Fn . message Companion ) Ġas ĠBool Value ). value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString Value . Companion Ġ-> Ġfun ĠBinary Wire Unmarshaller . (): ĠAny Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( read Message ( this @ binary Read Fn . message Companion ) Ġas ĠString Value ). value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBytes Value . Companion Ġ-> Ġfun ĠBinary Wire Unmarshaller . (): ĠAny Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( read Message ( this @ binary Read Fn . message Companion ) Ġas ĠBytes Value ). value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfun ĠBinary Wire Unmarshaller . (): ĠAny Ġ= Ġread Message ( this @ binary Read Fn . message Companion ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Enum < *> Ġ-> Ġfun ĠBinary Wire Unmarshaller . (): ĠAny Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Enum ( this @ binary Read Fn . enum Companion ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Repeated < *> Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Repeated Ġvalues Ġshould 've Ġbeen Ġhandled Ġby Ġthe Ġcaller Ġof Ġthis Ġmethod ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Descriptor . Type . Map < *, Ġ*> Ġ-> Ġfun ĠBinary Wire Unmarshaller . (): ĠAny Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Of ( read Message ( this @ binary Read Fn . entry Companion )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ internal Ġclass ĠBinary Message Unmarshaller ( private Ġval Ġwire Unmarshaller : ĠBinary Wire Unmarshaller ) Ġ: ĠMessage Unmarshaller Ġ{ ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠMessage > Ġread Message ( ĊĠĠĠĠĠĠĠ Ġmessage Companion : ĠMessage . Companion < T >, ĊĠĠĠĠĠĠĠ Ġfield Fn : Ġ( Int , ĠAny ) Ġ-> ĠUnit ĊĠĠĠ Ġ): ĠMap < Int , ĠUnknown Field > Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠunknownFields Ġ= Ġmutable Map Of < Int , ĠUnknown Field >() ĊĠĠĠĠĠĠĠ Ġval Ġfield Descriptors Ġ= Ġmessage Companion . descriptor . fields . associate By Ġ{ Ġit . number Ġ} ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġwire Unmarshaller . read Tag () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tag Ġ== ĠTag ( 0 )) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfieldNum Ġ= Ġtag . field Number ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠwireType Ġ= Ġtag . wire Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfd Ġ= Ġfield Descriptors [ field Num ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fd Ġ== Ġnull Ġ|| Ġ! fd . type . allowed Wire Type ( wire Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Unknown Field ( field Num , ĠwireType , ĠunknownFields ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġif Ġ( fd . type Ġis ĠField Descriptor . Type . Repeated <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Repeated ( fd . type , ĠwireType ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfd . type . binary Read Fn ( wire Unmarshaller ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Fn ( field Num , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠunknownFields ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠInvalid ProtocolBufferException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠInvalid ProtocolBufferException (" unable Ġto Ġread Ġmessage ", Ġe ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Unknown Field ( field Num : ĠInt , ĠwireType : ĠWire Type , ĠunknownFields : ĠMutable Map < Int , ĠUnknown Field >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġunknown Field Ġ= Ġwire Unmarshaller . read Unknown Field ( field Num , ĠwireType ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ ĠunknownFields [ field Num ] Ġ= ĠUnknown Field ( field Num , ĠunknownFields [ field Num ]?. let Ġ{ Ġprev Field Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev Field . value Ġis ĠUnknown Field . Value . Composite ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġmake Ġparsing Ġof Ġrepeated Ġunknown Ġfields Ġmore Ġefficient Ġby Ġnot Ġcreating Ġa Ġcopy Ġof Ġthe Ġlist Ġwith ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġeach Ġnew Ġelement . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Field . value . copy ( values Ġ= Ġprev Field . value . values Ġ+ Ġunknown Field ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUnknown Field . Value . Composite ( listOf ( prev Field . value , Ġunknown Field )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġunknown Field ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Repeated ( type : ĠField Descriptor . Type . Repeated <* >, ĠwireType : ĠWire Type ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Unmarshaller Ġ= Ġtype . valueType . binary Read Fn ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( wire Type Ġ== ĠWire Type . LENGTH _ DE LIMIT ED Ġ&& Ġtype . valueType . is Pack able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwire Unmarshaller . read Packed Repeated ( value Unmarshaller ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Of ( value Unmarshaller ( wire Unmarshaller )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ċ } Ċ Ċ internal Ġexpect Ġfun ĠBinary Message Unmarshaller . Companion . from ByteArray ( arr : ĠByteArray ): ĠMessage Unmarshaller Ċ