PKE:LaK2tests/test_sdk_extract.pyTMk0Wr F$v!TQqV-f;#ۉ6McY3͛t?ֳfOdx|v-^wv1|2tǚ˸-ߪHS+eAS-z~S6˲O',p#{䔵97`c`ce1L,_(u%Wӫͬ}ps*76[; N_'*Dy#ic1OL1,;h3O obQct0-jӆB.k6ls? =wk-*KLRYTIuǒ&oXtests/test_postprocess.pyَ6򽿂"+wqlݝ`ky>lc8Ew+-K>v[C"%JdOd<ӖMVźxy{$$/.|猥|_b%\At 6->:'y!,MU; Be.|{ft|p!x36s>daD/9K>pG}%iyYCmO=PaɖEGdGB] َtFdɿ'\lAMH^ $?f4́;"y[ٌqzދ[gbz2Xڝ 6фYxHUDFg%qL ;3cDI|p Z2hDHz硯<AB;y+vGނw| 5noό&@ۛή}ewu3&#C ;iijqu8aP:lAue:H+H*g,v+{`,#Ӂm3\$ta Jd*e矋Ί4e ͠vRt咼}[mԾ&eྔpQB1`ʀ%Uuxܱ0QqK=0g)W]"g΋ r8"7qs'&Boiȭ4u $hm ߐr5C'J!>U:nR3NMkB"_t$*7jJ#&t"5d`;˒9WfU6;䠒`-hCũFV0Pgwć1əi,75^e` I@7t m3 k4ȹ DWMEi9Du&m;$6ч?ٝ' R{ڲC%fiF7CJn -Kd0EZ9G%t ?)x0U ygD(˹gl$9+%ȩJ;pnnCa*C?PTKv&\veX3Qa#e859rM$g`df>IKlt;sDL*d tY@=0lMr~iBJXΙ:qkԤM|dxl*uH7f{坢y"ѳN6)|Hؘ/ xjE[6\2ʖ+^*ae, 8.\Tu5 L{6j:Jx%;<3,5<*AƘ>*J1C2G'UCSKR txu*/hʨqRZ"&?h'fbP[ (N5YZcVg }:tB|9R ;Z{3wuR{u-C:Qxl)Q)֕N9:n[5,|hXn7mߚG~?(c&B}]}Ӈ(ȕk򋧞S'4ʐ0dk|B~O(WrYƘD1 |\Ir46R|hu{\jѕ=C6pPr]5POVeV@:( w_6 @ 2\TPswLx+؊ |v .н O=`uL]Z\5)•=Mئ䯲BkrcEAdz섾n&cSף{pq'[5)۰IG cbΪɍZr ܦv RWOJq>e4YlЦ9ayVSAU6!:^qvuB2c+1Qq+¤i$Afh3vGNo@O29QKʯ37p8O;)6"WLb..wlg2hZt7X.^d ƍ&CsyL^38V\-BЄ b1n]=ᆦ 2);~*~iFn;nzMF/Yy>M)>L0N[q==O ®אju`h{5YiLn_ |^L!MbpS:~Xٖ%!jlR?QFO;8OnXhtƶKB]mGO%BK%h!%oiUiFi/Y1 qe@\3f8$H,!T_aQoFndH&%mLl%.?Ko>~]n~* ˠ@y}G>fו·~T.}IJίJ2ث10ׯ'"J_DEyMťB뛈˷úZFW7FG93n"~E>"`= eV0Gl*LDk0n]5$صb%R"7a1dH-ep@Q+<>,њ_WB`&@C @UBlClK䶱qkfʚ^QZhλ{i<({vsPR`qu$'t"^O`OM,A!XHlI[OAxЎ5pCZ45h\Ζt|̌yg)AꬤDSZ}9!s%5N(O(5?qs}]K)1v~7)p|$x.od(diDH{?~DD}۫4rJ8/> tȯ0Ed gT;O8p pMS<A,:]+WKPF92$~:A%PKE:L/4tests/utils.pySMK0W !-Ԡ㰠/ IYt3]meIڮ?-d˛TZ REY,u. g٦}Bf}y%x " =O /1~!n?40ðO@(2xX )̩yS9K8x>l)d+u@Fk|)a)=إ]͟P@Sj9A" CTs]\ʼnwRU*ZWv['^Fe xB$p<>lgQKׇA$ܬ]2;*U쐴 &t{d$rZM=ꧬ&k窲XY'?R#4LF:#ݱwd:/T^`w"$ּܓWP.88*$X]$n>ﰎ9'I~1@L"+Ÿ8 7>w=o¢ۇebX+PKE:L<$ HJtests/test_utils.py\s۸RjVT95Koj8I8S m2߻x2-93]l \,b EfhUk{rsomzQ9Ng8ѵg4HS{~Ra- opI9[o%l.R[Nn<I)vIkՆ(\Si Sv.D>˔r%wYJ8uϘhm)^8i1:lb<'kdaDFN$a$֜R,[߉6`=oML Gvߥ)KYx0ëfy aN@M'bny^/" $ZCR*trr"!by@e+8 i [#z4% L'7=y.6l_|7*?M&g;l4&yyvⅯNdЋh{P:ߝ!'w8z;.QP4?Z}ݡ~$R1"{WH~^W[ccNR67 E]` !Yp*Z6/.1ngg:PH hAhz\LؓDTFO>+Ò-VzOO1倕@ԋ, uf5.ncuRɶ4ڧVc8BǠ0[h'}V|(%f ;=(Ҿ2/KP 1X3RHi] (*OvȺבS96wn= } i@ P_ց-&I.`^G)g 2.U5nHz崘vĨ8%a&'"Spșh4&9-{%cj%Uus1>G )5uɂpH*OK\zquTaBׄlh~(+]9m# "%åv]h7!sUB]6/5JqmߵQ6ƤcI04*Ci'̹#펣\^BvDЈDrܥ2Klƣх`4#74Ҡ%y;3^s\ep[2Ѽ;@ [DI|N-0 ӧthsuo#H@<1_K3ɵ?O(s]3) P!8<'_Zt<Ğa0~*ҔIW|'l1q\` Bc drc.'ʞ$D,MPk`zH0V±!{WXYd57̥_{+_@Y91BVCT'hSi!W7+4j]Kz3Z׻5&-łWn;H2gIDEܝ-z#K_%%~UR)A8 #gʮr+SgT}UZB>XXV> %907⧘}bR3Lf2`+ryaxk c\W~31LΙp|̫SvwkE5tjNόmX^'tʄgc ȏY&S.rt Jp}^lƇw=b3K3`WyE;-.ヹΎ)NGmhi(kVY{*-Mp!P&M7;*uX}hӴja\#VtV\(#|?i^4ŒhT=X,9 )XHQEbX"Pb0{I|!g-(B>Yb32ەe?i{&W,lqzdN(w̟dz-IBRM,—MlDwNHuB+ b2y<%"YbsFJ+⊬`|(QL!YYV 5bw; @+:E՛_,B$j #'4wg2vvVOUa+ΦcF5$L v+bk]$I [x!yB*m a^0FӽIOLSow8*X&C+]1w_H tHű^ϣ5e3ORFN64T&Xe0uF{* QE8N"DGZ6h))'y E@*T媥]f5pJ)+|-HȠMJV2(%wt+/JoJP(4R'ܼ#*Q I<<&rIxf"<"z?<5M‚SٿgG`ltkP%aٿx]}J-ub &nXU{ kN/(Ϫ뜖]<[@9FXVcPrNWZr\TI\LEF?PKkKtests/__init__.pyPK9L5qtoucan_data_sdk/sdk.pyX[o6~ׯ h {`4A Iz hYK@Rm4}Q%;L.U#FlxI{SV{Ҭj ^;w.:)mNjy}yi%Ib2l]qM*(uM>"Ap]\;07cZ\s|fLid,Zc^sqXY#UĤip+sDZl@*gsRXF|J9.%0-|5saH0! "@+JXP0Jta%#4\3^"b^KBFeZJƎ%SM糃F(=Hgpp!$ u&F|\Ԫiȃ"RS$neݻ믤hxXQţkk{"GSz ?)-Q(IC";;QK1J Qm&|CdtE< Լ,` m.+ϔSc w:icBn (`At]X [ df/'r=YP5W+=< +1t+gHl, hZ5{rZ^-t ^Ev XuR٭cS E_TOWȴ#lըMj@}5KiLʯfsҀ{=h[5)倂l˞PQ=zO"G{$S-*fZND4Ks 3=avd(x%0R, ] [Q__ߠ\T_`P:+8 %WDI= 4Co`)cYD&tI'96vҌn.d$vya8jY."u'rã}ơASGo78\תe˙L/Kj w\mtzv6wbDFmBX/]Rn<:slvb ]Xd 9 V6AuOwWx8g{ksⰩr=%]U{NA{V_js6'%GzߘP 4@xLk!p|Jk*ߪGf @c_~0j?PKkKl!toucan_data_sdk/__init__.pyK+U+NV-/*Q/MNsI,I NPKE:LahqX'toucan_data_sdk/utils/compute_cumsum.pyTn0+XB\IKAMzI F 3&"y}= S.KUB$g$j*W2YpfYa}M~Em@ĸ}2Sv4wm-Jf1IiŢtqM=ZQpf 5GsvoVXU#k%1ptto1lP) Z%Ԙ'uw4=`O(5:Yy>pZx VaMoGEAWEہ9Z$V=Cp9IsdLZ=sֶgsKrXgq_^_}M}ð~yUDO?|l1r NGa:Ai Ď·vSkKg']qk7ol>KkaljF12%ƮfD:zyGf۸7MLG+Pfr%M^4#˔hù{h,qDȾ5dۡۼųzm!$ǧ+DuZNPKE:LEb0 (toucan_data_sdk/utils/two_values_melt.pyVKo0 W!6hYL^ xCoFxuʎQ2Gx_* IdIh# pRZ8I H^RHnPXH9/`/#K4%0{(|`uS٘V[Oj=9+.DV"a <2_,=CVP`#ӑ~1IW֋AZ.OA;uY?oa闗cgח~7v62*wșQPz5AJ"l=p;JAXj| <",Ncү3{4q_Q+쵀6I.B@t2=?PZ}f 6iN/+H jV'\džZg?wԣtG/'>˷qqĿI*tF{:/>(@v)Lݸ~>lSMT%S{Ҝ9lIGePK%LĹ  toucan_data_sdk/utils/helpers.pye1O0G&H 6KUEƹ94߉E|{';޸#L{x2h>{ŪZ{;tNf*P9Uv< ;{o7Hbzƒg0kL-K e*lrO\dƉ8#H[Lz)~p+p+#͛=2{.s?F~А`QJ﫝h (): ]` ;@'L"<[6_Vi9bpfYPKI:Le1@$toucan_data_sdk/utils/postprocess.py;[q}3#yGذ4c﮼4M"; EͦGǐ#ɞD'vbt4wfñi;QYH-Uɏ.BDUZ"oPE _/4Oߝd׳ŕϓ'O+nd+-H{ O_jK3jFs~HEZvw{U#$H`=) ,fz:s!Em [QY`@JV]{^ pbbfCz? l!..Vn2yձοm[<`ZYKc@]u KI-982[$z.֨1߫AY}؄YJaND<}ǩ h$ d`K2. ( ޼?=골ds 44 ߼دTGjd1*~DkHVJ E|yGLtdDZ? m"Ӑm+Ϙyizq,̘`ilnvnzquGjNh*8eǨLL{fH$pMI Ҙo11UMI @ŷIM؂#{ jQ٘QD .FaPoYxWn-j!gcPC뙰䅋X^;)]v  L 2R/f?h~0T DXθ6l{qU'% PRՆc jBn={POU,ݕ" g=nbڵ7Wrg9Y&&(un}B`PY,-vM3(7nR/A'dᘺp>D"DUa 0‚S 8`BSJմ#5XLwX{A\ pS6t^ic75=2Eo yqrZ6.qDx<;D5z HX HvԦa$=u$xjflXw8x[ ޛ>LLg\#٨5]prVHRo;;3aDexu<0ʦXH&0Y҂G=۠i&+,S a#NŠ/!&WF]\"=YJx6Op@ k fB4M#F̀Vei!uN)4埤.s(f\w<Dm٧v,W ' !)rHa6pL^}rgL bs4뎋MxF³ݛ'`~)<<߫SUuw~7CJDqQroePR_pp (Hsϴy^ T A es^* $%o^Ħ~T֜´$.6/1vWG?@[b>Tg]]= BVh(n\` )n?̊a: s~ዷcibpKOaS책㑶g+nw!1@f@_6fw N#5!-3lPcUG.U2vG,e9짉@c)n6+ KUjJ}qDIv`\-uu%ue0W! S0ӯm+^GhMK WNbhm!G![P9]s'A"2ʸH=eq2 |WP2a600x%b GaNL֕ގ'f%nX9 Gٔ.0څS3]-Newa_ ͍#-~ F"Ezu σx8>.<~=jq'DXINqѿJ]t:Q^|QaЎN_%e>9{'7bMuks%>_Hˋ w帳bޏ z;E]Llņ#OX} TjR[GrgN C?LՖl0<`G11) Xߢ Lx)ݧrO&y`r`Ҥ I ֊dTYi4ѩݮUz&: q6P%)@vt YV9g% Ss[e˽s݉}6e܁UN୎b9ܦaYP pbԮ0X,nwтFsXA'/J )ɯ˪H. sCcXϧۚz]r>DG1߅Gx)*Ɲj"׿DOÓ+kY&4.0xq9H /cglQfzB>J,ab^Y?u0ju(f8j]Ob~1ٝ[&xn=xʗLMSu&X+>g DnvԍNo–Ѩ)DYR0SuM +*TAA ɛq6Gd!-.QsF]%B!n؍-B(B6M5R(<.ƕN^@&,n .G ztp H}jY` ۬?"S<[ԯN98dF|$ 'WOCMvfㅥbK> 3'b,غ tD(Bh <>sjqi&\Q`_:FU \!kpn]s>A:x*hlF"}u$Ҙ;<: ʹK݂Awu,_PKE:LO toucan_data_sdk/utils/roll_up.pyUn@}WUJEhv+D z9g~!ߓv[0zy*d{_p茞k" W2N{ņ#tpaƸ׼'ng՜v{w0 ѣ,8w@}P 3*+VJvѝфjVzj3 굂KOF¾-[!ӸSYa`S TgJFxzW [1MØCH00XC&rkx]+yhTUCqKl+Z_Wz3Gz 7<`]Q!GA6DH@31M&]f!=:돗9 ԏd8’<9vKFQfGnUt?vEcQ HQ+dMw^8iMO+Kc1uCq{-K_v)wQS*?A$Llu.h|XKE[W_UwL7ߝQOD,9\;Ŀ {qܶby f=njm,4bGߜY+w"Ȼa)3g Nr&T0+IYPk' Yl/q+ ΫIOQqƷ 0hPKE:L!4 5toucan_data_sdk/utils/build_label_replacement_dict.pyVMo8W:FBa?nP n@9HcDj)2ᐲ$R%Er͛0`u$2 ;跫-lW4 IPai#A*4jC+2r[Njߟ휥pvvWb䚽@iK t{T6'Đ5,W;noyQh,Pjw6NY% mJJ[ [#.pD]+ `:<@*{z+TY Hn fMeQUh˽H޻W'ɉ<&'R&2zL \RRw`d 4ޙ p]Bpfvs"_O|}5T$XN6uɊFTRlڣxs/h霈aHE/_}{^W  OiulX'qm wxG"Gj4=(to0ϧӻ,G(x5D7ii@3зjMs>&Tb.gVL! rcDVM]#s8Z9I3R1Om<W,{TARQI=|.;uNҮ.[?kVWMC3:pGΌҭSZs |P.^ a98%u'vQݕY }ěJBӾ uxz95?"|ŭo/D )M=ٶǐM/*"LnH{]8bz#YC,iPO.ס3B4+ ||J伲zu5Sz=_NPKE:L>ސtoucan_data_sdk/utils/clean.pyTn0}Wbv< "B }ۄ`ɮ+Cw;c'馭(sDXHkZkY{Npm?!I 73;$lsIB, 4XpM~~wv2ZI Wu}Ͻ4@rզf ib]EeV Mς427ƒ+cvuJ?S ,KGĠ eHIq 'bZJQHw`ˉt8On5:ЂʓL[=]MlW5Z1v_F9&%[DmN M@A+8&uz"2]chmxC"[ _prVj?5p_DI9pJ6ȕbLP61b7GDVu֢hafqhE]pXJGZ[H@ojJ) IC%9EBt X83FGRPNHZ55=re#|=5˟/\;FMnuC2֛^2ˆ_*xwb#-:ѡxFjIn/PKE:L<1toucan_data_sdk/utils/aggregate_for_requesters.pymSn +VTm!gD6A@wYG^f]z.$J_/}tR!9gb4R %E$5. ATDHd #V- 9Ǧ=J fCև?Qm[ZKR$ɡNn٘&<]\-Tub?}7VT[|W4RO VTJm!6>2kk[b3 ޅT>4 g$vw2ܛ%,V#F:) jv;@c7 >_~w'KZK{4Q[A\=8Y+4h AEe٧O~ٙvCY_ 81Xl[j9iHsO48)ǫbzyT/! fdxE+qHIjxA+:T|Z*JvxsRڂ?gbϛPKE:Lļ/toucan_data_sdk/utils/compute_ffill_by_group.py}SKo0 WTF=7٥ ;[P8EBeIУ[(aȶAR5.Zpt[Q3[oxc=*΃qmkcoZ}#UAk6]'j.LLtHP:-No\^~)nF.\[2Vï(@R@;N#<W&Sbi\'8O5S}d3«91=fq݂]j=' @nPhUdWwcc%:`ViT?hX`J|p&xo4?~6?Wz26j8R{:VMzvEZYrR^(@U^GXYsn觓–(|Cur\_+Ӌ:Iʑ6>lXd|ZtIFZ/)tq6,PKE:L>u&`:*toucan_data_sdk/utils/compute_evolution.pyWKo8WzWmt(->5Fl"%8nCR)YVRPpRC%v;^Ԕ( Rh)$W>m5TgUäήس>o$jiT EQDY 84f9{@EߝRZV8rc95n{ytOjG {~ ɝZwB.N(R1hڲ:%Xe6^6JOLsp|1r&ٟeQr-gEً#d\ҒWUMp w<3Xg,~5vFt+kă-/AoQF&= 9񢮓+tt_^H;J S$8r~m+){LVoNh qCw8>c_@qIJ$X@v%p`u* Ak~80O`aY`f0[8U༽X+FeDd'=GkZ2A|F3y>7+,\z/__Wpb6>ZsΌh>RՀ\YBW```I98w  2 5`E7V;s@fH {YޚօMBslswI6E?߁\iإ65ɜeUfQ ZкP/Fb)>bbQ41) ;R)h2{Ucd[~$=YZ\q3JХgсIvn6s5n:+^fLy$ 97S56 Uc\&dW?\"0mc ӘauyʽEHO솗Jw 0 =&Y/`Sr\9D?'KDSxExIMrN4 gEY11ު^{ 0H-=6 kxs,_(5G u$KM$P)PKE:L Յo!toucan_data_sdk/utils/__init__.py}n0 ~  0 }hEdj})"V_,HnSb%sܨHe?;Cq=Orez2A~z~<|m)XN3XF1:=f=biO0\׋ 3D XWJݠ8QZCWYŦwuΈcu&ʒ |m10ؖPUBUO$](`U~Y۾*dm )uħ0w'd+<*:>SmzA9 gh#W}:@AW[oz=08070XkFoPKE:Lf)toucan_data_sdk/utils/randomize_values.pymSQo0 ~WXt4:i=Mi/Ur%n31-: vsnA?v!Z;pz|}pkbʲP0$}w'Wb6A4Fw򯨟0R$ >o@f| 0 ۨj@p|L.8 "DtڀͻA 8U>c;K [@!<)9229[҃~c<<$}@Ʋ2%F_mF=8cdj}^PKE:L=Xwd (toucan_data_sdk/utils/add_missing_row.pyVQo6~8E m0 xhX2`h !&"I5οlQv yxwhZ-Lrf~-*+,801ﬨMǺEm@rc2Si ޵(lƱycZ= 5zj-Br<,94hGuv;z{9P@P0lAPG<tO mi̔)wQvZu|8ހ0#xvΛ#Ϭ qHUkΈA =3Y T>i̺ںGŃM'ſn\H6"dW"Dh)wh%#e%dp%xxs`$ZG"'>; a럻_pÇ𰼿#֛Wk~E֛ZLztz9  H5vA3`Ek˴MDW)8ϭf&5e<>[8AvxT"$t8OǧH5 ik,T2QIU\B`[H+S^ZaTVaAQuDL"Ynؾ>ކcN^`hC\4^?ZN1p8I#ؗ֩z~TO`Wk2v~=ڇ<}8SjoˉoF=vZPKN:L^- /toucan_data_sdk-1.1.0.dist-info/DESCRIPTION.rst PKN:Lg-toucan_data_sdk-1.1.0.dist-info/metadata.json]Rj1jy@օ.}(a]i`3#m79gt᪑g W&b`ł- Z٭}9{ ?l(SɶզfQilFOYWNwA[S*KB^;@Na&@MD»#*R79ER$lF% [e &eyZX#RԽmݯ6k|=NPn:Nk mqT2ȉN|h`ɀ,PiG]bQפ,eZ3m?z?% #,O]!n,~FISIBܤD5B5B,8q!D`鉲֪(젻",ycJ::Me[-JT59;[;;Wv\?6^~뮚o! 8M]ELշBݽf[PKN:L@ N4 &toucan_data_sdk-1.1.0.dist-info/RECORDIV7̰x (" 2m(xdSvٸ@wso1aâ)0|ȐG8EdJVYE)̪4@ִ ];]`^x D\Lr̵T1*PJ폒J9$ k>$//Kw ۣJfҗlл| rېnF2'4u5z36:܍vb1{ o/n"ڿA ֚zjwМ4Ny5>uvw0v&L1zdŀ@UU0s(?P[R p$6S!9I{q =* wޣ T sȤz^G$H+ϥ7 `ٝ(.KYbX$'f#,D$a(,ʂ N!s VVLH'q ֋b_Rþo,A L>mz $;0+|N6Ar~&5rh<*3INLB]| u0A 1LOuU-'x\$mnzO0կwQ(R6aEWVs1W2h[|Ҿ.yDLsHf`;BWul4{| rkurUk/d*g < }$m] #</"sj)x7f&vEBeDQ ʭcjWG?*O?y~Yۮ 4'=1nJ V}XZbgS5gaiGa>=ocMS0:EBR4 %Y(mޒbѢI?>[?B:oOF+;\2Dmot k*[ako?l݊EBLswf8?t^N;_"`n 7]I9zPv7^q_ojȠ}y}=_5?ʡm>DAׂ6sPipRY~ȞSBp2f%7ev!3oOd[gSaJ֍uȓkà4y.+PKE:LaK2tests/test_sdk_extract.pyPKI:LU>XVtests/test_postprocess.pyPKE:L/4tests/utils.pyPKE:L}Ck%]tests/test_sdk.pyPKE:L<$ HJtests/test_utils.pyPKkK%tests/__init__.pyPK9L5q%toucan_data_sdk/sdk.pyPKkKl!*toucan_data_sdk/__init__.pyPKE:LahqX'I+toucan_data_sdk/utils/compute_cumsum.pyPKE:LEb0 (-toucan_data_sdk/utils/two_values_melt.pyPK%LĹ  1toucan_data_sdk/utils/helpers.pyPKI:Le1@$3toucan_data_sdk/utils/postprocess.pyPKE:LO sDtoucan_data_sdk/utils/roll_up.pyPKE:L!4 5}Gtoucan_data_sdk/utils/build_label_replacement_dict.pyPKE:L>ސXKtoucan_data_sdk/utils/clean.pyPKE:L<1$Ntoucan_data_sdk/utils/aggregate_for_requesters.pyPKE:Lļ/TPtoucan_data_sdk/utils/compute_ffill_by_group.pyPKE:L>u&`:*kRtoucan_data_sdk/utils/compute_evolution.pyPKE:L Յo!Xtoucan_data_sdk/utils/__init__.pyPKE:Lf)Ytoucan_data_sdk/utils/randomize_values.pyPKE:L=Xwd ([toucan_data_sdk/utils/add_missing_row.pyPKN:L^- /_toucan_data_sdk-1.1.0.dist-info/DESCRIPTION.rstPKN:Lg-_toucan_data_sdk-1.1.0.dist-info/metadata.jsonPKN:L-atoucan_data_sdk-1.1.0.dist-info/top_level.txtPKN:L!P\\%abtoucan_data_sdk-1.1.0.dist-info/WHEELPKN:LIc(ctoucan_data_sdk-1.1.0.dist-info/METADATAPKN:L@ N4 &dtoucan_data_sdk-1.1.0.dist-info/RECORDPK~!j