package Ġcom . login . app . ui . base Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlin . coroutines . Coroutine Context ĊĊ Ċ open Ġclass ĠBase ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar ĠviewModel Job Ġ= ĠJob () ĊĠĠĠ Ġprotected Ġval ĠviewModel Scope Ġ= ĠCor outine Scope ( Dispatch ers . Main Ġ+ ĠviewModel Job ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ ĠviewModel Job . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< P > Ġexecute In BG ( block : Ġsuspend ĠCor outine Scope . () Ġ-> ĠP ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute ( block , ĠviewModel Scope , ĠDispatch ers . IO ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< P > Ġexecute In Main ( block : Ġsuspend ĠCor outine Scope . () Ġ-> ĠP ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute ( block , ĠviewModel Scope , ĠDispatch ers . Main ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< P > Ġexecute ( ĊĠĠĠĠĠĠĠ Ġcross inline Ġblock : Ġsuspend ĠCor outine Scope . () Ġ-> ĠP , ĊĠĠĠĠĠĠĠ Ġscope : ĠCor outine Scope , ĊĠĠĠĠĠĠĠ Ġcontext : ĠCor outine Context ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context Ġblock . invoke ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }