package Ġfr . ma if . autom ate . certificate . write Ċ Ċ import Ġarrow . core .* Ċ import Ġfr . ma if . autom ate . commons . events ourcing . Event Ċ import Ġfr . ma if . autom ate . commons . events ourcing . Event Envelope Ċ import Ġfr . ma if . autom ate . commons . events ourcing . Event Reader Ċ import Ġfr . ma if . autom ate . commons . read KeyPair Ċ import Ġfr . ma if . autom ate . commons . stringify Ċ import Ġfr . ma if . autom ate . lets encrypt . Certificate Ċ import Ġio . vertx . core . json . JsonObject Ċ import Ġio . vertx . kotlin . core . json . json Ċ import Ġio . vertx . kotlin . core . json . obj Ċ import Ġjava . security . KeyPair Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . format . DateTime Formatter Ċ Ċ sealed Ġclass ĠCertificate Event Ġ: ĠEvent Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoJson (): ĠJsonObject Ġ= ĠJsonObject . map From ( this ) ĊĠĠĠ Ġoverride Ġfun Ġexposed Json (): ĠJsonObject Ġ= ĠtoJson () Ċ } Ċ data Ġclass ĠCertificate Created ( val Ġdomain : ĠString , Ġval Ġsubdomain : ĠOption < String >, Ġval Ġwildcard : ĠBoolean ): ĠCertificate Event () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Json ( json : ĠJsonObject ): ĠCertificate Created Ġ= ĠCertificate Created ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" domain "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" subdomain "). to Option (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getBoolean (" wildcard ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun ĠtoJson (): ĠJsonObject Ġ= Ġjson Ġ{ ĊĠĠĠĠĠĠĠ Ġobj ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" domain " Ġto Ġdomain ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubdomain . map Ġ{ Ġd Ġ-> Ġ" subdomain " Ġto Ġd Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" wildcard " Ġto Ġwildcard ) ĊĠĠĠĠĠĠĠ Ġ). flatMap Ġ{ Ġit . toList () Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ data Ġclass ĠCertificate Ordered ( val Ġdomain : ĠString , Ġval Ġsubdomain : ĠOption < String >, Ġval Ġwildcard : ĠBoolean , Ġval ĠprivateKey : ĠKey Pair , Ġval Ġcsr : ĠString , Ġval Ġcertificate : ĠCertificate ): ĠCertificate Event () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Json ( json : ĠJsonObject ): ĠCertificate Ordered Ġ= ĠCertificate Ordered ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" domain "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" subdomain "). to Option (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getBoolean (" wildcard "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread KeyPair ( json . getString (" privateKey ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" csr "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCertificate . fromJson ( json . get JsonObject (" certificate ")) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoJson (): ĠJsonObject Ġ= Ġjson Ġ{ ĊĠĠĠĠĠĠĠ Ġobj ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" domain " Ġto Ġdomain ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubdomain . map Ġ{ Ġd Ġ-> Ġ" subdomain " Ġto Ġd Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" wildcard " Ġto Ġwildcard ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" privateKey " Ġto ĠprivateKey . stringify ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" csr " Ġto Ġcsr ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" certificate " Ġto Ġcertificate . toJson ()) ĊĠĠĠĠĠĠĠ Ġ). flatMap Ġ{ Ġit . toList () Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexposed Json (): ĠJsonObject Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġjson Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(" domain " Ġto Ġdomain ). to Option (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubdomain . map Ġ{ Ġ" subdomain " Ġto Ġit Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(" wildcard " Ġto Ġwildcard ). to Option (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(" expire " Ġto ĠDateTime Formatter . ISO _ DATE _ TIME . format ( certificate . expire )). to Option () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). flatMap Ġ{ Ġit . toList () Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġis ĠCertificate Ordered ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Ġ== Ġother . domain Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubdomain Ġ== Ġother . subdomain Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwildcard Ġ== Ġother . wildcard Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprivateKey . stringify () Ġ== Ġother . privateKey . stringify () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcsr Ġ== Ġother . csr Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcertificate Ġ== Ġother . certificate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . hashCode () ĊĠĠĠ Ġ} Ċ } Ċ data Ġclass ĠCertificate Order Failure ( val Ġdomain : ĠString , Ġval Ġsubdomain : ĠOption < String >, Ġval Ġcause : ĠString ): ĠCertificate Event () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Json ( json : ĠJsonObject ): ĠCertificate Order Failure Ġ= ĠCertificate Order Failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" domain "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" subdomain "). to Option (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" cause ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun ĠtoJson (): ĠJsonObject Ġ= Ġjson Ġ{ ĊĠĠĠĠĠĠĠ Ġobj ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" domain " Ġto Ġdomain ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubdomain . map Ġ{ Ġd Ġ-> Ġ" subdomain " Ġto Ġd Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" cause " Ġto Ġcause ) ĊĠĠĠĠĠĠĠ Ġ). flatMap Ġ{ Ġit . toList () Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ data Ġclass ĠCertificate Re Ordered Started ( val Ġdomain : ĠString , Ġval Ġsubdomain : ĠOption < String >, Ġval Ġwildcard : ĠBoolean ): ĠCertificate Event () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Json ( json : ĠJsonObject ): ĠCertificate Re Ordered Started Ġ= ĠCertificate Re Ordered Started ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" domain "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" subdomain "). to Option (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getBoolean (" wildcard ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoJson (): ĠJsonObject Ġ= Ġjson Ġ{ ĊĠĠĠĠĠĠĠ Ġobj ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" domain " Ġto Ġdomain ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubdomain . map Ġ{ Ġd Ġ-> Ġ" subdomain " Ġto Ġd Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" wildcard " Ġto Ġwildcard ) ĊĠĠĠĠĠĠĠ Ġ). flatMap Ġ{ Ġit . toList () Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ data Ġclass ĠCertificate Re Ordered ( val Ġdomain : ĠString , Ġval Ġsubdomain : ĠOption < String >, Ġval Ġwildcard : ĠBoolean , Ġval ĠprivateKey : ĠKey Pair , Ġval Ġcsr : ĠString , Ġval Ġcertificate : ĠCertificate ): ĠCertificate Event () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Json ( json : ĠJsonObject ): ĠCertificate Re Ordered Ġ= ĠCertificate Re Ordered ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" domain "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" subdomain "). to Option (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getBoolean (" wildcard "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread KeyPair ( json . getString (" privateKey ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" csr "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCertificate . fromJson ( json . get JsonObject (" certificate ")) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoJson (): ĠJsonObject Ġ= Ġjson Ġ{ ĊĠĠĠĠĠĠĠ Ġobj ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" domain " Ġto Ġdomain ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubdomain . map Ġ{ Ġd Ġ-> Ġ" subdomain " Ġto Ġd Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" wildcard " Ġto Ġwildcard ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" privateKey " Ġto ĠprivateKey . stringify ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" csr " Ġto Ġcsr ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" certificate " Ġto Ġcertificate . toJson ()) ĊĠĠĠĠĠĠĠ Ġ). flatMap Ġ{ Ġit . toList () Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexposed Json (): ĠJsonObject Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġjson Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(" domain " Ġto Ġdomain ). to Option (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubdomain . map Ġ{ Ġ" subdomain " Ġto Ġit Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(" wildcard " Ġto Ġwildcard ). to Option (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(" expire " Ġto ĠDateTime Formatter . ISO _ DATE _ TIME . format ( certificate . expire )). to Option () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). flatMap Ġ{ Ġit . toList () Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġis ĠCertificate Re Ordered ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Ġ== Ġother . domain Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubdomain Ġ== Ġother . subdomain Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwildcard Ġ== Ġother . wildcard Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprivateKey . stringify () Ġ== Ġother . privateKey . stringify () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcsr Ġ== Ġother . csr Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcertificate Ġ== Ġother . certificate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . hashCode () ĊĠĠĠ Ġ} Ċ } Ċ data Ġclass ĠCertificate Re Order Failure ( val Ġdomain : ĠString , Ġval Ġsubdomain : ĠOption < String >, Ġval Ġcause : ĠString ): ĠCertificate Event () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Json ( json : ĠJsonObject ): ĠCertificate Re Order Failure Ġ= ĠCertificate Re Order Failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" domain "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" subdomain "). to Option (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" cause ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun ĠtoJson (): ĠJsonObject Ġ= Ġjson Ġ{ ĊĠĠĠĠĠĠĠ Ġobj ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" domain " Ġto Ġdomain ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubdomain . map Ġ{ Ġd Ġ-> Ġ" subdomain " Ġto Ġd Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" cause " Ġto Ġcause ) ĊĠĠĠĠĠĠĠ Ġ). flatMap Ġ{ Ġit . toList () Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ data Ġclass ĠCertificate Published ( val Ġdomain : ĠString , Ġval Ġsubdomain : ĠOption < String >, Ġval ĠdateTime : ĠLocalDateTime ): ĠCertificate Event () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Json ( json : ĠJsonObject ): ĠCertificate Published Ġ= ĠCertificate Published ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" domain "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" subdomain "). to Option (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDateTime . parse ( json . getString (" dateTime "), ĠDateTime Formatter . ISO _ DATE _ TIME ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun ĠtoJson (): ĠJsonObject Ġ= Ġjson Ġ{ ĊĠĠĠĠĠĠĠ Ġobj ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" domain " Ġto Ġdomain ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubdomain . map Ġ{ Ġd Ġ-> Ġ" subdomain " Ġto Ġd Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" dateTime " Ġto ĠDateTime Formatter . ISO _ DATE _ TIME . format ( dateTime )) ĊĠĠĠĠĠĠĠ Ġ). flatMap Ġ{ Ġit . toList () Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ data Ġclass ĠCertificate Publish Failure ( val Ġdomain : ĠString , Ġval Ġsubdomain : ĠOption < String >, Ġval Ġcause : ĠString ): ĠCertificate Event () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Json ( json : ĠJsonObject ): ĠCertificate Publish Failure Ġ= ĠCertificate Publish Failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" domain "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" subdomain "). to Option (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" cause ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun ĠtoJson (): ĠJsonObject Ġ= Ġjson Ġ{ ĊĠĠĠĠĠĠĠ Ġobj ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" domain " Ġto Ġdomain ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubdomain . map Ġ{ Ġd Ġ-> Ġ" subdomain " Ġto Ġd Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" cause " Ġto Ġcause ) ĊĠĠĠĠĠĠĠ Ġ). flatMap Ġ{ Ġit . toList () Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ data Ġclass ĠCertificate Deleted ( val Ġdomain : ĠString , Ġval Ġsubdomain : ĠOption < String >): ĠCertificate Event () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Json ( json : ĠJsonObject ): ĠCertificate Deleted Ġ= ĠCertificate Deleted ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" domain "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . getString (" subdomain "). to Option () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun ĠtoJson (): ĠJsonObject Ġ= Ġjson Ġ{ ĊĠĠĠĠĠĠĠ Ġobj ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome (" domain " Ġto Ġdomain ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubdomain . map Ġ{ Ġd Ġ-> Ġ" subdomain " Ġto Ġd Ġ} ĊĠĠĠĠĠĠĠ Ġ). flatMap Ġ{ Ġit . toList () Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠCertificate Event Reader : ĠEvent Reader < Certificate Event > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġread ( envelope : ĠEvent Envelope ): ĠCertificate Event Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( envelope . eventType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Of ( Certificate Created :: class ) Ġ-> ĠCertificate Created . fromJson ( envelope . event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Of ( Certificate Ordered :: class ) Ġ-> ĠCertificate Ordered . fromJson ( envelope . event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Of ( Certificate Order Failure :: class ) Ġ-> ĠCertificate Order Failure . fromJson ( envelope . event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Of ( Certificate Re Ordered Started :: class ) Ġ-> ĠCertificate Re Ordered Started . fromJson ( envelope . event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Of ( Certificate Re Ordered :: class ) Ġ-> ĠCertificate Re Ordered . fromJson ( envelope . event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Of ( Certificate Re Order Failure :: class ) Ġ-> ĠCertificate Re Order Failure . fromJson ( envelope . event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Of ( Certificate Published :: class ) Ġ-> ĠCertificate Published . fromJson ( envelope . event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Of ( Certificate Publish Failure :: class ) Ġ-> ĠCertificate Publish Failure . fromJson ( envelope . event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Of ( Certificate Deleted :: class ) Ġ-> ĠCertificate Deleted . fromJson ( envelope . event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Unknown Ġtype Ġ${ envelope . eventType } Ġon Ġevent Ġ${ envelope }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ }