From 4d906c98a72e25f2d2f8a9b580bda245a6e2bec5 Mon Sep 17 00:00:00 2001 From: mas2hc Date: Fri, 16 Dec 2022 12:30:51 +0700 Subject: [PATCH] Update documentation base on new version --- JsonPreprocessor/JsonPreprocessor.pdf | Bin 304007 -> 304189 bytes README.md | 34 +- README.rst | 27 +- doc/CJsonPreprocessor.rst | 32 - doc/_build/html/.buildinfo | 4 - doc/_build/html/CJsonPreprocessor.html | 183 - .../html/_images/python3-jsonpreprocessor.png | Bin 101520 -> 0 bytes .../html/_modules/CJsonPreprocessor.html | 497 - doc/_build/html/_modules/index.html | 101 - .../html/_sources/CJsonPreprocessor.rst.txt | 25 - .../feature_documentation.rst.txt | 420 - doc/_build/html/_sources/index.rst.txt | 31 - doc/_build/html/_static/alabaster.css | 701 - doc/_build/html/_static/basic.css | 905 -- doc/_build/html/_static/custom.css | 1 - doc/_build/html/_static/doctools.js | 323 - .../html/_static/documentation_options.js | 12 - doc/_build/html/_static/file.png | Bin 286 -> 0 bytes doc/_build/html/_static/jquery-3.5.1.js | 10872 ---------------- doc/_build/html/_static/jquery.js | 2 - doc/_build/html/_static/language_data.js | 297 - doc/_build/html/_static/minus.png | Bin 90 -> 0 bytes doc/_build/html/_static/plus.png | Bin 90 -> 0 bytes doc/_build/html/_static/pygments.css | 82 - doc/_build/html/_static/searchtools.js | 529 - doc/_build/html/_static/underscore-1.13.1.js | 2042 --- doc/_build/html/_static/underscore.js | 6 - .../additional_doc/feature_documentation.html | 478 - doc/_build/html/genindex.html | 165 - doc/_build/html/index.html | 123 - doc/_build/html/objects.inv | 5 - doc/_build/html/py-modindex.html | 123 - doc/_build/html/search.html | 124 - doc/_build/html/searchindex.js | 1 - doc/_build/latex/Json-Preprocessor.pdf | Bin 302891 -> 0 bytes doc/additional_doc/feature_documentation.rst | 420 - doc/conf.py | 96 - doc/images/python3-jsonpreprocessor.png | Bin 101520 -> 0 bytes doc/index.rst | 31 - doc/latex_addons/sphinxlatexadmonitions.sty | 284 - packagedoc/additional_docs/Description.rst | 31 +- 41 files changed, 62 insertions(+), 18945 deletions(-) delete mode 100644 doc/CJsonPreprocessor.rst delete mode 100644 doc/_build/html/.buildinfo delete mode 100644 doc/_build/html/CJsonPreprocessor.html delete mode 100644 doc/_build/html/_images/python3-jsonpreprocessor.png delete mode 100644 doc/_build/html/_modules/CJsonPreprocessor.html delete mode 100644 doc/_build/html/_modules/index.html delete mode 100644 doc/_build/html/_sources/CJsonPreprocessor.rst.txt delete mode 100644 doc/_build/html/_sources/additional_doc/feature_documentation.rst.txt delete mode 100644 doc/_build/html/_sources/index.rst.txt delete mode 100644 doc/_build/html/_static/alabaster.css delete mode 100644 doc/_build/html/_static/basic.css delete mode 100644 doc/_build/html/_static/custom.css delete mode 100644 doc/_build/html/_static/doctools.js delete mode 100644 doc/_build/html/_static/documentation_options.js delete mode 100644 doc/_build/html/_static/file.png delete mode 100644 doc/_build/html/_static/jquery-3.5.1.js delete mode 100644 doc/_build/html/_static/jquery.js delete mode 100644 doc/_build/html/_static/language_data.js delete mode 100644 doc/_build/html/_static/minus.png delete mode 100644 doc/_build/html/_static/plus.png delete mode 100644 doc/_build/html/_static/pygments.css delete mode 100644 doc/_build/html/_static/searchtools.js delete mode 100644 doc/_build/html/_static/underscore-1.13.1.js delete mode 100644 doc/_build/html/_static/underscore.js delete mode 100644 doc/_build/html/additional_doc/feature_documentation.html delete mode 100644 doc/_build/html/genindex.html delete mode 100644 doc/_build/html/index.html delete mode 100644 doc/_build/html/objects.inv delete mode 100644 doc/_build/html/py-modindex.html delete mode 100644 doc/_build/html/search.html delete mode 100644 doc/_build/html/searchindex.js delete mode 100644 doc/_build/latex/Json-Preprocessor.pdf delete mode 100644 doc/additional_doc/feature_documentation.rst delete mode 100644 doc/conf.py delete mode 100644 doc/images/python3-jsonpreprocessor.png delete mode 100644 doc/index.rst delete mode 100644 doc/latex_addons/sphinxlatexadmonitions.sty diff --git a/JsonPreprocessor/JsonPreprocessor.pdf b/JsonPreprocessor/JsonPreprocessor.pdf index fc4ab6f472372b2a470ec5afce5a4cb66309fd20..b62f7302771e951f8fd460228b52803ddedad351 100644 GIT binary patch delta 74037 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
-
-
- - -
- -
-

JsonPreprocessor package¶

-
-

Module contents¶

-
-
-class CJsonPreprocessor.CJsonPreprocessor(syntax='json', currentCfg={})[source]¶
-

Bases: object

-
-
CJsonPreprocessor helps to handle configuration file as json format:
    -
  • Allow comment within json file

  • -
  • Allow import json file within json file

  • -
-
-
-
-
-jsonLoad(jFile, masterFile=True)[source]¶
-

Method: jsonLoad loads the json file then parses to dict object

-
-
Args:

jFile: string, json file input

-
-
Returns:

oJson: dict

-
-
-
- -
- -
-
-class CJsonPreprocessor.CPythonJSONDecoder(*args, **kwargs)[source]¶
-

Bases: json.decoder.JSONDecoder

-

Add below python values when scanning json data

- ---- - - - - - - - - - - - -

True

True

False

False

None

None

-
-
-custom_scan_once(string, idx)[source]¶
-
- -
- -
-
-class CJsonPreprocessor.CSyntaxType[source]¶
-

Bases: object

-
-
-json = 'json'¶
-
- -
-
-python = 'python'¶
-
- -
- -
-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/doc/_build/html/_images/python3-jsonpreprocessor.png b/doc/_build/html/_images/python3-jsonpreprocessor.png deleted file mode 100644 index a691ae94541b94c469758043854d009da82f795f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101520 zcmWh!Wmpt#8zrSnN?PQV6i^zLP$`v`ZbdqGsRfo6Bn6f3lI~tux*G%mfhAX@hh~8# zzWsj8HP_6qnP=|jocliKOq8~!Dg`MsDGm+}#oISZ?{RQ&&#;F)F&_5L*`OB{_Jr&4 zUiCFj)dcGf_JY9fmBuR^oZ5J@n~#LpYZCAqV-Fl0%HIDUxPxvb);Ku#g>RK!>G@dv zT_!T3by}1>dW-jmewxKyQ7=C> z!8$a|G&0OI5s>AZm>`*&BAS`-B2yUi(r-P$VG~nFDqEv_-cezaoxg~V7HT*2G|t`- z@TuxB^f%A`!J@Px*b-h0EKmFSjxetZhKseE&V?4AFV{)P9vo(ddbW8mPhU;!EPZR% zTJ82gABdW}zXj-LA5_Z1syC4BCmv{_kr~*!+2K_^@7BaJ2wH{SUsw_K(abrJ3oqVx z)?!+`Nala!Huq^oGIk0&HQEFGb*C3V)$8ew*wLRF+eufv$1P8E^87sM zwsy))cr%~M-I4oh$mQP)P;BL-(PZ+15MP}s!S@A0zB)?->rT8UpQS32Wh%bQRB%0k zkoMH;Y|!yTD3wi9z_K*qRo{K`NtZv7EGY`*(k!oLT`o5z4 z3*#6&mCxJ?_-}Q~zG@O8%j2Ou+>-y>Oh*R$h5uqQhc1T4PNj8tWm-lRg!M9+_H&q6 zzcqF%IJE~|nA}&0Z>SHw3wkr>eqT{|XROwj7SnGWb5qZFX*V80U_E|1nTg7gHqE5r zoghD&JV8&M(b`>Z9MjnOtRGVs!*X4UGAtj^7_NHSt$Olwdh$S8KT9oZWh}l&bE-O;1pH>S?li&0U4E=hwG- zNe-TkbDtjS3&vLb101Y>lTQhe&j^wK;*Z$b`cgxt_(%D?E3ei%6%v^04S87&2vpoU zB}({%Ak)Vbm78i6C;^i_t@EYpTD6SYbb6zMGD9l1rrFWgrmr>I+1#&P|D;uYtIN*S zm1FTrSgXta77F5A$jYd5i?D@0*g~$PdcbBzc?c{nAFNqSGK!I;RmuV&ycuS)&evua z91j3#d8SLu&;O!5B(LmlBf$~P=Q6uM!{8Dmr3wPQ|Ft%;G}~1I@JJ2tfB6e{QVQSy zMFi%^PodhC3?z(wqRzt#Sk9z(_Q-S=H3pQgUJxVb$_0_NYURcH73#o>Uy&sICr?R* z-At)#^pJ^~@u7+_dH}i9Ed^xMfnIrkNXJ9lpA@YLtx1xl9+-7+$p+R(A%44dQ{kh{ zXyOpOPjwTS_i{KMej}^9w+CxAp2_a7H)M1zE2h9$vL1S z-j;P9J0id6+xH>_Av0A?H*odJZ!1TnBI^{JfOSr0o!2;jr>>%X0RpWCv`X{4oCzN zLswoOwTBgiR97i(xH9RI!87`QZ$ED2{?&+N^YYuIa?q~H;qVtn645i|TmC1a-ue7Z zHM6x?K=|?lWM_IXTr@rMR`|>$Xaer%^BbCb?h^#%&u2nMmtU_2h2~hBuU$Il5Xlv6NGF5w)`lksz(5`FwYXIx3s?k~K|iHE z7+HL$WBA6^?zv;*D#>t<(*=hVpyB_j;G0K;0IM~G$mnJ?*@{mjAbZT);roGODQf!R zQj!QJi4-~CAq_9Kj(LBg#H1Q<`r1}alJMPUe38#LqPS?UjS7zEfchV_2Em#yTw+jk{Mc`13?rMn#BakrSTj8;$#!oIA?+UHO^JGB-O3c&x18)hTXTAldZ1 z-99-;Ub3I;^7ZS^v5{Bw!jdms`Cq2Ik1|jvraQzrqhdv?gw(tp+Sw$HNNeNdZvHi9 zZq@vH%mCT`6$tOLhJir$X3jIvrMX1 z&?scEfC~vlfB^5KxAYUj|DN%$3qO1KlCK@ddw?$(bhn3Bh8)L5|6vxq*1TbV>3a26 zvdB!S-ey}0un!z90UJKK%iQh;Su$JUBh?CD=({!6|0R^$``syj1d)q=G`!zVuVE2F3FFJ2T2`lCUf;~Gj=GySQ19( zIUiDtv!IZv-%nKe7}8I+WWrrmL&?-q-7GvD?TpCWsup-_wqp!W*`{(7;@nU zxsZX(QL#Wp4?nTTVPrGC{iFf+`4@nN6u^BNW5ENE#l(J|Fm*;)H&q(Mgv68126P3S zga_{5P~YB^fQyfAZyqD7<@57OMJzSozTbGaB}q*7BpWWO?b#IOJH2SijYVa~`HY8O z!mGQ5sx$T4Cu+RAqpBjOUA3i3{;mvcz&_e62P4uas@X5QcmWDwIN6iW44xKo!h_U;2SXHR}qfGn-8yQ zf>s{fBROP&WDC_Uv)|OJl1zCEfJ|#{^hV9nFM(NW3mTw;?y4#j3xWnfYi}0vYCPsXE*ReC2iHZ<{G8Kqd3g{Of@2Qwt|fo5O^f+v@=^?t0r(> zZXj)D!h5jnPf83ZXC>5SKPPrfEZ@6{<^&I7_VsctpSnE&yk2*2J?nkN?ld&zliKgE z`oYv0o&4L|_n0_f<8+*uWauk3W5k0ulHJBIcFPTd1ho>qr-bExD=0k6 z6%%_|$EVG(pVMiPS-+xyAqq!WGOK3xTxfm76xIgJ;6jO-@%z4(_USPRmmqbHHNA{M zwW|kzlbmImsdGsAShkwT{dK$X9%pyml2SV}n>sPT-tN8lT1wAtG2eMa4K6l+)Fni| zoyR7I`(@-TMsx@+mCM|I`k5HrD(rATdqT4}fxaOO1Yd5mQJRGg@ItFH@zRMjB-u#08!_e>+NFcyK&QOw0HM4+xo_>dOC$ zOUQB)?B$AA{g`ZV~==y4As&5b`FG82@!V5Gk!^pJRYC@1a=KJkk2)|-wfMt zDp;HM!9}}mSFUzZy>)UOa11?mDr5HVd~DzPGw}SuVqsEdSyI~aufle^xW*hTK!igT z>)hOKj@N~#J&&XUoG+foXspTi*{(9c=@tZ&{|F1#;m@Ru?5B*f8gzWDxAA{pr^NI& z(DKwqtlov3AK zRZ&&)g7EhRVc02{@o90C2&&Kb<6WHwu5vJ@s4M^5%PYF|fj_ zR{5jfPLEyH`vr5>G*a`wn7V?#@O50}ypU-P+&bzvxqpeGK$F6R{yCdD17YZ6`F|U2^D~fmw9h)Q z?K}PC`Ksr~(zV95jyDw0Q@EN5`JF>Z=T?&mO6hlUH(`+N=0xx@V?;D!B^=jp7N_8t ztl~gTEQ{6J?Upp>NInFwZ)Pcb+N7h)B~uG5vf;)7n8BUA*PBNM#8AJP6n=P6De0aPwlO)IE2a*E?ScLj3OYK* zi-_l&^Oy#PQldPq9_8Xj@G4X&moUik-pV7$-C zZTBY<(-$c>v>_|<@Qk?f-F|YiarF??EUu^(RN+^@DB_!sinwv_y^VQt6Z09rkhA{P z1(t9m3I0~o+f|c|;Vu~7KL?{DTtp^?XWwMvCLvn3K0=kXzI2&)RL9lLZPX0*3oI;l zc0C%lcxDtC4UO(>C8KI0Q)>x^9r>2~9H6SknoQO&Sac_sRdX#Ly?#|!uHnb|x;BFt z^;#iJgcx^$1~_uik;|PY4-P%F{AJSdQ{y@E*MCECJPl1e4awCGm6pGjRtn6c6Agi~ zCB|?AM6yNw!*cUo-=}XbyopUt3RNTEDHmVp&%bOfzbbD=J-HupwJKvIUa|3bKn)-V zRoVu>>~k{gedoNVty&<=xayZECu2>1%QnZ#Y-jdp4j~nm6kn(rL7iLv-~l}xm5K-O*JytGkQHBhA#7i{I&IRK z+uW|DI=R=S5hRVApK>yM?wHc)CHnI(d-|PGKB7ro%jhlD8vAzvNwy{h5hM#?D3z31 zoBNi$$cCIqDBA@W7l1Q!*&5Ef3ZZX(d;YagPVj9e3xBfmCA|*Vaw`Whr@&%;|8YIe zcC_Z^N2MH9o?}4U#(E^U`B>n2AlZ6c5lQGsyL^qJQuw#Jh1moOX*{i zr+U=rWNT3UWT2$!lSWid>*RtjrXK_7#w zKBDXMcP}GDJhmGZiP3YyI|r6p>PQC{%MXJ8ua<$u2zwVQ`xNgu3aH-!v*!8kCuq-6 zu}2uT{8P@Awz-dnX}Aw4F)x~I)=X*PK_mawa{1lEBn%ZTw8~OsR5)Bf=HGU!VMGjtec!l4d;+wtl6Te9 zqV|K%G1Wt;k7*?2$=Y2hGr(99r^pMA7YRn(g$-t5$Fm!Q*;gh@IJeX6tWYFW8`c1? z9w;+NGhg_&Oz($PPj;$^j|{OG`?T$+r1~O#`e#S)wadXs5E|D4+uVl<_5@%{MP(d1 z@p!ak{7>bZyZ?&x-#6fOn~)3v@IbtcY*fMzvSW?$3yoo#ryNJ)%ezEy##d8iAE`Yf z%AWDQY~|E$ol~G{v*P6n=a_ z*B_l7do!|2Fp^T@t_m#){M<+-y2w6Nz2EyPVkAJYwJv%t?H740EeB4n0x88s`FyLT zx!}%%|AS%n=*i@~+=@cah@`XJq(B|TA`dQ$POQ`t(FJwebie*%)^!`j8I&3h=J){N zV5;R{I=)`mw+K1l%h-H>RrZY-O=8-D4-7&794o&)8I5|l6>-HFPM93FzSrVLnn(jD zA{+rD>*p@*ZgIeNc)(q$f2Uq=mss8*33Lk|6@?&L0}^b7M?`ZngpKqDED6@)B4KH9 z`CYeoAqeFgn*$!8?y5$~oT-+R};gnMX zZ$_bunu3PyZyB6|ey(0f-;M-U_&qfdD6(avY|d9GNESB|oYK0atf($32oIf~Kr|Lz zTKt!IP`5%|QeDdHB(O~LbeX1Q`dTfO^7qFB@%epgf0qL^-lC(&0VIHh8>+j47my zDPOfNFO!?$fByR$>eZvqKe8At1C&guz^P(Mp*G=FV;K=3g2S;jvIx0pr|^-iKDKHk zA6(#_SK+=C(6B3RG`riV@yZ7ML=Djs1Wh({IDKBMi%+T+&BM`8tl35!z7m6qgs2r?!3 z(D80pj1;M+{#qywADEd~E;b|&nea=(_uJ%JuZokR;onS`R>*~3{mS@^`P4oqznJv- zQ7hZqMt8$vGg0hIMcaIL$U%X5&b|MbY|^E;*XWUpC1T2F=^Z=vH`>Uz{SfMH`ev!*z{cN`%luRG2uV{6;6ARB;QbH^IzFPE8 z2V{LLhV|sSr!2?t{(1`3Wk*&laT?pthCC-7ug=DD6!h{&l^AltRrH}N@_r~1i%AR~ zLvN(|L_+iLKE>&mE^k<2Hi@BwUPI79k_cFcp~)A^cdZ<82(5vSofU6Zd%zHyRLVNV zqi`E-9Q2wrwlSyrN2wp;#xIJKbYQk>&C;w0-$%tD3|m>z;XZBwZ<&HvPg}uuZFm5V zOpD@%e4YT>KpODbyi=-n`4+fY!;0Q*v@d4%?t)TG>3;@WiWmA_4I@l7z1;YL6>|7q zm3u^;`66w06qslsNDMB}!B?F@uoG6Plkx!%$(W()3zMM{Y4d z1J8ms=d^_tO(W9xqj=%BhHa<8MorlmCD@Y33kTbZzJCgQtY$>B{yJvuY%t6D{rcCi zv(7d9Dso)Ah8B*R*W-ML#Q%P{heta1z`EQJScvIgaI>1s+RFIS6gZe=jstxTy#b?N ztKAhXMb}mK8yAsj9j9b(bW$QUjz^ZsA8W#`NGbb0 zDqG}@iasxWEys9GE=0AXVU65Wm}Zm$EO#5pr>k*+#~_`i>VC+4u9@g;IbmbDI}8{7 zd>E7w;}r#ad-(4Lk;ep;w7~Jg2zxWqq#3 z9jM)hh}m$;ZbHp+2=X&GH6YL9q2wSFL zg6L>TcaQ~If^-R}S7*r09&;*1j=vspd03ssVnr<#v?*o0U9KS6S{ z0vhoB|A0zaSB01e+tHUsk(+s(4j=$+$mJ*d4FGb=DX*t!GqooLhKsIW9iZQRfeI_D{;^E zD8uX8OJJhmpDG{lqibT9GDO@WY*r~pTPZpsdgA;BI(jfzah}+ecd3O<7I+?`U>!Ec z{*vuc!>+LYg{nG0%U#^9rx)gGWx`ia)*}G*e5D_U34=%RNe}V}vJA>CNQ#bhKJT$4 zB|!^M_sKmvN7}I1ss(DpF~zBV9OvFj@OY=mWfJUAoaI6UpH!{utQyI(AKk8U=b#53 z!~I5W2u8#|qbBUH+^r0OZEk(PQAwjc-S*mb3j{;C$`mZG})juFYLb1rFM0u|vvX z=^z;KS*wU?t-~{ONu)R|M(a2^`G*TraO$*BP!ctx-f@;d5rWw^cdtYbsgDpUkqr_8 zu>OFeo~pLc*`6h{-r%hoxm=}ZK7qNm@+1{5vU9*B=XpBD5)XQ2CZ}9xIF4Ws+|3%w zUzyT1H;ry>-lap|fId2~aWY8(X;}*XNWybG&ClPKh8V?8eC5p6Sp2u1AfuYb-oU9| zTyc14Xe|kSTdWppvgCr8sjbOFY)AiIaofdAyZg_aC=W;Ur)7NKpX|l*ejyeB3?l0d zBXQB>tZ2zI?jkzM9=X{86mQ2-*JYCp>xGnW;Ua8H%EvBkGT|iU{q3v+ftn^sO0F8b zC}X6u*-}(ZNx!LVqWYm;y}*))VK{=NC?^O9t|hNf0!7V<#Nx;MP+H-5O$rsbbUEVQS-^`WV>Pe zDxAep!WE21tLrE1wba1mB(?5QaBp=JW#XS|zFJG3yfF_|-*Gv#td4t;a1WdJ#g&cg zh4A8y)&B>eLV;Tk!)v?FbvTblp93`vU0|`j@*8q6>?5=9b@Bk|!PZtczQsU{i!LlC zKt1~8g%qT%HgVuOlHc}tT`R5y=SI#vzwJ?cj+NYB1(YBKzVIYb$#-gU*c2tB;01Oi znjets^$~sTUcrHzyp?_}?;7Q0kmYmF+!l>4B-T0#FISR(R2@xc3o>K-OH+63&O}o7 z3!rPpy#FjD&c5YaQLH~UHA?#R^2RtV6|T4$2aXV4MYS1u4^byzH4^9}*uT~arPIf3 zzh-}vgu}2F0@A&HHY7fTX z-;#C(yya_alE6j{-ncbcP?*@-e_4yK=!VFq$m380nl_8ty&RxHZw8LSdddIE9 z$(a*VVkJmi^hJ$lS34ISc(5Q8LsjZtEt!m3>DvnGTi0dfcyak&6d5n=9j+NedLa2` zN){dU1!hvk`_we?2au5zoJ^juo|VS9MrnNh4>h3zFFx_tl4)T-@sqD(=VS?+y?=+bZ-0pcO4I;`xj02(O0hBt_cl5r7__gQ%5J)%j*KtCVuhm^{8Li7 zAtzFDv{gb4))Uj(6EkI_&t{`0(IfY)U6l143F`TFQd9lr;vjN=spe^3iig%K?7G6? zlBeP0{&&UBxc$d8_(>RAMGKBmIMOw4Oul3aGOpAsH!9hV6ZE#s&9woJV-$n}OIm;v z6Xdn3j^x(&>m~vO|mUuEPt)UeJ8 zB~1?^3@`nMDAS`VZL-0>5KA#1Sh8e4L+=jNpEWm4l>{RYAhz{0yL z&vss&i&L8+>-8D=cB94savt!c5~CiMh?{_oAw`vJT8)l`Be%8bKq|h&28qe#&7^Tb zPrx5+Ye+44Xko`GR7)WQHhJ+2Jb5`INXq56}_2dUl?qhSbkZVl$xo2@QA1= zmL1yR#=oS{Z{+#A7n0MAzdMYTn*d5gX4{Vgr54H+X{<<7f)u}*wb8@}LJP6e4L5Qe ztvBXlSG#i9QWiv(&Un9MW%Ul3$sXgQbZQc~)1PaFFo*fX*HPhwc^vRH{Wlz&&lU5XD!ya8`uSBJbM(19AH{RwKs68Q< zid!AJ{<5+1m` zTjXi`G*-v*2$;UO`WOD-O>?wOL0>>Xu4j^zTZ@!x9OC|R-L=kJ7!_p8_sVzvJ7ewg z-%S|snuhL>&vr$%o%I3++Gjd^8pH-IAhN~>Bn?zfcvG0~`dT z+&Bb8VVCtsGqY<_v4X8A;{M$$H|AXP#hA7#?1-BHS!e74!f%9AE}${gJ5Nz9;jK ztPIbxOKt(VSCi5!ujPr|xNELFBOcgj0L^CVGu|(b=^NFWirvfZ81eGj0g;`N#6j1; zmLp@?^p0>2`!tKYDIE1d$e;j}f0awcBD?&rG5nLD77sUIMCN}~vazCtXe08y{Q;lh zH>`3X1$haVy@|uv){V?5MJ7%}p2gKP#DR(Tb3H>(q|Vrw;RP)}h&^Yujd(9|tgQ?$vyP4DrH) zYO`0b(uYJ_6cAE@m_622Hv&VOY?v>Rrv8D9DGHI<+1DH7FRtRh!sEY6;Xk{;n3a1p zjq)%9()nkyI*!q9{|xSL-aw9%Q@R5*UUpxiCgkd(l={}b4|^27c7M{O-vpza3XpsOy7Oi@x&bo-A%+>zLbkb{Z8bNW9S+ZJq zfaZ#{xBP;w8$Fq&<>uWkT=7xRhlC*U4|0hI&xzqI9FAEA=h~ecS8ytI{V@JZ4|fPP z*iH;Dm$uQJ2jYeePz2`9PY=TDSR8}~1LzVSM^VF9V}y32x?n(Szg&UnzO|i_h`b$E zL16m+G-hTw^71PLkw9T zpnKY;s}(KMi${tB{SU(nw&dV_3btI&0ZqVJvMkg|MG6NurQuqYr%xwYZDKvPw29}; zWiv0<;9HN8?V{tW{11iXl#dNlq(9Z^jl#9AN50=ASkH6wLlo54R;b`CH~>A@n!L;$ zrnFlC+7+gW+b3qKl1@1#IC7d}%#hPN@WJB}is|LYiCr~FzaDB5Se9&flwS(o}*CG>%Z zLg`F8Uh!9v!4IXMN`5=gKDle$$llCIK1}c%lH`(o*`#mQ%9KOOB$S+Mx8Gi})ghr> zXGRXU6UGYQVixr_w&v*?q$0OPs~%uU8JeEUrwJE93B#v3v;#Rs>euNu91mY(zbpib zME%Wj-b=7KOt29c5z7%^(?aTy+3z^q)rruuLciV4LUJx%s^9rCiz{_So?kdIyqynM zT`Drn-8s+|BF`-^^~usyl0FRIl_IE^pE7%@t8-nXf5!4#t~->V+){KE4W zb0=XdH&5qoQs++i4yL`u^i||dA2d1DG7q(GMHtljK|XDl!gT7Y#`~8|k26xmv{jG^ zl26*-N#KtUvt^JVb+uKxg|sA1_dE9#mMr=A^~u3Bo|slbsG@ zzB#>2>`#GbbJVnQ7G9C!PD5{e2LCkvfhcFsaHoBu4#7C(kfw3Hn?!4_M$CPFw(>-1 zfmK_|4>>=cTy->Q84cFrkVM+8oN*DRSsY?mk;B;_Sbs>VA>NQ-=_X9hqFa`6mB5oI z;Z(@2ff!f+BU}G6q`E*$WC#n44U9G>W8WVMgIwBf#xBD;Z^-EmZ#Ii#6={Gnm3ZkH zc7BMY^YR<=bRKhBcDEcI+|4WMHF^47Xs*ArSF0Zm^jpBce)-QC@!i^Cpr1RX?`NZ^ zJ!_$n*kxO}p`SZTox3Kfl%NrOR$!9E)iJN2&~PH|CLWfl0(avB;u1NL&H30VBLTUT zfs0ODqA7ihIXLfuZk_C=+xFU(dkX84DcuW`Gf3R!|&*}TqwUOZ=621 zEE420r#Fg3Wy`z5C(E)GNkum027jSk;li2zoJ=Tv64wa?Ryd`UH>Q+NyI5f|2npvN zop?lh`LLqX0bYKAO!G30eDx4L%otH5M}=k-`>67!zsnO3%@VIu9*{q~uSAT@$evE` z7)WRTWwKH{KfsB^^=#QM=xujwKRiD#MCaSUu^~qC$Oty`pP(Ooa)n%CEuyS^@iK>w zoB@Wv54pV8b&mdlzDGqNg2|R-aQ(Vg6uGN&L|c6UpIqA@tDzmc`W)uE)^JzlI42uo zG<8~lPsr)O{8vnrSWc!<5J?UD(`4u46lH=Tm3U10!n6&_w1vgOCx)&sch&z4ULOkm zA)L6iO73y^8Mr+27FJcd@!0_K-eb*@IoxpV7F{gbs`M?(>|B>C-5VDD%@N$&mDr%r zG5u$~CB};0VZ?=ijb}YYcEJi0@DT=qJnoCJKsyNpK;(5;n3++Cblj*-Ulpitsgj2BA29j|1zUM8fLA z3@_u}`8=_=40uA}8|BrrPDuz#JZKJU^JZ@j`VFV*PIK0)50d-5H2CioXHbrd*W$;* zF+TW|ukQDNus-R_MpX8bk*}`>Zt(y@Q_F|wMh_cQEJA1J;d|=#9EeIh$ZnYPBwWcp zDBW?>YpBB{oS5b8ljl@E7bF6x$LVXK#l( zp14pTEn77QUmfOHl#Vrw+%YBH5~KHMA3=#jV5oVcQ|dYQcmrCp_b7|%UNs+zK~>F~ zrNY^MwAD{@ojQc+uYj^;9c+p>r3AV3efYpst7#OXK+@41LE9k^8ULnT&g!;`oDeEY zTj%cfaILwRRI1rG6PG&(+)!@=2Xl8w{0F5Da-Vs;1fTPJRg3Z~{UjyNBBHdxO3CN1 z0pGgHlHE?BLV zRfiZyEbj&#E?gs`U@3n`sbaYR*EmdOo91G49oyg0(Z6ZW1iAjuKT{Aii#sfdspvn_ z(Ymkr(C;u)^RCN$cDuIUaf^O)+~(fqNNAsDK=6kvu`Z%W?_8^MN^8vQXUT1w-q2?w z4(R~V5e#`1#S9NWaA|{c*`1xA4I7<58*r`Qes9szNe(omdo`uZsrh}fSvD<%_Qb%r zbV#(6jZLFQ5QuYY)63yF!EO23xFc&N|3@$5pSX>dNI3RHeiQU5Jk08gP1pXjAu#=T zmFI)$m(~C1kPqE~qi!eMlFI1IZPBg`v2;Q@>B{cATTk|@i$WX+)OHDQ5BdiWA%4UYMjD#W)L!BD5UFYzq$ z#j{1nM7BwJAMKjFKR%lahEd=E5>XIVjqGx$JRN@39bL~YFhK*)D5gKv;#fC0_&fLC zu@;Af8lR3nEb+xKzxHjtxR5%}fX-(2$|vow;2euPXJk@8{GCb!=C6RF{dhk~2KS#4 zNUvqP*fvuVhy_-o~V=pN_-6a+2VVk(#J~2 zLWAb(AWE5zsYm-iz1FB~vV!4~xlfm`&iys1a?t#6su~K8x@SUv1SeJDs&q1LN-k;h z5wI_oD)~~-m>`-E%yv#60lYdK2k@vQ%>-sPL z$1eO#essLNmlXY5eVhHlCerQCN4wv<&ksDXU2~$}Yun{Uuk-j~?J6cbX!%0v zSlQKCXX&zv8m6=KY?bNb{hTh#&FER0{$6;w*7wl()HHFY^FX28wq$aJCsY$ORkET5 zj&c{1H1hd+1@{8F^}nrt9BxGzb{L*Fo}6&FjS|-ZJBDZt#FQldVT+bw&RPBtFGpscyDmnk_;NSWfR{)TC>C>Tb8~Z8*^%JXB$X_R~RK_y|G~`7y0t zKdi!FdhW2x({+oqwJK8`^u0E|HMrf;uhp6pkT$hbd%@bBgd!|={0 z=h+53$o6d@UwC6djj^>txG$$quOt-FXJZCY05a(JQaIKvS$BArquJ{vM@Gz_UJ>@Vje^mJz05ot&mxm&3kw|Zmz09bTsg4;`7GulUO3^@r-4BP8 zC+(|RT&un#pRzO1-m@NJD4=H2(W7ET*ywM0uDj&3l@Y4%uZ>;WHYz@xJ6v@1>bgyS z*)aE=&=s&yFDm<&*ky;~TW5;{?f&v(n8UA>a=JrQ`}VzftOAR1rqri;)Bss;ONYjJ zIK$us4JsMrN?Nx%SHAOkB*0eMWQ%Oj{ImPGy;N0N8Uc{PEen*m2gNqZ7R`%)nC1M` z8}Pn=_j7Y|G7bRcdfNU%*<9O7*L?0B4)iTl?;REkZ+%qhblRMTG?hXyqPtLiqz(>x ziMHCkn$bPahX|?g@8ru@xT1<)qbgI^Z7mH(FM0Pm$|g5N(y|ddyePn zAkoE4&GrPeW1A8o89TNCxLYY}qA zaJ`!Njx-uik8eKqs!G41Q(!V@mbcDG@3E2Bm(Gn?zSi_;8J;&+Np{9O-sL|u?mu%v zw@CD-^n1s?X3VvHIDyG)-z5lh_G+lV@Ug}Rohgi`LOwA$t-eYq@wh;^8XvS;zfYAu zy;V+sdjGeY?QM4stwF+~oK-TBKqb_oc@Z-1I4Eeb0!k3znBXOfBPv>R)Mbm{Wfm^W z)0Tfdf?0DZ{!RIu8C#5ET><%5D`#PIH-Z#_P5+7;nuO0?&3hfQLqO#6WC5PMZ>p`% ztKx?0vUwMlw|iDxE|*pGQW~+oicI0B)7pzl)unEINX{|tO~G_sB7&c&^x8O6HB8En zUk)4#OV`%Mli!aF^L(G#j!x3l(ZUstN8V!P9@)}uchGMgqAH&WXyr87Wd(lDlBRlk>RdKBfXHxyt%=D-I` zH`kVl8s3Wv6cs6KjiUaQ5UC(A)wy?Nn?h`+;K zaD-1L2~rFN3A!*{3Cn8MZ*GttvwxR*9o@h8_W)Ydjj zH$#FnZB9O3N@;DvGVmQObm(VJ{u~9zz<&Q3=Wg3z__-EPk|p=b{(h_N)8Bsrobz1fyv-DZYf|u;Hcz-+>YpG?g`eg+5MFKmt@B0Le2erwlF8e2Fy8o-*mo7Y_;-SLk65%7?bU@%YH} z`eKVn&ZW_PxyN)py!}PEoT)WbTxrf~?NfoI#DN4MnpbuR+NPkWv{ER&P%2~o<0wl; z?T7O(^|oxpi|V(J;o~T(TEbw=R4PQ0j#6}?*ZJRL(?1^=w71(FWFf*wU%C@nb7+IH zNn=!`rEP;0Hmn_r>gd;Ej?3;lbC*Mld*DEKqNRTvcLx}Jtpgq34DNp=g?_kQfFoMU zZ zSqy%JY>s&+A-H+bch(!NVeyMdw~Sp=;7~CMro0*(6F^s&!x8;2@sRSR=OBS5{s^UG%^w+A(oPF8Frfc|JK0SXUJ8!l^ect4}%aag|?2{~X1 zhR+n5)`sZ@8RwOc0OAuvZ1p<~K3gZz17Au(u=$aoj<3@(94VElK95(SrjTGTK~?#g!CHJ+ZOxZQ?A@}KLn~kbHH^e}1_FEIH4d)soo1@FGwm&j@AVcwSz;ZKx%VtY( z+skZ%7pH$@X48Cg)MUL}tPHG6W|Ol|o2vlDD=aoK?0grG6%4ok2W~(p%ICEapbkh| z_C2~2A_yxz2qlR)CEc*bTpTw~cX9S1p5M>;mb)H#+J&IL%JhN~9>~V;8~)Hy!qqpb z4B);$>wPqGJ;JA)+XUQiHstX>6x?#eb6uLD3jR+@S`9Dqmv80*Iw`x;tlWl!1Srk_ zt>#1V(1KH+ij)9&p?nP${e1ApWKWixMkR$z$Z`LR{g+Hlc^O=szu(+W4ROYhn$CEl)t=gd}Zd% z%*9h%Ol3~v^e{41B{pu1318Lv7p-z3E`RWmS`blFqckmI^6ye=kTK)h>%gG97=C^*&>%Sz0zCGA*GI`4l2SPC|Nf*2uLRyMX{2T^K&uR%D7qZ+}jQA|3pAff= z5IsXRaC`!GU!5F^DoIebWp0Cr$)70upT<7=QDMXS5l?ZP;zVbf&Ycw2fKoXV!{S$k& zW|p93rJ|Effq^QQ?=*U#7Z?K3B-s^a%5H{22{F;%xx*1|0WhJ6N=W^y7oKNV z(uXdWYa?-qFSG5Q`oHBxpw!WHLi4nZ00sp zdWwBvBe>v?uSB|LLGt-odQ9d}WB8%`$HP8paAj&!NiYV=X!6R4?^8Cj%`yR$eV(#o zIHFkCrW0b8{|p@ARzJj{-6$j3=yKWv%N^Qk#DAOP^u1$fE(*;`Ma{ctnjsv zdL?Y+s~USVB#;iJf3o;_$yEDFen`|jI}YSSy~^F$zF?}Bb)HR6N-y_TWQ~hga5y<$ zA%|kGeKyrT@9g(W9kYNTqlc~h7l-C~N~M=Jm>({N)ISm1{N`c-^_1MMuG`{6=vu#S zzc_v~{g~WUrSTZZTaeD2B}r>YX=i+x>hyg!RGOz%ZS^l?q)Z=ndZ9gt@aWWuw3OX_ zF2Q$nkAqlLb$`#;sGw`73dJ{~@ z^DVN4lkl`4g$li#dX;f8J1*xX-4#0GIwiyW6GOK-mv9VJnjb!zq60Y3%h;d8b;kNQ zM;>ijGeSJaCEkQW*g}r!EjB;}OK1+TlwwEnfVC4utH;lDq+;=64sCPz#u*R?j7eMK z1hExPH;TYuMR>dO2=#z+-k0!nuTf7V8Q9-O&J*uXeO{u=Ky(>Tfdsq~NXE<*@3-td z^rb@XYkIrH#&*=KlF`yY!6v%RC5J= z1BJv38_&KHEz<}}_Sk&2*0Svj166W+culunUX0eEo<06|_%yyTB_BnzlT{+afr9Ql zLxmic*fC=Qy_!10-&zz9eC@uk`2!XrK|i1=;24Kk5Xue97%%ShhYCEKKsnCy3iHfI z(&rot-!@7>+mwbiYVKbz@p|lFKh8 ztkcbiNln^Hq-u}dxnG}SQb&DUJ}9*z6ch;E#TWh1=V$t=+WKOh^WWmN(4UU|kMWE$ z59JHHaimBibzoN}_Auz{0`;3^|I_sAI%R0xEDeM$sg(|6(SJ1K+WO&1hT1mJmDd#8 z@Awww931@|wW-HHO(FkeE7`eA_0A+ipOL3|-feX43;WH8)k#o$KJ)pIRxyl=zrK!H zus9^Y#pa#+cUBb0NA!G%CGlVdH1oF0NkM9SwxP(h;#es-Y`iv|OP?}NltXh=sE(-| z{-)H+=>0Gd4SZWt!6Bgu;70PRXy%PP9_H4^24oM^!xsxW(d_o-Y;g?=Y{whWIH!p7 z_cv55k}bY3CH*axxK~t_e@VN16aHH4QNfSjofY9k-R1x|=pe%}j3|+jHF0_6IB+)1 z67@JMDpQyeYS$G7ncF2r%N(9P=`>3Gxs_0>mPyT?Y)uGRzhT(<+ZlAVW@n^{dSB7A zqg;BD>~&Y%4MZkFnxbLDl57s7v%XK~b11@l`MUR;i~P-r-NZKR2X&uU=B+p!Y3#1; z1hKC+v5BHCmgcGI2~~75`Q%T6_7#f;-`p#-L_Q-M>yiaN)V2~Hmn9F%72{P5H#924 z9pRuCa-kHr-wZu=m_$&;rB?9cjA>hgzeXHwds|gf^9n`$|lN$x3%nbXKB=( zQ#w;3>t_B^M$J6mi%{K(7XM2|)WJN7zdOx!1FT2|B|4~~cN?*@`{D(k+x&PpYE5`i zL|98kuOUBrga6*}=~Ft7*baYk$@%It=4YR+ z`Tg$ZTbFfclz?j>>eUgsqNhijrLp+W!j?A@-Ndr9^@*62gsoA0=;!T@l)Q9XahSOiQy?(7m4VB_EGj23aJS2Ysj{VshLbdIj z?VSzmA;R-gM@zRcJ=DdqOr@rF z!T+&S^O7%O-44n=#J${>h1vL{H?`AVeV6Y~`L_+v45Fv5xkC?qzi(O#f0) zXu)}~Pezm3;VL>gB7Fr7G&Pd4y>yq_5`jOrkPfZ8LC3o;R0iCP7fTIGF2huH=;vf( zDlysKs$`z7J#Rq&s9x01Lq@4ovRh2u^JCoZPxUBCtYnV%a%xEOSR~Eer}nBRxMwHJf=YlOvX(6-L|(4uZrZJ-J)#b!>$AW%ZBhBC zUqXI?BFk6g;)B6iSG<#s+WKT{$=4IA7)8yk?sDZ{U1MpwNhcm0hMkC-Xj_k6w`L0r zv@w%EjTY+F!J6a%xzB)$I1;MAMxJ~~&I_Jg)f`~RN!Ye2gIs@<`XRx)U{VepPp(RR zX(R|TX@*v7d1q#*FO|%?nD~7<4<&7XNV{j4XHDo(w{;>U*d&*K2|DL?qDbQ((dk&1 za@A=@BvM$qt8ek^SG`qSL2W15ujV+m-U@a@rbSnGU7o@@{VNPV)5tt5>vhL)lyQDK zVStC$gbo=6!bX=2JOKTb0#cvJ1}JH!OWFn}vnMMSod}ylx2c4;s13!5oKO&ul(Pm3 zg0i|Bz5?Yp=k!i$0C9)MHvrVWs^sO1Q|TS0lNGyPJmGdz84B70iZf~C%WDewD@g{Rt%>EFbf<9Q~s1~tY)6p3V4FcN{Lz@ z>+d!iuyo>YFM~}BrWroqh`2RCHU1)Viv(Icemwga)khC0W9uF<6j6lhl}}4jvfxSy zN582n=o!SXN!)d#wlh(4 z?3D(X=-}_pqd%bR%W(~k5;GkeGz)7y9)eL}(AkfZg>s zv5YrF*{|CL0@~j6!dTm_V_w^AjniE8`_`~Ks1bI#4phbr6B}U#+jJV#Yks{_S09%*=tC9TE#`*%_O0+>hynGkKCGfAE)z)D;O0=H?xO| z+eB)=eQV!QIArQ5QP|&I8kg5L@k&ibG@M*DYaw`;=kpjQ%H7)`l@r2`2_YI{{nwpI zPBiqwREwzQo%>PyHEa29o-~4VMU`_G9YN9AUdwC?RA|f%d5W~EyP0Q>e|G%2YTP>? z4z4X**-5e`cI{L2Zl?N{ThZv++s&yU4RLi)+n=1_2?v>xH1#u~zN;&F3l=7GZjN*5 zA90_9M0M)E5-x=BDZUq8To?b;u9cSeAP~ahtfOuV$H~-uQ zB#yO4m!aGMA1nNuZZ=K8<>!^;(DhxiJI9$G%3@BDyU92~Y4urKFF-O~iMA=q`RWdm=gALAH(qx8#A~V;io{0D) zs6+IVadoM`EU4KFe@LxW^eq|K(M!g*+rOrdv*D#^0I1UIl|5|*a4NuBb@){Kyof{I zT`k-m@N++^Df_9t(u6-kg)bCLHl%FT3>9tFCB{*J>dB5HA8BA!g>Mc_k+|52hfQ>V|)HFBS9x_K`+8C-n zmiOM{B4qcf2nQzs)FXHB5rpGA&dvv^&#PRAHn9QN$dLB5G}OSG`>e)0yCj-MVx za4nRxO#Jf3FK_|HqnEW8Z|x7jeekN(e%U(YXxi*|@0W2mKL-8HpYCEc(P`dU7r zJ+9VkPuip60ne9d!0UacKKs-oZ%^`XIn?j@EC1gSL+eig-WfV|Ar!P)c304YaFS}I z+sHhIxGnL<4f|1B1<)%i7}2q*o;K}07}}TeZW57%hl1Z8+kjJOR8wNyq3h#tv!aTQNx%@o`~U~pXf^*0M*Ca+wQI#g zV++gkao5pMtKPTJ=$s#eqV7)mTjD2LLq1k-PIu{0dF(+@yD6b93`kU^GrW>yHrgT;>lib*fLa%^tJJCEh`(}y$`3@wvLtA^B04}uR zCw=tUXs}hEo7s7YSs53e!GwfraAy3T5icsB#Ao88!~K>*GFg`V^=pqW_OXn!R=qGXGyJYhuwa(VQ_)lum%T6BU+rHk=OQs!T!j&cgn`D2kJf7y8as{TaWc0=FN z&M=5q>c|W1hy)+^BLO}ATO&_!HL0kb^M(5>svU=fK4zAD!buUNQ{_9IvOu7S4At8?p%fV7I*n9Ci zw7|8e1lPy^Im&r?qid+5O|cTLrU%R6Z+^MzqIPVRe57Y}G|yica068hT^GWK0wFx< z=Z-%HnalyuMBw4m-2QAm4;~LTz>T8mBw?055(Qd}k-EFa$ zN+;%>++pju-T3aeoOB8Q={MKQ&uN9BbFbt2OmOl(sS^2=y!9@ei*n}CVG^o1)$r|p z%F*y!HD{^y=n4l!+n!S@F?24PHd#0ENDGAznV4Uh{ns0kL-_}tTwbTzbI~a@4YLZ> z!ejX2GfsruXA-V?9oL2}yW*fZiO2c^uk<)~iI7aIKcePEU}VP$D{Pmwcx^TMC3bXQ zzb^L5y){;$Y3j@o&i%gjO2u+Rwep3|3jLhL1kLD3Tc8a4 zw4gt^YAzpTFSm^_b3yen*+huXH647SZ`Dc~=n|%h$iKXQ1*b%dy-4aGdL^M$iBPl$ zUPfy&zVeVq{eUOx5$ZhXxF>6>*OY|M6I*%a4TXdaHb76B{7Rg75d3P4LiS!Z_G9Rs zb3{Ec^GrO_g>CtzOAZ(Bj2ijN*ZG>L4;MP!?H(J3|Ced2Tm$`44B+Rn-pTG@5wXV9 zr|%!=m$tzf+|6BFb zo}knhX-FFXllSlBNb)KC_$IZEp}nrsN(s1DQddbhwr*zb(9M0mn$aG4=feOg_KkU3 z)K3+>%*D%kkavz{^{zcpVx3PqW*rbzx zhzYL8`|86kZg$!v>4I{&LMLN+$PnXq6E#?krImr9y4tJsAF5!zmtD)+3pmSW2GWl3 z_?Z&yN@3v}}c3K~MY0!d_zN*V+J+XJ4{bhrrCsAWbsVq0=Nn zUe=oXneE(%45*aw`gyHqT$%tgJ=hzENp5VlwTE#uSov%?hHQAvck-)PLpZ2o_t0=Y zvZc=A)I7?HdaYc>h8e9Vi6(KT6_o$<%a5o*XErWuT_e10BDr2_ zXHxH(BywTF8=HVI3nN>9yT>3yX{=L@r^?ma@82qofo7rC@#hmQ(%_t$Oaz8Q_lS!nc{6Qa#WMa&1A7a$a;nCw$DC;yTdI@*Djt^4)y&*yeZ^0al&M8v{ zUGe^T`!zmlPa4Ru(-Ogfl=8|C%#9Z@mt;=O6srK)?UfE@$JXe~YR4Wo^~kL88@=+; zrjfIIj1#p~1Q{;W;1Fi<$}Kwqo7>_& zb?X!QI16?WGwW_m6GCHrF0iRca-IdxBnOu4-bT`z)rQ49`Xhf^945e2hm%z#`N4hG zKGb0n$6-Wm*m=_FY*+58)?@2m*)F#K}FjnkQdEVWQ*MJCKYd%fuINr z=L9eNyG*i`oYlje4bHKD#3-Fa;L*NdB0>oeBvIJ0By_BcUGBSqB~~iPX#N3j(m zo%DqlQLt~#TSYaOz5xalkUDYB0_iK+NMyRHP61EzE+)wVTBRdU2SxF!p-%y*Dd>Eg zww;XmkR*K>?WQQmRs72ayONy1-{Zi`OYXbHL2Cu-{l{71k7|aJ@8DT1JCQGY)MsQ` zKM|-eN@y=6{P5$ve`k9ZIFpK9xk%j5_wx?o6ZuTvJuI60n6%Bg_}Q+L!86p=UK`{pmgBX-DPoNPDEt4C5wTy(=2cugNTJ=*NnJ5`O34yKIc#=UIH}*w zh&Bov4|`=SR_$@WfBWvYG7f;}v&DlH2t)zvU88pgDMZ^G>w+Z7%HTn1nVV~&>n^vR zo>e5Xr+!FuAUtVT1t)(mHB9JHc1ASvOn5^l8D$VcVZ9rkJs;uZrwC-j zO!Dz4&=hMQRU<#-1SkiDn^a>|R^u1rPw*$6qcRh^ezD-nT8{T;rO~L|)SrC3o%>BY z5}l-4rNDq77Gs46UdomM{hk6$w6%_o}>ZtG`VL03oVEbh+vQv(xk;IXZ+TLrjp2)5f0 znfVGr|2+O@m#Y=>?l^Y3!b&rItU|x>!9DZLA+y5UfOTaliEB^3Q8;v`Hng+72G2ZP zEvl!YDn!HLdlcWxjF7PCmJVeldcLg2LJ zvKJz@-%`-@WMC}3j?w*X7CuCBw-2xap8w9_z?f&I%>(@sQ^qDlm=PFKoQi)ftcoZ( zsN#SN_}06BcWJ)**o7Vl=%z7R>u}08kM&p0ZF3%e+0VFWVYU2PW$4&52aWNKZz^oE^KY;Ic6rO7R5ql2kt=*FhpL z-%kIrCAZRHWB@I`-h7sy1TO@eebanrTHzm$axxKA3tIrlm7m&d_kzj_O&0!n4+%{b zySLh|IW#~74j!H-Y`r_nrl~hG6J66(szz3g;X@Q^ydS|$-%ISOT#*ShkzjNpCSU3i zLC9=|=Wf<@d0q=BXt1(s#y8STXM^N+Q(_Q-^cp!H@%{^8%&*+$3>;lns2Iqz@64YK z2^DOdg@`5tN}FVXfOgj9Cw_8iHgU>;WLW>p5}@6 zU|XkQoiqAeiTbM076*bn_ulqTmHy0sB@0p=5!QkiYmIWm@%s&>rM1MqR3*DCVuMS> z!9v&Y zY1tn$ZY$ZZ@TwlXI}Qd3ZUFKOjAz9UrJ*g<3;vF~vAe2G(F?Uv@?Gb0@*k+)&+)YQ z!FTKw&eM)^Stty~P2vr`kq0gtrVYC)(L=z{iHvQ^3@SLms3*N+Bf96K*F?jIO62RE z$OQPj_FRTjK814JViX<#e*2dhudoVRlX)qb683!|nhuVhlVx0#FN52QkLg}!Ho5X3 zYaQ|DiRc(?`A$mteT)l8JJ#F!rIUnAYcIgz5aBh_bKrES(rda@qtE6NGlKs9!Zm6f zf;R(MV+Ah@5WrbEPunJuHTCZY^*T6Rd_SWjPAF~(%z8h6Xz*uc;u%Y31qx$g&DMkP zHJo}v>|1^;Y=OJGsk?XXJgW|v9pU?e9_BJZSa}cQ6)zz0kW)1bRHmCZXZwL*yCt!$ zEf(K6WB0KV<@e8a60xn&{Ol(K0IX;7+c-(#kMQU)?@q+vOG@Bw*##P2;-n{2Gt|i9 zY&7&d{Kt!^_&X+wDsNuaafBTf zO?QdiU#U$l@NzrVznrvJNQ|yi^|zcLWFBk#TMV)NfS7qq)^3o)Z-f3@J~0%_(g=qn zSq~7a_qX!{aIJEg?Ih{wAyTg^`M7dZPxQ}c)(3r$xT*>vjWfyrvx%+o{5S(h;w}?G zwch##kmmkF%y|QKN;RsJ9u93R2piraOD!qz_|MRK*N@*fzt~vmnvmINP;rKEz%PeAK-mQ<0R7IlzIEL_`x3c zoul*pBfstByACnXz!JT7_@3vMl$=fZs$Y%~j%O}iK0s?~tfIxd{^0S3a8>fdRL!|i zv8nFEW_a{2!W!3n8dsm=iwc+_U$w<@MQc0ssH-NP_ytK*DbX-W<)^CxrMu(!UIcGz zd3)&(Zp<}8ueGUGjI$EN!Q+4%KT$vn*GW7wcahHyKG?ouy5!I{7fUNR;Hy2)kng)| zNP?s__KOl`*!FeH8ySBBoIo<;;D8%GZ$q%ZS&v_wqt512R&d-n8Ur4Y4YS$kfVe_A zw=RFJuZ;JO9jlC8j4G2;_T5l9{CNrSJgyReQ;)ya7grNrl%gMU2S{z@NuU*CK8oVJ zFql69uQ?~^MI;5YZ9X66&z`Ipq{HF!e#9VA*$G)bCR%rGt&H|rhYfIiIQ$A=8ajPC z8E*?+2ODXo+-lmtw4yRC%wv#UwVJ3BRu?hEnP#hnJMDfsLpNIe*l+my1N+08RaqT{ zG_}&;XWu7ot%~2N3Cgc8r+vdxZq6K4-@x}U(5&ql=xwdXxJpp&UapJY9=C&Yqrkb0X^bfEl}TL zB-v+1%~84gBJrUq(i;vNdNxSUnZG-&rCPx#ozQ1aj!&JW=ppc%xgc(s5V=UFghK_S zq-ZnhbG`3h47B(m639z-=zVJHzhQ+xUUrMQ`FSPhg6#tQ0gyjFJBcvjpb8#`o=k@7 zBjP@_Afbz%Rt7g)dX=J9txWi@XN>|p63z+WB>xs|dEAKcR*2{sE@tN$Y}Zo!RpS}? zXT%s)`!w!8F|~olf%-M`NjcLSTV^_Vsx=e{lH<{efUGGeY4rJDr3wqf^DKe*dnB5c zI{0TRd8Ah}r90<3u++K*gC04J@5D;Msp`vx97Oni7nweQ=7TtI1Xf^P{|t_5{Gk%B zp_T{Vq27slEtHF1*|ld-iyg!2J;E{qARZ0Jd-ad1n6v^WF2m#DP*C`L#NI%1K(ep& zN9mPh>3sefz|ZVJgD+1)9Nn=J50IfZKSg^1u69P2h_usIq{iq|C@BBapkGo6NYae> zGe18-@d18!Cb84I_0Q=smYp>akCx_r7`qW{bgK^DxyIfdv-8X>OGn8E$CiFqR_5_l zT+`}}RhVe5pm%ul%ty9N^XSf3mPEq7zX3*Y3)MJOL%nNnJ+Fx z4J&lsB^FYz7@O|_m+|7IKG@`3NO!HftYHlf+~5i>NyWS>Y25L@lWIl#+uqDzpGs@H zRo0J!VkxZ)ybM^;gzf84rFON>lyKjAqz_?Jg!;HIgOiC^v-zaqj)4myKD=?s#h((+ z2)N)-#=rT8yRmUkN0l1KI}u%+3OMK}pifTOi7-dtFrfAEI`4Ab!PR)cnWO*C#epOL zYGco}@u>Xf#|pvBV8A}ZT&W*dh)A{P+l@_@c1)E|X)JluQeAY{+aeBcxc_|9vfV(l zmC{ID17tHs85m6)RI;H2;%%zqBdLE6q?M>N<`O*W*s1y@0Nxma3Wk?-^q64z#i>;Z zG@<9v5z(~1&(Do2tZBr8BcklY$8|kt=dXqJ#Ac5@VoK^Zg^sUC=X9n$N4hu%k0$JB z^Dr(PPl53hZO+V6@GG?^qB+MQ#aV36svhH@7M~`80&kWkSF^RZv(niWhsg?`dgTm| zTkNApdxza0>$UV-Lk3NVfTbs%C-WuI**MmG7lE$V=OUf=Cqo8a?Il@7yG7l|O*K--%w{!z|LbmGDfMg2Z<(hP z!B&_>vKc$+YC(Zpt9oYYG&+d?6dA<*lqSu+Jx4oEEwwbbEKTtMYDL=A5Y~UKGxRNq z)w=8nhKeCwVTk6SGu!cc?d)c|yA1pHZZcm>sxi@)l9IpWafJ3?qSj-ejPg!u$67-5pPkFjI)x`Uai z4!P#MM=l&UG2%{V{306m7?$zX2~Giq=Xu1*)g`E(N+kFA`U9N_R85R+bT+%e8*
cpfLscmVai=8->W&I*A|uN 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 - - - - - - CJsonPreprocessor — The Json Preprocessor documentation - - - - - - - - - - - - - - - - - -
-
-
- - -
- -

Source code for CJsonPreprocessor

-#  Copyright 2020-2022 Robert Bosch Car Multimedia GmbH
-#
-#  Licensed under the Apache License, Version 2.0 (the "License");
-#  you may not use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-#################################################################################
-#
-# File: JsonPreprocessor.py
-# 
-# This module uses to handle connfiguration file in json format (import another 
-# json file to the json file).
-# Allows user adds comment into json config file
-#
-# History:
-# 
-# 2021-01:
-#    - Initially created by Mai Dinh Nam Son (RBVH/ECM11)
-#
-# 2021-02-08:
-#   - Use object_pairs_hook of json.load() to process [import] node(s).
-#     Allow to use multiple [import] node(s) at same level.
-#   - Avoid cyclic import
-#
-# 2021-02-17:
-#   - Replace method to load json data json.load() by json.loads() 
-#     to load string data after removing comment(s)
-#
-# 2021-02-18:
-#   - Add parameter syntax to support Python types if required:
-#     None  => null
-#     True  => true
-#     False => false
-#
-# 2021-03-29:
-#   - Adds update configuration using json file
-#   - Handles nested parameter in json config file
-#################################################################################
-
-
-import os
-import json
-import re
-
-
[docs]class CSyntaxType(): - python = "python" - json = "json"
- -NUMBER_RE = re.compile( - r'(-?(?:0|[1-9]\d*))(\.\d+)?([eE][-+]?\d+)?', - (re.VERBOSE | re.MULTILINE | re.DOTALL)) - -
[docs]class CPythonJSONDecoder(json.JSONDecoder): - """ Add below python values when scanning json data - - +---------------+-------------------+ - | True | True | - +---------------+-------------------+ - | False | False | - +---------------+-------------------+ - | None | None | - +---------------+-------------------+ - """ - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.scan_once = self.custom_scan_once - - def _custom_scan_once(self, string, idx): - try: - nextchar = string[idx] - except IndexError: - raise StopIteration(idx) from None - - if nextchar == '"': - return self.parse_string(string, idx + 1, self.strict) - elif nextchar == '{': - return self.parse_object((string, idx + 1), self.strict, - self._custom_scan_once, self.object_hook, self.object_pairs_hook, self.memo) - elif nextchar == '[': - return self.parse_array((string, idx + 1), self._custom_scan_once) - elif nextchar == 'n' and string[idx:idx + 4] == 'null': - return None, idx + 4 - elif nextchar == 't' and string[idx:idx + 4] == 'true': - return True, idx + 4 - elif nextchar == 'f' and string[idx:idx + 5] == 'false': - return False, idx + 5 - elif nextchar == 'N' and string[idx:idx + 4] == 'None': - return None, idx + 4 - elif nextchar == 'T' and string[idx:idx + 4] == 'True': - return True, idx + 4 - elif nextchar == 'F' and string[idx:idx + 5] == 'False': - return False, idx + 5 - - m = NUMBER_RE.match(string, idx) - if m is not None: - integer, frac, exp = m.groups() - if frac or exp: - res = self.parse_float(integer + (frac or '') + (exp or '')) - else: - res = self.parse_int(integer) - return res, m.end() - elif nextchar == 'N' and string[idx:idx + 3] == 'NaN': - return self.parse_constant('NaN'), idx + 3 - elif nextchar == 'I' and string[idx:idx + 8] == 'Infinity': - return self.parse_constant('Infinity'), idx + 8 - elif nextchar == '-' and string[idx:idx + 9] == '-Infinity': - return self.parse_constant('-Infinity'), idx + 9 - else: - raise StopIteration(idx) - -
[docs] def custom_scan_once(self, string, idx): - try: - return self._custom_scan_once(string, idx) - finally: - self.memo.clear()
- -
[docs]class CJsonPreprocessor(): - ''' - CJsonPreprocessor helps to handle configuration file as json format: - - Allow comment within json file - - Allow import json file within json file - ''' - def __init__(self, syntax=CSyntaxType.json, currentCfg={}): - self.lImportedFiles = [] - self.recursive_level = 0 - self.syntax = syntax - self.currentCfg = currentCfg - self.lUpdatedParams = [] - - - ''' - Method: __processImportFiles this is custom decorder of object_pairs_hook function. - This method helps to import json file which is provided in '[import]' keyword into current json file. - Returns: - Dictionary is parsed from json file. - ''' - def __processImportFiles(self, input_data): - out_dict = {} - for key, value in input_data: - if re.match('^\s*\[\s*import\s*\]\s*', key.lower()): - abs_path_file = os.path.abspath(value) - - # Use recursive_level and lImportedFiles to avoid cyclic import - self.recursive_level = self.recursive_level + 1 # increase recursive level - # length of lImportedFiles should equal to recursive_level - self.lImportedFiles = self.lImportedFiles[:self.recursive_level] - if abs_path_file in self.lImportedFiles: - raise Exception('Cyclic imported json file \'%s\'' %str(abs_path_file)) - - oJsonImport = self.jsonLoad(value, masterFile=False) - out_dict.update(oJsonImport) - self.recursive_level = self.recursive_level - 1 # descrease recursive level - else: - out_dict[key] = value - return out_dict - - ''' - Method: __removeComments loads json config file which allows comments inside - Args: - jsonFile: string - Returns: - lJsonData: list, list of string data from jsonFile after removing comment(s). - ''' - def __removeComments(self, jsonFile): - jsonPath = '' - if '/' in jsonFile: - for item in jsonFile.split('/')[:-1]: - jsonPath += item + '/' - else: - for item in jsonFile.split('\\')[:-1]: - jsonPath += item + '\\' - - ''' - Removes comment parts in json file then store in temporary json file - ''' - lJsonData = [] - - with open(jsonFile) as fr: - for line in fr: - if re.match('^\s*//', line): - continue - elif '//' in line: - reEx1 = re.search("(\s*{*\s*\'.+\')\s*:\s*(\'.+\'\s*,*)*\s*(.*)", line) - if reEx1 is None: - reEx1 = re.search("(\s*{*\s*\".+\")\s*:\s*(\".+\"\s*,*)*\s*(.*)", line) - if reEx1 is None: - line = re.sub('//.*', '', line) - elif reEx1.group(1) is not None and reEx1.group(2) is not None: - line = reEx1.group(1) + ": " + reEx1.group(2) if reEx1.group(3) is None else \ - reEx1.group(1) + ": " + reEx1.group(2) + re.sub('//.*', '', reEx1.group(3)) - else: - reEx2 = re.search("(\s*{*\s*\'.+\')\s*:\s*(.+,*)\s*//\s*.*", line) - if reEx2 is None: - reEx2 = re.search("(\s*{*\s*\".+\")\s*:\s*(.+,*)\s*(//\s*.*)*", line) - if reEx2 is not None: - line = reEx2.group(1) + ": " + re.sub('//.*', '', reEx2.group(2)) - - lJsonData.append(line) - return lJsonData, jsonPath - - ''' - private __nestedParamHandler: This method handles the nested variable in param names or value - in updated json config file. - Args: - sInputStr: string - param name or value which contains nested variable - Returns: - sStrHandled: string - ''' - def __nestedParamHandler(self, sInputStr): - - #globals().update(currentCfg) - referVars = re.findall('(\${\s*.*?\s*})', sInputStr) - if len(referVars) > 1: - sUpdateVar = referVars[0] - referVars = referVars[1:] - sInputStr = re.sub('\\' + sUpdateVar, '', sInputStr, count=1) - for var in referVars[::-1]: - pattern = '(\\' + var + '\s*\[\s*.*?\s*\])' - variable = re.findall(pattern, sInputStr) - if variable == []: - sExec = "value = " + re.search('^\s*\${(\s*.*?)}', var).group(1) - try: - ldict = {} - exec(sExec, globals(), ldict) - tmpValue = ldict['value'] - except: - raise Exception('The variable %s is not available' % (var)) - sInputStr = re.sub('\\' + var, tmpValue, sInputStr) if isinstance(tmpValue, str) else \ - re.sub('\\' + var, str(tmpValue), sInputStr) - continue - while variable != []: - fullVariable = variable[0] - pattern = pattern[:-1] + '\[\s*.*?\s*\])' - variable = re.findall(pattern, sInputStr) - if variable != []: - fullVariable = variable[0] - sExec = "value = " + re.sub('\${\s*(.*?)\s*}', '\\1', fullVariable) - try: - ldict = {} - exec(sExec, globals(), ldict) - tmpValue = ldict['value'] - except: - raise Exception('The variable %s is not available!!!' % (fullVariable)) - pattern = re.sub('\[', '\\[', fullVariable) - pattern = re.sub('\]', '\\]', pattern) - sInputStr = re.sub('\\' + pattern, '\'' + tmpValue + '\'', sInputStr) if isinstance(tmpValue, str) else \ - re.sub('\\' + pattern, '\'' + str(tmpValue) + '\'', sInputStr) - sStrHandled = sUpdateVar + sInputStr - return sStrHandled - - else: - pattern = '(\\' + referVars[0] + '\s*\[\s*.*?\s*\])' - variable = re.findall(pattern, sInputStr) - if variable == []: - sStrHandled = referVars[0] - return sStrHandled - else: - fullVariable = variable[0] - while variable != []: - pattern = pattern[:-1] + '\[\s*.*?\s*\])' - variable = re.findall(pattern, sInputStr) - if variable != []: - fullVariable = variable[0] - sStrHandled = fullVariable - return sStrHandled - - ''' - private __updateAndReplaceNestedParam: this method replaces all nested params in key and value of Json object - Args: - oJson: dict - currentCfg: dict - Returns: - oJsonOut: dict - ''' - def __updateAndReplaceNestedParam(self, oJson, recursive=False): - - if bool(self.currentCfg) and not recursive: - for k, v in self.currentCfg.items(): - globals().update({k:v}) - - tmpJson = {} - bNested = False - for k, v in oJson.items(): - if re.match('^\s*\${\s*', k.lower()): - keyAfterProcessed = self.__nestedParamHandler(k) - k = re.sub('^\s*\${\s*(.*?)\s*}', '\\1', keyAfterProcessed) - bNested = True - - if isinstance(v, dict): - v = self.__updateAndReplaceNestedParam(v, recursive=True) - if bNested: - if '[' in k: - sExec = k + " = \'" + v + "\'" if isinstance(v, str) else k + " = " + str(v) - try: - exec(sExec, globals()) - except: - raise Exception("Could not set variable \'%s\' with value \'%s\'" %(k, v)) - else: - tmpJson[k] = v - bNested = False - else: - tmpJson[k] = v - - elif isinstance(v, str) and re.match('^.*\s*\${\s*', v.lower()): - - valueAfterProcessed = self.__nestedParamHandler(v) - tmpValueAfterProcessed = re.sub('\\${\s*(.*?)\s*}', '\\1', valueAfterProcessed) - sExec = "value = " + tmpValueAfterProcessed if isinstance(tmpValueAfterProcessed, str) else \ - "value = " + str(tmpValueAfterProcessed) - - try: - ldict = {} - exec(sExec, globals(), ldict) - v = ldict['value'] if v.strip()==valueAfterProcessed else \ - v.replace(valueAfterProcessed, str(ldict['value'])) - except: - raise Exception('The variable %s is not available!!!' % (tmpValueAfterProcessed)) - - if bNested: - if '[' in k: - sExec = k + " = \'" + v + "\'" if isinstance(v, str) else k + " = " + str(v) - try: - exec(sExec, globals()) - except: - raise Exception("Could not set variable \'%s\' with value \'%s\'" %(k, v)) - else: - tmpJson[k] = v - bNested = False - else: - tmpJson[k] = v - - else: - if bNested: - if '[' in k: - sExec = k + " = \'" + v + "\'" if isinstance(v, str) else k + " = " + str(v) - try: - exec(sExec, globals()) - except: - raise Exception("Could not set variable \'%s\' with value \'%s\'" %(k, v)) - else: - tmpJson[k] = v - - bNested = False - - oJson.update(tmpJson) - - return oJson - -
[docs] def jsonLoad(self, jFile, masterFile=True): - ''' - Method: jsonLoad loads the json file then parses to dict object - - Args: - jFile: string, json file input - Returns: - oJson: dict - ''' - try: - lJsonData, jsonPath = self.__removeComments(jFile) - except Exception as reason: - raise Exception("Could not read json configuration file %s due to: %s \n\ - Please input 'utf-8' format in Json configuration file only" %(jFile, reason)) - - currentDir = os.getcwd() - self.lImportedFiles.append(os.path.abspath(jFile)) - os.chdir(jsonPath) - CJSONDecoder = None - if self.syntax != CSyntaxType.json: - if self.syntax == CSyntaxType.python: - CJSONDecoder = CPythonJSONDecoder - else: - raise Exception('Provided syntax \'%s\' is not supported.' %self.syntax) - - try: - oJson = json.loads("\n".join(lJsonData), - cls=CJSONDecoder , - object_pairs_hook=self.__processImportFiles) - except Exception as error: - raise Exception("JSON configuration file '%s': %s" %(jFile, error)) - - os.chdir(currentDir) - if masterFile: - for k, v in oJson.items(): - globals().update({k:v}) - oJson = self.__updateAndReplaceNestedParam(oJson) - # oJson['JsonPath'] = jsonPath # is JsonPath required? - - return oJson
-
- -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/doc/_build/html/_modules/index.html b/doc/_build/html/_modules/index.html deleted file mode 100644 index 96a7ee01..00000000 --- a/doc/_build/html/_modules/index.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - Overview: module code — The Json Preprocessor documentation - - - - - - - - - - - - - - - - - -
-
-
- - -
- -

All modules for which code is available

- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/doc/_build/html/_sources/CJsonPreprocessor.rst.txt b/doc/_build/html/_sources/CJsonPreprocessor.rst.txt deleted file mode 100644 index 63f2fb1a..00000000 --- a/doc/_build/html/_sources/CJsonPreprocessor.rst.txt +++ /dev/null @@ -1,25 +0,0 @@ -.. Copyright 2020-2022 Robert Bosch Car Multimedia GmbH - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -JsonPreprocessor package -======================== - - -Module contents ---------------- - -.. automodule:: CJsonPreprocessor - :members: - :undoc-members: - :show-inheritance: diff --git a/doc/_build/html/_sources/additional_doc/feature_documentation.rst.txt b/doc/_build/html/_sources/additional_doc/feature_documentation.rst.txt deleted file mode 100644 index 711a3465..00000000 --- a/doc/_build/html/_sources/additional_doc/feature_documentation.rst.txt +++ /dev/null @@ -1,420 +0,0 @@ -.. Copyright 2020-2022 Robert Bosch Car Multimedia GmbH - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -Json Preprocessor's Feature Documentation -========================================= - -Introduction: -------------- - -.. image:: /images/python3-jsonpreprocessor.png - -The JsonPreprocessor is the python3 package which allows programmer to handle some -additional features in json file such as comment, import, override, etc for -configuring purpose. The json file containing comment, import,... will be handled -by JsonPreprocessor package then returned the final dictionary object for python -program. - -New features -~~~~~~~~~~~~ - -`Adding comments to Json file`_ - -`Import the contents from other json files`_ - -`Overwrite existing and add new parameters`_ - -`Nested parameters`_ - -Features in details -------------------- - -Adding comments to Json file -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The JsonPreprocessor allows adding comments into json file, a comment could be -added follow **"//"**. - -This is required becuase some big projects require a large json configuration file -which contains a huge number of configuration parameters for the different features. -Therefore, having the need of adding comments into json file to clarify the different -configuration parameters. - -**Note:** This package is not allow commented a block of json code, each comment -must be added with **"//"**. - -**Example:** - -.. code-block:: - - //***************************************************************************** - // Author: ROBFW-AIO Team - // - // This file defines all common global parameters and will be included to all - // test config files - //***************************************************************************** - { - "Project": "G3g", - "WelcomeString": "Hello... ROBFW is running now!", - // Version control information. - "version": { - "majorversion": "0", - "minorversion": "1", - "patchversion": "1" - }, - "params": { - // Global parameters - "global": { - "gGlobalIntParam" : 1, - "gGlobalFloatParam" : 1.332, // This parameter is used to configure for .... - "gGlobalString" : "This is a string", - "gGlobalStructure": { - "general": "general" - } - } - }, - "preprocessor": { - "definitions": { - // FEATURE switches - "gPreprolIntParam" : 1, - "gPreproFloatParam" : 1.332, - // The parameter for feature ABC - "gPreproString" : "This is a string", - "gPreproStructure": { - "general": "general" - } - } - }, - "TargetName" : "gen3flex@dlt" - } - -Import the contents from other json files -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This import feature allows user merges the content of other json files into the -json file, it also allows the nested importing means we can use import feature in -the imported files. - -The import feature helps user distinguish the configuration parameters of each -functions, purposes, variants, and so forth into the separate json files. Therefore, -we can easy to understand and manage the configuration parameters of big project. - -**Example:** - -Suppose we have the json file ``params_global.json`` with the content: - -.. code-block:: - - //***************************************************************************** - // Author: ROBFW-AIO Team - // - // This file defines all common global parameters and will be included to all - // test config files - //***************************************************************************** - // - // This is to distinguish the different types of resets - { - "gGlobalIntParam" : 1, - - "gGlobalFloatParam" : 1.332, // This parameter is used to configure for .... - - "gGlobalString" : "This is a string", - - "gGlobalStructure": { - "general": "general" - } - } - -And other json file ``preprocessor_definitions.json`` with content: - -.. code-block:: - - //***************************************************************************** - // Author: ROBFW-AIO Team - // - // This file defines all common global parameters and will be included to all - // test config files - //***************************************************************************** - { - "gPreprolIntParam" : 1, - - "gPreproFloatParam" : 1.332, - // The parameter for feature ABC - "gPreproString" : "This is a string", - - "gPreproStructure": { - "general": "general" - } - } - -Then we can import these 2 files above to the json file ``config.json`` with content: - -.. code-block:: - - //***************************************************************************** - // Author: ROBFW-AIO Team - // - // This file defines all common global parameters and will be included to all - // test config files - //***************************************************************************** - { - "Project": "G3g", - "WelcomeString": "Hello... ROBFW is running now!", - // Version control information. - "version": { - "majorversion": "0", - "minorversion": "1", - "patchversion": "1" - }, - "params": { - // Global parameters - "global": { - "[import]": "/params_global.json" - } - }, - "preprocessor": { - "definitions": { - // FEATURE switches - "[import]": "/preprocessor_definitions.json" - } - }, - "TargetName" : "gen3flex@dlt" - } - -The ``config.json`` file is handled by JsonPreprocessor package, then return the dictionary object for a program like below: - -.. code-block:: - - { - "Project": "G3g", - "WelcomeString": "Hello... ROBFW is running now!", - "version": { - "majorversion": "0", - "minorversion": "1", - "patchversion": "1" - }, - "params": { - "global": { - "gGlobalIntParam" : 1, - "gGlobalFloatParam" : 1.332, - "gGlobalString" : "This is a string", - "gGlobalStructure": { - "general": "general" - } - } - }, - "preprocessor": { - "definitions": { - "gPreprolIntParam" : 1, - "gPreproFloatParam" : 1.332, - "gPreproString" : "This is a string", - "gPreproStructure": { - "general": "general" - } - } - }, - "TargetName" : "gen3flex@dlt" - } - -Overwrite existing and add new parameters -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This package also provides user ability to overwrite or update as well as add new -parameters. User can update parameters which are already declared and add new parameters -or new element into existing parameters. The below example will show the way to do -these features. - -In case we have many different variants, and each varaint requires a different value -assigned to the parameter. This feature could help us update new value for existen -parameters, it also supports to add new parameters to existen configuation object. - -**Example:** - -Suppose we have the json file ``params_global.json`` with the content: - -.. code-block:: - - { - "gGlobalIntParam" : 1, - - "gGlobalFloatParam" : 1.332, // This parameter is used to configure for .... - - "gGlobalString" : "This is a string", - - "gGlobalStructure": { - "general": "general" - } - } - -Then we import ``params_global.json`` to json file ``config.json`` with content: - -.. code-block:: - - { - "Project": "G3g", - "WelcomeString": "Hello... ROBFW is running now!", - // Version control information. - "version": { - "majorversion": "0", - "minorversion": "1", - "patchversion": "1" - }, - "params": { - // Global parameters - "global": { - "[import]": "/params_global.json" - } - }, - "TargetName" : "gen3flex@dlt", - // Overwrite parameters - "${params}['global']['gGlobalFloatParam']": 9.999, - "${version}['patchversion']": "2", - "${params}['global']['gGlobalString']": "This is the new value for the already existing parameter.", - // Add new parameters - "${newParam}": { - "abc": 9, - "xyz": "new param" - }, - "${params}['global']['gGlobalStructure']['newGlobalParam']": 123 - } - -The ``config.json`` file is handled by JsonPreprocessor package, then return the dictionary object for a program like below: - -.. code-block:: - - { - "Project": "G3g", - "WelcomeString": "Hello... ROBFW is running now!", - "version": { - "majorversion": "0", - "minorversion": "1", - "patchversion": "2" - }, - "params": { - "global": { - "gGlobalIntParam" : 1, - "gGlobalFloatParam" : 9.999, - "gGlobalString" : "This is the new value for the already existing parameter.", - "gGlobalStructure": { - "general": "general", - "newGlobalParam": 123 - } - } - }, - "TargetName": "gen3flex@dlt", - "newParam": { - "abc": 9, - "xyz": "new param" - } - } - -Nested parameters -~~~~~~~~~~~~~~~~~ - -With JsonPreprocessor package, user can also use nested parameters as example below: - -**Example:** - -Suppose we have the json file ``config.json`` with the content: - -.. code-block:: - - { - "Project": "G3g", - "WelcomeString": "Hello... ROBFW is running now!", - // Version control information. - "version": { - "majorversion": "0", - "minorversion": "1", - "patchversion": "1" - }, - "params": { - // Global parameters - "global": { - "gGlobalIntParam" : 1, - "gGlobalFloatParam" : 1.332, // This parameter is used to configure for .... - "gGlobalString" : "This is a string", - "gGlobalStructure": { - "general": "general" - } - } - }, - "preprocessor": { - "definitions": { - "gPreprolIntParam" : 1, - "gPreproFloatParam" : 9.664, - "ABC": "checkABC", - "gPreproString" : "This is a string", - "gPreproStructure": { - "general": "general" - } - } - }, - "TargetName" : "gen3flex@dlt", - // Nested parameter - "${params}['global'][${preprocessor}['definitions']['ABC']]": true, - "${params}['global']['gGlobalFloatParam']": "${preprocessor}['definitions']['gPreproFloatParam']" - } - -The ``config.json`` file is handled by JsonPreprocessor package, then return the dictionary object for a program like below: - -.. code-block:: - - { - "Project": "G3g", - "WelcomeString": "Hello... ROBFW is running now!", - "version": { - "majorversion": "0", - "minorversion": "1", - "patchversion": "1" - }, - "params": { - "global": { - "gGlobalIntParam" : 1, - "gGlobalFloatParam" : 9.664, - "gGlobalString" : "This is a string", - "gGlobalStructure": { - "general": "general" - }, - "checkABC": true - } - }, - "preprocessor": { - "definitions": { - "gPreprolIntParam" : 1, - "gPreproFloatParam" : 9.664, - "ABC": "checkABC", - "gPreproString" : "This is a string", - "gPreproStructure": { - "general": "general" - } - } - }, - "TargetName" : "gen3flex@dlt" - } - -Feedback --------- - -To give us a feedback, you can send an email to `Thomas Pollerspöck `_ or -`RBVH-ECM-Automation_Test_Framework-Associates `_ - -In case you want to report a bug or request any interesting feature, please don't hesitate to rasie a ticket on -`our Jira `_ - -References ----------- - -For more information please refer to our `Bosch Connect Community `_ - diff --git a/doc/_build/html/_sources/index.rst.txt b/doc/_build/html/_sources/index.rst.txt deleted file mode 100644 index e847ced9..00000000 --- a/doc/_build/html/_sources/index.rst.txt +++ /dev/null @@ -1,31 +0,0 @@ -.. Copyright 2020-2022 Robert Bosch Car Multimedia GmbH - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -.. The Json Preprocessor documentation master file, created by - sphinx-quickstart on Tue Jun 22 10:06:14 2021. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - - -Json Preprocessor's API! -======================== - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - - ./additional_doc/feature_documentation.rst - ./CJsonPreprocessor.rst - - diff --git a/doc/_build/html/_static/alabaster.css b/doc/_build/html/_static/alabaster.css deleted file mode 100644 index 0eddaeb0..00000000 --- a/doc/_build/html/_static/alabaster.css +++ /dev/null @@ -1,701 +0,0 @@ -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: Georgia, serif; - font-size: 17px; - background-color: #fff; - color: #000; - margin: 0; - padding: 0; -} - - -div.document { - width: 940px; - margin: 30px auto 0 auto; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 220px; -} - -div.sphinxsidebar { - width: 220px; - font-size: 14px; - line-height: 1.5; -} - -hr { - border: 1px solid #B1B4B6; -} - -div.body { - background-color: #fff; - color: #3E4349; - padding: 0 30px 0 30px; -} - -div.body > .section { - text-align: left; -} - -div.footer { - width: 940px; - margin: 20px auto 30px auto; - font-size: 14px; - color: #888; - text-align: right; -} - -div.footer a { - color: #888; -} - -p.caption { - font-family: inherit; - font-size: inherit; -} - - -div.relations { - display: none; -} - - -div.sphinxsidebar a { - color: #444; - text-decoration: none; - border-bottom: 1px dotted #999; -} - -div.sphinxsidebar a:hover { - border-bottom: 1px solid #999; -} - -div.sphinxsidebarwrapper { - padding: 18px 10px; -} - -div.sphinxsidebarwrapper p.logo { - padding: 0; - margin: -10px 0 0 0px; - text-align: center; -} - -div.sphinxsidebarwrapper h1.logo { - margin-top: -10px; - text-align: center; - margin-bottom: 5px; - text-align: left; -} - -div.sphinxsidebarwrapper h1.logo-name { - margin-top: 0px; -} - -div.sphinxsidebarwrapper p.blurb { - margin-top: 0; - font-style: normal; -} - -div.sphinxsidebar h3, -div.sphinxsidebar h4 { - font-family: Georgia, serif; - color: #444; - font-size: 24px; - font-weight: normal; - margin: 0 0 5px 0; - padding: 0; -} - -div.sphinxsidebar h4 { - font-size: 20px; -} - -div.sphinxsidebar h3 a { - color: #444; -} - -div.sphinxsidebar p.logo a, -div.sphinxsidebar h3 a, -div.sphinxsidebar p.logo a:hover, -div.sphinxsidebar h3 a:hover { - border: none; -} - -div.sphinxsidebar p { - color: #555; - margin: 10px 0; -} - -div.sphinxsidebar ul { - margin: 10px 0; - padding: 0; - color: #000; -} - -div.sphinxsidebar ul li.toctree-l1 > a { - font-size: 120%; -} - -div.sphinxsidebar ul li.toctree-l2 > a { - font-size: 110%; -} - -div.sphinxsidebar input { - border: 1px solid #CCC; - font-family: Georgia, serif; - font-size: 1em; -} - -div.sphinxsidebar hr { - border: none; - height: 1px; - color: #AAA; - background: #AAA; - - text-align: left; - margin-left: 0; - width: 50%; -} - -div.sphinxsidebar .badge { - border-bottom: none; -} - -div.sphinxsidebar .badge:hover { - border-bottom: none; -} - -/* To address an issue with donation coming after search */ -div.sphinxsidebar h3.donation { - margin-top: 10px; -} - -/* -- body styles ----------------------------------------------------------- */ - -a { - color: #004B6B; - text-decoration: underline; -} - -a:hover { - color: #6D4100; - text-decoration: underline; -} - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: Georgia, serif; - font-weight: normal; - margin: 30px 0px 10px 0px; - padding: 0; -} - -div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } -div.body h2 { font-size: 180%; } -div.body h3 { font-size: 150%; } -div.body h4 { font-size: 130%; } -div.body h5 { font-size: 100%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: #DDD; - padding: 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - color: #444; - background: #EAEAEA; -} - -div.body p, div.body dd, div.body li { - line-height: 1.4em; -} - -div.admonition { - margin: 20px 0px; - padding: 10px 30px; - background-color: #EEE; - border: 1px solid #CCC; -} - -div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { - background-color: #FBFBFB; - border-bottom: 1px solid #fafafa; -} - -div.admonition p.admonition-title { - font-family: Georgia, serif; - font-weight: normal; - font-size: 24px; - margin: 0 0 10px 0; - padding: 0; - line-height: 1; -} - -div.admonition p.last { - margin-bottom: 0; -} - -div.highlight { - background-color: #fff; -} - -dt:target, .highlight { - background: #FAF3E8; -} - -div.warning { - background-color: #FCC; - border: 1px solid #FAA; -} - -div.danger { - background-color: #FCC; - border: 1px solid #FAA; - -moz-box-shadow: 2px 2px 4px #D52C2C; - -webkit-box-shadow: 2px 2px 4px #D52C2C; - box-shadow: 2px 2px 4px #D52C2C; -} - -div.error { - background-color: #FCC; - border: 1px solid #FAA; - -moz-box-shadow: 2px 2px 4px #D52C2C; - -webkit-box-shadow: 2px 2px 4px #D52C2C; - box-shadow: 2px 2px 4px #D52C2C; -} - -div.caution { - background-color: #FCC; - border: 1px solid #FAA; -} - -div.attention { - background-color: #FCC; - border: 1px solid #FAA; -} - -div.important { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.note { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.tip { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.hint { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.seealso { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.topic { - background-color: #EEE; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre, tt, code { - font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; - font-size: 0.9em; -} - -.hll { - background-color: #FFC; - margin: 0 -12px; - padding: 0 12px; - display: block; -} - -img.screenshot { -} - -tt.descname, tt.descclassname, code.descname, code.descclassname { - font-size: 0.95em; -} - -tt.descname, code.descname { - padding-right: 0.08em; -} - -img.screenshot { - -moz-box-shadow: 2px 2px 4px #EEE; - -webkit-box-shadow: 2px 2px 4px #EEE; - box-shadow: 2px 2px 4px #EEE; -} - -table.docutils { - border: 1px solid #888; - -moz-box-shadow: 2px 2px 4px #EEE; - -webkit-box-shadow: 2px 2px 4px #EEE; - box-shadow: 2px 2px 4px #EEE; -} - -table.docutils td, table.docutils th { - border: 1px solid #888; - padding: 0.25em 0.7em; -} - -table.field-list, table.footnote { - border: none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -table.footnote { - margin: 15px 0; - width: 100%; - border: 1px solid #EEE; - background: #FDFDFD; - font-size: 0.9em; -} - -table.footnote + table.footnote { - margin-top: -15px; - border-top: none; -} - -table.field-list th { - padding: 0 0.8em 0 0; -} - -table.field-list td { - padding: 0; -} - -table.field-list p { - margin-bottom: 0.8em; -} - -/* Cloned from - * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 - */ -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -table.footnote td.label { - width: .1px; - padding: 0.3em 0 0.3em 0.5em; -} - -table.footnote td { - padding: 0.3em 0.5em; -} - -dl { - margin: 0; - padding: 0; -} - -dl dd { - margin-left: 30px; -} - -blockquote { - margin: 0 0 0 30px; - padding: 0; -} - -ul, ol { - /* Matches the 30px from the narrow-screen "li > ul" selector below */ - margin: 10px 0 10px 30px; - padding: 0; -} - -pre { - background: #EEE; - padding: 7px 30px; - margin: 15px 0px; - line-height: 1.3em; -} - -div.viewcode-block:target { - background: #ffd; -} - -dl pre, blockquote pre, li pre { - margin-left: 0; - padding-left: 30px; -} - -tt, code { - background-color: #ecf0f3; - color: #222; - /* padding: 1px 2px; */ -} - -tt.xref, code.xref, a tt { - background-color: #FBFBFB; - border-bottom: 1px solid #fff; -} - -a.reference { - text-decoration: none; - border-bottom: 1px dotted #004B6B; -} - -/* Don't put an underline on images */ -a.image-reference, a.image-reference:hover { - border-bottom: none; -} - -a.reference:hover { - border-bottom: 1px solid #6D4100; -} - -a.footnote-reference { - text-decoration: none; - font-size: 0.7em; - vertical-align: top; - border-bottom: 1px dotted #004B6B; -} - -a.footnote-reference:hover { - border-bottom: 1px solid #6D4100; -} - -a:hover tt, a:hover code { - background: #EEE; -} - - -@media screen and (max-width: 870px) { - - div.sphinxsidebar { - display: none; - } - - div.document { - width: 100%; - - } - - div.documentwrapper { - margin-left: 0; - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - } - - div.bodywrapper { - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - margin-left: 0; - } - - ul { - margin-left: 0; - } - - li > ul { - /* Matches the 30px from the "ul, ol" selector above */ - margin-left: 30px; - } - - .document { - width: auto; - } - - .footer { - width: auto; - } - - .bodywrapper { - margin: 0; - } - - .footer { - width: auto; - } - - .github { - display: none; - } - - - -} - - - -@media screen and (max-width: 875px) { - - body { - margin: 0; - padding: 20px 30px; - } - - div.documentwrapper { - float: none; - background: #fff; - } - - div.sphinxsidebar { - display: block; - float: none; - width: 102.5%; - margin: 50px -30px -20px -30px; - padding: 10px 20px; - background: #333; - color: #FFF; - } - - div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, - div.sphinxsidebar h3 a { - color: #fff; - } - - div.sphinxsidebar a { - color: #AAA; - } - - div.sphinxsidebar p.logo { - display: none; - } - - div.document { - width: 100%; - margin: 0; - } - - div.footer { - display: none; - } - - div.bodywrapper { - margin: 0; - } - - div.body { - min-height: 0; - padding: 0; - } - - .rtd_doc_footer { - display: none; - } - - .document { - width: auto; - } - - .footer { - width: auto; - } - - .footer { - width: auto; - } - - .github { - display: none; - } -} - - -/* misc. */ - -.revsys-inline { - display: none!important; -} - -/* Make nested-list/multi-paragraph items look better in Releases changelog - * pages. Without this, docutils' magical list fuckery causes inconsistent - * formatting between different release sub-lists. - */ -div#changelog > div.section > ul > li > p:only-child { - margin-bottom: 0; -} - -/* Hide fugly table cell borders in ..bibliography:: directive output */ -table.docutils.citation, table.docutils.citation td, table.docutils.citation th { - border: none; - /* Below needed in some edge cases; if not applied, bottom shadows appear */ - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} - - -/* relbar */ - -.related { - line-height: 30px; - width: 100%; - font-size: 0.9rem; -} - -.related.top { - border-bottom: 1px solid #EEE; - margin-bottom: 20px; -} - -.related.bottom { - border-top: 1px solid #EEE; -} - -.related ul { - padding: 0; - margin: 0; - list-style: none; -} - -.related li { - display: inline; -} - -nav#rellinks { - float: right; -} - -nav#rellinks li+li:before { - content: "|"; -} - -nav#breadcrumbs li+li:before { - content: "\00BB"; -} - -/* Hide certain items when printing */ -@media print { - div.related { - display: none; - } -} \ No newline at end of file diff --git a/doc/_build/html/_static/basic.css b/doc/_build/html/_static/basic.css deleted file mode 100644 index 603f6a87..00000000 --- a/doc/_build/html/_static/basic.css +++ /dev/null @@ -1,905 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -div.section::after { - display: block; - content: ''; - clear: left; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; - word-wrap: break-word; - overflow-wrap : break-word; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox form.search { - overflow: hidden; -} - -div.sphinxsidebar #searchbox input[type="text"] { - float: left; - width: 80%; - padding: 0.25em; - box-sizing: border-box; -} - -div.sphinxsidebar #searchbox input[type="submit"] { - float: left; - width: 20%; - border-left: none; - padding: 0.25em; - box-sizing: border-box; -} - - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li p.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- domain module index --------------------------------------------------- */ - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -/* -- general body styles --------------------------------------------------- */ - -div.body { - min-width: 450px; - max-width: 800px; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - -moz-hyphens: auto; - -ms-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} - -a.headerlink { - visibility: hidden; -} - -a.brackets:before, -span.brackets > a:before{ - content: "["; -} - -a.brackets:after, -span.brackets > a:after { - content: "]"; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, figure.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, figure.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, figure.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -img.align-default, figure.align-default, .figure.align-default { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-default { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar, -aside.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px; - background-color: #ffe; - width: 40%; - float: right; - clear: right; - overflow-x: auto; -} - -p.sidebar-title { - font-weight: bold; -} - -div.admonition, div.topic, blockquote { - clear: left; -} - -/* -- topics ---------------------------------------------------------------- */ - -div.topic { - border: 1px solid #ccc; - padding: 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- content of sidebars/topics/admonitions -------------------------------- */ - -div.sidebar > :last-child, -aside.sidebar > :last-child, -div.topic > :last-child, -div.admonition > :last-child { - margin-bottom: 0; -} - -div.sidebar::after, -aside.sidebar::after, -div.topic::after, -div.admonition::after, -blockquote::after { - display: block; - content: ''; - clear: both; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - margin-top: 10px; - margin-bottom: 10px; - border: 0; - border-collapse: collapse; -} - -table.align-center { - margin-left: auto; - margin-right: auto; -} - -table.align-default { - margin-left: auto; - margin-right: auto; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -table.footnote td, table.footnote th { - border: 0 !important; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -th > :first-child, -td > :first-child { - margin-top: 0px; -} - -th > :last-child, -td > :last-child { - margin-bottom: 0px; -} - -/* -- figures --------------------------------------------------------------- */ - -div.figure, figure { - margin: 0.5em; - padding: 0.5em; -} - -div.figure p.caption, figcaption { - padding: 0.3em; -} - -div.figure p.caption span.caption-number, -figcaption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text, -figcaption span.caption-text { -} - -/* -- field list styles ----------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -/* -- hlist styles ---------------------------------------------------------- */ - -table.hlist { - margin: 1em 0; -} - -table.hlist td { - vertical-align: top; -} - -/* -- object description styles --------------------------------------------- */ - -.sig { - font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; -} - -.sig-name, code.descname { - background-color: transparent; - font-weight: bold; -} - -.sig-name { - font-size: 1.1em; -} - -code.descname { - font-size: 1.2em; -} - -.sig-prename, code.descclassname { - background-color: transparent; -} - -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - -.sig-param.n { - font-style: italic; -} - -/* C++ specific styling */ - -.sig-inline.c-texpr, -.sig-inline.cpp-texpr { - font-family: unset; -} - -.sig.c .k, .sig.c .kt, -.sig.cpp .k, .sig.cpp .kt { - color: #0033B3; -} - -.sig.c .m, -.sig.cpp .m { - color: #1750EB; -} - -.sig.c .s, .sig.c .sc, -.sig.cpp .s, .sig.cpp .sc { - color: #067D17; -} - - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -:not(li) > ol > li:first-child > :first-child, -:not(li) > ul > li:first-child > :first-child { - margin-top: 0px; -} - -:not(li) > ol > li:last-child > :last-child, -:not(li) > ul > li:last-child > :last-child { - margin-bottom: 0px; -} - -ol.simple ol p, -ol.simple ul p, -ul.simple ol p, -ul.simple ul p { - margin-top: 0; -} - -ol.simple > li:not(:first-child) > p, -ul.simple > li:not(:first-child) > p { - margin-top: 0; -} - -ol.simple p, -ul.simple p { - margin-bottom: 0; -} - -dl.footnote > dt, -dl.citation > dt { - float: left; - margin-right: 0.5em; -} - -dl.footnote > dd, -dl.citation > dd { - margin-bottom: 0em; -} - -dl.footnote > dd:after, -dl.citation > dd:after { - content: ""; - clear: both; -} - -dl.field-list { - display: grid; - grid-template-columns: fit-content(30%) auto; -} - -dl.field-list > dt { - font-weight: bold; - word-break: break-word; - padding-left: 0.5em; - padding-right: 5px; -} - -dl.field-list > dt:after { - content: ":"; -} - -dl.field-list > dd { - padding-left: 0.5em; - margin-top: 0em; - margin-left: 0em; - margin-bottom: 0em; -} - -dl { - margin-bottom: 15px; -} - -dd > :first-child { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -dl > dd:last-child, -dl > dd:last-child > :last-child { - margin-bottom: 0; -} - -dt:target, span.highlighted { - background-color: #fbe54e; -} - -rect.highlighted { - fill: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -.classifier:before { - font-style: normal; - margin: 0 0.5em; - content: ":"; - display: inline-block; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -pre, div[class*="highlight-"] { - clear: both; -} - -span.pre { - -moz-hyphens: none; - -ms-hyphens: none; - -webkit-hyphens: none; - hyphens: none; -} - -div[class*="highlight-"] { - margin: 1em 0; -} - -td.linenos pre { - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - display: block; -} - -table.highlighttable tbody { - display: block; -} - -table.highlighttable tr { - display: flex; -} - -table.highlighttable td { - margin: 0; - padding: 0; -} - -table.highlighttable td.linenos { - padding-right: 0.5em; -} - -table.highlighttable td.code { - flex: 1; - overflow: hidden; -} - -.highlight .hll { - display: block; -} - -div.highlight pre, -table.highlighttable pre { - margin: 0; -} - -div.code-block-caption + div { - margin-top: 0; -} - -div.code-block-caption { - margin-top: 1em; - padding: 2px 5px; - font-size: small; -} - -div.code-block-caption code { - background-color: transparent; -} - -table.highlighttable td.linenos, -span.linenos, -div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; - -webkit-user-select: text; /* Safari fallback only */ - -webkit-user-select: none; /* Chrome/Safari */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* IE10+ */ -} - -div.code-block-caption span.caption-number { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - margin: 1em 0; -} - -code.xref, a code { - background-color: transparent; - font-weight: bold; -} - -h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -span.eqno a.headerlink { - position: absolute; - z-index: 1; -} - -div.math:hover a.headerlink { - visibility: visible; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} \ No newline at end of file diff --git a/doc/_build/html/_static/custom.css b/doc/_build/html/_static/custom.css deleted file mode 100644 index 2a924f1d..00000000 --- a/doc/_build/html/_static/custom.css +++ /dev/null @@ -1 +0,0 @@ -/* This file intentionally left blank. */ diff --git a/doc/_build/html/_static/doctools.js b/doc/_build/html/_static/doctools.js deleted file mode 100644 index 8cbf1b16..00000000 --- a/doc/_build/html/_static/doctools.js +++ /dev/null @@ -1,323 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Sphinx JavaScript utilities for all documentation. - * - * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/** - * select a different prefix for underscore - */ -$u = _.noConflict(); - -/** - * make the code below compatible with browsers without - * an installed firebug like debugger -if (!window.console || !console.firebug) { - var names = ["log", "debug", "info", "warn", "error", "assert", "dir", - "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", - "profile", "profileEnd"]; - window.console = {}; - for (var i = 0; i < names.length; ++i) - window.console[names[i]] = function() {}; -} - */ - -/** - * small helper function to urldecode strings - * - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL - */ -jQuery.urldecode = function(x) { - if (!x) { - return x - } - return decodeURIComponent(x.replace(/\+/g, ' ')); -}; - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s === 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; - } - return result; -}; - -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node, addItems) { - if (node.nodeType === 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && - !jQuery(node.parentNode).hasClass(className) && - !jQuery(node.parentNode).hasClass("nohighlight")) { - var span; - var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.className = className; - } - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - if (isInSVG) { - var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - var bbox = node.parentElement.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute('class', className); - addItems.push({ - "parent": node.parentNode, - "target": rect}); - } - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this, addItems); - }); - } - } - var addItems = []; - var result = this.each(function() { - highlight(this, addItems); - }); - for (var i = 0; i < addItems.length; ++i) { - jQuery(addItems[i].parent).before(addItems[i].target); - } - return result; -}; - -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} - -/** - * Small JavaScript module for the documentation. - */ -var Documentation = { - - init : function() { - this.fixFirefoxAnchorBug(); - this.highlightSearchWords(); - this.initIndexTable(); - if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { - this.initOnKeyListeners(); - } - }, - - /** - * i18n support - */ - TRANSLATIONS : {}, - PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, - LOCALE : 'unknown', - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext : function(string) { - var translated = Documentation.TRANSLATIONS[string]; - if (typeof translated === 'undefined') - return string; - return (typeof translated === 'string') ? translated : translated[0]; - }, - - ngettext : function(singular, plural, n) { - var translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated === 'undefined') - return (n == 1) ? singular : plural; - return translated[Documentation.PLURALEXPR(n)]; - }, - - addTranslations : function(catalog) { - for (var key in catalog.messages) - this.TRANSLATIONS[key] = catalog.messages[key]; - this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); - this.LOCALE = catalog.locale; - }, - - /** - * add context elements like header anchor links - */ - addContextElements : function() { - $('div[id] > :header:first').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this headline')). - appendTo(this); - }); - $('dt[id]').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this definition')). - appendTo(this); - }); - }, - - /** - * workaround a firefox stupidity - * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 - */ - fixFirefoxAnchorBug : function() { - if (document.location.hash && $.browser.mozilla) - window.setTimeout(function() { - document.location.href += ''; - }, 10); - }, - - /** - * highlight the search words provided in the url in the text - */ - highlightSearchWords : function() { - var params = $.getQueryParameters(); - var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; - if (terms.length) { - var body = $('div.body'); - if (!body.length) { - body = $('body'); - } - window.setTimeout(function() { - $.each(terms, function() { - body.highlightText(this.toLowerCase(), 'highlighted'); - }); - }, 10); - $('') - .appendTo($('#searchbox')); - } - }, - - /** - * init the domain index toggle buttons - */ - initIndexTable : function() { - var togglers = $('img.toggler').click(function() { - var src = $(this).attr('src'); - var idnum = $(this).attr('id').substr(7); - $('tr.cg-' + idnum).toggle(); - if (src.substr(-9) === 'minus.png') - $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); - else - $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); - }).css('display', ''); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { - togglers.click(); - } - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords : function() { - $('#searchbox .highlight-link').fadeOut(300); - $('span.highlighted').removeClass('highlighted'); - }, - - /** - * make the url absolute - */ - makeURL : function(relativeURL) { - return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; - }, - - /** - * get the current relative url - */ - getCurrentURL : function() { - var path = document.location.pathname; - var parts = path.split(/\//); - $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { - if (this === '..') - parts.pop(); - }); - var url = parts.join('/'); - return path.substring(url.lastIndexOf('/') + 1, path.length - 1); - }, - - initOnKeyListeners: function() { - $(document).keydown(function(event) { - var activeElementType = document.activeElement.tagName; - // don't navigate when in search box, textarea, dropdown or button - if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' - && activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey - && !event.shiftKey) { - switch (event.keyCode) { - case 37: // left - var prevHref = $('link[rel="prev"]').prop('href'); - if (prevHref) { - window.location.href = prevHref; - return false; - } - break; - case 39: // right - var nextHref = $('link[rel="next"]').prop('href'); - if (nextHref) { - window.location.href = nextHref; - return false; - } - break; - } - } - }); - } -}; - -// quick alias for translations -_ = Documentation.gettext; - -$(document).ready(function() { - Documentation.init(); -}); diff --git a/doc/_build/html/_static/documentation_options.js b/doc/_build/html/_static/documentation_options.js deleted file mode 100644 index 4daa6b50..00000000 --- a/doc/_build/html/_static/documentation_options.js +++ /dev/null @@ -1,12 +0,0 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '', - LANGUAGE: 'en', - COLLAPSE_INDEX: false, - BUILDER: 'html', - FILE_SUFFIX: '.html', - LINK_SUFFIX: '.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false -}; \ No newline at end of file diff --git a/doc/_build/html/_static/file.png b/doc/_build/html/_static/file.png deleted file mode 100644 index a858a410e4faa62ce324d814e4b816fff83a6fb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( diff --git a/doc/_build/html/_static/jquery-3.5.1.js b/doc/_build/html/_static/jquery-3.5.1.js deleted file mode 100644 index 50937333..00000000 --- a/doc/_build/html/_static/jquery-3.5.1.js +++ /dev/null @@ -1,10872 +0,0 @@ -/*! - * jQuery JavaScript Library v3.5.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2020-05-04T22:49Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var flat = arr.flat ? function( array ) { - return arr.flat.call( array ); -} : function( array ) { - return arr.concat.apply( [], array ); -}; - - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - -var document = window.document; - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.5.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - even: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return ( i + 1 ) % 2; - } ) ); - }, - - odd: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return i % 2; - } ) ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a provided context; falls back to the global one - // if not specified. - globalEval: function( code, options, doc ) { - DOMEval( code, { nonce: options && options.nonce }, doc ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return flat( ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( _i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.5 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2020-03-14 - */ -( function( window ) { -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ( {} ).hasOwnProperty, - arr = [], - pop = arr.pop, - pushNative = arr.push, - push = arr.push, - slice = arr.slice, - - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[ i ] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + - "ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram - identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - - // "Attribute values must be CSS identifiers [capture 5] - // or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + - whitespace + "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + - whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + - "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + - "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rhtml = /HTML$/i, - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), - funescape = function( escape, nonHex ) { - var high = "0x" + escape.slice( 1 ) - 0x10000; - - return nonHex ? - - // Strip the backslash prefix from a non-hex escape sequence - nonHex : - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + - ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - ( arr = slice.call( preferredDoc.childNodes ) ), - preferredDoc.childNodes - ); - - // Support: Android<4.0 - // Detect silently failing push.apply - // eslint-disable-next-line no-unused-expressions - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - pushNative.apply( target, slice.call( els ) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - - // Can't trust NodeList.length - while ( ( target[ j++ ] = els[ i++ ] ) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - setDocument( context ); - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { - - // ID selector - if ( ( m = match[ 1 ] ) ) { - - // Document context - if ( nodeType === 9 ) { - if ( ( elem = context.getElementById( m ) ) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && ( elem = newContext.getElementById( m ) ) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[ 2 ] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && - - // Support: IE 8 only - // Exclude object elements - ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // The technique has to be used as well when a leading combinator is used - // as such selectors are not recognized by querySelectorAll. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && - ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - - // We can use :scope instead of the ID hack if the browser - // supports it & if we're not changing the context. - if ( newContext !== context || !support.scope ) { - - // Capture the context ID, setting it first if necessary - if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", ( nid = expando ) ); - } - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + - toSelector( groups[ i ] ); - } - newSelector = groups.join( "," ); - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return ( cache[ key + " " ] = value ); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement( "fieldset" ); - - try { - return !!fn( el ); - } catch ( e ) { - return false; - } finally { - - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split( "|" ), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[ i ] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( ( cur = cur.nextSibling ) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return ( name === "input" || name === "button" ) && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction( function( argument ) { - argument = +argument; - return markFunction( function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ ( j = matchIndexes[ i ] ) ] ) { - seed[ j ] = !( matches[ j ] = seed[ j ] ); - } - } - } ); - } ); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = ( elem.ownerDocument || elem ).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, - // Safari 4 - 5 only, Opera <=11.6 - 12.x only - // IE/Edge & older browsers don't support the :scope pseudo-class. - // Support: Safari 6.0 only - // Safari 6.0 supports :scope but it's an alias of :root there. - support.scope = assert( function( el ) { - docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); - return typeof el.querySelectorAll !== "undefined" && - !el.querySelectorAll( ":scope fieldset div" ).length; - } ); - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert( function( el ) { - el.className = "i"; - return !el.getAttribute( "className" ); - } ); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert( function( el ) { - el.appendChild( document.createComment( "" ) ); - return !el.getElementsByTagName( "*" ).length; - } ); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - } ); - - // ID filter and find - if ( support.getById ) { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute( "id" ) === attrId; - }; - }; - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode( "id" ); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( ( elem = elems[ i++ ] ) ) { - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find[ "TAG" ] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { - - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert( function( el ) { - - var input; - - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll( "[selected]" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); - } - - // Support: Firefox <=3.6 - 5 only - // Old Firefox doesn't throw on a badly-escaped identifier. - el.querySelectorAll( "\\\f" ); - rbuggyQSA.push( "[\\r\\n\\f]" ); - } ); - - assert( function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement( "input" ); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll( "[name=d]" ).length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: Opera 10 - 11 only - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll( "*,:x" ); - rbuggyQSA.push( ",.*:" ); - } ); - } - - if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector ) ) ) ) { - - assert( function( el ) { - - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - } ); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); - } : - function( a, b ) { - if ( b ) { - while ( ( b = b.parentNode ) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { - - // Choose the first element that is related to our preferred document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( a == document || a.ownerDocument == preferredDoc && - contains( preferredDoc, a ) ) { - return -1; - } - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( b == document || b.ownerDocument == preferredDoc && - contains( preferredDoc, b ) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - return a == document ? -1 : - b == document ? 1 : - /* eslint-enable eqeqeq */ - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( ( cur = cur.parentNode ) ) { - ap.unshift( cur ); - } - cur = b; - while ( ( cur = cur.parentNode ) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[ i ] === bp[ i ] ) { - i++; - } - - return i ? - - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[ i ], bp[ i ] ) : - - // Otherwise nodes in our document sort first - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - ap[ i ] == preferredDoc ? -1 : - bp[ i ] == preferredDoc ? 1 : - /* eslint-enable eqeqeq */ - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - setDocument( elem ); - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch ( e ) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( context.ownerDocument || context ) != document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( elem.ownerDocument || elem ) != document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[ 1 ] = match[ 1 ].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || - match[ 5 ] || "" ).replace( runescape, funescape ); - - if ( match[ 2 ] === "~=" ) { - match[ 3 ] = " " + match[ 3 ] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[ 1 ] = match[ 1 ].toLowerCase(); - - if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - - // nth-* requires argument - if ( !match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[ 4 ] = +( match[ 4 ] ? - match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); - match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); - - // other types prohibit arguments - } else if ( match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[ 6 ] && match[ 2 ]; - - if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[ 3 ] ) { - match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - - // Get excess from tokenize (recursively) - ( excess = tokenize( unquoted, true ) ) && - - // advance to the next closing parenthesis - ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { - - // excess is a negative index - match[ 0 ] = match[ 0 ].slice( 0, excess ); - match[ 2 ] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { - return true; - } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - ( pattern = new RegExp( "(^|" + whitespace + - ")" + className + "(" + whitespace + "|$)" ) ) && classCache( - className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); - } ); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - /* eslint-disable max-len */ - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - /* eslint-enable max-len */ - - }; - }, - - "CHILD": function( type, what, _argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, _context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( ( node = node[ dir ] ) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( ( node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - - // Use previously-cached element index if available - if ( useCache ) { - - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - - // Use the same loop as above to seek `elem` from the start - while ( ( node = ++nodeIndex && node && node[ dir ] || - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || - ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction( function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[ i ] ); - seed[ idx ] = !( matches[ idx ] = matched[ i ] ); - } - } ) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - - // Potentially complex pseudos - "not": markFunction( function( selector ) { - - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction( function( seed, matches, _context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( ( elem = unmatched[ i ] ) ) { - seed[ i ] = !( matches[ i ] = elem ); - } - } - } ) : - function( elem, _context, xml ) { - input[ 0 ] = elem; - matcher( input, null, xml, results ); - - // Don't keep the element (issue #299) - input[ 0 ] = null; - return !results.pop(); - }; - } ), - - "has": markFunction( function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - } ), - - "contains": markFunction( function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - } ), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - - // lang value must be a valid identifier - if ( !ridentifier.test( lang || "" ) ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( ( elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); - return false; - }; - } ), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && - ( !document.hasFocus || document.hasFocus() ) && - !!( elem.type || elem.href || ~elem.tabIndex ); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return ( nodeName === "input" && !!elem.checked ) || - ( nodeName === "option" && !!elem.selected ); - }, - - "selected": function( elem ) { - - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - // eslint-disable-next-line no-unused-expressions - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos[ "empty" ]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( ( attr = elem.getAttribute( "type" ) ) == null || - attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo( function() { - return [ 0 ]; - } ), - - "last": createPositionalPseudo( function( _matchIndexes, length ) { - return [ length - 1 ]; - } ), - - "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - } ), - - "even": createPositionalPseudo( function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "odd": createPositionalPseudo( function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ) - } -}; - -Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || ( match = rcomma.exec( soFar ) ) ) { - if ( match ) { - - // Don't consume trailing commas as valid - soFar = soFar.slice( match[ 0 ].length ) || soFar; - } - groups.push( ( tokens = [] ) ); - } - - matched = false; - - // Combinators - if ( ( match = rcombinators.exec( soFar ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - - // Cast descendant combinators to space - type: match[ 0 ].replace( rtrim, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || - ( match = preFilters[ type ]( match ) ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[ i ].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || - ( outerCache[ elem.uniqueID ] = {} ); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( ( oldCache = uniqueCache[ key ] ) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return ( newCache[ 2 ] = oldCache[ 2 ] ); - } else { - - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[ i ]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[ 0 ]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[ i ], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( ( elem = unmatched[ i ] ) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction( function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( - selector || "*", - context.nodeType ? [ context ] : context, - [] - ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( ( elem = temp[ i ] ) ) { - matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) ) { - - // Restore matcherIn since elem is not yet a final match - temp.push( ( matcherIn[ i ] = elem ) ); - } - } - postFinder( null, ( matcherOut = [] ), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { - - seed[ temp ] = !( results[ temp ] = elem ); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - } ); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[ 0 ].type ], - implicitRelative = leadingRelative || Expr.relative[ " " ], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - ( checkContext = context ).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; - } else { - matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[ j ].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens - .slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), - - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), - len = elems.length; - - if ( outermost ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - outermostContext = context == document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( !context && elem.ownerDocument != document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( ( matcher = elementMatchers[ j++ ] ) ) { - if ( matcher( elem, context || document, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - - // They will have gone through all possible matchers - if ( ( elem = !matcher && elem ) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( ( matcher = setMatchers[ j++ ] ) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !( unmatched[ i ] || setMatched[ i ] ) ) { - setMatched[ i ] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[ i ] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( - selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) - ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( ( selector = compiled.selector || selector ) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[ 0 ] = match[ 0 ].slice( 0 ); - if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - - context = ( Expr.find[ "ID" ]( token.matches[ 0 ] - .replace( runescape, funescape ), context ) || [] )[ 0 ]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[ i ]; - - // Abort if we hit a combinator - if ( Expr.relative[ ( type = token.type ) ] ) { - break; - } - if ( ( find = Expr.find[ type ] ) ) { - - // Search, expanding context for leading sibling combinators - if ( ( seed = find( - token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || - context - ) ) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert( function( el ) { - - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; -} ); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert( function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute( "href" ) === "#"; -} ) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - } ); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert( function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -} ) ) { - addHandle( "value", function( elem, _name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - } ); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert( function( el ) { - return el.getAttribute( "disabled" ) == null; -} ) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; - } - } ); -} - -return Sizzle; - -} )( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, _i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, _i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, _i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( elem.contentDocument != null && - - // Support: IE 11+ - // elements with no `data` attribute has an object - // `contentDocument` with a `null` prototype. - getProto( elem.contentDocument ) ) { - - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( _i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, _key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( _all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // Support: IE <=9 only - // IE <=9 replaces "; - support.option = !!div.lastChild; -} )(); - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
" ], - col: [ 2, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - _default: [ 0, "", "" ] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - return result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); - events = pdataOld.events; - - if ( events ) { - dataPriv.remove( dest, "handle events" ); - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = flat( args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html; - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Behavior in IE 9 is more subtle than in newer versions & it passes - // some versions of this test; make sure not to make it pass there! - reliableTrDimensions: function() { - var table, tr, trChild, trStyle; - if ( reliableTrDimensionsVal == null ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px"; - tr.style.height = "1px"; - trChild.style.height = "9px"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( - dataPriv.get( cur, "events" ) || Object.create( null ) - )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( _i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Use a noop converter for missing script - if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { - s.converters[ "text script" ] = function() {}; - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( _i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - - -jQuery._evalUrl = function( url, options, doc ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Json Preprocessor’s Feature Documentation¶

-
-

Introduction:¶

-../_images/python3-jsonpreprocessor.png -

The JsonPreprocessor is the python3 package which allows programmer to handle some -additional features in json file such as comment, import, override, etc for -configuring purpose. The json file containing comment, import,… will be handled -by JsonPreprocessor package then returned the final dictionary object for python -program.

- -
-
-

Features in details¶

-
-

Adding comments to Json file¶

-

The JsonPreprocessor allows adding comments into json file, a comment could be -added follow “//â€.

-

This is required becuase some big projects require a large json configuration file -which contains a huge number of configuration parameters for the different features. -Therefore, having the need of adding comments into json file to clarify the different -configuration parameters.

-

Note: This package is not allow commented a block of json code, each comment -must be added with “//â€.

-

Example:

-
//*****************************************************************************
-//  Author: ROBFW-AIO Team
-//
-//  This file defines all common global parameters and will be included to all
-//  test config files
-//*****************************************************************************
-{
-  "Project": "G3g",
-  "WelcomeString": "Hello... ROBFW is running now!",
-  // Version control information.
-  "version": {
-    "majorversion": "0",
-    "minorversion": "1",
-    "patchversion": "1"
-  },
-  "params": {
-    // Global parameters
-    "global": {
-      "gGlobalIntParam" : 1,
-      "gGlobalFloatParam" : 1.332,  // This parameter is used to configure for ....
-      "gGlobalString"   : "This is a string",
-      "gGlobalStructure": {
-        "general": "general"
-      }
-    }
-  },
-  "preprocessor": {
-    "definitions": {
-      // FEATURE switches
-      "gPreprolIntParam" : 1,
-      "gPreproFloatParam" : 1.332,
-       // The parameter for feature ABC
-      "gPreproString"   : "This is a string",
-      "gPreproStructure": {
-                         "general": "general"
-                        }
-      }
-  },
-  "TargetName" : "gen3flex@dlt"
-}
-
-
-
-
-

Import the contents from other json files¶

-

This import feature allows user merges the content of other json files into the -json file, it also allows the nested importing means we can use import feature in -the imported files.

-

The import feature helps user distinguish the configuration parameters of each -functions, purposes, variants, and so forth into the separate json files. Therefore, -we can easy to understand and manage the configuration parameters of big project.

-

Example:

-

Suppose we have the json file params_global.json with the content:

-
//*****************************************************************************
-//  Author: ROBFW-AIO Team
-//
-//  This file defines all common global parameters and will be included to all
-//  test config files
-//*****************************************************************************
-//
-//  This is to distinguish the different types of resets
-{
-  "gGlobalIntParam" : 1,
-
-  "gGlobalFloatParam" : 1.332, // This parameter is used to configure for ....
-
-  "gGlobalString"   : "This is a string",
-
-  "gGlobalStructure": {
-    "general": "general"
-  }
-}
-
-
-

And other json file preprocessor_definitions.json with content:

-
//*****************************************************************************
-//  Author: ROBFW-AIO Team
-//
-//  This file defines all common global parameters and will be included to all
-//  test config files
-//*****************************************************************************
-{
-  "gPreprolIntParam" : 1,
-
-  "gPreproFloatParam" : 1.332,
-  // The parameter for feature ABC
-  "gPreproString"   : "This is a string",
-
-  "gPreproStructure": {
-                         "general": "general"
-                      }
-}
-
-
-

Then we can import these 2 files above to the json file config.json with content:

-
//*****************************************************************************
-//  Author: ROBFW-AIO Team
-//
-//  This file defines all common global parameters and will be included to all
-//  test config files
-//*****************************************************************************
-{
-  "Project": "G3g",
-  "WelcomeString": "Hello... ROBFW is running now!",
-  // Version control information.
-  "version": {
-    "majorversion": "0",
-    "minorversion": "1",
-    "patchversion": "1"
-  },
-  "params": {
-    // Global parameters
-    "global": {
-               "[import]": "<path_to_the_imported_file>/params_global.json"
-      }
-    },
-  "preprocessor": {
-    "definitions": {
-      // FEATURE switches
-        "[import]": "<path_to_the_imported_file>/preprocessor_definitions.json"
-      }
-  },
-  "TargetName" : "gen3flex@dlt"
-}
-
-
-

The config.json file is handled by JsonPreprocessor package, then return the dictionary object for a program like below:

-
{
-  "Project": "G3g",
-  "WelcomeString": "Hello... ROBFW is running now!",
-  "version": {
-    "majorversion": "0",
-    "minorversion": "1",
-    "patchversion": "1"
-  },
-  "params": {
-    "global": {
-      "gGlobalIntParam" : 1,
-      "gGlobalFloatParam" : 1.332,
-      "gGlobalString"   : "This is a string",
-      "gGlobalStructure": {
-        "general": "general"
-        }
-    }
-  },
-  "preprocessor": {
-    "definitions": {
-      "gPreprolIntParam" : 1,
-      "gPreproFloatParam" : 1.332,
-      "gPreproString"   : "This is a string",
-      "gPreproStructure": {
-                         "general": "general"
-                        }
-    }
-  },
-  "TargetName" : "gen3flex@dlt"
-}
-
-
-
-
-

Overwrite existing and add new parameters¶

-

This package also provides user ability to overwrite or update as well as add new -parameters. User can update parameters which are already declared and add new parameters -or new element into existing parameters. The below example will show the way to do -these features.

-

In case we have many different variants, and each varaint requires a different value -assigned to the parameter. This feature could help us update new value for existen -parameters, it also supports to add new parameters to existen configuation object.

-

Example:

-

Suppose we have the json file params_global.json with the content:

-
{
-  "gGlobalIntParam" : 1,
-
-  "gGlobalFloatParam" : 1.332, // This parameter is used to configure for ....
-
-  "gGlobalString"   : "This is a string",
-
-  "gGlobalStructure": {
-    "general": "general"
-  }
-}
-
-
-

Then we import params_global.json to json file config.json with content:

-
{
-  "Project": "G3g",
-  "WelcomeString": "Hello... ROBFW is running now!",
-  // Version control information.
-  "version": {
-    "majorversion": "0",
-    "minorversion": "1",
-    "patchversion": "1"
-  },
-  "params": {
-    // Global parameters
-    "global": {
-               "[import]": "<path_to_the_imported_file>/params_global.json"
-      }
-    },
-  "TargetName" : "gen3flex@dlt",
-  // Overwrite parameters
-  "${params}['global']['gGlobalFloatParam']": 9.999,
-  "${version}['patchversion']": "2",
-  "${params}['global']['gGlobalString']": "This is the new value for the already existing parameter.",
-  // Add new parameters
-  "${newParam}": {
-                               "abc": 9,
-                               "xyz": "new param"
-  },
-  "${params}['global']['gGlobalStructure']['newGlobalParam']": 123
-}
-
-
-

The config.json file is handled by JsonPreprocessor package, then return the dictionary object for a program like below:

-
{
-  "Project": "G3g",
-  "WelcomeString": "Hello... ROBFW is running now!",
-  "version": {
-    "majorversion": "0",
-    "minorversion": "1",
-    "patchversion": "2"
-  },
-  "params": {
-    "global": {
-      "gGlobalIntParam" : 1,
-      "gGlobalFloatParam" : 9.999,
-      "gGlobalString"   : "This is the new value for the already existing parameter.",
-      "gGlobalStructure": {
-        "general": "general",
-               "newGlobalParam": 123
-        }
-      }
-  },
-  "TargetName": "gen3flex@dlt",
-  "newParam": {
-         "abc": 9,
-         "xyz": "new param"
-  }
-}
-
-
-
-
-

Nested parameters¶

-

With JsonPreprocessor package, user can also use nested parameters as example below:

-

Example:

-

Suppose we have the json file config.json with the content:

-
{
-  "Project": "G3g",
-  "WelcomeString": "Hello... ROBFW is running now!",
-  // Version control information.
-  "version": {
-    "majorversion": "0",
-    "minorversion": "1",
-    "patchversion": "1"
-  },
-  "params": {
-    // Global parameters
-    "global": {
-      "gGlobalIntParam" : 1,
-      "gGlobalFloatParam" : 1.332, // This parameter is used to configure for ....
-      "gGlobalString"   : "This is a string",
-      "gGlobalStructure": {
-        "general": "general"
-        }
-    }
-  },
-  "preprocessor": {
-    "definitions": {
-      "gPreprolIntParam" : 1,
-      "gPreproFloatParam" : 9.664,
-         "ABC": "checkABC",
-      "gPreproString"   : "This is a string",
-      "gPreproStructure": {
-                         "general": "general"
-                        }
-    }
-  },
-  "TargetName" : "gen3flex@dlt",
-  // Nested parameter
-  "${params}['global'][${preprocessor}['definitions']['ABC']]": true,
-  "${params}['global']['gGlobalFloatParam']": "${preprocessor}['definitions']['gPreproFloatParam']"
-}
-
-
-

The config.json file is handled by JsonPreprocessor package, then return the dictionary object for a program like below:

-
{
-  "Project": "G3g",
-  "WelcomeString": "Hello... ROBFW is running now!",
-  "version": {
-    "majorversion": "0",
-    "minorversion": "1",
-    "patchversion": "1"
-  },
-  "params": {
-    "global": {
-      "gGlobalIntParam" : 1,
-      "gGlobalFloatParam" : 9.664,
-      "gGlobalString"   : "This is a string",
-      "gGlobalStructure": {
-        "general": "general"
-        },
-         "checkABC": true
-    }
-  },
-  "preprocessor": {
-    "definitions": {
-      "gPreprolIntParam" : 1,
-      "gPreproFloatParam" : 9.664,
-         "ABC": "checkABC",
-      "gPreproString"   : "This is a string",
-      "gPreproStructure": {
-                         "general": "general"
-                        }
-    }
-  },
-  "TargetName" : "gen3flex@dlt"
-}
-
-
-
-
-
-

Feedback¶

-

To give us a feedback, you can send an email to Thomas Pollerspöck or -RBVH-ECM-Automation_Test_Framework-Associates

-

In case you want to report a bug or request any interesting feature, please don’t hesitate to rasie a ticket on -our Jira

-
-
-

References¶

-

For more information please refer to our Bosch Connect Community

-
-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/doc/_build/html/genindex.html b/doc/_build/html/genindex.html deleted file mode 100644 index 2d063a11..00000000 --- a/doc/_build/html/genindex.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - Index — The Json Preprocessor documentation - - - - - - - - - - - - - - - - - -
- - -
-
- - - - - - - \ No newline at end of file diff --git a/doc/_build/html/index.html b/doc/_build/html/index.html deleted file mode 100644 index 6fa43ffb..00000000 --- a/doc/_build/html/index.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - Json Preprocessor’s API! — The Json Preprocessor documentation - - - - - - - - - - - - - - - - - - -
-
-
- - - - -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/doc/_build/html/objects.inv b/doc/_build/html/objects.inv deleted file mode 100644 index 765f4a34..00000000 --- a/doc/_build/html/objects.inv +++ /dev/null @@ -1,5 +0,0 @@ -# Sphinx inventory version 2 -# Project: The Json Preprocessor -# Version: -# The remainder of this file is compressed using zlib. -xÚ¥“ÍN„0…÷<Å5ºu;;ÃÄd&þàžÜi¯ZZÒ–dØù¾žO"¥N`„ÉŒ²kzîùÎ)´ñÚ(™hª´bdŒÒP5‹RñZÜ@ü[r[ŠK¯‡Wã‰xŠÈ·Ç€g’¢·vãA!ïJ’Íÿ33iZ›\§ÏOKbŠÓŒz#TÄjcU™†2S’ÑŒži#-î^šŠþ_°gt_ÎÐZ]ljKs`Uwð980–/¸bóÁø!{Ç-Èya %Qd-áú•Ð֚ܺ.©íè´!ÿœù>†™_Ÿî½–CC°%YHN».Ià†„ËÚïzÞÊ-ƒ~ì§Ð`b:ñ.Y]í#›¨šp/x£«>j ž°ù»{è6„šå‡F¿ç=©×÷¾kŒú \ No newline at end of file diff --git a/doc/_build/html/py-modindex.html b/doc/_build/html/py-modindex.html deleted file mode 100644 index 3a6e54a4..00000000 --- a/doc/_build/html/py-modindex.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - Python Module Index — The Json Preprocessor documentation - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- - -

Python Module Index

- -
- c -
- - - - - - - -
 
- c
- CJsonPreprocessor -
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/doc/_build/html/search.html b/doc/_build/html/search.html deleted file mode 100644 index 97710925..00000000 --- a/doc/_build/html/search.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - Search — The Json Preprocessor documentation - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -

Search

- - - - -

- Searching for multiple words only shows matches that contain - all words. -

- - -
- - - -
- - - -
- -
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/doc/_build/html/searchindex.js b/doc/_build/html/searchindex.js deleted file mode 100644 index 077c5652..00000000 --- a/doc/_build/html/searchindex.js +++ /dev/null @@ -1 +0,0 @@ -Search.setIndex({docnames:["CJsonPreprocessor","additional_doc/feature_documentation","index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.todo":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["CJsonPreprocessor.rst","additional_doc\\feature_documentation.rst","index.rst"],objects:{"":[[0,0,0,"-","CJsonPreprocessor"]],"CJsonPreprocessor.CJsonPreprocessor":[[0,2,1,"","jsonLoad"]],"CJsonPreprocessor.CPythonJSONDecoder":[[0,2,1,"","custom_scan_once"]],"CJsonPreprocessor.CSyntaxType":[[0,3,1,"","json"],[0,3,1,"","python"]],CJsonPreprocessor:[[0,1,1,"","CJsonPreprocessor"],[0,1,1,"","CPythonJSONDecoder"],[0,1,1,"","CSyntaxType"]]},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:attribute"},terms:{"0":1,"1":1,"123":1,"2":1,"332":1,"664":1,"9":1,"999":1,"case":1,"class":0,"do":1,"final":1,"function":1,"import":0,"pollersp\u00f6ck":1,"return":[0,1],"switch":1,"true":[0,1],And:1,For:1,In:1,The:1,Then:1,To:1,With:1,abc:1,abil:1,abov:1,add:0,addit:1,aio:1,all:1,allow:[0,1],alreadi:1,also:1,an:1,ani:1,ar:1,arg:0,assign:1,associ:1,author:1,automation_test_framework:1,base:0,becuas:1,below:[0,1],big:1,block:1,bosch:1,bug:1,can:1,checkabc:1,cjsonpreprocessor:0,clarifi:1,code:1,comment:0,common:1,commun:1,config:1,configu:1,configur:[0,1],connect:1,contain:1,control:1,could:1,cpythonjsondecod:0,csyntaxtyp:0,currentcfg:0,custom_scan_onc:0,data:0,declar:1,decod:0,defin:1,definit:1,detail:2,dict:0,dictionari:1,differ:1,distinguish:1,dlt:1,document:2,don:1,each:1,easi:1,ecm:1,element:1,email:1,etc:1,exampl:1,existen:1,fals:0,featur:2,feedback:2,file:0,follow:1,format:0,forth:1,g3g:1,gen3flex:1,gener:1,gglobalfloatparam:1,gglobalintparam:1,gglobalstr:1,gglobalstructur:1,give:1,global:1,gpreprofloatparam:1,gpreprolintparam:1,gpreprostr:1,gpreprostructur:1,handl:[0,1],have:1,hello:1,help:[0,1],hesit:1,huge:1,idx:0,includ:1,inform:1,input:0,interest:1,introduct:2,jfile:0,jira:1,json:0,jsondecod:0,jsonload:0,jsonpreprocessor:[1,2],kwarg:0,larg:1,like:1,load:0,majorvers:1,manag:1,mani:1,masterfil:0,mean:1,merg:1,method:0,minorvers:1,modul:2,more:1,must:1,need:1,newglobalparam:1,newparam:1,none:0,note:1,now:1,number:1,object:[0,1],ojson:0,our:1,overrid:1,packag:[1,2],param:1,params_glob:1,pars:0,patchvers:1,path_to_the_imported_fil:1,pleas:1,preprocessor_definit:1,program:1,programm:1,project:1,provid:1,purpos:1,python3:1,python:[0,1],rasi:1,rbvh:1,refer:2,report:1,request:1,requir:1,reset:1,robfw:1,run:1,scan:0,send:1,separ:1,show:1,so:1,some:1,sourc:0,string:[0,1],support:1,suppos:1,syntax:0,t:1,targetnam:1,team:1,test:1,therefor:1,thi:1,thoma:1,ticket:1,type:1,understand:1,updat:1,us:1,user:1,valu:[0,1],varaint:1,variant:1,version:1,wai:1,want:1,we:1,welcomestr:1,well:1,when:0,which:1,within:0,xyz:1,you:1},titles:["JsonPreprocessor package","Json Preprocessor\u2019s Feature Documentation","Json Preprocessor\u2019s API!"],titleterms:{"import":1,"new":1,ad:1,add:1,api:2,comment:1,content:[0,1,2],detail:1,document:1,exist:1,featur:1,feedback:1,file:1,from:1,introduct:1,json:[1,2],jsonpreprocessor:0,modul:0,nest:1,other:1,overwrit:1,packag:0,paramet:1,preprocessor:[1,2],refer:1,s:[1,2]}}) \ No newline at end of file diff --git a/doc/_build/latex/Json-Preprocessor.pdf b/doc/_build/latex/Json-Preprocessor.pdf deleted file mode 100644 index f8387b13b4c0e9cf82ae43f1169adfe6165e8840..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 302891 zcmb@u1zeQt_67=)f`EXOq@si%-6Q{NQoQ*#g`wT^Km!0H$u14=v3dEiCaQB=B6_Tr5q2c%BnL zEoH}fuIqKnI-W#v6BunOojO6$$$<(qkOI7?usEjd@FyfUW(WNn{CG(x3gKwpbPb7K zd&xqAlBuJlP5$W0LtqkJ;o6%TwpDj;31a$88aKtct_E5qBy1 zDfxND+SxN!SZG3Q&H*@yqaM=l1OmgUxUvUL6Vc=Y*_1M^TR*SlnMdk0UNy&0c5%Q< zc1}JLUjEh?zfi19F_|EAw*!AR?3Ii%sWZoXF#nA}&3PM_q_rg6LaIV~serkYM=$8V zEiS){EI2XHOj)Ej@BG-%(TG21D1^Uiq8EZLI26IH+U-S7XZgK+=bJZxvSpp!;u=t| zwepQ-hUR0d8KV11+_s^ZBA7BvmRHUB`Zd~HyT&MA_O#w1dB~JVb*%@losx--s--sH zOzEJDl61ke%dVZ0VY$g{zt5|f@-!JIBZLikwbG^MFI{zdJ?1?5Ag9&(?COr5|KkHa z|1dq5Z|}|GkvBbAT)xpatt21FKZ!k{?oH}xGLd7$2^cS+QM$&CBSRxhxnD9bNoT=! zo>4@0k=_?}(Mo*5ok4cNoq)U?3A@;C4ZCD=0a+e;JAB6TK>MmPU;JL&UJ@LJzPhsSA5M^zIFIEY)u~Ux@|;texUblXpg$3 zt?Ir_(Y@1CfoJJp@uycI&n`WZ|1ZyE;M8Q`ly`jM$iVrKfyLa$)CuX69Ner7NKgE; zvCyB5Sqyju1(3gj23%ZRk1r3dmj}nogTv*)fQt|L%f+R3d2qQrSY95S{<=gpHUH}Y zs{79|kUcK@^KxG{K;8Z^pxj?wOfS#eE)VXPho6)DX!`K-_Ro1xt$>&JP*6}XQQdzI zWcybS2i6};7XA=@&O7NN){+Qzo58$ zD)JW;Zr=Zd#og=|IR64j;CFyjE=NYm!Q=Amhsdn{y8Tlq{~}%2pKt{K6P&+9!}F{0 z@NoSO$v;r&-wXgHoxj-_N`|Pl{8T5Z72t9;Kk@SX+=Tva>aM?vkLT~=KQUSVDovD1QEEn+-S2GgZ%aeLN45W3>=0-<9)Q z*M4-l929Pp=c2Hoj28v<2TIh1&1F-R7Jl6Rx%{7&|1Ylhx8HS@pB zgKGMtf!*cwsNqme|7IZnDk)UcpW^zD9{zW;;QiH>d4KEXs+S{!{t^TVAj-c`XDD5v z*6=qmp)NcxJE0n&)_`h-xh@2Q{BaxA5H-c$937=jR2LL9 z)Y(t_{0S2E^rs8){v!tB;o$q5to{oF{ai5$=igTKzvBGw)buxX^8FWT`U%YJQc);z zq0HOan8~#lye7_|YjlYZsWwfYyQ93}Kp_GZ57j^klFMR*W<$vtrfAe*| z-}?IRxJK;~&d>Q#+CW{Roa`4Qm+gLfAF9a@3;e0VKP2{-08v)`leYN&qaXe$z<*(8 z{@=Qw^5yU-bSOJQZC>m{3T562(t@M@blU`BS+3|Iz6G0Ctaqo9kD5=l`v} zqeSU-i4HY9iY|X5_yO#n!AH^ZPYOUS&GRoyg$t@Xue)p7cZ_U(RZm*=lj_EH%#J+~Ep~W*`b}A1$JDZ{Cgfkb**GEBT=TUl;+lbDSY3WMjIZ4>(-}ah%Wi zSW*CM<$Bt&Ub148>}hDVZ0`X6dLhdOzSo_D>DB6F?H?r|%KutzBW!a+J2lfuLFkUn zaRPAS!@Ze6?>G&S+pK%J)oI<|sAqUXo!=vL-*~yIG7~Cnvfkgly}n88TN+*(-Uro( zj`viHX&X_7?d0eKYL?`_)_N`|$3nANRLxe_oOj?)N3FvrrM<(0I$=Y!3u1L!oZ1oZ z$?5QG^npRyy3Sa7aZt##HDo-2c|Ayj;~`}x{y_Y(q&@GnvyflhDQ;m=uC83R=5z2?sfh|TWj8YFm9*5L%JrjB9RPrPk52pC8 zv%Ym>pxznFmV+=c)3o+VDwoQ$9D^cEI8|)oGpGFL*1d>EgZ!<95Fzh&*VY~0$m`6; z`*lob{ZcuVN!a9M{8~w9x~1d?th)?4q$ay*jKk45v@JRFAkHBrGOh;9)E%SYLD{ai ze3KKHMmM}PHIH;Q*zSsh!xUnRv3=Dy0(R}%D#A|6m!M5&tIxQ7s3lylzMA7D;0p$q zeZX;Q(A&3o=W;f-uDBG#_A;?!n!)s%Z{xu%Y$z{H=UGSuI{2C#2zXPFmoJEq>}|-0 zvM8y7yqh&E@}$!j<_r^=)5a7+0!07*ZX)o5mVZeb2nurjbIa7~ame7hF||jQDx1}R z`_*T!J6boo1k$=b5b=Mtfv^hEW@6ud&3X6<%o$Yh4(&U7w{Nj{ z4dtBkeDThv19hw{Wv{IFNO>&F7f??{43CI=(Vckb4Sd%IhAEGx`rlks*6}yEDQH{ zd=0_3_PDp}VejT{hS%P5xxqVJc5ocFQ6us8scG$*SjvIv2n=CUetVCC5t%elP3jr2 zIp^c^wyE)OK@@X4fraTL`J`j{o)$gIIBXC9xa{mPXd$sExl`0tGbxTZ*vk!V`K*|? zN$o4LX(zr>?Lk|>Vi>EXRlqpKKVy+iW4{Zbch4Hi%JL$^PbIg^`ZjbgIKY#ehwWxS z6{e-!ZR&YLZ<&^h< z6lcWc#@(j{9t38^y;^NAQsdO56k-!vX&$=9XVs*UqpA1wwj{^K3$7aO;h~ppar!ih z6p>NqyTdyL^#?6CPNLNmH3f!8Z*sMKSxT_%6xE6h_I)aJ(@!&r-nvt?fQG<0@qoHx z*1C`aRI_I*s`$KWsoT7@7vDN$s<*)LY1;JUN%qwf$kA)&Q~b5HK&93>BRulWtl2rE zusf5AF~MNg5+_bsy3H)zKrm}O@*(kN7E5#8jhV=hTrs(stc(78h)~3dQ-=2IAn<)H zPcw@-?$aKgT7hAIiW}!&5~e@AzejlZ)HgIln2oMq`tC^b#zFDum4qAC{?(%gmXy7$ z6&Kjxc;{%SifTiYxqo1s?}oqiX(+n5){rFqy&luwc+}4*?BW( zM)fTei~1+NpbyzR8}88ma)A?c1fkZzU9&hG*m)n4vz3Gs^m2LX*w;H2yY#9hY4`Vo z8D}vVVM~RQzt&@AjP>*)B5<)--_q#g@l$PtyWsvpxdHseJTI`sZ#1Pyb$14q1LF4D za~A11TiEt~dp}|Pbaa2$jZQMK4|!_4u~11pU4jT5*srakiP|DA=jGQgD3PdFvCU5P z0~~TE<&aAl8?46q-t;>cYVYkVW%|51*fHV^ZF3f_Z5!A4s09H)zp@ja(QjR|uB|na zaTO0D_dBt_r_Xor!Kg1jD=~FZ6?+sI{iNcN2&aQywSUDzc`EmWk}Da>J+j9pjFrRy zENY@;do%l8$vo53B9(@*_y(ycuH+N6aU;x&`Rc{T#M%LRuZi!QPb?HS*y+N z0JX{evF8B-FW9~e$5WQO^}nU5WWW|AIB!Rg>mDJ}o^{Pg>nooN3)$=zr6n<4;GNm+ zdJH}mY@IFYYIx(k%gOB!*kF_vKh)Z3dyU(hJD&1bS>@V!HiMjTJ8?i#`gv6=zW7VDF4^HCwTgHrNTzvd`RntGnQ}K-Kq`bKSH`lVt z|Hb#1GxGvucbNL9hCkMM{0Up)x@Ch`et6b7-nvbfagWfk{l3k|26^N7Q}KD%HAgH> z*MKVF^77myP5p2&;e$6uE^8m}Ega{oA`RIjGd8$#R^nrtzEmo< z{nO~2=S-1^NydhZe!An7?-h8$DR<@WCy@3`zMw3p8Thy%u0tZ@&+Hp#A8LGEQOunq zJ(TqPvAH1)BF+^y=E!*Dt#UW`)OAJE$QN5oac&C;-pjLv4LWxDnl%=D7mo8a+D-00 z=cMKS_Tjrk!k&h9b7?f?Tv5cAgH{sy74=zdJpbi8^|#{1?9Db0{%Gs-X7Vqj6vR4gxl#Q82_O*DF8<1DNJjye7M)uc{&y=&Np78Xg#oA)WD)Ek4 zyt}2EO%-PGuIcW`HA|j8HRMM)@``!n+O0&Z+*sRSrbH`U4)uk#S;6Tsm>1}6y zfsWsrUw`HkuH2OgbfiX~)3vglnzX(8gp z* z9qLo&FB{ER=bTAdH(0J)F4`GzwxOT8TYsPaQ^>i~u^55h3bew0`84-}sAThCaPRsU zbG@&Nzrf6zWD=&F7%himYzTdOESaiy#O92H7=7@$eX`#p5^nKaL?KP&^+n-{e$h7l zhQprpt#+@PBPxL?4PuWFI1lN0MF*?l+tVYz`pN~F3!aA_9y{>S?_$R79uZ5fWoO(V z2eJL49oUV5)~L~u)xM@_XOgLzjudcWe4@)qy=1j#4=a15uuoVjy=2{c1EpjQ6WCzY zp6yJv^Grka3df_(g_`WDD1#Z_?X0Q~!ULSJnKPlNly5Wq2No*HBowJwE>_}-^WCNI zbURx;`(GyP2=A2CGZ}rGne+ChGQQ5aPEA>~ZdrfVXepub(cQ+v!9v$!`{Hn`#L?>r zuhn~7H$3A6OH3s5Qy#+^*$VMp+TEr4t2jE}t-q*UsAixrps;9hmx35je0M3tANy)R zTCC%>P^mTDXckw2X|(vNR>bl9S1-n*erhlG>CU`8IinQ8-L={no#j^mAx=|aPIVU} zp~CsvXdSPXpbL$#RAc z>L5S*5R8Jgl1>uKTMIp!R{Q4u-C2HB7IF<{!5(}AFMWM?lc_rFt!Nq+&gK1^&Y}R7 z7cut_k-g8N44f|*M<*{j2@WNTQ}+(NKOno~TfNj#v|7m*;_6RnXd1kDx0|1K$ma{jYL_|Is#GcWj$D4HO=&J8kY9yJD`J`xW;&ZCO^4s4 zvMW+ghreV0ViX%PVegh(XGLLG#3~KrXZm8K88l(PrUq7SnXo4<{HQDgE5H54hzSw(!p$hf^llAUjL-FX36L@6GT$0_6J;AZLI=E@*&DP;{jP7O;}M|T%jBj7;x4xB~!&zjpbVIl*H2{fWj)>G zHQkUEV1~=hMuP#lt00%bASQ-PSs)Xx0+)FejmyLZr<#kSxu&HXgFbSMhjI*@Pb@v% z7=E1@`I7i=1!r#IKW*!B;Qvx^=2cVB;Zk#2=4q6|Kr?5-n)`Rz3;dck`K|0xApS0U zR0igMko}L09nx3+Cqe#;zs!|r+x_2R(2gh*5(m98w3cGTLlt;16;lo ztKeax86I&;=zS`Znz4Sgi`4S_39YN>*{m%OIELkhHlSa@C3GR+S*Imu!G=e*qr9OE zH)6XP?s%k?nQG{A;ZZ$Be?*9X0Zcn1qUc(cB?+8p5WeaVTh&3eODPl^^Fh50+pfF1 z!qZodQshcczSM|RAdj}V980B1@C&+!nEOet{?kt^uYXuNx1`10q#)w6ZRifm{@ zgNc|J61@%+;)GUr3+mzc^Rx-7Z}5sJtQ{DqzA5Jn=MvT?Hsvc3SvyS_&w`QO8&Vg> z9}LZRD$y75T9QrT(CI6S9P4I`9k3=LYR{ZBE$NiZ)}!#9u1Pp;s7&yGJD*eeim1K7 zWzq;I_iUacn(v$JBgeKILOeS$0}Zj?K1x!~Xy5rHE2j2Je{+`An9Jui{p44bEksSd zeiqMbXBTRpPMi1EXwq3`?TmGK3O;3MTdQZr!m6*eEEVG|jAJKhv^=?v$0^>-EFQu~ zY!oXJ#X0vr#7DwK{PdBxl77WGT!QYeFQ*pm}5NU`@b3H+`k-oPOSx5f2!m`k>F8EvjKv~}3{6p~4 zr~WZFaY{KjI3hVt9~sS}r~yesmkc5J2cHQ3!7_rEyoJ2^2YU#jXpKSek5uTdet;U| z?_7!+ACFVh-OLTetxC2I_IRAqjxH9KE-2RIGUQa?e8efEe>p!Fk~}q#DPabEL2eE% zEX)iAD#QH?u3xB~^AGL*uhRN~i<_TA5Xte}LINDz zd^|{;d>nkjzn9ieTz?cce!=x?RPld(|}${{$DGFgJ$~vev-OFNl3{U}ykMq&T|aQ$iZNK5As z65?mz78d3Z=4Rj%6ygx%<^QdD{k=N%3#gwJjQ_u&{xmK=q>zM#c#+116cVzE$tNJd zA;|q(P(N(zN4e=2SikJT|3|Xo<>TN&hBlYJi2SAjA0HpmB`<@pez76T6?c3EVE#`Vz~$hIjz=EQM2l<>Aj;$WDU%G z9>K*u%*)58f%{1P<+sk>FA)SgFZ360He;b->{5IEW|#bTQ~#F;9<{{3?UKma-2aDN z@)tw-HDbNg_#b=We>Id}DB}N2>qu1pJ&G6p)kOc)t{}2j|4+4BuGQl*f~@~6vz5sh z>3(f_4FstT5BClRw&p)2zYQV{Fvo$~vKSA<6mW`nd@@7>K3`VRtkc&0aXOI}72ej0CCNRj5uWK#WMjD)yG_LnT?cY8qnRTbNg~%vd92y7xgF z(((%%Z_{|nj-D`S8m{#)%h5eX1^h_fg;Vc`&2NYzq%(8@ zwP-IwN4))w4>`Uhk0ez)Cizrs^kn;aX}An(w|NgLe+snCDOMthf4q95zH%IQH(Pjx zWh5g26!V#sZq;i2%9~IUk=1wJ-^ig5J#xd*vi^6&B{D^AiyI$}1hvHPYgLKJ2z7EpiS0rPg&k75$p=8wK(!)cb|N6rI%AzP(}KjP?rH zDGLv}HPLJx$L}qH0WO<#CDRHDSp%hB>%@5)BwhT3da??p^02NF84fEo7c1P2CN8~k z;?!B0@ItajI7YxU=26r0#XTA!8kzayTY@Espdl$H4st%9OJk08%KUXdbOJl|iowdGw3L_pM_D2IZ ze}Miwp$PxF8~m}M{|lj@yy|a+g50M6Cqfba_YhxK)yxhV1OE~M!0UN(Khi`0NcufmFAPGyq^RTXP>%fROwoz#G zpsVj}a$xV=p!1^2yPkB{pLO=4_SuE2)Onhk5c`eD8|;>HK|wM>&BUhD3Nag^wrvBM zUnOI;($R_R{Fw5zPmK2#kP%t!LHd3^TK^r7zyaC}U6Pjg~h`KrQ# zU{;^a(|T5*>q&2;>a&8!b727p^s^rmKu;l!*NzbSIv+}fA+fABM>k9274K+vWGsbAgbB7fEK@vws z;tl6#ZO7kb65!@1EFEpy^ zH>y&Zu2M-hz)>lrWyWcZkF9YQ`<6UOFfFXjKtqYI5-H3~-5L>V-rm*LJpY|bNLWdQ z5dN&GPfBQ;#16 zOMUH1iJ`wKKywh%^>$7tUt_&j!>(7;oP%6po#J@M`z@^UO15pFK7MguPFX<12j}r%_TTcl64W zw4e~Q!g8>AQU<3lnISyTql&G%%z7p(m1XKqNg4CgeW9m=#EdHuWNr`fL^A?YxLsBG zJk#f(=h007ix~auC!>Mf==&I>84N9(yUcX*mb&*O=d^&LBKL>eQW*2!6UN|%khhG7xPkuZf%{=_R{{3#@Y3Fr^hg;dlBLn>N`XcxW-22yvB zn}CbGUraj6#vim9ZxZV42T>fh#=Fa|cfwy!+w8=$m?9*ktjlJ(i^aX`AuW{kFoJ8D zF^}wJbun;Z)E4Gl?NKun&<6JXPPXmtuAS~j-@`umJfx3=J=w}9NK(NVMvBeBMP;-c zMqQT<>m+Oha|2faGtt^afC`1Y5vjF4jrCP|I!Y~xmH?NtwZUcp{mlWcxtsCC(rwq% ztzM2D-5k9N@CQDFkWzo{;C%JePrlY&+a4NVO;m5EYUZjW>$tJFnLD4lO`=<|-VKuV za8tLw;Xes7Wo}1+?ZKo0@Ry-w47kN-@}Ind4&=99!LaDOq>Comi;{(GYK~eyr!1w| z)~)Va5oIZMH?0vqdc{zl`g|fXrk({7)j}9hM0w{6 zA#u{RQBVfccEB0-=y`MH!J%9QFGUBuI_+Q-!zJ}$97x`9EsS+Ntnv%B)~7rx@S9q; z>NG|Y$T+?H-cZ=t8Kf?z31BirH=-wVRgJs@HM{$yCV-lyl!&H6 ze1Gb*xME}fJ&Wa(!+R0%*!H8xjJ~^v&U?>crZneZfGCw1yxYZ1y!2}66zkN~)dg`w z9AQY;t*OYAo(XNGnX8^U556DZiu%fPn}e?cYa+^vChh#|s#L;2cef&14z&%a8;xnv z*%u1aA;u}1aT1v)WbR`jFK1KMaYFB_x%=eJ9av0EKYNciv#W0abv0X`A$G)fazC#; zLF0Qn_uOWB`gzmWpauJYtJ{lnNAIpzK%X}kk)Us+Iq0};vBARctzy^8bBf)yd0fM2 zDwr+$DN_*JP`2%aYv=`0BOIG4FGhAft5mMDlPhuBWRBxAezcI!9W3`6;L9)0f_C6R zQ5&#Iy$*Kq*_#9w4O>zAa&gIsSo$SK&nTdEaj8MFYKr6u#$G2cq?umpM4{)|NFi z30`22p1dA|3$}u@Dn$qe%F9#KNaga0+6)f`3$N-sxA^;mm3DNlKA3%7ub@YtTV~Gb z&dIcOcPcG7N`1feakV*~1Q#@kYClA&-Gi?kHwZo)2**fK2QKP-FV?hckauX%Un`ck zyHJ_n*zP4RDRr&gg}dUJ`>oMD4PUbr1)-Vj@ix0jvq?NJyelb#M`>ZrgcV6A7Go zG2s9Y^d*{TM8 zg3v#zvEnq)5&X*WB4y{yzOwo{jB8YZfp~)MMGbLftw3+4AEK@B=(WSM?fUt87FqhD zGU_q9(#kB+qgu87_R!Q;c8hyUhUF=3r(|&=N;$6*8Dws_Ac?lsucno7tRDZ(rbcD_ z3CBdL;Ywo4YTWx3%^Mvt9Y+cozOpfs&A1LtU`Iso{bjVOB=zB`LDs`Qky77Mnd*gj zKxxz>OQ}XDBJyr7)ZH4eUQ8S{ z5f~V*)B=bYz6Fuk1vrmlyt02mQ@9lkXEL~Q<**s@$d-r*Q=rS;M0CPD>Ua>~-)MIJ zfSXF1rG+V*@y70`l77&Xz(<%-RSQQDaJxpo0t4Ex-yIHTeYwnH=9|gw_nN2`l+LTo>5)u8-5lD!?Osn2n8gpx525_;m%_eR){)^qyCu((*$E6PuLNxB*eqX zeQvLm)?fUZF{w0K7FhW~W5&z*>B{-(xAUnALMLOihQri`*W@k9W!(YlWVK!q`5_%! zFHZ*njwakml>0e1c5zvz9(Cd-?qW=p*|o@%)EK%TQnIK6S_$96C^xnuVA4^^(x86Z ztw~)6;(?qy-{eUa*uuY)2e}5$88m?{Ydi>F#mX*Psn@yY8dWuda4Iy%Ku-V)R`|J4 zT6gUVXpShbi|;}qqW?kn{$wor%$q7&+^BIsQaJQ*RDYwPeuY~#&ziQ{++gP#jyQd* z*0r04wA%00MSBqc*{kQREtfHwC-kiZ_8r2iEw@J?*0(=7Vpn~+!BAod` z9MVrMxT68D3Sr7yN-V44_vLV&ny_VqeJU-7!r(UBsf{38oru|%(lg@luVHHMHCPyL zOyE)lPN?S0@GmQDcs!y7#Z6#_(qcTZVwg!e1`Q-%0rfj?iP6c^-~$fh+E2POd>#@{ z9uB}au0m~%yq;_+$&be7!Um_62jTmDk*n2D72Op)cF`c=(J4+R#Lb2BP$^wC&+$MQ zOPe6M;F4`4d_8}_f!YupM!tqoX)hy(2Dg{lV;Q=&w5F#m@v?}9&-)0^`fXnB3fi4Q zg0XYb^hM@vnfau5PVO-)E^EmM*eq#NrN9+`@n~(*w=*eEhif{g4nDGOMiNVglDoL@-8$n+@1be7#h^ z5%gubsjYm95-Ch8guNw3YcZU|6w<&{)|_SJ<4Rp9;cW!LSy+F8doWkIex6z(qj)mx zmMd}+jz;r(HS)eU&E1uw*%KInk`=Qwb>?6&>lafz;2R~{tY|-}QjVFUP)v?Y?4Ave zo{htLFr<{%b?g{NC`hc3y?)hQ$1|mVg$*=Y;OAuxV?l=`$x1_qB#zxvEE>XKaWbW2Dn8)sF+X=SV}6T$TxevN z5rKp8y|R?ST|CUuUDEX9tA(jZyIPliS)RK+dMGEbQ8SSgQSg54j#E4jBr|~-7I}ZA z6%ciX{G(y)g{#u^azOgPEYV)HM0axxeKU$X1oE^7SfVi){%y<7%PzV;i26GR6>5hyLQ-`#dx1%?2b;k5A(cUb82+ zvGtz>MM)M2in}2S+(n6f&R|1jQ@Li*YP<>n&ro|`td36fjr&DIQXUw1*HZ^iuFRa0 zjPB|LE*Tm4p85ca2=uh+!}5p>G^w3F@n+YC=nNNVLcQAR#MC`{kM!#4lVMZWEHKAZ zvahM-n%`MtprX3POWkYu42Fl8A_0Fb|KiaBD&piU#-A6~pwo%u$b9j^@Z4xZWzK@P zw)DEnHxY-(tAahl3&}~b5HV`#ZYYo%p@It*3ygkE=jMR1b z=qLISm#k{xC!0Z_p4(zEfg5_B{E+s;pxmQgx_I}`Q>hwB&u+{63(ap{-*-5$z#FIN z_oQfbUfeN|%`D=ZAZjc`a$}&XI*a`EB{s}roCbP`YZE`|PCt|L?t>|Zs^ffwrwlf7 zi{JpxY&cC?DrOVtSm2rJaCzKV9|2(+c)S^W4vWz#AmXTp#U7WX9vn|;ElNrcumzhk zYy`BjCXzduwV`#E70W=ILS$iS>Ld0xqR+~X$)+0tAtO<+ft`YZoj%9y`$bm^X6B2S z+15c{*Y%TN2kC*;4-C#y`vecW>cfINYWG(L;jfKSYXu9pog++kCl81^;UP*(f=?zG z%2Ficq}!EpTW)mcUR}^}3lDqso<#sVoCf}w_R4eW43xg zo}`;N_(gR}kG~@z=K~}b8Q5zNf>ItyOikalHW8J_3v918YoA zFyWj1s&P8$T;v{!aIB#)oWxnC3wIxlU7aI4M1wBizsZ#Mw}A+9CC&`3*i5O=-@TP_ zXZxAR;}1lymA7<1htmYie*5Av3{P%JexV!5KCNG93Z|@Jc*BP47qtfZ0uo}D+37DE z_pyql1I~QM1{%?zEB|V@ypCpKVrlQqLhe6Uk_Oe=v%*r^p3+tOu&O-A{V*wmGh~&B@U^Dz=VTVbm*M4T?dXen6dd3 zD^5ZwoiN5Wqj)6pe$MdwBKg!}nujXjFyPE1DAvZQYL$}$)3iQ00pKtO9g2(sW9l_* zM3>J#r*wB^zk;gl^_K;BEDpYhZRWxtMz?uQ5FBHU@}M>TlkzjLP`)mA#6&$V8RFqo zB=S9U-u5jdL!8P0UrYmglqbybIMwOQ)ibk~28ctC(|Qu^UXC6jGOt*j(Nq0=`?Ghk zVP%@=N?j}@U~5{*`ZNsh5j_(tke(5JIgwMzrr|@PAq1LTyys5=9M~ggYNGuZCgi9W zQA9~cvBW43Ob9}}l&)$vaWLXKtP^%cE6i%Haq+Yis`O1Ct)5yHvIEB)GY^7153>yK zzNE{bhc=1wN;Z^kb{_`XV>E&m!latb-mH^CNY_HrVfTx0fsWTkKtAh=275^Bc60)^ z9DU0l!<=i!JHw&_PuW`!hYQhsKRX zs#6E&u3~7;FS$*2F^g5I>X$F^A~uu@C02%-qn&ys#_~z_rc9<>tUS1Sdf0e*5acYvmjb^`cJU^9GfW# zs~08^BF$XJ;vE(057AGRr@nV1IItegea1*9L8~#ZM4#Z;@4bh%(@pMad38K7rxx#Z z?Q@vRbx$=)+{uJ{&}GI~+i}4z_@=7Ci0OT3>0EMzszA&7hrB%sk>s$%Y-ZQqaYksQ zq0M>B+s}D{^`v7)`PR@?QL?wNYWq%IKktBp(#l&qHuImumMshx3*@VQ}miTn&RcW?1_y?5{W<%#2qu#n>qzmM!QG78OUQo`p)w0AgCwl6EI@Qj zAo{empO1u{T6Ra0@&~qxs&_FaAKtOo>q^9TpfbcqAZGUPmw$ zGXW19+od*u<~pwv1tuBK+6^IAz6O0H=*{&oaXLs}SQJ+ie~YGyO?Ych>AIQ>Y?-#V8>|itlbM4>ccqr z-2}I`F0i?~4Oq4I1GC@!w_JLYscG39f|ymtJKZdy=uhN<*3HBoBs@wy)E^j#*vCtd ze-4og<7p|a>tv*eU*G8caGy$+4w-;FW=(F^r5B=W*^B9LehwS+;<1_9WX3-vdtNPm zz|4 zB5w0UI0ZJLAdv!-6O@~wg?2~dP;a=|M8B@JV@6hd6gtW z_ehH}9zf|kaOpaHp6$VAYYvBFh)K$PG0S}em8gRunoacboldXHlNNJ}@uM^BKbn=< z2tI(e(N*~rvDc5vewMdNm*14-^ed@&*%2fTN{zZvZdhms4t#%9_c>)QMS17>SJ79o zrgg{c-UzX?@y$(41T0b?FW>i}mFO*qqD@U9m}d~aRxwr&h}1I@uB9nY89Rx+1ts+7 z%4fy^(lbno1(2_~meT4_n>{ICw!kUM55ZXj=^6Wc=D6HR_Czy|w{y``oz#h*`!EA8 z-ZfDM1#8N8^-7VLzj+uyCK@EBWJaK=kd}FIx39X@A)$Gieqxgn+slJb2r8@ZvRhl~ zQl}0T-|P3@i>+&QrtxBbS{Cq-Z6G!V1Ik#@{T#N{SN|kiM_?RB+^dnzH3OR1cT(Z2 zSU3!)wK4YfV3mo|y9W)$FQ)aBxQeKRVH;LdumI)P;mdLbGJ#3fagfpAW}Na_sc3Qt zPC@>`fahz^kD_uzDQJLE!zscrkgckLL|Mw=+?d3ds~AaFx9D_dEmZEIq0?L#^7YD=*;*ttE^ zt*0MxnqHA7=|KO~^Po65!fvX5fGD!tW*_R|wKpRRC3d8|Db{)RA!D7&!*Kf8`<)P- z>twS1GHdZ1ULWWIAZF^WcR)($`MU=*h5&LbV1W?KFw3YLyiM# z(=&L5yGaBa_Gcx(&mg5sueL<2>&T9PwAyDXxUw6PY<5&b55$v`+I_%1aJB2(?fdwU4yL;!11RBgZ*X%2F!IAo$}Hfz!fRspDp#;Abh| z$vg)1H|uXWlFJAM08*vVpxiWCn zS8j<95c1ihO`rsGaK|@;_H26L)Y|W-Ces3RX=`o0zc;PrslIv!(?RdYXdlI1{^pt3 zJG*=D;K@E`4L87|6T;@7nUD)Big*`-TQShY6j5SBBnu=OY6n^Qs!4Gcr!XIjNTn-6 z!@;CssjW-mpC+fwbmJni zft@y1FI)4=jvs!%e!G+?enOs17$=>8s-=XsV7gQ`HL=QQ8>Hx1E2l;_psa7K^PThWavn?5EC+n1{gSQ#`?z@Owi(ofxJ9kY?^RxqPvT77V$DQ z#4@jZ-w{RM`g~>o^JB9aL8#s=UKq$*RGL1WEBMiNBl?)%^Nv%yW{JnylFTD?iKUB9 zTN-J-4)jkewvx)G7~mY1c;c>@xv)eeWg9q)>D(mJQD4*qMg^XM^a9_1uPaGOvfOl@ zZXup19QCUqEt?vWF~I>`U^dr3aTom-J7hRj7zfilxj&*H5ddpl(g`-KXesy@xb)uX zK4-*|HQ1M>km;qXXg2Z>pFAJx3YHl@zn!0Shg@Q55!CwKWBUl^j0QhFoB*liVSJ@8 zo-I#Q*~(;OwBU!nSA|svRHrYeO*GKDI&}sgFzE0STB+3fM7ESN5?A6f|x)Wn##qP1qgbZ zK%S&^J72JUeV8|gN4s{X#}o}icQ@~(Oc?FIO&Fm|37JTp*_np+`*dcCn+;J@_F`iX z%iwr3UUxDP;(>1jotl`+ef$7RsG4F|IeqbKLjueOm6pTwNb`(#qNCn;( zLF=0I4K1fGoPO8wWWvV}IzQMaTQ-GP?pw?38Xk9U)Au!}5l*HP5>a?StwX5FyYm8K zz_$y677^SWCAi67hY4X52Kw2mL82}cI87Sr7O~R3qCMBe3OUdY#3<{`TB1vv2{mYI z5vFdo#veXVN2lhlgt2X^3}(STSJ8g3^ZF^Y6IjqjuMek}HZ}p>@|zwAT0&I&?bI z4BW#ox8&th(D1mRFa^ec>-?2^mN7b%l*~7@&CvO-cxZKLU0Q6yC{_43Sna96Hbd}C zx_Wg7-r%deSg#5oj=N|X?dgvG1k_X>m_w*e3Cm8xH@Gr~mT4Y{v{ei1y`elLW%uf% znOqD4a=_Li)hR|KP+Dfd%+po_J7|GgJO%gTIie|Uadd#codFhrUZ8M8u<)J3{Gv>0 zok|7_ftXQ-%#Xx5Kkh_;?9%|y!6O1lju&U|ek9(= zyLMAY90L-7!^TE&YbzVJ`~?saa#lYDGH`dgUM4Q}Esg;e8tc*4H5c|N@-@pd$exSn zJkqXGaAI(xI*^4~3b*#Y8Vtu`h#Elw0!)_a^6y~2N}*n1Lg`Sq-aP0|3m(}$7f(D4-~ zx3VA(cJwKFHe1)ErdCvH7$eV~q4)#yBZ`>AJNP2=T+qF_r*=Mm*2$k>Yn`frIhG0S z*TFp5e9>}&_M_F7XZf;J+Qikcrr3Qfzu zp56OKr7&J!uxs+ZIjekXm^u74>F4|zyhDoHoBna>%svu1R0<-@;fwA~Ul)anr>2er z&yim+Vt2cOG`2dok8AK(AzQkBe)feB#w=^*^KoZ?ZX@m`IZjF809cf^&biGKtOSX4 zm=*>-1h$OiU|rrVl8M-uG*X^whM2vymAs=DfYxgtT6)}7^^}HXlM96bF5BdKg)KfNDIgJ zV+B&-Va!FJ8UVan{EIwIE9>_1wukF+P2~w>itl8lWH~z)a>_ZhaxwUAa+mv{?_G;< zw9)tzhj>=RDN{!*9pS3?W>=*sjqAi~+YSz=?d#2qmY~%tW=$(Rf8_`3a4%#Ev(^qa zS`%>|Q+VQU+NQ`{>YBC2xLMIxZ)2c;ys+DiF7!>~>Kgn!PLtUv+oJ7Fs#x%`XRt{j z0Y?!Xmz__jqgQA^Y;@7=*WzG{V(!iaOqNqNv%Twc?W~K!u(6c5wSXKw;S>@xcQsvC z13lxC528{N_)k>dwA@)`X@uv)D*7V@I1A|k8f?Iwr$CTohvlmxN1>2w$cM=X7bzlmOQ z^{3rHQ7dDC=mDJQGACo(+O#eect)x83PqZ+@gS;C2wD)1q}Wfh=%C^^K|1 z8`Q4f#Mv2DO*?#oce6tLp;tndo=omlT>CIK#68&|41he==2yKmSZzN1Xe08dc4wG& zV*39f=_>!Cc)vEGv>;N_DhMJ1(y@d|cS?6JC9sr~)EA^fx}-rGmRP#Gd+4qqWr-!8 z{e7Mn`v=TDXXl)A)lDs!965K3Ogeq6$(PQ3Y^AjQve6sAx|!_b4VyaX$@A`wXy{q^ zK$Cf`#^zIFD>#+=Cb_%$*}Sk+6M=`Ga$PGnyxeD9|IKa@_+Yn=}3EZSH)EDbN)$y#^3g(g(8jXH?KXWU>p=HJ6z&&iOQY zxKh-3Prrj32GG;KBa29!R^y)SyF+O}yA-C}V&w}muJsN31o1rLIEaJFw=%f`UR|9t-_-j-udbq*^Rg87y@nzN$3 zWhqO@c8v`W$X*{4UW3!OE&QJF@zsCy`hE;!7V zf*$lu;gMJJE;=|1%cPmuj7pNJ)6>b@%ulNA9gJR(Bn{aI3d_$F+cUmY3zi8t=4sCC zxQYpza#*ymf)h4X5sFpu&RvT#l2*`nlm&rnEviFE4150!JJtj+1;fldYVaMr+;cUr zai~B+o)Et8pxA@PKoL(Dj$#}d6h;=DWuoAQ0zh>ioXZy!I^~inmEf~RX%8VWjZi#B zUekPV+kzWEi?K%fIs1As>LKLJtku$e?A$-5wH_6hJC_kSuE3eBr<&Q46VDbAGhM>C zjOVj+ZUBP0*K`XKP34A-#o`W8OD2Kjql zYFoVe4K)zfj6(ilzu4cLBx57RU_I5K1GA5%Q*Q8i*|l)? z9z~fo(aNpu?ZxOgZLWzkPrH>b3wg8KKD1ry@v+T+%~Of54rG;GShKwn^Q+P-q`eZK z`3)t5_(`Dl`^mYC0M}JxUlvZr(zR=Fw;{&r(F^*fB6z^_MIz=Jdc4tkOIZ|kgutIX zkbK}h^|GvMQk73qmnU?;*pcXsOIVEXQ76>!j9U67q^^(Yl35f}HKvbE@r2aY!7C|~ z&ri1ocOj!h5SU#$Y}P82|?7GV}>F8xb3xM+R;@=uh0lXw7aVp^1k(0=ubPscbf zS(|)*`xw_E`e>1)3Ie3T3J%|>(C;3$iopmk_RiU5)_$_>IF8?<^GZ(6P`18=a$kfF_mt_$-9WJj*7O}She!92v!M9ejW zOWe^WK2W`2$_rV4aaM6q_M2@QRYUL2pwrwN(fh*Aa-#hLlWbYxn3|e8%UWDOJY99uI5bF>{9@{+waQ%L^V3Y#A-8lGEiG`kHvZOGc`fP=Rg90-Wb7`!g4Rg>>N z(1E6#-#4fn8y?b1?;J5D32mX!oTxJlJ}cRk@q-_*gk{8c^!6u%G8G(?#JEf2xTm}J z`GKchmL=pTan&*Or{7q%nG4FwXqLq;c1hNHUgti^Cb6f|)nCCOs}Y!17PQ$BB?J6yFmSg#$Y{J6&g9q|@$mvzjhp;xA3=m)j>J zLLi6yc3*76*%t>VEG;x0IdcsYZv6e0aOv&&CHuq<5%X7azR>g5(v$!YGHShWKUxAV zjhN{Ej<+P<9ft|_#wqIZK)y8}t02wP5qzTW$UwIQ9){Gs&|$k?#ccm3S_7rv@jjDf%W(!?jM*XMQd*uA zhz45?4k2R$8o7>Pg@utpx}{ZsuX3&#;aZv^A(@99a$A(F?sCt5Y%Zjq5<(NR;e*(> zUl6PRAu^x^+rcF_(Cx&^rvSbFXk$a$B+h%_!lPAPtCwr++{_O=nZu-2^q)U6(Ojhn zcbW8Kf2Y4d-1^uC@l|j5&z!wSi{8b`Z*5OZpSwPNBZRf$XjqDWEyZ0Ma*KaK&|s?A zC8^lIcE7!)>UQQm8v6SM`>`Qc=s8JW(+I+qgFTml2bCf#H>hL%Fb!e-xlpFk>DCr!nLpA-n}t>i_ju!! z5@LQCT|vHlyT=|ZS81Bm_gZp2=>;q@7>;rag2hM^%b_A;~zp+uN2Cpc7(8tYL=GC zYM11!S`dMx?D=}~f~0xLeR0x11EwYml1T|B+t>;5*_)Ey3Dxgc9`FBFVrl6ksyCrj zj-0no&M}Hl&zYsmo29piPp|EJn-Kz9{D@h2RV(CHWj_jPYZBTSstH$vlfSnX=3Cac z-?yV<=EyiModEnO5hvGE=URG>v(M4{M#jelRrc=WxqqeHzCyz5*@bgBICGfrYsCyY zVSF1+Zt@EmrQ)IirDZ0TzqUGx8JaOm*5>c=7}iGI`?4>!gIsNtIfc;O>_=K=KgXSmHI+6Qym|?@lgXvZmg4^9>iwvv$eeB~B#v|tYP|=H2 znmg=(vlrH#r=FmlNtBXwkaDf48tt z8_s&?wjG@Udh`wk@Q`Hn$6H9B;$1}z7uL}6ks*XWr5IZdeY$H%Ux}o- zit8WG%%n^eF$3uBqpQW!I0B+cBo0m~iE(%g)f9S|vN{7ClzYo;Xr_pfw=|W|o2cUShGi|SEh%uTCMvlSUcK#{w zcD-{$oHEWt9=pFPqq9h=0b+FMG#`v4Zxa)2c+Zuf`VF|XHA@Rzse0%5Yoj))mZuLb zVJA}0j#?w8TCN;yXQl(Ie{v0%-842T=d5t^8$hhRe!L_=ZPoIx)j#NoqYU&nT6ydG zG_9;5sve&%Y6sRC(W2mM@1EMb684+fKX*v}{SD3qH>3RFn*skV!C*h|DnBup{l_`s ztC~BCHDjhSP787P?AO0#M2#oR8siE1yRzii{s`5rC6Q39g^bvFO1EsWYZKiwcS{Q! z^+vvQr{WGJL|fR%XdBit#weYY(F+Bl8$qJ&H`=Ikv-}JqYZ3WuF#*>^p`K9vj_zIW z#ICn+IlX^2sK;FQKF5FD%U;dvraU?>DllK-R2lhjBO4$d3tmv{4Z}1$UTS=PL-mK! z1c8{ON}aaLq!Fyk*~A@@HF_AtYZyRNHR=j`!y&`GZZvlr`~B@G?yljD^Sa@>%o@cx zhkt_cGIA?P$!}txkE<%Hr{d@t<0PsmW#~`u;mTh2?=)3NPMld*(*Jlg)WKhoPOZ|k zzN0%O&VO$^A1=jx%ih1gz7-*L)WTl_$t-Re+aLUXct9JuXiCt+Q+$ByifSClb^;2d z4a69MS!1}NpgUl^Bpz(bz$EG(SQ3$u2@aP0RB~gXzy>mzgBJ z&HeU=JD<7QAhb8RH9q%UXD^J@Db?O(Y9i`09C0T^7*-D5JBF`?Hoax#7Y-A+uDO^F zY8(%d@-kQ>%#_oAW9YDc^X@OSUelLzkW+lwdAlJr*=W9E`==Faue1OUssc-w() z7mZ4MU!H8nW}!H6^CxymD!lw^hK&3{tu&u;Ku4gFw57lGufCTX*Vd+Wb^Ldf>1An@ zz9897Ick2S=h#mg*Eg z{)#o!uzp1{Yb>JJ8vCWC@*ovr{3T**gYevQJHN}WUtlP;vU~KGcgZw)UQ&9Lu#)`K zdFi|p&`B-ClF0FR;xkJQ^+%svthu7j-47e0Jo5QbF}tIML$ZL_S58r}ObX52BBvyI zq{{K1J36OV73n2y_JxUA3E;*#=!1?&D{9R&qbm3y0Z$D{Q|Av<$~+bPV8Dh z_jULSp>~rs!^rj#8miP-?=P+$(I-kQ(qTr(Z6YR3`CHvD=MvXZ%>QoXiJ2r#D6`Vy zDj}Yu+kK_zlE(O>kk=3>VXJvRG`O>D18Lxpy?8ytYClJZs9x*iFoG!j8{RK2I8ctz z;>wcEY;h@P(9;mKB7!=ojO0E4HckwEVE;iT@^&w^#`U{+(3^qK|K~5xOei;YLNGZ6M*2qMm>#C*DkDiko za12TL$V2wCB${N+fJa3u1RKePjN2T&{4P6n?!og(xh5wUdlQ{;e0{hWupGoz2=?oJ zjjiMRc!0`NJd}HajC*XK0B%$6_aocXY~X|eJ4k!K=EPCJV=Dwi!4#E}sjKje z^&H^a!cRgb&DAvaV{3#z!0zNLAfPPEEkKX}(SBDw@3lOlX0*X>kquA9wOSyqDmE?A z;k`|uV6TV5mS>lVlXM!(OYnPVRI|bRHl&RP@X>FRhD-Y{90db(b2JQ1oDV525W_Jj zm(#kE;*7HNie{S@jhi7jmshUnqls0h16=?bS4WrZ^^?;her12#>hED%By^#zlzq10 ziI>cSo)gSss4acAsw4HKM++HCF@?sE0fGyGpa~&7H6YDF()6m zFEg;AR>Lety`P*EGqRPx_z(|ogXVaOKXRnoNaI}21xq0!X`S8hbzmY zEZ66drX`uhOWj`jOh7x?a)v3BmYIk>X%NZnZ8EXA-tR`YFxb$+z1t> zHiC3MOsE4Ne?P!-bZQ@bXNPN7TGm_=hR1<1WX|PYY-VY(PZ*}SF=`>`adf1)_r>b| zLc2MM;RkeAudrwAG4ee z!-5u!07z~gbBq>j^XQ@CYT_~HC4=2$_J3F;Jlzb*pJ2;hkAGMpNNU7_0%kzx!+!ZG z@ZQH{OQ$%}&XP_+)s`xd-ta%LqF3A=HC10Fq2+yF>@!0I&vd*H{reKWMeQ50z+k)j zE#qwVihD>^ycb$`!O26|1SOabf~VqSsZ@GiUzX9t@eWB}L*a?t3Sga*EvhG{PQy;n z<5~V`$CCmZi@GKGAuaEghKj!J=QZ9;75d1fK+v`rcSeH~Yme-u1{#!1lyJwq%%jNy zheuC2%1;%_ofLBFgIjqTnKC_-h;UGc{%)G3#DJ58;$kYxkxaap%rwPeAzD**C!9_L zFUXQ%a2R1Ofm`v2sP8b7@ul+a-%$q~)TO?PK&#z5p6B!UgPrH_r9l2q`H{-~pVeoW z2pKD#!^Q2WJp8yU@Wr^W(CX4A=jH1nx|bDVq_tw>x->gETRQt@tzu^E75X$48h_A@ za@KD8EW=Z0o;b=b6TO37n$mDpiqgNIENCmX+<-rj_-mGGuOT381@@Xve{6>Kp=N~d z0kDaHLm5!GE0?!L$XGXRQ+HFSRL|Lew+;g{%}W+WzSz}Cz!>N3y$(mdSdpmm8CWH# z{k;h+nosf>+*PXSUnyW+5AwCC;RlVP{t$z$w94yw3EO=OlA8eibVlT85WF1ReEG3!En= zaD4()?%$bs@if7hO_Fu`En!{e&4g%@F$Qh$B|+;VUND{0`_cL1etLECj)uTIspHVR z0lmNHjX3RAVz(i`kf!;|Pv?Q!Sl{X_$=%KH#GG4CD09Dm?bmbSK@*@?TUmlrlOxEA zQ(@{F`$U{88JJVhE|D37pS~1a_ef0cYF6XzljOOe`4)mXVp%u$$FWMY4ubcKRVjK^+@^kL%37=0ezaa$hpcL{X0MVR)hSeS#_1g{e zXro|0;bDKua9v`P z6N&A)^%brOcIkdS>7nDjH0U77326h1JBOU`FRb0RSJ=Atz4Bb2RJ=KBFo~OCtN0=1_l8Gu76QR&##` zo6sWTc2KUug_YOGe=botuy8JNxb9#AHY(quMfql_eKL^2V{iF!k@y6888fwH@KO@f zM=#(mUMxAQ^u5;)0&c)nr4G0<=Najtd4N^%=y{C-KjW&Efpn!pi()X|t87x<`{7)6 ze^>!t$<149WkHY=UUI6r*%)=G0vPWRLs!%~2pXZJ$|HD<9Yhl~=@j2(a<+)2W=y-! zE0)Mh0BkN@Okna@w_ruP9;A(0GB}5xNjT0M>Q-}lH=JJS7q9Oetja^wy}h>p6j)8Q zZ?k}A!?g{US`Y8>$}S$4T{pbUcY1_AP)F@f+jWJPWh~Dn62rWkR*0V&>$Y;0Lo^mr zS@x&1!DrFSH9uL44F90J^5a_1fgsqseyW8yBNnK`=;=l(M}f?p2hSVrlqsSVd5C}G>1eXR%!j%k1nDs8EkEeSF#g8no1J+jt7a2WH|C2DjmOcVUklsQx2H* zHqSXFmiFli1mTBRzm~eu!eKaWV)f7RBuxK+0gcbMV)`5Og;Y_tqL!~%%u~eZHkC&< z$tVHXU*6C5VNACk-xZQi7;VGvXY9HKg-h61Oi%!K`NWXUw+9Jb!wcwqGpXL7Gj=UK zXMuQcZ8)c`yG(s@X#`krtwv>RK=yk+{q5ep`b27RXCpn%Tn5tIc48j6>0H`Rr4!fs z$e)*&49;q(&au=RvOLb5CDo#oaTEEZO^K+Pc9FUjZ=x&r?q_huNpDhp1c z8e>7oRY^#4r2joK(HI`Eub+tKA1w&ylUF|yLyn`})?O{N%xXP?J|v|g>fvM$^@?^v zoB2`QtW+3>&b8^qL7*D8d!10Ll&j_LzrKfB{O`#d_3W-Npna0hpihKe&=}%w)F5X} z>C!D)k%kW?N$G)YWWM8D_E%5ia{#p4kXJMz|8UXpW*f@g%8lQyZdFdOSk(A;+oiCV z-4YkPXmlFFxrn^bz-H07EB1eqyzdh?U^#e9)QM6Mq&3>R$FeuHVd&;>)|(LuYjx6r z0BgfSQ)G&Tzy4^1WO&EE^8Wr|BCfa^Q#$^#Z0b)LpK@BJHG0r%7au{Wx({6w`Hi%>bbmh!n49hQ+TYXbAzt2Ox4~nD&U4&jLz4Q&3qk?q*r*HDLYz!7E z_dQ#;N^z9#&DqelmwDK{w)SBYHr@EEg`;EE|inp@~DW7?yRJj3TQG&m)H$wq~32#Dx zsqXOB)Ij0&JaG#lJKmhZf#a?J@G0U2ZSQA<*M~`%KQw26%pza=CitWHRE5*?1zi5b5 zsNM$i7&89Tthzpsas0%tbvGfihm=dRRcwreKH-#tvk@HdK{!x;M-yow{f%zm=W^i% zA0GxdBC^*L2 z{ASw}(4R2(_`-~G6qdT-rg^D^1R@@c!t}&!U2iZ;4`&bFqCPIQP*N@j*sk5h;!xQ` ziY$yKV9IrZk!!R)A7a97-Hkt3{|NQ^hqWT==k;&0D%i6AhVO?$-z^#~{Zdwh51IS@ z;z0Zz<}_jin&?&_!&vYitDTZcHT?!XB{(@(*3!ymy%5kXOUe`e4EC%q5X^I#5NihR z{X%P)YAn^EYHz*G?k$OxE4{$%;}6u#OqZqNvBGF_3s=@H)Y&GcL~+OL`y&JG7hew- ztCu_YIBUd`nS!+|K!4plgg2qY_U3`TV$Z89!u1uUGet4R>i^)T!J}rV`V$ms!%Emr zpKegW@|@^2tm8pH+k^MWlns{gnAl3Gr~R|lMdg%U!;Cg@BBWr>{-5r!v!6_C%{3Z6 z?GC=O3Hj#*fA7Z1GYyk#k-xy742Joh{inFGlB%0ozUY1kpWegS-#Sj%5)oapy$MZp zoyNv+ju;|_{D(gPx!NdB{hVcm+q6MLGz7akZ)z8eT%|GK@cM^c#`)MVz_={tzq;3S zTJ)7o0`FRcE9(z13QJy#iBvbUDC7 z@!!>pY?7O?|NTB%E&lvJCA&u(45s-%(X^s5ja1b)IBvGuk=Ku}nU0S{(j8dku+>>G zvk(;P>p1J4s)LkI{_8B``)vfI7=HWt)|+KnkdAo#uK}Z)q0rMj9 zPsp4TU9Do%QBQrW*vWs&_=e{A1H{{+MJ%}_|6?2SEv~X_!Adm*Hp+R&NqIvKlwMVZ zwx$cfdmU)+&Np|(RlO&U=IBpcOL!xu*d-#PYKh+EV)K5y`7&b)pC$U+$Zht>K_6Wg z(6J?DEZ+pHD}1~thacAeP7>=InVU3Ym9!dXzdWD*63E|0CDDF3t*w-AD-UHrBu;OkOGN{(DJ)MR3gRPRxux zmIrBGjye(!7a0m+RvCTw#xmf1mBzsmQ0bvgj;SIs-tdxkg zycnfEt<(Y{|l%9r9F1Id8kiN!NjeS>FZ>3$L}n6kz4aDHrM1pfqc{7@)Ybnvi5!0 ziBav^!adzG7e(#T)kl&t^u;P<+!6r3D{0sM2|bC)X4`TZU+B>dsBf)m<)t&S5$_CI zTP~=MD%R@Hdu0wI!v&xgEGqnkp!&B;CKkU-Rh(M#Y_8J(C42me-0eW_FrRUxrhnz^ zf3`zjB==W3@f-}wnE&D6INWc3PU1u`AvA$@>iU+LA(SvH?wAxaBB8TFxUt_kb#wu@ z^z?q%oP(3UQ-E+04PxxknfL5;EBpn&5b*f*@ZxU?``@*M51BnQZYC2+X@V5cNj-e; zO@3oUKuFsJy59;Cwh(}iwJye@tdI0{1WW`ktjW+~*~Na=EVwR<`aD-K_|MBGhkwRU z4;K#Pu2c%G$Ya8_hzl3QUDvyFWeKNC_)UNQKHA*(ue}J6jM%Mt32mTNRtBW-+mOMD zUAV*bDQ|9Xq2>5YQ$b|KujbsCy2WrmSaSsNa)?ywFC+vbf2f{kwyb#Ey=f_)tm=pdZJ`#0;DEMll&y=R4AI_Ht+o51oi#+$0ez9 zOR@6V4s)n&?6+RqBCPVmSEGwiu67^Aj|5UJedzUmeoePf7ufM4W_BG-wzkXk^R^Ml zJyH{6C;A3Lt*74E#*14+(-f$hPXg$-DxrKig|T5}_OY0NfF} zUDn;LIWWyQqa~(``;*hVOp0}4XWSn%DQ-GoUhy#_wQC_55p0cmaZg&4esaRnB0^+X z{XfJW3kcPSLDqE;c#`xtUJkn0dZpB`YMhuoG|Ws*PR^HQY@UN`hBm~bxrM`RCE;W7 zsoIGzq`A==7FAinhW}CjMqXSU&;4B?=1z8uf8P5>3K_tNe%GIb=@HB7#kzVBo8jn5 zU-S*1;8alMf2W#;Nm#c@O{DvLZLAej2bb+~Kb4L;TuO*-m1Wsl_|uzRE7=U&-XiTTj`=7Mi&|Xu* z*GG)K*xd(SUD4>hh>T!8%4rBOF9s<;U3aZ0(tfwBxe<;Q^aE#DkCH62;982F;&C7^ zzkx-ix0nqiugX^+^gGSr#;$E{V4PEQ{}*;rL10KPUl^IDRZU+lHgN0dXfSFSTgIoI zSO%3sh@t$!4%SR8V6+V$o)21%OAfooj&`uhQ%9wlKw$Sn6zn@D`PSUtcdv1Z0u?)Y zUJP2D=!A`Y5ZJwIky{ymT3-?`PpjJ$Oyo&`c_uboHDF)f7s2W*L(%YhA5Bw{cYtyp zmQ93{LVw81Je7jc>(5=?0L+fUcjz&E$9`+S3pQDpvwx{iFo|rDYiH%7rFjV9BRnJq zrc;QzBuZgU3U2ADJBT7eB^#Fvz5ToNe)U_s%Wmt#z&`^4V-a$@D$$3Z2Aj>pjpm~L z?_d;#$*0dEAZaOjp{b9N^L8P}bdSmsIkG?!zO0NWu+(OU_FH;6JSZTh4Jj~C%Q#*( zSiiH{?gBSeRx-1}Mek*~HYehvef*>HHmC^3@HXCwCu7JS%le+3uAbR0MB*v`$MX{4 z)YZ6W8g;_265qHw#EScRNyahdtClO|aOW37EoccfTFZ1-!s2!HK^ zUv7nJ_BQ!7>HZ66sfED36$)yaSYYlWd2kxYv)d>%0#zlYSS@#RA@bgUPv%z?1qCJ8 zX?F7_l>5^kE`!$ed!`6ix6a;Ib!N$OCNZ3LQkQua_@ZY@?o>Ye9I_g9VlmZY8S-tK z*BMc{nU0Uq!7B;>l66||n&5Y^@0+Bor!_@Wtk%1*Dg%MrPCZ zB<{%qztlmq*R3s`K4+GQ4RJd=rG_$1AKE*Av(f(Q5KCe_dNG1hq@GEZ7t=Ttt4sSGey@e5qeVyZR zivV7;U@x5q?r1rQU|D$AGzIQR>P^5_-Z!()hu77?a#8&xc>7Yi4Mx6o&P2&myl89UJ}3U&PhK3u9I=b4C`DSIrYH$d7|2eaOjgEj7t5*NsU=aYZcaf!dlbM0n~ zX?%8iM9svt~E4B>!b%L2dd({&ludeqZJiEEk=4bj|xZ3EUn-78H9w7h2)b=ejG^Xk|9Cy!?ksfY-M`{->}`8jBB6%`m`hq94!7ckuquKEppgz z1ef!i2=hb+c+yti$?LwQOG@sBUF6`a3kWLAm8Ipe&9C~*FEmUIefk*Uo%FgKpnYD$ zSQM_p;~M>mkz0ExW9UUP8t}W77UXjMkJAyQzW!%0Bis_FLM&uhVp9VT_l2tw;-U8p zY(ZBjy>Rx7<%e|=Yir1!QSo-TY)C-Kx%E4HPRmv7Z;eX9|D?gE(qCGpr?)o4DUURdRjsc|B6xgaFzi-TD~zRzw55YySBRN4(UP(9`!syKFqrGJ z^l%8GH`{V!ND-VWA<4Yb{q-~tjAUi7{?Kd#t?nUYD{Y#$v(#@WgrgJgvETtomTs}^ znKm=~&hbA)@65>0LzNRqGE_=3I9mzvyCpn{>+)$-@f=GIpH~`_`!W$~k-ZlhajzAovgUhm#h+a@+tKCdXb|OotUjOLiTsit*nND4)z#zROJ#f{0SgC z6u^#7i=fmortu6)iBr7o-0bh^ad?+(9kl(Dg14KmD*jYk92}f1frw`ui3XY<*awY` zrkOH4O$v#}21?OS1EiJKk-w4WGB3UJNugSQs0v>swaZ`C-Ac3;`j}|qX;?Xx#G1x$?RlIn1lcOIbTz4>M)PG+-q$;bcKbrVVi23Y; z2!6IH*GA!+ZgJTs`YC>|WVvK8yz+EomZ5$k-aS}&@Z|Y6@a65uu_#|PO%;q3VMlsU+mdehjpfbT6OLb`>Md)A z2z?R{h!HCGsY;=5XvP`rd(i~UL9_j_PSsM)j|iKQ=*yH6-QOj)zf)=BOKkJmAG!Yi zQ!lq}v7%w$e8ujxO_nn6$9o-4k{9YQzGly3@!FRB^VNK`=NrfSDI+cAe8Sdf_115d zA@7AUTt}^u7pua}zbsn@)pA9;z5@rE2T|gW4?p1e`oJU}{WzY=eo<1}tL?xCvHS$5 zy;lIJQhX|s;^xa8mrAREFHR$ZS`h5DdW3<_UA@ zuaC{LIr2JVEF67t%x6r_#l$QP6uygg5b;$FsIFQe*jWf2t`o5)l zxavnBQDLMUn?JY1b6nLv-5%wL!CYeJsxZGy2RbIf2o;*1?Tpm-yFTGAm~aWtps9=K zu?uvl{O;{jYszP|vo=f4FZ8|!=0^nfxCZ85P%0d}m5L=H+KT``SGsmOxt`cmQp}pV zUD%CM{|E3tWyXHkckCAr6G_ILZ~Ts0vfIaFmfl_;Yu&6_THk8E z2)!s#I|aEkSBU3)j5MSxF9XZGNq-{rCoZ zd+K7SR$}U6C*lz^kXxQjPsDTlotJ)n$RkATQo*ZQoNB)kLvunzYsE!7DF=GL+Oq_;)>Ntz};b zV9AzG6CaWeU_n>pp?XSC9m}bw@ME2I%%r;By|3>baHCHBK#k7I1|h)I+#S~l*L~Im zrr{5cwMm&mB|4CzX2(ur3_6#cGlv0ubL>P{$bi<5QHFg;()x{OW+-g(V-nXo7{0Q1 zn!JaJy?}N5uF2zH{~D+S{yJQ;DO{F@lTP*E+qmr}fv!AoF5pX-RTxw07LH--q_HTbilj+vPt^OLKKg&{{1N@^GZ5faeS*4x}{?f&n&vwKC1h z#H^dQ120nI7S!%M%(4BVs+L|?>oS#OYV|xYWr}Cj_Cm~SAo+FNCHArTMhMkzxyfp> z=L%3psd;f(Ynt>~&y@p@n^{6T4^6VUJE0Iy&sm$+*- zqO0SR%UuP%=nRp+11W1GY36Jz6GDOock)9`up^Grs#_u6Na0)CIv#)o@M1I;W;7Z* zc%Eyjo(3iwhyW|O9bY9$jGi#>WjAon-_L~$DCUd7-+Mz9o7+$RrnYKlLPH)$hyEOR z-n#I}u%11{el`ya-b$&8cvS}<09{=$!7zV5l*`rcDgOa3=GT^8foLjz&o)iC%&;FA)LK8on1upe8 z_0@l?GmauqQze(-h)1W&X=XwOJH`I)QRNN9ywv>>S4-IA^WK%hs!hi!&yFF=wB=cB z7FrbZKH;EG8`^VRbw~de#D5p{Qi3_gbr2b1;mCOr6Ett?{EMUrd9ldv39?p48B!i- zQ5+a1_TfUQ4&a&L@gVN+$FsYkU_R9*LSpFXawZmZCVr=-6LTYM-GUIAFOvOhMy1O-5U+x>Uiukqoba%nTBX)~6mqMJMCNkuxFPh4)dD4RB6 ztQuccGj+usL*8kI_Cb;p3L6c}kQ_(h>&M|FdPe6vnlJ^QS~j}4mP*mglBF_*u5JdO zbc4VbL9*`87~S}uPi5Wf5o*w3^ktocexToeW#Rj#UirP{gjqprzVm1hdij~y0C!$o zioPjoPWTQE^^KB!aA#<|@Ids7?l9kJNjz zpi#tQ=?=K+B(Y7DdQ9eCr7d$lGB2?E(qR4q&;lHCnjarkir3$0ukZiPp$7^+ds%xj zk@+>r;+6Y@bm9XriI}AWzh+ju4&|l;xdP~HMwL#K7a4ch%Paoroi{ zO}-Q|R+vI@ji_eyqDmX64c%W0;8uw#`h%6DU6AcfXD)WaZj>>6_9cAB*z081wQCtw z(Tw`Ye$c7@D}boFll&KqraDe$`heI|%qrQODqyBR3pUxG!%U;Y@VQ-QVAm0xz<#!u zExeH}e8*JXU~1MwVaxCcp_?`*rn8yxsLkN%WGsO<9~X`qODX!ZEd=4>CTaToo045zYx$Ek%_N@l*O=5brdsQGoTy$)cy`Mj z1z9$V)C|>q9=KiWc&B12q*HYN?~$Z}!U6i~@%IzfI#SU8s%)RI(<;Ujb<0Sumtcm3 z1jS~%pH@UdZ=c3LmprQEXX;qD#h{Y0K(abPa^X;Xp#`1WAdMH~e?>q|b4JX_S4 zDVuaT8(jnSmw4Vc)Nj|nsYu^YBmRqEGV{s<2XcPfD$RYu%ACnGgU)KRoPTLaN$}y0 ziSr0WRHr-b>Q^1p>Qu&S|E6I%hC-s9iPS zQrT*i#yAnQZxl){4XI`fq7oPXD`y~`A!eQ4jRe~&vEjdhO>HrjL&)TUpE=|Fsm3*_ z#$8v=HVT1;q=bQ1EM##7fBbiUC_p7_Bp%*O=11B)#oNp%=D5Cp<7vN7h`-VuxP*ga zMSfR#7bK0Xg7M@tos_E5r@GkC@Lxv*07oQm)E3{?4 z<;@qmO)Z8^Lz<^qa&R@IWS{9du7Hvy;;RYY8ZaLwhvJacY^dK7M(osofMa(YtH!h2 zENSExEcSG}CW-*#n$Z+6_DG#lG2` zK(HaKfddl~vj1)zJ9oWb*-W_T#DcdI`7CwjL$PfqlEt-@mG2AYL1fKeUaMuRg@2wi z(^n}6r?s6aE z!sR`7?G3t;bk*f<%$v3n^)gn^XW zb~K(cKlo7T72d~DIlvC@;ZVtitQhR;{$AIjW-Y{YUtxF=InD}Dg~Ncl$=^F8;*42S3YStj4G1RfWiLJb0y9KdgfAxR!{H)M)sikc{p?m2 zS;b`a!uc$(GCg(r^ruOv&E~ICpN#f-*JbXK^tf?FiL(~id9F=H(`m-Qe*|;f@X1Q- zc+h!7=^2FKReE_mLpGF=HLXOzN{4+1$t%t9QCUMMTby8#3UBy;C`DkzMu&>`DN}Ha zJ6*+rU(Xw0!*u{ndb@804y<)Gwax)b)BMrU9se3a;Jd9PIIrFxEZ3_0=`oytM*Q!G~PhN4;)zz zl7;Sc$_EdY7;%X~32k5a8{h!?JP5<5hiQibajeT{K_$nWZUeh6efGFY+)=(l!;kVw zsWt_|oEqe`p3?i;#4o%Tzg&D&c}HP}V*0cr)-nGnAm3HmIad-+mQm_xawnO~9X3WT z`FF)=>UnL8gV#kwt`1+Ae{=}G$4|w1V&YXP>~ZP!BX&Q~$p#t~S4H3L<;!RAi7BxM zf5yrc&ggg|GIAzv)+sE_Z)b@C=WV=*aBG9fc``=u{855;8W?ZK_g0j}isR!sDB?u1 zHmp6Xn|nL@JXF`D)+?-R&Y-PC`l)*F)hrg=f#hlTmCV0hq&Xo;FplQH4@7xZ64#p< ze1KyXWWM(W?j!_=HL8CzfGOECf_-)<+aIL>p1#Jtq{Yo-bY)g5ReQMX)Kcc=p%VHrkluVvOi;HNlh zJ=LZ`!d26}Fcs(HN(5)G^$AFv(fh3_2WB5)y(z%bAeU*>`^#*%#-8OW_DtYwOK8T? zJaHLRv3(I@26@*}X=Tb);tCjm)J!m?LL`Q|(%09fC`FDr;+nbv+@l}*JzVe3mvsAq z%>Hspf-jXm{2#{eP1HsH#>G@N+j~eaRYha}`q_o~Gq$Zw)%U>!69W-BH-hCJCCl$) zmNzxB<-0T7xILn$j4`K(KbYh+Xs#&te(y;(RR8VQip=(vo!w-#wIzT@SPBB)5mlRX zKJx=Pmr>|_P3St_$zv<}WX{FLDq?9N?sr9(z9Fz?TF{-;op$b?Z#i62e_&@vek!+S2Zz%D;-oT1rhd)tnUkWbl)htmj zy`q?4O*zof9Qi>3mRhOIJ2Oue_+^`{v<_?B4MW0>bb+YvZ|TI++x^Amryf0FV(VWR z`u+BkUI5M6HKtx4^F~|V`Z!VhIwU(_I-Xhokoi;oylSZxXDR73qitd?l%!1enJU=} zKj$JJpKhPVK{E_M+vh9X2i1Q~YtaJcK5td7V^L@*$XM}VUlxy)Vz7WuPb5)|yQq5d zIdH9?v10=19)6&?UK`9OC_pLsbH#tn$VZKQ8tB6&h?}W%z=a;C;Q$;;pvrEX0F~qN z{{a#~?Y`<{0s2%sH?xBSl+nh{?WCQ&4WX?Zq?4O~MioVE)DWj@F9y6LjLw5>pCr6$ zZ0~w#bm={V=5$#42+Lg}wQ%WbYD5L^3z0;i`Ur>CP31R|CBr+!!%0;m33bP=K3Y^NIe7;q zA@*r|VWVv4y5~u=lwBI76WY7FsY|u|MxE{G@+H)_2UY{N1N`bQY_|>rkEg7|PS|a4 zan6~JZ-;5j(PHZ(#dhU~!Lh&RNy%Ga@?kik?L$e417D=>yU%jaXXib z*6c3*_kqON-p!!idFgB)Co`HjYb5S~?eWuHm%6{2zrUPU1lV5Xvj=XsBQS>@a-tuIX>m~{#EQXC#=^20@v$Lfbdr9 zq-@Xb;PI>C<%Sqqv&KaG}XOtp%`sjNUYA(K=?__NuY{ z5z;+raOpCkAsT^Q!Xl>0_9i8^1M5Ebba?WRu-)u*%JFTBi z9VgKt+g}#mA6QTy&$GN`<#@n-huAFzU%Q0HGAP?KwPd^48)tisPXYKc*S9?0R}|+5 z^Y)j(_T?c5mxR2o?6$)%Wtv|L~g`Gm# z-s%L{o}*i~cRHd6DBJH+8)YTvqqON}FZAYd2=EqF0kBh0wlf(pr?Fi|_^kf8Wye>jh3#I4*?{dHbq-#~*ghSOzCCvHJ7~0S=&NZxbUIMC zj#3)5Jcb7AWS9(ae3eESC(~Xo+v!itD0gVgqb^${ZbFeqoYc2tY|qe+?L}gr{T2M8 z3jRK^PeB>KB+IuFHSH3aZ;#P!k6$&mFAc6;98weLUk1P~cm>#Q>r>za*}jYGkqZRy zt|C3sUXAU}fbCvI9Kd#;a%VJbcji?%@+-Ko60*#G)iF!`vi-F6+S8U{Cs{jmoylZ% zqIr8eU^{EyARQognn;%?FmzNjG=5POLpsiAf&wG6FWx6~KEQ%*!f(HhX%gbS>#@`0)#CBx(QE z__W^GG{|;gIt*uEG6RG6K`efkSHEW|RL*4eM`sU4XZPh1N?)D_a;;oh?em+0N{wQ-`SJ`=pmyBm+c$WKOzIqMv22 zf^2u6=DJi7Z+``^sFJ@=#49NEEzR_;ibq#1;cWMZ(kI(tH^?O+wL$(BGO+)~Z0GH9 z25fiB<9cA)<)o~a>ExXO-ch!5q-=Nbfo$ghynC0iR~&(C57QUht=GYcTFbCgESR_B zSa#BdxLIBBAQR50+7w@iP;444ul;*wqF=0c1&VHx501D_O3}F z!_JS4&m4xW27uXagoQ5CW4o#vA}K9vN=FiFuLIwnP<10lay?NzlngvJDqyyS(&HCb zQpt5;dT$KM_C%EJz`Dmmu*;-`_gER*vj*W~4tgBl9UWY|NCVsLeU7lb>g+v_vAx?l z{yiMu9+qP}gVDpliWPOaY6;vXdT2P?M_|K&m&|q&x=fWaV(C`nnou>}b*WVt+j)i6 zyuu>i(w+R5&2~7W8d?_|Q0eDi`kS+zCfH}^v&Y3F*Tp@L>zU8>%yZJjc6I5A_UdeR z_J+-5IKCCmUS;g1hpgA5lb-rw`)S)S=-%yiw7Tr-;${ONcRA(gLfPF;ySkj=jB2M% z>2(I6^mAt~u-PeeQ*E1B~sRkAC~$UCMUDGa^{T-W*A6K-sPf5u2iBpME|2 zy0B&_Q8FT|x)~?Ao}|EbT}m>NR56s8*&mzQpOD^tTMu`wNQ1k^0hz;*{OjO|D5A=`VozI~3KmzXwPknPlNI=xFrv#S`}!Dj(9lcC;# zyI{Xmwm-5kpRiy)HYZJxDMwtk!nI4&WqTzbvb~C5xKB`;>MQz9*d7{G?H^F~o3ouE zC}ex@arVe{^33IW~glVqtDFG?bZ#| zrEKQ_w!;9wgHx6*;IpyV?&^_l*A7oPqdk zbY$zrE&dvPI~%awv(Db*7?#O!eStb{9Xnw&UTP0yJ5%Ru@21mk(WsLz*S9|+0k&H{ zG9x{+h2tlRou5fAT(z~wl_rpwi9&3c0zL$ax!d1 z*N*C&DWc(o${Puip(H)Ay=GV_x{;iFIUyaey)OyIG6Qn9OYsgX-ch{ADY$pY_Uu87 z?eS5qk%HPKn%M3M*nYsl^Elh*lB0j0qoA7;(CgsZ$z=3G6f=4lmO5rT{2)MklcwV) z1KMOV_br%@%wS{T0bBn%x9Rrym9o9cw`f=J{`K2;3J$HI-DjKrf%1}kdnjc4;srGU zuLj%gy@6fN0qA!0%EcM(m8&8r6=}hCu9~LDb|)Fzy~TvfUxO z-ClGH2ICrCddsskEw)>n9XDx1yFtDpZ10>f?6{9KB@^JTNxEb^Y)w!guk>P}p+scdHoRM@`HinoXDm5)`(aG-BT<(0?vRFoRql`TCK zaQ@0tXS+5|-pM`J#iy9dtK|AraCxONw!_9U-sN_|64ts?*6a1h_Iki}>-DD~+jsTq z(zoYyp_xpVV^#<2z*}%WRKc9fmmMk3ifWUFl%ZU?(T9<}%C1Z?LDy19P6j(*)NmrJm+h0;S~=&-mQWjn3Il6sr`vf2K~f-(s= zW~EJ%=pRz8PC0E5`6P)v(jeQt)2n^bwCfdCEasJz`W9CD78WkfU7Nkte#q6PScMG7GmqmTtCj(f&zDM-?OfE}E7LyD$wNiY_V$|D&MS7} zRRZB`N7tpIt;5RMfnvL`llo+P18W^%`$@odmmD3lox7_W?PJhsbNC%uxr<`ai+aV2 zHYC@;_U3z*%A&T8&b)LV>6|2BNbmS<*$(vBxa~U9v=xOjp!Bra4qmuHQD}ip6s>8) zp6dX=(bal0?I_z5MZ?1K;iR2?2`T-_$#S+QDhPA(@#q9Au z7cr$)d1q;rxATk3eD_uI_m%TYGWiu-mleNEwqsfndSJ=I10lg;$abBsOP%#D*YGo{ z(ML?b{*8vc%M_yq+FlGpD9Y-cF2oh~S}xj)*MC8-ls>l zho7>K0lvKtW3n?~vM$8M9<#e_j=ZB%$2e8Ri>}yCYaKPYcpvGQK-wP=Ft)cpzzP4` z=%L}o9;9)T6zNgg%%vh4q{?E_d03le2W# za9|AXh@>ssuX&OHy8Uj=P;7h(ke*pICs8ze?fF^sKN{jYGXFqa-8OT?m86O7^a(Qg zu^Hu|`8;6Vhpl*G&*W;fS6HoQio`Ru!aG|d+xLfNSMUntZ1*iHhioq@;+LiQR_+L? zddX~GhOvFYfd!!wf4@@Qvfcc^irE8Rgn!MF|EhmAnEAHz>@z{s<+(W9{ZXN8XYqDB z!t$7Wj#oZB@XD7(F_808sS#dX8ffpVENz@Tt!RZ=w~v8BBYML3GtJM0P!6p$zYsX< zLoV`P{J)CfA1y5o#p;3W4KlXtit5U2@3uYm9u4gbpc9fanxzShf>hYfz?Ls{OaiVF z;FAB}nC*nlNrUsPD2id7490CO*se};4I;E`m~|>*OFv*cY~ikFwhJqUg}Vk~Q~HEJ zseK8l@KKo7k0~)7$GgnE$EOX%X7(Kuxg+?cvpu+W3EW(-ZsCGjIGw78elnEA9Wpk~IUA@rm#WBi24K6-Zb#IL1F$=I zL&C!93t+aik%Cu(%xMAV{x}i|p@J1cV4iH{HZ0F>5abfD-%{u-*nzxKj$CEdyOO@m@ zS+$H}vV_lXK@C;X;tCw5F2oI8R}eL}V)n%J%uq(^DVcBCcBuzur;?l{qn#Ag^p-gE57~7THd)h!;Mjya?eA?x>%)$8W?K`|{7yD?* zc8*^+$G@9{9@}y|>ALIR&ZKvtx1-ZB%WBkET{nmTk#z|I>%t>QpMw3%St$R$FcSf~Wc8v#kOjl?7%7cr+)i&patFqmv zcsIX1K~NbT^xLp~QE2U=g>^xJ75d2AtpW;Vo1&6-ZF&mZ+1|U+B})+O4&Hf=m}&RQ zpGr9DJ)S0v_FT_g^?DmEDsb?;-Qb^du%Dk+9KqpNIC+<2Y-hiI+%~*^Ui)f!cly!{ zFrp(h=$q}_+#b6VAJAIIX*$YVrsBDhn#as8OkivWGHCzJ**=DxsYZ+2!->sN=tkI4 z({t$>e0x)*LBl5h3vX24NU0i05Dn?ev{%DV1VYhB!rrUEt^>9M>mIMjc8GU*M1$i! zeIOoVd+K0Z*5!oAvzxpC+o#B6jO`u3;EQzi`o4(|5R+8ZeJ1Xz2c72ETGZwG8Q`jZ9D_QEJG z%62Dyg#)kB{x!h%2CE$hWZ}&0TLEB1M*_aR5zl0Dd%3$h;bKx9i3=aQIeEQSr*AV` z#_2lBTb>Pe;M<$WNO1Ym1kyf9K*9doupNBU_J=^k_Hm>&AI^t1uO~EYLYb_|s5dK1 zo%W4t0{4jejfM>yxo0<*-$)e?q1GL?8qmE&!wC|=_F>`v>xpT7aVZ0dFqTnfyK+PW z1#95@fOUtx#WJoWu4-84U9)(qxm1kphwWr+4}#X6>(|5e>v#0&wz3Cohp9WT+;nC) zT*^e5Zs&Gt7Xw_1ev?9-gdvIU*A?SQK3*LQzpocPK%^{O2saf@fz;^f5 zISwh??K8GHN2ckK?fylUzJTq;G{0iBxV^x3S*lg+X3OL#Rzxg^zw4P)w_loS9kay> zoWDMfl?6O-QYn2jVE!^O+C`H4BELv~l;#1_T#P$s^ zlfgO<_*6P9KZb=T2LDUJ=V+cds^lun^fHSR+pV`A#lE!Oa*S4($JkjmRSsjl?Feme zKBasotsvie+aasH#1JWg#Jvbc7F+IDR!u+v*Vr1Z3rh7OZ2*E7!F)Dq^F zt+#32-Q?>>DTB?7w(HVNW|Vpsu>C%veUjMzKt7k+Ifjf}MBX`uyxE8h4m}&r12>Ud z&B)s)k?Y;?wNF3!>HzX)J@RG)a^yZ$g?k!rhlTRw36y zk*f=kw$)PFPd#(mwGw%chn!hYXxspVw5~@kFGRXlfMa6)7K4TjjFzav;pCd(q(ajU#GLl*D!f7ugMN#O#v^)QyC{C1jO~ZE&fCxkZM?xR zM4L~IQY+_-(J2Zgk<>|&<%07L#GegkeLHK;-)5WqW46%`#s)tb<*!O$KA|hl+s^oI z7V#I{=B+rqq>8_<1a^|CPVkkeusv%19-BAa73?B}O>szOCX&rQ{*-F;1qu0;Nc_ia^G1IM|7?v^XXb>>9Jhv(n?D#6et;J@ z_^T=DScsz_N99b*jPQBwUNavu!8KthbTSZtoxW$a(I3qfW_XEnuQ@ve?Nq3=#HGge zjgakF$1v|o`(;NkgKhXH20nN5nJxIzCbHiA^w!yL`WyZkf9t75IX01}&CZ1rzr*95 zc^B8I-UU)COy1`szZenzGt=;YsL0R8$gc)7#^+n@E1#d&%Y|6(cFFCrJfCg$;j$Tj zV&gwjZycw%#r)k>#Q)4z*zFpar$p?0nK;GGlxv&kKJYjAH~t^nv7m>3Zg|!wYmr}# z;m9wuEUq6@p*pqgy2+z0gdgEcut(%q!x>)%PzIWxV$SL9m*+g(s`RS=Gcf+E7wKlL zb;}s-%zdMd2}1h>&i0=7kdL<`KbyiI9}1LH^-_{C5`ejU)0e zJ9zSs7RZx0r2CHQnO%302Ro4;=*Um=kbgSE190-c*vP$Nle8Ddk@tO&Pg%&fQU`ct0UW>Uf&3_~(-?I#JiUq7 zv~lj~@U$z*qG2FuiMy^P8i9=^Ylf4`hEsO-#h_qMdJ5YW5_lNAr}xDt_a_D(Sn6G~ zWJ&1SANeXtvSX8@Hs^&o zzsbSV`)jUY6{}vCtXz3uS!QH%C2#+JerYPdI$qhgzn+jfJLl-yS$`tS{(l_{eVL|A4uxu8Geobehj`f;jYWjIolahw$HjGfVZsLILtxYig zgoZ{OTx>)phk&fPSLTDKW=>k#ZrP3j+;;PhnGKwjVV9ogLwOd8S9MNu2S7L;R=N%yCzo7{3^S(_{$@wJ4kL@7c(I4a{1iY&M>N z7uj-n&aD9Wj{h{n?nF5^w;N;i>`y#paE5dJ6M=^Rq|Cdsn9-5U=twd9a5>>8yhy@wkaCqMB9F1TnjT|8SXh!(S)cl@`^5GM^d|wrD@zUU{fTKP-qQz!vE6Ze$s+H% zWlv%IK}R{;dpQB{5f;oqw)b*;`&cfWOe@&MkxuWXF}kKdoeHneOQpR-MZ75fSg2h3l~dCk%a z#k_sxvT~EJU}9kMN6PYL6)KsG)4^~Y;6Kcq{d=b8)(pO&gpW?7dMw&Ad&~}d*6fOh z&e_fsK(EI6AzDD+P+wgk3jVBGzD;R!5b}YEyETyz_UZ=??o;Z!aA+zi16#coq z>6J9D#l_c5AA=}lvXe|JKEP7B#QDfx0eWH|V#KFC!G zUd%qg*=zQ}ZWXYTublwK9)3g`IRL)2ZXLs9b@l`7YO_9H2H0+VX`FCr9O-%=`3`y^ zdC*4faAdV zL$*&4+6G}Zem)GrK2m*djled)3KqS08Gbwd%vK>z-$-cOgtSKBCLic$Bjh0$X^Dj6 z-~ii#ymKj`c?sDG@A1IH zZ@IY5TfETw;4<$6OP0uP!!N&i1hFnJROsn-^6Qq+!nb*NPO`?t1DqY}{KEsXmwL zS+*H_*6Oma3fq0-Go^@_6BJe)6jJT$SIR>tQh~Uelki`{H?#G`c9V;K@cLhpS-ib~ z?G93moA$cHKaKBZI`HyjY$qKJ#SvPz0y z=iCT}|Kz_}*ls)l86I`o=yS+7;=ksC+kq0>BkJe&tiZqZr8H*+M3ZiZ24 z$hxUO`X9+qh5SH-AMpddnSyZ{U4==I2ZCfc?S<@dx;^&fwn+X3K|a zLHZqoZ*8y`ht}OC8)sg)1${nv)xWG2!4AZ{cnkRzengt}#UdtPd)pXf`|md5Kj)1W zRRX_#6o2aT)$+klwxFSko$AS-g`sqvi~4iv;6LHr3X)v$%+3$-j|qPcM%u@aj&Z`p zE~FtG`3g_fknWW*nNdk#KE_QB@|FM#)d?uuA;zWeK61|k8-ar#+rts?L9A)5LDLp+ zvVGIWs+)Rbdld|Pl561t*rbB%Ny)wO$$i?f9TvmKr49(!w?ul17I+<4>Q%S+DVfYs zDcgHs7k9s2D3t9SK|dH_Idw6ZJ#57MajD71$ph*n*({jMb?xq1%q zzeEh|qPTe~FMN+pp7}iydu>OkxwI;tdY^0^Ti`|buR-prZB*(A zii2zyJ-trG^a~nx!pb+YWNcr*yu$GNnb;j+_3I_-Y+t#wg7}jWmgg)ED^g^;UraXs z(f*0eqR`rqV2Q7w46A|k5)^y*?-*j0r2l zKbg~at;0sJLHs(u673eII{>eaN*31uCy)QMKO5RFNmXLIcnS7h%v%NO>AiK#797qK zR!Y^Cp7~BbMNYg*Ln+%Cg&R0N<>=0O@X;zM-5A9(43j@{u-$e9GFgG`CbxZX0#~Nv z#Ev{|I1u%2&$Kq2wk2h!xUgl0{ zIKlKTZWZP{+-})A4rC1o-*OLV=9dfcI@q^LEnCNCUmPa@kNsct|LsrnR9OuK>^jEG z?-gA7r;+&JJBQ?h;5vWvK>lroyf0C@!nbTZiXXfz9~?e|d}j?!`?XF4%Y`nqAlLAp z4f%%|1bd^}%<0uo=?Ug2)i=u7{)ILE)KCaM(zp?M-~^-i?iFyYYr|$@;|8<(sDhC+ zbl;^UAQ5Z`nJkhX=)kvQ*MW~oCD)Uad*YM&V5tl&hJ;8@#12yM1DO(1`x4Ti$xmE< zYPE+r)U$4pSKT6Q>f5DAR}j~~&)&0(Y12g~^)e{k(`GxJ(#fPp7sA?Yx3=LD?>Tc{1DryCx>+8EiNI7&i$kqBCS{_bb_ohrNFyPgMgs_ji`q zIW7m+DX~2^N0IFd!H8c4->(#7I}j1OYy6+V`~?L%uaf}>rsZMypT>U;=3H}Oq(s^C z^BlZ)+XGgk0>_xBd)MIa*H`8;C$A#okMVmSu;SXY-FC}%e46_qQ}tQM_9_|M4gYLm zI_PC~K5$;YxACXaDe|9^QsJ$r{rv}>|wUvWi~;n6uscK9Q?-KDbXCN-<05S z(~o8{i*EQ&2kEOy!6yPBKy@2bq_-+ee!tS<-TmMgoH_5@IN?sQ6qqi^)gC1cpGCe} zj6eH}iJZ)`m;9e0@`n{LJXbX8D*EDe=^Hc$`S=Yy+qpD`KX!m~#)<6{#B;}yj~($d zKe0m^A_3kB%0kYrljrK)D`oy%BirRqHEe|CG!2^!8aEi9ib}pBlmOp;T`z3MJ`q&I zgXBtBDifdBmzdm_s1~^=DdRmMtuGz^}oa%A4bvQ%u6o$4$$Bof(}D^OpI9nZ<`DmB zV%q6t6}Q#VXO9f*K=aP|;_mvMt<210lCj<79h@!m+I%=@6pu+)Y@a*gHv4U7qc121 zf1hjgId#^DTyn!kt9UU+X*<-kKQG&jf5%q*=W7)4`?<`PJjJ>f1>deAlY!+l=W?WM zG*&5?k+I#rx)1nv^$JGj`8VaWz}HS{WIJWBMRpFe?FLNL&)mlAZNRIBj-ZZxRK|9> zn!zLN;*NZ@4YE6Vd`?TQ3Knr^ddi*DV_YCE%GQHx!i{m zegd%FplyxO zJt#=T18hel_o>)!w_P~ZA0wq?{d2LM?pI7%nm23E1NlYuQpS&&)?1tBTJvfB80U8}6)Y86yx6I*8)Ct+utaNXVGl&8e!XR_Ub-}@6{cZq1j?%RBGsP<)E`1O8vvK{5!~&QxQ&qHm{MsaHh0 zOw=pQa^HUGx^>GKvu#-Zs_RFe!gf~k82Rit@d^HGNB-_UWv()n2CgIbb5L#@%8C8+ zTALmsRVdrV!$Q$eV&S#aWHf0}W4jvOfvfLNin_4XTLMk{i?F?iBS5={ z`SsY(?_^r`zRC`OA=Hj_}4;z6`)O~ljL9vUj)`;|SN?K;fcY5w~y zwkObD-)ZNwhwZ(a?X%lvX}ZOMMZ|yNwH&7B_+Su-RJ{xjkbh560=o~;9!y4`;}!dq ziWQ3IXkxou)?4s!V8$b+to#PAz)@j)VH7rz3irk4RX7ML9M--l+fCk+-m~s`XkdHz zG}%t?$LBhYzqV9)O2&4_+RJoJYzHF#2mdFN-V`Y!T_%gS@UlbV4-^dA)~&Y*KjZJ3 z`G>hvv7Oa&kKH^@K6{^dZ;w0=Zy(c+>SNHH_g|Nf^xZ)2XTf9!yVS>9@tJIzM0S*Zg3h9elxi# zD*t-2=tfGFeyZFnhk#>G5f3GZh7wAK(^GndiOSX;5+0RG{Y+AS(wdeiPssweTEOwb9lkz5&@))w6^6&-bQm4mu#ZHnD zEwff%oVBEX)xdbL+(wHMCzO3iF967x!P1r8wnoQE~`*y`-&Ci_z6E7sn*G;vb}cEf?9!pg^vJ&-BVX=|Bp0=P2H}zE|u=L z-}pl~jYa%swoOnD8{l0ktH^i+EqXC|lZ%bmEKkF8o1YC?!CCM|fXQb!H1@nbtOZ%} z6PBe-#dejf9>_|@_J>Sa`3+Wq!{wEz_;$EG2f9fItaA6Qa9DGawf;0Ka{6p1AB@L8 zr2H@oD}a~Q$zW_hWskC*v!}y3uh%)R4-@HTgw$7Wmklav?nE$NC-YXA%2P77+a0>X zI5Wy<8dZ;FW`BfF#m;#UZP_|z31>y|iWf|CA8f-&9kCrw5 zIY{|}zL?Lwlkz`r)tM`dZ#7%T?z%w zWT?~FcWHkn&UX4A4X4NUlM&Lz)c+yQ{GN#RoFPB5usrAZy4W)fZSyPl?F*Xl|351a zE>YZfDN_K8WRiK3ct3G`@O0)z|2KtbxRQyM5eQ%S#!C-%y`D_)>QZ@FWL7Sa%Y zn#*h-v{5LAk=51H`_G|ZA5|2+|Dy3O!t`BR`oU zS9;;`wM$ZW9i!pQf1u0LK8?h`9Ltkdq#sj0a{}qPi9hv0#fL~$iUoy=)8BSmi z+#?(KcK-nfuTD!F4CXTHu5BMkI<1>Y{(wCFeeq;%9u0pceqc+U#uXk|P^>=3sb&3{ z;RACTtk@w@uG#pB6#GDWL$*im$1AdUy`J*Du=%As1+YjagSxs1ZW)Kyw;O*- zRk8Gd?GB3yWgXfrT0#`r4)?`gb=*F@!4~!HY~_hmpqb-t>g!e2MG+_C@B2^2w9+hD zCSxDbWE*jsDJ~%XXhOca%_+av8R8vE#`YP1vEvqW%Es|$Z{n_-c`;k%DImhnctmD> zvJbG`vU%LPMJ;t{8Jl+pU;AMGZV@~|f$bLW6yYDlZqz8|E!M5KjsGfLF#AuoRoe)# z=rS?8I}N_Gocnl_Z7V$4Z1=MMjs#;Fp(s@iU)9tDf0$ z8{PuIQzOmz$X)4F@>@q#**?;UoBy7-jnDTXjd75}{Y&vg{dab%i0)j4{}oI+X~4d; zNL8hN2AfC)zMXJ-3$bw<(zMy|bi`{Nu{FaflHqvK5cKUjWV;BK$0Ui+8c6YQO65pu z&R}9*An4|vyhu>|>?Lb@p z!rk#;RU`v#4yg^^X}t`}Ju>Z~IR$RaVNTH!$hU3C2e-{juAU=H%dz>;%EWoHg-F^f zvl#!MnOSTC+sMO7Rg2p+`$HZHGPYNH=T>{?6^CZbM0X%E`j7FZ-Ql@wcE%;{2x(jx zw{&l!uS6JB6}~0g?Lw&RNAj*;zHUoSbdU(J{S7}+*oIvJn(3uGoSD!yGK-g2`Nw9{ZhFhg%emqx!M3~w zA(D^~iFeRGr_Cv}M)}V}YV&j4k~}|X@AI;qxhz*c>9!(xovEb7eLcD75>70o>Ok`cGX z_;+|W9)tfiWu$JfeJ#}it-Y}e$pog|MB3^H{1T|et8CUK*u%UX`gz9w@R|2n^10pr z7?X}KWoB>X1n)=LUhc5ssAEJUE3(lpvJtS|E($-kN~xwwk_kWHsol(nPK-STHqnRd z&}Y?U(IlO%`_*9fdjj&|I9h2owJvG)jX>lVBa8Q6Sur~z_WQ55Y@Sd2| zpBUShRPvcRft5T52SThu*PfhVzNR*YuJTR8lPoIUVC1)(>LO#l=!u& z;$GMo+i5|Cb51Na_{st!r{Nzh4E{O~`ITt+C5f_Uot-k+aZ4Y%%k+XT0sJO^B^vz2 z3_5xAe3EE6i?`d(XOEpiZf_)|x>C9Lzh=Rd-e-?#hquOmruBvx!1fuFmQ(##u}+G? z*lxe%5I3TU71@BX9e^Di+r%D_S$##B-1eD@?LhSXxida;RC$Tf7uK{>X|DNw-285r z{2rNPY@hSkch=|g0nBIog=O-4cf)VNn{GJg36FJDq>JAen@({X^mU#)89 z`$ph8)}Q9#OJDzGhu=j0mxm0UCA3Wt+aDR6If^Kx>#()&7uN8-12@NSO%d$Y{1+N> zEmYN$p9g=iL=C^sFKh^nTQDK@n+f%sk)|!gdU%X9ZepF;QZ}3=9!`KOjE3U@+aIvZP<80>{n(Y`_0JY{!}g0QWvl zrA(5bMj4b3ZOMSritX987vm3xYcI^2Akm+gksg{`PLQY%%<0|si>kabtG#n%bEyFD zmApN>SEQ|~T^4-Sf7!7`F{#^j3rdsxs*?O_Q+VPxmKMc^RL2L1;suhJK+%rS$}P)F zWSPvyrNx^URc;OvZSj|E4w7sPtqNaOwlP?u-oHI;QFTaiDz9XV@1E@owr8&nl4$JT zzI35v(WO1?+bX zDRfzy@9JChylf}!#nXdXSKZawPWLN@4IzE^GB?E2(l%1|t)=dYu-qWDZyBrqocJwdh_?B~drCdQNC#c9_VWIuv zy=W#=?!YUvTXeuFqRB1-XFD5ZJ2&FCE0ktk33Jwq@AX7jw!R=PR74C~irs zb77nF?vD9+-A)DFb|-Jr+D2@e$AHw>u4KrWoqgn+5{tJ>sMk(dUL29ZTt&c;+eyVb z`yS)!DauC!$TmP^bM4a_bcGVFmJ@7_LiIrn(ZeFO9>= z(>IU9lYzs(+Bwyk=<=AZH_x=8ZD86YDn->Ng_ITVSW(1{l$p zHAU^Ywi7sZ$#6>L4Po_gg09#uLG5}K-gyAp_~PNTw4V6H9>Dgrg#NSyO>76iPaRAN zYu)Htv%uxxV({ouyU@LE;dI#^fSPtc*cK8!?z8vqWLWpo$lVM|7lYQL-CSyi75y3o zupRhz5{lF52k+0dkM@0v694=BEr4$y@U?)msBrsK#sdq=gazX!(_QS5DfZ5+@Yz-E z4cHE}yMmWr>9ePbS6Im}sNfe?@Qbs3tC9txBtcCQPn;l-2nDtAf*PPWznYh{?@}n# zlF&L?*uF5dHgrKgnTS-ibC&lSbfAQi}K zI-!v51GHB`1&T#Ds8pw7?bXEg-p%2aaCuc+A3*XlEMw=Qg2z7Pjy`1$p*0R@4#SFU zvPHqpLOK890vEK4XtIeoZ6ANmZFj#D^xnNL`F)sVc{}yWcG;koa?bB{&FgjA-OoDy zo>kLbo91!rW~CY!Og2+X3iEpa<|?v#rhsp6zRNl@NcHx|jKj~2 z{CAXco5ce&U+aL4+@DxjU^_8Af*bA8Kcuja%@>Nivw&k4d*@WbOlEflKd;iKpo+h* zieFI4-&?^iNfU@ud;!}fLOuX{4N$xv)XQi4;sr9i*M)}G1%=jn3Ushvs@39r0vbaZ z{()>6uwRAkOspHEZ=n_N;k-f(Y}Z74_Oyh}#>z@=)Y+~{dmQ-~+skEamkA6)1&Qr9 z{6F^21FXq&ed7%4UaTxOSquRolMT+U(_J@9>twp>L=i{`VK_QO_67%#gr#h)i{-BM z^z?L`4tKR`o!I~XecvyEEFfZHv8~sAeb+}IAD^Dn-*@MJp7(ikY-Z)!e3)kmk6LB> zhj~^XW|5bc0Jb{-wr{9%+)$0lq*Yoi6kTOhTip`HU5XbkUZ6m63DDy1T3m~TLZJjJ z?)nvXDeg{?pv9e{f#6Um5}e@l<*jvB@;kY6X6EeKv-c1^!J)5?oH!6AoC*M}0!(qAHrkXB1pw?|H#~OO!94Zh`;B zrGhF0x}3~r;$UGT|8?6!#c*M&i`QuF)Po?ab*&telj5$Fy&jR6i?6XT8V1|2AC1yU z9f>n*Z>@$U6@1C$ych_FSCU-m>XMY?xa;|x$&O9>?&LUj-B8=R}H>^XXI*4*_ zIvY}!X25Nfg6&yT2Ab6Ot=`+b2r7>wrWQr0Ie;F3+D9wM>cSuKl`lq6d!tzetTP@- zdkY^L+edt=zDFl_fub4>KJV6-I2*u1eg|)S14VI6+VNs<0p%~OpMQ#RR9wTqCvUj6sM9DDX83B0!IvUC zO>ZLR&QS2l7pd%rDFjS*rh{L}dP$JKBma zX%6D1k@hIQt`&@6t-q<7qx{kjhBI+A;|yll4N_&p?8hY<78zbIP6lApgMucVB`dPm ztN;{5D6jfnC@&06j8Hddv)~s(@HNbm(`9zT{5LiXd)ySOJYKwgjTqeeouH3saGnho zp|PEF{EIR!J%AP0lsVMO@*NTS2pehPA2rqq%D4>PY7=P(%X8MBXRMB^Pv%z#vdnOSpSU4rZUj&Bm@U|X}Yj4v3jLR4F@5R;!xzlATSkZrev}12KAc%S z;vkKXvAh-0A<~y(^dEw<*t}hOftxlFP$J)H!&I8pfdc(ko>yBXxaUkTJ zW8tGn%(Jgl2m5%wAhW08-p|Ef`xG$=)}j0F*BhlezAAi|Qny8cQN?8-r$LcfY$#{R z?&03&Y-ULhpnl+iU9XCh9!KdLa5m7?!i?@`C^i#zT%9$y zD)5C?7G2UFIDOtA{^?;+7x4AD`D1nn$oQ9SO92a%h%9IZnAi z?+GX`w~VC~-AKFY3J?fr%qtuPxln#PGXyF$+SH_#4v)DM_WwcTRMhzRQ^WiLc6;)l z&nw)@V6yoKD=1(Vbhoh4rzct9Oc^ha*SdbOc&D%x#AmLI>p^4`L@UO&f4v2;xJ=Wf zia5a>;>!~#-YC{owE&1U@|@7G*gd5N!Q^>b`Lg44) z2vVl@^f)5^=KFA@{Ql>V$1*X)C+GAx@hMHADQGU0eJ!5z?;HM&0dKXgt~L)3dM8GL z00Uv=a$x__#=Pz!8g{{Rd70?@SQ_Y9_57BEyH!EFRI?>m@V>>!8@)tsUK-N(1=LfE zz*vz6PATP&Pb4f9;P1LUat4(4HszRE9iBX^X=XlDhW)j3sm)rI3io<75{} z*O@l9dkiV1>BJ3@yiZSRqIYL_K=j3yPPS0jRqD~tmsu^Xe}Vz)OBxk~G%3<}z)kh6 zTWKN+aF^bN`3k;2zqIWiF>QB6=)~7KQ?Vg7hHU&xHw{uT)XfPLj7VKBfh|}R0qpr% zw-iVWoxa}F+8;cQhC>4@KT-z6b9t6>YsamO>>w0^SSh4%*99kc$|h0}9)ITLI`v-fS@B6pZtDZ#|*b<^&R!2VIUGT328bP`8s=J`#Tv@Vo9 zOTU*+xb#^5*RZ>ct)05u!rV9oJ~zt;(ug2dqDN(#iN4Wimfx2v{&MW)80{sPVkLLt zWe*yv7g4G=%N9I~WDWE=4D5|wQXg9u>})bKqXBWB!InQ3`J)&%G^R6OsaBq$fjK(r z2ZxEyscD&DE2dT{1l%h5a5cM-$$~T3GwALCeoYANM^K_PApakMd7=PF1i^mr`DLhP zj}d=n&0^*~YAG0<*00MhK}NOSz;y9-i3*B2tbs@sE9;=|p^o33w*IF0^6h>fk{fedowz$EXLI^!Q$#l;5ao9jEn4Q-?LN_=z(P;3n|>fMbc{ zM>=3>jONn^yqBGQo$i6N>mHuS>WH*}inm}g>CvWZ)h0*vUk~x8LXAL2C)WOFxGkAs z_u-%gMX3)#{-InS2gHMvvf#>NU@!AE)I)N)goJo&K6DwqIv2)x^0f`E0oW@yt%tk! zkCtrAsr4D>?e$0`U3?|=lq%>*B3@yDWDzPo64`^%H>WRD=9pmOc)*O<;=-4_r{+fU z4s@l2e@0&)f55*fGIzUy!`zb4!Frz$Rwu_;2I_{^e$Ie6`VfSqkAqmFh%Ta>Crw&H zKP#+piwBQGXQ<{3`iQ2pHC5$ajf_f$#UcLiBlS5gp(^dQM>?$?-z*cX*&wxfE3Kw5 zNjxNEaUzB0*W3{cnb$B##ulUD^eJ)_=i*XZWlvUT&&F|`r7(mlf)5Q?k5`cY+(Rbo zM-1b4s@EDOQ#f5yrO9Pr2YV?3Id0HFg%Xl4p^`9-NIKX|mdSS~;HtGE?6fnSn2J{h zJiwr=7#~azNlI&o7u&}=`~_jeIz%;9K+((X3LJj`OMsIjs3F-`^5399wzE?^hlm4(|2JK zqDKjAf08IOott>h!%&iTQC;vr6z(J;+P(yntsa_-9O)#iEnsq|-m08HYBRABc}<66 z9l{GDP3&#VQ5S#ia5V0=9K)ElJET^*D3rL=rYY6-j(Ao~8$6Nbnxm@hY9}KL#nOs- z`ay~v=uzW|<+i(+v(kQ0oftUSLUz1{&NO&O+!x&J3IB{N1(+h99wh++Ifa|~C4}N( zYPD4Jy4l5Us2dB1UT4*EuOgC(Lr?hWykuN(3{zEko! zqlTNx{ECbITq|Z3kDI~%5nRA8>|ZASgRephOEZn*yHj`u^r631ExuLucIs=*&Di7= zn&J}|vQ*`fPHVsqQ>gKP1)&02DF5Jr6+`sVhgn;{B7xpJK+n(-A0?h8-K0q=unOBF z>Xn6BuK{Q2p%Ro24K25An8xkBQN8kGk8{&e*R$au0z=Fcg)p$i$R3d5cEDLOJ&p-% z%gJ#7P<4328@hu9%KJc?ysl1J$NMzpQzo_$e6czzy?GOqwrwFVG3{|E^~~D68W0gO#));OAQb{cwWs_IFR?_9<;z z-pUAUWpCBACi;|9s6`mUmNd!ThM8eHOXmV^gLaxp{US+MjgOwy%r4hRc3B<6PL&Xy z!JgehG72y=V()NMwgD1GF3X!RAGyza-P4ABWNE5}WguK?`{VOFa=jIcNP4EQmR z#qXuW-LUf-=1P$>_vn5|(`e2VcqkVPw;Kd`=!_Wug+VNGRkaS`@Hsvyd+i@}QHsJu z0&X+;9~#t*?EMjFVJE&=pF-|(S7>RC*hTujP$EMI`U+Qz#&A$Xo{zE~r#99EV}$_| z`l4e$m|RuiJt51%c6(`N(P`^Xk)UU-Q2Qo{3m1cAO^JeU2BA8L0Fgb3lc9k%j>KCW z9Y?p6L9NG^4d4Kf)(H#{n#+AZNaGhRHoKMQY1L0|Wnbq05i{$|~K(kD4#Cz@}x z9H+vWJIlj&bY+^t=Lc{GJwiW4%zg30SaTx#B@T@ag*e6o+=R$i0{dUXpRIv@V?H~m zmo8}gtE~GH473da6Nc<=;v7!*$lt8ht3L|*^2GXu?gtqMrLs5BXtA#)>Ng>I{8wn^ z!?dg2r)~pA4Y637Ot|K$B%Z0&EeOjFa1J-I2eg-w!dls)ZkSi=SelkH5)ag^9=s2$ zfaMgqp;_vIfZB@rigvZ$5;e+>V~Ylk@`;9)`8Pp1fs_O)LN}N)-Q^t4nsYKoz8($4majN{x&9BLxQ<$S}PSkyDya>lYwE)i;7?%OVuo z_k=ShyeLJ}l-J6e)WH^+)*jDdHmylN{(n4xNZ6|!g1wnW#)tlBxZapo!aSAR#RbPE zIxqmZ`>8fc&BepNBoG{J^D(b)H0EuFifBtHE?9E<3qD*?DC>!4<;0 z!s|$MAk3%c9B*PoM*j{EKV3dTwMbSz34bW5KiRzvK2LA8Sxj@-kgmELdm>H&;!Tt1 zCRyb)4afQyyZy>)2bH;w(hb3u+y2(Yg)zB@er-ELvCL9qFps}g%wAE``&0U$8U4&^ z=4kXMVvaG^h(=Qd*d=gljc%$v_d_TTac-YrVsSZM_=4s}@Y0;aG3gNz=02kc zUW^Svzfy;!y_o_%hg4`CvBir2c*Avj;Hjz<6a}|Ukw$%F!fK_ifZj0^GoQ+n$0Kyd z)QC+O&5}MJih`k4a*$y1s-3)-GZ(wfIu`2jUZTW<+6r(DFB(-yt`MhCqfdD{(R-%T z4M?>s*e{;w$}@L5Gtjg*$b?1XwBs?O!W^~K->5{F1hB3#(OCfkM>Ug^3LgAPq`h&< z)p_vf_i?k1Nv%>Q%hKqq#c1Gw)Rj|Ol#5e%+rR)HCgP(1BR~1hPPx=t!S?Kz~`n9_`b5ZY5g+935%JNK%yZ$x@= zQ+mCDFMcA38aOgh z2;ETOJ}RMTNx_G~uK+x;kVqM@H*?-x>l@fDh?;!)uLDn5fB>>0H|-x!mLe}*(K3cV ztf#w3AO}(UJX*jxnn?qUKB6`dsZb=FkOEIe4UUZO44(*e1&~ zz2QTQRcW0Sz6BoGAG4&xm-P+U#g~Zn)o)MQ-{@~OYZn^K^HPE~))W=y*!16~92US4 z(eTtt$XlFIa#tkx=g$xL`;-;^QnoHNI-9D${+fN6^wUwlg^U<6#wsyUcJYcRzs*{U zw_0Rd$2FW z1Y9gGm>Nvq(t)|xaW7#FxP)uw46Y(kNoT)(66extI`HBJ!^7oM0F z_a1EYO2ruR$WMoC&8Z?cIv1MVZ`o|ctT!CnByYgQU3tYC;FPWh7IB$8{jP2SSnHA-%Ls@@ZL09SPz1{9h&%$O8KviY z^=%B~`T!cK6~3+!$&t-$s~+(QksyqO(|=>50K=$S=kc|)S|oE4prl_h0_??U;xAkumoU#puA?kRH(CC^$R!w;ys)x(D!Zy zB?&Je&v(Em;D0PWLu8U+RUw0T^|CzZ}x-|ELwix5|O{{9Td0gLTrSqKNl>cTU8;-*{emeay zrCokUrVy?l&Q}u~Sp0TW=k?YPfg$OYO=*RMZ!1Xau2Z(6U!RpnK~4Uc{jvlXL~V9e z%sVg*uO2`Z?}EMabLGUP0WeUEn=O}(K<^y>iz#QU&!ftc#{Fc~1Y(ycVfPBQdtreq z#>cP`r*ytU(!CSYH$0&t2qqRNT`oc6wg(h5f{Rsb@?}@M&~oktz%$EE3?$%g8MwKggZftMm47gp>Btq|=zHStz4e=?YL!sz_ zmdF(Pcy@ig$-lyaN=P@$4hwM_VM5+n80xu-)TMySZ%TicY$_UrIRK_uVgvv)ShKG? zy=xoSzkKQ8g(8hpY=6nnOm;SYxsq8{0i?3d{J&u<0bw>w{5aKK+YZ)r95QETGslX6 zzdFPNE+^8CnF)D zA-BQI8bWZGi-;oLmOgbK!qMU?yP|4zc6{`eO6tLZ8@i_^nIEkDZdUKRL8%N)|0DV}Oe<&0LJ|DWe@857@!Ftf(Eeoa?dNe1km_r|O{o>csEyu4tw=23+o& z@O&0Q|4{Q#de8q92bL^bqUFGfo&O zh@7~$lm-V0f0gZk=lp($JPqQxX*5_X`QXsJ2huwP3j7fi8V~;*4RXGdB{%M}^paGajvDoNNNO>`bPb;l}=@HB0n;gM{{8+F`W#~Hc8?6(+3~(6xjd08TIpK+!a335 zwEZp~?j$GWMhyLP*t;G;z!!e6S10_7y!^s5NUH2XNf`rp{tAG#a)Fk#QASr@ zz1xv|@@K_j&Hj_0vt2(fluK{U+IXR|UJZOqQNaI}HzZCD)oFWn{eET)r14{e1>I^{ zP}a(mNDLJ?Lm)I^`pVN?s#lyDw<$olo}V<|aj0`ZO#x+|NSX*oyB0L@v%-F-p=~1c zBq9(o_ChplsG7QM+-M>;&YcG{k;WH}=!?%B8n|-3TKhZl&G>)W zXR@;cg-L=?7j-{mb$L*5f2ELXkI(skC^Us8*b9uwrNDbo0o_k+p3l0uE2gM0dM0S= z0>?nYknd2I-_>N-eYb^q1RPz$x63Fr+0IF47C@7H0>T$2O)x_?xWNMLUOyk=E1A4T^)Y->%0rShF z=3RyTxkG`t#O-dzQSRn$9Aodd@oc!I$96z{>Zm4t=P|pg{XC8qU&$#&Tqcn{C(^>%6O)nIP(v09W2( zrRlhhZjY>>ShNo8XnrgE0sG^PT`%(d;9@GCrp@*}8tNFkJ8_W&p&;7G*f3<-exFo~ zua+{6BGkw(4wzsXGnrZDxj3gwHA8E{5slV7YOkhMO@>3P7$2UI={NtSl5Vp^<%B01 z4x?)o#h#nwo*s;H+s})>McQaVBIo*GWD7e1g{)D132oL_?~&lv{6gb8Do(>XUs_Y) z4~hC&UhO#GO!+h)ILA^RA9mc?y6UTz)-2LTwAa-UnZBehH>7RCDD@-2tE)nwiw|7A zdcyz)aK)Oei3|J-->@(~7DB<`U36lfclrTQWnWF{yyOXIp2Q; z>p11eHX_A^cIx9MX{-2sS}M&h5afqA+IgTR)(CZ5*_kK?2xc`p(Z{ugrqKm|!X2(SW@k(}REL_i@Uy);dkcSY_GIwD@DK zyvF*jCe%7q`>7IXyad5kQNJJJ5O9O&qcr`x@ad|CqEs>!W^r%^*_6qoMX0X;Rs7UU zP9_Snc*;w-*vvV7?)LO(|Iy*Z0tm$977ooqBsT;=Zd2(`86>H`)SN=U>=PzR>M`bL zC1a`iKYe7baO%=2?M{U^Of(XMVYa}6&H+kf0hLY#t!NT&Vna{SYW))og*eNGUs6~` zbG_%Zp>@1!MrN)ht7Uae(6|NV7&wta9vMFDT6Og%cJ(F><~0tIt3f4gqBm6xZw%-Y zRzg4E$!@>4fFy>{W1Y!>JMizOj(4`-Z&b+Zqc4)cBBr=MRJ}wqpL?hi6_(!3={`B} z<-$q1tRNZTr=Ju&rBJ+=2IRnGxXh9|>Z~U$S>5EGZ}?uP@MgXa!1W$v&l47QYO=e4 z@~gxX@}JzjH*{td6hC3h65l#35XmAt`<13aJIf0TxM!FC0cV#!f=Y|6y7YmBTa1Pv zSiq=FBo}Yqdu8-H;8Qh_W1>00rPgqdTyOVoh2Qxf(CF)-^NKW1a`kv+!$8g75(e$Y z>6I_qYgHMv)|t4syR#ESOEWm~iUF@KCIo+&5zhIiQV21zxSKyq1iBb|*b4RX(@+D~ z8@jy~vHy6wCQH(Xzw99e2~l5frXjh^F>9t%e%7r63GOl6YZ~xj5$f(y?8`qq04y_u`Y`arO|WP1C0EE2cyta z?)NwQv@W9{ua@QH6eDV9M!Cc9CDJ4sQRK_)J#Ff2-I+b(f*Y-A0oD|HucuYb_*-uG|E_q)9H#C4iuCs!rFqk;r^fcx z=4<}Nu=ID^UU_$n9{QNgUZGJ}(uN*YOxrWz2K`4@_k3IsFkcG%li`EEL_z0pah?jjmB1Y#>Jw3r_o?mc!cp<-PuU_1kqJz**pLjH)P6<| zvD|%(-WOd9dUp||!~0bk2??6y2oT|2I*qIyoRW>w%srgCv#&~p^F>2A6vEH7kqTvd z;Ie2QLTlcvKoLMUTo0|n=>_D}vq0WUHHq+$XgFoCaXC;Gqn?yke^YT95ip(UgZjk; zyX!(5m@ET$4pEwsZ+EF8=^=FJhS~cvdlm;bisyH@5~eT?tK!*mAkhqe>=XA}Wei{e z#v`oF$-7rS7dghA8Rh$0#McMFLJYnL7q*GsXrj!;BEM7%8+?ceq|=75mHfSc-Y80K z7^|lK6<7H5`=|{EF8{%Y^k1KmL!-_Lx^CWBK_)1-He3pfOr6bbs_2>%_2R6CWsg}D z&a4500B5DPA}^nb0D)c2{C7XyTdMRi{aGQWd{+u~~&nekV~=DTg6HT1`(9`WcrQ+T7cq2fy z`e!<(+A?jHE)DuBtAb~9y!`y%=;rD2f>zGRH#xsLq;|9RvX{~F%%{~!V3 z=CL&8eG9g-Q0a@?9;Wj#0Jr6A&7gv{QX2zscGgFqiY^A@hS?9;Gt>1pF{};-rgTLw zKQ+>>JmLI>S)zeG10qs7Ek?P z&d&OK|KN2zKfmo<5eB6Vv>5uUU3ev8y7n~!D3o`p;P!{;kZTp^Z*!F;w%@k-pF>4BVXcwgg9urqb%>ur z)QxBIP1EPY|C4hP#SvTmDth_1Gl&|if!zOw?XY-i5>y=tsFv#YWXP31^kNYH{{H%` zZzHE9@^5>3+6J3j=IMT>ozF^{pHBEjs&rqS9@uC_U|fYVP2RTeTvamnxndI3wW34! zlFMlYSaOYi9C!S?sLSyyp@HvpPVO7AFWw3J%}drmEgQG>Unvdas~wNpz$DOpy)%o39~`xKMN~#_&8+vJbAzE_q8}g5{1IUWc)UPq9|08 zrb3b|d*;6dWNhWW_$fcQC<_)MCUMf7kzNB4+Im!{S)|!St?viiwi#G`b|CN3M;%B~Z;J@(6{zz+ zGTQr$4t{EhdL|)1E++W=AEm>4N{4p7X?MBoE{t(6mB@)Xf&(_{X*EH1o)tkSr?UCE zcTuI(A3;AMKsoQ#@RJtBCcG7=7|w6yzJE1!{}R2i`8&<9E$6)>3;Gx#noH zpSok}O>AcvwW~-7-5>2lHuL+-8y*pGlrsj|)ipHOmJQ7{JRaD)EX;8e`yiP1l?SkBP8VUt2adAq}}CxxE%22z>b6al$7NT0vJ4dl^@K7FdW~Gt)e%I97yn zLQ}y`Va0X45ID}in#m888*WGt9}uylL33SD|I1;yl3V-2L)%0kdcwbk(vu?$wB0`^ zEO=dKZrA=mKhS#ix(?NkD!(Sc=#$H=w}AyC7$GGd!ndij;Gcc?%s^e|>jurfwfOWn zeQt2p0nF-t>-$nPh{-f2^Ya&S^VR7eo<_d~BWA6?9BVzls{4CqbGdMXvbL2kbz=-# z6XqLx=k8wN!_bmbkT$>ta-6LI~-qLk@EXLpg?qLv|i*J`Rw z06k?W9}b5_IV3b&J-G@mt8REWORsO9BzQO zd{O5oy-Z^U!u_$r)4JQ(FV=vvl7|Y6KEwl#^+dM!ZJ^_W_=wN|dd8{KOIC(!wy4J6 zau;whQj~!tkEO`Hs`3-fWfo2xnbC!UtC&Yru+B zzO)w=4^E?01x~JZSSyRFJ3mha!4*9IE=<+xUrs|easF)&(Me|#A@=V52cXdsQy)Uv zB7pVmoaW1hdhb>br>G7j1mu7>CO=lTnE;DNCG1uZifZSj(*lD0sA`=Qwy1M$2R-Od4nAxz4; zU=n%fbTxvo}8L1WqMNB8yM<#D;j9BEd^ceJ-9gjxqb{0 zcuC2Y!0$aEl)gtK6j{O!G^+lZ`EKo>ArQ&3qoj*fcDCrK0g;?~Qldao;gF6cfYjSD zY4V?p3V*A)Y8Q16k%Z!?71G#a)X<36ISj=-n~8mONLu%-uI;zG!kgb%`|;Q$;{am><4_;=GmkP~r<1Xyov z_t4EjTQEomemqth6( zP!!3%IEPGLoI9iMJi84b9xB53-}e7hww|y0goF;I9jt(&umQFbf8*~vP8mCDDswzA zZn%_uU(5Uog&_!g_T&57MtU9d-qP&vMdC-t_-sajU)p`2<4i?++n*hd&TDgoMeE9* z&tRf6VD48hjDEx=Uy+SqIs*NVNJXB7%y19dB3=z4$M5_s<$?X-iZp+;o9B0`j+|^I z3%vSAZLLEfXYDL=?HCrTM{utddvU0xsQT_C$A8Vi?+dK@U&nX{4rPk0jeglPhUx6W zhj$N$_Yv%riR}AC!<30+G1s`P2RgQ{O7X4q(n%s~(68iQFEP$7&T-y^D4{gm68t@1 zloEKk1X3+1{rXtO0Ghxi@3n5pal+~+x=2*JW&LGH{h{jrS;;r%kiiCT&9X8ynv7(! zWdNjnW71v5RiHPbwchbu2zmVP!;8=5_2Dj4VfmKk%iS&_WyC-5VWXjxv1|FSdMg*l z%yk{A?YN~DX`_<;Zr-Pg; zOAFw!SU|;vyMq1Afq#>&4JLkuqK2;*<;s}DyMBA24b0U?WK59J79olFq6#BRN}YBO zyK^h-{_Q{D)O2Q%*xR0b$NH8Yq;ER@t7;hmx#1=lILX0?mkV~dVpgpH9w!4PRpq(T zzJIm{PRq3*|4=@{pRa;~h8gc^QM~6961_z0vKd_#{*j%(T;d`HR?R-fcA>yI2$0RM z1sQlA`u(Bn`}i+iXKhY}>Ii)UFl2~6IYUlFxerPz7ChbHz(ca(-zW*a?Uk&qPRifr*)1!18$v%GWR-AhWE4*Swv-XceZ~6kmr4mX zMUtGF;}3X+u=z3YKdyh=jppX$yV9fw;msaneDD0vxB3T0w0gQdn)gPBgvFlsM5@*&{ISR(^7*oM)*4uF(AizHSQ>9I6#thQF^<;jrNDT8>ozUr zbMmXr`|JaTk*dn$WcZd4gMVs8b=$8;o!GxTsiuDnv@E#5N_?ppDG2uvBT?9H46}D4 zr`00^Uv=IFXspv7>BC8}GDqAuX4S6RZg+Tp2_heQEn?K`RksU!?EP?W>!@Q+ai;ap z=b;b+*;%!3E++KjS@iHRV*9!3sqtzRea=~-$k4@oQsV{2&JcSpT_LJ2kk7b1 z;Jrsc&g#}XO&^9z&uduzkuGQ?ROeG#3bOnJvDcp(Siq|kHmZil1)KP z#9h^fT6q3^)UzSFbKN*={#rlMsk@YIGrd|Qu9BvZQ2u4DXW8%W?SSq6+pcC(Sbtu8 z2v6$y(AV_I9Qid`@_ep@Y?^rDRz{av*99x3#}22i0<_}SSd9m9OiX$Ie@($ zYxU1I`uVV$3vb(&#*6HEyTg={hnAYWCE2ywB>FAjqA7r_@RAT%w|Qj;Sd(Y4$H( z4dA2S_xckSOAr{6&}K&y-!eMQ)Ae-h<~c{CK_=9V3gxW`Vrks>3Y=1Z>0b_Zi?ZnU z^D|p)aZPrD4bHb2YHp(SOWR+ezS-1x4B&5Ydy9T)VuaRrdhwOt+m*x$Vk$o!x;O4m z%)n4lK@;am_utb!h8lawNs?)M{kMV&U48$<&CT!m`B5C)B4eiSPu9z$S+V~sIH{3> z-i@8+#!%K7x8B-YLkg|g{#oe*2UM54sLKw`jFmN%Gz9#i$O?e$bRUdM@1bRP$th{V z#+#?O>HvvbR3EB&CgU6J z`Q}sL+3b|dqG;XHTD!?JnnBq0P;E}Hlc1? zS2*Hi5pzq7lbM6P{^el`b~bGxwgyG*^9`klJK4$sb5B6mC>%znCwT)Ot}EZW-o7s4 zHr&Si52d?t&qD{^?cXcdy>WgXa11#Ms;P9z{pb-8^BrL4A8?($N|7qngL2Z>n4|3f zX5}+A&@3|Q-oawYX#>eAPT-dPf7nOE&Bj$&#Tq%5I|E_2Eu^$(txQP_CYkYxV4 zUf-z;yNSW{Ra_q7pxAigD?YK!`cmC-&j&x&pf7y%MvzxLVr!dDG9aeyeXN#53#32?uIbCtk;?j)7$ zG8Tlu-^TI->pp|NhjiNHBa#LrT_FJz`^LqAo~=xD(&q=Gg%r|Z8`8^Pk1vV?e`U#u z)=>xO)NjVwq_LKiVoz5cxOb!n#xZyQ@r~<=t3A^7v8`r?Q*8g&t#E3})ne3BvqQ{n z*Nfdog0^vu)6a2_TkdqcS@i05K!vi+#;pT%k5>T^3Si1$O_<=z~z(f4I|4heTY z?*z2`<46xuElDUg$@9cayg{yZ($h36!z}Pb#k-B$<>>9gH4%O#t7zn{>8B31-WR{) z;EHS{acayCd6S4tD9@D&x)@H#S^8GT?eZ{G-}BP@@3B{OgD|iIn!nJrKlRL5)SWKr z4(VXe`T@WDR=2`X$0>Qyuy$Cg0k(C~aSA@qCj}gMkm{(v=_ln1iJk&deVDI#FCU4_ zDlcB(-J^l1^`ohC#{aYnm@XW<13hmFI&fOBy)_INbI+dkU!+x6VazWW(OYKrPkS|D;-m~`tnJl`sZm1X`M;zdldblxbMIgXrXCY z@bUhBLDTsTB=e?sy4Y|ldn!N*zbdM2sR2f;bu97Ozvk!d=BLx~V&dhH>TbV>L4t2> zTXtn9)BPRri(!kcYFy8)xZ-joYlNm0Eg?U7u9&}}uZq1b3D2cBtB7u0oj{r42mJcB z`S54yo_4!CZeb>65q-lybLbcK41LC@vp+D#lBHgz3jZ`>^~ax(TSjT$*z}UZ(?7^G z-!(#}v5p3@DPtaCK%w*3n(PUzU+xr`@hX+#2c!>M0Uc^4!(yk+5ixrkVM4`#~ z$!U5Vrs5CXx7$0}VHz1dFYL}5C&tONG++BL{Dz=Rey%6Arfv6Q1vRktoAQEs6!6U5 zawxz2az+IFJJQs1u_iQ2@sQ4}tbFBwZeBgJ4ZQ^Y7dnSq_O$RO@~y==0ZFFFYK?ZH zYbqU?xOA2ta5T@Ek-*7rByvqz&-=><-v@nq4r_GZq1Fk|NDe`ERNoWj3Sm63HZP#( zYPC2jAY3qL?KrUMYQ#;cZQ-aIcf-EjrH=Ibzk&jW4Qxi^;6R^qK$+XwKMVh7ytduw zqM-DmM@xs*z7NZ{w?Q8~4-j2f=3AcOb2IVIwNin{!~c0KKfUyyZK-^_ULr*K{`|R= z82=nYl4a@p^PeGq?;glM|B0#NM2?*PZq7TzKG)?1yF2HJp#jDJ0O3F$zjo=IUXxf~ zIfhd3@S_mhRi)zOF?9C|upPW8FM0BhhF{8c;7F^nsS^THY`8*4z;+hTp2?GLy@WPM z1xGkc2E0Bi53rrO5IS~RPk)Pc*j`2pDFcrThp2K!LIYsCnXEuND?RyVCUcYsui35Z)$!&u9|^(QY!}hkl`xj^7E|3SEUYRC3M-XV)xU4oZ>=5O zQj`75|GL%n7Gf{9{CdOUXoJC!8rycavmO8U$N#C~9sCuZqSC7OspGwnRCVu7 zlAZti_Q@Yle?Xwd1h{?q;RA4m16O~Uc(~3$`s<{*itW*c6Sr@I?_PcQ;6ZoyPxtSS zgFhgjjnn|PpTBea;nVI*_wJnj?G|>~>kl7-cY#+t+K=?!5B5Qzx%$;p$H6ZJpO3CR zd;spJ`Q}yl$dFIbo2w|to9;Y*eD}%Yvv+QP1MA&?TzmMi>$h9KJa_<}zu?iJ!ggiC zkD8ta@vbD*1b#}|I7LC8PgM}cb9s$X*KcFZO>%Niq_YxetOUSzAexNr4%mFixdn9O zu~FV$sztWbLif^Ol3(f=RSro07iGKs;lq&a?+OpT&a0crul3(5NvUiH9vi^@$&>Df zkDlZ=p7UI{ciNW9DZsQVX6!%+>}4Jwmmshg0kE^>!0sNM3&8Fcne!oUA7J~YEeVkA z77UK>+ncr~jWltbVD7ej#oEV@AD?XNBHFUpzHe7b4th_YHQdC}d*(cAn%4-tGmAUz zt4m)Ws&5&Mo1`>zcqp?yseWa2-E#bHHhwqPB!i2UQ*nwSe&%7F=0#3|8>iYPd)uY> zk(2!f&vrVu5{ukz?e_zED^8DjR<;8USRZc!Ua?zU(>Nf;!JF62k2d_tQA|GuzNzZ< zGj0F9|GU~60Z_@6pOLSwR^Lg2*naoPljwh+AJqz(3^cr@+O4hS#-oSrw|})gT5l-# zVZorKddbBzw;n(K_q{tVCz?f9e*wQD`Ma-Qkv=}8CVVtvJMiuPT}QFYj%=;5Ia*(P z{WAD)lz@J|r`oIES_7UA89#jw{Q3q|A0C z#fO4Q2ac5O(6{%p9r|`APwLybiT3jgX$#A!3(IIoRJrr#)?Rw(K1xU#WP3ur8&JH0 z9R32JR{|NSSDjyK~frfd~sj@=K%?7bb2 zJ@wPI3iVT|V@F^|Y|s8MLCW?~CJx{pT)D5+)HQy*DPhxA!SS}v*2Bl%cz@AwBm3aR zt1n-^8oXqc{%E_+acKp``&UG7EZ$pDP<+6W=7pK|mm-sacyC%YuY8`_XH39$;Mh%7 zzz*5|xu@lJz;-w>OdD*6n_pK^mA&(^Sb zIwS`z%6MzoT>b93c6q#Ge+!K5m+svid*q;u?J9kVi0yZtJX!YDS@;NOszOJx*^z@k zKe*rd+bugew(G+w$92s&uYu3Gi!PovXp{tA=)C#((SLuxH~D0%zLdjKwx7Fm`+pDa z`*ePR!5JdAQT+DVHgHQtmwz17TxHPOQ)8`Ww;%rY_j@-VJ#uSn9o1a5{fBRWbr)Ux z#rViU`MRoMOU>J7+ozm5KD(7X!dv8L*`yAZC9r z*f#>I_tsB=W9I_Lz6M4yK+=r8*R*F(j?DTn0cJ9rV-VZT-A5B#M;kj>+k3ilrkYdO zqbAbEkS2qhe8tq!iq08BbRBQW9A!3%WXE*(nnAQ-i~tT_ws!T;{bvjo1oB~)-j||# zP7+#HO)dJD>E|pwoFStI>_CLw9_BkdZQ<-kA3MPIWM4bs;MtBAqH@JHlgeS=qnT32 z<1?{c9~>LSVP9Y9$u#7b^B=x-!}eIC;ZPo;E4#5*T59H=@4Efu@l!>%gFin#cz{3J z04tbkm-#nU?fT!h54yXHe)-?xi>H?$fs@@oehXZ5)6MIoBL{o`1sWxD&v$~?Pu{)> z=n8N>@krgl8&|+XF!8&uhbj7YDcie_qTZewaMW*-OgnWPew4WU(^$ZE+4DlLLG;=G zz6Gym{PdkcqZoWNa5>p>{o%uFj~>oC*P+rC0}Hj_0rWazdj@2CwV^Z=lJDwN|MvxK zA3kk6Bs|i{89Sk-Z677oj#1N*R8T)S+V{nFI$}GO#k2EEb__0oNDnQg$yxWmE!#EU zWkW8LIS$z_sC_k|W=34q^lg&q+u%rnnQ@{SaiXcHHwKz^)Encwajy>+#jI0oWmj_S zGSd#g?iQKl8kzY4#`Y~zwqv`jjv={^BmgVU0Ow<6o$X^}qhrRyJy;nd@sr1*0_zZ& zGZvf_$ZuTPmw15fvg78aNax%sc+~D_CY{`_%yxXb2XQCYM(9IM^0pIt*a>~@k^tU) z2FrGigvzWiCszZgYfaK|vVt7{8vs`})|@08+tY~d|H>&ky$7$#RCHEgar^6QQJ-A|T$bq3H? zAHDsX|3IN`N!@*;DcbeG?Rf75-g84 zTzUB5rw8|eX_vyeNwVvQZ@``GyYlnI)>{4Ej(XYSK#}eG3a$9n{me{&YzLa5Ckh>xYo&D7~9Fu!gdMOQ$m$5q;i38 z7n5BpNEQI>BH{pn%;4Dma$}ax|jwewC7QF7!@r694121$T)BgR0R+znG zz$boD|I5Ss=kNYz4Q^h(k5O7>P{;Ox*TB|{n6Xoy>aR@S4g|oC*uGOv+ea#D)HGG8 z7<+X#-pWIWwa1{oM;^v@I+F**;M+|}a|l6>9YcC3lGfN>hOyl-x}1^l(y|?Geg`*B zvSx!XN8p?djU5e*oeYee3{9L2Mq9VE9{u{K8?VP62tc;ncf(%a^`$;Q>xzBW7J02H z^n{C#^0}+>*(>wd(K*bhJZ4ljXH7v*V+==T+U27dX&Mue1=${+@m^fn?Ys9kY}{%% z&UTowlcAAguZ$f>;$6mDFvnZ6)Jy}G;r&mqq7KOR#QK#9jnUAwH>?6$T(gLj&Lw1c znxe7o0PpG|cP{ZW56cu!yCgX87f{_+=%XRqtEe7Tifk7Hyj#=Di8u)nFD771mbB0I zJ5Qbj4~FeEa>p0Sc7vAMef_b$O8vwDSuHi<(mC@ZhuUuc`sitQ?0+wfM@{U#z2e~5 zROQui1YEZM<~6IM^#-yvUwRE<;KqM@^7w;u9s0d&ueo^lH|5D@=*C)aUbi{cpx?vx zMse6zXMywQef#w&R9Ee}u?u%^|NGt@*tM>-G!@=VKWwj2H>^_ntr0VKDx3BhJ9;9T z{xnUd>C%*b6ac=Qu}7hOZ%tMT{HfcmJd)^eP*@_}T>yCQz?9ZfsZ5@udm?4pP5^T( zLZL6(t8Ibj#eT}dGRKwW%me^-poXE$b``3-p`GvCM-!Zltr#xMsjt4h;G?C{tJiH= zy*_3YQq-DFU;pQuhmW6pf92+PNZ(3z={n z`AmDqg32C^cSb9i+?00o7&@Er^~H98biu*sIKXz;B(pl9e%1S;`J~-2buk50&+w3L z%%RHm-Ja%Yp0-IoCMy86&*iW*qfD?TQB0OBLG<4W*AX_@B zukCin0iq!^Gof#`*UR#D^*xY~?f*Wn-y~tTAHMhG@h=bVQ%^K0uMBOjGCOkU`lE;6 z-M{D2c|`hlSjVit^Z3!_hY!3ukM<-dSSEAj;e+4{UGD8i80|;g+75?bI(xtS$=xT9 z7hgQ1-_q;Ar=L0j?z7?MRpQ|~1DTnh-gW%{{`kM6w{8%R9Mo4GS zJ9Xx#_Bx@ul2^?a!;stPiS!G^~y0icPKk{@Zt!Zi;=l=@ZzWnaqY#g zzW(*r?ceU*|Ml*@U+*B@g}QO~-pxDrZv2MnEuS<33_TAstWgT>l z%Ht@;?DCEs$Td6@ICkeSASv4)!7&ElKbO1RGJ*5QkMG>SfA^Qmmk%E~7QJSZ5oyv` zg6kOb$uAe%fdq%56R`98RS8Y2r3=ejw1JGW4oBn7SjOIJw;S# z+9mc}u?>Ackyt^3quK`y+jYx!S%DQ>DL=BccH-eWlf!ir4%dy4y*T(ftlWDIkc;l` zY6Gwx^X=7YMm087VQde(bPmqIY_8h<<9FSEJl%Wc$C1s7zY%%tPf*eG)BpWf4;DRZ zUTLmQ{Py4Am8$EP@kb8I=k4e2-2UOgeed?evfdksUPI;Tug`;9!kSz3WzFp)TdI%U zy7{2HJLtkG7~{88k2_p@^w%2?pLX-V`}c?zMRY$~CZl}*%FIt*nYnAYl4k50fi!&j zPE2ZOkHzx6QUm;v(_~biDh0kO+v$vi9=1C$5@~OIZm%n__p;q-WyKI@yDHenlNcjR z=yVsaGw05O|DkW*`Mu=umr0b={ZhgTk4-S+V6x`$WRKavTYKe(EB|K@>553Yj$ zdmn0OCRn=~+jzjeR)^kJO?~=yi1cV4I!QPb9oxLxJ%0vXMs?HO9K1TVo9*G^(>=|1 zcmcNC4VLY&?~w*|*bZAz7;T5Yx_9ScclYdb z9nwWlJp&4wVF$|(_kX|k=%M2YxNg+Ft@YBqJHI`7Jnwv`+>`+M9>}AHtu?4mrbfTH z%Ky}{?x#=7uAn}do<&JblE5!dfqUq@{VS}THdigU0EeNSzw?`0TZ>#Y)KA{7c7}`^ z_daaqC&M7#6$H%u2&CcDcS)sW?2(j$dJOMMxlK>!JeJ<{$#&EL3EBRy^cTVQRei8M zDtEwQ<)1Q=9ll6(ofow9%C+m?UAgsH?U@f!4+X^4OpC95l~?y_0@Td-+8OaR)8X)5 zAn~+q;%RUcm zIIl>@*#79@)yLO1Ke@JAQEMJwi+Xf596UCVBPQC-Q99aS-}y!a{1AN&wl#OM4rhSQ{AAY7QoZH>sZ&F+gBgKhQM=o z@60^Yrv6fzvR!4Gt|Hrkmo{vviT&@T2T!}t-nmVN+psFk2OH5`o%X{w(AZ!8X+)zq z^@ndBKYe=m|JgeauqdvskFPcMMsF67-g~pf*flXmlh}LjO0guyDBThT1T2ZssIk$M zrc|-U5(_HWuwuhrfZdtJeCOP|JIodc@(OJH+~+*=4YRX%XY;-O=0E>??m5q&w8&23 zFHJ4e?WeOPq8%bNZqAh)xTIh2qi(OuD?X!lLJS%;R~?qdCmOnZk!NOP>D8h+eK(wYEX4j{hOu?oYrTls3;Fwi({D5+~~tn;qFs z!A^D**{%s}5AWO#s2Wq%_~u9>45Wp$(EGC zxzvl~mNYZ(!WVxZ`{L~JFaAD0_sYd*BH>GhnUH&~j%@MCx>b_~zB; zjOZ0BGCrQcTMn$;li5_!T&j}V@AdkuQ)GJsG~wk!;?i)@0HU`{$T>E00bp-H*lqx9 zcMia&OUQPT-%b{#qAdfueaLU76RK}6bvMU$=K!2M<%6B-c3QfyDfWG{f8YGWY7*^@ zwQbDpx)ha&{<`+y%iyH1R%P@LKG-k#K;NL0KC)o%xqLq;_Fl{O^;#O&QwsL((y9Vw zH69o2svwmeJ$9*Lx1S}oVyGK4eS_8X^$@bUUCQ>y7^27XMUUo)5bU!>4`wp==ZFes z7r(-+gU@>nZlZ0&Pn%H9n z(24M9yRs8zKZbPbu)?#ly4@J$x=Xw<2>8yi9c*GNVX)T(+cOjUoj-Z`?Q2^5S8hS5 zV#VDX#c%svI9ab^^)6-OXNQuzpFOen@q-fbEKtfD3jW;v_(99;19je;?Fq_TS7hu5 z9sZhSrsQ1^@a8v%TsRGE&wTbouWap-gze3W2wNXN``1kvF6l;ZnZofwUwm$BW@6#5{Q{X9#fbu*jnnzeQMiWn_ip_g z+hw9&p9qld4dg-@?UjVQ+7DG~-Eam@gI;LP7=F_WJb6_# z^5k# zua{@Lh|hK}_7TYSxj=Oc1p9QRU^;VeO38y|VsY{IoqJm9+3pSL>0 zx9iTY+N^geXa1DWb`SN99-2{Z2CF@cf+^cQD$n+P*ca7pzlm#%feAY8wa9iU*bR?o zTzUIOZplyiy{a+Jzkb>Nct&}SiljM6W@78Z2YjyQa>aY)DuBV$!LgUm+hO6dD$J!O zDd~lgnb7&~qfz&6*`Lhjn<}4WCH{CL*X!D)X4%OSqVgJZ0GtI^4y%vKJiOvibaLc4->`RR;~t@MY`1U> z!rG5y`I3oqi0O#!5`jH&Pc_6|^9j+wb}O$q7ar2Nu$;SvuCHv}-nC5!H`wB`N?m)d z>`4tkUSVY0eqWD%{^I4<^z*#~5B4YRHY8R|Kr#pRp36w*Q`&Ch=Xi-?$L6OzurEY6 z2CW!hbYsdZ-b<)1wb?l`!rF(6!zW}=I*$n7l&@- z-?Vn@M$__D2k+(89H47aaVLGgf2OzfZ=Y9&?HYvbTI<~me({j#_K^3`?eWG4_JoeM z(Ygk)Ix4{StfZL2hn%&psMWcGV{*N!_dj_kP-@^~UN?5!&_0%)_53Nl0Hr;+#aId9 znf}q#y6@+=r%KtLtfU1JTvA%R64NGq9|qS%L#|m;#y&w>oFILF9VMMR2!UZt#VAXU z;eCqVbO}$3lN2}O-a4f00_e&7GH6-6t@56&Np<@~)a|pbZeN+G*GD$Ue5+zq!pRBc zJe-Ea!zqvLrle)6vFi$xQ9Eja?el@{Y2~qXv0 znT<4URgCSU1Jk^e#r(kZ`2nc_d9MZOa}1);Z>bd9(XMgTCskz(adm2^O3$Ub$D4R2 z7`yCiYZ9X^-&3jP*iPFEnK7kHc-kC3I6m(JZNM!q z=i_2hzHHUq{6@U=%lG%&c_ftbvkr*!>|`GKlj*@aGE)FDo$}z_y4fjpxKAncZ-To| zU0^BQ;>lQ5hTju}cQQ8!{-=P`>PWtb`%jdp&~$^WCXifql6>Y;R=GX6>-3FK3?k;` zLLT^)qwpBY9knyeC zxq_;vwNRS!ms{$8Fi9`Vc4tj}+cRg+$DX*_by-sXkTkT}0}u33m_Oy3pHer57VqUI zPdhIn^QQ}TDYn~i=GpA_9N0OwOA}+P@_<`Yxtg7b8$P$l3<(Bn= z;AMi9{(_Z$7%P?wf`7)HRsMplQDs$j;mpK6f{^8c734HHe-(+<0fMa?q+U~^k^ubv z9x3=eN{}hr1(m*gI7P5~3tqr4fr8{{$#MD-IJh=Ma3EHS>tx)A?}aO*mkI%w3a7zk zgs&7N?X4Qy`61}D4x%pdT#oh%HjV<@>&x!f@1un6=2Es}$E8lI&BpIGtrn_F**-DG zWa1v8+tVw{LKicg5 z0u>WuP_*|#D@M}QnzmBvO6vDY!Cux%$<3!MF-E4wBhO>En<)c!j_nlhbZ5-Um^a0s z#0!Lvd_=^DL4*Cl3=#2RLM zfh>>hUViEGVH=d;`}NN6T4KZNO0a#sluAO3)F#_ORcakMc<@zU#kbHH)kpqGuUkh5c z5VUGp7WB{7tpx5ag8jSE_n>D+t&uqmPM~3+FYulv8L-SDk%B!XR?wlHz{6FrZ>MB> zlsh3KL2x2nFmDEaBaAa)wBQ7B@Av*8XxA1Gb~F_1+AJ}S;4T3Bty(F$R5+;CMzGjR zaP%PWE~cdKQYG152k{;u8?KsfQjYTnk$l;=XzMi(9UR_$HXjXcy0-CGe4nNRpi z(Y_+KW9nnQ7RHmOc|Cdgc2rnef6k5ZlLvc`pZE7%iu0#m{1n4aj47+i&TFMa5@WF4 zhBLpa06&#|<|bP%D@NXmDbwvgZ%JhsR#bFW_yE8@Q&cdWP<<-V>Ol301nlFPJ7byK zqanmMhlw6XmJ}Ctv~X#pWvx24OnGb%N=3H&r+fLOd3$W_*9se6yH~=K!Mg4m8{Blm zJq%WP61FR^6}HyMK7z1)ouM7DJ>JAU&a}&Z6Z<&5w((k+@ffYES&N=b-K=EeV;N^& zzhq_2aKP_{H?K5E9(x_K`liL<12@ThDBqBW)2*EX*WfZi-t=Gr_PSf`f5Hx+e&Z z0^5HPz^i$4fvJhWf}Ue8FzO(vUtgfBBiJ0ln<%EHE{eTmWq8)w(zeB39$A zgx_Ub!Fc~ywwD)mmH0MFCS2y~Fg~SDHCtLp`86)(Ue9HimuYKy!Ql_PxU_ zChaw!wA*}gwS*~bCz3oFuQ;cmbcb@-Uikuy)PbihLD95n=i0ixYs+@d*ce)`5?Pf0 z!gi!>e0(MTZcO%VDQL!%uuhV*@6= zU)2QW^qy1Gso)kJei%3?!S|L3gElI!B}75tS^c9$VdqaXNM-+hN<$3FlIQ?S_3LEG9>rBi^eeOee{( z-99kGF|b^=zi+KwE+w9(*{B)0!xlbB9h=H$%X4gpXrgBP_u2D@FW&7NkkX&z#>gr5 zo8xKV*sY}NPbtr(neDh^F>TYJrQ4pp zdMjpLm)u{(fL1S<#@vG~1v`=J0QTEsAeh@DnVTa3?Ch=K#W$z2CHK~E*wnC9$NvD^ z)4V{mFHfI8CuLfP4V`e+Ql)h}uw6USU2hGt9i)4Q6`d-rx*i6Q0(!zQc0(F zb0F(+x?MqLhu*vSS!PmQZrHSaOGu%WQrQf~t3_`ePaUqCRYuoeAKaxKd*yBxa1Do^ zKka}1WCO05b=7Ny@q2UdED^vg02A5XSl~NHa6C-_3Lhg4%?;UJ)n#n=a7Eu6J_u*R zY3Gg#`t`yQeqJcZPAM~gs5syIhd@tPKws{z61H>0O4vRfCHjCqsK7zMH)(>~Ia5)S zE7k3A+WuXF^!+lEr~E0}^7GrP%=S9+7L5|x^L?AT#MlA08+fdeV>{?}6PG|U2Y=(Q z)|*d>Hmhc~n@-$g=}p<5{sGy}VTz{Nz?P=jpkveCg&wCBdg=V^zoywV(YDp;;Q03K z+nD3mdIu)=l}TkMi%);v4{R?>WnZG0$}UZeS-?~5vWri#6d1{Pw3WIsQj((~V=e2k zTTKHcztLuL*y-Gx;!;-hY>(*PM0D3tu9Im~LUrcuSmyR9l?P>G<)8>y&7_S%QuCd9ZQhvLX@LKCVbk};cUD2t1NauF{!gkvj zV;5w*p>?#5evA%nimDr{t5bV^J0i4scFL|t_bGcRJVm9YPZ-gVOMlBHu5>9xpy?e7oc1j&$^89{qxRv7cl9F_l2Dby4~DF z5cj7bH6CvbTq8f_HDu&=lB>>kWwcisb^BuA3H>6Jv)vgBg_%0|n-2QbY-+UWq&=p{ z;pzwp+pWCgorB+x?N#7BmFoz3eWzA!U1+8aY$a(n|EA;{Y1vpib!S-dhJ)w(1f=x! zPa>jSYQ_8>uwX9rVWjRl^5{ClbO{XI{Pd>cVL_P6n)8*QctmT?))W0|bh%7R>~Ewo33$4HnStlt2*At8%g|`n+H$l^;f{YcJZqhi1PfA5PVcLHb5gNz3;PiJ78>fyAkQqDKhu>*YRg58t2F>b!wU46FGt&`Uu4)eA;%-doQA*~o=D=jQw zMXVUm=ay8ZQ}sT5gT>VK9Vdjh8?|Q0&)d%5xG!QsvOf|&Sc*OjDE7M(*?YuVGbV{aN(5y?dvP==1;zoV|*f0Cd);- z-!wY~PV>8UZS~!oQ?BHg{FPPjeM?8apWiNHkd$OG|5smai zNwRETjeOS85`5Jc6I4K8Tbc`o4#p&z=xs9jhjgA4@ayV?A6e`rSTIk}u%V!{N7;0z zBu|FN_QT17HNk>u69lo_k@GTaPmr)3?i9_M;jnNQfYIRbp=^Fuh1gDy0NeFER+(av zfdEsdAgtf+6lm&J4d0^5P`Z4BL7v~`j+RN^NhHvVl1^TYOIz5Ej;lc&q+ z;!|m1fh93t{D_G$n9BZRSz?T&K^`ts`jc8QZr*?N_+iI40lNnW?in1g=Ntb$gZy@5 zEZ_Mx#IirX`gzB|pUHOVj)6aMvHh#1JBIr2TKH>9+LKaKcn3eE zC-bl5C%RpSu-zOJ+Jj7-amkVymW2#3at<^fyTfwI9@9w(;c5yA+r8slLed;4(nHF^ z(re2HEeqrLFB7JO^JQr^?RjZ7y7rCL%!iGd`nE*0U`sY(djhQn)?-JyOa?VC2o)iEMySESVXt%;ck?mm}9HNYD*L1X52fE$RVUM1kYO$TqZSwIt6?a79o%t`P$&L2D zy*%DyE;UhhE>)T*Gj9g|iK*;Tz;bw3Wc$9Ic*NQg|C~BbKyxf*L_0}G2T|SVGfa{P zfWs}o#2C*HSb~(6%%vvEu$@w!4kgcasV4*CznuXtSqcroq{_rS%5r1MwcKl+?PjC` zBy5dbgU!b8w3xcreA1q3noBjCj3X1a$5XaD1*bdn!g~G(XZw4Y^G$SR3LUi2wflb5 z6lDAF*}eP{P_dIzU_JO?=h^HW*ohUh9q?{3ZNr+Fqc7hUmzKU`#HAwkH7mN$i0&|= zTa4&7E4xs-s;0mc5Q(XKxU&U;UE3Hh{_NTXH`F{w2D2_HC;2Y!6KJ@lW%amOQoHdQZ^p z@6Gm&ZrYLV`oFlh4RKe_c0-5A4t8rg+D01MM7K4I*40);wyR_>?8j3$UU4QQvoJ}+%>-a8l|A$J`8h{Oq=F^$3k2uU?)BdbNwq&?97z` z?3I3OZg1g(O;or4C)gg4?)&||(K->X>KonF-^Y{D*yyUUkv7*WpY2BW5$)_lJK9GX zn(x+a7pJT7iR~ZSZ|60+sF>|?6R(_Z2ev2d!a7|k(U`lAX)RswPi|c*eIiKTj|nZ* zIjLJ019sqLV~N=^RGiDPz03|uEZ36(w!^UTT%Jr~S(Gc_6IF-p7NlRQiDQ6Cm(>;Um^el- zW;o`+=xU?)E}!2{*`B~-`@wSAZed1B#}M1+@BtDjyeZo98tNt1B-=6iN0!HST$e%T)HJahkERiR!Riy zWc}%0S}{gaSb(s-(}EqgbGIzpp2@I`SS%`j8XjxN2|k z)DQJESgG7^hXA&R8`*^G>h0Fij@S95+dsJ9E|({BP%xOVef~`OE*NrE)4BY1%62aK zaOhw>=wy#3Jk5cG?O*A59EAF)p@Nf{xGL&IhTv3|pj#(FBjWAT2~e))fKuIVZmK-L z-9R7f7{J|R#qzQUTOk2{R+2)ku*BN(+w1jRr|Yp2*iITPVV;aR1{RYs?j3GP*j{~L zH^qm7Xj5Rj&px*m8IB?8s=)U0P~TM7UQN&H!NZ4%r>+6gdrPabOBH*xqGI>J&Zj%N zFWC0r*(+9DEPSzcdE; zO_|$cnOk&S5+*vb`7|HqJCfx%SWM(PnlM)f0M*4;`ik>V>*zx+p*Y}QnpKVJD_!AsAOGg;vQ+?^khNo z4lD)Myg6272m3D@d?QmPER}Y1KmXz&qwQxIt z5%hHhyM8ZY`=7r_>>ap4G?tAPEpQ>#k%I~qFKg42snc(r9#`^orG$#9rI@zHaASq%07{MugB7u zKFi{JkaioNbBQrr#^b_2X=04K@1OQ_wrol|iAxBJ{$?J}NAHEmaz(b&eRSF%&m|uF z98Ru_?n{fq+~bPFpj^i?0=Gu9H%G9yhT($Ke95#af}Q5WaA3dEPfUCmK)N`$hdB2O zHt!2z?m)KaYFvDL!&V)e>8lFcM~93JLbiKzY^OW0otrX4E6PoCqr3XX${R9p8c-em zc8v`ly5XMstK8eJRKoU9L;J`MwxI?c)@iEm)Y4FCw!d#G%Lih3RqM$lD6pMovye&x z1A1e=qCDGqW;OL{QsdCTS?ncU5Gr--Lqi0EzQiJpnbOArK=;CVSZXX`cUk#g7~xu!=aa^!bC?ISrOlFNhzh0( z3nq&SCW|rAkt{XE7(=Rljbd-&v?;Qk_%LEZb@m3x^{F7QaY@0j?pYU`XeHq!E6Zk6}jf$i!W zU4iX75gz5SeVvhgM0@i!x;haWt#)f`R-qF|jrGE=Bi+_m2$W{XSG}GLS3&&%F7THm zx+v+gA+rx>9!r%u4LA&+{VSd4wf!>ukqTkm%0@m<{>OeA-@9QmwI?*}fM&nUGA! zkTlh1yJLgaX5V}_=Ea+$@oSU2Q!C~NNmpx`#28;mD}`sr*G05h5>A_z73pQ~(xs+jm|LSrCd_ayABM^Qmc2e0vm7xQhRXH+ zIBj~RFGCIX+@4}Wb@AnH;!EAw9M_V&A+KM*GBS5+q-8^XAZ-X+%WNNoYnRH9&h7YR z`u5v3L~WfDtu~;w-o27_AUU?HZS>HI^wj?a`(i7yJ))!CI(@@1ZH)-^7JGGcVpUDI z^U!L1BD4R6Q{P@XTQl+9rLzMsp0W5VtKOmiy?(n~|08L|7{#6%*~#)Hzl2W##Xa~X% z-C{OvFCj2&qpK(OT26^Eo%)~fWE`65IyTd_?`Y|E|G~o*drr75*p1ojKSXoQPqBEf z?@qa{)+1KLl!zFS=z*wkDXYw8Cx6aos0l-xCEcHi27AGD(Y>i?#n4)g5`&#oUk9*r zi<0ss)23{hT>pymVc5Jrm=BXj40Zx`CbuhlsjK*6SJ62;;j{G2%&fW%b($N{-W>E6 zR_kmZjb?kQ4BH`oO80Wv+E+c&rOhTJw$A#>_SDl{@1eQDjj-KaE6P)EO*w4uU=ymN z7p~npO1 zd$jq~nCgjWtEsW3Q)8rT&v0G|k;#R%_aCa`w?nitaB8J)oN_Sz$c22D`P;fK0kD%k zN{e;@+ey2PowVHsEd}N@f9uGVvA}jl_(1gJCnZ|F(2JzC&!H{w&|SyIrYP5myFQt7 z*V#LyNUy|%!5RX@gu&IOBzJuX$#RtD!(8dl=Jgfl_GWW?v3Whwhq>In6p)V5nYq}R z&2cNb)SqEq`YilO(85Ia@uc?a$?!cHx*wG8yC`+8>85U48$4PQwrfYZt5>Q5q=&`^ zPh|TB*EX02>8ZEY6WAVR2t2n7gD`Y}{dFDf!rK~#YiWf7+cjJ6(bkI5)>JjN*U3t> zIhlQ@q?p!h6q9mcH5Q`M(yK*p>`xtjPqwEj^j(s!T{?OYa}?XO7X0Wd!`lO~0>kzK z2V1PB%QZ`)AIVNZRyS>eOGMS$VBJXC?TGKF0BrSj@dUZ}>@z{H&!reA3_qSG_`w@X zM9!L0X12q@h*bh@E$q9r_Yc`lsj}HSbT$@#LZe0k-`UbaWaZYDsRg#XuQVZfGNkWP z0C3(M*zOi=Ip$9U`&3{%KsdH~LZaKPfbBe_t1R1F=s7mguvqFB{OZly?}OqxFQPRb zv3M^P?e1l*l(vx?k6T8pj3I2l&q&$MJSI_ya$WS8cC6-lo09bPds8J@j#R5l8Ig}KAGwZUmURmgT} z9Y_@d$}8cokg&BLa<--WOLk0E`P}~uhP;p z)!W)qLq>JjJ~DWuU%Gej0bjo~pO93a<>}s}+JN`ygb8iK-LyA&v_XT#{e31u$aZ6AoJ%$7w90bgZtE%0gzb9(!qpV0+o#1?FHBHbw(}bj zN$96(k(845@@>heRSBIJ?e_HDrKFV->A2xA_xIr;65TFBw)@aUNvw3*RCJ$GeFiQ{ zB0h{5OMXpcu{aFLhmra)WKq&ER#MCHTS9f5Hf663WUqdSCd?H~Uq`u)?s`w8dTyCq zX94Uv9uO>v;=7^nPjAA+nN2mV$RmlWfE_)VkkQN2y#iB#?cN~=QMU&jK)er%8Ll1S zs=nS$ZIgS|*}fjxuD8l90@!Y78`cq>_9#Q^FkOQ+Ky?i@VEa0))_b%yV|6rDQMcz` zsbSsDftp_D4>zlz+Y>9rb{OjDL3CY!#u|!jPrxKbTPqapKX{`7^7A6(Fx&-xk1U&z z<=76#e_bc(M{?i6U!b+zT>JyuhZ?bQc%Wc$=uj_pn>vz%0u?J{_`Z>ni+ z=hE$NLBWv=`MrPKeTbQdo4Ykp{9{kkclq2}y%d#HP^3sU)_etCw3-pRSg2DN4p? zxL?>b>YY~@lvzk{fN=lV@dH?DxkBaaz3`R=z$Tv5Zp3i_hUSfSn?2}pxuok@%RM4G z!MbPAe@E|GN3ZtYgHow_qKI%nZlu*0!`plp05*%Luj#kjvy6D!%G|>k4Uli`!9jgL z;G=qJvxi?SBrQVv9Za;EZP4%U&J0D#ZIC_@pZBdNlv7Bf+q+~$_Bsc#(og%P%gBV+gf0n~q$; z2xb6e<+j7px}Ya8Ef`^>zadMr?{@Rw+G*3;pz*BAh+}uL()wAF!%HY$hDAk~lBYtV zU22wguE=ZYUvs6}6prakj$ukUEMM>Vm_7-Ne^y@LZMGsl;o2L(Pud;$^?J@Y&ZCPh z)HLwU6G3{=cUcVANr8s(R$9_t;TEy~&woz|HuEa|?quaUgxdAb{nCBM6&pNd22CZ0P6ayMxAUA;pyn-+p6 z-yoNb0d|iF(`mYBw#!@WnE}5zo0XrtwL4DQjxytGFW;^}uO=N{F1Qh57xG}$1gGjn z-YEuJCs8B?2QhH66V7RRl@R4XqgV&{+SUfeTvp<{Rw?(@Jj?Zb$jsfX`AxpCjc{8NH+?W4e^i8Wyns}2^&XbP~( zVrsH|Kyev@DuXYDnatIOdbv-^#8}j%X~GC5@)NdYRO939T;V{-{IY0=QhKt0CeyQY z=r{bkb}5?xwT>-Jt1_G|wY(RorHMtnRw``A%=))6uhwF%oemRJLdp8x?#!tZYP1Dl z<)bvc`R^qZ3Rb8p3vmm}6Mk#@kwCv#gEDdN<*-Wv?22de^zE&6L}2zKqb)!-H$1g- zCHvN)Uc|tNSf(MD)Uss=(H_LFiFG_;VQM~}S{U5n$IHcPEhF7-w5;LDFoA;_f7wdZ zF%(_^GKBOOz;30sGByX00i^_)kh}Z9r$>l&Mu_z7&3$p|mk~B5#uN=jR+^2Rpma+^ zJp%^+<|LiReg);XPW2HcWrxQpv&RRus{T&9L}bziEP)`+TcOfjN1<D@B^6uH=*`x=iFxv&sDzw>Kt*`0ZVvsEN3uW6;gtNAjvfLOC-u3z*A$I=7qdPOFBMWmvfXUhYAM1Z$=i618$tjyN3w@OTHl>=UShogo|mj zP^6!qI^^)*A81AuF8rNOL&@KH^$tWTd zB^-a^ zhpOkkgu)&skP1fXYt9nVE1mbtt}@(1PL|$~ZwBKmEE3G=;mtW+)1&+f7gH;YE2Jowfz-|JJc+Ouqlo&~7y0-ZQbmhc3j)3L zsT5=l1MCjB>D-^wm7d-<(L^^&TfLUp*Jk^*32xb|2(oRbH7kl#F=ju{xn~*WD*n!C z_=J&PT^5lsDlJ1($)NKCW=Ht6haqa99*YGsR!am`gF^di$_CMQbqiqsmY!Oi3*poC zY06!ZEAi0gIam9_rFEma2w}jrq=my_7M<+Z-#T8Jx4qcpxo^}`xrDhH6#V&vf@mu4 z6*#XFl75o>rSF$A80h?Dn_tE^l?vHc9>0`-v%MUQV8@D(L_*5WPv*oB%3Ki_GBwRQ zuP9zs*SM+lWJj7|cYtVN^Iq}CqO&fLm2#GcH?#kBR^$h<7=K=nf=0}~xh+Yxqp4UA zu2^S0#8do}u=vB{aidRTxt98r&h_Axr2}=X8%1RWW$A*1Ne4^4v=&MV+lw%&VH3QU z)x{=-bR!=<7;L>e$SnhqK%AombSaQq#w~1q`w2+=;r94R3|nQG=A4`EaF^%PD(4PZ z8>CdzXK4*86vQZ-$o#R9Il{@sFp^rq$#)WJzV-`Uqw;jkNKXyLHJHUN36jK2uvzr} z<71#`ru;U(Q7gSgXGcE)RyrBhs_1>jdVI*QH)oyHD~K@C(=-@o02I(UH@)lg7DjP= zOXMnFLC2V+92<_N`+JlB`sT12iNu$nBMFSC?CE7<06lP)Ys*gp_@#A;Y=#L%B_&Hr z7McVp-IKc^Ve3P(%MQYk)a1r4JE!jx z>`|~CkEw-``>Fb_r^4OV{wUoEH@0?ZrUnfp$bieIq@dr#DW&*iJi+{HV~e4-(9l*> z4wL(%;~eX|;@6%GmfxqJ@f2}W68*Z-RM)Gc>17QP1H`kKxphhWt0yU-D*Yl~~)?>=^5% z$Na7tGjt6f>JiJO_kev?1LZ!-wjBfkG?Pvy5P#W>FR@KDE#1sM+Qc57kOowtk_&LE z@64xa2D5tx{raKv_;!RZ=uhz{-kc}}|G|uIV)N7R!{dzhdU8o}CaC#yvzMQ>FkT6Q zL|&VAB(EGrVfSVt68?De#wD-b^j8Ay_dvnNm8G*@;B(v^x=q*Y1wOq+fW_X6VcGji zg*GRbt6MZcluNN>>2R|k?%X2&5`e6>1k2YP1F%%>2%73*okD1(xKMcPD|THxxaj_t zxZd(kC^Zd2MizLObJ%w5^&BA-nKiKpLC&#Fshp3=up_6x2-I0wxfR2JPKx-oZ{4Yb zKM`%50jRN8?R7$z2cYakeI-^^dkeEs%B6q{T4qr?(V8r_2~WP2qo8N#5hv|QXfhE{ zF09XlWjbnuYb|C1y#iX2DNvRBms09P>6D+W^b zu7CUqjc;4c>Y9%q+~&)37oSaQ_yr9yI$AQA==8Id2s(zKj~Ih}F#ExWn~RM#f)C}T z{s^6M(S?>e?hZSfGqLCKHaW*`hP9B%-f)bu*)D<*n9=v@Opp6xOK`%ckH_v^z^#>| zt?ZgGSfPt#Tfu$iq@($v9)i*4!_v5RipyK_W6mFKA|5?#}CPJ5- zAfUM`Rab8e(mC_(x$;AuDnhSpi#L12o7>W=@5>FBaRptESF*l29iuNSIif?2qtKxx zo)y9aKncbJ-}?jVbndi8z}Au*dMDAO_=K^1k%vV_y4>H8k~6Y{fxpoiQ^)q~&K?uA zY6*%#guQ_2_bK6KJ>9?Lf_C{ttW}bBA@0Hu?Vag^(lYdC?5n=3zo;Q^HpZ`UC^)Tn z)DtBB!`*-Ec28A4Xed~@gm)Tt2HR2E_W9B|3?Rd&3iTZh7lDrXd;WQh1`^}r-DI3F zn>~(r7@>2#yECf5aC~dqk)<7)rk#}R{A;k4Rz%Qh!hR^!A1n{j*Bt-RkV#^XMTCP# zDy47RQ9JHsn09Aw8Q__1tfdUXgQu_NjI8E;+LhQFNK#NPj_aL(vn(tfq7u;~io4WN zBNSA-)40-XJd%gTk2Epiuo`3;O!Udf^-OMDD`HMOLi~$g;2Z;H{nVg?go zB9Caa+S|3A+M??IjPd~&!|4j}O5@1HBsXQy9^P}+{p8{O$`VAM?&1Y}rA8MEj#M+t zGLP<+VK~d|S`IT72^K)_BnZO8YJb63FSp zhE>2nW@+1iinD}+Q~Z|@<#Z-cZ;^t31<^Q=w5!e~a;V#}@o0SF&1NYJlv|RR+$H z8^v{MeonneCEqo&Hz5J%Y9AN)?Thu|R+8thF~M!eKLh&KIQAzvyQ~jw=aK~+lW5|V zcbJVXFhRp}?xd-woIHr#vjC~QTrOxtw0Wkfz=y^_Nj3`e#`zyhw=W6l(ox_0oJRuf z&kB4+s5q@OLk?QqtDWddEzkGqFuR1Op?t>lR3Bqi?*L&XsZTx@9m7Wedo<)xbz&?G zL9mipT3not3y*Qt%s@5S_HJ7BA#D7X^^v^{jVo8GwPN`Emj2N%Az7=ZY6%@@`Sj{v zdA}12o`q!U4`<;SERlF47uZWqa{MlXsH=>1QX0~PTpZrU|7ku9Ema=_O*X=VKTRg$ z(j8}<{wp}`iqoM!o4SI5kx&s5`fS)r%|LS)tVTH{&M4E4yFTy3$7h3kdLnpQI)<{Z zDW^a3pWkQr%a%kRI*9(-NC>ChnDzc0)$v zm9F)}Mw&_>D3{vR!@qj6`o|2e40FP-mR*~&lfa;;$QsGoCl)m>j#q2>Q>!!sr~^7_ zJrN^7$tSPmwEa)iAvgCd@;imIIMABM$JS%@8#ukb&Q6s?3*b{ znNuiMxkAu;O|0c^4OMQM55{?bg-;VPnc8Nye6(vU}by2vIbXfxhEx%axIjY1Pm%u*)f~HgkQed3FgqWoGeg5zv%qjL&NH z{dk_{x2(@RD(m{LP9aI>>7jz7aqU0I(;e^PToJeZpI@#8blQ0qiCZZ4vOIEl5SY{v zKhM>EL-UTyk13EsnRF@Y3w>mXVFDV$c{ZPFK57KUG@16-8*#C3<=DiGNGUthlHG%0 zem;hOZg1j3n)q7NiO=MFU#%~6Hv17s_LwqLvg)e(l^1TD9uR9;Sz}F z^#<3^?yA+)my|71LF*S@fcD*j(<{xxWPtz@@tZ>XH?p%({uPDs%@|1q}jo8V=8av=ZjhfMM3>R+qg zk7-7fMw5LpY8N2^;PARs`p&&e8?TqpiBHm$kZcrT`wF)yi!v5aplcVWugL&KJr*dJ z%GE7PPW|JwQVCR9$h9`)VA^sfN45VUd7B!d_c7(4Z^WxZ7Oak26*{1b{B4FYXH|IOdhVt54kWxH8q^OoOWV((M99aT1L4K%J{v`Fyw zH`^YKoYeAzF3)NMxU8pkum@*tJ}AJu-Wzl>$ik~~=gj}*-U;k`5nu-%PLJ99$h1%W zl=bsBHxR(;&F?ms^VJVs#=WgBPa1==6SbvTdRTp@SF8S0|2omo88u|fufl<1sO5!+ z!O{_7isp)j6GOY6co3A6%p2ABLD&DCLw9NpR!VfE_y!+~tR#~r8luy6Z_F^vyZm*p zxH=A2GPVPM9-jy+rx&&2pD+i}mZ^7;RnCE^QtXtsX?%Kp9TRd6a!p74>}SN0KIA6L zs_xS*ySV}9RhMA+>Y{LSO0~{5K(E(kME^is%M75p9q1-PE@tHCA#lM`k_a9dVmtU+rucd`tvlw=_V8Ov zmqE`+%Q0-EwxSSBMT0DBTkth;hX9~%7Y9Cu_;aIktBb5PLfC}D+8a@Z6*xk)%_AxG zYXH6KJGHmV1ZL*{ezB<}|H}+{maJcE+=I}$b-kMjnot@6 zI+;LPT=%OB?c3bXXMcn1pOG3xa@*#VlILdEQw7&Xf336QjjtSCQ|K50y zcI)}H5LNLaY6Gt)`ZcL!g8+|;IC+vzbW3^VAdsvd$TW;LmW-lpEDBn&016CY0I(sK zt>n<~5Q0?#M5Rc_jh}lgw0L~4@XV=S8y?E*m!|DyZ}`>Ke9yz4pFtYjkvX2*nDIHu zlQSjhj9ht%*=cgO^~a>-E7KEwFMDt0bC*aLXQqGQFeRPn=X+-g|<$C4Jd*U#IilUAbbQ{QqL*igk*XyUgc3xW_#qE*w zX@2K5nNe@IZdWf0M(j8BvtY_;o_|w0M02uk^J_I;cZ)UzKAY=8Tu}sgL~uoT{~&ulItO+UHe&&Sj09+wl6AXmGK@l+Ski8(jv`69sv9QlAP((V|Dkss$MLJ(__)`44KF* z{U|tNx?@x>_>EXjxVCvQPKyzr7onDPCMS}5V>A`hH1q%r-^g0P1kS?*Z_uGGA)hYf zLG~dufPHO3hQ(40s>%Nx2q(gNC4lP9)mM@b1SQ{XMvLYCWFA?1CyC(H9~SVSf<9zv zSYDF|hkiI3w@BeT60+~O4YvO?xHQ=Rg8%a9-&lsBVN~$#*DR&|bt->76u6ds1hEVo zUf~%>nw9UbZ|C}{l>v^`mUY%aVexUeTt;@>y43UT#ld0~KFl{FFScz+I zDxsMM;8~`S?H&jwsgWeNIYRA)`GWr`Kcqai4UIM$6y7iXHS(i6P6EI`TXH_TKJ7=uTTl$LjZx zcLxo0LZS}qXl48-%BTz)*1Ir_pdZ?K)xGiRrL;EuN?WM6+$A+Hagy zOonFIfrhpkVH7f)wro77(g3fMDB*qXm3F>Cus-MQHjb8iCr@29l+44Hz+=rfF&1e*Oe3Yx&lHWGvu_%M2PnBdG zC+esXf8cNEs>tukE(~b8scto<4COpq-IA5yFRUiqmG2SS=$*$z6-_(3T-*9WvLC=} z_0wniWwWnjN17;V_3Jv-G}{i{jdyr;k9vYuE_QaZC%=u1MWDP+My+bzNyZWNPY@r2_13pP>=MV)LP;>X=aA(mcA17QTmYP` z_P85`As>Z0XC%QeL{}zJ5a%sszwuNh56F0X6Ny^1%TGzW4SV%?X{Yq$P$)(FIYAc3 zJfI@OPyK8V%4yAh!_5q5{ovVlTkGyx$*nu;4P-?IeMLxg;A zMZB-Tx4@>I@gRrDDY;60UZ_31DZgvVL$7**NV(QIK@0=B^t8V`IhEwNyx68Inem)U zY1YB-G`O*Vlq?76c*T(-V3u-0)1odAp8y>cz^i&mFm80x2CEYJ!jrj5_ph|!oD9k`bKGBn zPOj-WbJ?$4H5YZ9=IN0-fE~G)k33v#p?5Q-^|(8+U&iL3s4<^(Ol%s4KBtw4CG2Ds zJ@BUCNdPuzRz+pgYHrVmqKKvi2{df<1@yve&T6GD#{-nI4ZSOgjjV5<=5i_|0KnKP;9>4 z(-rRz@jf5dUQVSKcq=Z&K?_q(*FO&zA!C+Kf)QfU zO`4Mx91k|FeqT2hG?v%GLSD#jwwffalz?mbn@fHOX>-N#qbdRdZK znUa{mZ)Z55oX(8BA;{!~N^@nKOmgJ~{H}rVrKqIg$SI@(&*Wn5EO&qvWci zd9LipQv`7U_nTqqpyubpo!_%sx7xS0ul}^n&fv=TgG;O=bPi>odvQDfQB$+1cN1@o zGHkW~?mpR|&-<#*PiNgv0)XWB@`_HPbwh05zjpg&DO=NFTJP(A@iW!K0{7gIm09T0 zA%o91mJVEc8vncMpAUXb#Rf13qwB^lP4yeo4{N6fM82Y5aRm@2ma^Pfkc1OV&{P7r zLZlw0&4DsNcK{)3i2v4}NKlHw`Owvr63x|GwLnTf9=-)h)c2k;j;WZ_-eLwv1xv4= zv1=;k!$R3lf1HneT;?s%X3+Kx5AD&5L9^Ao!cy%O51{-3o<9CPqeJ6^0L!ML;_}1rq(MK|=CTai+G;=UtY+@TKc+unnrUlSf$){g-q75}Xr(m%(gN z&_UE>TZ~*F{swERaIIqm@fx&qI9>Aeq(5Dqs;~$VW|y`xaZSFE#wuLZX=`SKC6)dd3$KhHbs!PiJ5`BF=!uv zhf!w!7OV)@EcvL*H+fKjm+<5*B8~imPcQ3A^P{iGZeXxrVgyQ=bF%sfb+YOh)3QKX zJ;z}-k(N0twpO@&copILtmFAU0oL2zpwIJuyffJEav)${Nap&UMLn%e>*384eox(> zkL$X(XzMQ+YrO0bEe2{q$iGORqjxAO%w)-AcW{>Mt>+syV9>>7DMD|p^!$P@~D)07NL7am8n2=9)d9dABIV+$sJcUw8%oJlR4GH-6Vr%7U5T#HxOSxpbpNPF-9p`FZZ@97MW^ zx~>I0f^g1iuO0|N(v|Lc?k;C+CN7^2>c}r^Wkc>(rfb<~3Yz$cC!+#zbIs4r_)jpl z?f@H|OnN3p5{?K`iD18-xSR$GnSk3rl&w$BqHy<}@vHNQpjPr;f)~M<4?L=1^o2ek zl4VEFh6gcrmIrc+S&<;`2ZA*L&r8(`KU5XmTAPU_?AuE>)3=91f_xL-g2QJ{aa0xe z^6JzGcN4+27n()us`C+&$0(Nywq97TdgT`F6iv_uy`i?$8+_)xysAMZ6rg<=Qj7BPbB=)pMZ1;(hH3sXG=+Ux^y(tD?64JXS|f$X*!L{t z`dS3ARYI2*|ASuEt`#GJdEIsfK;`%EPHyh)UdX5>WMd*n4wZQRnLg`lVok#5?f*OR zq2{APAVWkkQQqx$c+*3uogu-|zSSJC)}ncMhtXZ2a@}NdVC+@1DIpgOc7;1_tSA>_hoIH+{F}_Rp#r8>+F@ldL5}se=2z8OpjZnXilW`VqrcnFT}%E{0e)(dF?Py+R)9%k7#yX2YrYrf2p+ z!K?D&l>xd!CFf9B;Pc&mO-IPdy5^0XK0HPpy%|>lAJcIV&~vj%vgUJeK_KA%5Xc~S zf?88$@!!zk4bg}8ljiBNJ;xRaSur1Q@(DRwHGH#M-S0S_11YeXMNiano&}{T^JU&} zncD7%CnYek8csxG6P?$YABwqm%D=-kYEnLxIE1I*o$d!h_|9p`0v*15Zii1p8eHC* zEQtC!D6~1&`24RL%(%IIWo~)TT>Lhd2*|S_b@`n%;NdDKlf<^qy?yV|wOg!eXGS#| zMYhECKbb~m2KMgx8diAMU0j>JgQCDE6yY0iXJIOtGYgoQEA%^TpRizQ$>ncIivX{8Fa_0wOus#lZvJ=EaEFTQcCXod;EUL6tNO|y~o(GC@RI>HnkP^IU&bx!8^aW^Zj z&XcO`=#^6XRZl=Oa&o|fh|2`OEf6%CJ`->Y3u1C^v~}u|*}DG*W7R;9)Ckin0vRod zL2FPjcIp9w$^x15d;4&GEC8Q|JSS7{{?s%hnCZ|s-4$bVYRN5@kXDkrNy}qbEtk%y zvGLhQJ6|S*q}|fk4}e|M%_(wso%8$9Yz!?Zxd-+qgf_L4(*lV!+mF?E+qB!7afT$# zc$S})?f^D&(DtVcDIhMr2g*$uxniDukOtA`0J-=9TBltb^Z%91hl8FskFygU7D+$j zm{!l@jc@uNZ6g!SQCs8fPRN-9TzXd4`OEvE{<@n42gI( z4f2;tdwKiVrZF8C>k~Itl8>+xS@5}u%C|L!&7BbglK`j5=qq05m8SMTVsOcm^M83PE+-I z$+ZVyr8Y;Ghd&69dm6Ju`mfDxV}K=*;rPX}OR3 zXgdUz7}|3s(Hpb&;&C?8W+}%^r+Hvx^nJo9F`l{16f}u8 zS&;3`GHA0pVS2AS=Y5n31i^$ppKmj6{%RT4KZB*+;g;-p)x#_;mgAp$XWQU7r)wx< ze(Q(I?~|RDvi95;V+IiT6nsU#?Msg-GS#(?uP4u#c(mXV;PW>1ZMK#XGk21=szJ3M z*Q0rp>#lIQm80{R+o z^)x^00|%YPg(SWZ@W`u!N4GKDR{p9nsSeK3nhfOU{H@29!fW zr)<`h`Q!_L#Ez1m@LSCe&_QfQ@ZS@2`Sm>v&~y7A>A|$UPn$?3{q6%?Xx?rUY~CkH z9eO+UuRQGEQ$DYRq@R)+LUse05yh~{TQ7aj&=(RmvAu1!(T4)s*TJHkx31~;;fWGgMWNH>&gdbGe@Ri?nx^k@TJMDZb^YAQs{B6e z>nfp(X47|-%?@$kMGI0uvbChwINSnz+2{O?Ye4QZ^hxnu27<8NFNez4@#{j>pz*wE8a7zX!x&|GE6{x|%HWh$U^8 zTzTu__v9lBr;-R3_=Sa+qdERpbP&;L$2?gXl}7Uh8Px6%$Z%dpklr;d1VXqG*u@e& zqk0vtf=pl1>_L|GQ9X*ShON%C{`UD@4HObfeaY&8th}JM2ngqosf&%98}1H>Fcu-! zUZFN#QBn(q@sne_L&;8j3SoNgK~!c71R)K1AdC{2{L+Bx)q`}8_~U65#%Mbd|Tc4E>^@I^%5MAhq6CgU)@W-W;3P#){IN3|7RR{5>z1v zjW~z(_l{rg9V7KA=Jb&hnyEJ3r@|v+dz@0rdv#jb-5UKeo67tl-kXNX z4WY-^80p9C>Aa~E<|=XKJ-W-?UuGKQ78~T&<&s+>s=!{ZNzU(d=|6MGmg+o3Yu%Bk zEgbDUoiFUA?q_I{mu)u@oDHz;w$GB zFvXWXS;oHvVVl&+2a&{qX!?BwVYiW=eLwz%Zx?Mwu=67UsLVws`drO`=fETSsghu? zr@vAAeZnx!{W%%w0z!{_lcB>)N_)#$-rTWHoK#)^(|3RWH5vXh*tKusoU{wm$s5zl z|6U=US0s^IC6lU+N|W$p)em6R4`BsAps-vZL8+% zZFveAFtG@KyozKI<|~Oez`rb1B@p7eq%WTxy8FiU>Ct$0NEDB|?y)f9>Pgol`?>@| z_q9ArU*;qqOy(Rg{?GXQh_Mb-#}{35!|bAcxUoLwK5pYRMPuq%+C(#@fxu1K$vju9 zwdQ~uj(iP2#{X37EHK5NHRJ7*+LbZ8s_J^gV#z3a8(r6qrGuVx_PD_O`2sA1L_Zt@Gls{D8XdC4u`42wMvb579P?^^XA-xvTg|qb9 zS&1JFG(Th}R>ZL}o($_Cn5Z5%LW#?fEY|r)t_d>HHiU6j|0Wqk^YA ze5X7@r|bf!(smG^@mBb^ujbKT;T@3&Hx^d1e1Ae88j_J;t-1cP#dprdnSTI1;CY6&PujWTC}306Y$>*jbd}u=QVVl9Q?P7 ztcBU~I;o-aD#Y;=3%|=1zs=(|oF%V_ahb?ZeAicxD}STe{JBfNe4R-PE;s+>hs297 zVc(dJOg)#w$~QFE6yA!7EoFP>P z&0BRX_vZl|3d%qd7OpF#_H|@#r-Rt4j$J=F)3+VIXT7L)LS{X$B2hO`YT3&xWnrX|Ik2b{*4Lc$_j5GgGzIl1$6)M%_gE#dm z%QjjH5G}RRDv1qoO&B$E10CO1`iH5oeV)f_DR==LWTkKe?H6AEYR1ll;lF~^KEW6< zFr81Bt)@_}Mp47gzTck@;2`^lf9svFEYrEmN_%m;2C0JdgsN_%5xI-Jx%?4N^@(Mf zFsKH~oMLw`c(lnSf^p_STMUu7a%`+1#bBiLKEh}N?IrXe1fmFB8WxW8U=-s{0Ax{Hv_xSIJJ%<3gvC!V0zl4M9_?;4UMgy4M8Z zD^30Pq|uHuYNft~ur@1GRD^2n?;>F@o$H~nA%c1^nDowsV-Hdl4O!Yjas^bNOTx0E9qO|I4@xw*w$sSwL{QOdeQ_ zlQGCic{7t1>CU$Cb-&y?eSJ~0&&52L^`q-iQL_nSi&-}3e#v_HM;N7SeI7mloIbF= z&YS`K2z7?P`&~<046=?IY3}jpS{vC~wd>_aGI0>N!QbB&d^nKRGL-!yzA*atgKt#j|Dtq!7n}wou$8nG+bSbV#x*U zFA=hREP*Q<=@Uq*LDja?qQ`qe+hw8&%mM+2sv-Y59}4>FEzD*>WDM*1wD$jN-5YRg zP2KNI-OIH^hjNQ5r<*~b85O6yrDiIZ!i`;VfSykvbEET4+co8G3SdXSv>SLJOD))^ z&CbNkrz7QAVQ&w}co_rH^kG&s6NmigJI04982s?FRa?Q~|1Nls3c$%~E`KsO+1f92(@J=*>$i-auC0)xT z?Fuq z9|K}X3HIAa{pX#hIDA?z5d6#aZi)DQN{9-r$DVVE#?R&vYBp6jgIfr@eo^wF+>cz? zw`q-8f%<~jlqY=3rWxI)BZXb7n`NdeU9lMkk-VlFn33o!n>6U<%1ym3gw@PN=aDIO z@XdC}*)_EXHLUF$-jhPQ)GRuor@1NpS>rIZVWHu5CI0KrdiKcnRp0YvpuuKCmKu4p zsZW`}hF{DwmTp;(Kgh>ZECPRs2z6$gVsvM{WD>sGC*GUVS@F4Y30Y_4S1PRyfl`OT z!kx|{uER&E!VpB$K(r1hVuu2*KpOFCVV^PEgxEoHSDFuC&!7VO+-CTDEpr9cB{+gU z7xTX@lyfg-Yp3CpJV*qo@BtkY3R^cFwIPX>M{d2XaE z0MF5D8_Lc&%*DNPzC~C4Q+VyxA@{5Dwcb(${VP4E|FUmpu)r`YFl^AuGr2W*5@7^j zEh3jO?iJUk(bRuC=)h_i7k)?galT#q)=r~kTx28BBtLpE7+uvE-jB5*O(756AIU^TWDt%6YMU2LLf&IQ`+cxyV<#SqIta zWpg(&s<%YOZwYrmIlmLK`Jn{IQ^2mzhQrwOmEI2=7D&S{kIMX$9hCHcU&X3xHGt3- zcG1@{oHZlaD=lN492^K<>-J<>726PlH#GXE!hTZtl(qaZN8!Z7KZ!`41L#37#fi-& zvmwDmu7dXtNUzxi_Hl%=1G15tcaH9uN5-{tmwQBo+1zBsR9k`1{m5)L7p-$&thC=K zfPETx>%ieB4&7Sn$!s#^2X7w~aIXpKeO}>*)}$4)4!+EIu_9wqN|$=x{Wp}?)QL>M zOd9I;)!>HWq~N20?Dx=i!UEMtTfs;4AY-IPGyla8@waQd0Jlx+*wb*1uJ@jDI{M)v zx$g-)kua2Ko;ItA_Dfe5fcavXg%p^tRt~9Wo8xJfLMt%kpx-5-aP^ZFNu}I$9$G{d z?VB|Kb~7#L=JXIV45WECJKGg!9_V;TSColzrk?bJ!e5EAdgRR+uiW!Nk$g}$ZZ~Ac zX<7PW1dQ`*01GCa6&W#gc-Im@6w znjc%dsEw^4IdhZPv!ju1|33Z)rPG)B!%e-r^Z`0JH30m)76$X=UZbTqYNrN9X{Jc# zE5^hx;^n0(;A!L6){cBwVzxu(nJkUx!g|)Ba^3w>L|jmpG)PE7_zM}K5zX~*(6Q3L z%9)E7`yG}w@4B@AoXDHCJR;}_owG;$5*7Hq-#uAUQyr+JfmBx*CwYlZ9ramSf&_NPo!6WXR(&#L z#(|bYX|g$FH+t{-w-ax+05i8xSf z%eJ+{nc~%NOP8bT?=_ciw6hRGGJ0%HKM!pCa_Z3|zYcZLT`<5d^g&PUGiGJQW+_KR zwTMz4_Dq)O>-oIm#=}0*e8DxlLX;$jqsqd3EE}JabdHx5O^MtL6-EaV0pD;pKvVNu>%Gi$?6H^X}@Cbre1! zMRQlgU9wyaTS&3$Xjp84%7S81nUvZ#Fe5!N=eYJruKI}IG>Y3eO3rQR!BvsgqHUo9 z=fzxq>E0DXxsn#JXadnjNSHYGmHacTAt%e09K>=I&7}$J6zNaGNv=63Wg?EFXR9 zHR$ZH>(o=Gu-Ls?lh|{%*oA}leLr3YI9;UZwjFaBv30w2A9laWL3m{&BG({Y;IIY< z+dzhYRej#@z1kJp+-ke;;7BduO(($@Qysisl?M@nCv=A;@y>^7t=_e7Z_VIwbdo!@ z`V3~UuG$2mH%(pOwGO1tl$DHIxP?p(^Lcx!15uINE-7ZRg~WUBDvj+{ETau=vo*sgL|kt9hSD z3zg6O7Br_;<#N)9GP;7|ZQjsup^7SeOrEeyyMX9<`G&lDS0_RK3+<0~yRA;9ezflm zXH9-38aAWXG@*90AROvmCMv*CN|b8T&sg0oYsoor=LN2eI?Nfr@Tc8>`ugRn?7bD+ z{*oOiCF14w0Bqj?)jU$%gJH{#4=>!FOYn`c4AoaiNneVn%sohrps{|ARf1vpV#M-r zKRhF{mMm*EhS-zh^I9r~i%Hg6mtTQeia*nZVo9z#?+AUL*T+g$lzU8{o$TM z4(KF~=Ohm6sG$(jJ^MxU-U(#i(j=V=#J5>THw7%Bcfr)Zvi?eG*mA=avP7O@xaBw7 zi_izT+*LoV@QsjCb6heBI@BI^hq^`i;3uEJhu`mVv61z$Z1}>Msd2}C#;0J%Hk;0I z#NJ{5Jz)!IDKqU*!2#O9Bd(0MtoAnYaD~tSTWK?S3;)~w;3|inppe>oqGZ^mx;*E@ z54t=oOI{pi6E(6nw#WOc7a64EOJY8n!^dB3ue{M2T;AeXp(uhsQgx{WeM^aOeXJ(i z)Kh03&kCvMqQJ?BqFFR%|7d3sWlfk{f~j_Y^ArViJl$>gDE~&lwS(v4EtNvdp>R9( z(q^4W<00!|>DWoVQ2%QJkGG|eTMS8TR>{~BdPj^vOVaV1h5Fo;67Bu`oF_9Kq6z#COGFQDHM}H!%dWFU2z7{AnU!i{$%kWy*WzeoAN4g9; zK8gd{o)5-Wqs@O@F8`1uR#QxssVddGu{x;n1Z&`SsIJYgydKzbv$4-~uSEisRXsSN zyslh2%KAj8OHCz>@o5~kQr4sq=~4Yvr+`)XT}8v|)WMnJqX!8kdF$dF!^3-K8?6OP zy!vI9QljMI{x$GccpF7{eVz?P&8@nF1rLucLWW=VsJD1wfFjD_axX%C22~8CGJ_+W zLU$RGn`E>z!7CxKRfSzzh@CT3c8QU2()-1A<)7 zLYDoi=lmegbQk0PCgiCgK@A~`6`s~UDmw-^OGnRKuafF->E{YuGTFS|LHSU0l-a{j z={=-V9g_e@XO_@2_{oYgg#u#O+ZW-S4`{ZliHpk#Bx*CFLT{KrZCT)jz2kuxTSC?&{d9H?0|B z{fgk|6WnYIPZE@Sy%HYG>UfSf)q=P}4OabX`}Ys8lg(p+B+(kEeGFlqnj5&?Jt3up z(TQkIW@5gd>1x~VDY@2JJohrgXMDlLfoBFqwTl96$G(ppq)pBFTNH z2edeNn+s7Sfp-cHI?MuAXGB^w~!90woIc zo_JocqKJ$oyeoEyk@iQAOP99tA|9>~S2Xz*8&L{d(!_|d;v|uxWm)?Nfs}9g1rf03 z0S%dz4{9L`G3@wxi@AaIWPB{ccDETa@RW7|haZ@kS`vXI!SzEnS`Ryub13jl1J<7JeHF>G%vPoYfF8AMiw}8w7hmC+ z#>ouYWNM6oaFVQD_*!?B+(=6O^&|@K(E73LuyPp@ zm6oiEumh+#&3(=@ZucW=Gkxc8>d(etdJ*k?NC$=>HUA{tcB`w<&H;7M9aw>fUNOZp zi%0(3mPdCL?{Nq#>j`evrU|~lncsfTqBrEjTxmHBGqdF~=q5Mll5Mfgv}+w6(aGw| z*wPPPSjqKmIdvX6+*?%EIwV|9oQNH$qXLf@12A!r^D&Bn}TVylWrJy{WbQcrPVuvFLeyh+#x+lo78HXG9l1q;!~@WQi(l)8~iK^4&E0QJ(+ZCsSAhE2lLk!zQ9B_vC*osUt%qI}#mx2OhI~XTtfBQnU;ISg zj=OKVCDaku=!x|74f*ctulEf_Q5&c&R;}2p#%C~6RwT_RsM++H*3D-{yTdJokS5Q? z46(H+j+enm7N#vkDlI(;vTI3%wE!z{wxo6wp?+SdW`hh1;f>fp#;4c^w3~~-oq_o* zlmC#W8310hBM8Ezei5~0eq!6@k&1+Cxf*y>A1 zuFEJHfmCUXI8R zqc+;PmEzgxB&)uyz{~4WcQtpbt2_4$xOM`PEN0k^mcvI1ESx%eWHWnH7guL9BfB4; z9E`1zdDsE0fFB?D`H_L*039AMWL^aT)YQ@jaDf0^99%5ioM3>xo2{)LvY_BU%sBoR zGcbS)%=#x2&i~i~#QMLQaB#7)fI&Qe+7J)upJo7{n1ii@v#O(!i5cKWQz1=LGIDh_ zbG8St{W2@z=_;k_YUFAL_@(K{KuHICR{%dh04T`@25|oH8)791<^gd3X!VcJoLm5& zUzS652~bnf*xJnG7ZVvf5P;{0-ztC~|59>xFi|yg1?WIFD=rBDs+oDZ0)R4hMiypb zfZy*>5bF1npqz0^cHE@lUQN$9nwI@wEriV3QeU zDK<((y^`uwWA=}9S0x~*G8POD()qj9X=Y1kg*;5c_n+a+}I3f zu6n*!J<6Pt57(7lAfDI^9@ZKHRW~P3l6);Lxo)X%3tkZBma=sc7&H3At~3#1aQ51X zCwTEogmGC1Jf2}DT5)^)pr&yAwbxU(1dd_=Yzt|qNoU8GMQooI><_We&@0?vW+lU( zBo%Kx+6rQ9(2VD4X45G5Z15*~T*ny-#GB2CDBT3gGnz_OcSYhLcol#HQzwXnX@?`S zpsYOm+V7&CRw_EoS^eQ66w$v2_cX~Q^pVfST3W#XMUqAg=Jt-Y3xTB474rk#5NDEK zI?GA)q(HR&Ta(F?C+mQqC}Ni*cAkI@1S2jOJAo_|I1iR$>b=4BvBn44M_7>c1A<5L zBL~bD`Xh-V>ajV35W*Cm-^j}$4J%Y5OvcTT5RR)ZKWqF}q!YYCP?l0**kX-DTrc)1 zg6-OO!iPxP#kF81@hW9bKgtPsEvoUP`gB|#m@%-tAZ5NSsP-L;I_V8s9BtNESAMtf zx^m!iFea_(!V5!nxs5n6KQdl5skctwC{~u_!vpjorSTk|O~{E0n6=l1-mOZwL{eqb zhv9Q{DDOGFlsx$O^6+F!UX+zt6^VBZ>cf9pLIzS#;x5j~^vfXWm(4{|4sWXf%LknM zs9sgSnEGHnJ9vB&Vjzzfid|&Gavk-C0-m0y!8LYRdL=2i6s<1yoF>FF;f1`Z5#vDFSrB82Ll0u_Mu}61d&rwvDBp+P*v8OGu?w{)LJynJ zFYW+E*smYoN#eWDvYRK=hqFF?WAhY)5>JlStL{tMfQ#-(Ewd@?d6E@MnwY+n8}p4u zUSMe5VKyNQF~^tI$@&ac6O=IdjUuZrjT~fGf}kO} zW|>MAOg}po<(r(Z7*1uabbpv(k$73X;Lk0^{Pt#Hhzolr>3ZTJtvU6$$2zmZGbWMI z80#Ao4RB;ZG(Y+Miw_^W=0YOqg(8L4V8O%oGzU{?@8 zM62OHubpj~-z-P65GYeuNrM$@8ps>*=0#-evuKB>_J&*O`L?Y{!c?LN8qaG)_)%W* zC}y3s@Hdr4UGCk)uk#ML2c#i=VHyfADczL#u>3~Vz0qXBFSr_EFUb2HdC_0IWdtp1 zRd=XgbiOlV>3y+~EQuy1u{KL9|4r&pv7jS%TctxfQPDPq0`{gTGuO9S=n>54irWty zHhZ=#xR9;09F)6S5L00kR#hdR%EO%vFU;Dm>z@Ve4lW{9; z1w5a$muSLx?8E?RN{HNHy2+F0R?PVe>f8&t2`plfw0~~7Q572W7q?wDkuDl?@DT8A zi<6Db^|jObo>kjoa($X5mBm8)Nw#<})yco}d_I(0G-Xot`UIHUDmCJqsM}_~U%b^* z^_<=qoA%+8dXU^yV|STy`4f*F`y~t<1`9rSq}6wDM%s2vsMSj;-;gBgHJI0jG8L?= z+UxuD@((oa`BAWj=#iMFY0t#e>NoRX^EL>{reF(U7rT3;3S{GC-yV@xv^4Z#<)F6} z(s#{L4VD6dS{}g8LZrZPie9El-@RI@B|Uw#R3>~M7mCr=8on5*mTiR9Y5cFp{Jh`a za@b`eo;a@V^%nX-E9Sp-MOW~jruKFA=e)l^Y>M*9fLb}9_Z#a3hBV#z6jruy;xu@$ zad|Mbu(lG{We#$Y`MfOk8#?)#!HjI39?^J|=?Fz~HzYrF5@({_K;E&bIpAdJ1~^1fo^W2!5~tsSnZex-!GNDO|*Mg=>4Io zf$IbHtxM=~!AP+WY(kl$WK@&<+!C|*3B$-@E)H(aCT2et{XiPXB6%}YDLNSxw|8Td4woQVwbk00?x_xwsj-Ky0lX>{&o8 zU=|Sl4|ak~zcK0$_y4=jak8^;a)SV1HZTht2gF$}4i+{Z&cEXv_+Op-u~YxM&arc{ zaB;E$!0cQsU`}oTCxpS-IobY>b8P?O+%Jdvzv~^Cn}r*4SbsPP2_87vcvv|8mT&BT z^6g(jk6(Tp5WN03u?OgXwfpPf1N8e-2omP}aa$0|2eGqogSh?_OMrj>bNvfD4lXVh zE)eKXcE9{$f8Fu_#UO->6>>57EeiR4M8d%Z;Qlqfk%WXSAlBc)7A`Pk=9kOB{}_<` z{z?G)L)7(aAOdEE?1;Y`i0J9WF4bfEuNpjk`>ZK~C}BflP&F}^gc_r8w@;X2GFQoV zVV0+Q>$!7c?$?0hZ?rnq9-H&loOBUSUSN+na1*EyC$M3ozko*9UujMI%-{CfGVYzY z64r1EbRG`HFDhYN zoG+_yB~E1%g>%J?bFW`xQ*Us`!BL64U%#{%{@%*4)VgejvX;8(sHH*TQeR$!^kx0n ztIoz&rdfrC=wn36W*Rhhkq{l|*)v)1$yabjqA=t*O65w#N?+t8KYEd34q_qj>@jHu zul3jRssjc^Orkr5u&h#UXgprfkN2%az)8_X(X&3qj5N+mdeod4eTMpOCPRDSs=jFQ zLSDNtLpI_}2Yp4J$MQCv9`4~CLw|`5rdW=K^Bgo{6eaIFT)`@}w34F-D~2{~iBKx! zvjRBOu2AJqQ$g$&N<_g-F5V$UiRCIPv*vYXs3wKz#(2|=&avRK!sj*Q^v`#6E=+L}4Fmu%e$PkzgV1sG%YsUyN2(Jy9Q1^~83e z?X;*Xcp8!0KKA{3r06Kz>B>5fbeoxf%t$<}{Clp>jwYjn8w`u(0%yU;n^MOY@`x|+ zY+SB8MxQ)F0;7R9K><+ki?;}@?)0#dA*Y)zhbK|2tAq-T+aW`aJdy9b_JxXwwbI)) zrq6r38i$(|lctm*t86 zlm{FakfL320{_SmRdsz%ttA7(4mUG$c@M_(!+J@iK|r`K>9`Ub!L$rqP2Rxha?-bG z;Rc&Gq{GD(mW?*mUW=yNg60kAe0(-NaHzZw6|-Nf%iS#B{^`|p0*qHO z<%H5(>@LNT(Iaj>9uw-0Nq9ZT6U; zCX?!0*1n0YRAdU+zP@a6uGlijkew28nkPN;KL>DylCUPQwI7x#>S9!B%MtjAF6k{X za7}8rI!-BanGv2$v{LwF z^2%h?P=S$h7cdz0(*00idtpG;3pvrcD~!#HSmLJOaX0;L0(NVvW@Iy6fd3ug@&pcP zEayuBoU_*mUU7dh-7g8hq^WgsA4J;b_HDPBQ@8WLJofi=x}CcAxjOFJb;LNnE~P*% z*4oa+A(v{Gda>`n@10J-32zwBd^&lE`4%h6&|`3Va4V9m!K-c|4X;UdgE%5z+Hi07 zaF}>itO_lDTt_rq_NDokD^d7Haem_%eQg#&JWZ_ld&)fRQgvQW2ab%?Q{x7up{>1= z@(T6uS_RpYnz=@CeGz&^BX8V|<@H!jXWIEVvV}f`7`!_JV4VDUdRJ*5bYi3VvBlBu zl}w0P!;2Iy3}!p581YGFyJAhTHnlV^26m@ZE}NEuFW@)$*UnZ{Y;M;SOT#SeB_AX! z#2hoq?Bwc$-bo|RYD`+>N4|}U?O<|ze6Mflt1jrhxaf8*#4d{TbdGUjHLla5C_24% zCuO*DbTKbFFKtj(a;<_#Q&LdV@6fqUFq2Pb{|x4C!ZJ>ZJ&r8280e3Hg@DUrncizANEl zx8J-d1dqF4@(=vQ)Gj&hn0zo+DtgsiRDPRxY>PVQ2ko1x`XR?d+?iU_RsD*bwR5vH z_Yz$&g<819kpU-(`rt}O=C#jMtz(+td8^_5x|&gWwm0EQz8Rd&t2#0bHPVr2bW4^JfnJ*TCi{S^P_2^D{E}w}A}^66ySiZ2lP&fFRKIPwxInX1_!?|BfEP z|Dr>KSbuK^25@k4u|VMaUj=Uv>+cBizX)`{XSn}~+kle)q`SY#aKD%5e-o3r*x3Iz z!|8r@SmMMCxHQN)G&@mZqoz?&0inva(ArSUGM&$c*COI()XxkiFn*E`&w0F!p}eQz zD>tV9K8Xd*bThoVdvxW-a}rTr6gdYWvs)u}bqt>3v`%hEHTF=0F*r&Up#L&CiD8=@j~ z+N1YcH4H~YX}kGbXQoQN{9qF&a;wRV zzn}z5D%eq+)L>!Dr(Dag9f~;HtU7XYN5%=?eBG6TJOfzI;*Dy1uZbnXUo`mP09V{; z{@q(3bbeQ_e?HH29JG!AvU~WprEO#)HyVaL@)q|QtxIF|%|_lUj7rtLL{v;8Q4fsQ*F9vf&#!IHwmtxm+MBkqHsILNNKx#vqVF8oDCl*-8pSpPS7<19vzm~VI~Q$d~DKHH9RL%HX> z^S%XXp++*M3(fSGZ(!7tePBcJiQf}La^skmH3Hi1%0pEiQ#@U`S4o_WlPRwgMEEHN z(QK~Er8C|%zL>f!I)19ZkZ4(jf=3B#ZZ3wTcFbg+Jl=f-<1|1M#rywjebW{&7Tm?<5u)xVA2x{pX~htJ5#RN+s0X)@k9BSI^5~^%KJ|5 zaJHRGtc{@LyFILCD;O?8{@=vjmK7+UVA?^{(Q*qTP}-f4-RC6`mv6hrsl_^b$E&8Q zzJw1ILJmIHyy`l!84C{A_u3x)7d!Xm{9hF4Y(!qY0xRZw-Uf#4D6*EzvAjB~PK%JG zX(!Yl6d28pRZHzqv#XKgv*JzB!!R2AoC#C6*^#^yeX6e`*uzw68cs1wX1y_;Y(Y-B z8$|AULh13vH=CdD=+Wyz&caJy>VtID9n>Qrz{VuN4oK1Y>4&c1-*ewt$uQurIkugrFBm8y-} z8V>F|XAC}xvh#tV?%Rlk5$rAR;X*ztPw38cMU`(D5sfXeqVaPhD>Q%$k8ccQiGGKdIuj((k>FiztAF+~W|AJBepd9_R z_zL^1rVh{T*{MK!@mjBI-0#hq#O%F+97(?FYBw%W3?V#uN3t63#SD_Mo$lmNSkY$Gn=0$wg}&Yz`<`z@CO~Q@>GXAt9&w3y0`PNO4CW38 zOW_@}3DaK5!jBHZ_Y&&*3$x9WIOJCp)y}GX($(S-@a*PW+@^tESFjOwq@ic|8laqL zuLK$FKw=SC#MB(9QL5Pfw>?Qd$rt#5tEc4(cp(VyK=kX1NZl$F&g)6J(^**Yyi(-2 zMwHdO*PmqEdG&;~pN;sQi)gsPyLUkQ2Pi}FR|O`1D1;{bB57NL<(U~Q)+v|^WiQ!ZzV}p+Wu-HhwAD6 zDcLQBY3lvkt6Q|?VtrGIS>Zj6fXkMz??FRiSN0s=G24CiJP}u^!j7E|oGRD(Vj>Z{ zL6h+m+`fviUA-Jm+Sn3#4n*A!n;|v%+I!n`ThC+tx&2+1A|)z>9^P(`Skhp+_sB^x zzUY3V)j^IQAMyR(d)^ICWKq4}R^3sGDlYf~T{9V$p}2@JvX!(NQ-|goR2ro2cZ`bU zJkY(r zf>lX#3k>anF?zGQh)zHsR6h-N#^y;tQ&jmAS}(ok^^&)UWrqcePi?KK;6|H=Ps*-M z`Cf~CnEE~@mj@{IGJTz=$9pisE3d7&Vd?NJ_=b1vR;d)uDhXh0(U+NIW<9Bq~-~PjZKznM>`|pnD>6ycZ&Jv1@{VHRK6#E`&0l-{#s8 zavGh)$Oj(H*ZNTj^7|yZR#du9Xr7g^HjA^CV3ES|IFC-`MFhW`I52~W*45S=qkk0N(sW1ry=r)BzfvsD`96_g&|=?PW&#H#b;& zRQ33sNW50By=!BZ#=?9UQP)jH=ZK+R5?!nft{zIQE*)Xv>UArAMvH%}?uZ?dO+JkM~mOw}Jd0_cumJ8rKu!D<=uXZHfB3OWA3m zNI&6JOu~LMC@(=Ev};_a**!3ayZZ#fe$PV;>V3P1Qe(yf0y zb4%()Z?Rdvp_`J^bmm{0OdjseooJh|aSB!Z=1*MBD8Gu)i+jOLkt z+#=pz$G2(4kcpXYmMpJ4ppltNm0V2PZN3>Sk7!&(l*GsXt}~+%hw)%0SW#M8OA&RR z&_YKm7y9{`U9S;mrk2DPm_VUk|8NqS{guq06_J|yS@hw|J6cs5lSki;73`7l;5ue_v!l~a$bIDlOVXDM zW>p4z_m?xe+n2t$^W=V3j9~8agZLnzYQC@c0bgN zha-a=bXaR>j&6eZq%foTX6A((qY-VB`!)C=<0)V{)BEble3F}04@#PjB85H8TCzgP zi3nch{>|^6TVxbOe6R?7&tC5w_Dz8D6aryHLZ^=S5_l(1;|W*`KfCabTqrd$Gu&^# zlEKcHwA!opRMjhx(U7N=*~_XkVE1?65@bhY?L`O4@l#j1Hg8Jqpz;a4>u_W>4m#G| z*EZ?L5!9vHaoaqGXMyXw(c*QKTc1JtHv9NR*UTU<*Ni#arQ$S}f>{ zY}<&M-c9ApS?DG^GndgRDd=LA>z2~*h`_{U4JH(cWB`s%K-|n zFmWC2^&dxD^*LLRGtg1RPZZp0-1PNqF%X5ySON-r=?xS&a5z6u9@fmf@5RTxmz4Ny zTBdKYOGkbX-~6bgoCFBb9od)}+Ua+Yb7BY0oiW6mvg~GXH~Aa8x$++jKYVQDBznQZ|Qfs6)C+$zv*+cG`H~8f(jj3-|n6AQX#bdMER>e zyp)jZ2b86uIhiEgklx_;KE>b<)rZy|hNkl)gWWV6(K=rxEZE!SCJ$_53wC1HUWDyv zIcK5GG+`N>kKX1<-@BU1JuF9~d2>~5cxY#dYkDVtdOJs7z@rtA)sQlrSXVoVJ{2_h z5L|3%LU;bv)`A;>!TetO^WE~RYN?tIf27hCH{QW%d%x++8FV~F(23PVju&#Pt1D`l z;H%BoZX1*lTs8ZrZ8XKy2>f4D6znZ4GCAgD1p8yC2A`WN?hmH0QPDJT==n+rN@Bu( zSxow1>i$BX{|Dd_kN<@}lR*sasZ9sOXe(+e20ZB~&q zKv9*9gEA?gFF1UMAxba6&)_K*(!ovCh^9}uW+CN!h|J!O5Z1ns3H{l9c!^RDAllkJ z=%eXH(K*;+F512qP0gg@%huhhxKbp*6#Hb*hLfrOvZ|RgG}g#fef&m7yBJTh7}+Nq zf06b}5IH@@*}L}*^DP0^=k765{kVMO$iDL-AE9cc0cV}d!HHA)*w)oeZ{XI`g9MBD zzQKGd-cjbtli?K5N|%(f)cBr#4mSgA)9+;`mqA3lpYXX}l*K9>$P@WAC;A*U7nVo~ zg%}0c%ohdk{ z8rIYWj+y8JShgLbd7(5v;B1J!E|&2~Y!o7v!UXE|0ogGNf?x0u!G5I}fo;ZX z>}2au-u#H=l{j0gu)WNe7cM0;l{Zb{MVO`j(;a7XPxzw{>9MQ3?BWA`s;~E1TV0L1 zp&!+){mlXa4K%H56{}={0&1sLS)EyF$o<#*ISOyYI>-HGn>9@EEO@MrGFG)79}xJ% zI!*op7XFYU^4GBN^A7gMo)7TfOX>P6Soqicm!A&&dsqPd+~j{>Rrq7K1v>x){w+a; zivu$ATOtaCaX{c-5>X(@^pFf9@Xx-VKV;VbJ@J9<_gz1~i4R=dTz{JfbbjgG82iBk z=CB;y81YFrwQiQx=Q%?vCVtYV@8+w^U!?HM*iYi!uX^0Y*?m$l(s5RC5DAPBjO^cx zziio*3D2y0nR%L+dY?GOCP_wd9gJKk!r;>tHAXsoKEqF_SDy8Q;qxv%M&LmtMLP=X_j8;u^~G=35L`~>?iI0q!^R= z5eZ)0a9%t|(bcZj+BHlEDl6Bx?@yOif~#^v#$SK+Dnk(_Jx9QunwKsf*1tl;X><$= zspNR~wZat8v;(Ccj9ooW)Y&?x#mpW=hY;Gta)%=)tM*=3I}@?0IxOVlT0#&i4AwSL z=AEHMy@1JA+-1~@-4|pih(J{6{GfjB7e0Y$D|k^ypEp0?`)78$3>m%pUNuDpcdg5w zcJ+BDKs)n_v+ca+GJzAxp{4nfX&~4NCHOK;I9RDv+8*~>T>zH)E8{?z4#}m{=eQEd zji(rrTA+kmLzq-rlQ`o~!7Zp*A0BD>g;AkzG2@Um8&|~{kpgM2VX9_5=|Ia4uatMH z#M_*E5z|0r2}%W>;#PDV8(*;7MxHB~-9RmlY2lplp>N-2}zY>twAe7=ly znu{XM!wwl*B;y38lN~O%Jttr%8H>XZ*ojn@*!*!xd#8nEJ+ml{kov{L7fPM)4EWgy zdW5%mp}RX_yklZM0hrVUSUq0NjaI}mX{A_ElNgpLNUvCH<|*cF=FM7N=4gb|M~#=R zX`@voI@BSLPZt!}tmY+xX^+qny52)C!;pl9zu3K*KA)QAzjqhRc>n%wgI+<%_@T@@ ze_s_Uo#&vc*BE`!V*3K-ECa<-T4Dja#eT(7&_di%ebOGf1Tuypc%*3-4g@Gwgi1{l ztn~V|2Lwn35#G5+1bPv?gx?z+qwDsYao}XvFiDi=ZaRQVRNrYsmQYfG)n{VdbTI>o zZ)=VTQC&tm75yWVz7iHx_^spPDh+X6HfC9@w@+TNP(rD=2gZ-&9p_fR>A|JS zo=kYUXz_%+atfcXwLf2YIgxqGv%Ia&!}0)&AQl2Vb{$osqVWFV=$$ZicHDZ-=Q?e7hZSY2pWSwxqJ&5M~g- zC_)<-M;<>FK8we+hjp9(Skk26?{&S81$|(MjV@SEbArBiR9E28f{-0tfd7(qV$hr4 zdVK3PLgpHmonvU;Nqj+IBK{Rz%BtPgG)A?PW~(v5J-bsv13Aj;{n6a%YATjt*@1-p z8S(>a1Ea#j8Srg!v2E0XahFelyUhtGI890?8N#!EGrp0GpXz|6g_V6M%tXemGj6m9 z$|i{>+IrHF+%6ck^YWpkZ(K^d4sjIb-mCI`7j}34Y%UJ3tlua*ujq$?xrQ{B{q3$u zzV$kz>P=ZzxGyC}-T)PEGkg8sUfA7=-j$Kut9112Jb-pOq*-{HTUpCi~WwyQwpzh=^QQf{=sJ} zml~!?6uzq(vl9`K<)79_$5FUS_m!Lt9V(k+s?Ez!teX2%tY6HykqB;HViGI`^p5Sq zaM_v(#~PKLzTM+RN-!#OhS}?X%>cZzUEIebh-%h%>O@qPfR1d+4uy2UK6#q*ZvTmz z2_YITF8p={8Fkx4cIW;@(LPLP49@&|wd-=Iz`Sxn0lm|iG7{z++|)CX>(*wTIU6>7 z;>y&g&IHO&>&r!TD+%O zE!U&-&1DqmW8GAqT@Z4qj}dRmjBI#5Gti!0%4KmkaEM2`USr$zeO7r#Ab)T0a2!fLN}L4nMJ&U zTEuOmxZ?zjgh}5k$j9%#C5KkLhcHZ2YPF_TNSabq+P=vKTU&F1OZNIW1||y3fm2wL zIF9BSOI|N$$`bLjr@Y))F?v9DZog7xfG`w2Pk2D^j5Cv}A)5HQveK4Pl-L;CR0r48 zk{Lz!HY%>NZ;I1-Qt{9}^m>2)@#FA!-D4|0LE|ZX_m<16&k5v#4}hu0fvwx;G}o@- zYyMPIwI2zWI9^Q|V1!Y~anZ|{ZhKWolu(>(?6v4kk7^VT!Ud}ec^Bts&Sa3#_YkX? zPV9)DGY-jB1|@=$5Q>?a)S-bdV)}X>1$Z z-8V`-5A^3x{NDS}X_Wl}E=5a+##uM0c*k7@_0*aq0b}Mm+0sKbuIeqdmx>6s&XF&< zvr6d~8Z4{$D$$mDgzPrU6R{_n*IRYSnbG_6%Pd zRCk>F2R0>lM=Ch?Q~^5cX%+IM<;~7n22GEjO?Fi9amswj7J5BZ(qJ(DRlvHr!E>&h zj0KNIA`o_Og$3}LfPm5MzpqANWbl)`*;Yc;@CV?q3^kw6iFM=YLm0#n0z72#Zsvu z9EoCLKx@Gv(XEhHEgl>aO2af))RUT}S}L8kE)AXC4PxfszvLR-?>2brmw{!Y-+6QM z{M5=6AyC3fwNb~Pn1Re=?LJwuNQuBZOSQjG!FDP9mEK$NWTxYlWN(PX@B|C3n!g%(60LtI_W2%XgqJ4soBq{lZ!PM4+0 z{^z_?r`xaN`Xi%e&&n!}gA)j^(9m?|zT7t+6~DFI;h>1za_Z+KcVEeYFITsHLASu* zs6rC$4}G?1e!M3qlc!o&_Vo37;zuF6LCvM%;cq-lC%OT46a1zN{E8*}KA?Sn)J-Sh z=lmBsX+A=O>nsJeBJ>}~h`pB^&@Cq3m!s9jFJcJ4uBY<68sFh{6oKl72gtI$i>X`0 z+H(rKaKRd5EB3?It=UUC5^nE+2K#j}{MFs?-|PNtf7bok{xjVl_>b}|5Zlkx0s!de z-Ax5jRP$35fXx3AL4(+S37-E@pYhY?FH3sNCJuJ=kXsmJ`n8VhmuCJSU1#HjlxlHt z{=;<+c2*W1ND==3)pZro7t+iU3Q}NZF?n%j5f>K+6Dvq%y^FB1iT(fBfS*B!d94y=%kfIzAKl%Ujy!t=-&(6dCqecz@26M1*v2y`9 zz>sr>odZ%s$H~IU{-bv8Z=O4ruC9(Qyg;C{F|(_)k%^6&^FQ}D@Yf}*AfThO!;euF zT!1QyqLLaw7dJaQBWJIFJ)?e~Ve<>V{#v*AH+~FkY%E+{5FzTv7#EN;iw#oJ#s<;I zK%Cr=n(K1kCIW++6;piR}N{$H(@oZuW1=o3N!yq z%#a}`{sGLt5c(hOz!1A1slzRIM&jOo*U>Q zA3$N0ZP_{T+o?A^9_?PahT_^^g@s|fh$t*7M3fAcaR5{326XD99s~KKqvKb^>THgj zij6Y8G+qk9Q}n&Ow21bGCz5&3)qdXiRN7=iMhvU7i==<0E&w~E>+#T&TafIDK_9^k zRu|T0!Xn!@y3h;J!MLaSf?#w}hC3nHsC!u-b4Olx=48>Qz4PrU6~$(nluSv_ki=SN zy`9{yy|{VFVqn${vfk?J>BW3Re}8WT2n`@*UC;I{OF5kyEWsC#M!br}N=AJE%e0b0 zl0JBNDKxpf-g70P(l1=0ST@0268MrKN8c-IwZ5gPn@MD1?o6a+exN`1>Ml5FOQF)&__R(Bi(%!NEU1etK)S>R<<7}N}ZtTAf02Lk>o*U z%?63Rj;TBi)pHyQZX ziMmeV+58)Z^PG{>G=PU0?qbuV6@zGz;zN$#v{BtsdTk44Lv7pSTSV>&sA4UYBCn+issmVhBw4{yf^x@rTcfE@CLg*2 zmLTy}^*0+oi%bZb$8q4sHpaWMAypoMkzQ85dig2=4lZw&dlD8kHLfA=CpGn9#U&H$ zb3M5uWt`#VJX!yn%t*4!`9>{K?#$vOfn&QdrdykC-H#=!x5Zq0wjrjO7+M*A$|LOe z7(b0nd=c8|n_RzdLUiJozoXNpqN?KW>5bmMloDHJk-OPn$6zjB;j5_1EvpjFWBgj> ztxmsid*gg(aS3Z3J^N$jyM9cUlxl}<vX&~(= zln@z3@6fhTmf+`npjMkdxmO$`#O%um>o<;x!m7-GF1R9~gD`BN<+oN&=(Y_3vGGQCj*FM@7lx3i@%5HB%Q%zJOTT2M9-Pg00r z9%WcB2W?&wIy7s%J7&ogBQCVot}o-vqu_gIe?0{?a_%kkDPF!}Nmw8Qf12}V8#`){ z$>pG=#TO=uJ9~kirT$d) zMkG)ARMD1aw-^lQA-T9d!_}PzCPddI-{*Z=3O2BA+}Rxkkqf+KMh`}S>ZX(SeO2Wd!TeWNsDKyb|2rgs z7mZkdTTlJVJj(X#N60^5$;Qsi08*a)E8wp?LH_{A$^|qe0K5zSFM$7!Mix%siU?>X z;a>rN)x`Zni@>u-3@pG!=f48}eUb4uuClOjGyKDKd}bgL|Bd8Xh*_Ap8Q6d)gZ`z# zUspB%i;I(A&N2b5g8k**{jWFmfvZbq;F1}5jQlU^&R;Kf{c2PUxLL>vT$cX!armDt zbl89GG`}x&Sb%0Y{?mm{c$5HqI}=LRgoM<*m#_S$yemxOu7ZgbWkwlqrI#~V^;-{H(bSS<_7#sb)NDOrNlB7U(+e0os*S~B zjz=o(G3$#hy1KE=cV^=Aa6(c8Q0VE^bBD~Egr>V)!Kjozb~HIA3nlUHJX106J9@KK zMD+Gkg8sJ_1%Xd&Qd!1=ikEAtuTJ~Y%tgB`t%Z47qcMU#^~-ht!}tU|efDRs`RDQJk$-<3pV%KizW*oV6Z_v^#76}F{rJTE*yR8A z68b;uK)^eXfAZ+50|D{=Pdku(l#pBp6N3NY6(+v}nk+h}^(t*4fpRG#ELtwmv%Myc z|IgMX$`6@9N58@JyG@(J3P;dzSi;GZGK}Rk5+mXp0Vub$Yx*xVAj|3C;XUAG%RN42 z0nK4HsRv|R^(~m*+i7&)8*($I7~yFXDOU8)uJ&SZr?4pX#PoKKIGpKYqL%6l+$nkeie0P!r*A<;SIUzP<=?(K-de? zkv9!L1{BH3xAzkzBj{lNL$3pxP5hIi|J>^ynf}*a$MGMY3;BIk{ADwV12j`9{?)4B zW8Tw8;9tIv|BvnZFavGoa09=b*x7-GeSjNN%)ku|E})u$or9HuiG>sRx%>}?eSWv< z^RG62fVKU?9njSA$gY3?j{M6E@E17Xw8{l^G|%?0Rw0=m8T-HeZUIMd;29U-SM+Z~ z`(I{&|HE(9KYPocE1f^z$v^Y{34MHCUK|yMljYKTY>QwH*g=5%SBE zC+s!Y*tr;h_JIBXc_QI&4Lnf+$_8#F{XZ9eq3~%j`u{2^|2ORag$+;3-Tyzb;s1t( z|68!Xh~jCv1A5nqK>@Vq&j}nTL1|W?0)Y*981LyB7w|VH@a7&U|0#f;0d1lIH>ZCq z4~l^w0e`?e!TwkAQ$3(Mo&u;WH?Um}pyh_g034DyfkzjgeuL7W@Q5GqbCCo1oE^9z z0^tWrKb3uoAKL~#fBOAc4p=t`1{7GixF2x_#caTOLFGYpKjF*v|!ZW075-czy;LI zfC8w6N3H;EP&{GqUrCJ}IIsRsrS?QQsE(%qqJ|r|DgMZ1Acen50)!_h9~2%X4&=&X zIiM7{eoupbKb3ouC`jT@aNNN9pVFXwP(2_#9_a;|4g7<4V7VtwKgFOjPyF};_eZV+ zd;351)+Zc6WuM?4@dNQ37#^j^1(X^n4UE}=>KfF#HPh_w=tl&A8#V)H&BL;<$iyAf34?{kY6hWA@RfwcA!zsKd1**4&n?*9#8Qj zSANg`0|r%@(KmmjcH*gMkV%Jmr7g+$wd1?pr z90UVm#ba5JEI={@#*fc{=||as%Ka|0$GU#c|Enl|qxY$95FChxrx;Wglm>-gX$7Sp z-|OF>J(U580R;a92TFtR0>;0*LQmfTAa?@4?IHljP@vlQ=@(FR+$@|=zknYHPf4J` zSfF|R$G?AnW-VM9N;%G~CY$HYN)&|T_mPDK#26MPh_F@!W;WQdWHg^3U=))+CMg}5 zX%`6YOFYkf|1f{L)G*a#Hg&x*=PKaZ;@WcK%&$V>PWBFpX&xyZE|A0t>e4F)@PdE< z5fy+!)d>R$hgMpSD}u@pC13%rq7)QJiGdV*YYBLP3=8XhLhXw}^#utZdgROo3>Fp) zQuGB>C%Lzv7cmOeF(dK32wEz_Nq`U7OE-Wl7s85EYd)mo>8aPtmn8B%x4W3F?}wkE zL`9*jUd1EHTlqT)?h7$_A;JEDv=&P?Mz#UNY1>aj@mms*wvyx_L9vLrz2)cUcOzDn zvp4lGF)6jB`nevbOR}V%@h+}W$@c>rL4m%$z8p~4f)>P$} zbMV-O`^}U`|kCUR3pPGJsBbMxlqobY!3VZSYISeCTgrNGO2&11x*lhn?vgWH7G#AYb&O zVcmKw3^NiyM2nOK6b9IA1|j%^W&VTo)e_EqMgN1?$%DD%yB~);Y6eIB?{BTz_~yME-Z>PEF6;r#wTYezbmiymOFX5H@S?E zg~(#lJa^gOEL-~I^6CWNqqx^no^94Z#X~{fOCV%1x*APfbf9+)ERjS}N}C61o86j- z$lF{S5z#QYa$V*eK#GZi5hEi<5rLVWQ^`Q05PP9f;jG+*&Hz04aqzvR!BP#8z`0ua zU_FZ8s^PRo_WRs$wfz`kK!NETW@;0ND7`p25keMwyrtFel?L zkPq(}TBwkE{$l|rx|_dWm>*@0fV#X*#Y%d z;)R*sd-hrtCj90X{mNZzWQ#k^H}Xn9HIrgqx7$60lB9PPFFA><;jz0eVt>ypt#T?z ze6?V1NWbm)5i*Z|QlHix;tqao;f%mqj;%?AGvZK!wD(Qs^>&=Ub%884oMiE-bkjxo zA>?%4Li`fMg)*J3A@Q!AT=JCMMd7E~`37w^1;^EWY_oza{-Gf`e93sC*Lhc;b=kF^ zLuu4+(lVXAL*nr3V&m|5K_}Ln=X*Te8dU0}$G%D7Use13+^=&(Cjdr}N@5PtI zqodAjdA=$sfqcKG6?bagGb9X z2joP?uDA9tZ_dAsrPV6Q_z>8CbYVOZWT!78Y>b&erXF(EQ2wZvV6Kl7NOoY}%6Eml zv7{_+I>Ge%W@62x#`y!?&9 zh*%{)HzQGlExjp2@wL|SRR#XkA-^c*w&pe%xzJ+-9NQXICZ`qXi=WkUK-Y<19p;LR zw;*g|`?1bH?wcXGp*OtXi8oU2tqNBd=Q3>?t?{Xh8;y%pB=RdLC-i9eF^-g3wsg!% z+YCXndfOIqh#jbB%be`bL>c#-k~#jAl2S#M@W5oZv7j(=4^B0242x0M_&a~vn!Gij zv08QuOQuNzjH$eaL-nV8L-v$P)KYtQW#kWnwDEY-ZqK7L6#gX3hV4lH{t|lA+pR z%)C7~j%}nQsO6g@QY7>T1z*v3%(}-%U)kvGWvcE|o3y_avMr6DH=UMRO$~gTO_pPY zTqyIKoUp+R52nU#YDr-KI5s`|9tBaf^)0S+wSyAxYbrnotvgS~HD;!{2AM3X$039O zJ+#Dw_4*f@7?lA$PA%hC!Av$Bd)@pT>A@#r@{<=3QiOJavxk`N0>ZY5hhhoA=x>H~ zXXUx}GVGU!im^EoowHk<(m%dzv^+|0$b4S|6XY?y`f(DGUz87h#i={qiov=ls2KwXn!-BjI9WZH!}`Ue;+DU`B6GOy3n*Jl~GP zz&z!r!1-*`m`F}t25J>%$v!VM3v1>&In=vm<;xi!yMe8+I1Y1v7wIJ~W<@eWL({W4 zGX)NMDCOaXj%ydyYf+P9t~G!5-d8A4EYrc~nb`_QIK|m?6j!B@%n7E^c}^R~MrMMT zhTv0-R)apL%M?KXC_Wp-w&G-ct99Y5t12}|oMya^XX15z?Xf5o@LF`QJ#h~fPN}Pn z99c7nrlYqUs=Mu`i3gSfc#)-~i!2LD@Dm+0^mi)tez;m{;*ENWXMXKq_RnT>;ouDz zM(*fXsQloj`%tay=E{(FAwQ%A;6)grpc`+PM8C!w5zAUiwV+*n;C2mc`C?e|A;oE$ zBoxw=Wvtc3OUA<4GkGGHfszwn&bo#(>jxdwcIh_@aB()#k+yIwKDP3SUK^^LqZjQm zpC^6KIv21IZlmn)0T`^Icud+t$>GadL_d}eW!%PUg(TrD}tB56jIz*SX0$IdSkQEWJJ>YmBuv0X^@$Q(Xx&s|bWcm=1{Io_Y`xFk` z1&J;(jz01k4?WIBr>HBXsbG2dQUI$osRb?{{uT^?c+a;OY+fJ#knbL@%<`FA zTJ3&8{)*gY7X6`^D$CxhH5C!+$+DQjyRItT>FCpWvug7Z_-ho(MBP$9pv%e!VMb@O zelvPc1ZE18IfbwKWT%m}+jNQj-^Z?@=3~_h%SbukIB%UFxbIJ6?n`b05u z?(Qrx$@urK`jxGVj!lMDN399u?_-5*E5_qL8abrXq%55!n!@x%!?aCv7D*Zm7;`|d zecv6asV{+TZ{-v>g3BV4dOypn?t_1MF5Z=-SOlh>gk?J#>_49IbRuA+tq?yX59NBh|k zb~U9`h%xFka37Him>MIfOt2hBo}3NT;4}Sv@dB5~CD?yTF(pZC)4cuM7t^Tlb=4o=g zAGxPPQ*f2JItkiU&uk2bzcCyYhhs!=|IAX|ptBbmM$u$)nAZ&}ONsa%95XNa@ym_l##>4{qQ-0J?S$SK2PEv_1}X)`YS-_|=x47BFqOIA z3hSS2bQB=|d|`c^1jfI);|~e;>c|5^?i|Xo4tQNxpnF;{)#}Z%PkxEOvrvb52kt-t zO~YqOw>NP*&TMoFepNFrq==f{btSUA77IT(&r}iivD>P0KU6d`wY`1c6LnZ> z<5gKYf*!V4Jz&ZWz>Y2Bjh_IhCVrNUmBQ5{l8uPikM~>pnAQ4m$m$H<_$b@7lAXVE z%dl~~ddGOd}y!(kAZ1 zL^`IGV;RbyrO(@{)HSl4F56~8Eu62*-cA^(E>t)vO=eQRTTA<3`PmX%RXUACBEfBSpB zZN!2)KLEL<2R-pDw5MgICtI?te-^>x(_%tAs$Gd;TK#;4+{ef@_mpuu2hnww9&>A> zRg#CP0^9q7HC8G`bfVKwyVgB%fl(qgTQA?m&^gM8SQ#R4e7wnx7q__uzq{2|S7p91 zoHC>^s-=?5u{827uftovKNxfx+|PNFZ{>Y4b^p1)m#4Lw5iuL;l{Q1|%C~4v1N5*m zW2^*QMQ7X$coq?|`G`xk>P??Ly92}h#;>!ZUt3f%2+%yfxjGhm@_S#*jI$nL_)$~CHxu=M~UIXG_+4?pFM^)sE zG$X7-7^u5rpRL7BVXWs(`#NaraYS8|m z&b$&;=RtHOI^OVH8MiF1j}nm|oY` zb;8UJZW;YbapjI_7YR9P)|pD2G~rNm>Cpf?-zm?-BhT=H?G)&Ux9IT5MR)TW!z1sN z!1v})%crv)%f7Z69Ox8Np~gSGSCux&(rm|L^s#n3-X)Ou?j5GdXcinL@M@2Jdi#2X zv>jh#kZhFmi$E^si|XuBAx2dE)nI7LSIUFWj2$SGUYpUb(8qq_Y1S+5d(pQ!FPCQG zApm!yQvJG(Vm}Gnmu&Z*#J?6@NtT^HbNlmqMpGO84Gj`wGNiNUjr#NvxYMzk_5P8< z(6K#vEp3fXQ=WbCSy7bHf}=V-+2L819p~Y;PHH{<(%rIS0?wW+$sJzd(_5^utD1p8 zVljo=nXL|@r4z9QZq~$J7sQQ;Z6y94jWQQ(BO)(HLjLA zJZc*vx%r|agNAk7u6E7lPklft$QzqU9S3w`QK}W0iDqLXTg|M^Aln6vo#uyR-inF0 zsx_+W$XxKsZcn1oXw>6d_|S$w2Gt&+7QUP6(KvnSY`^*UP5H?mpDNkl#>aR=cr0di z7PRx{BR%lrHP=!c4wNG-Pnl9~M+pegWIC}8v4bK6m4QySgNWWxVGT5z_l(gZ#B?Yj zk*>Rm+=_VAArVnB>f9cP`rS<3Z1G0)(8#fxw3~l`#Y~NbD%a?P4xk%QxG1yV+$H9BdzTu!|Hif2c9>DRFlTiJ2vB@@CuuuK7Qwlc8-u)F=ted&g zn#;CDaWAfvUo=}U&&JqZ8>U<;WXgBjq4_lSKpe{N@dy6w9EgYtcT+8F`$sMgcnhWr zYfkfvvG^rTt0mO3O`ZijEPI-agoh#M+j6>Op?&hL zvWs6%K;^4&S$FU@hhvrUIz@w#&NM~zH>&loE9_lf(NWlgH;hfn=u%hk!t z0=I32l=q;29t{J}Qo6DVG-Is5=}Az*l%^1w*^|A;{(i24RHG&+JTZ+IqprVLnoeCFIBEckD;) zSO>b#^0HAX($DiX&vmpqzOY=yLpSm=nuXbls796{8f5#>b7RT<;xlEIT|{7nU<^eq8>}81>(y?T{b_R%A561`2ZgxC2L-=R4ER;D>~CY< zFd=(p6Rs-rs*rSi(l>V}@G|l`$nA{Kdy@>n*6tIl)7mPrAl0{vH_f-7!?Orckn$yO z(2<~s1}E4}sBa=G^q9+6zzX1i&tv_bmPdbo-Yqt?k3dzWv>gM!%>Fv-(--P@6*du< zSPKJu1#yac@qQD=A0xLvotS~fW;UI*J16|RK9 zHdlU%+Dajb>jw|)tVXJ6lwP`0AlI9}={^1-(0qLM4akHO>ma*?{43zj8%jhKx!Lqy-Q~k-$a9$lOTYY>Q!n81o)5$&Gd4H03N1%6Tl@3vYsWwd}XM4u>bb=qOO}C zSuoWTA2jyxV)>a_eoz|Ls$cNvqfexq(f2USFSv3i<=MndLHe8rC8k%Q+RmXXV?@~G zt2_{|{T$)rN0hm#KkIN?e?RR_uq0K^I(WBY#1}lA^DkHa5I^KNyXL;f8Y zw|1n(w=nq3pF7&aVI;`6$k$Zw%{@mKg)CaFgPe~ko`-cFCdlrpL!T-!omsl0#^49s zs3g2c4AhrzR#K$vhU;8V%)~2VC}K9_r4=#KoqU5-TqW5`+-Daqe`XP^^UQgEcHQ&& zL-yKoL`lHiY{=mFD_WM&HFOywL+h1rQ}`?lOdZ!?QYVFR4W~l4@Z&Pf(0YuoIay0N zdKBnCG|H4FEWXEexCda zO$@pjIbMsXURTxJ=HdZlZRqX$Xgbv=5J-Whl+7kF#~bQ*_T?juq${9M}lx89mS^H5{Xq-FtHrJs}Gta|2)wFhj}C;DZX# z@iovH_U}+^tjxeljNjXU++R~MzPGWlbTqcKG&46aw4?qF51>nH1E7CMkjn5cu3dnN z(?99_Q;Ep=7bPOsADY9zC=t1V_Qw8GC87hAvhv|i4oSz1IDB$Q{D3r(IB2jwp?YXT zFA~F`w1&8txHz;-JhA#0qQdGz(l3<-P2wJKE*2jSJ(kp$Y7C25Hy3VZZWeA9hHZy_ zY>arr^>&O-!D6z(kr6`%NJ4~sme*qjfTMzm5VvQ}&tFT1p|6yDikk!c*oY9#$b7&S z97P1{(D@+Egn*S3EDp9q_}VK9mYAG@9%zo-8_j ztPO3tmfL)k!%v(&j)!_Erw^9^5^CyaBZpRki_d=qRC=cYWO2F)e}pZJLT^9{j&evs zc5f0`t7=Qt9jKXmhME((Bbt>BGt&Iqw&Scb?GSr$m z@72sVb{9zyQr+d$Hje_BTK20HN}Vr5C8XkNM{Kn~5}Z7Mm}P*SAUe7e0H7RQm;*>k zM_R`3!tdi@gRcn?D$0a-8d~M~CF2NmLhXbBvosfNIF<;oUTMoMUQCpZY#f9e&qQ9f z6_$A|#diQOowWb~AC4?t4>&9&vBP+#3AWD)#M-n?N^=Usd}z~?lToR{c(zNf~idlErGX=Mx)G|YHN@=QN3FHgf!Z;}TUuq(M-+C?ko=Lb_?jBMde)FNyx5}KagLm;!~9dI>8c?@V*6N_!z{NCgLnp`c0DI|F}!)^&-ac z@756km`8$n(a(mTeOD6`1qhjA%?2raUzx`J(%5TjKlhIwg;Sb zu+45b)QV_1?Mj97hJI|FW%{vV!Ie9y0ty;ED@gV}g8JI9uMk%ioo zefRdVbG1cBPURT@eq5&jpf(XNEym-k_^|Y(cxdY+`1|gO% ztTR^Eq{8VM`WdEoSCI}Ei0F9)t3wUf3VY7Rkr9z$&nkN{ zqUy?Yy(*2sa-f#Rp0GV()Wyc2XXW8RTu{O(yGE>?k)z&tLPCJvRPs_{XfD%(BA}D* z9NH0|5UPx%HA_yZkE|+Sdl)tgj35 z;`|4~}Bu!_T_!p+F#ooQ_Fs5WN#dFSt}DvE|7c2c?Sz%l23 z*kIaC?!GvTEMenNoHrRd-6R)Umys>o{f=9b-lWKXq)D(*t~Yt0v^yAGib;fuYV|72 z*e)CiVXSWtBco-z@YMmwx2pD0xBRsE9*CHBS3Z?-%PZ=G0`ndJtyK3F9g<@F3aE?R z!PwBe4VX{Y<7tOh_WiBjHwPiFno_S+jn-&HT(nwMAZJr(`t~avUk!T_5=}#5yVNX^ z;UZ)k3|gmMRHOCTet#{wTs9rfOL%*{Gq=Be;bOYBJBCH=3p;{56-`g&&u z^wGtKG2V*A6_c$^_xsn#pB03|t0id81PsP9VVbCAgLr#JQj$nhmQcMe<}3YMn(l*i zSmpO%(VZo~cM2+x#$tQaU&%rUJXFXSlFo!EY`uB7R-BlLX7M?Cr_*r0ZOqglfx;!) z3B@^DtI1==&7;L*`@%oIr}Ygw__M+jH)ZTM%_$|Mtq*XG%s=%MxXM4}yVy=IN5r>e z+SJS_^_O{=<$m~js}}eArvcBdSEgYZ=5xKQc-d%qhM^Gqn$V4D6rBpR zXz&vvGe&i4wt`ftD$}5i9Y<`hQsd&MBO96y8 zE2?9sD0DC@v`dF+a7W{8IfZUnZqd!;m8V4p(H}MOA({9{_m`}~awxUz7sx&ic+z?l zjYgS9yCYuk6ufVEMRc4yp@)v*&UC$zuh>0~e#0AHwlWCaw65Q{yY7g%_R9&!6l`cTAF#|xWpsaf}0I{xtNs~be$`@ObR z_W;cM9;r7qb10TuJAG+!6%vKospV%E&x5wZ7sy7xiCAgkiKmRy%oJlQtQ_Agd=;r6 zV41wuHkG~9vS^H}G^9A`zUXCk*@zT(pN5MXGDK#IQsDLSY^eOMxVjesCP0I#B5PBU zpOQO0iH?q_t>)Q2Yf%${T7{{m99jILY_CWRsT92EvjByN#l+|N0u?Mm_@;%DV(Il| zx=}Nea%+cm#BJ&A$5D!n)*t$kL@hC{b5oG2oR?-ap1+cY z7?H?*=_kI~^dwP{h}l#HTrQ&1*9?k`@|JM{eJ^A-+Au<~yKroql=lny1v>5!kqpBZ z%P?XrzSOCN%|;@Nzw7mf3fG7kEy;pMl9(ALAnfUXD;2#|GDfMOP-KN$n{dYB+0MK9 zY;qk>h+uvodsI%$-0h3)wJvXLMY)~a+nA4WI&!UG!LcQn2tKC5(mDyIkZoqREGt{LKbU#3+2*V`+IIuU`dx@R#b= z8L2{#sx7gWDw1qXl}`#$E@tJ0ru63fYCAWXr^$>P<2uJE|>hrOe*gfs8=ABD0L`WOe=o-^4-B~20?wzGpZW@itik+SLuU`zjlHzC+-Ek7e zoiV1TVbSeU7!PmrC|$fUDXpeicQUYAPF;JIMrA0*m~)eVG5ZtsPTsO_!$~s6Etmsl zl2@o}h%M0r;b2#HciY5ReDhNY`2fklFh>)GrP}EFL!~O`-YRDCs(7AFCiw)Zi^G8V z9g;l3`Pv(4$2Y}`uZw5fIP3S98692oF_5^n3?pVN^Ii}|qerG>{^0$j9mlD;FMp7k zp3d-{=T+7kFW{oOUyB;k)^iomSf$ zkGgmeItsecv>q1oTy?^EMLu$I`LCYEh^Um4M@mtACGd}Bn_=u<;=Ce&>FZ5Bw8SI! zf929xWrfv6dJo%qB_)s#gTXqej!k{UFhe6LLC+(>NHQd|<*% z7ap#9H1r#}&)*Xko5y8MZE(sp_gSCo%{zY|`M`*=Lh?e!x)C4l`8;r!@FR-6r2G-z zEx?JP+G|?@m3W`sncQ5Ho#X3Ej<311b`jdfZ@I%QhOz(xm{V$ zuo&LL!@so=XiydiC>;)oDNCA_?oHKE!g}P1hE#r7}vj$5U zx?#1_j_v#+=_3|Fot-tF-i!JAfaD6iA*XLRSPin2FxfFMNbN|UU@hN;9nE{d)hknA z6h~;bC9mOquXw|nacJ_*E$oJ7+aPGYN-29L$EsR)=lBDWkx`k1_<4i_LzYN-`ty`w z7=9Y))x#3`aJo~dFL9r@043oCoEWAE_56lxjY^1_CM5j#6X38p>(!rn*7%H-6>8Om z%j+bGF+RqkN;A=1*ir<&pLG0bh~;eTyf}Xli2mhk7I771kFm$GT)7bLN-F(Mv83ZO zeO|^%4m-P1914-3zP=k(BA#HVDG^NUTvVPN2E8uy{0CrX{kKMkV-tKtS zcZkh?Z&KgH20E#?TD?fwOsvOMTQ|`G%0nG;Qa&X8kQSm62n0FKn!aq+`eqd1>IA ziluuWDw~$J;pbl7)yNul`kr+Z=JF6YY8Z*bmUz5@Z{Ryw(PNcHaag;LSR$!aSM*Hj zXo{ZpJwTG_1iX$J>ex#dmXl>;mY*e=d1F90%Cn zGB`vmVWb^z8IRPBC5>}1Z%d4AvuO#jU}VCJJ`9-5m5LA$iRTqk1l>(E4?8<%?0oL` z-#Fhvk+vc~*n8JC?7bBgW~$`@XzgP_BGN=@6)ZEXM1DPVJM(hRijOEIGcnAaD+J zGbOzkB0G=oqlsDrDS>x|7byD-eYIl)+{KPpJ=uLa`^WnENk^9E0Cd?vM{GD<#z|#U zRL*@98PAH{SW0v8yLr!?SAG?|GU(&t#rOqFTZ-uEn(XF`7R>%My|uIcjW0&Zi(L2e zn%hQmr|;>Or#Ad|%drg3<_$V$he;CJbG!>zFp>xbE233cQjE9_!yt;WFdxk*L6fUW@t(T4l;Iu@MV70zO<*CLv#G}6&Z{OjKJrfwcCM?;IR zMW*tN!at1L4JTO;QygZTWs34C*U3zrP@dUqb=NtxP`@ZT zna6B;#*yT86Mg>qoN3kmm4|!%%0&!jRkUsLyGAKpexz9E&rx-Gq?#8~H-(wbJ=ddbo|C9!DTizbl|lL{rV&Zc(OKQ7x)o0305kic#6zXQ=>*B- z>$Vz;*H^PiS9i9RuDk?w&(OK~$y6+04pS zl9EnJfM-Um7A_C#0yfrT`gtjBWlU)>W#ByqB0+CiSz+K8POZLXseL!a&CdO zeA+Y!$wtO+Lf}LBH;8IJ3(k{w)Hi%9al^ihoJjT0yTr9bq!J(a*e<%4x#hLQghPD`fiWlckT@;myk zXB1s_R4XJ=LNRP9SSfxS`d+|H7g{2*X)nu-0t_d694gk z9(UvZ`JsM{)v>5{|LsI6E_I(wbsMrAaRw5W&1-#w9**r>QS+B6mqzUp##IUJY)6Xf zUunUYd%=qn8K~lZ5YsXYU1(Cu2Um~thS~5LxL(t-xBm!v8zya_prHpXqmp0O17(o; zBOxQ$GJWl?YW&Jrmg7duuIA@HV^MNBSHkO;wy`Q#_FaS4l+N$y_P>|7j-j8?G;otE z;V@dBBn)F-T<0@0BEMO5iJ4E`UOVmYB8k}Bm;D*B(hYl9)DYd?bKh`4PgExl$I)PX zYzRdfp5BF6YuGC0&V}U3m6#V&yb|YB9W4>P17s?ohUwprkM0>w|S@?r26Y0)ee}eaocx?|F;;S21da*6c zz+8R>zF{*tJ#952GpfZ;2RN=e!W2A{`rP&(S!yfz8gjGln*( z4u5_r*nxJJmS*+QviB#_BZQ68Qd z%f<$GE_?1IP(_5=K-ee0w1@^h*5R7i9e`Sd@mnGD!OY`j06)1_M|dDrW1~R~yAC{`IYn z!_jHA=ie}79m%Ft$Z1K!H5Mm$WalP1YKkQrXO9>z?J$R<`~@i}{j&7my(a*=@44vD zh?=b)N)hb~yL44oWGJayMPMvxacm_NP9EEiaTC;)3-H8e%k`Kuo}Q65N^P_>p|H%V zelA%#_k~HJ_6Ge7E#}sp(u1Sgv^lNu0Y$+9jm;(ldeBKV=>4%nA#L#NjQSF$EniL6 z2{#Mli2o=TQs9G&YWAW>*JNEeB92dDT{_FYgY~9*>{;c$R9E8>XKcyJ($TvlM?ADe zYsvKEu*oBj!~^jbX^Ql$gcn8y*WCBtIO^XG0oC7P@2k4pk`8CH!IixN=6m~}o2Dn} zC^%L0S+ZNv*;-Hqz6?`_*)+e|<1YD;!%#Fs+0j^tE0$hNmYkMgfLmN6wKjhD0*-8^ zJnQW^4i(x>HoVT9SeH%}2!MSUiqu9)`xIYs@>hZJB^+Kf)oJe5+>8AUX9M>|kD#5Rq!`3RWNAZoT zF#*_U&4Dp*m=^4TUeU{Dt`8%FA$l__4f`RkXY>IS@%67SMeVu6mc@K_X%)KQ&dsOIy@ zr)Afi9f^<VEwid-s`ENm5PjM};efK_wjaQdp%W z{^=rH1jw06^}MSb(NpgWE1DDd=-+h38nM37ZOQm8T^_Q&XqrP z&;l7`ma!}ieAc?-q;YO{EYs46^3W+Ex`>#@Wrs8wj3Rnx`d>{g zE6Om}LtW5CN-5E}@g<(*I1)(`AEJsu>P!&t4 zMZC9)c1|mieV%n;hv=0(oI=2GI}5pK-MQ$yqY+Hr}6FxZh02{MXt>AvHA_c_pB> zQR(eJYa4+VG3h}!Oqtn$=FK>{K_-cR*ERxGkN-1mBRfzZ_}^(8Z9v+~zp5HRip9UG z8lS9I{CZ!Jg`4XaRU-=v@M7ZAEyZ7TjX+DjKoe!4KcG4jXb#!H258*N9B4yW)IiTt z-vDIz_;&@a)9kl;17(bnS!iiVnH*x4xG{pUg@pwK;J+5>0zFCc*n*^#W1yYm(kQyi zkmFSS#imx_+oQ&-#*?qSkyB#Z0C2s&efZ#qC@AyXh#7l)xGecmq zgXjeaLHAoY2#N#z+boGKcVW}n*{mQ7yg9NrI0U6jL!*k4lYHy)o^PolILvB$11PGI zT8sf6#{htqkRYCfm3oi15Y#px23kC!njs=#0|0@i=S7~3Kp;3Z1x3dOBR@S0K=3w% zR-piB#4eF2$BAOZ19U@dXilW#>;P|UiF>aJ>py)Gjqn zLoqIqz5K$<>e?6`pQ9Rp86Y~NieGCl0GPnPv~dr5GT)WhEc%9m-R42>nXc%V-SL2V zwIe{5uV&^rT3e^F+S@>m&b&+T$hBG@c5nGY8 zK-}Uo3C_;L&dV$xrhBz6Nk0dB`%D4#g@L+Njj<>Dm!B7F+k(ZZOIcJQu&@I`x5)d9 zE*mO>Jxk-)n0+|By0)|uFRk)DVGG+%p-;hbAnzIskJJQPw$$%@pS7aGLc&}xb&V!@ zar2Blj88=0s}fYE+m!cLj-d&YmP?biNX@>yeFm^$xm&+^=sOm`H8NbjOe(KzY-DSl zZJmd1wEh18GC*Rjf|B5Ie zEX@gEXJr5|fjau`#!I0!j$~(;O^9{3A03f&dHvpgs5$8=2AnO8EN>{1P+%5`$ae;NW23hR6V3D<)P}fCnS^lo$hDfA1ZDp3cS=1a<+~If1-> zO%?IiZm_We=mma>{(;y5^g@5oM*zL>AH)Hm7x_10X8_QP{y~fYda*x<2|zFY2QdTa zCH^250KMcN1kNt?2eAR@rT-u>7nwf@%tiJO0&|i3H~I+XBL4@0vn&2V;Ot6&5IDQ? z9|X>>@&|$Qsr^CVeCmG?IG@J95eL}P;12>@8va3GOQU}yR<)(X4?|B|q<{E}E( z|M6#J0Mj@A3xazI{1XA(lizFkmjSpylRuCNoYBPmj|1~B==@iNU*@(>4u1szo0$Fu z!IaGY5Ck{H%+1aWX!Dl^SZ4kg1aq?Z3xeBW`4@p zzx3ehZU2w~JKO$;8eELsA2m3bodNj$u>zX>X%GwJKcx=;(Ki+_YdfHWx$R%Q{w1?_ zvIXBe|JhQ` z9DsjK30w-u#r7`;a15uvAh@f}e?f3#T>jbtu=ii-!M5(;YvQ-yKW`QJU(fXK*N5TH zHS^DJWWTWz$idbUsAg^q{$Bf+iHrfr!Q54g0sM3@g5}_!fBmKN9|_3+yn26m3kur0 zdeE{mGXiLt!P~;f%*yd=l&oI=;cN7duM)qXE%1H#FZ}Bj2LOStKqJKY8CxT+K#Qch z;3994+_7R9at^w~QXF1&$(UF3sbeh!c*5BmBtX7AzXsp5_j$I`;+#6(34S&O>g0jg zR?jPq@nt_QjTQJe4ZLN%2~b1?hO$)YRQ%Iq=6s9WNGSItv%YA2Wtm88ifMWWP#M}6 z;%I5Vi)0#oK|fC<(JpRU%7JmopJJ@XaXAcL-q~0qf?x|DXUCir5~igQsn)_(9Fj#b)OG8$Br=fp+fVunp&+ zFr-*#3VpBYLmBxI5O(aB93QJwvvni@5KmXRzofwc_9gPPs?rlVJXE0~3cqhA4GU#B zg66e|wApk$`*r7QOk87H<7@+BNvMqacZ9|xJLx8T@f~gTxB3Dav^W*9ePwpj#EjTa zMK`Du%}3c|6|mckW1>BX$_J!{%)RH@)2}nfWNXO1^A>YdO{_h7dPu%vm+RfP{oKx$ zW22&1pCm@`zFLhqP+|lbKND$bm2J+ektQD=(-jJ{DLke{+q%?h7gM8Gy zuI@sOgwLVrbI+3y1ReK!xTWSTsK`pFTJAdvUgMOF51+dM!%uFyA~O`lZ@S@@-|+O) z?4CcdO{^;?q7f~QgkV^}Pe^?2PI)$`98G0+V|ru`LDFq7w&nTY)4$)%@zS8d?_&k> z(_kOMN4V-#uqyC%ar|kx0X)?hk|#Sgf55&m#w&2voQbs?AYcojb*AyB@4B@O`-w}~ z{1Jao7`erGvv5Zd2bmHMp6x4Clkr}uhm3gCX;6i*?`g*0iA-Wu7QnLXk&laISKEPBg#JEQ+}cdRRpN ze2`w*vc6QGO-xW68k;Hp4a86pntQ9jq_bhZ!=a>+P+7tvd7~C;%kwU@Z8but2`2Ui-hBQ(4N1a$(L&9?x=M7UYG z-kaAibIdI^N=I8F%jhp;NN=tmtQ2HOzvf->t69=FhP@PD7(I;mp~;s?v~}hWZx2#& zo-bR=$`{>-Uwdvo`*X_jWioNzC@$rVTLrH1k$mqXM7in`B0T=y$3?-OSX34WBK!7J zK1j6NkTkc-t)QMlziFP6PC%|_^PXyo-2FkNS|aA<%4DaY>=s!FA9MWHZYPZ!F%*uO zHf;TnxJWRW^fX{@nZKL)NUXO|2M?a<3?}UKC5sS(N+7;44QajLro$R%?LF$ZSE^7q zePIi#U3ip?J$U6^;WcDI-wDLnY(Cc2 zl2+~UOPdB1{IZ6f5`mduzu*4yZIfKgQH#QlI`wCsHx$33heB`&u_??#H{A_i8Qa^hJrYmcDr(&HfrcOeM{p~6sF_cvTqKa z@^5c6P-8n*haFX0t@;I|?eGaDOCJiz&rkdDVsl%Q@V}R_Xv#wLzJa&Ds(bjvgwyvu zPC{d2W8Lo>Cb*NVW94hL-wu5)HiWPi?+>e?#QRP|Ik|;NI+l;^{ity+CfJTH){AMX z?b(Us5hU(H5)cBalU>U&8ICzhWBPR~-`E8CHxpXE=O{NJpq@oT!@nfFnzhG{BxDLM zqJ-(AWh}I9sxhM)B&k_*LkI1@B5eBr+vu%q%w4>s9>;=*J%vPnp;vWX$J-t*xpJe< zATv?^=~ME<^IZPBoJDl43t5v_EZf543aI9=`bKZxc`KnrS6czw8mW_xwY7#2lSPNs zaMoLkj+a=m5w>PK-&{d8fO^7+;9og~8hn9vPW|Dw6)!3*)`RoNI;b(ts_H=xO6Q!I zEyjErXJYLehmSGBGY*2QM$|nFr-HU~72oBXnx)@^^l2KjyWtfdviIZ;CbUKKR7~J6u?uPslxS&2)*yrkuymNv(-m)5LOF=r>o=JX@g&B?)HX_oI z-Ws9;GefPOwA_Jos+{yLROcr_6fdJdY$}6$ESlS`tg8%2ri1KlF){_o#HIT?g`1cv znSis^1hvFg>^YWRRzqi9ixpg?nZWqYO9lVq3D2T^)z7^?O{i>^1}AvNvcB71-*q?@ z>5zKJ=RKK;=S2CJ3G)F$?m`t{)X(q-!K0FCOGa+6PHCS(a34y~-11nx@`b zSREpu|8mGXAijx^2naw&7J3>@7Td%2n;J!}u09lrK}8%9%{J>#>kUhRRUJG0s`Kc~ zPpT>#b(f?>AZIIMjCv=DgaqX+&X?MX9vV+GM-=G@%b(3Sy<@2% zdvx_`GT2yE4d12d=a^+x3F3ZOof+?gqtL#}2y?T@_E^WwoPa4qh1Aw#+`B}T_%(*a z6YOt_5av9YPjrxIb^M#3zI{FVK{__tqdgkKvJSY_M)TbMX$L7a!Z9SO1gL)O8&p8X zNh&2e%}HmcN@A3&u^t3%HIoe*4SYg0(v|w`DJE1+whjSVGumpOdGN83u4Kun{Z1r7 zw_cn|L1_hnw>P0ij>>>6W8HstZiuZNcz(eHhRkYRmbLJ_)P$J3QtpgU3X zwU=#dI0|gS;5|ogML|h4{-~v2!!rmR^7F_x7GI#ch`2v4c;;1ouOPTeCFlQ!x^e1i zlN6uygNoUp#*G1x@-w!_yQa9mA@jI#Vs4*RspCAe=3^IE8 zG^t*PHJ_EJcQ5Xx@=Zy*-`^aavv@sL+Wq*<5Lao9%fVGbZE=&q zolqUl`fg=?z&M&FWHy#gbtJ?9$!_=BOy5T$^R0q3rqKbpT*sTCMaw~;m9Hi#9Pu`; zJVt2;tUAA2-Ub#Dqi z`2gx`l{1vC{2I$}qSsbsMU5~QWEO|7Z=axXZ}j6XB_$j&me*jb63hqq2=91Zmw7s> zrP^4^Jk;n`g^bw_e2$Px#$Q822w<03{J6E!g7Ikz7vsLE<8b&i!8!1bo%?-PL&KLM zBx|cQh+2Kc-DUiPsUK_wTP3RA0?!r2dK~XlGul$op5<$+Gmyp{l7Kuc1PcWWd=+OH zhh*m)(*fHwETR20(H}i@`uJi4uhp*>SqXG!PQv(lu^1u_5Zt+mE`v*5e2S4)qBqAYhm)4PgXcgO69zz(>L z!9z^U*(r7O&Qp>W&eVs1ytkqf1;P>O757q|S`5-4(XaR#r>ZqRaNXY;n&aPZALGb>C2EgscF)M*I+Gf+z zcuR}1QR$62iRmZ}JZYYrG>w8AX!-U=eR|%(@kjMX&oghha9VJy3#(PB>aEeeKjhnT zMCKf*{$Al(8oB3VM+LD@j$8*=gO6)X~6jYBZ#SPti2TpxMDRJlMD*`gtSJj5Fhvb5V<3=vOF?s!o}3w!hQ>~ zd-f#vI@(+-h+gVC?XA1ghAR)@3)5!L&y#HTa0{5XE01$mKR+ZiMlb3?x?}ijBO8-{ zCc~)e%M>igFs`FV@rv@+IyhcJSi6c^s0_la=MfP>0m>Hv-dZYM;AKW>x|kq`JiT>5 z*f$-iv2$MEFCVAy6XO0h+M7I5)$UU2kMQL(4v-U2HLjd7oWh?fk?Yq-A@pr+-A_tl z>`-QfD8P&g4}AgF7Dt_z@u=xqkZ2kq-GWL~DV0BH2Uf2Zg~EuCio!D4u(B`4p&Xr> zpMaKRvlWp|PV)P+aYuk9LLW#(B7EBH{08D`?Yr7G#@Xi;P2Zk@#!zSV%+I3bXzWf>N>Ao@>@y(x{MTt?75@TW;B91DF~k z&6Qr}hIPUmLe$9!ohCMu)48TBP~O~qvurBs%tYi3Nw3WfG^pVS89~(h?uq1Lf-tg| zwBX6co^oL93?)zP7fnHse_C>eg{vsjk*s+2%|ou;PqjY0CDXPeG>a_k)oE;GQrB14 z_=QDc1DH}_A}8U|P|JgtEOtiqyp|sg?@7BHYvZeL!(dYUp!`m_RG^(v`rc}am94jC z?~Im8ZWvL;9?Faf#Pc!xy*EOfNuuqFiO(Wm~Q7&$afHDNJcA4#05bQj;VGt#FG%gH=BCbeOk#|Ki! z6qUCV7t|gE?u-Q?C>KBbf8N0dd7Qd)A|h8aCc#GTKOKs{qFVMeD9Xt8z+*PK?bakl zB8x(r4B3_=7_X5Wp}~&Yj3WGIm89e@^TMSNeh$0fiY~hj(NO<+7<)3VWN5T4Q;EJ1 z>Ak7jCew@{FI;8p+{S0A_nP}xbR8mWE{egg?sqYxUC$h&7G2vieQjdotsvE(p`V?U zx#^gIsb0CpfU{u4K95k75z>@Dqi-WD+lxI-FSuojee7HxJE~ z4_PZj#*J*OZ>DQqy$V4#sr&Sx1rT58Ie zZ}C{~3KSSb+5zC=yqRMGK1UyXK`8NFIwsL{VP=s4j8wyv7iU&we`c5ZdZNzuN>{UB9bEFxfbrp;b|E|QLB+Angx#rz}L zt;)qPkD@zvx ztV&%ljzm)*^?KZI=2dHbd%+&pXFZ3fD8U@ElrQEAQku#?f~mzCKfE z@?p*%rd$Gg>@6~GTrqRV%|{+=soEVKCyMx`b=kn- zH+3Jb_DAF{J0PVtX8qtZs+l)b7RL49$>~-#+&ZO2b4rI=fQ=2qksGeZW*4K5NsR3T zdG4n=VjPA?dz)DsSuY)7v(#84QKm#0s~@1A?%B3*U8R&uYu|Ye?r7KtVyRZ7%cgNg zqg&5pnu1*D&C_CUzT!zjJk4I%wj)I$Po4=zLo1zhf1Pf6S9OKI8uUfvDy`7C<|;yh77MoO2_bDY^s??67W{%(ow~}B5{H?+|@?`!j=$N2#%re=;0mTojaFR0;gY6su{1Ib> zj}A(eL4=4a1w0vAG0m0e8HN4Fp@F`k!fEy@G_%`Oqj9mxyjvufxt7NN;0jaX5O?pPT|Erfap=&s3b3z7E%q znLGUR!&c3kUh`G%$quFK;V#(W0rA3o+c=NI2v0i;?ESc_dshftLT6ahb!O{DXtbqc z>y!vobE2)4ou<}puFA&6m+HYPiH$wj2=z>nV{vYRuW%R;JxE`Lj>6pH#3FIO%hHlcgju3u`oi zaX!eC3s+H2;+0UKX%8zKLFNW~1QIC__tVy${FOfssm>d?1gR)ZhU-!ZSK@`pS!ULr z{fM$LR%PAj__(R9*hlk@uWTOrjw)7l9N+4%<@qD?CkcbP$A&?rsP5%tL zXQ;@j7TR4auAp$aQUWs2&v*wk8X*M=Ju%+~jl)PP-=HiK^jWt^A@tu{=4EDwVh2pe zvPMkoc?|$&zhg)(P!=7-fM{^~5QPM4VVXsumU}G;7rx}D+hV9~ujM^xM#485p$~{0 zer-GWQGxb$WyVf$M()B;N@0ngT>FFI32PpBN|{Y(Wnvhuv33H3_h> z$z38{$6e&d%(yBrP$?oXi}!FvAcgOgR>Tkx8Oj|F)Q3)oJoBCqJ?;K_>CWjh=odo$ zaVskih}3UXxPY6xxRQYh`HrV}aD}uMuZ=|2&ss`!+r|qhr`byN4k<`mrb60xcRX+r zGb4B;@we}uvADP zEH_;q;XPQ&LJ`HPM9(3lE<-mo36p%t=}4LM`kpbqX{9+^Yb&Yq`u3SP(XJ3To|w4% z3iZSBd;l#Ic1=~MuRXP-t(146ogSy{>U>NGWDk2aqrA@*cCV`l+|2@Z>W5GzDHLN) z7-Qb>0BB#zU8YlN^H(tFXeD&c zt)F^&O+FG>6X3&Yy=6IzZ##K)-R`_5vg;=)Nx7CGTrX8a3}7~@u4sB>OikoD{&{#Z z1~EuPjRLP$rzfZEF8bMvi#rWt?Uv;k(EXxRIz&ko9NpMPH1VjDM2GH(qg;79v%ErU zgrZOVG1$WPao+2&qM1m8?`B(V9O2V(sr-Ijc2HFEy~?MhG}u>j6d_?AF~=1(&Qh))?Zx`x&q2!S#`Ao)LW(eMEdlRq8c8mxgv$ zL^vaCsqbRYs0o|AVI@oSm_gT5`$7T>Jjv%16B8o4GR|u88`7NGW29C$YFAzq(Z@i) z;jGnXmQhMvO%$)B5W&%%=}}FAG9O72hJzF97iArzL5D-3(2Q9d4cL?xN~qBz>N)hX z3$5U^YP2m$HQdm+3X)i}C9OxL&KqQOHF87ZxJnD8Wk`I$mI|GsCoUaLk%Cm0A>j)7dlo?No=oz*I zO%ybYwtuY8{k@G)2^pEz_}6Z+;MgJePE0ei%Y5O}37wPImjh>uuKYGM+xgs-i8e`5 z*`Yg`bJ#42L6!t0hy~(TYg>#SC*-p(l9Bc+W<|>VBR7=|=fOKyXBH zvE_BB@x(i|OQq5_^~Y2Az+MOF4(V*#nCKiV8-)OzWi>lrWuxAl9{akQjT_vYq!^=% zTpVMRkJR$`mg}FGWe)v5k$N(JJnFN-%GLu>CT7aI#}z~B9_KF9K3gB*(lrnE`Qstb z3;XtumW*bpXGWlzEjL`7_+Al+u32Sf-KBkRG)GYP-Y!QH%6ts)O!-Fgc#>G#e@8%> zS{KS(U$zjOizXXT?uGFjhuGnL&hS&_!!-eKUGt+BV^-Z;@2Cn65%UeI7XWMYILzen zhsO_wE?AH%`{ja2hc0V?6vI{)SRiLIkWV19q8V>BxXm@r%YCxf_m!_My}nDkAR-Oc)MuF7ws{W?6kLg?y~d43yoex99c1j; zt+9r!C0d=cAZgPOz|2N9yvcWaKKh{ZHJSB6`B9D$g(k1p7Cn)E}Mqq4P@o zv5ww$?I5}XGg3u@xXBi_dOpfnSRu*cbKh4p_6O$lES~!jQYrIqqPUgk25ME8`P7wB zj*AhQdUz=3R?59sZ}s!S`ly!A1DmUaYsfQfhG3+RhUq#?AwNe0B|+Mb@6;deGD`i8 zE!;Co+$gI%`wT7+5={++ShUg6g&-cgaye3tJmX%wOAu#o zkw%1lD{RG=S+}lO^3W)~nG5~P{wo%HJtv6pD-S=&{ zLMBSDz6=$JW{7$%Kae2v({oq!FFRUR_JkyoIlkiOrLF|@e&K~a*e~G!K{}W5mLB!K zPNpusK|tuCTD;hpdzDgLVzTROb!`ZiN^bCjv>N?$msBpw-69-}1hAC^W)?yod@=Rl zDdCzA@g&})w7)gR_D2#&T71^1mwt1N5Z4yQdpCcldLgHohI zUemZAl^<>rdMzE=Oa9hWs*^Kr2?lZ+$Pv1;=%?(3ke_QM#UMfV@dK}#r+BS$_(fce z7qmuUT|1;ciX{3|(-*VMl->KtV3~WplVHas(@-g_WWeWCD)tbaF@5?TB*C zB7`<`Sq!v^LjhB}G^XpO;I_~VoQhSOW^`DCHQ|ogxtBBEipAP;)Ur}gtnd!g{X`ls z{zydwqw``aCZ$RNs1I2UwBwC3A!~S5s59&uH{dJSji_EN#>vd9&&PHhesU7JsP7(trI%d**ngPrrS>eO;tm}uiF_nQJG(x8qqCSYzQ*Z|u9b>l>) zW1+mgN;s-Bl0b<{ivN33QmkfIZSqAC!cx`h;A;q<29Oz0RiY)LAEW| zq*`S}$PLYr#@=&3w=Jd6=a>#4KjQj$6lZx@i#_ptSA52b`7~=6_}Rx?jb*yd^;WzV z()iRP-SOTG-m%8D5+?YzFk1Ly(xux~mq%$VBxQUvwZ&oD?a$rkDsB=fgk9A;|>OiXjDEi)i|III_w3Yrd1143}6^s*?UT-FLilB>MZ zAE1xfO=rY*3@g@ed|>zmoocDBc9n?DvRbwDS9qeJWj>j%t5UT9RV)G7ly`A>#$FCwRj|ZeF$_(4zit|-e+>M)T3eaXBiA{472o}&NU4S%U_>* zZJ;)HB~`^~4q{=^wW*N^w@PFQs4(AVDw8!6734;v6JF|VXttWRC0#{$%1h# zp(cd*w9=t;A#eF0e(t2})7e4vO+swG|Y zoFd9TGM?Bzs~L5`joQ$W2)imT@!GRuG*CdSU_Mh7kqnrvsvEPLfyv4ox%9zX0P@u^ zL-jQV-*Btr4nqAZ=9b}+OB28Ox?E{9L>fX~SKQ$NMKV&GF9Hwf(XmsPW+8pQ7;dtC z6sGP=E2K|h35VcJ#~9LwLuC$ot*59UaiM)ecvzQf@vw=v0MlIaoOhErKk&OKWrJ9l zSr8Qa&l7SlzD3OBcI?{@!O{oe`O7!%kvl>)0~-k3EC8lu^l66MM|u~GuR5Qvh3pld zQd_#jXTCwcPsXkUxmHjkO9E-;Z{F`Kv-r;c9(@rxr#WZeAcF;BS6TR$|OaC>mZfPpHE0gFJYjhAkA%yL`Z zlL!6)tLYNrdyM6SWi4)PTshRlOOiI5tt5W$17nL}j+!;<4kr6naQ-*^Oz#vcyo&^r z2u8kItF4BQI(6?`y&%3BBYatpR>_)5uoax^3p6)HgX}rS*SC*1ISgT?5WpVn@T|lTTxl?^Ij6g`;iFY(eZUPJCt8P_h zQa1|94du#*g9(OQNB33c3oX%sPgGFR-eg8m%C1}ShL4d|Ox~LKNHGPB)_N3XEDOmV z%e-FBA#^&&<6&WVyWi#B{zPzz?c0EiG*}N4<&lm{FC0hoqy*8BQF_1)0v{0qSi1 zr|*F$Ln5l>dA*oh2C3J9I%lYaW?!JFIgjtC&Q)cu7HMGKmXPD@|701Ru~3xcw*^jYLyVVg7g zDZ|N(R`K>_Pp628+*AR%6x9+3=iT`G8E@`eRoZiPO1+j^(ViwflqQDPm4%Al$)HX7 z>C#tWztJyRD*@XwZvotn9i%%nt@OycM-~%L0F$d;qQS!i8LnV zFk@_b2xJ5XAH*s+$S9ZlM6s;p>|!}mi<8N#k_M8Hh&(SNe1lhw9$pCVmv?6&%Rwgf zN)OX$<6X$R_~u?nacRm8wNk9HFWUH~)uMSSr#xZddNb{Z%oSF&VY0Ws=n zLhqud)X-r!${mXBXJ*M1n#E|)8NDVegtyEf!e@jTwP`r+ z=Se6I@~;&oZ|U5>I_R)gwKA%ZnJs#BRdZ~r`6JXZUffeu_0^OqU9(3A3mEEYzkO}d z1D!InyPhBELHTu?(VMK?M!UM1e!r|xllo`~auENhDzr$px)VL8vzA4+q49GZ#(L74 zbuqDdCyQ(f9C`~GE`xwJ9G;`mw}ZLIHR=Q(2nPdz>uSo<7#>1y+FK@<)JAi}neGA~ zzD&z3DQ~eN*~6=Ah8Hul`mst%TjFlpqrtV;6uHY@EqyA1!|gI%nouLPA-ykNy2D7? zOA*@cdf(r834kae5=PZu(E{{3k`6vCux2_d$*EO>M57T1gjLEcTVqdf(>OQ$Sj1Xk zHfF*nLJw8pi0hz_sTUpqLf4>uN7fUi_okjb_xqd|y{&~Xac1#mFWSRTI*uKtKiUWw z16S1sGlt>W&F7taFG_D)^S)Hdl?yK+NTlbxUp{C_8|5v3p16mQ%^0sBd(ASYFQCzy~C8IJ*~5b#j@4$%My_6D7+6t zCeZe+4wRm716{LvviPS!Kb%djT@((1tussv0H2fuxI$IioPv^&9q62^pRw{F|@ zye+?>IVGV#pGu25jr#5GNvYGClG_c}|La9_g&_xUijNp_$g&TV=`i;$xOXwPfXu9# z(`2h)g}L(>@k{f20eeq-`<#z!&ElkYRj?D;vUaY;1DPE~ug}EdbYSZ~A_}S8iLwQo1&^FwZS;?c`0-^$cZ>JQ7|4o#3u%^p4l3748CXD!YsUqHg!_ROnwO zLAMfbq`fY#y+UEqT%<3&uHvU`)vTTDCaO7mT=gc^2qFcx%n+l7VVPVDeOzHb!1qnY zT1QFlmmaL}0QcqCdWNTWC@nTd$fODF+TxJp?CsBkBVpFgyM42A z+K0wj9BqyoAPw*sOda|k|LAg`@To>nbcEVLpOz}hSu*AXTFCL`@lu^QR#mA39plD% zAyW#Id;b7CmS43vxI-0^B&x~1Vi;07$jXwipn+GS97|?%bXAkkLL`Ut+(ow{7EPDayY(VARzm8-c-M3(%FhFN0~ zu&4+fbRmktz#^!kVKuYP*-LkxEV~xTjh`EnF+5>ZeWHxPpk3T0C_%0i^?n`(%h@8ts3e7f$ARyp(fJJJB|S*Sc?=!JwDiv? zFaEv{M@848Io$r1Vmxo(>c=p-&mot)@HKU1THwbfsPyXGZRWgBKMHrOoZ5b%gXG)I z6R6@jjEgi(74zmD*kMKD^f8g!eVuZc1`%&cWLAs9U-5pHiF(;+WqL0@q=)+O;h_Sm z1@AFnUe!K~TH$i+Sq5qr&Z>jcwds!Xtl{%>7`b2PWjhDyy#eJ1W3}&TO@_z8-N>lI zLNS!uN^d!EGN4$~ZVaQOzhb!F^Euqh8^v{WNx%v-hvEE`(GgA|#xsSrG^69#^&+Q} zYW+kc+QZdDMQH`|DdROJeyoBq0z_x=9^68j$suoG`*sMbEjoOrMwh% z_`r>K2KB_Yj~BvId-@6wHzh^CNUI)2IC6ud?$`7k_(Wp@}+31REOyoI; zHx*M^3o#%_bzF#N4`}-Z@kedqpm3V?R-f&s*zUZ&9^Vse&uso$70#j&TaiLyXMAwG zA03lplL}?guFK-$b2b<%dP3U$`Me}a?^VH&?h-3JA#*rJG?oq?!rCj(kFD>X^3NGY z7SncMunEj1x+FJNSlsOs+7m!8+ue`;U(7AdFd^DRD3xySyTeN{>R9qCwM5$Em|o3q zZ$zq5PWu#9UsLO91y<=h991mv*E{wby5;nB7*R^Tl~2{AbbF5-hGK7?KHpyCm8qqZ zKt+UER1@eRF*UQm$;2f$Q({MsKZLzI_z}u!o-Yc6Ne?9&gxG#hxQ32PvU5N+8x-)F zL_sR#yD$c{&5t>(!+n#wd-teB%OIviM!jV3v{|CT4BGR&w(CHVvQ6Ap49>h0D1rpS zqNwiIMoYsGaMoxC%_o!_%5d(ihUTrN%d7KE`kae4_f7~^A2`vQYOfWrzlB-Mc3k%k zgywyFTOxc#CixBpt$}q6s5!X5No^BJ92ZA<2CLvSD963*SvBX5UdO@b$6P2zys{G- zt;Q7X#W-UZ8#q8P>_^`C-OCvV$=6afOPVm$d1AJ>e^Qg4$7%Q*qyE@rv_y6x{Z+kT z`cQwi4haHXR>5tF>r=R^*^?@F;tT!=zWq1E41wuZ-zO@QJu?rOWVbHlroLn~b0Dze z%g#EL%;Hxb$yM%g@sh?~V<-^g5;a~-i_TwUNb#}5yXU}~F zgN#6SEeE^#`md~-VMa%wis&%%dZ(p1ebJ^?KyY=17w!f?r^XyqoAyy*~p@W9{Fl6q@`rjf5PiK}L zIevFT_eGj?C+=^=5`$2jOs7ayGWM>Ubv~+?#mnPE+-{Rx8m;2MENjM(k4%M=#O4yk zXx^<}w;I-c$|N5f&_1pH88qI@$?GHe@xY5>G3A1I6zZMmo3EJHh6p(f;_rXv-u4W% zuJ8Ay6)n}RXd9Zko1g>@^z}f8C;M&r#~zCjME9pBCy9?`p1hl%5vdMRuJKHwkl-I{ z#3P0&-g;O|8)V|qm1=#RN=u>=`S98TV*2ukm*#2v<3 z^pY)*xt!;^loHAur%c2li<;o5~Yuw>+vI8GtB>`t)l1?7{`j@fQS(XS-c! zd{aTZ2hRfOuA8b$$`|VIC7(XweeUxA=nA>4cEb+~<`MYRUJ4I>W zM@k_;csq0RIQ-Fv?K>TNF|GYHq&_*nFyD!-t<**JH2Za_I+C)l_by6jnU0TWUR%on z?4KlILgu5Pq}u%GYZe3wMclnZ=Ou*luxYDx`h2z3ohE_$0#FL6uhmjoo#;0+6n68L zUWA)h+MBSSQOO;WIddL=mJ_5(`uEdbaNtgHCNyl>?@fZ!;p6uL?SA$IV z;jmzTLmRsSOP-yYskqU}Mx%AENm6pXfte=Xf@aFJ9ND*YJN;RLxfWSW8xbZvYQe2F zEX%e*;w8dW&%z)JgJ{co651_#;AQ;#+ZC04jsA^Vt&M|-BrXc>to2vx0;i~fV{4nE zXW|pwGg(B%UBt7HeGY7EpFBAO0wG(*OEcyo3w5baMlXNN%CTvX;c}1Cg$_LhVfa8r zFPwJ~-UIWWewYPNv(zU&%0A_-uH(yN1&ojY*XFuU#Cfl4Du7b6OC!&4p&^+QjJN?sg1Xf zbsFR&d)lka*srT`m`fOI^0A1R29Rts>x$_B#YECpF*;5Un5O|Km?IP4uFDNNcjeyE zH;XVo6jOC7SM$!w8Hvu1G0|`q>6@&s^5L0Xu{q$rkMScx+~i6$b9{Zm!BC2Rw;S@* zc1xyuFXd&QVqKJI(<;{wZ>8JB4JaG|guWI02-NgUma?pgK3~dIw)w6#7mspghp5aB z{}eM@wk`f}X&C#k4LmPH0x`pH6@Gt7>cB}C1{UOziP{kRK0 zL#sCwt3I6az4{`1-+^emVpX}mlMKNsJsT|vmG*($5h)9m`YNu8sXU6hE3xYT6UrSm z;_Y`gG+Abu6}vR>p1xsCOZtm_stW5g4MGtMe7{7ZXg5kCa^_JR(3pE}N*}t_D6O2ND?HjhVivjGwE_pNIoZ6OJj(N3Ob2eTSZG_>z-uqeW zb2#UtseOsLmovQm(dCrgQ;;Unw>J2)ZQIq=Z`rnO+g6vWx@_CFZQHhOy9-nQ@64Gw zU(8(0L}cv9b(0r6Z+7I$_54&HxH5Y7nS^6`w8J+of6XFR3#Mo!97h%GUEaj-HF;={ z$`HKaTJ#l18|kW<6LC3NY;Qj+DvQU&mH(vFdA%n)zX_dOdN}#10lzJ-9%4dt5R;FX zHMrSNm>NXDkoee+~nWuV4`qJXHErcjRP;<44=L;0cMSf^FQ?1o_%E0fI( zrZ)2z^+k*0h{kKxzlq6qW-Lg=wFkp-w$pMIh|*#;+lmUwYnBF21SE&2Qh1p^y~MWp z?Ou4&qY?^$=2=ux$(-KMrl=5p<)j9i2IyT6JQB_RGvd+UAb)F(+}6u)iB?q{rxo@W zTxP`)q?z?0@Q9D4$Ga>RkZ+_>(Tb=PxY-H1b#P%kbkBjG(E(K8cNBwkZw06mCTK+- zGEyl=1Np)4H4jsYM^B@MkeyX3759PMIWR(vr8iI3cJRuVz*=(O4^U5G0x#E}tVV+r zdRIS;5Uc6!AvA@wR$x;4)d}41SiF(mTK(9@9hnI6*aLx4NTnVAcC%@mlZOpj|0Q{vGHT$Br?TwN8M-*XpWr z8LZ7E;CARTfLW|FCX>a&$$fa?o zjzST^+PYK17^!6W$wKo17r6&(#cmlhCD?$N5M{9wt+=t%^%pJIj4!kjE+&Zfr*@=- zy^#q$4cXCOqJPYI><=1b@%&c5HUWx%Z8(-izRYng>D`NZ>f<2#hU*Sg_cbw_9l^-zJeZ)1-EpEY%cH4TB z`p-nPspBJ%z*e1pw{omLmey8GFoOQnS_>^G|5KGPhwx(E^IKK?RCNVi z^%<2p!82ukr36}j4|4%bhtKqL^uYo+Ja?)IVb4+%x(%e@saGIDE`>MJQBs;g81E9f zm`1U^7N2`VqaK%vBn zPXDB&N+pf(z;thRqPjdmP7XumzK3ipy?1KC6Pz}Ebcd|*F_qq$5(o}65zTpS4Hg$b z<2;Lqpga{>Dq~zZk)zIPj#MNR+Wj8gd2KXELb6Brfbla|clH^y*BLXVKE0)7bIc?n zipL^D(f>Co?{RR_kc+<7bupMAu#ifn?-?0JaP|ehLdMF6IHaJ5INb0)(wi;h!HCz6 z<4DcDmU`*A*O@W`Q~ok37J2NsoZ_kgqyZc6@~IkdKwS@)cby|E$xTGV76|>6r$Okq zM}^1MdT>HWmz-VOvS%?{a7i{MA`!Ay`h8ew&wP9vjneBm`*4sLy-^sHPZ>$V-kdR} zkN`VikGeOo<>@jK!sg`4Y2L8iVe@UE+Pd>5Cy7pyx{LmNv;`$={(ho%bbaE6jEOuw zut5$oI9P@|68eFnU^S{Wnoin3e)xxNPi}DD817-r$}KM3K8vqEI>+$jCqFMEmjlh29;5x*kD%2rpFkZ`Ae4muq7|W+}$C{__%T~485QquEJv3USneO*H3WU z&{56WS{tod575Ja7tbnBNQwE|K7QNiOrrrvlKb0stKB{_w;+a-x?m4>!|05Dz_SW9 ziUB+`8$VupHRsj)-%yLsoOaLF5O3~ zzf*x-!NoAiCjqP?<2T^LJ^Xlfed4mF=O!8}2nt)MM2$EKV~ao{IQ?E4SuF z8|v!~X9YdyxB&6l7?FaSzc9L<4nN8{L_U*2?-qoAWwSlu8M~f)`kijRsvr41s6!zdpv|xWeuuyf{vU502xah-v%E zFU=R%=B{abhyA)YsvUv?r~T9%Vsjq-Owr{ola2~@k(ygC%ojmYNAk>st7y@kkK(_x zQk?wd2VxIOhQ7$aR-FA@ZoNOnr=PKMP`W^GQbL=QTIVvJQ~529^Kt-&59cNLdLJRm z%CnWlxlQA?RaoDL3UqX}IALtgD9iiT}?D)Xq8dRi{ z#^-!!?Wq+kC%!OnC#11Ae&vWvw(?bl^vcO zUK&)8w?DkFoFfio({^IHYX+GK*Rg8YN421|#>K(b{{Z<>5bwZOymqkiuZsNekBLT8 zJ?{R7(a*Pjwo;`Une7kWl5qhp$=2V#y)MFW<}JDe0`8(Px{J1H^In41CH`Qzd+8Ea zXmN)#0G=6hw||R%x{cC?UWkxQrm++sE;JV(@HnoBAH5=~L!Dt|M>m+3Q|AmjxOEKq zG&?el+#V1+`4EKe;NIgwKjVL7qZoni zSh^1Y??M1ou;(J28!*5!=YF-i$SC|=p z4dPiaIcrrqW6-g~p`&#EIgH&WS>4`m?kG`o1qalX311kX$y08CK&9+QA^zE(>-8@A z*Nock^{+BAqr=nSqYqaSNu3pK)KXQg_zC^d507XK0%7&5Jpk)300c)&h$q@wxgP@q7pImGAz`%DrT11G_3z4Xtitm+{5vm@| zwOz_wQ2Q(rKNvF|f6WF)8p>6wHYDfC+eri+X^65@LwqYGWu7%&i3tXUr5k7L%PO_C z^3y3y&1iBgn~WT$@UV`kh$7v8fnU>+Va7*Djt;tf7$(iflS}C(k6UnSeM`1ADH)TD zIgIv`)rW$S_8m0F8I{R|F@VXp?`0-&*%rl?SBK_z5LrQs;ctD%&w+m?UemEJpA-OB zX(Er;$+%uAXrz_`vhk7<6Pxyl5Ej0Z_WKxlSBon`*v66vvnHzx{`X1J97A70eR^kg z5n4QRn-X1z5-A>oyjK0XQNesoAnb=lL*SYw`(*pM#OjLMwg%&OLey(Y@#)Y1`^?Y!YDj8ZD(jBSl~YH3 z0gy_nOnU_AVnpg7k*E>#13VqxRTxuK0WqWeVIw{}o-{(y z(~$m>nCV)3T!fWT%!+jYoq$1&gjEJ5@c;}UNpQ%6da))%dS7or>6X7>Xk((e!#iVVf zj-nrAhDhLIxxG)Jub)?=2BXa?IS>yuU2D0|0|#7u?87^MP}5z!@=%xx%!f@eqC{Hf zJvCIdY2;1ti;=xed6|z&w&^$*jM1-yAQc7zRbf&Hh~{|E{%txeKTCjbG=SBHEB3C2 zC2J%weO9+u(C^A}yREljy{U>X>qUg77QQte**)i2qUC6oA8=0$B!VBHJi z-ncKWV*wM3ADCME!FRW9&DsW?pnGm#RauD;-sPS_2~JLs`P~UBkg5YIXXw+D(Dbzw zta)hjF?k;8=wf%Pf6-9#FTkQtQ4kwIw@X1DWo?CsyLwPI7ym+?L7%Kudcz0TUKf#v zV3VjRimXI70+0;RsL_7SSA}R9c}ER`QL%`w{FTx`f!0vG3;xqhxwkEBItWYdszQdv zbc8+Np#4oV*wsd9265@-9L_HgxvIB7x@f@AMkVJYwaG%1090+1r|F%_h<%ZUOAmtj zG}NGLBF=gj&WYDrx*#YRkQ;i|he9$VN`JJm{p=nKc*^F2NVWgBqk}awGQ12E`2K0! zH0ntlB^TIW>eT-0N}TmV%@j_DeWbQllx3029B>ncgN6#8OxKjFe46U<_T1cwo|)P( znpbGMr6}FNtU(FNcAP=IQz|@M52a%%tV0;$%2I_+O8)FVGI(`xW^tL$SQE{8PP0^N z28GC@Q0)!_nSSl_F95-@(I-elhMbZ;-NOk`s4U^(1?m(BgePrf5ZAz3DW_Ef&s2JM zAzta1u`A!ckczr_A9B)4Qk&8%VV48Qph|#T*&X1TuqP!#93a7x6f;M9lokW-bMoB9#4ZBiYL74@|F`A`PeIQGTf4x9O4u)V&_Bh@&vp<}x>F+f56?q$zuI(o z`Y{7Z3ayJ|V)8z550<*uI4l(lj|cr>UdH1w7wtzbwsW*2WlQw4yO78hj|#1 zOG0WvA)-;X%aFs*Kll>bjapN_H`7lsVFn__U~TYDT7+9V3-xPL$A1|K>flZ?28<2NWS*YBKN(M!>ct8uxrOVOqb@(! z)%e=UTIINDDwZe})tQKWGi)X{khRe2Zq_|s-jx38?V~aRFgT>o>Bq@7HbE7*uXFq8bG?rjF}1P zLjE}3u=`auGrM3-#8tY;lE3}B=)g&pss54I2d^}5FQPAJtozSva z#()zr3I#?ba7};>JfV3~x|o^DN*7Y$El0GySj(oH-* z&8Iq)=URX(6G<%_`~Vk@v6r9i{1~vY2%2R7jFeXR3(~D|Sf4Ab;^RCg9;1jD1Z`P| z*6w0z_gs|ZKWg_p^;>-|?u~i<5?aev#aifL7aH_H{QB|InE=E= zIpcEoX0U8K2_zt%(L{I=7x0rFh2nouwh4ieLYqnYhgSSgt3=Z9Z#38Tn)+>vID>j( zWbJ6Kqv`u9ZpRJwlK9(17vnC#wBin-B; zoVYB}q2f$@Cy_RuiiYwTffH0zJZnv08M(`{#AM@$eKg!Q93>T51B%TR!R1}Xc)Qhk z)BFVxF|Hb+ve+}AC2<{l`eTuTnJ^R|HZaM_nA zPh9=4R61i2dRHoJGOwy~eJi^?zToDtLq)Av5BEE>r`RT)i+R)apaKP(+3v2+sb)+1 zMMsOZXRn0zvz;}QQmg!NVG=_u+G@*GjQ(MRe*7&$r$xaJiLsuahM)=E7*mPvkw@(X z5=$ZmTdGkvXx}@KO|Pt`7l`Jh?zP4bvf=x zX`b-Ntb-(TbG6J~YmRA-^g>@`u}j%D$+@zzHJePwPmf2F*qVz`5oVG1alx9~>LY9} zzk^Ebv4Y67+rzrIew4mX_VG)=E~dfcE;Ik#Lzi0!j$_KOVS+-fVnh14TS_kl2xr6X z)M#^MH=5!BUBQDey?>o!Vk`u097F(2iK_UF2;Mp=$O99-0U1W0*>@@y28-tso{%t~5 zIevKB_bm%u*WBKa3G%(|t86cA=C$h>4!feQeTyI!c>VwVv5n-JGzsTNdq9MZ#;J;WiMME^f$Rd~&3U;e9{|&DW>3tMusVm|T&1MXp@c=8#L(|A*HPDk_ z-N<*ygHOPl_;85Btgwo@o3OW z8+>0DzfSPols`-wUKcQ zr!@s8++`5^y0)}WMd>1C?jk+*72BSKE%|B9z*AFHxh1-llVNrrhnHaO$$xMYg^U;j z(UR6ZGR1BYi!LW#OqUbau`OKl&A8fim5T2(riLk**3V!%dO0@B63BmO+dW!WdN7di z{3|+1dn0_*{b?-)7{tAL_{pFg2CGEW9@c#IXwiHcfSILH&jN^FYBxx*XQYH(?j}Ox z*POkf^$DMMn?gv+?Dx02`qSpF4|O4KN#K3I6Hj>J2ur9+Ye=cCq0<0X0+a$O%^Qq2 zyua^Y)PZN%IeB`?5N zB`BvW;S-6iZt71tw(%(N>6-GpjESD5VQ(e%D)L>15H9-WniUH+?RMU1rK)jpidD{>WF>Yx!3_%&MR0ct6*cOJ$VlA3J=zU0CGUE5$trLMLkTZ;-~&O zp*gqzdHJ5LU`$@6f`@Fw1vd4^`5PK+aGV3n)~{Qjhz#~Sx8mNLye}H335fCsrZ+q~ zYQIc6eVS=j>Wq$afn2oX&)w$k<3=h*w8KFhhjIkLfHwsQ0KrhVBS-bu$4(S82z23hH6k(RVFT6L$;rhVwu zKJVMLmPn1~!;gFK3LdWHY?YuCxV^gwYfUXM10ue=5$&lA>p(EP=8_3S~ z|AROu1SkQN0V)7BfI2_}U;r=#7y*pztnF-nRvQ}wfHA-X z@V~5hfGNP#;^%TT0hrpkI0DQ7<^Xeddvg<8fCa!3Uj|9EZx?aMRLGyZ_}|5Y*mY&Zua z`+t}J6MbM{V)y|p{=cCQQ>`xY+79!q;Zn1?eUPvyn?L4*jbEREzWpDlz}^3pEYR22 z7*Mu-EQDj%J~thnE$7>Ob~0J%PVK&1pU!++-j>1X+9FvBi+I*B@gQ8S^!1E&x4_K& zob%a8v2aizuBOVM8tv=A#6YYR7#PuPi;Me6NV7vYmqftMz<0o_8rqdWO^ z)!laFK??;Ch(;@x@$}E3<-yv3Sh(>8DuFb2cOcPg8(<5lXWvxd9cvq1f#$l>Lj&-6 zh?kR9fBSmbGkrOL)dC595dnYv1p#tz^~1~58{qtQpcw{>1x;V`-^#M70_KNw^219Y zLFI?O{Gw@unDxg8Dkh@M%>oCqzFP?@ZZAydy;%LxZ+3f!rVpbZ z|KWBA#thu~3syrwLT>@BF(%hnb^Ti9alEo= z;G5RTcl!H|iYBiYa`)I6xVB68R}IszGyUHP%`Lt|S0Bf6QsU}8D2E`yZj9e6b1g1F z9b9hTf3kv_0^V{2K__+a(^&8;v$O^3QNA19(7WCU)5u4`dqIFWx~A*X&>wPYeJS^1 zQlDa8n~1u%qxHr7z-Oni53Ou~Jw81SuHc+KuM|RQM_2y&(tdrO!PBz!Zmv%rxm@e1 zjc4?1o8bTI1={uv)r6e)WocT=;+Le6EC*L#w z2Fc{7A*m#%DRMR7Yctd%Mvgz(d%TR0T+=lT4kSp#Kg0H`=5uIx4Eom88z09hc4P+v zjGl?ZPe)e)d1>YGxT1Ln~&LC4#vP7x04ADkmNiWfHa*TsR;NkjHK@wZ-b)`oq1K9i&k zV%VQ+NVC)OiD>jv)C2gxqUG&3&)UEjQ8P*K4zQFZcj7{*`+aN~sRFRzBTvz*(} zYt(f++h6+4IHd?kUvaYUSv~Z!jpgj~2~@Z#jkxrp5_PP9&EHUBYJ2Wlgx2OwMRL3r z_dReu9L^@JSDz$44LeAz+BrwrEaWS^Ci*4A{9UT3RKKmyfO9Z1yDIZWbW&Lan&_yy z$_l&;0!dpi!7KSJ1i?)i(P^}B5F1OV&rrQ8xjPi&9U{hxKQzI)24AkWoP_Tv;T54> zMT%GrevUH-(WD_7m61Q%>%QX_Am_Peo|(lxHOQf((X#U_e{Xf|u#o%*k4R9<;YArq zap1Hiv(Kokr$T!@@F@(?yJ2WQI@u<5{ztH_gFJ?(^x{uLsgPgEgDpC}#sw|S! zc;do+O!~f(Y-@(^I@GDb%G7jKN&Zynl}S}A2^FQWJ6rgNiI+G(z>a}zmwog$B&th- zw-=IaEYJ^@*hg=1G|S@r#R4`2n9uz9x-+EeGv_$I9+XX<@2$n5Gb<>{&1MZ3S-@RO zYS>CaMIOlc>zO(&v*>wI&X63jm`}K~TP;0&g;A%m@F<1 zg3ii*C)yWduK()hB@g`a`%IlJ7J(u%U;qWZ^H-UXZp}?MKfVXO$JnmTT09qvSGpYG zqf|pFZNPzWxz^)vts_cfgH9nVDN{x*;`TNocq_U;gY;?#yjUiCAzTl4SGsyYoSC`d z#9*R}4=+o0Hs_<-cx}LrsfU$Va~F-YGmpUr^eN*LyYp&_@A?%^-yi{FGufHkE%Kg| zb~ED<)zr|lM%}6ncTFnuJd%I|9yqE?&(j+lSZGp4oEf_?AlW5XQI)L?#ta8$ne2bLlnt2( z_RCvjhZi>c-l?AWb+#Nqcg2-f}rribdA_L#mF(KNF`&T$)utHm@DJxGjbofQy zLgczl?4sFc2eytPBHk+fhd*T6L(jWt08WiSFl*7U@@Q1e$Lbtz2=V>yG-BFiX zq&IEHbh`tEWHbqj(jVtmzF(kCZMXR%c@E5&{xau^L(1b&g(3*&>mK zwsJxE9GEQzuNC9RH4mg^KUhr)Klm-vYj-8}GltNYg!oyVtn)(hhHBm>-cYy4zuFMV zw+4Gn)Do|{Q}Ldcj^z!$8%emzvON=)#$ctDgFSHY$o~{z1kk}FG9#9DmebA$+YGP; zka2{Xx!JTZ)knQ5b<1r8-;1QfsIlRU!~wzO58fh}D_d^7h2DXcW7Tb7l}*wFJttN`cF)L6-EF`7 zlo31TB7qq{1t61csX6*WLC!t`E62V)LGJ3PrldQbb}s8QGTIN-=DwUVL|(fFa*RX>!Ewx}1F_^4Hs_7OT zZq3vXr+}$KuqFi_02}eKH@@C;SlE`zLkcxDOPwe2gDCKrSjG%g`oEC0Q7dlOya5&Q zeXD}4R}m1P{?0YQE3&waem<{>9!9A(sW-M#Y07jkEJ?dKx7`grmC5$LRjS?yUh4Py z!+Y&U=7EIheG-zVuMY?HhZ}5;5w+^smq?6#HGA`AaGjesJ7n@X*|$(*nbGa<-BS-j z=blVqLLp=1o}VnMc;km6+^0=DO4xv-QRjqXk33``gf{1-h-x!TuC0 z$l5Mvsc~;lbMQpGXU6376djg^n4>nGJh}&Hv%pSa*66nL+FI=>O#tvSN!$6}=&ij@ z)5eAbZ;->GYgx*ug>k?)>?*n#EBGGD@?f)#%}5%j=i@u|EWgawp8$$6RmQW=YplPn zth7^$`|Rpc#Fh8MYMKSsJ;=di70K}>_1VT1zca&J-X0EzAt;qomq?nv?}_WFhG_D* z$846CceN?pfK(!$oy(Ag5}yhqD{v zQ|etXxnG&qClmKpct>`(Nuh2LEOVD!`o(+}k&djwDJ=Ca3q*^q&ekiqo{pfgoWzcd zt(;+0H?ULS4)`b-!)eq)1`gZUF;}>>f{^)#+@-#Eo7P_U2z0I9*Y2uLxIL==1S=Xf zBJf(EH%~4anIfq*kwR8S7esvDY9;L)Pl2UV$#9z!gS(Y=0EsD+MnzFJ(1Mq1IgNR+ zj|NFxz{KH^KMoO3r9=7{0BZk2(6Oi!eIL74`G=^AOO`gKaJY6P(HHR@D>t7C^@L=+ z=>~kNi%U9uIpCkcmESn7q;Ose17K!?BakO#l-E|n!t^D?`( z<}rl5_EnF;lBw*LivJClq*x*+?R3{hZXjqP;i_xE_eA8=1eIV!SBWkX^z|}pVfiC1 zP%lLU){h}L;M<}$4`wgVm3b8pIW#+aWI<04tC1YCf=L9HEiCkj7KvqAAqb^cMD{Z3 zAR#tXQ`@8mwvki^lgt+L&^OWIfq<&UUx%LPN?{IubJ2Cv^=_|8eg3@$EZOEgU%Dym zwv5B!%kUK))BmvnzN6s8c;~6SMnjuUK6Sv<;aM{&V!Oc9yqAJHK9aowgAek_x~_RS zSdxXhOq6kmf&2hqY`Fam9q3Nb;#TB^nUVbXAbG_ugt?~i%yc<5=fDLkF5RPGk*{R- z680`ND`iep4$gWjX|S(7$Xz;amH0^3)o}0xuQZ|; z89DU2ew9Afw?)lOtg^t78aG4bfjQ5lL=Vgr^P;>3V>3?b3Q#jfrP}k92&{VTU>Yca zHA+)b30W7gr@u)JXxG)hq+FiBE6s04t7urgrZZ_+rDk|1ggct`N-9UcT0LSoQhrDZ zECO#VCUX-|7rm8Z)MjwUuS<;VRS*baFWSL@D_% zaA96x;`}HIuKmp*h=~hJn5O=5qOHphef9urWz$slg6h>E%qjQFVh9ZVc~df0{E+o+ zeEpf#s%3mODiKq_-|WZ*a((Qbb)r{n! z=aoP*;Qz$%K()z{uJ6X30?$UX^FW6A+P+?4Bk(To&Ul30gT&?uF+}Pfb{@sG- zoy^zLVME6vrfjx6zvWayytb78sKdqSXn}ltyX5V#+MaudYPBmB;Bf!c^zb~Sr}>Q9 zpf;Y1Qcb7Ddc|oME(h1bYalaYdp9qoNtbrLHsWfA5E@{>c4v7~#=B!3sOdXG-M$1B zhghvk;vVg=wn2*RTf4SisZ;srHI06yEM|?2vS6cX!Qj|C3#AuYxE=0c@k*pLwY=Rr z52U);gPNU$R5!j8OxZh!m&o2?(eY3DvrA1pd;UXej|Gqj3-?kSpkf9Vtth&{x^fM+ z@)lRC@zA012uvz+$ajbLJiM5v%?^Y(u?4^0^x6o3M|qvs{R4(Jd4R(Up!2!!46oY) zEIm-a2Ejf0AH6R)hRyU9VN+UjDrbu-7qUv2ki1shhGAJRn(NX2;`Nf^-KNsYdx{sawp^C`6SpXLj^H(>z9t`%*gb zqBM=D|NhS1WIE-IErXuG=QA-)WO@w*Mrl;_#63>rAtnFEj2qS>EHNqlEKaw#>1k1i zw5CK^YbA)A_1ura=Sq0DDztF4NJ}lvQZ(jf!CCBjo`VCz#oa$5w+8pp zEIs(ZC82&bv3I-lDy2f|a)IpOP(E4;n=iu*DscIzFBP3&0Sv5Moni(fdPKpO#8v37 zc=shYO#$t_e{~#FKz+G5x37h3WkCF|wRcMdaK?B?1_M1oc)orRShBNkgrtfPSCj=vWW~-AXe_z1Gpq-AN9>Tqv53 zd!{lLXN+6GbtASAG-p}*KEcj$mj$__KcEARn8u3ss0W&`dbc*u)j`+`Q~i!HE1Vb>S_632Aq;b z!K))DL2*1S7GI1C4%u_NVLoDnvf7B}D#UgFVwBNiH7N!wYD(JxGrYo{^ zuC|nMtX9LhybMNDk49!gE+P;3jQlUd)N~;JXVJN~JwlJFn=?`*?oH^Q*ni=U`_YXD zv6<^*&iE;wKI9mSB&=XkI*b(dxQ)lImc3-&3XsXc?PO4RT|A7m*`xHXp4|?Y^)?~% ziY3$hJn<)AQ>K=$?4~Zf&*5~@_b%bqC?&22w_(BMcI5#^3rWsXv2snKVY@uZE0FQG zS-Mp{QDeiNlsnT0+{q}>DD>v44)YP#t5(u?&{xCImtW5Y~aJGo3k zo97CY;%JqRkAysoDrbjF2{C~PR<0Pe&7A+z>*nysIWXgqTKMPDl4Fw{mGUv3ZXaK{ z&-;6VCu8UeHQF+iAODqJ!skq1BH9|AVBa@QqNHoHd)Q-QfKLzTH9s|9bIa?gg(TF zwp*$~c#+>xAQ`&^PJHK}geb)^Dqp_O2k{OdQdQ=jB9l4^*5K`0J~iE1=#XpeLJ=ee zMk$z0HJ&y2hV9+aqlqkU^;+D5RB zZe$1NBOI7dCe<;Rx3Us``+#Y9xLq+JDeB=)SLd(XxP}A-}mG z^JjhOE4sb~NxiCoSRjqu$uIW1#EKUe<%Z90*FCq@ipZb%QXl%x(q9ryT37XPI?jXL z-v6L`psd7#ct8gPwV;!m?RLC)F8>`|$Lxg99Unx`tB8FyF#%-nyQIq@&Y!eD+jtEL zzNojLjS$Q)w%P8GgU6r5i19GDTbUV2bm$B@zdkG|Z>x9{q1Xm)=ah)n&&-nuw{@D7 z(&KB7J#3OIE+ij7N}iHm{v6`x4*{yS9*@k#UksB}X{8>RroB%X?A;+eXjhE=UtX;w zbRoT9^}v8nmHR=OWpM*D&ZcB_#hYCbPT?TL(UKesxJ4MT()s>E)4M;+jjc7Y5j(3J z)=OGe4$=p_!Pvo}em0%*dR0TqHlc~)(o<-ziLH|7qb3My;{GO0)}}uBv*Xrpf5LC0 zlEzJxw=BN$DL7)YVCX(HV+~PiM#o8JM^+WwdFf(THQh9qTA|f#}ej zY!pEc0GSHK<{6fKS*CtmIe&!)?Z_(o^TuZO4SbAcvT+P9yQK7-W*}ExiUd19GhfPZ zfV!uZuk|NV%asH_ zbmiqpIPROc3AUXZgHrrP55<~_h)nDL+f<7$9?b}%1Xd6TgDue}kirmxf$EqKWgZ{V z=J97}#7ki`N!+*N;)cuWQg$iVgNfl3PNy zn-$`><`~$?_6SsGy`{f?a{rdTcjKCCHmfW#H#a&5aBEXUp2$M`Z!<~Kvot;UqX-Gh zS|JWxcR?+1IOr93(VV>2y4j{tTqN;IdAmc_mv=l1s;k}fo`t-bUzTI-vTve2efbif zzj9ucLBtAN)c6M8>}w^5;$$Eb5#GkL*Q#<$Q-z0+Lp*$>Al|A}73sz4MRFxx!)zbP zjf$-nsdiSyt~3AWp9k1b>wa{AKXT=~&n$t6>k^^@4;&W=L!I6r2ejJ~fsI6`dIbUJ z=x!^p*K_f_9*UzTt$QbARupL`6o>doun%H$Ge{=kC+NW9+CXjq@y%J2H1t^fDG2X` zYkI8NV5F$S%3|mfZsj5{)Zin?g%+lVzB=kKH9X-MGC)Os|txR-UN?&%0YVU2?_PE{CBU!HF_l`y9VYNV+;LdKQ)Cx=!S#sn{j?b9(e5Tf*0jtciGXib2!f8G8*(f1gqA%tJ%_XUT7EiOkYdqZ^y zmB4A5Fs+JGTG0FXROs?TOT z7GTz9%jBl@I*_Nq@r!ZW#IC2hTci(3D&dI8Vgs9!`MGZFb<1AJ)+Y|0JCOu*-KQqt zr+q5K&BRKprm-8kdmQz4bi9^)tLt> zN|0{PI2PU}%CpQ@!BC+G+X=JGOEFcg8%O23j^=!=jsDFwS96og@p%O>$h&&!196SM zUT`f1hg9u$t%Z|*i7D_qQEbI@vV~f;t+#`hEw>P76e(fgn4_fjaLYK*nrfAbhmtc$ zw8q?L+OXI!N_&evDLoTO_p>SiF(;JrTn_o6R#t?M*K)xR6dG_T5&7|!g8{EHntq#!KMosPJuX9sw0sh8ZgaQ3hM!ah^gcvv9oalHpDMs!R~h8+1?zn{FrFeE zRplPEeiSb}erzP2558t;g{^;0)R3iS83x(Dx8T&eL++K!T9!AUmPOFcGl0aON^zmt z568c84z(30Ygp#lou20HD7H)6$m9GUjNMbLDABeq>S5cq?Ky1Qwr$(CIfrfAwr$(? znd|1}+_jVaa35Q$Qb{G1O0R1D``e9~B&7}|^H3>{+hQaRuv4eO8*!i~dh5-1(cq@W zpVL?VS+!8BEqxy#0hcgzTJdVmSpj;&yYmcCKI zs8ki0%vh$}zfz%i+M5u+$oe#Q{AFeyq&&@>vM8gJfxp?nyqBb(pmwquO`QEYgv8$Z zOYvsRd$D{xKkRdtx^7@NR#BT|*>h>oG8!th|F60aNv~)uh= z>2yQa9fnhW6^^LpSJWcCSstJK?@z7oGA&6zry`jj=^w$1xo+Eduyoaeqt#27FbOE= z&GY z%P56&a^q;GsP{o~#DHau8;wWxcIybREDg1jhSm0nxzrNgEg{2m9gp7m6Ix}>gq;l& zG;^!`+^V5jBrXM+j-TS+EtJ-78|h9&M5)vrKe`j_QeImhkWTiZb6+j>;-q#-LmK@~ zRadzL!Sq7tN};@>*o;fvfpI6})16!DcIv5W`?o`#D1}HWgPQ?IJHwf>oAt7 zhFf;Tiq~}mQeT(fb!Rx@405=WPLSZi%Fomk-{r@KFLks@9RmxRD^}nm+#Sp7xOT zo=Wv>A}h{m7PU;kfYc&L8tH))Wiq7K58K!uGO>cGko-L}!sAtdDQjEU9I+?-qKh=m zqnLoCU_PhFfhO$%f$&L0I=Y&F@&e2hGdd=JW~6xnA$41bcC zwp8QAA0^Mi+x3Hb(F=2^7`>`;*xbnRJsoOp{*|bxCt4Ke6O?r9#!AH2Eba|;gUm|h z*bmv6zbYf|p^4hm)MccXr~6VxD!8VhAv15hQOK`2CSxyP8Llr8tUYDqR=X4Cs2bIS zL?>dC3}vK()0@g(lC+y8raMO?KCQR8^-%~|TF0y6wBP39*H<-O!N`yP_jw?3T_f;t zZIQ!4Yo*w{3wS&M`n>*J5?_mOP28i5jsVnc6VD*Pdg`2tBFQZ2sAS8(_MQ*-vuL1> z^S21o0ndd1v8T#*)^fD8C<<*B?-`6Of1u8QC}rg*Jd&Rm@9*fN?9_mdv+0dy(W}W% zu0w59%Cb$$v}`kXIfMwp>+-Uw;&U-{b{PfROdkC77!C{FcN1?q?duA=l=s>s?Ypfl zr~JOF!!(^mm0*88ztL6VO78xB&)rm{ovZ%*bJ`QFF#?BC^}QoqRdcm;_E- zn+-B^Rs%Gy1A|5xNy;1X`MeQQMQ(*$9MUvb3Ec37MBMeQ!m=P>aLvrXvyFShIDVBb zbihlq3KYMlmOqjM%C0U*!-mya?z*(S9!8M529qmP4ODWAqf^eP$)96t$&Niq)28&6uh>o`xg0MY~gnU z4rv5|Azhy<7GEa$i#pv3Vi=Twd~&&K+hMII2-s;WnU)$4-WhT8{?#vwDi)y@i$Gc_ zPba~*?TQ3>Bh?0|R%f+~3>xUEm3 zH}NyF9&?_p-IVyl9nnMnIP=n)HaV-z?6xeC&DoLeO)v3iZJNmV0fNq>MT}mW&t4KI zlx^a0q_z+Gm``jo0RzWjS`4zE=FPtUPV$9Dx?am{B^Dp%XHB+-;C5}^WKHuy*rW6{ zu3f{zd)&*H7?=P;0upjvL0^6b$LCtD0hiy)1$R%y2)>Zr7#2>8ESQ7 z6>d$iXnuo#HzDfb!}1w%`W2a+v;|Xl*iJnt^P9xFtWF=wPq^h6=t^IuQEL_=HN%;=De+*cN2U-*N~gVv z!ddNTXT1Jg4rj*&1<(rCckyd!+Ft4`)_P;QJ{g7P*5Hf9eTXG+l}*Z|lX7Q8Cdw-- zarG*iNz7oVUk}Rv)L=4m^`^rknc0YJwoDIP^uJ>eJ|$tLX(amQW2&k<_vxS(1=Xj< z`@r#h9~kmXFhxO;?d#D2?1j1((MC4c;*OM}F<0V^b}tQG7-5E}HOis|zhbzNWsS@wN>$gzNu8zoq*0--{{H8|XL z>M|-uwk0I$%^#K-i$Nbj4^es%j4bppHZ5x#RQ|agauVDTXT?&lE2JrhzeFrI53d9e zKPS9SuTo*lRoP7V*%tMo@#X9oyj=>bL?!#0r7)L5iauMv@1*^vUhw>J4qRYoI8iUu z&9l1S1C(8h84rYPRFE%YUO`hXmdLCdBI6`{QR5{0G>?j&Y$42$s)BC67q zLybv)x90HcU7{6hnN+Jf*GajHn7>_!a@XvImd%!wz=MKecPk$s<1Kx*-!cnflrs+4 z;+sts{c3+xBHq0vFN~r0=Il-R>nsAqY%lt*-^DW;Ba!RhWjya4`b-EaV1q05sl^O$ zRw2xU+yJK0iLRW;vtMV2QY`telTH&5UP=gd(}7ovA^96gSGjc(MOY<^TFrfFZaZ*> z={2&0bPdGwu5`lEs`R7napp<;uO*N`T+v9T!D$$T!4vg2G7cJG#Qp%uuqI&xO7*7!kQQJ|h?mR?h`+11{l zrldw$xK?paih@)<^>u|DOg$X4)NiN*UIV(}k*G*YsGULA_Ri-!s-Y-jN(T7+YED7G z+@K|)2G|Mp=m?SCk$USC#s$S5EJ{B4P0PAJqNZuZ@ZksebRw2|BJOkzT7M_XfkLW|DB)L+?9tW^ z!sA(@sFLI+g^6Vq$-orHN=r>#-gkzn6U_Dqo?fT{SMoIdQ>A^3@;j&@aHl!WQ&xGX zI-rmsv8t7BZ!(IuNm|>02=ua2)0~2%M;f0PWh;(lrrU_k#{`_Bxc$!Xkc$yl2Scco zM@?roDMf$VxGIB7@pPi-wV5N@Yz3NT7O|GFp}QBA=9jPs%aod?JE`d=PpbT_jqv^r{{~YKHcplrwp^0ZJ<(1+g7I}v z(JWYs6djY`8uEbfVlrrH#=_mtW@3cRLL)CbJ_Veo~bliq2xUEs`FQJfH$%_+;7f9?mj2?WoPa0Tth*E{J}6nYeWNICjP*`BCyC{$D7CV`+yWlmHeDwJ<2I;pe2$+FTCV)^ zC(b#xP>HYy&|`+imq)U8l?RuXR`_5&CaQr7Ix@#8MfwDhTQ@z zqZ1HMR4C{2)cCE7ifa$xs`3;q24T{>=nX_-zgCp%*(yL6z zkC71$M|EP}1+uUTH6EZxZv$#+Nz z8hgd2SJ6o{-J4$k^qQT7|IK1?{1@s`_OLf0pcl2Xb^ecwafKNKOMxv{$CvH|DjX{_W!S}`tzUi zzc|)EMkL{EU~OR}U~6V=Lhye%76U2nf^Dx#KgwJ%JBaaFio|a$ZKCC(ME%&?EwP8+}vROGfUuZV6OlIL7kma zb9*;*{e*4*$^g4W;#;p79+lm1kEl#T)z`)Es+DeN3h`uR%;0GpX@4ZR7XmOeQBz%i zEP1JgMa(iV=N8}&hH&<^Oh9$ajEr?eN($kefDr;}a4$w9gn0Bm&;}5S%)q{p830vN zQ#@fPf08-8GZ@uOKxuBk2mbi_%u?cbP=1>)a0-q#e+=npoj%LF?vNCocra_Ci@mdR zYZC*=kL#eM{Z?ZC_Mk^QEdO0@0DgFcxgAjN%1OIYqG$k2BPDEbH*{=j|N3rB{!oR# zhWc*S_T2B5!@A&8!6$exm01~JoE~F}0qW+<%2*!3Wa4--I%`C2L zY@mQSIsiBPcRVAeroVf%Cf4xsjUa)1BQL4Z`jHhiv9WM7ztNJ)Dl$5Wcm!lsd1P<^ zmUF-)%PPxffKZnD`}os#ihJ|`7GBKMhr1^a2bKet8A zAmG4n)L3=p?Tta(xzGShsRZ%F^vM4*&$tRhDxt&Y`_}{K=TlE!K`m2N_b_m>Z2Q;xIT9G88d=3IvKtn%b*u;#W6@wP?s={ibRG{m4|=pob7)m0mqgPTCaao z_Wg=x7S@j8O*lwNIs9|#Q+V1gqpxN9zxYQ8)X)LW@iE_kS%|;I76Jei)XYwI^T&Us zj=yftepKKP!R^^STXuRzZhp7hMqX;@bp0w{{ZbcDw(eBv2-5uAL4KGQTl5jzT2xkR0`i686{M_S@&Oq=?l%z^_)qXI8cMVf_ z4ei;yyK!-G08d6*==k-hoe1903tFSULYzZ-vgu%{l>JV14<+L5wbDN_9Afk zOPtVyyioqy4Z*f3eL&X(r7Qo$xc8CA{0i=UO8>^N_i0PxTKB(yr5(9xW=#EnX#hy~ z^$OHkJ@yh%uVu9_?=I<&p!o&qPo(+&1gk zJp7y?&&~Y1cAn0UAyCiw@XFe;orVG6=ldkiR);i!TUc*-KU$67B)j_U{U3SH-FTWn@ul@=GGjQy@k`&Chm`gjcqZol1RlJU=J)aSv)F8i~ zXPI9jZ_Vfo(tx^^rsz+q{bUHtw{y}%e2;wqQWbnpp-fh`CSsJ%2l(&3_Iu3%M zhB*P*NVQ#h%DEo(C?br_mt!v}!{w!zjE1?``rIyjz>2mz^;odNk5QQSV*dwO#Z2Oi zZ0~ENm-XnCHdP}3kF|OVIj_~(*{Y=4Gqv#|&*N$<54)|Xo_gfjX9L zKuFK;2vlT~E$S|5F0C%(>S`8)okjbzM5W}!a(b!{xBFbTw-T;{;F zbs6B-_UmL#0z;{(EosE+H0Xq=JtIMt%db*=uTs*ags%a}ByMJo+9b1nr}&mXw6Xze zC`@cRG*+*zPR+HNfkmb@Kn(f#E7Xv_<}VyF_Y3>WO+YfhcGCAFv>f=ql{3&+L*?5!4Rc$hDu~Vf z?e46_Nlr34Oc!zwHCllO2`zED_W1kLJVBciY^Oq_#9}+71?r(Ygbpag%;Yr;WOls- zTPQ2u!3Jq!TJV0$PWiE@F4)B}f}9MtjTLkwBmF0Ao2SGqI#$Mm9xJWNY!BD|%5mhKDPQb1xUuARle;IqN!XSij)|h{o{7yJ*d~y9Y(Ak!G`H z3b~HF;b5U(6%Q;Xo=?R3m9-4^_^t2(p@f0OSSlV#Y0DW7tO*%zCj74J82`d}q_YpQ z$Z(ut_PP>=QD?9F>o6{eeRoNh5MBxqyOk^L9d5QH5{<*$@72R@KHWC~eRH4!-S90G z9`tEMVGTNt)S}J<^5}t#ONre3Yu)dQE9Ey+8Z$szi5;_x3rQ?$ya?qGoMpHX;zCLr zRG*vpT)`$!YetWs)535qL?9zBS0E^IqUah!N-2Z+`ospA+9}95dSekv z+Dt4|?a!t@Q)$y=HT5#PpiDaLtj5e$3xjkIHmjqc_}&WHP1VefDyAPOG!BpjovWzq zQ*NC*(dP0H&+CNtK`~gYUS|c)ntRTV?iq83KV?0RGr0-VQrw_D}dW|qxHSOuoD|D^0Ye6Dho`3;{y#$@vDB+Ki&q*q} z)GZ|A5xMWlhGLA+nMr20!u%3xlk{@)aN3O0RezZPbu_IQ>Le|iIRne%W89UBWI(Rr zso0MzRJi+O5U^1KE&0BmFeePt3}urmX1odKv_Zi{7O_nMd@ z;?@Mi$2^=Ms4`ZSbyq6Z);r-$6O*(~A8;0kPBM?>nJ23ZiSqnU$Q6JCUyL{ifHl zKmOit!vI;WAUTtw$uRglmguF2x(ulj2T*Njw$UUpgG5ke&_xy!6_W=8UpcY%F}=_P z)mQgCqtB2TP+?uX*hHZi`y{ zX2tAiTP9~}^A?aJqL(QcE5o_=eDd^w3ds?dLyL!j)0OQVtR7Md6yzf{$~C@8H8lXT ziMbSVJ|TNeXI_Y`nB&yVVD{1GT4VLD_BTUCq;Ht57h0BMl;mS8C;ry)auFD+Y7bm+ z!5-*Pbu8`G#4#AfjQi-DhBrWDC-dRR}JD2}O8j*oRhYIJ1xWKDma-C4(md)^E0E zEnIFeT6)Xk%{|^glB$?H7RX?Wb1OF821HQ#m9P ze;MIzewQPEPh?n+&((gAsJ?8$EP0=wzk$#O*x2l%C?oo~DxaSDX{;+)PT$BWK&@d8 zhRYpd>vqv)Xge2St;``Xf`@Wb>h~)&YjvtIe}Zhm`BJz2ybtA>jy=PXejXfCb*x-H z2x`BXCDA^{c?P}yVz=ua*~CU(myQOE*Q1q2?9(i?Rn?CCnM;wR_Kb&md2tXr| z+r$Bw4Q3`Q5>Z23x!FtOgW!fzpHk+kn^foofy#9~N5KwP_atcPIWEVkmKe?=&!Q!}32i3$wKuLhAcK1vIH~1qM|(+*QXW^`r5`tq!Pi{^ATJtd!Ci877bYOT z_3Z7eg)>lmN-q1!E`#mGR`#}xK-vbwVhtRl5}+E!@7zfir2tFH+cWy^_KrS4yXad6 zQ9r~=q(aKj6u=6n#$CRHQ0R9Ob<=RBKGOac%siUY!@8l zoT#+1q49Elm`v}Vd5c`@vq-j;eUrG|cnriiVH}+IbV)H*JR6vXWB0z!{55shT*Iqq zHv2R_KCqC~QV+!5)uF#WTRSzYu&>k(I7pqD>#pQ@&mM0oz;!oS=X+Kmt{2=v!6$;((>Ndi47t-|EC|NUV_k?Vd`#mo-N2@g@RxNUl$=?3QZO)K^joeWhSR134T9)0 zB~q@M%^7NGHR$4mOQ8^yAuU`a<0rM&p_0;Sclnku%EKqwrvtTYhp}aHRocrMUU(S- zY_IcZO(gCuB==(4^u8}fQ&d3WPI zA>1H2c4d*zt`Ps?wZz?K{HS(WJ=jC()%PH-g~l}Ui(a9HZQSh>{l7Pi1Te5tL* zLo2y!|1mDBw5TVkD(rYEleowy1F4LLJMF#FPFJ)lwxh>852-olAri^jmsfwujll~| zgq)C;5#5de(OfZ*WSkb_;Vq9n!I=8yeu2v1Z*T}(X|Oyt`=#3$dmx}TxwE$ckt_e^ z)I!SL^+P?93?ck+cs65J@Y#;Xyq-Kj5tuf7EESlwXKfhLrHZxFlaBA+w39)A0q!IT zoIOG$j~$t<4Pps{XDbBSpCF2{F!}U^zf4AnkAlyHacf+OK-rIrRO5Mv41YI7>Vk7E ztyWxLHZw6cdp9U?m3xCVl>X~TM7X*TLS@=8os!;zu%tDiG_Fa8?}y=U)<(AjFSnGD z@hi~cC9}~i+zQz$JnBvZO1ol!^I6B;i`$MXlw6uG&hnNHjr5g174UCt3seB%rI6-v zg^b(Uv{S1liO#wR0l>eQH)SYB1AZD$l#x@+FIIbjl`)r@JTtNJ-%aR3Bgyhxf;f~P zqVnUSwzdt+N8i9Cotau^U7<9e^H%0=jkT20Z%qb{of5!}noUoHqscC-(=+*Mvt`d) zZ8f*^aanq}D)jO6JvxuwZ4oXWL#-tuLb-6HN0K=tX)1Pd%hyLv0-BuMT^HsHX()6~ z!8=tDYt*9(9@V$S5|X~82{H^x2py>i6G1$x*Ut1r8f$4FhIV77;EoJa+kzG&_Q{={ zlWP(1BJb8z44&~NfUU=4TS$mFIv+$`>qtro5FmYt1V%WK-AKvR%Sx4wM@tk7G5htBAW#;Cv>`cFwC_xfVQ;IIf7+&6u*@=6K+O8lIa77$JJLY;J( zJY83Uh)UZx*Nd@28=R=4C)I#qQei1a1c1UgCSF#T<GJzO~GGa@tsTdVWUqC z8k`G&l%;9^gT7S3O>eV17%nN;G`?jk237smpHmX7;jj__6rZfx3ME==ImkKI5F=xJ z;7>?o!N!yPdAgsOnpFK`^hwkeFD=uxs$fY#r{eSNP(;(&JBj5u ze3b8%$2OG@WlkS*!sihc?+7g+ z*$4D^kH&`koRV)N?E|?#We3sm;FrkA%cyv`&$p9jJ3d2*L9&b&j-WVi#E;#(XHR0; zk7%wiyLl6H<=hWiWV)&Lr~~pOi8dE5Pr*VrEB8)z8%`PCI0^5^%dz+j>S)+F!BWNtF`_ zMnTqhgB)^BmD-&w3&QAJr#_bOaOJ;!Xvk>68MDP0v14(`#Y7I;PcKqu{I&z|mo{I| zRSUKFqWrL3JaG;j#_wuMy6n}rY-?MS$@a0s%c4yxKKGr-%M2PlU1VfpyJu$1<9w%k zM#Li}Rfwa-i#%W;MBQF@`lfgP}cI(0tvXRW0xt+Rde7LqgR)I%`3N{CsR{ z1+wLf;h(+$#tErn&UV{BSKt$&BqxdaKQx;V)x(9Uw(WgQJ*L*(Cuu?LyV}M`DdQuS zn*A4pkXi)~`lZO@PYWJnTst=l_;1y+qg&0v-w(HyQe(7C z>GQrj)@Hbbwlv+v2y}g~pA2-yXG1=HXECxYOu%t4Cd8UYFa7Id2jHHqbFI{1g4o6e zWSwBD=SAT-T2=$?iV0G0;}({=El0im3UF19mEKaFF?n}V<4G-0irj_kS#9Il*-*}C zmEBbgYB@sGauXFhVnr1%E(7gu9X&+qW!j#l0=UL-w|T*|F|B_RJ;b0r0pQgHEAg&8 zTo|MB#sM$HPlbBHpe*^%II36ty@%9jmvWS(wtR<;~pxQeDb=lgzs{=rsr5qhV*3nSmfnQI@?JCD{fvb|eK)(P7)chdV0a2e3v_?8`3KpZ zAu~=0uz_C!=XXxEl7b^G0Cv=rBp=>`@gIh>;d>fvz-wN|&*h2UN@Vh{jxR>k5JNTL zJvy0%2@IlUE|Tx8cM1cyAW)JglK0mDYp%ObR$p4|8I(RX%Akk4{8`HPWf-EceEAZOI#y4715wNZMMml+1}_j#(g$n7;XV<0e~{zC1#ge&PjL zLa3!@`4pNkwqX2*2^_-*7&jlSf>!XyCeis_g;L%g~qnt4aV)Z)9prNR%fOVBkbm zsrTpO@7qyyHI755=$?rcI#XilH)iyADyI>Ay-XPA5I~VrF&PiD_~{RL%b|6sYo*FD zCed->GY zI5~y-wWwbRk&b0XDWrEW;5BA=_<-}x50;Mt00d0V+6_azC#gdUoeCA1UP3$I%;d*; zx7fhLi9E4L`GN%uG9v%KwOI<1X$)-$8@~4lN-OY@9_lI*w$Q#+I7|uTQEdUn8mnJF zyH}4u*Ao(KpJjBh3LkNZGG;((=7OjcZN`>b8vmnP-KA>NgGx2~SQJ+44hU2FUVzl#!GR@7@=M&Q5 zWq)V%`H_-7LqlYcwk!{vi^~_#4})Fb6sB+We6!=^S=w`Su2Z%eSf+)|)h*#Ry@De9 zxs4MF8qeQ9N8(tG+qO`_)LDJ>5xuDj_480BVBo7}US%P0C;>~Dsj-g6`#uLP^?^$__}@QL%6oqeVNnNbd&AekFP`-@0XsgYr3#? zc3Y`OjV;tuscoTHvR(#%Sw6qOR$ZXQp(>&NilKA)yoTadEzKL0&kf~*%-*k-XLZ+k z>y+4!HqMAoqCqv4LU^?VIqB4EP@WX_%j1@NqAu9*3x?hP9la-Q51)*0lvjk$d}i^d zvVa>-L@Gx*NLb+^IZqms)L?-y&S@yBAm+Tv6iEO+!R(m+9Tvz-Fo>n^5$Cu1mw4c8 zb`(%h54^K6fr#(l$dCzjei-z_F>!#W*J8J(87Z| z#S zjmm_<)|1cCvJJCA|XN2JA7R`B#&RprN)AEaz(7f zdsJ@jJFmitM5Z2QBZkw7CRmPp^T}E!gwzOW&1Q`8Wa_;MVlPsRzKK1V3GzPA{>EX1 zte~by;-U{B+P~m4GD{{Hq21o7L-z1PcDqNdjp;@~g6~kY@CSv~h*@#ED84MF!;R3U zER`RGh<_;^3Z{5P8@U!TA>yXTaln~A?gI+*<=W=oe@{I*zpq;0^$@CA!S2^c^Q&mZ z+1y9X-JFS4=#Pny7YEfmDBU+@J(P*6IMHZ1$pf8RjfGA_v z-EwHxTR|$*W>a;rfKD|Ki~0%xPyi-cncOMfkQ@0>DOOb}eu>-?nf>>9$+P%~PZ4i5 zUIk08BAQE0$_cDx6$j)v=Qc}XjjIJ+!%2bDsp!0l>>+JMBDmwx+z8({2;c1N9gPxo z0gQ)(Q!(sqzKGNF-ZbtX7GEK{Ho}#=(4EeM!{oxkqQ3Hk-}X{F&Tg0`-`|YPv z$4~Rh0-cPfnEY8*ih@jg0jiify12IYOLCeWFRuYg?waL(&6D!%D2>M4m2R&imoC9l z16$?-uKa(GykcolLdWjsZ+Kn%7sWnn^W(5R{%+MI0Sr9wUu2Q%2-dO*LG1g_d+=@M zgsbuuRYgm(gN@wW$QR6yF0jB!fwm=fRiXyT5Cs!0qlLGq#LRnKv!w6IU^F&8)3jtG znxJb?6~1FyDvgp20Rw|(bo8SER3}cshkwb3C9lj93NIXSHNZ{d3R;mpLrBm4Ij-9% za>CENnQ<@U2R&wMzu|~s#8J(GKf#OLx5{6tXGRB2FUW;I47v^c(vaSm)CjyS6^|9M zlg{p;2rk_tJ3M_t=+uyiG*KPe*p>6oW`Z*tYY42tJ1|Ix5{%p(#=NlZ!g`LdJ zjMeTmEPL?oI9GRgU`~&mE!l1)b59LwluH_&Kz)Qz$7`(SP~M8aSKM6Eg=m$fC+e;7<_K*y@RW7yp$Iac@+dO}k%9mZ{L}mL%uV`YYVKm%R7bSl4+S}eV zi<+)S0x+y@INkr7*}gF{@N6fK`%H!Y#1SC(KpLnwi=F59UXT;DnrNy(66j$^CD3HP zGRD2B-`e!K1VTswV_c_TNj{xwn{DF3m}iaqVokM9bwe|rfzo}j$OH2*DPnkI``SCS z>jsJNwKeXLK!}>1XcGPIux<)1)NiNoj69lf$~rf?cgcF(ol8GR{85~uZjyN#S3;h6 zKJME+&i+E%7qp|5+wCJJz7Fa8ExPA0CA%Ha+prVTQe4_-Z$y2iy2W#L{on zeUdOi)n2}L)ULkZNHQ-IiD^(e>Rz-64ykFwH0VE8O73tU_4@in-hp>x?@N?^&w^9u z;}FYvDV|QVWcq~?kBSIbO9$Zf?DJW!1Gp8cnGWpdR;gRTz?RX5Xjmoz{f*~w$^2*1 zqq1Wq+pcb966Fzu)o!G`aIPf8%}d}%Z~~}{P9O^YCJpxEoRs3Sj#DTsd1#C^qrEI# z-d#wxb}Ixcao76pOrsm)&)|UioRc_;G>j9uaFL}8Qh5|~qMiA=JcKpJeM={>UC-wN zT^u3c;~kY^0EyBJ$kO}}ANvadu5mLfoP)D{4Xe4a?&a_S#5dX8B&yxCLz_jvb!wQhH=UYp=XgFmCJM))i4C ze`jZ%*)`*AjL6A~C|4$3;K1;{PakyX9fyW$tatg&Og3RUPPLGwh-4k&YhzlACiEFA z;frklje=^IMOwlzh<#56S2M^&D+Bo1QR5)9+M!fArhv4$+4m$Kk_Apl@Iy%$z|4b8>qL7u;!oA z14R1ajva-NJ1z)Sgb%Z#Sz!u{6kzE~FDvDU*dC#1P&iYtg$XXw@{mUZJ$nR>F{7-J zKb1a=D9fa?N6r~c(#wJ~JeH-m=We=Jq_9s0^SdPWlHBwY1Ecv7i=VTc&rMCS6?@}x zt}OD@#;)8wh&`O~Ywfh{6e+|;w>dlLakO_rSh@UW&&~bw=gE7@on2%&Ul5LLCtIb1 zfYnh_ZJgXRrrofE9D#*d>L2QIvY%JN+m~-HbebO7??I{eZ;?DMwYW1VnJC^`el7+W zHOg*3$Ftf$5deYiE)~nZsSX9$z-Ie)ajOx`k%}`R+})H;oy^5Dz^=V;LVqGkae6+> zox)mgp@`a0mt){GeY0F;@I44z&<|E~y|3G7wF|tr?jaGtD5WljUw@DSN&Atg{ge&a zOb|-3XVCj7MoSsnx<#1QdD<9TNo5O3qyO%(AP}Do>?u5bB96y|wMwmNOOjZ>@Viv& zm`6$%{-udSLKqCrBHNf~1wlR}r9R|vbh(QjbC;E;a+}LgJ8+|Oj3TSwBkjdd*Z0W# za|4@FSmoyRZ`NHuD+{idS0sI%U?WzWGnz>LT2O6U!76O!{5F9P3HXHiz*cJMxAPEr z7rMmdwnu&=Uc7a}wHYA=C;E>>Eu>|HpDQg2YOi=av=PJEO6WOR14No$m6yDxlGwXx)4UOZtp*vPfH2 z@OVJ+@}FK8j&X*SHVS5mzh(^4xb$!%5N}fyV@2absl+bBOA2y*9oLVL6*uU)glg^) ze+Qr!g@6c3>3Pw;`CCcWdEPoC9gQcDJRG^4p(`Xd>$=&}2FFa^^=}NH zs7(6t@9hsJu@QWJ4w0Mu(uZVO(!R+4dc}>MoNJ{Lu-T4iyC2ubhz^3rB&!w0>v7{^ z+qOXr%S0#RN5c6wOQZYXQqc6mZV*Tk^b6_%JKSQ;6;U>M@@1O2S-wCW@hNcgr1=oV z1v6$`dk+eBYuHMb#k+!G*FAsH=|VuX3MDR01+oOit8vJrZnK=FuEThIy*{4SFyH4{#wUv?|zt(6*CP;W#If&1vQ|pS$-(Sxv!l1@8!Y z;f?(;iy57Y`d2F!vpdS`X%^Mr=k#{0pW>@SvBqAR(!M@a@30xX&wo+An07-Yu-d z970N4NII=zrXm-orXO=3@n9_Y1lw}qkkBt3|Kh|?Kra!bZ*6+~9_7)_T9P;4Mudf{ z#%v_dv#PiiQ|tBC@Kzg?V_u&e%vJeF|Lt(|i;bnQy4~an{ZZ%2~H+(w}~>u$aAsj>5u@sqm=8ta4T9>Ei8d zhHi)^Cyt+r9oltDiZ__;hyXaU`hAXGZ_kq?m#&M$>^T>~_D10LPC{2)!Rq=R;||el z3htTtc?DpwSX^GYVNwn%%y((Yd3^HpnsCB&Y({fKG3%O(z+(5lefXB)3!BAzp7qK5 zRE4caRD8^yz%{PW1q<75Xca`>4uT#pqdE|`n>VA`+_ra{b!uXku66s7qwu@dmbBt{ zFl<4ou^g7v$vvTA$#g54pgjwsf}MV|OweQmI-X-#EjERcHNZ6a=y#WtaW*P%yBEZ* zhtpb8J*|mtUh}RVJP|Q6;!CnbM=2vi^%|A_!tYaEra^6PA-PL8C!9vDgZz59Yv~XW^k*K%`OZ&Pwta z8{pS9vI)I!Uaw8#GR9;Y%hO)EQO~9siNntmQ9L~wp`zz+S+gHrX&Nyl)kAcU4C2A@ z4A>(-TC41*kQ_o}WIfS^Bp>_C%8lJe<_FdK4BH}H5xr>SVr(j`=taY{&g_!Rx|z>7 zJ}l8O_AAe2dtaA3?Q7P>6PtF7y}g?-TMo&no&BcK3@>B#4pa?~HmTe{q2{SGtaI$vAK} zW$B0b@jOrea1K={0Izi;WOjRyRJr=8Bf11NccrCu=V26i1n zEKjM%!{%dAETg&>zd&FtYyerGC&Uh-iTu>Hm<00x!mMRZR-xWW(|5ewi2M8Q0@We; zUR#pQh)*uhu(9K@H!MsO#2|#9w&ONFqQU#b(f=qJ*6u}&sv+YfsSxS(@#(QoD6jEN z#Ct`zz*VjIg5Y^LjbE~YKXYqhE2z9)#&}enK-Hf}Q?s>^Udty+PazmD- zrE`A`qF*W$p22G>MRVGaDtoXufbc{<(Eh?aYXZ?@TO#wGmK?K=9f*7i= zcqa_^n(UnEHc2HX!eD)-L!{7Kf-ji?M)-*;Sr2+|A765&v+xmHZwr^e*jWJ+wS(Ij zPI&C=YaQj=vq_yl0^{ADuR1h=XIisDm4Ni#_t~X~TI-7dd{uKhF1I5_ho*>an#(Bv zEx2Ije9o?bL~Rl9xP%8~ogUK?KqPJ<2K8 z*2Uuan^SAe5*x_G9bj6wyUMiLS=EzD!zcB{GMHvwG+cPJa<3U9humFPZRYk_K#?q# z>8@cBA5FKO*^ViCvdqRwdsYnVLCE@gl)UcAaNSaT-r<9=Rodx3PAoRFPtrEBhqcqR`5q~032@U9 z2J~t7F@MVpF)rDys(u1hm~EI99{x6yO^?>Klc*4$$_M2M`%Y5=>bFXWM zCmhaQP)uMZuaZ&sSs^M}EoJqgV`GR<=e7%}0JGk!U|H!oTVGGo;Ri7-ef*hvO`Tz@ z3TJ{?!5tY?=TTY~#yK77F^I_FKcF+Ty?Y>|t!^9G5lb&7*09MFP~rge-lwVC>d9s7 zCQ}gk!cht`xxXL!&^a`yj&iHjs*22U9xYH31cpvH8ivfGHLgA9CM zXHl@D`$hu+ch#o#7vl!f>VbZ4qeCYXc84u-btHm_GLcWh+%hAA?J)Hg`gCYsgxyxN zJjwi~*(gB#-`@R)lQ*@3Zb=z;oW$K;ZA5BBoWE-w;N`Jn6{Il?%CDip&)!E@y>$LK zjy2Y=f<^Hr*qBo}!C5{F<}(K!)p0C-5HeJWX?r1DbPS4|Ys$cm#I5BR<*IPby_tP0 zr1#_$*XbLq+uc}_Px_kZJ2LN#- zfD!R-HX?dN;@FOul93#e3r^GTjfTXhl;zp(#GHuCQHs*^AXA+xobXyfW9^J$xa4sr zm|e|AKbd#$-hWtY-_Bg>E$K1SSdRK~6avjK2(e+Hrbxli{}h7$%G4Um!1p9yB)@h- zIGqfIF&&!EJ2W4Sn42m7DZX6g-0zMH{j$O#vRXv9gzLTJm-QHcYb=nU;9{_8a@w{L z*~KAsZuhF4*{(3lAT?9q=#QM~n1?-)VI`dTDAjGfD25`Zh6yLkGe25Q6)<~Yvw0%m z;p7)_J|%W1Grtjmpcu9maN0E{x%c2}YndzxO;1|M2fIdfK9~aW>#Umno_)Aa2cxFh zkvuP6SQ6{QTj2QpymDrQKYDZgW$PAEpb5~>9~?y}mgK)&`jv8f*{rS>!?+kq^zf;% zM_polAu(fH@@M3HcEj*-{dXKWQ#CzkBv(ql6IPD=_a=yCBTbT>o8!N}^TAt-`?KA} zp?V$_^w?H5(y{i8qGhN#y!9;@hdtDO)aCxXSTD3BRu{WP58-nYnIhEk=g;Q0`N_lX zX}Qnue;9@({jqIm#WAPC#moenW!-p)#@b{lu4V_g$L5@&C8d15EOKM( zR}SAzO?o5vzp$@$X%KKj*t2owIszS!8Q7eOY>=_TG&RsSuK2-I+n>|a8ri;#`>>{9 zI!~dWw6THCu=X)fPnHlyVZtYbnL`%rF6s%*{D$Ct&9}~D-HbI-(A2Mjm+j&p!C`Tp zohJ^s>NDWSUNsXZ>!MK0c{cJtk{z=kWL43%q$ns%ecV8O0^j5ZeP2m2F{lt3b)Mtc z@u|}b(W9S6{X$=o%5}yiSXP_ZE^WhYQIsW%b_%na4KI&16z zqAssNavlhdVr#RH_c}JYnSRgrOriWZ=Y*?oJ+;>K+H`atAH%BeYO>H%Mdi(VVmy$k zIn=;PIy1YVVn$Cr<4F#N^fA{af4`ZZFfd2LNnSpsS&GE$F#Y-=&!d9u`33k&!ON7k ze0kLHx1e9xN0L+9=$F^*7+gv)Js?+tVSyZvt&p67|7}JjB_gVBMknJa+(fWVTE73~ zfhC%^=7tV5qzN9Q&Ea(;TBkQ$FPW@9YEyLaT%O*%*q@+Iv4bumKNJacFa=q1 zF-iKl7eAZkBc~9opa^B}CMAi1=a7E-#Etf;_);-lfos4aD zrMt!{yRB=wdUF4<0-AoFb8j^~&bwRN!kqN2UWGC ze_PkT{jw*T(_R0v24BBkj_};nsS3YbQ1UcIc8QygP9h0Af0%4MTFY%+4#^EIWAa8z z(LiM_vF@~jitfC0ir=sn;)vIZi_n_*L*lPN@ND6IP_*=Y%Pfav!$brmBe426Rbj-SM>YXhK@u)C16mjje{&19R;$hQYdW_II zoi=5!##?UgmfzknN0w{hW4vj1B{-tTwuQNb9pcHabdW1Sl zU_xGz*1E=eB1HgtoO%2^Me^rRh5e7O!8kzf7%!g0XkZod?QjGh4Sv?$X3l$3h$Uui zW@y!{mpAE>#zbbVDGsg05)Xez7jS79f6$c{&F*IQHuL%Dy6Dkssl$bg#9~>N>`IZ1@suqWi!X;kxoOFu8+I6(m5sl=# zNZ^#3Ylx;A1@_?fwEdv`r>RbkS*62b#ogJX2#%MHE*v#!yahH)JRedj1jpfll!%2) z7sunjV=Ns8oMTNPPkn73pRG6>^#pO|X%!5q%s|`0pZw^N(CQKpO zVdZ;h$QtqCtH)WAlVy2V9}nBJjhqwLa<}K~V)ZEYNuMxiXrymXq;r5ag#i99+Xt_a zx|%!|9%d0%0dDHf0FR7Ba$9*hTyLbu3CYCiS!lPR76TJodE^6m@7I%XB5f)3sl2B@ zHeja)j(>&ZF(Ppdz@XD8ZIG%*BRub_fI~Dg4P3vsRj}~-UkG3dX;MlvTi5@oryRl$ zUV$E}66K@a8L&HC?0!}3_i9v#3Z%Ev)K02+zJyo({%c4~Xny1&HL!?4vy(6mVU^|~ zc)eNDlq}Q}i&lL-+(fh5z0%gis7`aKSFJc-r-t}F+*FLP4mYmn8Qixdt#MI-eGVqz z2H_=D8lMV1CWg-5X6rG+Ru2%{o=76ajjU&^b9?4TM7wZb8D9SkF3?e2^=~_>w|~ z5FkI`U6u8>cR5CzAt&Z84CEWqEPvh)g0x-c@8Yg&B`*&jCkHBDze8=wgSn0AL zFGkKcph5OvxsPYcC$i^!AGj+!_$bp`6*Os)Hz|CaPle!ZofB$HIfo6_kO?5jqPEN#bLDzIuarqh*ysjAIc+~W7t>D$W z-oMi=r{)Oqq`h<0*Yy&@fr7JfpECws^>=nmPQhJOLv-o_=SQ^3xZ80tM%GogJT{!! zqpkt?UtA|M>9?4Q4y&rUsO|4H3 z41g z9zC2mcRF3iLG9vc_q}z8Zf4^*jAKQDPQ)tHg3UjKw+*w6=L(ZFTR)@G1O3^KBl%pQ zoM<0+tmJ~J(IJChZ%j+rX|`HT7-$pXdyT)TJedB)q@&l2d86SiT&=5fT4D1 z?y+d79r#G}%H)CQrWQCbLGZTU9HAD=O7JOZ(M0FkHK#w1sd%7r3JG1w zyE6%wXo{IWBS{(>*DRNFDrj|-mN*LpacnV3Eq5mf62X}Wo6tMHB7KiZ0S-aji{Hus z4GCC&Bul(ngGD>{zmMDnr9`oAm}({K9))75p33kUR!>%cUsp&_Ts&f`)j}KMRN+*T zP#x}+p@Cf{U2LM@Ge?G{Wv6-ax1;orfV1?BG_yV6zphM|baDfh5+EoL0EKO-30uW+|42MAoq=L|1@NeOaUK@#@Z zcM{?~>`KSzvW`Y`QO30_bL5kS)$IzI8LO6~HoTg4K`*V)4WP)-Bim;1-tc)?Y$kt; zXZIc84G?sBGX!YPBrMP+t*|^X)C7liGbdB2?o@en)U;2&sW0OjPj~aHtqB8|gCCuE zi7W~U+ZeNPWh_y739%qb{P1)-DHf*=gLmI)Xul?p5M0+I(TuH$$kiq>B=fq7PyV0K5@3`0-9M6}oNVilQIV8VE zb&y)Nc-ko`pA=s1wc-DacFQb-jmu*#-4N=!#A76~+zF+9I^ zrNq&ev9V)Vj_h+J&HfI0)UI6Q>!_LYUoG@FRaXAZm(hzl0Ff&ybO{?A*P!}0v?d|J z{m@f%ltIKi+Ppo9>X^2vcv0=NK%v@KD=y*VDK&7kVo6?@kUJ)Sy@j)bw)^Z0b~z%# z_wYfTSH}I|cjW;EM<;jAg?@k;vZd)ZeSVSe2wKRDb16@ezl@U3qdw}C1UP>0YqxG4 z%#|9p$m50`(xR^kj3y#%@u;)VCuYlO!27LV~>}z1tfaJqsi9{iz2{;*--T}v~r`y8SW%lKHd*Shvn0o2~~nV)P!HqVm~(1C35FfK~`ozu#S$F zZH#8=S0=v+Y~{TWMx&d2!VXihRbl)+il?FUucuHUubZo`W?gGU_k}b#XzFfbT}(|> z0iy06gQ{JU4=};_r4`8Wokjjo;|EL2@oTeYpI20(^jU)oc`5Ba>~&>rt@Q@x>p87j zE=lj+AWQ)kVT0ZWQtKCuZ5MMDk92ZSSVONU=TOp#KT3DOpe%Y*=qn%&By!Fd9NZ<51;RsM{j{D z@;F4(fO^~i3!=-_qAfvdRn&2NB5Awzr2}B`?BR|)7~+(w0sg4%G4r*Mm`dUyfvkqy zu?xc1YYD5tqjhMaHka(8cB7lW*T3RbI6=Vl>gV0 zB6mF~eXl}!#Hnoz;}z{;oy_r-b*}w5EX6?i6M@Zapgpuz^G9#vcu^br59QqI@ZefK zYrTz`;YQ2V<*F+aBSnkNMoZ3S?Rifw!R*&&rDZcU%=9jPyQ27{S~N*hB?)Pt(GR^{ z6$5|9XUv-3d>{Gi!Rdnk@(dBd0PK9Y+)*w**j!NSPEg3lqj2`9v+5CuS}%e&C2C68 z9_OIHX;z|ZoqSe4myKB!k-X+mO>PVzukfpS8*f2CJNMSyCQ$j${X#;JcA)95#rWji zj@R;%t^iW3S)(yvfIYL`hm3Biueg@#u)s*yCCWLmgebG8Yt-^GOpYgJ8D6D6d)|rY z$_3`&Bfsa^5-;?AN0Tu4=o+w%k(*%*|BXaAlT&1aMX=D6MXL%zv8^<0bQ#i?%u>;# zG0o(@J(kL!3IK6`$}mNG@iaa_QV?`C97O@vJCO34A>4ygHMJez3GEf%goY0iu(r{@ zFC`#e;>ADR`J&k_*}FDt${o zwI8ik-^jLJ8^#&r6i_Z4sDT$X9T6trVJf|iR(yt13+G6^t?3|NnX=#i?!oDF4sED) zkm!xT^3ge!#@#9Uh;kvOHzptD^8jY`(w<$0mZu_=!GX45W}!tw@6v4NTopXW!J3h;d?Kix<8V{hcq#%#+rXEPi5cZX zne#0|Zm$@qR#|4J&i$OdQZ68U&GFT%Y504P$kI;@;$Ks2!#F~&i=J?^a40m7p>7V4 zq9VyZz~=^$R4Bz1gy0KvtC=)x$UaaT(^U44JOKdECwuw~%*!3RY>ytc1S52-1m=w1 zIIXa#u?o!QZ+6via++OT~&pG5f3<-`gC_t{ZUf=E~ zHJR?ve)YEj0JsGccjpkb#r8AFBe5PHc~l6om5$)O+l}2V>oL)ro)aqVkL*4L5MU;H zR$q(@u$an{Rz`Bh2gexxD_Wnb=o6*m+juwdf&0D)Q;>I^SKQ$*DK2u}SxO6M>3PBJ#%?5v8}LJ5czVQe26ix2lwIV?JJMb9bZ2 zPTt-YmBpP!JF%DHkQAi$mf}{eh2EA+d+SvxuCJr=(^FmS8p)u;q;do|Nc&AU7Da7U z5^JuiPYf~y^epRg_jq!L?A=L(Plurr8x!{aFu_^n@y!3;L83*RHe>m7=(;KQ8o%}w)dF(;T9E5Fz1_gSxaZBT$h6r%<_BVOI6m? zXx+hu{op-|MB5l`_@B!XWX-HnKPbN$6hCw4Z2hVVgdw?(zD5Bsdv_hf<-HWQ3+84o zZ!mNYr~OmCqdv!fWWn4`v5IeOo$c{}DTUepD43M>%Az7#aeJjYGeO}JFXpDiBRvL0 zTX+UfQD#A1db_%+z$!$DO6*_E5Uul&UVR$W(_~4uXsbEBc)x^BB2=Mit=un4dv^}D zOF=x@&KH1fcUUWG)wQj5LM!Q|D9>hW$f9`U`jW4%vZIdYXR&)w;6d0Znq04Tur06D zNvOB%(X-CWxTUV8>G(4IQ57orkhWi{?anS!3?w8wGp zEUlEfOH*K?17u=68sm%FXV4z9{*Jn?T4MjeHatmrmOXcqn~D%S^U?<98?5q3@)eIX zAOD@V+rya01bZACw`T3M-zxX~q#5y9A0QXd5bLAzvsgbr!{S*Z>Hzwngx>cSYiJUx z?_hsXF|YoD%Y`4veDTS0c}_2$BGrF~-J9I1SQxXzGEA4xczn8JbxtsdwMxQ+-59*T zn;D7-siHd4X)00lj_?HSs+eI#}Id2A~`bM<^z zFrP!_-&`nMrd9THt?&>8yRS(*r9CXzqUmNXTp?79|K0JtcjvR(Rm;5hFAz>rnijS3 z{{3$gf%L4IX|<{I;G<7K4XbCCreSZ}$vk~_X}a(mY7Yo@=r+}THQf>5y7F%Nsep^< z9GnFUBB6HvB<1wEDft-j+PA@X}XL z&5Wo#j=AU_k25~**d@4fRJJU(lY_xWEma9DIB{E}jLbKfht!1jhK6TLI)bs1i`gI zWJ)zs1Im{wLmVXIUyI5M@j5N*7lcMN8hdc7)n`5{2;YZHymekOf+?~PJ`1*hSt>Gz zt-x94=|UKDyyAUjA`!3Weq7d9Lk6h?m_{k|Ms{Whx|>|6Mj-t&4fTdV%xbX$Jd&5t z1|g3UFNO#NpECohh2k=k-jWpqiNN+4ruP;$VDol>!DmYK0|@Whwbk8@(%elsMrd52 zIchoukG$e`;M4+Pu*{0C$M7>E+gIYh=%gdt6?b#76fBv15n}uFlU+pvhxC*|)m{Fv zQLUKj_)bwW`&~Ri6pnY%eIlnfL0|nZ?(D;Y=Fq=%{xTD<-g+fZlCk1ZWu|KXdX<>) zYRtgg7b?juHU5MS=Z;a!U%lFN4B!4yaUjh33p+}acjj!%N*G#SazI(Iuv31&N0ZqZ zBql5%2eO^CE@Lw-KNQvjV9x}93wJP_N~o$q8u4i=#GDRl07m%1#s?N12KQ{8u;5}M z)a>^1DeFzTcb$MYlYDho$!n@0sRftiDZ;thscVMmq9t2=6QQ@NHhEx~OYY`4Ocy z$a-4m=VL+5wIv^Dh*|nswP8($x=W<~4k~b3dS8|rkLn0BB1^fd##J=ANHbxd$8Siw8y@S35Mj^ zJpg4z|FY|^&>k3t3iuZo@9hx;**@}ydb>?sKp)LzhW@FM82`f_Z5VciYu5($&Tafl zOPFGcw5Ol?Y(1ZWP_t!)upyoqux}G=1RIZ}$&ion<7M}pWw!b1ZvYI*q`*!;l`qz| z+41;s(3wf4!}F9jaVBrS8K^C+j2_T6;|!KzsF zvVY~zzyf%$TQB^12uLy0#8QY0qL94O_NG4iL7&Cr;PQkYsDDLm031ENSssaLG zwO1FMv!D~3#Q=;sGq^dfE}@RpFl(hka~kL+m4-igV!QD~V62m`Z2 z=yFhGCqA_B=M0}>HQIoss{*1o6VrXVROQK$IXBlh22&Gr|{6;ypP)A)w?tvnKvW^=W9Ig{GRL? zu(Szu13*~e?LmUuP-{gvHn+j33L+x;P9d|~!mmRfG8AdoU54_|OGf`XIWLVtKhw31 ze@>9uJOyc%)X>u5WoZeA;%?vq!?o1?;bwqu{OBH=RwbL;-Yl_#0$3|zn-AA^Dr_n? zW12jbd1Kci1jrNqT`u3&(DiH-Q|S|42x7xpktNm-zjw6D`%E zmJKN08ArvG%N8bn!8zxI(9^?TK$bjj0jt{VAd#D)%V_-e|r1EMq&-)64!Yqt)Tm5DrU`8yNxqfee;DhIFIuG>4X z+KCkP{B1Vkl|5qJo9{Z`-bmB)<5cQFquA}`NwyZE1ig`5Fjorx3vpM%P?_8BrRC}I z*aKDphvPk;JmB_YC&_tCq2ydrcOn;jSy{g7itn|~5HPNr>T?r$#{9dwc?K>&^WK!* zXFYC!{Ndy%@0ynP2K>UZzcXMG4~WZ)XjaPL(YR1vN>*Vwb09?j5t769Tyu~_Wg=9t z#K5*~E86ePx_c+$$09lvC2B`0ZAeeD`HpS4Jd8Y~~$ zSz-n#V0sf8WU*x$U>>0n7LGO>$D_BN*)Vf7(&5P!2s%o0&3) zeGj0A0O>z|p+y19W2wAn^%*Iz9jPBb`jaW%#tx_|wKp^%2Am{hQ?8V8GBKT+^AOjV zX)Yf^Rr>l|k61b02_H%r&oh_5)s2X>w{0AUlC^~;ipg0E-vXV^_$8^=y~AsRN*!cO zq~NhCmExXwc<`$Gu;=E@dgTt4{mDfERdPP3NWJ4m+U!eMb=G%$Jweu>cksu5FNbVA zdAaGG8Rob**8sQDTx%2dueKh(fQ<^NowOamF7+=w}Z;@f_T+pL(jd%j&%;T~Tk94X9_-K9`ESA9_ zqG&9rqej~)XcG>>NP2)>9P=3btUiK;XSb)PfX6MLEXTwTrYk+LEbO>JczVTv&oNKO z0Xenl6lly94#jw4(1I`A}7;#L(C9(` zZx#|t+6&0X(Y9~FOwW4j!5nbGcsXL&ubNgJG)E%lQvAb|&PHKTg@ZhZ1t%*Ki zI6t9iE%w||dD)>6oErSaSajWHgU^xJOUUBbG#p+%0!NguAHfQd^{E6l4z|IJoY$^V zdH1V>{w;%f{AnmDH1tuNm}cUu!PUv8aWiB);i&cdCvln^0Yx-;7WW8bkBh6wA0T19 zZoKc%zKP>n)a6UtLX&n+%0%Kq-*t3^jGWarmZu4A;Yj1wg@&2}q6q^c&_IDqPeWt) z1eabMkPah`A|q1RU8*@Z^wXJ*^0%2E#I7NP`eO;`pyZ+Iq)VF9^N(%aEI$$M$!-`h zrdUEnv2930dkiAEk)dH?~ZRAm?Zg z>VMA}e<|PQ@zN?`xcBGwZ1G`GcspfaTnA|7p}J|@X7sP}V1ziWsSjMWx&FbAnyXW@ z-jH$_jvTE!3w$LnVTCYEKB^ohz@~|AC5fb14oVge#HuX8`N{QU;mbGmb$|3GJONWbe>(>&1Tf6 z1&OP~>9O#o`;W<`KTJIOv0Jwb=Eu~!W<@SB#vcncXV>Of>9Xr(pS;RoyO8z`kuxw( zo)|f_WG8Xjy7^jLVyEX|%8$sMP|9f2Wgg)y#L#8R%eu?C;_uueEok;=0bVOWC%)6g z7+s}CH}*%xd7F z3mi&xy4h*SA_8SerZLrY2Z50K&FSMgp7r0~5HZBH)Yl}RSwjvm0U6DHZA@-7<{4Ad zJ_sU>nEga4&@qR6!G;PrDDK1HnP&Fb)N1)#l*GI%QN~T{CIve(5UfW7JEOj@ zUo8<|8-8eD6W)n*l&#re5g@iA?NpzSVPW9&{{5FAz8JH?t_4)tE1jk#?x6cB6in=R z0A9AqY6k>2MAv&brLkY|^tohT?@c!pf$XurUy}juk<#1*v|ANwxZVXlw-AK|UE}+P z&oqjDjvu`Ip4Nl@{s7aGh&qV~g+wrR$jeuE26F9zc0(sFbgE_6+G~18G|9X37oX;E zN?uSdD`KG!?_}GEO$Qsb^Jk?CXC1A#tZpspa|tJghO29^@<-zFxWeuj710d1!S!Pr za?6(kqlyGib3;wnfXQ-kIQo>iGnj>%YwbhFKraXy@WugLhuP@`_2XZxgR%$a)}}T? zkDM9*X7B*L+{&NN^mwqx>VO(~DBHGS6@y^U?cp%a32#ituoA5@G*r3vCi8>W%09fb zPd^x99b7T^2@G?*D>DNciQR+1PlHg&?(5&I&Ns~<4W~PTw9;XP*LU*KX74oiX@1{3 zmKEeJLf&w#L$yic7P=hn-CR#@sy0w^6o1|+V6|iTavHn{cd8D{Pauv)O9)4<(St+a zn8%mUY}1wufYE3F#vHiwVI*rj_IyB{8 zNvt(RMzqWH7LDg@HVk*M8$E zQlvUDI@5PRHOJ;m)#es!48&k_rD8Hvri3 zD-!8kx~21_NX!w`UcB+Xk~sQ7QexA zE@^x7e{=_6?-RCC6U~etUs6b|;=daoDnP;3nsd545nCLz-3T|-jm(1}p^Q*UV>Bxw z3k%zJJBzFnP=6mjHE2yI&x-mRth7WjJflZ<4i%eg%yS5wrb-ODc@QO8YpbBTz@^crx7OPjeYE!!%ba< z)Ke(-Zr7JbeiYb`pFN5Pqf#w^9^f^SVz8i8b#>-;<85~KjrEC$rPPEBH z`^4EUuoNPsR;jimCO0;phgxpJ(34E|_irZQ_E%*L-eIhE!I$}rR;W#v+TCs{dCC{d z3)zr{CaK1HgmP0psglAbjJ>sW(X1bx7uc2UkL}%T5am#O3AC1Q48y>u*RYrhdNQ6A zhHaWHzV$Y75X}u-zJGCo*)pBHgs|oV8OK0ETXm8k!OgKax+QcuVIn|%1QzA&$(8lm zQ8yWM!Gfa+6%Di}2=3+f3%)rouHp&Br{UZvp3N|Vl$4aq&b|~%OyM{6lT%jVCREzg zF9oVy%mU0l>U@#@N>ZO^m_@wm?Rc%N*}of$fQ0;x9K>nFqYO$n$Po*J+@?jcm`2*% z7J@Rp`uk+$3i zT|l)b9Us;oM2mJoynJ}eHwSEpInxDk84cr~Mg1_?>6i8t!sqqs2Z>q($8IDSFBX)t zLB5U|rl(oF(HyCoNKu;HnMChQkb>bC0M6<(<}T{|dCzZTl^e`5G$*d?QB{?jr_b~@ zfNd9zv{aV}XoVV9X!kWz{D^&GU;E;7^C&0^Y^w0s7KO)KgDROcy?OI~JXj9m#3W?^ zpP8t{@!YCTu`S5*7r)16dIxpxSLJA z5@@yHT=~YrV#rMk3i=xz-Y4BJ#P*^KYMS_A~Q6BmqFfi zNY@+-KJOtpbJRf3B7A&=e6ef03X-%d`a%Y>cQnADQH}7hoJ+fo6C;da2%0As^t+UJ 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

9+z02I+Ls7^|W8l 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 B{DxqRi+zVO7Dz|eSw4B6r>4qkzh%SjwBr5r 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 diff --git a/doc/additional_doc/feature_documentation.rst b/doc/additional_doc/feature_documentation.rst deleted file mode 100644 index 7651ae7a..00000000 --- a/doc/additional_doc/feature_documentation.rst +++ /dev/null @@ -1,420 +0,0 @@ -.. Copyright 2020-2022 Robert Bosch GmbH - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -Json Preprocessor's Feature Documentation -========================================= - -Introduction: -------------- - -.. image:: /images/python3-jsonpreprocessor.png - -The JsonPreprocessor is a Python3 package which allows programmers to handle -additional features in json files such as - -* add comments -* import other json files -* overwrite already existing parameters with new values - -These json files will be handled by the JsonPreprocessor package which returns as result -a dictionary object of the deserialized data. - -New features -~~~~~~~~~~~~ - -`Adding comments to Json file`_ - -`Import the contents from other json files`_ - -`Overwrite existing and add new parameters`_ - -`Nested parameters`_ - -Features in details -------------------- - -Adding comments to Json file -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Every line starting with **"//"**, is commented out. Therefore a comment is valid for singles lines only. - -Comment out a block of several lines with only one start and one end comment string, is currently not supported. - -Adding comments to json files is useful in case of more and more content is added, e.g. because of a json file -has to hold a huge number of configuration parameters for different features. Comments can be used here -to clarify the meaning of these parameters or the differences between them. - -**Example:** - -.. code-block:: - - //***************************************************************************** - // Author: ROBFW-AIO Team - // - // This file defines all common global parameters and will be included to all - // test config files - //***************************************************************************** - { - "Project": "G3g", - "WelcomeString": "Hello... ROBFW is running now!", - // Version control information. - "version": { - "majorversion": "0", - "minorversion": "1", - "patchversion": "1" - }, - "params": { - // Global parameters - "global": { - "gGlobalIntParam" : 1, - "gGlobalFloatParam" : 1.332, // This parameter is used to configure for .... - "gGlobalString" : "This is a string", - "gGlobalStructure": { - "general": "general" - } - } - }, - "preprocessor": { - "definitions": { - // FEATURE switches - "gPreprolIntParam" : 1, - "gPreproFloatParam" : 1.332, - // The parameter for feature ABC - "gPreproString" : "This is a string", - "gPreproStructure": { - "general": "general" - } - } - }, - "TargetName" : "gen3flex@dlt" - } - -Import the contents from other json files -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This import feature enables developers to take over the content of other json files into the -current json file. A json file that is imported into another json file, can contain imports also -(allows nested imports). - -A possible usecase for nested imports is to handle similar configuration parameters of different variants of a feature -or a component within a bunch of several smaller files, instead of putting all parameter into only one large json file. - -**Example:** - -Suppose we have the json file ``params_global.json`` with the content: - -.. code-block:: - - //***************************************************************************** - // Author: ROBFW-AIO Team - // - // This file defines all common global parameters and will be included to all - // test config files - //***************************************************************************** - // - // This is to distinguish the different types of resets - { - "gGlobalIntParam" : 1, - - "gGlobalFloatParam" : 1.332, // This parameter is used to configure for .... - - "gGlobalString" : "This is a string", - - "gGlobalStructure": { - "general": "general" - } - } - -And other json file ``preprocessor_definitions.json`` with content: - -.. code-block:: - - //***************************************************************************** - // Author: ROBFW-AIO Team - // - // This file defines all common global parameters and will be included to all - // test config files - //***************************************************************************** - { - "gPreprolIntParam" : 1, - - "gPreproFloatParam" : 1.332, - // The parameter for feature ABC - "gPreproString" : "This is a string", - - "gPreproStructure": { - "general": "general" - } - } - -Then we can import these 2 files above to the json file ``config.json`` with content: - -.. code-block:: - - //***************************************************************************** - // Author: ROBFW-AIO Team - // - // This file defines all common global parameters and will be included to all - // test config files - //***************************************************************************** - { - "Project": "G3g", - "WelcomeString": "Hello... ROBFW is running now!", - // Version control information. - "version": { - "majorversion": "0", - "minorversion": "1", - "patchversion": "1" - }, - "params": { - // Global parameters - "global": { - "[import]": "/params_global.json" - } - }, - "preprocessor": { - "definitions": { - // FEATURE switches - "[import]": "/preprocessor_definitions.json" - } - }, - "TargetName" : "gen3flex@dlt" - } - -The ``config.json`` file is handled by JsonPreprocessor package, then return the dictionary object for a program like below: - -.. code-block:: - - { - "Project": "G3g", - "WelcomeString": "Hello... ROBFW is running now!", - "version": { - "majorversion": "0", - "minorversion": "1", - "patchversion": "1" - }, - "params": { - "global": { - "gGlobalIntParam" : 1, - "gGlobalFloatParam" : 1.332, - "gGlobalString" : "This is a string", - "gGlobalStructure": { - "general": "general" - } - } - }, - "preprocessor": { - "definitions": { - "gPreprolIntParam" : 1, - "gPreproFloatParam" : 1.332, - "gPreproString" : "This is a string", - "gPreproStructure": { - "general": "general" - } - } - }, - "TargetName" : "gen3flex@dlt" - } - -Overwrite existing and add new parameters -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This package also provides user ability to overwrite or update as well as add new -parameters. User can update parameters which are already declared and add new parameters -or new element into existing parameters. The below example will show the way to do -these features. - -In case we have many different variants, and each variant requires a different value -assigned to the parameter. This feature could help us update new value for existing -parameters, it also supports to add new parameters to existing configuation object. - -**Example:** - -Suppose we have the json file ``params_global.json`` with the content: - -.. code-block:: - - { - "gGlobalIntParam" : 1, - - "gGlobalFloatParam" : 1.332, // This parameter is used to configure for .... - - "gGlobalString" : "This is a string", - - "gGlobalStructure": { - "general": "general" - } - } - -Then we import ``params_global.json`` to json file ``config.json`` with content: - -.. code-block:: - - { - "Project": "G3g", - "WelcomeString": "Hello... ROBFW is running now!", - // Version control information. - "version": { - "majorversion": "0", - "minorversion": "1", - "patchversion": "1" - }, - "params": { - // Global parameters - "global": { - "[import]": "/params_global.json" - } - }, - "TargetName" : "gen3flex@dlt", - // Overwrite parameters - "${params}['global']['gGlobalFloatParam']": 9.999, - "${version}['patchversion']": "2", - "${params}['global']['gGlobalString']": "This is the new value for the already existing parameter.", - // Add new parameters - "${newParam}": { - "abc": 9, - "xyz": "new param" - }, - "${params}['global']['gGlobalStructure']['newGlobalParam']": 123 - } - -The ``config.json`` file is handled by JsonPreprocessor package, then return the dictionary object for a program like below: - -.. code-block:: - - { - "Project": "G3g", - "WelcomeString": "Hello... ROBFW is running now!", - "version": { - "majorversion": "0", - "minorversion": "1", - "patchversion": "2" - }, - "params": { - "global": { - "gGlobalIntParam" : 1, - "gGlobalFloatParam" : 9.999, - "gGlobalString" : "This is the new value for the already existing parameter.", - "gGlobalStructure": { - "general": "general", - "newGlobalParam": 123 - } - } - }, - "TargetName": "gen3flex@dlt", - "newParam": { - "abc": 9, - "xyz": "new param" - } - } - -Nested parameters -~~~~~~~~~~~~~~~~~ - -With JsonPreprocessor package, user can also use nested parameters as example below: - -**Example:** - -Suppose we have the json file ``config.json`` with the content: - -.. code-block:: - - { - "Project": "G3g", - "WelcomeString": "Hello... ROBFW is running now!", - // Version control information. - "version": { - "majorversion": "0", - "minorversion": "1", - "patchversion": "1" - }, - "params": { - // Global parameters - "global": { - "gGlobalIntParam" : 1, - "gGlobalFloatParam" : 1.332, // This parameter is used to configure for .... - "gGlobalString" : "This is a string", - "gGlobalStructure": { - "general": "general" - } - } - }, - "preprocessor": { - "definitions": { - "gPreprolIntParam" : 1, - "gPreproFloatParam" : 9.664, - "ABC": "checkABC", - "gPreproString" : "This is a string", - "gPreproStructure": { - "general": "general" - } - } - }, - "TargetName" : "gen3flex@dlt", - // Nested parameter - "${params}['global'][${preprocessor}['definitions']['ABC']]": true, - "${params}['global']['gGlobalFloatParam']": "${preprocessor}['definitions']['gPreproFloatParam']" - } - -The ``config.json`` file is handled by JsonPreprocessor package, then return the dictionary object for a program like below: - -.. code-block:: - - { - "Project": "G3g", - "WelcomeString": "Hello... ROBFW is running now!", - "version": { - "majorversion": "0", - "minorversion": "1", - "patchversion": "1" - }, - "params": { - "global": { - "gGlobalIntParam" : 1, - "gGlobalFloatParam" : 9.664, - "gGlobalString" : "This is a string", - "gGlobalStructure": { - "general": "general" - }, - "checkABC": true - } - }, - "preprocessor": { - "definitions": { - "gPreprolIntParam" : 1, - "gPreproFloatParam" : 9.664, - "ABC": "checkABC", - "gPreproString" : "This is a string", - "gPreproStructure": { - "general": "general" - } - } - }, - "TargetName" : "gen3flex@dlt" - } - -Feedback --------- - -To give us a feedback, you can send an email to `Thomas Pollerspöck `_ or -`RBVH-ECM-Automation_Test_Framework-Associates `_ - -In case you want to report a bug or request any interesting feature, please don't hesitate to raise a ticket on -`our Jira `_ - -References ----------- - -For more information please refer to our `Bosch Connect Community `_ - diff --git a/doc/conf.py b/doc/conf.py deleted file mode 100644 index 958d6ab7..00000000 --- a/doc/conf.py +++ /dev/null @@ -1,96 +0,0 @@ -# Copyright 2020-2022 Robert Bosch GmbH -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# Configuration file for the Sphinx documentation builder. -# -# This file only contains a selection of the most common options. For a full -# list see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -# -- Path setup -------------------------------------------------------------- - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -import os -import sys - -sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "./../JsonPreprocessor"))) - -# print("(debug) sys.path:\n" + '\n'.join(sys.path)) - -# -- Project information ----------------------------------------------------- - -project = 'The Json Preprocessor' -copyright = '2021, Pollerspoeck Thomas (XC-CI1/ECA3)' -author = 'Pollerspoeck Thomas (XC-CI1/ECA3)' - - -# -- General configuration --------------------------------------------------- - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.viewcode', - 'sphinx.ext.todo', -] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# -- Options for TEX/PDF output ------------------------------------------------- - -# Redefinition of text boxes (using LaTeX package 'tcolorbox' instead of the Sphinx internal 'sphinxlightbox' and 'sphinxheavybox') -latex_additional_files = ["latex_addons/sphinxlatexadmonitions.sty"] -# The original installation version of this file can be found here: -# \Lib\site-packages\sphinx\texinputs\sphinxlatexadmonitions.sty -# The latex_addons folder contains this file with the same name! -# Reason: Because of too much dependencies and adaptions the complete file has to be exchanged! - -latex_documents = [('index', 'Json-Preprocessor.tex', project, author, 'manual', False)] - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = 'en' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] - - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = 'alabaster' - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -# html_static_path = ['_static'] # (currently not used) - - -# -- Extension configuration ------------------------------------------------- - -# -- Options for todo extension ---------------------------------------------- - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = True \ No newline at end of file diff --git a/doc/images/python3-jsonpreprocessor.png b/doc/images/python3-jsonpreprocessor.png deleted file mode 100644 index a691ae94541b94c469758043854d009da82f795f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101520 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

cpfLscmVai=8->W&I*A|uN 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 -% the noticetype is the name of the markdown directive). -% -% Markdown example to enable the text box 'boxattention': -% .. attention:: Be aware of .. -% -% The original installation version of this file can be found here: -% \Lib\site-packages\sphinx\texinputs\sphinxlatexadmonitions.sty -% -% The exchange of this file happens in file conf.py, section 'latex_additional_files'. -% -% -------------------------------------------------------------------------------------------------------------- -% -% Dependencies (they do not need to be defined at time of loading): -% - of course the various colour and dimension options handled via sphinx.sty -% - \sphinxstrong (for text boxes) -% - dimension register \spx@image@maxheight from sphinxlatexgraphics.sty -% - \savenotes/\spewnotes from sphinxpackagefootnote (for sphinxheavybox) - -% -------------------------------------------------------------------------------------------------------------- - -\usepackage[breakable,skins]{tcolorbox} -\tcbuselibrary{skins} -\tcbuselibrary{breakable} - -\usepackage{wasysym} % to enable certain symbols in text mode - -% -------------------------------------------------------------------------------------------------------------- -% definition of text boxes for every text box markdown directive -% -------------------------------------------------------------------------------------------------------------- - -\newtcolorbox{boxnote_template}[1][]{ - enhanced, - before skip=2mm, - after skip=3mm, - boxrule=2pt, - left=12mm, - right=2mm, - top=1mm, - bottom=1mm, - colback=yellow!10, - colframe=yellow!80!white, - underlay={% - \path[fill=yellow!80!white,draw=none] (interior.south west) rectangle node[white]{\Huge\bfseries \UParrow} ([xshift=10mm]interior.north west); - }, - , #1} - -\newenvironment{boxnote}[1] -{\begin{boxnote_template} -{\color{yellow!95!black} \sphinxstrong{#1}} -\vspace{5pt} -\\ -}{\end{boxnote_template}} - -% -------------------------------------------------------------------------------------------------------------- - -\newtcolorbox{boxhint_template}[1][]{ - enhanced, - before skip=2mm, - after skip=3mm, - boxrule=2pt, - left=12mm, - right=2mm, - top=1mm, - bottom=1mm, - colback=green!10, - colframe=green!80!white, - underlay={% - \path[fill=green!80!white,draw=none] (interior.south west) rectangle node[white]{\Huge\bfseries \checked} ([xshift=10mm]interior.north west); - }, - , #1} - -\newenvironment{boxhint}[1] -{\begin{boxhint_template} -{\color{green!80!white} \sphinxstrong{#1}} -\vspace{5pt} -\\ -}{\end{boxhint_template}} - -% -------------------------------------------------------------------------------------------------------------- - -\newtcolorbox{boxtip_template}[1][]{ - enhanced, - before skip=2mm, - after skip=3mm, - boxrule=2pt, - left=12mm, - right=2mm, - top=1mm, - bottom=1mm, - colback=blue!10, - colframe=blue!70!white, - underlay={% - \path[fill=blue!70!white,draw=none] (interior.south west) rectangle node[white]{\Huge\bfseries \smiley} ([xshift=10mm]interior.north west); - }, - , #1} - -\newenvironment{boxtip}[1] -{\begin{boxtip_template} -{\color{blue!70!white} \sphinxstrong{#1}} -\vspace{5pt} -\\ -}{\end{boxtip_template}} - -% -------------------------------------------------------------------------------------------------------------- - -\newtcolorbox{boxattention_template}[1][]{ - enhanced, - before skip=2mm, - after skip=3mm, - boxrule=2pt, - left=12mm, - right=2mm, - top=1mm, - bottom=1mm, - colback=orange!10, - colframe=orange!80!white, - underlay={% - \path[fill=orange!80!white,draw=none] (interior.south west) rectangle node[white]{\Huge\bfseries !} ([xshift=10mm]interior.north west); - }, - , #1} - -\newenvironment{boxattention}[1] -{\begin{boxattention_template} -{\color{orange!80!white} \sphinxstrong{#1}} -\vspace{5pt} -\\ -}{\end{boxattention_template}} - -% -------------------------------------------------------------------------------------------------------------- - -\newtcolorbox{boxcaution_template}[1][]{ - enhanced, - before skip=2mm, - after skip=3mm, - boxrule=2pt, - left=12mm, - right=2mm, - top=1mm, - bottom=1mm, - colback=orange!10, - colframe=orange!80!white, - underlay={% - \path[fill=orange!80!white,draw=none] (interior.south west) rectangle node[white]{\Huge\bfseries !} ([xshift=10mm]interior.north west); - }, - , #1} - -\newenvironment{boxcaution}[1] -{\begin{boxcaution_template} -{\color{orange!80!white} \sphinxstrong{#1}} -\vspace{5pt} -\\ -}{\end{boxcaution_template}} - -% -------------------------------------------------------------------------------------------------------------- - -\newtcolorbox{boximportant_template}[1][]{ - enhanced, - before skip=2mm, - after skip=3mm, - boxrule=2pt, - left=12mm, - right=2mm, - top=1mm, - bottom=1mm, - colback=orange!30, - colframe=orange!90!white, - underlay={% - \path[fill=orange!90!white,draw=none] (interior.south west) rectangle node[white]{\Huge\bfseries !} ([xshift=10mm]interior.north west); - }, - , #1} - -\newenvironment{boximportant}[1] -{\begin{boximportant_template} -{\color{orange!90!white} \sphinxstrong{#1}} -\vspace{5pt} -\\ -}{\end{boximportant_template}} - -% -------------------------------------------------------------------------------------------------------------- - -\newtcolorbox{boxdanger_template}[1][]{ - enhanced, - before skip=2mm, - after skip=3mm, - boxrule=2pt, - left=12mm, - right=2mm, - top=1mm, - bottom=1mm, - colback=red!10, - colframe=red!70!white, - underlay={% - \path[fill=red!70!white,draw=none] (interior.south west) rectangle node[white]{\Huge\bfseries \frownie} ([xshift=10mm]interior.north west); - }, - , #1} - -\newenvironment{boxdanger}[1] -{\begin{boxdanger_template} -{\color{red} \sphinxstrong{#1}} -\vspace{5pt} -\\ -}{\end{boxdanger_template}} - -% -------------------------------------------------------------------------------------------------------------- - -\newtcolorbox{boxwarning_template}[1][]{ - enhanced, - before skip=2mm, - after skip=3mm, - boxrule=2pt, - left=12mm, - right=2mm, - top=1mm, - bottom=1mm, - colback=red!10, - colframe=red!70!white, - underlay={% - \path[fill=red!70!white,draw=none] (interior.south west) rectangle node[white]{\Huge\bfseries \frownie} ([xshift=10mm]interior.north west); - }, - , #1} - -\newenvironment{boxwarning}[1] -{\begin{boxwarning_template} -{\color{red} \sphinxstrong{#1}} -\vspace{5pt} -\\ -}{\end{boxwarning_template}} - -% -------------------------------------------------------------------------------------------------------------- - -\newtcolorbox{boxerror_template}[1][]{ - enhanced, - before skip=2mm, - after skip=3mm, - boxrule=2pt, - left=12mm, - right=2mm, - top=1mm, - bottom=1mm, - colback=red!30, - colframe=red!90!white, - underlay={% - \path[fill=red!90!white,draw=none] (interior.south west) rectangle node[white]{\Huge\bfseries \lightning} ([xshift=10mm]interior.north west); - }, - , #1} - -\newenvironment{boxerror}[1] -{\begin{boxerror_template} -{\color{red} \sphinxstrong{#1}} -\vspace{5pt} -\\ -}{\end{boxerror_template}} - -% -------------------------------------------------------------------------------------------------------------- -% the main dispatch for all types of notices -% -------------------------------------------------------------------------------------------------------------- -\newenvironment{sphinxadmonition}[2]{% #1=type, #2=heading - % can't use #1 directly in definition of end part - \def\spx@noticetype {#1}% - % start specific environment, passing the heading as argument - \begin{box#1}{#2}} - % workaround some LaTeX "feature" of \end command - {\edef\spx@temp{\noexpand\end{box\spx@noticetype}}\spx@temp} - -% -------------------------------------------------------------------------------------------------------------- - -\endinput diff --git a/packagedoc/additional_docs/Description.rst b/packagedoc/additional_docs/Description.rst index c61474a5..b4713920 100644 --- a/packagedoc/additional_docs/Description.rst +++ b/packagedoc/additional_docs/Description.rst @@ -15,26 +15,31 @@ How to install -------------- -Firstly, clone `python-jsonpreprocessor `_ -repository to your machine. +**JsonPreprocessor** can be installed in two different ways. -Then open the folder in which you have cloned the repository python-jsonpreprocessor, following the commands -below to build or install this package: +1. Installation via PyPi (recommended for users) -.. code:: + .. code:: - setup.py build will build the package underneath 'build/' - setup.py install will install the package + pip install JsonPreprocessor -After the build processes is completed, the package is located in 'build/', and the generated package -documentation is located in **/JsonPreprocessor**. + `JsonPreprocessor in PyPi `_ -We can use ``--help`` to discover the options for ``build`` command, example: +2. Installation via GitHub (recommended for developers) -.. code:: + Clone the **JsonPreprocessor** repository to your machine. + + .. code:: + + git clone https://github.com/test-fullautomation/python-jsonpreprocessor.git + + `JsonPreprocessor in GitHub `_ + + Use the following command to install **JsonPreprocessor**: + + .. code:: - setup.py build will build the package underneath 'build/' - setup.py install will install the package + setup.py install Features --------

iR`m6aIVS<+ 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 Q&=;z1K0MbOaK4? delta 74036 zcmZ^K1yo$iwk?gjySoQy9D=*My99R&7HHfF5TtRJpus)3J0Vzbw;;itPjc>g@7#O; z>oI!tu3f%+*IKjYn)P)EGkg#;pdOHx17HJB?*Xu&IC(h}P0<-ZIZIMR?nEKMq&K4+K1-(>t0L;2Cv6vr>hxWmuCL*RkUm~Fr;Y8Q#(-Q(fU ztx>eo3Gk`^i^H=8=+6IrW9E|}l?k>qHGUqZi)j9bw-1*v(oDCPLOt}Fl&v*EOA+Rg z)thWA1#xx4mbYvyVN{5l3_A~9&>Qe{eQ=G#=|)ZHsp~*4Q{EzI1O$Ik1Zkvf@}M+z zucEg0H|ZUp%SF?vBWM_|zA;GZsL&~5q_M*13Ha+z5=1&>f(km`zeJZE)z!L((F=8< z|D3|c*zEmaSZ`>&Izbbi!;gMZTU8%AzA;-R=uEacmanW;n5K@gHX*z0bZF}`JF7W! zSPZkKG0<|-+Ij^`Y^L=lQWTb2!oX9~xT(pl&6)}}qseWm(z7zdp>Fwh0Xtc0APFI( zFoHG`$+u-X8B`Ox)mmfJTfb(_LH^6au!>wPHKEyK4UyHYj=^=yVXL@lK>e#*qM~Jo zL5A>Ze80KJJCcXWp(m{|GxK`K)4}ah0uC%)U83oXe7(4zyR^$bZR2H{ds-~Z*X;uV zFrraz;gTX}X4+jTZ$3AK0}BJQE;I7o3I_5XJSJv%^+88gC)M$o*!CY^GA=szu-^4e z+K}K;f5#|Ral{vWFD{yHfm-VHDT|T1C`OOOFdg%;1wRg6a+LyG2|J&3OzEZ#mdiPx zVF0So@`E})Ihxk^6lo>_M4>T2j%QJmX+?|wh{y4nfWtIdY25k{Ic^1YP%4pXu=l?3 z2#z=(ZXd*=$;OMdBlf}nU_SpYVcX zfl&bF-s_n?vr^E?Dw*gf|8Wdy5nlJ#qbKt|E6tO#rP}_yNf|U9J;n=+I!)4( zvO1_Pat?kyA+IPe;(l)b%76y=(`g=(3Pmt^MOh_;JAOT{q9}RnL7VO(cf<)>M9Sma# zKOQJ&nmju)LtpB8rhQq^ZN5(2KXvVDn^Tx!Ofe zzCi}!g`gv(LJmu`vK@{hc)I6vB|5d}Zju%M@j$l;&<))LcRJGA9$st>l!!nGM7ykcH7#oZHKQDve|d?n&76 zq0}29mF;;i!071kvu?a`g__!+d-~i->=Qio!O&)F1#9iOfAqo48zor21og93O^L;2 zcC_>GZR`XU$8SXpxD%|I0fJG^l=HfvmJCL^;k>s#nQVp7wCz|@L$=HmPzUr)9dM|7 z5pL)7>j4b=x=$7!$P<1G@cYCRlB86K2sZ`zFhFwgjb}wEo0+R)79Q}agu#@Z94xq* zLjO6p8golePhH_oyvB-M7gDIRQxg)Ayudu$#VOL&B%JMq;^S?LvhWZy1*^8kee2NG z=aA*i?^h7p=@Op^guI7r3K;}8$DQ2iuMCr0ph`^hopFF%HCu422OBSalm7AVZ&c(~d z!p#E)Tmn47sW|`?SP61{AdnAiS_fbRN0b22UV8xpb^r`u`4Rxe?*#hi*Ti!P0R3MH zMmmny{+-Nh5d{PgS^uj3dqCu@I=Xt~oE$7%eB>N_+$>z+#m@jr0wCXiW%BZ|aB}g0 z={^If@c%#ATs$ls++gKW0M-Am@}FEjaMo*OlK-y!nhRtncl5BgHv~Ht1MtDE0{{iE z(H;O9?70V^gJtI?2eNa4^S%O@z+UwLWMoza3r8z=YjSoV9}w(P24Dc`t+*{UV}Ndq zyMJNL)|fz&i?Gie#ISl)wS?0)%pUZv2u@+r1Emv${1?D49Y`jk3E0QHRx~qdyA+Ut z{U=Vs)m@I5Uiz$O{sIrC9`Emzq>RKchYOoV+T*bjynt2`&}=oo{IA!Zw+^=s?=5S# zGaq7@Q&h1ZK%E_az89d^`%mE@mK5f^nC?&dA3XgUB3e4{Z^o~VH|J-St>(+?)+XsA zkOdAUs#7B(e2$(LCp%$RVN?9iAt@7wd^tmWm7#$Mn1HRGHo=E^T{emFKpdJ#^q&xK z<-{=IqxA|*qiKp1ZnZNMjT}V-Wp0m^7Q0)2oNBhLe|I86IR~ASAi;*gx6_zQNYz-} zP}l|HbGvrR993>~KR&eTF^66XmvXTI)f?`=j@ntssxPZHyssJg+1JVlLa=T=KCB-v z$4o2oXw|MPBg#*6eQB&kvO&vv`Z~gxU4-7UP3+aGIt>0Ha9#&(->@88LJHPt87?*UaA>whHeADC+n#r zGf9dyTw}lzVPl_|eM`Q7{va8_>B_DkL~Ps3MV|d(SiYerij4C5p~)Uw{GPfaBtiJTM6?Vg^(ps!p8Dc~k&=qgiiJD?C6$Hdm1*m_bT zy8Gx-Toku;^2lj$c?FGm`4S3(3LhTCz5=zSMLtD{b}536DsR4j8;=9I&flg7jnbQt z;$b9E&fO$s<6&2&!WRRa71FesSZB0na>V&s!?p_SbmWxicjg$uVA^;#VOEAn1MH`r zBoG@&FDog4P0klWeuO;M$m6)GY>hbuQ^-;1@$5u+wETwb=bl{ALyJb>J{_LIq-(=W zLLtGs7NrNDdet;R#e1qZh;OHUeO7NIb&5V@>Ay3r;vjN|IO;Y(X!Qo+Glx=U53#GsiK-${S>eawM=owekZsBaeX(~`t3`a zoBOFZf|j6vuPOkszXwZIjI(K&=_8%XOO!cvWa2Z5C-I?12z8WLFXOv}P}4OktTfCM z=mj^#G>j>AV2ZafQ9tW40)!5Gnj7OnMqFw_2!|)qlgGdm2CuLS^adA$SK*h9xg;S>3_SOC5> zJ)T(~{&4@8xSqS4HzRIH`ev_e~6*cO_?iq0+C}d zt;8*Ry1i8hXW>xNIO+|TM@Ep0EM*G57B)Q!{?kGl4^C1#IueIo=lOxK!@F*nVRIE~ zKKB~l_cg1hc`=(BVAWU$Q%#is(ER)TR^j~9XMvS(VyoBV4n7hO9U^sDX>#MKuj5Nw|2&{r3t~>TpjueqsPBg1Rx4gxTi0&Ie%Np z-X89^(#QUW*+M@geT-A!vTJBMn&?4rz{c`SJ43u~Nff9>o>8!x5y(crdI?Jc>+}41 z5jWi#^PBRKz_G7w?;D1EO;BmrLJ%cwJc{hGjHLkT4Pu$<#~;G2p`Qw(4b+R76om&G zwAk%qVjh6YPS@*{SOWv*v|fg5h0sLB8NlF&DnZTxh3;~=uMSgnxvHhg$*~QK6CaOM zCM8z18;w753|0GiEP1{s#J<^|5XxOBy5Gvn*{C|jC(TP|Qt}qb?*)x6cFe`GLc>Zr zLN^J`Y$tW>N|_{OSan*`7_8VEkM-?DMhd<&GfIy5HRW)GlSSR~5}T4TRmlWAwpNwx zHrQNxU#|mE3-fUD=F?sA5W`!&&6k=29DgUzuVb4h^8{vzJp489z3X~Ivo2(^E$)3p z-`3}xX8F3S&2=`|YP^8ZLR>!~!Lb=Fn*<-Jb=G}+1$_Nj)a+if;bQHF7DW3{44ibk z*;mRq`I(! z$n?5p*Ul9A?9s16`@pZ=P72j(7PGMlef8-f>y8XYr3?<}i+V+JDU6N3yaiHKfX*}B z2Fha2tNe}EvE$sQUDth^0C$6^12uKo=Rvh)1Lg2Ld%S^)ANbjQy7 z8{N@^`|Dl--D~1Ex?|*E{|^wy&ih|DjSI-a!NCb;ss~WM`Tt~da}6!7W!+iY5Gz0tKYsJ&`I%)TgMW{zfwMry1Ro!6e&fM- zk|lgk`w3vqT=-d7MJ`-82jmaB+Hk$ym~jF<0k}fcyfg&bd4-Sca8X~H`Cpbh3H*O% zq4|Pt;6*kAu+cTB@?_ZbuB)7!*}|mBpkfMDyTyfE2;eI)xFJvQy7yL31%EaS4AC>1 zw7V#lbazN=Px_VTbJK_0LUV2RJUwyYY_SL*x(|FH+xL` z!aloVj$V6Z@oTGf!LdW$Nv}Xg%T=rix2EYFo#`@JJi7k@o3C%oY|fRI;8JTnO_x3K z*xZmlHj#uWs9j~#wbUr68{ca74Sv!u1pQICNi@S}uJ?d2%};89fIxc0N$y2v*(ag4 z`^%Hf$?nB)<&!(t|-)u1}MdSVaSj&TUu{o>H>eWH`hI?y4c=FSm9txZ~uPhwK3fhYUt(B|n zn+|ZBUY&lgw*x~*%Hj4_SwYC{JX=ffxwWKh-iMRg6FY|37;+X_y6PAz(5i?9-9)tH zcyk*>P;?V(Wk?-a1HLo;HqBS?8GA;{rr8baw??*Yd$jwoqDaoa(6oV+<5 z=*jiK?hc-0;t4ZlA~NPuP?TVQ)FXKa>}3{z{jUTxhz*0mk1pRBR}9)}_Hm2L*=mx0 zc2G{GD8Aem95BKtNq%M#*gV`9s-;Ikf72n4E8k_;glz$K-3pu2P3o^sGr|B-L(T!F zSJvZ@m(=o&QiNSaH}YTELYcUYxJ}UWZO&#K*yfyu)WYJ#AW(A&Gy-6TZ)JpS%S3lI z;0vI|$An4r(FY{TA{A>ybiXw;VN6w)Ah}=}$1`GsGxK#*_dFaH?89>(s+^TWEQEfm zQ}t-0Yq-mP|EaL(YmGJpkJY$#vhKUdiZ*(pamKoAjbG_}@G&}C#!fgqT5+i#_A2!i zAzRcLT&AcEC=`jxLCz08of6)uSoKNAiFVSZj&e)&Q(Q3EXcS^o#DPvP5iiRix+`=D+(RQZfYApp&g&= z=}Z8NN52BY7JO-qwpP~V{c8~gd2$@>>{ibtvz25z|0}GtH)zPbVSb%H;-u`_acTQQ zg~t|$jEzF+(_nF&0%Cmvc2~RULoRber>ad{# zlh$@4&gFvXQW37kYm?G0Tem|fjV_`lYQ$cd7HIeMjPx{W-?#Ir4csi44;=QCs;zs* zJYU*5hnKZ!b_pq#n6z8>@@JL(oN@+^-nlqs?0fwrT>$bhKUeRqeT^E_?0S+zwU9VI2S60n`{M405@8l!#ACqt?Dz5~|# zaMh5*IGS*NOnme_3q|YxfC%OrxsyE03Mh%SXiW@bD<)dB1~X|XMHh#= za12Xy*a8l&&`iqhHznmfWB7hf<6Qwe6+2*@Fv_YUWWgXK3DM;Qk( zK<+$i{zNs!j?U+^!`<71ghO^*s5ab*}6Z^SXrq|gfzliH_@ALz|nH!2xF>FZngpZxcrDgkwjHw20{-_K=jFSgRMsl#Lwjp)5=3XVuV>Xgy3{>&al7UU4Tct zmSc~?NRp%WW%ZV6-w}m2gsJu)I$aIo~D75SIjzAxB zwa-KmGlL#=^C@p#Wh1DFw8cm z<8Ar@-kwvlxQyZh&E5gR<3`^4>3u!;|mJmPj+vipsT1<8Zi#gZIcw)GPRgj< zAw9yrMipuhaZ{Fm8jH7HsnIP*OBYSu#QN*qDcrZdVK^})-$C!DiA=jWe_n>z61t3U z)CX3|isNQbR5th{GhLZsc%AR?59Q(v1@wGOBDyu|xLQCS4#x<(jty_=AlFQl`EDzKkMQizcYym;@ok0yw$zeJ-%k2>n$E!_|nuF#s^|4#FtBq60w20B&9yx zj{?r_RAf@9>h0#a{5G5|^qR-aeAF#E_f{E5%D9ps)QPQfKQsCJJP%y-?A$Zuy3Yy9 z2SGP1{FVDH*Dgz$KWpgk%~V7EoFh2kr^Pd25Ru@!r*h&M1&8%IfKYqLrueeF zc`kNGno#}30B-vCsZ$Z3>rfTs*7uVkB^cI`;fhb4DXh+Fgw2{?MtcI}8d<>KFc-y>h&ab}ImGhiF?k(T8DS)(Lj^av<3R#gW z0xT?*0S~*5tBR6I3s~J9%u&a4CvXoZTgRV4GUr(5D)x81eI0(tL3JN$7E5SjmJDXC zy~ZTyCk_WfKBQHij8~HCIuo%x8~1vo4`x_xMSR~I_0y{C?P?XJ)@M1c!Fp5yt#X|$ zytB)3)<|phX%*&l59edvOk&CnV?ubxE@w`!Gs*N+vy#vgxw#$rmM>V}SwTt_$v5K$ zRG!2wBKD{Q=SklC2=#)RJe4wX5CFYIwx7x3ATrUE4=A+j zCnu+)6e~PNjtPpup{f7SDvPP7ZT|VXvi#$&boz4KmCUPi&EGgXz<5{P$i1|mi!#~- zB}TpNvce|f?b}?qJ1iP`2A_A! zoX*A5m@@Kl&1UDjECja==1!)CHTp3D_UXOeq8MPS#xjav#$5^3;T+?BZtz60)E?UW zJ~3^r`2H>7W=m0RdHl{xg%~UuJ3BuVq%+iEv=R|`{z-&bI?3jhox2k)Oi&>x)eAFzW5Y;p`>p$7f|B>&iybN&t* z{f#Mp2W>e1umX%=yLJH5|6&rDzv3g#djRa;yLL>#pZz&A9_K%5{|_Po^1KQT=s~l3 zioYSr*9YzDY|_Fscv#%EG$pI$?>33zTR$c)*KfOI>MJx-3}hP*n)o7qsHELaGBB5LXudMfqb}m?z6>PFAMp7nW7hOatOa zk1q62mK8w|;)RyFFW2kmQI=32F1ZUNbh89~x|bBx#6Kr{2~SL*`3vV3%_ixfU=9+^ zFS7X_PA|Hx=>dsi3*uz~eR|IC+gygB^9b4F(^aZ!brTHVs^?gl)xWW{&<75n2Y~Z^xd#yf2~4>FRx%8 zzN0?Rhr-7NADYS>re>fr9S`35E8ARO=1!9vwBg{V6zfVxl6i#q?5REx^&Mw{r_{Kd z%1;A`UbPn>W83RCMR1(POjt=GR#(0kp(#jya!7`mek}B{S2F8gsnyb zg5`96_9>Xy$}O`M!&I&iqTn*@8p;5c;-mPksRw8~C`^31l)(rdNk~lfXq8HGSJ{wi zjCTv=X7OEInfMAG4iH3=F&Y?WSJnp9#8A$vhbp%&8OFq+5js5COot$@fkm zzM(N{62VtxpIPuMKds@0C)ZfhaK!#}cE?8kaHBFtYE>YK;eYSPjN5OYtX8mwYQ+MR(a)Q{tgIxzkmS>2h<8Ouyl8nXJ*sk>{=P^-N^n*jSvYV&}=Y;9F*L~zeqqpySo+IST)#;?6Y91 zZjLBkZrd4S+Jm(N2Dm@?N4WsW6zLEocTC&*RViFGjEnl(U}izs2DB>76RMhCq-d}k z1INcK80nV)afIYlduJ$^sz=g{Kr4*?mbZ!lU*2R1>$cp=S-EWl(NQc65TD0A*(TfT z6gU(1tL1b)l6XJ6dVG=&?9-Hr&Pg~qI^;G)eqM9S|4uCLwj!nEUKYZ#V%Cwma)WnM zr@>H!Qls;}5fBS1$re4t5v|+#Im4Gg1)u1!PSrr28I@Hsfr6`4387!;L5~6Ol`i`h zqs&4q9!@Zmt2L}yBSJ438f7X7cv!IPt=Z$0{a){&m|FeWs6KFvnjEwatQRgQE9?>* zIuk)I?eb$&Z7zt>N$AcmL+v`vcdt${g`X+)aaC4|Wpf9?z+wscd}#!%-x4YZO|1_N zntM_aC+}a2c(NVtnNkmG-mur136Ti9ce}^i+)9(J#IbIa76|&Ey_uUSF$~-EtYbK2 z&+-T6C|j}iZ1s;@ldgWQy2^le7B-5Z?PU}CiaIaaF%%r&2K9aU^jgQtY~zPDl`@PLqaesqjU88@62NLkWrkiJC`Eq2X!$VW=G97dl6$j5LAmS9hM{y#-Gs)(dIj|bsz7@&sly3u1}^R{AH7Gs zkJ^mo{c#AdhYnkL3z$>EeeV|hBr4CU(;X6qCD1@-U1jO80I^;+wGd*<8bU$d*NGwr zlbzWFsv*#6)un0DjwLii#8M-gf`#A5Poqgpr^~lDSGyQgt)l=k)AoMk=3ut8S+o!OtjXKmjTBD zzNoh>T4ZlT+&*H;Fi`GC6JkU%einO+6Ci?Pv#KjoAc6MI6sS_aYjqd~HCGy0HtO`J^xsr;#z1JX4DUi{ru7 zagHjD3ZRUKV~@|ex#%Kj_=y~amJ}ID_xYCN#Iq{V6yn|44(%gQZ`s{fY^uv71Maht)8bzk6(9oUkZMoz=v|sFN z53P)MDlD@zpHDJ$L{`YBr&AQ^Wn$hefjF1>?}PA*Qb;wTHfqEEKhZgNI1noE2;bfsSw$GhX5ujG-&iMRB)s=tC~ zAk7v>bS0O+539a-&{-*aey)mqi7{PN8kZWFdmPm{dqYUWDw{e*Ku_&ZBCWjzBos|1Sjcn{r@=thZ;-(DxL zRuYR>dPL7Ok0e=4ytBWdR_l9zLxP?prc$qvX1x`A3%Q5t0>=?-$KfiEf7fvH{`*_M zFDNeGZKmFF(x|EIMBs?v^b+xGm%W@c@!%EIjdrWRPs8!!6PiDCX8QSf-ffs&ZrsEL zQ}BXN1L7Ld)^ffQ=uDIOy=pKyn@O{7CZxW0`VdnPZ0N&RYY-^WMz79tQSsdFXR?)L zQGoEE@FalpugXawx*Q+SrOp9Y!9+mMLxZ`$JgKky-EtG7V}ToTgvLk2Ov1~hHEjbm z%K-Qf_7F1J38kJ_-Yin}3y5!ikdtNN+m(U_WSPA9bjMQ4AGfbeJ`)_}oF!`eS50@t zyB%r_uMV$xaop(^b0&a&k~05()dJg5;6dbTJG5B~UuNxapYebPbgRRf4-U70`Q|c!iELaUzC&wzUFc z5xMc+A}?(qRMh3vg~Y3yfhfnuk#R)Su_*nVM|mL$Z%?&hD$qH3{T1SJ;f&e{0^jyf zDM_`rsEB;0CdOI3#aR}ABYktPfsz_vD=Pzo{c*dX4U2{>0WH>jztNpdvPH2@Bz2Oi zNdHLDUwCnO4`rr1w!nk}p}s%L!t5PrHPu8!W$>;Wy0-=uUwu+{k$p6}5Ql!%h^NRT z)S`>?ok_dJXRQ1?)x-8IE6+RIPnGkMri-343}rhTY1Kit)SMp+Gwk{GC%EfoYg-s~ zq#IJ;jtP;Cc0VfM6UJehQ;LT8s0W-j4C6DHhz~@l^t&)n1>#Xye9zoZ>fv$&X~@d- zz^7xX)tgfT?1yD=G)aeLJXz(W%;*|p;A4ktI;2+H{hCHa;>JG>;6@SsEUccaFP>p0 z=<+B-QtwFtZW+@1xd#RDvs)(h*HeA!i{YUOwKlX;6A9BPtOBs z6txVKS|(OB`t*z!pJ9KO$rn)tmAlii)DJkMGbz|u1aXZ1qFj1IartTK2XSULES&Hc ztI;Lr*1Po3#Qa(do{fARqea@$`DrcthiPG+GgVaHE^p2vQ>$4M>GkFP7217S+p6bx zJt2b0!fhS4=i|<{&`ziNMZR9&ewdSrZJQQ3!8_g?kJ0w`UvaNW-}z~sftr>?6DijF zAnO{0wrM!lL1d#L0ck3MdtObDl%<<0sq7!gDzbB@Eb6l$wM<>RzhQQtZ;pzy zNE8znxX$yZL>EWaOfdG@kntD5U(ITAS_s)|IdPX{Geq#dvARtu$lazias#W_hNwWOg<&Ak+}P^C*zQO^{mEF*LeD@k!-xE5$*(Nvc-TQV9P!ni zeyh_~@=LjS9!#`_d63D7oxNd0zEoszWqA+n#4OUe*<)qCX;Xp^ff+ zCsymyp;r*#WcJfg*(!EZ)oiu^jQv8Q^k-?r6@+$p-}51aMMWCG8X`hM5QY zqGko%ZT%eAp<2;BN!#ab*_w;K+&F}9oC!qg#?HTK`d$TV`jS;@rDEHSXMD@gvdw|y ze%A?qB{M7Zx~LvzUl-NWhe>M(OqjWhZ;ijR8{ZX1`4rmbbVYwkScsIGH6r`+<3ZUy zUZUZq7&(<1R3-=}^t2O@9m{11CK_zS;ec`foQiQSuX_A)(~0I3?8-UeR5vdD1>B@@ zQkkcR@wii!;T%_)iThE9dhQ^~agA5E8OiKhk#=n3VAzWl*2mgjzWnD?d(mc-g!U5p zdnFOPqZa2Si9>wI7o>!v)$9My-XEOr{CCuW>#t4zKXss-eE)~@<@(QXKNlPL*CgP- zwVYgk#HIiAz1(apug#i%eifj;{{D&V|Bhae{hM3;FHgz?ehp>t;r{lnf4la7@dn(l z5`=COXa-Q0#<1%T5%jM|OuM{gwPB0kWnwr?H)nWyx~*VHvr-5-k)+?~dLwd%2-hJ*C2W{pV!^F&)|-N6VN@y#=w0fV zn3`94@;RG7aetg~PEW+!0lsG2y<8BPUf|a0)-#CuLu9z9FseTsvYcAqA?7ls1%A3i z@E%^&?m8i*Ts_Br1M)JZ7W2!rDO2Xnp91|$gmV=od9Pn2QIi3#4|cW%vy)Yvt8#sQS3 z*h--H+ARpOsmUHc)f+D&GP(J2U2NflgRxK!EcU6FiZwg^!z*D}bQAp! zQoK5{)o8!@wK74Tk32x}+q$IV6|)0jJPCvZ-o1^3h#4K-Px``sDwN5Xx;+_Qd+gD> z-X;+YOze|IiQ(G#&XMgZ^_H*l3$tT|)}|P!pu&0r#}|r*NER`jc2ZZJ_8sc+n+YcV zp2Vgk5B}w#nGn4t34LtE4j4FP)d)~`3+*xsHZd7b2H~$1e~iR1Yua^4sj6r3ZuxnM zCOeXpux`(K>w&zPTNDx;jC((RRK&if`tN-@7c4_&I*z%LV`@FIAke_1UrlwbT)ZTR zUEgWW`_lu#h_=7p$MAOt4vYExR*R^#GAwZq)W-8}DmvVyISmcq7XNxoRx#MR=Fpvx z#K$T=H{Fi1=M-}=ws47fvIbtedpXBQq_Jz^6?~Pw(S``~s$qN2Vn%e6LGv4w7IkPN z3P=Q!8_XY$8=dyNfh_;Crof0707OVGu2(9J68jGd{I>ue7w7-Alz9H}PXA`oxVZk( z*9@<`@?~6qkaB+D4TeHs1`+q!Op5Jr++i3iLz}$c2=?q}{;of%W~MQ4s$&r5x;kOsPht=BU<^2=dAUlcfzSWntR1z`~U% z!Xjs=`*g2q0&UoClE7i%<=IU#SzrinJwR)#W>EX}L#4rkIBRq6A5ZM(Y9tw<^p>kx zYYsvhCk9r^8wdv80BArV(AYSYqV5pag;F!y=ZLd9LRZ*9(MC_Ds7g5I5HZY?O^1|s zpVnzvgXKnDO70R;>0s->qdx!*D$d0syp>uCRbSq9!$mR)=N(qVh^fC!Wie}CY<5t# zqc#{dVUiz{BPvV7k3HKU29mL}rHH`!44Gi{2G8ob)YDu%p}Web239(vmn|%?VTl z=4&u#t9ajxmu?MAehVM~B}qo(uLj@jdYJJBk&i#(qPnA2M8~1lPx78gnl8O*#^HV* z4GM>KOfV!@$ekZ{)E!#l`9)5Zd*ktJj7Ol(Pg-?uTltkY8=NtH8uQIYNZ*1)F1&ni z+?)O@ZgNE^{w9D?@T)r+u)*MpLPrw69HE9RQHK_A4>xAmbm*!Dg0Ad~pykHXcH+yq zivFNFCdrod@qEYCs4M?R%$K9Znj*jO!i%9{y=WEX%>1MlOn-F{Yg;QSH3{qMDU6Ei ztX(d$I^hA80abRK%C&(ff8(6D<5o`_`+H}!FFJVjQk{u;b|i9xvSf`0_jbQBVc$$V zfR5iEsl@4G0eVs6i4)rF*R~yPRzG*ws2AzFZyA2muhaf?i-h-OYW}ZdCcNywjS@ER zpO^mMY$7k%_;+yOUkl_PMv3>I@qyp3GcUO2_|@Xz-M<&BLG*E=>uRK0LjafJPkQWYxvtz|26|a-oF>qYt(`p$O8OF4j-808G!$4 zx454Hl<0pO4t*{*HuBdm7~}bsF<5wANKN6-fFyw0zosPVXzujR#?gu#$oDS-L)_Zb zRmIiG{Pipi-(O;mf6R{WZ+oiG31oRiQvcgOA1C;u0yKScG9)hcKj{tA*MYva#GWh) zN!YLm=>YpFK~kZzCw z_NF`}$WuuGM^l38YZlgTtFQJCl_fhHC-}7lb`zC49Sd@| zU~}*K$?p&H#QF&WbP%*B!U^Uw!s`uacxV*#$BEU4w{PzzUbI*A)%z<-jt@?n9t@#y z(#l{HQ;QP$RDK|APxK9pjiAM=s9BlARM)z))z#Kgsj1rhXnhOuLM2uB4Ysv)kw5VE zg)QD0CcP!t;*%xl#N;gv9lFSBFQ97xV6wGqwY6bo0aIO9d;S!cm&hb6@@;Hp4l}n8 zIo=Zzu!3Gnotf!p;85wX+|BuN0iWBD3swE=*Dto`V^nlE=++;4seur3mM7dI(rg8x zX;31)!#%kBCl|&P)-VpsD_M8CI_>T4spG^esaXbxaBsyf&b;{UX5>kg$7I3QC`W@ z6@Vk)YY#EkDfA*l5I8vc4PkrzV(Ibp!eaXS_gS?WtJ{)IkjLhx(kg^7t&$c5)>}NL zfa5P9iY)cPu1KBSG5I zCcB5WyTR~6@7OjWZ)*ZQr!n`RZqT80QbmgF{9Q==MM49$ct_a2xmQt`B~Cn-2_(& zbv^GEoOr<+S+I4={G5)9J1R_`ih27MvYBul1ay8W^85wiwBUs2Orh0DvCwshb_@P? z?J4rHGk1>+8FY{(VDJJD$6fOb6{OyHX9&@}$SpL%Eiy%hYm#9t7qB^E-k+lS8{Cdldw}1n^nj?I_!9mb`x)!^_o z*#Rhrn2y)Z>WrE9NeD^FnJSY+VEH)$Ev5MpiLdLDg;WWoIF*yIu+T;FP>^H4e*O5d z`w9=z=XqL~rMiXa_RTL4>zig<9yku33}LZ=#0N!)4u9Qc2ZKNmF=exwCu@l?aTieF zIbglm_ZiR~>H7qvFmXB+Cg*LRJhktt>JXU+nZ3+sS!`?|p5#BQIpLgzUJKuzuEC4E z?t&p*ET)IW$iG*y)Njq>0mWF0gJtvh%Am41`Dr_G=9S{$G@3#0TGJ~$^{bl9hN-?f z&EFJSJ4tBE<~%9s5v}(uVb1;_d&*JRoV7yzfdMXYfh|E)?mL8wz=%lYl@+j8?s=%&>rFw)Zt8 zDPP4~ETDkkKqwFB$K&`h@xWfGw%VN+Y+t|({zppTCx>h08>9}R?gCq-cRPoj4(^lEZYOLlK%A^C+A8Z8&wObdi-4X$L zoFT!f50MQP<2tle+l&ib$F!=cCk@2cBAW#)Ouu43>K~JWnA$Y*H9HpXwYvnOvd3ke z<>S`OgGUF3_Q_{f!oN2fQ;iq+3Ih0PD4{4N=8Wtw)wp33j_e-O`byb$POzL>Jpx>H zoCvf96TNdx#(JQiRt=+s(W{SfYikcLdM-sjVr9AP+#CBNezt8_Ir)(-ZR~p1!{+mH zpRIp4`)GFv>X)SGKnYK>nS=Y$u27mC=bcf*X$$GmHE?&c!;H72$vgJRLZ~nbq0L|v zES@Bp>B{a0CqGM-5O(_E=gA#n>STR+{g16?#P37b$_1&k9|^_7`q#p*E>`qNk5{!c zB8be%-rB4gYj{gW#C`ZNy^S#buuw$$*s`QZV<^RZ2vYpDvMNRv#Mh6e=%UO%xU0iS zqL>%{HS%PWj&;D5PnIz~AEyWqYToVqf>U5IoGyV| zBKgVzC90>;tx)&jJX9o8Mf^frDD;$DV(r_{KGMa7G18(O@nlm3D-e=M024pS2t{_f zy$vhx7RX0Ff}8)mpRv|LeN?`}H2E{Pn?HK92fqO78zsQ}aCa1qfHxx&J#)eE4-ICs zE+0dMv6`i;aa=$0SO<)<_Z$^VeXSVC<>>4`=Yk8DKVe5s-G5|zI*xpMcTv%#kWFa) zIf#u46SUSCW(#Bpx3_^+O(216nj@!!dfGEmMF)}S)@!Doy!DEvx}^7t5bTB_tk`H> zNRszZ&_pd2s8ykT)^jJkJO{wlGstR?!$j8FVy`;~h({XhV_YP}N7ZS{L(RSNoa?i1Y zZb6sY-Ph)W7h$^(I~C&?8PVg*QiRo-e!&hZKZZl=he+N!+2 zYQpd>;zoQ4T`ut-7OTk5gLf`zYJ_fP^r|Lt6R@_*gE)4C=(Q%j?}P7RA%*ieMoE3yZ{f<1 zAsgX0XRS(wV=Z)9Q(iq`Q=;WITB@eTFF-1+(a1)#=}6?hl{E%MCzbDyg3-0b6a!*a zty9;fOPjw9TN{qsD&g?qg<;gJz1g~R^r0@?3!8MCv8tcJD?q-?*BEO*_se2l!8~A9 zk?E<)?Ip@+T>`dOKmRn6e52NQV^j9BM+L8S(O1s#OCQdns;D+kLf&#?yKLlmGs!vu zwTY2J+Nx=;qU{3WQmIo|qsGMwyP1%jZDw^GMVlJH5%X;@I{eR;=3 zjEV2D{Yf$@MmZEK07X~B^ zn?Md91(603%Il}T?394s)31q3yKka%@qfl#>?KIS-$@C{1aomNRR?|Rg($ug#b;mX z=#@LTBDdDK^UlmYhZJ5^h3zDdB^yHek~FD_!-s?-ea`|-Noi?XWz6Ig@# z6>KE*<@-Z17&Wm<3`6G5!5;+tHh;>;5kjieIB<@%wFQ>*Iwm6KP*E_dRhU(Bwrv?Z zczG)pN#39KeF(GuEMzFOElMuE{h%QIOEb^>F)hAJJLHoCt%G%SPxh+$Y*ow#S<6xR zLdwFJ;m-5D8K)W>?w9dEKn35fi*`{<$#@YU!OhtIN4}for%Vv4Z+s6tTz^%;VIlt_ zkz$T7zR@T2i*i?_$fEr6_nyjXn4GX=z@iFvvWe|-wxTLBl){hdg zF^E2!thc7fG~Vr890${qh#@;PW6qqhnXdDCFkgExob9cUKU@n7Tz@bI`HnQqP$4?C z*KFl_Lk+X0xxGVQ9LC4cVUzZrI-5UA-2zy@IL5~`dTaaKG_Io0WRn|F_y*#omNV0-9yFSit>xGUv_n6_6ApN~@b0+~A}P|*E- zKG7jW`hgY}X*pW?I)AblQebN z;gB?@dsQSTr>?6y_x#F9MW@4Vb2mdt&7`8RR_~FsjEQwN!hfjQIlVB-9DI?!QO>jL zoMYB`ZG;V;s_>b=795bP6o1AXozUr{m&P#KU@12BDUVjGMTi(lGE__MC6uNwU$@o7 zxr{k7RtDT!niMFRzAyZsL8V!*+@`=2TLaIap1yc$;98XVG^}?sfcZnu1sKp#yG(>! z6m_?(7q0s76Mu118d6It|MdDL`eIJuefI*IY&1<>qcEhtn&>2&+{(5)Rl)viN>;Z) zDIHHgb=Om_%_JxrxfcIek7j<&thY(C?~+E>HE4b-odsk9N`{hG%)>!~r%e$>tUJsd zo6bP2YE&lnQ;=@lTDvf|&otlc1$__1`C+P9Q(y$YW`9i6*z1{FGFI>4^%Y2e3yMCyU8wAC)a~ZNDHF?F)Gyv=5ec45LV`5P z57z>oStm%p>GYiB8!IjdY1`a6%-T&g&61L7#_+agaz2we2AeAAYinc+Pjg!@l``-Ep%N-lq#`RzSv! zzfkCin6eg*XYI8@28Rg$i|0TZK~L02!zl1F?DL!Ss(S|~@x|lHL-Q`=jPa z>7;ka8(R-&Wl~#a1`+S9eyMtM2Fr%!V*7uG(|>tt5LlBTS;Ts)he^&M{*!Cv`sv%R z9a%&2xe5c=Uu-Fp=|3#Elz;J+I}5Y($hV6>UpKn3K%GT4S=0V3^Tt+VM0FQ7sNUtB zNR)9KXbIsbRj1@L;>MzmcyRQorn7CtkMtZlw(GssDUDL>R~I)XRu?yO_( zS2gGO4+ItYL34E7ADXi78;h=3Vg%qc@M(~ZTW|RH-J#`c?L@z0c~{iGm!f5r85Njp z!(LN!dGo1kD9K)vru8D{tw4@ooC_gndEX<%-9b@;Em5~0z%@aTis%x*)bBD|6n`SJ zA2sdECZWO5O;n)D))z$lF;aC*dO1$-UoKkWNi3X7!$m?0ZW(Mvx44slO54=D#f zuXj*7_ZeS->d2xEK`VJ* znl=wLi{$UgSwM(t$Wo^WzQS}QoIwLUK@hx{A=%RJhz$3%Ys)zXuFa~%$b5V{_V_R7 z7_f3I$O^nKU{cu-!PMhc!^qOzM9B7c+ZI*(G3eT5&H_(W=Q-xMWq6ka!Z6%@ZK-{P5vS{Gup zPJu|d0#}Z`Tw3Xkry!HbRD3WkWC%R=QY_MdXKL2PYlK z1|{07SXftx<`RlE)1_&Uo}b;CDTlwq8&BeD(>5A8hur6&?OL*fhJUBLn>p3q(Nn*q zd|0WPv~!_JXR{+?q>yEs6BT^2=W3cBzE*uhCYU098VciKVr>UR^gPnbcFg$h1>!d6 z$6B^3P=v{&q;P;UEWW`E^{BW*UjQ+x*VB_6Nv8i#m%3JLh3=>3`sWoEjR`(D-~iA^f+4R+sn zM-jRVy)W>AmZMF1?XY{xrC3rf*KN@l;BQ0HO&RYixr?ba)f?y4t{215`CO^bKY4!G zKUFx8#rE~8(IIFB*iASDY3lJy^bLVObmb{2_TqZPQGY|mpz$g<;TcPg&&;E#*+m{k z@i0oHLCs|3ThrODajBewUN3?km{T(nLgYN(Z?;#8W}&zk0d}Kb4o5^E3nC8!27-fWqBArLltOQT)TgO5nXnp-Z;)u*^G(& z%%!UgpVhon z?$1gCLqG4`4vK>x?fK+%eSuKQdsh6zfWzmZZELX8yiI);--vPA|Wv z!Gqepsz*`-Pjm!xZnuU)Og+0Ib|jC?Q1LC|Yim0^#wv!;O^R~f0VTI*od$uX9{NX$ zHGjNn#ne~M$&#}}kxYmwn%mR6zWX3)TuW^k#YIMjLmW5kN|~3!ZDW>}GM9!v=#g7U zo9F?w%KLkLl1krD$uf6QWR5!^Mn>l6Bc)|gVLLiO9UIeqrH%;U*QNZC*T5a%_781I z`33*fwl-a~fSD2r*T`YqLCs;Y;Ugp~ynp96X$1*MssREpk>qn73b%6BaXp`qB#9AxyV>{<){oDA*zU9)F6< zsq3x5VcxW~z*|OT>QWj^+pBJ`D8q_C$YAb-}} zA?YE-sKWpoeS7C`FE~184H27`-G6_)yy)$4na1Ku2byGh_r$!1(#r9VqR~xg910JW z5k=Ele9J9|WJsDGdboZo{KP+^ZSweLM0lZ?k6w;70B5ezklb$>8~&U_Yt?t~a>Qd_ zI?D=be5Ek#Ms=%nlujxxf*0-GlU7mIgBM-(g*9g67`Dqi|F)$aMNw>hcQzuI*8n{VY02LSymUpN1-cL4?ciVF=In2|;N!B*u9 zjvXbvVjSnOix(P5?EOOc@rwramd(qFPx4uY>-9J!RYX@f7N@It!B6*S{;*^2U3P3U zgPCH7t}l_;)!j4IFZko~o`1cJ3Z(v!2v-eZQ_0$!adBCQX-}DIp$!J>n}S+By8J}Y z?^f4DEEsO7wrdf7D7UYRYjE*>`1QW09x|pphrDmGKdavQNb|U3W8c`kOlJTdc8#`< zo)Qr41zY*+hz>h4I&m+|7)zPVwW?3gw@9$)12wK|s(_fKoCKjMOMgU203wqe0Fv9+ zaLnNfZTvYhOM#Psej-GH34durr%2;KHEN<-tXziXeLqhB`U7tL^z69QIs5XotSV0r zZVkx~y?vb#raI{n3@N4fC8LaC@sGQoDKQ|7F4?IB)mp#p27ZIGG2S8BJ03s%5>zlm zu{z{uS?ugJ6G{wW`+s2jozw}Q&oyyE%Mau`7Qn4xbS~JadNX(d^8uw5Esd`Ng68)8K0<8>|2*hmR z!#8^QFnSmQEXA`hvP8!77R|$sHc26GLe2%Wpgd6riS%Wvb~)EaMkp_RbwEZzpKq$-;;sqY(@E!A7B4pTHVqy2dT@}nF%JSME+A9-~x z>&95OK;}PtxaM%RdrxNh)k=|Tx%eBi3WxHaCF7Qg?=l4N;7};Hx~>TJdhkR>+gX%> zH#CI0Mt?V*;v~m2NErPIkz>5dzZUry7LUHS&u&vdY$!(6k7^V8rN-t)9Of)zbBTSE zz2%~EOiW=sY4j%jsvmsa^MGq=} zWR^_JSiuKJl>?b<<_O|Fjpi@zggP?2o(FG4vgc-=Zfp)=a4@$DF+HuUCr zNMneGYH~&+fWSz$T#|>XAGp4Ch}=V>j~db-zF4w|jP{OjmwueEiq@r*S-5<~B2_iC zuSPiDL_MXXL5}shL&B0FnlP1mim^HBx_>#x^#BZfz*9XQVRp1u%5W}nG@G6KDJu#| zViHKn_ez>gi@dw4gNghvya-R$Uy z1m7mv8ra7DftQ^}*vL>wLo%QsIE6=237EM@m$qO@0A!(%OpMVk>wpAIm^GSV7Xkv# z<5Fe=glyLC-^Ap$)HI2H3YA-FC8PO6!NT-FB^jtVHa39YV1@2`T<=fM%~VN-kq;lI z-zkFRx1t*GJ?nah%yDmLQ6J_~K{!D66R8lwuo(-sQr``DVU#fOyK#a*rH>@q@=Tz<6BjDSu7u7z+lKFI9YZ zS~K=Yn-I(sVm@w;!I}9pV0@WT4#I6gTgZ$Xd zvjS2vRy?fbxM@74n}3@6;>*69e;OWxc(BE^>>-3UnHP)VNv=R|>|wO5`& z7Ph@9(D9)KYQ@O(3N<>~>R|#?>Q|)6)sxQRE-%Z`fp?>ZgnuW6cXo&iTWiIq$@D5b zNl_Nmyt9HWtMZwX4VwYik4WOETP!Z=jm2}wqzAZ;_9+mdB1S3Sh~Kqc#v&8Y9)05U!aiLE-%VJ?sFf_DsKEs z+!8mq@i9Np=YMev!Iz0;$h4)`^m(;PK-Q*&lk<Cb3JRQ75@$^7uK=4{5@k~Ekp)Y^H3VID_r8T%Bc?7=nl_7~S6(l+LHMPg;l zYIG>W{5B2mJA%-U5_Ze^)JwuSqfroznHNi*2x=pJEq^S`v{sjsAEZJUNhjiJP|8^6 zO$oaXxkEm?Pzx*9nccd4;w16>0@I3^Ui03Gk5A2U$n^bujn@)A3iB*8TZf4WWBg^3 zZ-u-!Nt6G6&=D%>?=m{PiZ2nHg=)CCOYO_1+$VorY+H%k`1~wpb~bQaO59u>KOdy0 zd8puREc~Wf-%?y$Rf)fJW8V=06ZJ0l`+tGOb-TRPQg=2shg9M12H(|N7s5)96lAXO zU>n&6wCtK#S`?40sCZ6vLI%=?fj184Sv%YecIHkKA*&}E(-`@HTEp4{+VqYcf)o56 zl>?(xJ4?+_HPQqr}-J(;GRd-B-FL@kOkB!l?Jp#|go2)pWXp>VIPn z2F9u+3UHPN&7e@mQ(()PZ#$2?_LTIny!+Y@=sFb(;VegxPN6P&rJe?B9j;X{_3DXl z9+S>H4GleWK0i{XAD-@u9CHiLr<(^lck&oluAAd&6F61u0 zO+8t=WT=`T2nUl?vQ1@QSbQ(2j@wBk6PVwU|0Gdq$`jo}rxMA>P|YD-;ZC9vnDgzU=&NlL@qAYo zw8)e)?Mn+J7PSr4PWF18_-W3aDW8U%3wl%|*hwg9 z-Ga*o=AO};oO46!Ak7-5&Ml*LD83=%c6gmoEJzkarzB*Oye#d0_kVfcPu178iKbxx zJkNY(+|e8k&o>mYm$Y()0P?&XD9xaTG9o&;!6R!z*>{#^KkbG!ynD4QM=NJ8CJ$r5 zFoCG+6;2eVJas32vl!-T6fS@+vq{>w5{W26U+=6_Abk zpd!>>vVa_+w@~aH4l&W`eWrH~K@%;<<|eSP%p>L~95#VMP;{*d(axCM20a+7UC#VX zQ!bdJ>qD>9^8`H6nI%h=1mHEv+)+d=xbgLK(gEn=(tY z?piVwtYU!b%v@jzA>#0Ey% ztKI3lmVYGk&O>-@n3ppj{Whgo6&{L3qd_`~VKs!^6HU+D{)2iD_2E2fy6zz?#f(>? z`z3;0%Kl>_whscfFe|1ouJ75Rf}@HAMU_j|r1P*=zH7N;XD?Ev^=a7)@fao%%CL~3 zRP0a!zU_@BQ0@g?O@g8tgDm z=N@zx=qI!~okH~L=0VQ=td?1NTaMF(hiT;7AJ>qaaQkvqjN>jBXgv!H8OgfYzzJ}K8K4%yTseByG|eaRj3<2qtDuh zWq%hkRk3+x2HWkv&U&T1>7wf)7maPEMrXu4)i~v|1?yphKC4CG2c>9etr}71J<|Th1Po`~s{H~5?Y3Rm62$POuM1SHx z#@iaA!P1CBg|vYl zI-0cGbrvD|OFlxg+!HC>NzjkyXYPG!`b+LWa&1iIDOH_T6hqVkf8R=*Eo8T~tU^DO zz9o7ZO>8{+4401@cB+}7RBf`(et!_@Z&LeCA-%CS_6J3l+|o;UE_2jMXbV2xNW2+j z1^m2YRS5@)kOoOpS_l=fP}MKIKJsPCjhuE)Ld*}uK2|zh?s$8hPF0l?RJE|i$n{>l zzj0`WBBgHU`WPdR(Al=4i>)Qym_vrA#Vx4oFRqy}bp1(6z$GN7!W5f8mw&D3HO>^p zxDD<4;P4#7?$s^7pR3vzqCRBEf2Jn>UDq3puPCz;no>LO^y$7J0Xkfmhy>Y>d z>#5XBy_%Iz=-Q1QUF#V)QoCD#wq$PloD(12Dtu(;vRC(oDFJTVys&ZmGcM5yMJM4G z)=+VcACXkm`EVB8-fi53m4E9E5u^otEQV5LeGOhk)k?ghFYfDO5+&~jg3dfC2uh7| zMCu7=$oI(yoC*OO(KveT@@$`R&;|^AsbJ9vYTs->Cld$6M$BB&qej_(smIAxHmG|j z-#YVIhB_UYN043rx6PJeVLf-#i!UITHS zvrkCz>>X4YyBGc=uGJkQdh_AKY;4RbElOA1UER9$H=G%DKUJtJhLc0opKJAt%COS& zH8Rl2fe~fQu_Xl%pPA=|`nK38c)Bd#7u0RbGuNn`V}C#*@8iPsL@ALTCMAN^-ZCj2Pw_K6jAPlKbbg$UKE2stgzT2C z3A-byd>6R3QS4m-aOXRRzUON6> z#{S?oPPC32^z0Vq%MZU^%rDs)!qxgWS?-&vUD$8pdJ@uu5`W%Ss(0)7rM?w|VSxGJ zQYvX{VS6NZWXLSp?Awk$>eyoi|78;>*H2CYX>V!I zEboCT#gSw93MsAAYG~vD40UXt*ApvQQ?ZY@t-l~jXQbAL0`FA}4j7#vrvkHP}chr&Y{ zrB7_H8f>y%wVm}5n8gq-pq5>0c6~P51wMj0?aZJ!3&+lqJ!!TJD~;#^s|7I|EGy{i zQ0OFQ%UF6!StATu>5PqUhxZ;v<@95gSX6Zm_6%_tH@(Y+Lu0ua5A;YR0iX1%1P>0) zI%U5iMt^(dio|0*igx2UqL>%3xOCM~F9j|Hc12BXUhp$3gu6E7`+G>E*l~HDRb9Le zu5@#&<7ahHzJ85)XizuI9g$GLt76)g^MJ6;!auCnD|xkJ-p1l<)l-~;p0rZ(ldhnN zzp^jITXF4rQ;!PT#$K?d?)7`0Taerhk*`gM3dM6F%I9MqqSJG{r%Y+M*ia z{#mdFz7|=Zxx28b=f$K;+li(`5`NOJDT3CG)|x!UAhA!HEbF{}ckbaUQeGvHr(Y&5 z${!sgV5^w^Os{KH^ljO!De^EC_XaNlL?VLA4ggG8&1pQ%>r$D|YebG~6;q6+vj9#e}p+D|#kEB&d z?G;1YRtP3> zH@tAzp%9+CesR?!Htty7^0uu`{0ze%X~t)EQmMZ9_0!jLnxayV0>PB!mJgDIgnyNj zP2>09aA|~mn6JIp%>n*KZ@!EhjGe5L5%gI>FolweoIA&y5HM0^k}yJAkAd_Cy~i0# z4aZkuEFA}~zSc;-=l&&voC$B3x&ghe;R7>1<7qqu8?!>!iWp-Fi z&@`0r>dQNcl=F(0uqO30SKe5ri+_?cetn(ZCs?bEb~0ohvoPwZDhj!zlK>)PM$ za`Unc7vnRwnA6#jU6XZH)K>3eRcje89mX|8`2I~F>Wc%a_jXuJ5JpvJBG(7YHFCzOE_7=Md4wdVWY z0kVFM$bmSFv4E7%yQkhprmRuuspvy9xl7#q{rp9n0m)a&CGqhK;KST^SfkI}bPAoA zOB+CQXK2ecu54|`U)Z}22c!zDJkY|eXOt8vaY^YFu%B+8jC~_VQ0M9n8)#IkqCP6= zS0pjKw2Fw^&lx@Sd);W}rhne!HSKmM9Ql`JNTs7oTrTWiYmZ2i#)o&fcy4)TOw3vH zD0Pj7mg>|ZrvvvR$Ue)tG)*UL)7P41tnmJmZj19V}JD+8F!Pj6_RG`xZfryTYNq#>4J<$cgpHn;9i72YS#SFxbTiC z1U}J<3Db?cc$5;vmL@mIf2mwGIiRDUrmfo2O~TucXLY6aMU#ovxlGeoKm~~(?~}CS zFRmZAy(1$R+Q)Ee-6a})A!iDGAA)Af{XUgIk$b06qBBJ7mUwJJCs#8*f?6eu3*Q>(GMcYX`ixzYu2lphz4cR zfd8SOnxw~(-G4o;c8LmVEYv{0{wa1-iPh=;xy>xWPfjq8UoREHc)^!jt5di}e<&)j zwUT8=aWm;cw--L%X1F18%w#cNcK0566w;@POCiBh@2|`nMw9h=CG3m1?$rC zqj))CraxN~<`4d&t7Qz-QDr%|ESZxM4fw_zfjv)V7Jp;Ma!j8X?Mt`9+RvT#a0kA~ zcJe&QpWm|WcP*D~Ou-S2EfyT)upX*qTIsq_KFqdX;7bKvBtlnsOera796eL;L5gd$ z_y3Zn_0u55ZKqO%1-*VV?wy58_u{?9qU(7W&yI>@RMRsuzD;Qe{BCbfitf4)T05KU z+M9*s8-H$iZ29ojvS=x;x;{l5Ze!AiIA<+|Fmqt_GTe$pJZN2{`K|Huhpdn%b%K8T zP;|tcIPOM!)lR(jjiQadqh#&;p9MW6duW6aQuoU(xEt|Q3h8eH1ds)@7uGwg>PS~T znXKpY5L1KJRN@rU$#nW39l5Ra?I=zt%PEpvX@AQhdm(p!#x6uf^?xEw5%7A?Nxbc( zYg#Kf1#d5E@o~*G&0N9g72dT%Hr+v`2w+7SFWUZFjIM&B(z$}BY! zIn?>Yo<+e@P6-3ea*Wd%)$>DxMP^s179+nZXJXmeX7eV=_86&Vrda*K*SqBpFp@;s z6K!cRWWmDf{v*yU+U*Ua6yN=GW#1-^VXBy`4{?5#ekIht*u&5)OOw9@uv z5=lC}$x3j{rD9-UycH3U@)$=VHf zyWgF5i%UL!`6i7L5*>LLNvJ`G{#OphysGNkmanCEyc9&&?6eUEC}WRV;(>Zj77s&P zeP@zZl9W?d^t*WzK*@Yd9(0j|)PJ+!!hMEL6Q0SEtldzIj_8aUcvOE}D?%CN-r1M- zWkeG_ek&}_?}!gs(1x_IP!?=7aupcA6i+%1$k70fmco*j=m4ZPQLe%TTE7BRs;fE8 zsa(2edxcxSaElLV`+0EPdvs)4HAr8TqV$|(AIAHzq&ZD;x&*fNl|s?$VSnF3i*h-@ zAhnDzSmMa{36!!C5Rvp|Uy576aK33VeNclKGFs#3(qF!)yb=p^o~WK}N#cQjgDoOU zAuvJ9@zXg8@*Qt2DCbG>ryvfCWTqBw@PvKr=z$%f+jn0DZ;Zq7j&x^ZtqhK?J2Ztiu3C@Lg;CxK?peN5-9 z)|hLw56ZTZMdYWLKmO^RjXmun^ARl!n*dHe`gJn_sg(!+M;X(HoHt{;cWF7UY-Bha zU0*4C*CxaTL_?h58`ho^a4Xgvn$Yb{%FK3(K$1usU+>URch)N;X(j8V}rx;Nd8{wUQjeXTAcT~ z3F>?3$8)X+hhX%w9e-W};Fit(jx${=HO5GYS3M&!(P2ZQm4pX*@lnI^Thc4_a&k9~ z)26Vx6CxAq5S`NJY=!l(Q{xH9>?~x~+n(6OjC<`82uxpf>A@A28emS&ke#Ei?+wt% zK+~PHq+YWSKZqnvqM2ysr%KCYR$!ML1Nu_mq^B%b?gMPv<`ZL!PYOEs)kU;>o@wVOxs^vs*>XeF4Br zcr8(mQ~gHz>unIz}d3CpzdB~b-r zTw@_p7@kDERrUkpA}SvFV)BOixd+|yb~>B?t~`6KPpmyozU2_!CawTBRPuw5huJG>lXM+s5I zjzYrDb}*kZX|)>=V002DiBedB^psAK4rfi;83ry>fK^C4o^4uLeBx-m6cnqfaLh4q zwV$o$4f5#1oYkH9Qikmykbjd>+sFBm58vqRc2xtyCWGv)!ZB%v z8QUaNCGwP+BhX>Ja}0$$pU(7IlA&3~+#a*ED zqy&VA3)J^ZX*2(7pW&`6v}2%RVNk-SWAo?w!3n=q9&udMkC6kI`DS+&aH%fc%V?24 z^nb#qb1PfPm@Ansm_zW2n@SmAIVhBq}EO*K zdJ@~%aqmKaLs~k?ISa^D)2rnTJeBu${K5Be?x^p$X6sILjLoU(1q?dD9zA)95TvLo zpdsyELWrOyW#akkwAgJQ8Y|{!Nj?(4dVj~#k^I-u^-^`sP*5cTY@De6F?qD6#krdZ zWp775&X_~xwIvd4AIYwQ=q56(6snO;OSkXFK}S468b8Iws|$;cY#I>8QhQV!NMOo6 zV@|N>i-?7PolKZjrx;gETg#fhZk$a>0>P9lr{`e1*US6SgH*U`EGM7>zd3)^K!3)( zzvz{?Ns+MhV`aXe{6(8exVX4VRiR9z36p-?(f4!Eqt#rxVr6QyB?Ghvr^m|}!J3X1 z%LHE$n`cVD|AXH~R|BSpz049}=rCo9tDg}l-oImL(>bSPoUgSkM6ae_v-dTu>;k3#PejjlaF#u&eC?`Ln#RWc1^H|8-3$(;PTAUeQxu)1Tl zKdY|iVU>n1!Wwyl5nVXFW(g}&gR`f{RJB&*7_y)(0lsE9mkA)sYBv$P&wt(Rx~Je5 zmEt#dl$LYi^P3X){;wUMPMiuTcqA`*5Rxl@6h}b!iAC$acFR1FHT3t=v!>$V?yX_< zDKernH;doq!Guwy&sux2^MdcWX3LY|1xo-shKBgN^;ELa=f1yNd zmqEi~8CgH=pFC9!blOitIy;{-p;SBy)KRnwPJD6^|Mb%8+zs7`6WX7ObL0P5#F>mW73D#kNF)_+9qc)zhf7WKVM z->}2Ezt2akGK;WIl`SkRH{>rOw|ly$4ukHsN-cuWbX5U}^{_5U`^Wz$EEd!0i)PmR z^b}iSMiI|7Q(q93ymsNJ>VssR`V?s^yd_AkyJV?4=zF@p6+-rPJF%P}*H6(cwJ2N0 z>!{ZMNziS^Zs?uTB7bBJ5Mu6*DgXnQf6gug)1`X?tNBL);Q#$3pj(#g99F=|X;h2{c+4$sEZbMM9xVPAqe6NFq;6$<5XyQhSJup=d>&OB)def@g|fx!Q-!nty)?{*r4iyLuwaFn>Jz z<{RR12n~~|>`VTz2?Uuy`JICT`#0fW>md;(t*caOIQUmTI!st!sa2FozWPB2P`BDi zm~6pOEPXN3Jmc-9IVE=%I*Q$aS;oj0C-O^?b64wrvDx)$^l~~u0#s8WW&AJOV4M_Q zJ)Y5|RY!+cb$=07c;y`6)(KHM`h9dK7$#Qv%Rv&nZ9;WHmT1$WxpChQ{j1loduLQ84xwotxL7dScRPc7|?M$V^P=n`ngpe*SH{#h}V0Iwf5z!ymlb@hP z824sXk$)XP%XE+V+B+v4v9Zgzfj`{bI!hJ4!^A}+h;hPP16Sg{5InYl} zDzoh(@%|V&$5F9d_Rv5UNF^#E*M10Gr9C~$>VHUVuvHW7L=_aC4}$o#r|z3JepVA{ zP5TeZpv@OGet(^x224Aw*py2YfzU1tdIudF3T}6HzAj0mV$VAjg*I45 z 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%0AqD@{rD+` zP@|?eF;yUKPG!`dCZ5MeS6sSGl{z_u5hv)v+@pjn?r$2htHouIfsA6f_hSUim;7_4 zo(G^&O`EiIaeoJgg5|J&A)xUF8ro5Gr;qGEdNO^_~<*+#0Dx>8H|?0Qu4Qu@UrR>cOGS{EB=9^O8c{PHYo3zCO^2_`sGBtmB)zPk4vX7r*2i3{zA(a$N+rYGlbVa$stgK*x4tX^Bd8<(Oi8=Ev({EP65m29mb88tl`z}cj zr?e5D3?lTbU^ce|WmW^N^RuG~b#CkP-{6}isaxyYHgX$I0ER-)_Iai0Fp{dP-%Y|u zYqtqo)}oCR${17)(B^dHCy8;`I|Rj;3~uu}pASl_|wiOt3FbGX$eZLU#2g zKUw9LwKz75-J0}`chW*yRihS^8kS&Zxp?4s9ot2O5^)*+p9`i$4RFPzoh052r#5hs zU3a9Q@OA9Q6QE-^=WfZ(w(pJW48puwLIj=SCFCc0=8vXW7!A!pO}8{10I@9pYZ*8$ zjFtplOF;n zX3ywi<(a;q0)n1yAO{AWeoYFBjQU?Q{{O?2nOXjeDU*|d-cqF7OoG7u52j3%E-VW= z{l7Kmf7Mg}VVYUxK*gB;5%&L4nu~owPyV;){Ljq(&uG0Ls3#r>Gw1)z(xt0sfj0eb z(fOal{hwL-Y)~iM^ejKn|A@{+=~Jzs|CXHpujrgkkOhj7UIPmPh04s$%>Dl`XJ%GT zX72xD&dhAw{~r7w%sKYuALhKd0uFO{Z67$gy}b=RK+nada9B4$-Yz=72j=1NvUfcY z)Fl|VDR#K_b=Gpv5IZGBS0rBu?Zv?)6n-O0_u{ryvOJi~O0dW0WK!K0+Y=LSnfixHd zH0%X1Fo1AjVQ&C%S9otgC=zvPWdZSWK>zL{=b-~twq|#R7XEAvzVXii2!PorT7We4 z_3gt1w}FdVg(PKBNs;!76Pv;3pZSX;6XAuHXNOVFF7E`1Ey3t=acD@cFW@ z6MVTPr2ivqo<^kFENGe0xyD)@Ooy)*(1Zfm?2bnIPRs<&1=?zup|2H<;$!H4&UJUc3)my0-N8k1qh^>_rDN=F;bFh67{byfS(;cIgI>}fN5w1 zRF+1v_G4MvLyNppzIS0+K4ba|0wiTU`YqC4?*0+ppLcIJ$vYn*nHzz&eBaDJ4-uK< zW=C#hsegaUJ`GAUGIDwQqZ4yc`^QHoKn%?QW`{tIeS)u_4tV6GQ+*e&>GgEu(+K?^ znjJTO?}`(3fH|OEnxFi!FU9m9faPh%P*iW16BDwgX#}tOY6V?G_T)) zrdf%bO(GZ;K)$7f1_A{}T;EZef=b%8kSe*X1!{C(*$HFEJK=}92{Z`JI=A+>(@?ih zW5Xxm_D52tR^Kj(!cFm8Im~OX=ufsLim9>1`&d(>lQVD(9)2tz($3sFz7t5d)^6J$ zw6pJ1CeVybA@|uEh5(N^0U%ah$q+#RLRvI#Kizlu8RIahVcIL>fjKyn>`(9-@O0CU zI3FF5c_{#iGC=#QFXDy2Y(emhzwA!%ANy>3Z!r8;$J*HJMfpQGLC9~&@rCJI5BwU> zzsmdmfc8!6RX;iX2mO^X-Xro2Ks@GShC%R*(GMv1OxON~?S=gP{%?He-2iagBbE&q zczL(`3B36j{j49q!JV~zQM~rpeDUb-Te1Z*{{SrAcwOyc4qO|!YI6fk$NdD|r1E?X zJt2a*esQ9&ykPxUkNS99z)J4*;XLc-H)n76;q9z@5^+4XfmiK#g_n$a*h&odeqYhtNM>#>E%v)(sL7v$4i(M;u~TbhzkN-f?%V5`DR3-R$PgM|t6P zRI!5M#}r@~Z2OLQdEMaFh09L3EaYiK?N>=yTiW3eFnwHh5lX=;vH&#Klk~HOmAL+_ z#KLl7;)4fww+*DiV85gNZR(M#F>*7n5=tFA(K5NDUy0ma6IKK#M?3f%^d^DqJ5nV) zT|;ac0bf^AR8Ixr(Ly_pFifHyo1~F1XtJn|+Zd0bqia@j>KQqLs_q`=DksjIG8!Y@ z(&mn+O@iPmzN~4Nz5rBxw$1GfZ{7U-I@O|fa${=g+WzF+pRM|8*kUp&OA*nO2PXGGvA!e@brXxsRsj7ey~~tF$`cOjlM~_? z&l8h|bJfoQ{lzi7F0Ym9K!KSBDbT+Sy8$JWSZbCKBQ91W2U1AB;9-uUtvmw zr&BBR$c(;KB}vp*nb~qfj@ltYH>rG-k5;nHndv9^MGHzjZ3Q~O5lnn@r{}wA4%ibM znWtIQ4g-Ws)qt_-0}`YuUkVreqDOhGAaQ>(uh8W<=cm^^J1EKVO81qN=jF~FC9)NL z-IXL|y(QoGsDyNdq}s+3JW5}8y;*TH$n;?a>8A9>t04yU)- z7t@{W*`6Ki`@8s{kp^?QQLJ=UQ8QjJ|Jw0C!>m%VV*v6#kG`YXq={r-%3&@4X$E;v ztckL}G%J7H@N#HRYjWm=jqhHhU6A?~A6m=Kf zO0Qs#K?1Ho9dX4B8h#3QZSjWmhEn!CW$I~{7W_DgR(<1V z)RtVQO5K?#>emXz@R+57=|)|O3@Cm_ZbjBuM}Se6f{vP7u=x@Sc_NJRXu4U5Y zB>?dWYY(ayKYJiNMU(Mu2e(g$moeygmo8i<=09cjs*2-?~Bgsghpv1q^TdYm9{sdK7!zFrg5E?s4JEa*0emMelg((pL)`oIhDO9;^!nSP!GRT>eH+qI$RHeON8WL`!R4f?QUi^*d=)!rma9!EJ$>WIEF z;4j^1H-1Ug-b6~<$Vo%BDS1p#Y@_K1Vb|qdQ0~lSt6T@|*X2K5vjMhG@=~%;bGX*l zX*3EK%#uW8!0Wm*w=KGqKJTRuhHz%K zo2F*RuhlzzU4e(A)1hCgJ!{qt;7$561m9QMU#&h8-Dw-F&Te{H@HW(J0QI63>p+;s z1EKuV^0nj3TXY8xSk#w)c{?&Ck7KO+Yl&%YsH+$6S4d@=thsL5=NzF7+=Fnt-Ca;A#j<~~_OH!9sAi}ie zi@d^im*@fAswiP8=7PR&S8eh=yv!a>zn}8nCIk+mxojU=i!T!?*`P&T80)Sj97?e< zq)5tOKasQf_p0_+0N!T?BhQ+|4YY)8caS@Y^W zkY^$3Z4ec2>SyOGBU!c&f7E=GXIDZWF>pZ8$RVsx#9_vw;Taf}Rw?qj2QB_(TnXlu z***oG*Q+!Y5s58vjo4MCVqg+o5l5k&SI~-@$8!o}t=)`lV`C^o2wnQ| zmeJX46|ouEW7%jv*B=%^8>%q&u_~;UGfLT+ULJM6#Y=_zLeC~?^g6+TjYT71vQ>> z4+QcSqlib62|ZFy+)mu#JRhT_1P$^Pm3#=K@y(JU0ismzKUj_d7mt8{88_qY`6w-z$h2B! z`eEz~0kXGOXXlPbyGi9Q5Tj_wcgV46)>Ljq{q9o&KQpGob6*AxRT9tH#%&K z=zluX%A&DfBY?nIYX%`>%e7-8!Pf^H<~JlUR%4UWYR`R100STQBD&y@Y6lB*U1%aX zU{H$QZazI4sxMynD;3_MCgx$Q+Qr|VBSV;5ErcOV`Ek;&WQB8yh1d$7lkT4QaAbdmW0){na$q=P3@hj57ule%D z;b~d6Dr$yT3=I2K$2+vfCtz}F{jx_Haz+xn;1ec5ceAFRjWHqu*JD(pT&`y1sdCB z{h*AD#-9@3hJl>0stqK07N7J93!$Q`--%JAHg}_OhYv33Wf7iK@J0USq)jeEE7?&3 zvPM!z?cJ=SnX7t~RUKMasOwu23xMs+kahmQCt(F1roNH)ARtEwyAR?Z@|2&a5&FBv zR*zJan#Qz!Es0DeT)6dhS{GdjQdDIs`=e zX#ERFh>nnt4SFNu^axZCN>*Gh{GOqnapGQ{mvKtkk~a^^RWjj&LoVu)0`SC{mxbwkbB1{$zblA0cs|B z2G&J?yrc8*8MLN;DMy$JzR zp}Z0DcCoGm#<6CxRrV-$ogWJYi%8@o?2X6iq%Qy_W$s~%zKgz@1YSG&j>HEgtk>Zo zBZqz(TLfV-RmEAgkJ|QRb0xvL;u)v@aL8MTX3zdLn2htrA18vmRgsJ0=M-7@+4J6( z89G*u4T#zkwif&HH#d@fodj^FWUZH5%(<7ePOmr^XYtaWzA| z>kdZMb)LCcu(ebML;zn)ZR?D152i^V{fy;2K`SVpYDUDjS^y@V(m?C4oQ+_km%YdA z(^|J7dti#iJKA(9LJ4upU1~xP%uJ_%6T}t7AX1kh6eTxK4X59ZCs!c1y=dZx{3 z@_{BoeW*<)bpR-^Lc)>e$Pt1qH~q9uKV7Q5g)@KK&X<}MtSs5X?}H;Kr50-*w(Y3i za(&i7?OTLg(d9`UOIch&5dU+1D5+~Cw6u+NvKg%-2_-Ljpv9MMU*AxEJ0B1lT3ScK zd?SY6`cc4_n*GjCWiU#I2dBK(X5Ik7w@4L&Z~FtsZ@{Ec&<=eKId+5kvGogY?LW?% z!ory7Tx;Z-C@15TxawXTW9B}vw$9?sxR}C|B4WmDK5tIF9c9oSV8 zYx|l11*~t$2jF3d`ytV+i6IGV7v`g~-PZFtT7au_9OFHHi(;&PA09m|lsBC@*kAG& z_mM@Y7QnxQux7LB?ETmCc-2@6U|DXm8Vm_aaW!-;y};XnhpC;*Q2E?mclH*RUM46& z23L!3u0Y&!4i$|-vbH3RU|JtzXV4sl&C1;rt#xxc7JSdk{P( zHp%W7^ARGWIaS3687Vm201S;YV?8RM4GX6|@JE~{)95e8bzW-3&%o3T)P(4#H@x)L8n1H|XgwZsZ6kYZpEqSB?qVk| zF@PDs`5^zTmHO1g@1{8$(YE6v-#qpA!}6e{QVg9fCvBQ^l=IhO>a=Gyf}oE3i@MA_ z>~DCW8qiI}Z`B2p(ps3b>nytR9`a{O1BF6r7vwAS*=;iKpuYq==~rc;qhM+KojO!D z1js3;x06OCdz&;6XyK*{`*|ViP?3kXCje0d@kSNQ_Nh92M2jVAMg9-M8By^_Q}Bfe zxj}xDyT#Pz>1vMZe7lv3-YXMi!;tFNQOnNAME}0HJ|B?3@VE0*&Ye~l6Ya)zD=iPz z$?#=KdXV=1>ce9f`k|wi0;m6W+cNcvb%XzQAwT|^_^h2pH<7Ft;_jt*RdGWcF9KNC zy5S>;dE8OEI99=&(U>dk)FoA+Y5YxSWq*g*_Ug0lkZwpPzYILO^R>l06EG`_t46{t zj;!-dXAHtA>YW@{2iD`(v$iixAF0Hbau%RmW*hRr<+5u*SI4t?&|K@>u?q8D$Xv|R z(0X%K&iEIec@gCfOskNE#!G^a5djF0im1&tSPv1sTl!O=fK8AJ`}<|zEIS_|*cvcGhFEya zQ-QbX8nf>tQ6*4`a69+TBXySrm$-|WmYGqq*EU`5mO%q|g4+y77VlmpSyr$6ctMx5 zS^;J}fesH6a%NsCi(G1)cI(moI#L6O$fS8k%fks{x3AwttQ&3=ZHxz<(ffhX=96 z(a7x>YsA7c5&)9BK02_E_Aor@#xumTf10YbHVsmm0OcfhSFlnuMXM9aEgfmrlDC|1 z0ajIoYUmC&n;$c@FYC5wv<#M+o>!OunHyI2;qcxiMdE;)GZiudYm+)%;uvkeD7mkh z8KaP7H7t$E*-swR zYTceDliNmR7t3SM<>C1JOYVR0BB>^D?Wi zQ_Zn3FQm?Z+(juSct$DA&8i1Z_hNavVc=u+)4p$hO~`Bj!a_cb7c$ByA7+&RKFaMI zZJa*9uhrhqH->!dJwrpRn`93R$z3LU&E5QCvVJv%Yzk1tX~%Tb6&n1GpO0KrXRN2? zL6T<7m`-Zl@HhP8HV$Hc)DI7H&e(7RTq$iqTt;jFH@l&U-i}0_YS*)r@}Uwdl#-n6 zwB}psdCIAKht>uG!j$G+Ilaf6)qAOVZ&>>Rk#`Pi6Z;AJp0^(IXas2tH7J+hkS`;? z?-Oue&J1|(kn)UiDcxJ_JcuaEKa%=GfFit7S{>j}G$+0FESg}h>s_dSQeVm#fhSjS zFTCh#A~hj3zI~f@!6REJBMpgMmi}_ws}OT476qx z24nn+Or<(Z(L3ZV>TH%1NkF%{Yy1o`P__TbGM_~bxKGOYF=c^(}l53DO; zCWv#MqIhR1WPENs^g=2=9lF$A0MCtMXDI-UOG4&%j3YxNK~p={ag55GU8x01N13C* zzrS-))EL__sqZ1MNp-|Om7#hV;Vq|JSP+)28VZ9DY?YT(prQT(Aw=>mz8ka5ts#E2DaCp>zHvZ!>!NG8Q(l@;2HqV@190rz z8yB3N_MVn0=kL>lL{CpSuhY=syHBIo9BSW%lpIN7yeCasI1n0X5giwx;49k%HJkLO z>{6v$v|fffA!y-n?D8Kp9#??WWG2P0m`7>_lL)iu9=Zd|%r@vc)jv)oi1!VhR6(7A zmHErR*zg1Xh=-p?UGa8g7+m$6DQ{3?kZ-GQ2TbRci+DA^OV6Z-uHSM?!`4>YxmlT> zi%@+(B%l>FEXP%Vg@@f2`geab>o=~#-Il^4y z1VmSs$_Nn+r%8RGWyTyZrpTeTf;zReQdNI76U=ml%nw$b>>ImX!4I4z-85a-IgBrVPF8@b3({0BW6+Tw=v{Ri^hvcS2hk zJvKWAy;1nVJIaRnv^3XlrLDLyC%p(Jo$ghW1Uxv|vSf#UEPu_Hi~qznCo9iP5-~!S zYe$O~oL9)IxUj(8Uw}YSjTj%s?QCnsoW>y)Q(WUf-edvtiUC}b5cW~wBDlnuDff4% z!iHX-EialA+Qc7_3~8rZ{_gTNJfagjHi`sR)fTPvz#hI;jFoh4sP>Bv_x%oxaEFUb zM4^R9u5qlfLowqzt*^vmV_wV}yi2{Vkz=@>Etlm~yTo1SL+bVbHo@Y@nbpB&M6Fy} z^BubetRBcM^gJy^n5eG1TPROt0bEy1F=hM}$R1=ZH`QQK z|9JW!Bl)@M{SvuUBVgwGlcI}bUcHCuM>%z<95|+n9;#vE*Ao|+-&x#zuf0iycm+9U znnE$cj*JMHd1Qx5e8Mx7Ki9o(0C9u2@!CD|KKorG;P$zZCHj@Rd|;k6>8_$K(9q|s z=|LV?*U?lUJh`5_7jRm7t3$NjGg$q*VTs|;m`1r7UK6a)kQ_aD4*%!gOhHpJ z0ZkKrS637k_O#AYTqO5}F8=b=un05sUs;wKXM6#m@I|mjP$y~KI68s8d^(81cb>X)u}sf3fYD8ndrG>h=aKUc>S;X-E6cM+3DMnoEh9{iip}=x7cDJ zcj53u)SEO4>wae!6Rw^HYX+Sl9KimfYASRKsd)1yG?GcEiqTFE>{$)5q)m5S$K`Y- zD;NgwE7MjNu5};<>rH{aH`wuZ81YGxPZ1B0tJdVi+Rall@`Z%mbK~I$@MlO8u4Ck@k}DACZE$AJc(bbo^h-FDBZ#%d}lKN z{Qz87fTis`v2Rj?`H!tY^X+@dcb-c|_u8lU&#~bO=1ZVDu|7CgR-zYNp=V~j2S0=( zF=~405rGaW=5dL$xQIYoIQ&sn54k>ei=_YyLr&yY-wgOibD+ONMt1b?KdAGn(HG^p zX3R~LpLYXsv9{%iyv%dm_}CLT*t=+e^OefEST%5ZWE*(_Q(;IetSvdo`>n&bO!96t zt;h36;tr@58C-3k7`@3&ZhGwllI*r|BU=6SiKxc)8g38#b|O)ccySl6?%)O}bBIYB zzBIaq1{H>uqY_9ZizJmvNEVJoXCOwS5vk_gyxTFN?0Y$JJ+e^Cfy z7p2bm+tZX2UI*nEsb|;|9;5vx2%ActJoe80HW_fgCM$NX&nowDW`B8h4mqpmn8j+m zI0NvxP>19eVl$2*SjpP}esI@-c!}T%aSASbayeaP8Olx&1RJ-Xh99lteJVPi{VF8J z(vfye`j$+2bld?Zj2?52na$i#0LmdKtOi=NSIHh6xCd6@P!7#SE{Q1-$^oBxi$0L1Ezcuim(tuu9#4yHQ zjB$+EF*qW{SL*levv5@(NAX}>R#t6bOp{EO;EoIuY~X^r!I~sVEAUGVg%MI1!0V@;O?#3?ul%XP=-{D~ zKwbzuiowqiGgR#LieL#qzbI}n1yC>O@*v}vp_74M%zgja9wz6+L{wG@4G)T$cq6O4*a^p^c+yu$(1en zT}29SYD_KT3okq@9MXtj#i;E<*>_3@@d5938OEsBxW&70`>AtN5#kF=26a3oTfJd_ zls1yxWQ+n;A8|OI0LqujKv?fr@Pi*G%yE{Imc(nZA2I>+01mZwaGQeN9Se)%$qUSi z)!FcM)-fMJ{9S;`Vg)m_xk%QfYraxCC$~5+xRIC>eA^;e_e8Z|qj~)tk6of|aTT{| zh0zc=G1GFLU&;5?iWJSpqP6Yldb%#DA?L5~jwsJTa@;$seA)PC9v&+Y6feD=sTQQF z7Lc%&nWkL<67k-PP(|$-1LsOR?SeW2k4j^3+)0{cFekubEe`ehKp#U$gTXlQbtJFP zH!NZux-b%$amyH-$d^ejNp9E!SS^u%x{~;!Ju#3n5!ZLjb_l`ErrrJa_(o7xZ5ElP z^F7qZG5^Sc$0S7pVq^H=GP^lGi+OByT0!tYj70=_e|HY|kmn7UN4aqQzlIu~NN-}u zDOJ0{oMwPvxL|<$BMO)abXSD0Dll(GkZCgfvzwb$D4w0tNSP-&97XX=stl6g9_24a zgYq}(>Q##k1}0CnTdTsLkxKV3m$Z|OS1ICw+dRmRCoSh3_DPAGZ|Kn!MCDSLFTqsq zA^yuYW|VYfEI4QznU+86WQ8$_m`2rXtO%)`2dRLq1VQ0x>UPug23Lop-{x0r;{Edo}`g3E0 zCeLQ=7g$AkAbn9*1riel)KZ}F#$3^~7`D(mQ8{NOk4*agha?*sx3@TCCK1<+WID}VVG-%GXz1U+l92rU5c4~9K^Y7-jiOr_ZZ1J8AH0YobLR^nD< zDLyFb7!IKgV@~lnioN^x+&sd+0PYP`>H@~UV;GC8a>ph79lfpf7wqj990+Yz&{Cz9 zWIbYiw2Fkn46o17Gts}&>#uvm@zNW2#uL}C6bi4mnF2y4>a2XIO9MAHE98*~Ha5Vn zxS61qbe_i{?~Lt}`$H?4+#eF)95EWP^M+Ex;fqELT{qXI*inR0C}4A=E16!L)-{~D z3lWi?7*4;jb|04BZ@tH>uN^ijEid-ipb8eQg0*r|H5a=G{UtR~_<9>2DXU3!_R*(q z9BT~JuByG&O#Bm+NUrXFioN5Tn>5O3 z$tDTqJ-4InFttwA+MA(7KZz#h-;~>EW7eC8}X9oQwyEyD^I%@C^?~KT5cJmQv5;be_yHEy(^`%v$Ral zuwf@nG(SQp`1vg|4eXGB6L&!;8O zo*Lzg#(VP)+2|_6NH7ZZ5RMQaD^Gp@Uqsyq|TfGbLf)WF~;N-l(qQ3G1DQtZJ(tP5+5kU;25NJ$9Z5o=Vvt- z?F)x~Xrz>O;bqkrL=pT26gwLm9{TIp9s*0Mc)y(vk^6Vim>Kq6J|vJ-KYn3tGPD-` zVl?cJx#})cZE-|+D)I+-yZuVXx3J9}Z@ZtF&|oW3iJV{`rP94?eN@Fo9*)kY+c|*o z0?$=-l&IUN+4`U^bLhWVvkE*0CQF<@bggzMyY3}WA~vrpEpk{h2| zHgqXNbsRe-F4vBpj!A?%$!d1&DK=*9H-W~XrI<4W0$L0sYexjIM{#UF3l!T3wKyCp4R z$I!SeZI_*+xLp!M-goRX+LjIS3&`*ONWi7vn8@J=31fem%vuoaJ-wPVi!@@%x6R7e z$)sJw`fJM@$BhW!@6d<7i$3KWby#nrG;bN%JAdz9%>zngBC1d>>E{U+4i%=ONFz8-{25Q^+sc1p^2G!3#3$E$L)~akt?Zu4!kiY zW{ftuK>sTY3jeN~tFsfw^n2rvnxREOM>94H8iKjoTFf%wHC`rrIpDHirO{mzNi2Si z`}L|pFtJ@68vs{!z5Q2>?lAr#kQolk1G(oA5k7e+&=|6jmnHE;&n)^|WydGqF$vv{ zj7i%}+vbuo_8gwuf~h1-cbisr^uXP=x5=sl0(KeS`DdKir!0d3lCCgI^hAqYK({)RFTHknv4qmUp3Lw(F{r@zfo zyRssAeu9N{Jb`-q=?-V8fbyUqHrl1ebQhAjj9eE`uN*jAVBi?T=yZ!JLDF$OiTh?f zWG(L2%FUMrlC&816;-+)YnSNN+ zyT(hj4b)Y^A7!gfbzjjJ+m8#ZR+E)3@DLRHk`u&e^oI!F zHg;1dR2UBgcu9)P0{$;~x0__^^bu{PZWJA6Yzur!hj}LYRWXsB*nUr06ypb{AOuw$ zuY!&z;f45`f5KSLdd<<*PuQ4;5?W~y??)z}=CB?KJ7jL>gnqxa%;BziiTqyrmj!o@ z>J*$G=jJj){dX%Fx~tlPqb^CI-7e+qpudr*Fa?u@Qef(3Td2N?6P#1Q!RN{z!H+B> zZE~SELH$rV__g5$@`W%Ag0SHSNBNygm%>2SgA><=+S?%!i6DiFI9yFAPgWycy%r)M z@*@Fe6a?fu(-;vlmv+?Z!EE;NKFP2zX>|s&9C#BfdLYHB=EmG?x)oB?lFvRZ%~AXU ztaE=YOz?D^H}G!eB7{~`czoi-G7GJthu4O|U_Qle`YVZF{F6@TT}5rn;6ND_+}IU5 z$r_*cERhvus-(a2sWuz@<=4}P*BcGM-t@S@qTQcq=rN4Tt%u=Ja~tBk^t}N%~;u<@HUT?mdu$ll-cwin8wQFh17x+^PDn%7GFJ)@eiG zzJu0yLsd)8=qs!_rU^mhloauV8ufOUr2DR7Om9YJe3Mv;c@g-9FmkFvv5JFYQ`Fmw!3ibZ!Fgq!b^5aW@mNa)H&VPf= ziw02tT~o%r(z^PunOlKv;eM7a6FYs?BsLACP-e+)<_1}t<>Wd{Lj_xQp`bM1HOWqX@^K|CQ968W-j!Wv?5}A^*^+^F| zzxPWqOSq4?Z=8R4&&f1#{mEv+f_6EO(>yGZ)MLPK9CQ;VG`1G9Okq(K5xL0Ogo;XZ zy3bIL<$Q$tS86Bx9|sxvZ!E%7x&K4fJ+_D0KwAP%V>GsHHMZ5*wrw?hV%xTDqp@u_ zw(WW6ocT7tVSn4#y4TXxnUJ=3q%0DjfMlQn-U{l#TKpiL0mHU*nawVZS{#%%d!xCN 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 diff --git a/README.md b/README.md index e3fbbd92..5770cf9c 100644 --- a/README.md +++ b/README.md @@ -26,19 +26,33 @@ as result a dictionary object of the deserialized data. ## How to install -Firstly, clone **python-jsonpreprocessor** repository to your machine. +**JsonPreprocessor** can be installed in two different ways. -Then go to python-jsonpreprocessor, using the 2 common commands below to -build or install this package: +1. Installation via PyPi (recommended for users) -``` -setup.py build will build the package underneath 'build/' -setup.py install will install the package -``` + ``` + pip install JsonPreprocessor + ``` -After the build processes is completed, the package is located in -\'build/\', and the generated package documentation is located in -\'doc/\_build/\'. + [JsonPreprocessor in + PyPi](https://pypi.org/project/JsonPreprocessor/) + +2. Installation via GitHub (recommended for developers) + + Clone the **JsonPreprocessor** repository to your machine. + + ``` + git clone https://github.com/test-fullautomation/python-jsonpreprocessor.git + ``` + + [JsonPreprocessor in + GitHub](https://github.com/test-fullautomation/python-jsonpreprocessor) + + Use the following command to install **JsonPreprocessor**: + + ``` + setup.py install + ``` ## Package Documentation diff --git a/README.rst b/README.rst index 488d2017..fa6d1919 100644 --- a/README.rst +++ b/README.rst @@ -31,18 +31,31 @@ a dictionary object of the deserialized data. How to install -------------- -Firstly, clone **python-jsonpreprocessor** repository to your machine. +**JsonPreprocessor** can be installed in two different ways. -Then go to python-jsonpreprocessor, using the 2 common commands below to build or install this package: +1. Installation via PyPi (recommended for users) -.. code-block:: + .. code:: - setup.py build will build the package underneath 'build/' - setup.py install will install the package + pip install JsonPreprocessor -After the build processes is completed, the package is located in 'build/', and the generated -package documentation is located in 'doc/_build/'. + `JsonPreprocessor in PyPi `_ +2. Installation via GitHub (recommended for developers) + + Clone the **JsonPreprocessor** repository to your machine. + + .. code:: + + git clone https://github.com/test-fullautomation/python-jsonpreprocessor.git + + `JsonPreprocessor in GitHub `_ + + Use the following command to install **JsonPreprocessor**: + + .. code:: + + setup.py install Package Documentation --------------------- diff --git a/doc/CJsonPreprocessor.rst b/doc/CJsonPreprocessor.rst deleted file mode 100644 index 27a06032..00000000 --- a/doc/CJsonPreprocessor.rst +++ /dev/null @@ -1,32 +0,0 @@ -.. Copyright 2020-2022 Robert Bosch GmbH - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -.. rst-class:: dl-parameters - -.. role:: aspect (emphasis) -.. role:: sep (strong) - - -JsonPreprocessor package -======================== - - -Module contents ---------------- - -.. automodule:: CJsonPreprocessor - :members: - :undoc-members: - :show-inheritance: diff --git a/doc/_build/html/.buildinfo b/doc/_build/html/.buildinfo deleted file mode 100644 index 732a518c..00000000 --- a/doc/_build/html/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1 -# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: c1b9daab68a41d0ab802bb1788587c44 -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/doc/_build/html/CJsonPreprocessor.html b/doc/_build/html/CJsonPreprocessor.html deleted file mode 100644 index 9cbd2dcd..00000000 --- a/doc/_build/html/CJsonPreprocessor.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - - - JsonPreprocessor package — The Json Preprocessor documentation - - - - - - - - - - - - - - - - - - -