package Ġme . uport . sdk . jwt Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġal di Ġon Ġ 3 / 1 0 / 1 8 . Ċ Ġ*/ Ċ import Ġandroid . support . test . rule . Activity Test Rule Ċ import Ġandroid . util . Log Ċ import Ġcom . uport . sdk . signer . U port HD Signer Ċ import Ġcom . uport . sdk . signer . encryption . Key Protection Ċ import Ġme . uport . sdk . jwt . model . Jwt Payload Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . assertNull Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġjava . util . concurrent . Count DownLatch Ċ import Ġkotlin . test . assertNotNull Ċ Ċ class ĠJWT Tools Tests Ġ{ ĊĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġm Activity Rule : ĠActivity Test Rule < Test Dummy Activity > Ġ= ĠActivity Test Rule ( Test Dummy Activity :: class . java ) ĊĊĠĠĠ Ġprivate Ġval Ġvalid Share Req Token 1 Ġ= Ġ" ey J 0 e X Ai OiJ KV 1 Qi LCJ hb G ci OiJ FU z I 1 N ks if Q . ey J pc 3 Mi Oi I yb 2 VY d WZ IR 0 Rw VT Ux Ym ZL Qn Na R GR 1 N 0 pl OX dl S j Ny N 3 N WR y Is I ml hd CI 6 MT Uy MD M 2 Nj Q zM iw ic mV xd WV zd G Vk Ij pb Im 5 hb W Ui LCJ wa G 9 uZ S IsIm N vd W 5 0 cn ki LCJ h dm F 0 YX Ii X Sw ic GV yb Wl zc 2 lv bn Mi O ls ibm 9 0 aW Zp Y 2 F 0 aW 9 uc y Jd LCJ j YW xs Y mF jay I 6 Im h 0 d HB z Oi 8 vY 2 hh c 3 F 1 a S 5 1 c G 9 yd C 5 t ZS 9 hc G kv dj E vd G 9 wa WM v WG 5 IZ n ll dj U xe HN ka 0 R 0 d S IsIm 5 ld CI 6 Ij B 4 NC IsIm V 4 c CI 6 MT Uy MD M 2 Nz Az M iw id H lw Z SI 6 In No YX Jl U mV x In 0 . C 8 m PCC t Wl Y An ro du q ys XY Rl 5 x vr O dx 1 r 4 iq 3 A 3 Sm GD GZ u 4 7 U GT n ji Z CO r OQ 8 A 5 l Z 0 M 9 Jf Dp Z DET CK Gd J 7 KU eW Q " ĊĠĠĠ Ġprivate Ġval Ġexpected Share Req Payload 1 Ġ= ĠJwt Payload ( iss Ġ= Ġ" 2 oe X uf H GD p U 5 1 bf KB s ZD du 7 Je 9 we J 3 r 7 s VG ", Ġi at Ġ= Ġ 1 5 2 0 3 6 6 4 3 2 , Ġsub Ġ= Ġnull , Ġaud Ġ= Ġnull , Ġexp Ġ= Ġ 1 5 2 0 3 6 7 0 3 2 , Ġcallback Ġ= Ġ" https :// ch as qui . uport . me / api / v 1 / topic / Xn H fy ev 5 1 x sdk D tu ", Ġtype Ġ= Ġ" share Req ", Ġnet Ġ= Ġ" 0 x 4 ", Ġact Ġ= Ġnull , Ġrequested Ġ= ĠlistOf (" name ", Ġ" phone ", Ġ" country ", Ġ" avatar "), Ġverified Ġ= Ġnull , Ġpermissions Ġ= ĠlistOf (" notifications "), Ġreq Ġ= Ġnull , Ġn ad Ġ= Ġnull , Ġd ad Ġ= Ġnull , Ġown Ġ= Ġnull , Ġcapabilities Ġ= Ġnull , Ġclaims Ġ= Ġnull , Ġctl Ġ= Ġnull , Ġreg Ġ= Ġnull , Ġrel Ġ= Ġnull , Ġf ct Ġ= Ġnull , Ġacc Ġ= Ġnull ) ĊĊĠĠĠ Ġprivate Ġval Ġincoming Jwt Ġ= Ġ" ey J 0 e X Ai OiJ KV 1 Qi LCJ hb G ci OiJ FU z I 1 N ks if Q . ey J pc 3 Mi Oi I yb 2 1 SS lp MM j Na Q 1 ln Yz Fy Wn J GV n BG WE pw V 2 9 h R UV 1 Sl Vj Zi Is I ml hd CI 6 MT Ux OT M 1 M DI 1 N iw ic GV yb Wl zc 2 lv bn Mi O ls ibm 9 0 aW Zp Y 2 F 0 aW 9 uc y Jd LCJ j YW xs Y mF jay I 6 Im h 0 d HB z Oi 8 v YX Bp Ln V wb 3 J 0 Ln N wY WN l L 2 9 sb 3 J 1 bi 9 j cm V hd GV J ZGV ud Gl 0 e S IsIm 5 ld CI 6 Ij B 4 Mz Az OS IsIm F jd CI 6 Im R ld ml j ZW tle S IsIm V 4 c CI 6 MT Uy Mj U 0 MD gw MC wid H lw Z SI 6 In No YX Jl U mV x In 0 . Ek q NU yr Z hc Db TQ l 7 3 Xp L 2 tp 4 7 0 l Co 2 sa MX zu O Z 9 1 UI 2 y - Xz pc BM zh h Se U OR no J XJ h H nk GG p sh Zl ES WU gr bui VQ " ĊĠĠĠ Ġprivate Ġval Ġincoming Jwt Payload Ġ= ĠJwt Payload ( iss Ġ= Ġ" 2 om R J ZL 2 3 Z CY gc 1 r Zr F Vp FX Jp W oa EE u JU cf ", Ġi at Ġ= Ġ 1 5 1 9 3 5 0 2 5 6 , Ġsub Ġ= Ġnull , Ġaud Ġ= Ġnull , Ġexp Ġ= Ġ 1 5 2 2 5 4 0 8 0 0 , Ġcallback Ġ= Ġ" https :// api . uport . space / ol or un / create Identity ", Ġtype Ġ= Ġ" share Req ", Ġnet Ġ= Ġ" 0 x 3 0 3 9 ", Ġact Ġ= Ġ" device key ", Ġrequested Ġ= Ġnull , Ġverified Ġ= Ġnull , Ġpermissions Ġ= ĠlistOf (" notifications "), Ġreq Ġ= Ġnull , Ġn ad Ġ= Ġnull , Ġd ad Ġ= Ġnull , Ġown Ġ= Ġnull , Ġcapabilities Ġ= Ġnull , Ġclaims Ġ= Ġnull , Ġctl Ġ= Ġnull , Ġreg Ġ= Ġnull , Ġrel Ġ= Ġnull , Ġf ct Ġ= Ġnull , Ġacc Ġ= Ġnull ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Verify Token () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 2 ) ĊĠĠĠĠĠĠĠ ĠJWT Tools (). verify ( valid Share Req Token 1 ) Ġ{ Ġerr , Ġactual Payload Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( err ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected Share Req Payload 1 , Ġactual Payload ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" here here ", Ġ" verify 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ ĠJWT Tools (). verify ( incoming Jwt ) Ġ{ Ġerr , Ġactual Payload Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( err ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( incoming Jwt Payload , Ġactual Payload ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" here here ", Ġ" verify 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġl atch . await () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Create Token () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġm Activity Rule . activity ĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġ" 0 x 4 1 2 3 cbd 1 4 3 b 5 5 c 0 6 e 4 5 1 ff 2 5 3 af 0 9 2 8 6 b 6 8 7 a 9 5 0 " ĊĠĠĠĠĠĠĠ Ġval Ġreference Seed Phrase Ġ= Ġ" notice Ġsuffer Ġe agle Ġstyle Ġexclude Ġburst Ġwrite Ġmechan ic Ġj un ior Ġcr ater Ġcr ystal Ġseek " ĊĊĠĠĠĠĠĠĠ Ġval Ġown Obj Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" name ", Ġ" Identity Ġ 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" phone ", Ġ" 1 0 0 0 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" country ", Ġ"") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcapabilities Ġ= ĠlistOf (" ey J 0 e X Ai OiJ KV 1 Qi LCJ hb G ci OiJ FU z I 1 N ks if Q . ey J pc 3 Mi Oi I yb 3 Vm R UE z NX k 3 R 2 l Bc GN ke Uw 4 N 0 xw NX p UV jd OU k 5 DR j Z ISC Is I ml hd CI 6 MT Uy Mj Ew MD M 5 Ni wi YX Vk Ijoi Mm 9 l WH Vm SE d Ec FU 1 M WJ m S 0 Jz Wk R kd Td K ZT l 3 ZU oz cj dz Vk ci LCJ 0 e X Bl Ijo ibm 9 0 aW Zp Y 2 F 0 aW 9 uc y IsIn Zhb HV l Ijoi YX Ju Om F 3 cz pz bn M 6 d XM td 2 V zd C 0 y Oj Ex Mz E 5 Nj Ix Nj U 1 OD pl bm R wb 2 l ud C 9 HQ 0 0 vd VB vc n Qv MT kx ZT Bi Mj ct ZW Fm Zi 0 zM W Vk LT k 4 NG Ut NT g 2 Zj U 1 OW Y zM DE y Ii wi ZX hw Ij ox N TI zM zk 2 M zk 2 f Q . Xy j R 2 i M 0 ZU g vol E hc P 9 n 5 0 g 7 J AJ 9 VM j S 5 _ AS qj 2 9 - ri OV 1 s En Yi Lc H 4 4 E 2 jo Po - clc Fo A 0 ow W 1 9 O cy RL pur 5 0 g ") ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UNUSED _ VARIABLE ") ĊĠĠĠĠĠĠĠ Ġval Ġexpected Token Ġ= Ġ" ey J 0 e X Ai OiJ KV 1 Qi LCJ hb G ci OiJ FU z I 1 N ks if Q . ey J pc 3 Mi Oi I yb 3 Vm R UE z NX k 3 R 2 l Bc GN ke Uw 4 N 0 xw NX p UV jd OU k 5 DR j Z ISC Is I ml hd CI 6 MT Uy Mj Ew MD M 5 Ni wi YX Vk Ijoi Mm 9 l WH Vm SE d Ec FU 1 M WJ m S 0 Jz Wk R kd Td K ZT l 3 ZU oz cj dz Vk ci LCJ 0 e X Bl Ijo ic 2 hh cm VS ZX Nw Iiw ibm Fk Ijoi Mm 9 1 Zk V BM z V 5 N 0 dp Q XB j ZH l MOD d Mc DV 6 VF Y 3 Tl JO Q 0 Y 2 SE gi LCJ vd 2 4 i On s ibm Ft Z SI 6 I kl k ZW 5 0 a XR 5 IDE i LCJ wa G 9 uZ SI 6 Ij Ew MDAw Ii wi Y 2 9 1 bn R ye SI 6 Ii IsIm F 2 YXR h ci I 6 bn V sb H 0 s In J lc SI 6 Im V 5 S j Bl WE F pT 2 l KS 1 Yx U Wl MQ 0 po Y kd ja U 9 p Sk ZV ek kx T mt za WZ RL mV 5 Sn Bj M 0 1 pT 2 l Je WI y V ll k V 1 p JU j BS d 1 Z UV Xh Zb Vp MU W 5 OY VJ HU j FO M HB s T 1 h kb FN q T nl OM 0 5 X Un l Jc 0 lt b G hk Q 0 k 2 T VR Ve U 1 q RX d N RE 0 0 T 0 N 3 a WN t V nh k V 1 Z 6 Z Ed Wa 0 l qc G JJ b T Vo Y ld Va Ux DS nd h R zl 1 Wl NJ c 0 lt Tn Zk Vz U wY 2 5 ra Ux DS mh kb UY w WV h Ja Vh Td 2 lj R 1 Z 5 Y ld sem My b HZ ib k 1 pT 2 x za WJ t OT Bh V 1 pw WT J GM GFX OX V je Up k TEN K all Xe HN Zb U Zq YX l JN kl ta DB k SE J 6 T 2 k 4 d lp HV n R ie T Ux Y 0 c 5 e WR DN XR a U zh q SW l 3 aW Jt Vj BJ am 9 pT U hn ME lp d 2 la WG h 3 SW p ve E 5 US Xl N VE F 3 T 1 Rn N Ex DS j Bl WE Js SW p va W My a Gh jb V Z TW lh F aW Z RL j N Ma 2 J 6 N Hp H MG tj RG FP a 2 h Ua E ZZ O Wl Ha HZ x YW d Lb Vh Ib 3 Mx N Up IR 2 wz SX ZT bj Yt Z lh K Sl Rm N nh z W UN MX 3 d Z RE h JM 0 d jd G JO VU ho V HV DW Wt KU k Y 1 Tl B 3 Ii wi Y 2 Fw YW J pb Gl 0 aW Vz Ij pb Im V 5 S j Bl WE F pT 2 l KS 1 Yx U Wl MQ 0 po Y kd ja U 9 p Sk ZV ek kx T mt za WZ RL mV 5 Sn Bj M 0 1 pT 2 l Je WI z Vm 1 SV UV 6 Tl hr M 1 I yb E Jj R 0 5 r Z VV 3 NE 4 we Hd O WH B VV mp k T 1 Vr N UR Sal p JU 0 NJ c 0 lt b G hk Q 0 k 2 T VR Ve U 1 q RX d N RE 0 1 T ml 3 a Vl Y V mt J am 9 p TW 0 5 b Fd IV m 1 TR WR FY 0 Z VM U 1 X Sm 1 T ME p 6 V 2 t Sa 2 RU ZE ta VG wz Wl Vv em Nq Z Hp Wa 2 N pT EN KM GV YQ mx J am 9 p Ym 0 5 MG FX Wn BZ Mk Y wY Vc 5 d WN 5 S XN J bl po Y kh Wb El qb 2 l Z WE p 1 T 2 1 GM 2 N 6 c Hp ib k 0 2 ZF h Nd GQ y V np k Qz B 5 T 2 p Fe E 1 6 RT VO ak l 4 Tmp VM U 9 Ec Gx ib VJ 3 Yj J sd WR DO Uh RM DB 2 ZF ZC dm Nu UX Z NV Gt 4 Wl RC a U 1 q Y 3 Ra V 0 Zt W mk we k 1 XV mt MV Gs 0 T kd Vd E 5 U Zz Ja al Ux T 1 d Z ek 1 ER Xl Ja X dp W lh od 0 l qb 3 h O VE l 6 TX pr Mk 1 6 az Jm US 5 Y eW p SM ml N MF pV Z 3 Z vb E Vo Y 1 A 5 bj Uw Z zd K QU o 5 Vk 1 q Uz Vf Q VN x aj I 5 LX J pT 1 Y xc 0 Vu WW l MY 0 g 0 NE Uy am 9 Q by 1 jb G NG b 0 E wb 3 dX MT l PY 3 l ST HB 1 cj Uw Zy Jd LCJ le HA i Oj E 1 Mj Ix ODY 3 OT Z 9 . j On b FK 1 b 5 6 Oe ey 1 J Mb RM m 9 ef 8 Qt R 5 XG z 8 K qj Kh 9 PU Ko CA aa 8 mV CT 5 VY wq FS 5 g 4 Z f G Ve 0 DS 7 E jb QS 2 G sv 5 _ We L Q " ĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= ĠJwt Payload ( iss Ġ= Ġ" 2 ou f EA 3 5 y 7 Gi A pc dy L 8 7 Lp 5 z TV 7 NR N CF 6 HH ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi at Ġ= Ġ 1 5 2 2 1 0 0 3 9 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaud Ġ= Ġ" 2 oe X uf H GD p U 5 1 bf KB s ZD du 7 Je 9 we J 3 r 7 s VG ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexp Ġ= Ġ 1 5 2 2 1 8 6 7 9 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" share Resp ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn ad Ġ= Ġ" 2 ou f EA 3 5 y 7 Gi A pc dy L 8 7 Lp 5 z TV 7 NR N CF 6 HH ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġown Ġ= Ġown Obj , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreq Ġ= Ġ" ey J 0 e X Ai OiJ KV 1 Qi LCJ hb G ci OiJ FU z I 1 N ks if Q . ey J pc 3 Mi Oi I yb 2 VY d WZ IR 0 Rw VT Ux Ym ZL Qn Na R GR 1 N 0 pl OX dl S j Ny N 3 N WR y Is I ml hd CI 6 MT Uy Mj Ew MD M 4 OC wic mV xd WV zd G Vk Ij pb Im 5 hb W Ui LCJ wa G 9 uZ S IsIm N vd W 5 0 cn ki LCJ h dm F 0 YX Ii X Sw ic GV yb Wl zc 2 lv bn Mi O ls ibm 9 0 aW Zp Y 2 F 0 aW 9 uc y Jd LCJ j YW xs Y mF jay I 6 Im h 0 d HB z Oi 8 v ZGV t by 5 1 c G 9 yd C 5 t ZS 8 j Iiw ibm V 0 Ijoi MH g 0 Ii wi ZX hw Ij ox N TI y MT Aw OT g 4 LCJ 0 e X Bl Ijo ic 2 hh cm VS ZX E if Q . 3 L kb z 4 z G 0 kc Da Ok h Th FY 9 i G hv q ag Km XH os 1 5 JH Gl 3 Iv Sn 6 - f XJ JT f 6 xs Y CL _ wY D HI 3 G ct b NU Hh Tu CY k J RF 5 NP w ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapabilities Ġ= Ġcapabilities ) ĊĠĠĠĠĠĠĠ Ġensure Seed Is Imported ( reference Seed Phrase ) ĊĊĊĠĠĠĠĠĠĠ ĠJWT Tools (). create ( context Ġ= Ġactivity , Ġpayload Ġ= Ġpayload , Ġroot Handle Ġ= Ġaddress , Ġder ivation Path Ġ= ĠU port HD Signer . UP ORT _ ROOT _ DER IV ATION _ PATH , Ġprompt Ġ= Ġ"", Ġcallback Ġ= Ġ{ Ġerr , Ġnew Jwt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( err ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbut Ġwe Ġshould Ġbe Ġable Ġto Ġverify Ġthe Ġnewly Ġcreated Ġtoken ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJWT Tools (). verify ( new Jwt !! ) Ġ{ Ġex , Ġverified Payload Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( ex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// XXX : ĠComp aring Ġpayload s Ġdirectly Ġfails Ġbecause Ġof Ġserialization Ġdifferences ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// The Ġexpected Token Ġcontains Ġan Ġ`" avatar " Ġ: Ġnull ` Ġwhile Ġthe Ġverified Payload Ġhas Ġ` avatar Ġ: Ġ" "` ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// mos hi Ġdoesn 't Ġencode Ġnull s Ġby Ġdefault Ġso Ġit Ġis Ġnormal Ġto Ġfail Ġon Ġequals ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// B UT , Ġthe Ġrest Ġof Ġthe Ġfields Ġseem Ġto Ġmatch ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtest Ġdata Ġor Ġcode Ġshould Ġbe Ġadjusted Ġso Ġthat Ġthis Ġcan Ġpass Ġtoo : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġ(_, Ġexpected Payload , Ġ_) Ġ= ĠJWT Tools (). decode ( expected Token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( verified Payload ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( payload , Ġverified Payload !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġl atch . await () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġensure Seed Is Imported ( phrase : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ensure Ġseed Ġis Ġimported ĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ ĠU port HD Signer (). import HD Seed ( m Activity Rule . activity , ĠKey Protection . Level . SIMPLE , Ġphrase ) Ġ{ Ġerr , Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( err ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġl atch . await () ĊĠĠĠ Ġ} Ċ Ċ } ĊĊ