python310-doc-3.10.15-150400.4.57.1<>,m,f6np9|Z"]= Jv9콛(tãWvN{Q9f)ms ʃòGK ڛNJۈ'ۣCC!JAOA$Te±.d}N`9]f}G+2e(Q&Ծ~Nh:CI? FCˣZD M4` _>Ac?cd & I $=^i LL |L $L 5DL DL H\LYLoLL$(89l:[BFG8LHhLILXYZ[\ L]PL^D#bKcLsdLeMfMlMuMLv^Hzcc0c4c>cDcHcNcCpython310-doc3.10.15150400.4.57.1Package Documentation for Python 3Tutorial, Global Module Index, Language Reference, Library Reference, Extending and Embedding Reference, Python/C API Reference, Documenting Python, and Macintosh Module Reference in HTML format.f6nh02-armsrv3SUSE Linux Enterprise 15SUSE LLC Python-2.0https://www.suse.com/Unspecifiedhttps://www.python.org/linuxaarch64t?Mc- z6+CCI tAq"{+>U:I A{Y$B; A3m^!W"$5  "g2x* w R [4+ =,JyA!'z(>G zL(|y&1_. >e5]*O  {r00}%[ bg:-aXIk/~||`$@1`0A@)/!l;U!;8; $~6;-#`- )5a*\ &+{:%$=/{8Uf%6d-} BЅ5S ǟb!K \Sj#h 49t1<5c0zw fY~U# {5#H' -7 l!&Es>w # GHmR,g,ZmkH"B L&mK6`<,Swn#+uNTU <0w xq gpJz h* CpT'K5 }J O9: JEU ^K^-5EF=QO )&C#Ayv5  v' [03 i1;o""vF{|d{)+.^]6`  #'X8{a$11{&5 >H,5EfL 8VZ *4JKcI"a;5RG4  'f^T'Tdq +y4A/[=Z@Gcw (7R>֝q*;5e 9 iTamC!+ RM meG`2,\;. \X9"^TGV m mcVbK,9.g6 4%e6c]*fTZZ)A] DLJ.Aq5U?:F_=FscxU}x_r7 M&0c~W l$@{X~^WJC)U:qc_@vO_|0*1L$D3kRnlw@@_w/3FlS h&Y"|B@ZMKYrObU#(~\"6'YsOEnRTlYZ=B)5Qiƒ{"ɚh XTJ0=oUH2d<e8 SFL%D0L$[ksK8+U6{'/.8u$tpK?}(2 m5Rdx.C.5+GnF2@CV"خ~ĿF{[5#??J;'(OXqBTwH:7Dr`H:g-mY\GJ8p7dJVZjYXe/~kAC7~7&6^:G2I`“zHP`b\u\~_5BS4@D0rhqMu?ly?1tzb;R:wSƤ#]5t5tYGt؋f+w@6Z&2cZ;2BH4G S X`X,Vt^Q?.8@tK<8PQBQu LM FZGNL/gD[pVps0wS Q^>C s_NYJ;XbWM{mG{kxE@(}]mBADnnB{! ZTcmhlL=l@Kr"[+z;Bp9CXsO9)JO,B99yj(l,^ǃ"5I3^@JZ Hh irh&#?0ehk-wd]ބ~P;X>T/I {#1nD1"'QXNK:;E!^U9o.7"{VW9b'Քc:h})S_9bC`4PJ%1q f'Z FtB4AA큤AAA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤f6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6ef6e2613e1da696b04e71180c3202cc99dac6f0dfb67f0b0ed9b41ebb28e64970cd3f8895f720f61141fb50434c95589741e918446fa71ef570d653a283b57a4e20b5f75a0cf7096fc8e7ce0df031b4f403e9a554677cad85ec928d81ede2ad6b1f1667ed7b6f1f4e599516465fc9617d3adb40c60087558155e03eaa6aa3303b7a35987a6ee254264b582baaa021a6b3374a5a961aa3155320861ccde74e989c32c9e03c96a6816979d7643add104aaf2e333990622483c4c38845c1e1e6124005670b6daeb77665a0bd536593baf7830c947cb3811119986ed726500defa48a11037818ba791a67f5c08d63289ee2fec6d83e1d8b4f2c435e21202dabf6e814721ee06f52723b9bad40e39994b5f2dc69248b00fece45c385dc564978faef19319bd6aabcfb280555e5915ef4abe76c44a3ef11e65e5c28b75d012ff687f8030d9e0812dac74d45c6290f97c7d6a0415bc73f2c8c016dc9b872ff9a65c27916cf8f9ca92803ad69092eac297677b077823eed2d9a76966e4f5009def52609402d84380fc5c67e3b79e62e3b0b24beedb11fccb1a08e2c5f65c060c57422cdaf178239e8e726e704c04d3a4d1e48cdd96b99342d172e1eb7e64493b6430c494588ee1fc6e043509f379b3405f36d2ea1f6ed3b90aff3161fded688f0f87c2a8b95f47db348ef82ea1481286c12ad68a788305aed2d95e17183a7640526eca45a9d39042918a36fa26b1122c0254b1acdf0999c29efa41b701c3a6becd6cb4c0c896f6537764619d8297b0d47485d388c24bbf8623b95e2cdf44f81bfb223a34fbcf0c14b30da04fe4ad74a33cc37261a817f586a6d17930a411ed4cfa7f68be8a82a4733adbed5385dca316e699a2dc25b7bb22b0741f2285132e05026a8c0dd35e5126e57b634e3dcae5aad00b1fb00b360558784d26548a0177b7ab5ffb49641de1cae1ee5536e97f2d823023a7e141d92b3f33711b0d6bf57a967efdc3d6fdc11decdb5b7893d8032946d74b2308a24a58b5000de00aff80c5b3ec34f6dbc5337ff436bbe3656eb6fc0e3c076bb4b6b4b3eaf2e94a8d4821653223a7cfee467bd488b23208c21fe601bd6b2d4ba6c44d334bb075babbf7f0f751318903b6c5d4382828d64e88644e47e695d717ea8432ec1ef79a17f2d209b11aef4fdbfa4bf570d752f336a9ee7af4a56b8e5b3696b962b69793b274f76439165823c69cf5e04bd5db0b21f178fd8b16f7d999d0da20a00ca8d271cd556cfb1d26dea91aac88b21a9ea9ad785299a282cccc4b9a93cf9b1f028f65b0e90c0c41deea019953beb5528a56a8b0f2e5da3d6f20f47057cc0325273ff152816c202f8a114cd07138ba9abf87cadffa7027ca298ba11ceb6418f3a9abb32ac988c8d342e7c2b3fb2edcc0e6549fdb1ea3414f47ea41c509c75d881e7b70b48c7f8f756212139ccd3356201266373b56846ed89050dd688c78fed84df22dda096e2f45d9a424ff2850f1f559a308d4bb0215d25df449f0adfa6089248cfbd0a2a62e811c8c72bae01b07770961572b4f0880df2752ff107b36be4813a665a58de26fef7e44163565cba8c232839563f463b504a3114265ef774ff6040f5e9d2a8eee7d8ef5e1081f35949e0c3862e6489f446b26641f7976c6f5a5fa6006b010649b19abd2b60bc11abc35f73d9cb449e77f1916046a9cf7c6b403327d5a42692c78f6b8d0f50da71a3b70bf57257d8f280ed71c0a98613a86848632eb18702b24e6bdea9c88f32d337795331d6ebb358ff03ee96bf29abd0943fb8f405185e9248879dba8144a9524f5607f7792dbfe9dfd14f05004c7229a613e3c444800d6d7df9d1c9a64d06275e0c45bfdbca990f04a80626d147cdb82a6af20fedf9586a6b58ec3ed2193cfa6abb69f9787e926a01e336d488abc0af0d96117afe3f28190089b0f8b745c0b9dac5b5702722ad5d17a4c18a0422a599534723d5042ca6ee29f7bc1450cece7b62f49c79d227cbc0e699c82359c92eecc94786318d5ba0504e3b2062a5a0ef0820491f18c53b8334fa5867275e622511852511d08cf283cf728b92205a5befbdccca24e6332e0286cb981bf511d5c856f35a9bc88f4bd6787a6712a2480a80319dd8ec19dbe206aba255beb86d7fca0fea978b20281e9e91740c7298a13730293aae706c2331a4b8601315f7740d05e0871fafe1cf048508396ab4bdf20c7f3063d87edf79394d04c72834841d369fce80e1e23ec0e3901ce91a51a409e4fb8ef3609a7e5c15cddb3d7f3fa42a15ff6e70fa7ebd8dbac361958e8570df60ee998c1e99bb5ee179f2109ddeece8012a5f9f89e4423b1a04734e47cb182405455c0fb38cbd6ef4eb9569fb86a4acaa3a463b3f0b5bb7c94e3514d2d2735f817a7841ae4f04802a4fc70f51de2ecf55bd50cba0a1bc76a9de0fa9255674428207f60b80a41df607504b79639cafa2df339fe12854cd86ced5728e5c7a46533e73bcee9d565b5d75938b43e1c56a5e7df7dc2369dd6a3a4a9849602acb43daadf44a7daec88d4253520e74e4ab21b36d3aa3cba29a6ae72bb8c465302cc41d59a181d10b151dd6a0ea0502e3d2df5958d0b92803c5f033946a4257989a8e444c9e478e639c4d6704b4dcd3a9b7a29fa223d094a5d7c62cc9defa73a8881588ad6c294e63110c59578bfab41b26d8a26d5a531a656c752ad1438f5e3fb859d79eefe3df85b113985e3956dd8aa77766f9eebaab4bd5ccc14b69fd745658f5012cbe28c16572aa3e614d05551872c0f9832ba1761fc5b57e79cfbdf44866a980874f771962ae8f2c43b4e45f2a16ec6b497fdef963a47705a975a198ce8e4658e4df73239d2e2d010099f4e6c40bca7da8e461ecb99863dacf468558967c5873fac7f8ec8ecbcd8b0c35a56d9bbf9d6fefb5832909686866a3db0b381bd4015adbba12dbddf66490fca89a54e0e66dbf33eb8f00f4b7822ae62dbfa23057456ce4c8f1f8994f8741f42c5c0e29273b87acebed01ab15e716e209db721b039c7d1b89ae371672b76b25af79e227d286c9eac24ad3512566bf478021a45880c787c3bfc6058bc9c453ad6ef13f94c588585531cb43291dfb985b69497a033737d475c561dc70afd7811f60808c6ee2b8c4113b8a4f063cdeac3f189e9bec3c01d90df2f32ab6c0b8f3ceff542209e2fac8ef80394a5ada3d3b46e8571407aa37a7edea87bab18fc5aa62ce40da07e45939302b1d5d1e166212dc056fb1a6a24eac112ac62964e340267a780ef20a2eeb82ef21dd4e2cf2d4b0ba927f19d9049cb0d80de953ad06c1cbceb22db7f2faf1d01ae9d059e77166e45456bbff33e797da3c107dcd33782334be442efe421192adb914a604844b35629a9c66163f2819bf5eea64a3e0404d8a7c7e0f91db516b4f281df18e23785bdd8497747bcabcbfda53f3db2a42a1901004fc1dc3b45a5c535cd5ec2bfea1f1830158ab687d1ed8e263a7b83380ae6087500824ab962102a9435aaa5c4bfa290d00667cca63cf5ecab8bb1a0b8c2882f68f124687fad04a6b3fb1744c75629b2fc2346ca61cb56742a5f09bfed0283f56545f15e96c70c2ba956c396bdce78b890f1dca9d9b6640e7722efa557c075d8b91389978d63627776032860190b1eeee81abfd0423d6a794fe6b2dcf191a2b5e350b3562ee8b97f9d7765c579a80b1c16482eea22e81a473caca4f08859093d8e70f4f14463a018e37f84d438627c9d713a63204b2e72781be58f197b2372f86ecd60c6ebe847e932cc7789f42d54c913f0bd1346b136e437132abe93431daec64c921c3ad3d97434c7d99fc67c488086ba22f72f046feae31862a94e62199c218124a2c66b87303c953fa7dcde0472a5ee2b8ba42ad3ba315732db700ec56ff45ab48ded2187c865ef15f4f5d78d32c95b0f45d70d2b52eeed605b09d6d8787e88a79112560c3fbabfe6226cdbbca444f3818da54fdafc296174fc48e1c64a10db7a7d7647b88d1ed78ad2ed7557f0d937a1a25539f868ac9098f35b7dace644e091cd20f65c8db4451535035110005e89085d02653865d0a9eaf53ddb1ae003fe310881b19e066b80a7a1327a9b83af02aa05e98ccf092da852197906756b9847a30acf3a637868b780d467fe121c0f65b4833f1e1f7255acb0c83c848f8eb2041eed07c4d25137a4265ed2ac87c1217e4239c581898e2f4435c8aec4abb642541dec64b14f80fa58e467e696381a5a7f577fe7152b9810ee2e918854fc249aa7bad869f0dbed89289b86bb60e7e281eabf985c88e40a19b12a2ddba81627cd8d5185833bcc4eb25e568b9994d889798e9c69d5a493fc613b8be736c880549e2595e4164fb27829c89becdb72165eb82ded7a75f93c810f9de11c9e5e6634a7f5444dd83da55ccb265bac825abf72ecddccf7e394f284636bd9df494a2b0c07bac886a4c8b0c1ddb85e959ee40fae2c86c1d68a6a722ce7b88ddb291c1f6b451f568ac4d89dcfdb54aa4cc92c355dd9fa8ea2d7ae7a34991c6beca94d69f669c5f77c4fb73e3be9658150bcc19232148db34757a74c1c543845e32c978a73272a32a2d87bda7b7e415e973d00ca9b153cc7fd03f25059cb2ad81b80b03efe2f9eb58162b90eddad2cface23f96e94982a067dacb4cac44042346eb421660c769f7b361ac12fe0f7fe53b602f1018c223b45c0ba2d49fc57b0737c5c69a55c3a1f2e41d7e2077d4aeab74baf2663b3b4926461b2b7a59d55d28f22184380fd8cee5bc52f078ee706c2b91c4ea17ad264aa64d0ff671743da906bebe98c963ce5f612614485c456f8cd07f7b370df873382ffd76dfaba8a597c292ec06bbfeb6ee53d4f90280ca5e38a4dba90e1bd556d09917bf2989fb229d5571b278edba40507771180f4652bb52be305db82e651d3b840a8b4e47941883c38707a4bf672f561d9b8e7db7a27c0868467473700e2f7db4d8553e723421b1fc99e36f6ccafa7276494bd598d454d071ba06d5bcd7a51b5d066e494d671932209a7e4b117577e010bdaf96f4ed50714691e71d86a5394384bb4585c666eb31f732d5c8a90bccf82a5066bc493d050906e0f32e8b7fce08307feb808ca6c417f7ad7103a3aefca572aa23e443a4f8332452d921ee9c373a2d3fc0dcfe2ceb628717d1f8fcbf79c877f327f9408f3dc02957ce2c9c5cdc947ef0a9c923d039fc245a1badd0186db5e074f8745c78ac464f396ab142c5f0756478e01765c0fa958e3254a6916ac4522142fcda38cf98c20a47f2e015238d3ac02bfd5061ec4d9ccfefd176f0434d8614b0ddd9db0da84390a862e4424308a6666f8b3409d82877b3e5a8518ce862a438777b18f47c1f1f02307379ba433cbaed8cf8f190cbb2a8e9a4880227bd4d6acf61382886b874af33d7d04350f935fb4806b2fad09a129d0ec384c6f67c28b1936c31edf0f7b053489269f2f0d0a802727196338fb007f8ce2e7953ee77410e1aef0afc093b34bbe3d002ce7f2354a7b7886226a9e9f21cabf856ab47f21346cc83cb88b845c4d9f94f39d8e502d4eae073da4820a6f89b2a6473cf75d195de125769cc55b8b9c3d0a8cf1653d0aa3538fd4e0738f7eea04e56cc204a8fe1873944f79fdc052aed8e3b1c15c40fe9dfe377e65c072a9303c54a24b4ffa484acec02ad5c258532c370923a3e005ddbe1f37316a09d1a85790e6792602284f76a983665988aee64616a9af8961246f4d12162683da38dcb0760d38f075fc622118ea58ceb996c75e4cb5c920ffb97ca35db25a35029c3ba15da9f1485118daf2955ec3a7752f427115bf7a46bff35b5d016dd051fde89757642d60089830daa751304bc19dd584af9fd422e99f07c7b8b822e7e854acc62153b20759cc9cd709d586f773bc2b18aad04a5e5dd27ffeed90b25bc42add9be781e8c5ce4de2c0ec0cd614b2ad638c9a9eee1a9cf97e2a78ea503ec4eeee2959d867103500051a6db9b1dbf837cf8f473e937253e7cacd3b85d967b86c480b3f9c398e63b53ab5ccb7e11e699759dbc2f2950dec69a56a29c4444f40a9dc55cce326169c327036e629565407e7e24c6d5ebaefedb609444320e226810eb4a5c461288bd7d363ea5e3d248b75f2f06410dfd4c23af78e3675f373c855d67ed089bf33e17bba885cbf5ab1276b0e8ba3499228c28880de4b69c525f19b751471bac6d7658e18c5b54cefbd7f8443d6179035e88a60594fee8c524b450ced7ed92bc6d44eb709a6233364441fd0a651f32e26bb148b303db9706012aa2c2a43aeda6f5b122231a2f7c1b2aeffc0dec279e7b5dbb7e149fc803296e6caa427d465f2c44eeaa8faaea0b31b3c5afdda92b6e26a6b26ca4a7d3d4450b0edf4cea5fdd19e648ecc0d47c17192daa95dd56fcf246cd08272767a349ab70853ced8f47080984efc09dd07c08e7e7b5e6eaddc39a06ed4a29e82a82067aac35f66f0d582ab9e8848e9f69766062b95b2f0d842e9a8f46d7c18bb867de6c422576e3e21d6cce8b4a95bcb999ab24afe82ce5280afc90ddb966bda034c4d942797ad28b2f7dea6da7c9aea515cc951f285da889d6ddf7b55302d4e51de5e14993d55ddafe5fcc0f297fd7e6d81bcf8615eaaed79e5e7fca8fcf55535c1e5b39b8b85c15c64758eb09971d86fb77cd065d05689febc6fb64447221d5e8542f6c12500591d8a01a3c0f6f6600c947f274554542203099f4c53c86f991dad0cceca3b2f91bc98ebc4da9fbc28225aae942a295ca00c573f15ff6fc3eabaa5bb4b4c3ee73c1188a0235bee714adfecfb057caed708b28bec88e1011e75cafbf0d61011f810310b3e7f13aa7acb56a136c56ea6df4103ecdf5650130b35e838f757702cc63a1d7cdf76b6f7f1de42db40672bb50b4255d1571d5fde9d1377f883323f8c12d75ab00ae719e3cb0dc8febc1253a46369d88eaafa6ee85aff6ac4a0cb3938bbb34371226b51a5f1267ccf36d4d443486a72cf68bb7b8a5843f1fe05d794745f5adc402852a57a34aec2e6bb5efbdb7a6aaaa830aeaa6b808e02f3e9cf9531fb91ecd03da0e6294873b5ee8d71e0e957b250dedf389460ffa03a7468341f0b7b9b666d763c7c2c0cc23b98879406f8c05c1989c9ea3771b29ec98c1133100e56ab004b0e31062ffe56bab61682caaf7d4a1a0ed41191603decfd4df734d3f84947366f03f728d23a6cc56c482faf51365baad7f86f583c6f4b7c4dfdec3c2d6099df28f4a33cc4ab114212cac93d6e2cc27eb2f4a2ed51a7533b030bb9c0560b06f45f2dc42b9baa5519514fef17c0bbf7e8cdb46f4d657add5ed600a4fd81ec06d996fa6e0b99f8c3abc4daf506b31095614f1ca1da65f75a034d85c04002d7fb9c885cd8d17c426455010c082152ed141d2d6cd41f812209b19cec7dd2c16553dbc26b0fc249c1c827513e52c12aa3537bc34ec50c826fe8d61fd7dd8fb0552d0292f794e89094fa4ded1c868ee84d98a1a3a177f682a174bae7aee8b2854ac1b83fa3c2a2df576cf63339feee48735902aada30493bb0bc0da5e77963205edbb9ae323c3e32c3c817b8a655a312bf47736d06121e05b74a58c580abd437675c16b4979de5a0f3d1323b64257b84f12fc138882235020d93b34951d9dbf53efae3091f2a78ee7f248443c421afdf4d2af7a431aee2ff2421900cfda4087d22742c196b59342f17520f19e9c42992534f35407bc94e613510f4791ab6dea50156d422cb3b591457283a85932c4c81bb956e910530f01e523eedb5eb67f8a1df4b51bd3692b13f72618466b8c3867c82ba5d6a3d2b8af3bca58fb971e20f260bbc612cf3e734c49623e92297b20f7b014d58912b42aa86ea6c76b6e5be2c392d5a767c1bb7ec3d810e3c872be70d090a6b3f3d84fe13e20fd346a0ed7a2bf58da5b4222797a514e13a917eaf8aa4210c88aa36f67a27aeefbe362075a25c28ba1a017838f3a4afe40e0d4b2319bb85ed2665af2f15d824c675a2bc15f1aade640fb5015d6b1f7efb7c84f5c68e9119e9bc4aacce5be1f3996e0cefd62364d1b8f590e0d4433171a01cc7aa03bfae024dad8050a9d1a0a40a5ba92508e55079f56115859230cd735d181067fbdad70f315bdc7f6060c763c6417a4d7f85217da13418fe8f5bd86b099dbee9f820430edf4a65eab01d7ffabe71bfcfcae688710fa95abef8143d22fa5d6e977380b3735af135f5d2792e4d79cef9d6c7491d8031553081da8a92b4dbfdb3afe5e2d52945a996f6b725cdf9ff2f2c9e7e4e585a4d453591aab8401d868d7881c7b2c00ebef074cf92e1cf808650339969195455cc5f5b45d7eff2b6975a7fabc6ec363dacf4e938ae8d7523e7476332ddba18323d11a53e71a7c9b5110e031ceba31aa153b7161b49d2155ecd3d146866260fbebfad680fc78b18102d7516f4a59f86e41c77b8b3753417a2931b43ec8a578b7cda3d05f9ca6952a6acfa45f05f60b7666301c335283d2d83bb6a8529b80ad1fd28e6801a4ac85ba2d38e682f3519c19c44adfdade4e0faa70cb14357dbd4f37fecd181088a9fb1b947283989f9ca1f1791039303b76035cd6fa0ab1abd8e82f217b2a61008c65e0f416e34fe8dd3d572a8eb4560be02bf02e0bc7f1c2cb2e6db9f1355c389c26eabf81954059ac0b510978596e25e390b4422038a12214f35da1dc78c14518e4f4edaf244c438757e555307d63161fcdba711a70dd394ac4fa4df63bb2a54609bd0c74e894ecf6f62835db74b4a40a1a0108a4fac847036bf928609d36235fabfdd9b8971756af61bf3a136bbe994bd62b6c6c6f2aa9f1d246d9123950f54d5940e3a77d8e9a65720d6f9dcb8c3138c7120abd964a2f1b8d8f792d45d2ff9abc66b7058bc016ad18c8fe62b974866d600740ac7b22ad44fb98b263a951c53881c41792a000c4a910378fcb1daa49a2ab9783cb50ae5da11a703a23253f39e3bb2ef28342b78975d1071af3536df53c3d52965b58342f5b58fff6bc8ee1ea14cc53455abe40092d02ba8574b00884b0b3df1028cfb778e87b32d5c601a0b277cc59f5355597f994f6f0e5b80b255272b996cf9ed80eaa67f7598dfc12133c206e6fb617fd046bbe402bdb91d004222a004480f3dfb9311149d25c357552bf06313b225a40c2a6c77e8debf047cf3c5f06f6ec399989f069d7e2e981bd2ae64c3c57deefe6cff47702d41721799726f83ce406a7833a94ce3db71793ab9a65460d028bb91488a25bad2e54a6f8f6914d1a1ce621bcbeb91e64fe8493d096b833197bca7df0d5cd8cfcbe795d163fece2af1df0ca1d50e75b170a2b9bcc662449c5a22116093df651fae22c8fb00e17df62ab593b89f3726ebda16f703071b99ed87c4e32cc4bf966d8748c9eaaa5fbcdced7c40a5e5a4b69dd970ace0a65d931fb79a38f89309101e4d29e3232a716e1a00c488cba423b4cb9f7e0cec4b6d003ea0b0c16cb2c2bd78dc0e514ac1e5efcf68ae3a48fba13db5a8c3ff06a0d8b8d56a2c29b6c6f5aebf6a7e5e2d2ee3d2aa6ac39658a79ee185ab9118ad1d65bb94a8f919af49e230977077f8c87ebeb7fa29f6fb3e2000e7b0f61104f6e7cf6e1ae6ab1efba43feee1aa9c12ac3fde0fd66bc48ba6cb09a22cd15245d8259b064bf8b8776e5acfbfe1f84dbd0487af481373d5549df4a8237e9268f14b63d2b2c569b5377f87ef37a82694d94a1c4fb2c2e02fd1bbba12a8dc4d226fe1fed40ecbb005f279cc8d7fd4fb1b6b9df0651554c2cc4cbbf43b1e5d5da95718b3d1982b8193cc66944b2ea5fdc4777db6c209b675fb2c54ce8be779bdb74625000b4bc51dd278a4d38337a11a0842e1ccdc1959ed11fe27bfe417f7ab9a1826d18df77ecf42e0e7aa325a44dfe3e625943980a16f163aad7b448f5a6bf9a6240c697f5edae3637739e18b14be9aed90b0272d5e27fc9206dbeb3e406f131e51ed4b5503cc0cbe4d2759a68c2012a00f54a6401d55b7b0a6fc236c8302cc4aab9baaa633a542cc61485ff3b7b922c2c8bf96bbb81efc00e8c8727c190c179c20be0488ad28d437a1b8053e37232e117857e98b08705ad8d0dce3eab55aee644a656f08228c3cf52cb2dab604ca3144c95befab9f10ea4dabddd74ce8da34099043ce6b87f06131f4642876cb789c73561ff6663c4566afe1cd8a1abece5ad31373e36cdfc839efe7bf903da2dace174d49c768be7e8c4b1e1659391676a659da4fe2e9f04f46a6257eed25fc8aa9fe52629385ff941770625f6a39e01da1addbf2dba5c73257b34899f210d7e90a61b52a6a03d15a8452a3c1d6d4f68d70b2d6adf41f63b56f649552114e1a1b4b5b3bfdc0cf5f2ad2f059dc99ea7a8115f6cc108101e3553e873acc54b35449d7cddadb41755bd8af24a53cc5807f19804667248a7596b4593c1aa1e47731e2beaac3bcd3e6dcc102b30f16946ea6d883ea39dab2814ebfc01e82db54538ebdb5c78639d531999ccc432ec5bedcf1a73f982c3e4b9f000f345a19b7d379c4d92f4d218374135392850a469d3c6b081938a89a7fd0824e764fd834f9fa7e8d0cf0191ca1e8707dd47ff31ccb266dcc47208b205521655da1a49116f0161b67a4010150dfc59147d169da8e41052aa15c626b5ce9987d1c3b9f9f22ec670697547da6693420667754d2eaf641fbd9d3062487f710b2c7ec8b61d5f390b3583190e7e612a16ad27a87e390ea4fb8de4023fe6b47c02a9cd2751d765e60935712a2f4a424cc7ddcd360f7df507234b1b335d70710335deb14bd9ffe8257979703641fed1efee134f94934ae76a2dc35d4854eb803ed065c6fcdafafcc98821443f829c2d71e7a8da5d811e34474a9ed2881d8cc4db187c67e65a33bc224aee9b8b6595b311f34090fcb5aacab03ce2204a19d51539320a8e72ca1795e2d008a37cdb754a082f6418e635ddd3363ad4c90b9ff06b3baec291fedec11409aa2fee48e23173cff2ea9651ff93a0797a91331d71f0a60805229426b115265fc6021727e311bad433434e2a18795bceeae91d5877609de7c4ed1dc9fa2ff5aa32759bd25b9e7c2ea962ba8cc42203579b2e91bd2473825ac91a05cac2d09a472568ff9e2d0a97d95c915d343bbcc79c8b784a301d656173b5623d28f6fd8147a0b6a6e5c175eeba5302be2755ba742d29db0b1301fb18ee79e77a26ab701473407defa2e547a070e25f23e24aa3c117dafc10495fccd0d41c4444f5e4582363b904f3c2bd81dca4f3e22b7b767b6f2e5588fb60c1708084788fe114c89687e349a5145f415d80e6a7bf9d1711b68cdaabc615f9078bd4d17c04d04e991aa1d2e5864936dbc06eab0666916dc70347812c310fc62dfcdde67bdfecec086e4e80a56b3bdf8f4659456ac262f0fc2cb52eaab27ce85e5391ea5baf2c16c0ac5442216921fa13d591c48713ff46f1dab6b26b659120365d4eb007ce408c2ebf0a8818ee62a22da8f472c725f159ce5ff97b99ea9bf412f9b325c46ddf6234ea88490c8613b0003f8662fd3d58a8d23a7e2e172f4fe20baf458af5816efb397a20b86ba5aa1cb2ac29290ffeaa34b09b15cea6d688280e6095344a3eba3d4a4df04cc0648f30e6d7af5f57ce7f86b5b07ac13420c45b8a7b36cb1ce8baf5c2e519406cf0e57cc40524979b3515447d4886a0909739213e1439886e3ceb08836d6c2ca36af8e7b0b1d3493df3ddeb7422335744c8b43cdb1eb26dfc54326baf360d5076cd6e5b24274f78bf7dd374943ab46ffbd78ca4f150e4e7e861c9eb0b3c238aaa370ceb534da8b688dff8470889973eddce208d2ea971891a9f2908d7fd078c28351799dbd62985a0f0197829a7c4239658a64c55d43d232f1866b14c44ab99304b526dcb08b837809efac51fc6a60f57de90f17470c26b80de37a18846a95e53e53649f7b4f6042b2b60103468f07c77517f2f627573144fdaa854b2480f0999ecb33c54daf28948a68db6849824b800ffaeb036162741ef1bde8cfba85a94a6eea108de225c87845c342674cd7963e108494c835c30eda17a4b2b245710b9b296e92c2e282e803c1190678597bcdbb8537641dab9ec2a2400df4d31b101d34f71bc9cd19173a240af5a2c64fc09a6360948b90d1b40a7f0aa3d29a541a93ddd3dc52d874338f6f2f56e0ca92021c5e75b1e60ca93228100529f940a7194357e95236d15726af9ba52533c36e7306527a90f7ad2bf2ede7608659f90365c6ecbf30972ac852e5a17efc681270482f8b0fc6da80d1c64491d30524b67ff568c9e0321528db8b160618ed844fe399f3a71dd8bfa9597f9e71b3af426efa410c85449c5df6f8a19a62a89f15e4be77ed82d14194166d2308a88f0ce46981b7a3bfcfcb884cece3f45593df04df56947f9cad91dad82ce628284b499e9379578443990831dc89628bde00b49ddc380da923a7b23063256406961bfbebbf22c18ade7b8ff4e7335434dab4d5f98b4424cbd3dc57f87a45730f85a99b6907c53aec07dab69d1fa403f6f7cc724822ad706facbe11faa3e6d03bbc21919802c5a07558205e562008c09962d3c6330c4a8084ad3b98588fee4614c2c4e032f4f329a81cc80637282b6b97bc92dca605fc10e8a864588717b64a749c084b3ecdf667fcb8890a66e091fdbef5e3fefa7f9ad32292728517284ef95d219b3ba3a3d0100185ec8b512a52f4ed2978cfc64c8df588322230552c8d5051566a4764d4567d8183e2897ae55c8e0bdfd6d681a1fa1ead19675a3c494b3e314f0fd68e8424626eaa1c6497ccc9b4dc4625f879197e223bff800ae443923031ef991c3a15d85aaf4dd5d4859836ddc14624da0ed4d9a3d395482b729eb0e73f8ad08442c96c69096e0e9a744f748b6cd7b6591437b7d94d93b1c363f1a2a328b6ccf684b0140a9a570db861e7c801a56646fbcc82dc0a169217ae885e2a864e68b7d480de832921990f1cb0a3f4f6b79b930c99be56fc0ab99a801f0036a4ba1e8e269a31aa3a569d0894041f07789a80fceb4abb2cf8e6afe320ef264e7fd934acc88ac4753f2e7c942371a064ac4633f84ca7ec8c729318c13b0875f9da6c08a6991f426207235743963f6c3aac53bbb07fffd67ec26a9bc041cc25425ced9a74c9a458dd8344489d9a7c24a773f10b8761887be3b854aa9c5a1b6fb1a1452c3274cbd324788c6c70f8ab50a46f22fde71e5c3c4594e25b26697c5d8609e033f9c831fa913bb3381c47ec12438447de9d4090f145dd72ba9bc959305b12e1ac908e659181de1286d4adf2e8b4e1dff1a28e7543944886a4ce5b1af102571392a22a42c129633005cce9aeac5e40a0e7e61cdc6c030e410b4523ed2dcdd9910fe4277d58e3553d27da2601ace6f174f9f5427f88a50264343b10dbf1e4e68da7c1d9bc00b12800069272060e4790a8ea23cd6d687179d9e5da3c373010e87cbc89b8a65fd65c3ae81eebcce8c08ebcbf4f6607c7fdeb32b09057985c375cc3cef3bbb9b7281706e806ce87c2f6a06733b2fd8afd716ff5c24c8d6578b85ec31ac6fbe367db77f2411d8d66522e765b59f74b1006378cda9ff37421f44c86c72a81684ca302db65198f8676473d750df4777b7cdb5692180c2aad9f27e95f50dfb49f5ee864906c6f165f4bf782b18565406d5ab4e4d9d474848b4b28714d6a034ae2d9fedc38d3a4accf7e59835ecc43bf82fe5595f1503bed705e1cef53899f3005ada95a3f720c3a1e5768538fd7a2d5b09bf7925d91ee0c61dff3c08a8c0ddb563cb621ab2d2e3ea8e3ae4245b2afbff1812167d648aa9335e2bf909e86e8a6df0449f00ae3c64862ce51d93285cc4408a7e52e4d4c54e765f9b34b415cb1f082866879c8a9c67612b764846aed086e1d36fe7726362f8f7f311a1296ef7aceff0e7cee2925e995a92d23c9d1367bc2a1d21bddf35c66b2b933e361ae697a3f7b9c00cbfcbf2323ae28999435e94f21cb32f1b0fc05a125b410e8976ca811a65d41249ae3241c9bec60c499b86ad25a85a0d865d14994ccf8cd0b035b80690603e15e43fd1fb5ab3ecaf7d5b2e913406bd5bb44ad62c53b97f96d5400b06d6d441b0f081815a4224fad4dca97a201abc51b192e215f9140159464fea471f3470c77c246c581f10c71f7800a7fc97be4027c7ba8a628c680ddd783c4b8780cda3a5aafd549ad1667052280b80b03290b80541cfcd195c12609e88161daab161c910aaa99be3120ea2b46f614b9a7aa5b85b1644aa24bcce0dff48ac7058a48201e4e17886108b0cc8503d22916c558e422a54737b55d146591ab37bf90baf5770a263441b83e96149a56bf3d085e268391ed28378332e1b130023e740a34a7b3e826facc57f2f6b7070179324a2f5e94ab7e21963d88d642ba57fc4bf8fb17cde465a83c5d7218a7f1d51232da4dec643ef8a77af83aa0deae50c24275b6106e6933cfee0022295fb8f85c2d6f21f387a928ffba363881773ad1e13dcf0d959c7dd093d85bdaac848e598757b9839f546b4ae3bdeae70d83c9e3692a8486bd3c0f13c6913414205a394f8bad313b30f59b15d67a5666fc2803a29c2c79c9c1fa7063f76e9d09fc9c3cd6489f0e32cb319447cc2025e2b684ddc03a935c728a8ff7fe8fe0b8a074ae8de0dac9fd276f1f588cc0ef5110c47b3c400d2d0beaf7a923c672dd533c4663e6d940557bd445ae0e8c68aa994f44d51b0062491351503e6ece6ac6ed4c01aa098e5b5f3c5f53c5507873bed4f7de1c54323aa0293b2286c2ae4ae17cf35683d2cac2c76113f00b833c0643446a8625d4bfb7460965b01c3c2862df561ed7f28344fef0888752322989f5ef07f74130af78a8d8fa5cb3e2d9046c80eb5f283ed1091adf324f156a31e19e3065ab73a2dde3d22d710fa4c74fbe0add241f97effa08c1f3ff9d5aa6c7e035c8dcb9c07203686ae55195f69a4452b21b1855425f2d5fa32913516757439ace4a23b6046c30a71466e72d6fa378d56b76a57e59651eebfba9a86ed3319fb32d4026abf57a4393c7d042f2aa464ed067bbac494beea7b3287f166ff1318456e42f8cc5bfec68b4557b3c3d69a17f47bd02133a2d7ffbc3092c2b4797e922c2e025d30740951838ae9be01b63d471e5cbb3d994b9381d5fee227c6437fb685d18f23b878fdc41e6af61de276987850b72ee41ff7a8bf895b77f42812c4c5fe4eb1f3d64ecbc7b6857aae51786bfeee2d3613fd536993078a067d81a66d4b6749a353c43e70057597f505cf4ab7602b70294b03b904d9cbe65b89c909f6b08c5259a9a49f4969c0685f66cb4865f6d4a8fd31287537e309a9480682d6f2c5ad274d76d9506dcf152b8a24a5490ffe9d20e8956ef3e5ce644231986968b76d171253a6308e6575e17544cffc3b7f9efc4b72b0f6bb9e94bcf9006a9b8350c3a2cbbac02c186c3544b4f2e1a913499d02c9bafe0eaaab289bed393214268ab204d8ea19118f3ab9b94686da63843bc506cb5db94f59591b2848b150def82cc44c366b02590af35ff8ff5c4da603e91e5b496914dd5eff21cb53269c9bb73d1396d9befc33a9858039f59b79bb4b3bfa4e3ffe8c817e8f8f443faab4f0f5ce687a72f8d7084e058447f78340e8bb525984480759d3baf7491bf82159e7f3d4f3ef76d095b11b438ab129ce46249edfe59d6506bdef8e9043c6700a9d64b9ec04ecfffb2ac7d69d5f8eea2170682478a7bd63a75f2a9222689ec761cf13fac24199ba6523bb36f1fedce238080e84181d6ec3cbeb1734f821acee8561d4283d1163e1baab314a1a723ed28bfa6bc9b0d30738a628e1ad0cf633cab57af130393e31a092d4c79ee99e9731fbaf8ed8b9dc8672fc2690e1337bbc039684f3cdbb48c4619727224414f3371b3e6f1ca53d8b194018a36904f27322eb1ad9a7397bd12f10d7cf8ab17f6a64d264537d27df11c2f68945d20c9f4f356a8d109d6dcfcee944ace466a5727b5c7a9ce880b36e0b200e44be05e6b8e9d4dc5d4b12ebd2d256d06e390be4673fa158f20c2a580d24c7e62a7bc9e3412e8e90abfeb969406f16c640a09b46b56fe18ed3f9419ba05a9cc7fbcb3bffbf081d06eb445f3005c0145075f06d87abbc13134efc94823a534df9fc6aa03196b29628f25a36f61080e17254adf3818f565ca92eb11bbbd136866a45d5321539ef4ffa609d68b4f4b2589a353b0995e3a1f9ccdb94cd94b75367f99fa574ef0a9dbdfddb23799a62f369ecb28e178e198981eb52926be8d6697a474353d4a23dbcbb630931456d5b6d7047705a159cb7ace8a768ee2e52e2c95c02a439a6e8a97b973cca0ceb995b41611102ea8eda75d3dd1611c7ede5e7220ee523e75cb7c2acfe7308231f441ff94fad5a9559baba43af8ca824575dc0ca58fa3c5b98f75a1aebdff736b1fedda221cb855b879169156a85af671f398ad3eca60fdce383887f1b72ae565a740cbb45fa040ac1186507d4e6d746da3b858a84817a4018b46d38828006ee06731312e285d899974ddec5980f6adaffa933bb59bfd36995a5380b5d7f692c94e73b8aa8dff2d0aa60703899c99739f070bb4aacd8bf9ff3cd6f97fe156060cfe5e41d81087764d7dc6ce5858137ae20ddbf0f9a5512207e804b50a362b518ab651a4bdcd53cda54899e692ea480f37dca78b2f3140132e0a0a1012ca13ebbbb2ac23cae3553992ee90eb035c86fa15560f0c6468e0eb269c8b6847cc7c216c76e9ef58d2d7d8044288f773ad1486c6d712112e677dd66dba0c394f56cd61bbaef22fe5d6f5129bc72146e5852245c80d6fff10c2de964e1a845517388ba2317b3641a9391ed24c60d6f6961043b7d5bc4db6f1023e3564fa0b76e651aa9b6dbe9efd2429e347047d9cd8c5f20258f7ffbaa747f09133b00a0d3a8fac5c9f2855ae22db60703c6e16e0935a7dbfb253603597efad3160cad794ffd55100236fb77b72d6605ed8f75407ff1f7f16951f1bb4024eff52cb82419956174e682c841ea39f348b17818ca95631866cba63756ed721f22dc8c996e98917d2839d2a5ce60679cd6e5b4a7671427d08d610f420262465b78c670934a1a93da893b42ab2eceb4be5269af6a761cbb00303001c41ffb3be1466dfb2a16fa861a4f4530cee8e763959fd29293d9f6f20f2d71838819fe78d02badc295303055924284cf02a064d3197b604ce613220479fff4856f2227e893d9187463a98e7cc0ed0acf9684dafc2515c6a77b36bf13d0be71d3074a85661599a9a312d52b2fdbbdf28adb2a189d85fc1f04caab2af074bbad57d05ece679ed0683b878346780213898b22379efb2d3135f4e31d7d56530f94a6a7ab630f221fe3bb15550c91f7ed2ce0400b5631bdee00a151fde37d7a099cefc0d35f798d4cee4aaea033513f93f46fd412747a1249ba060516992387f4649d7e8f4bddce18aecbae65c3d6871c8340408bd3789d2eab52fbbbb68a590036be58bf82fcc3f02709c0102499e926bdfd1dc82acc33a3eb98958054a8eeca45ea6ed504b59bb8aebc409050e4e8dd317180a1f948d4037d736d4cdd8d8f9e78adab2930d56f2eaeba89202892bdb4ee51dbc2fd2a4eebb1ba561b483b30f86c0ae10411a49d540b907f0470f9bb5429dd7a733ff26439210dd95095fd3d320beea1b4f338a28a2ea0fcbe9d7ca635a0df07b12ea9711084037e99d7d554e033dcb5226a67525a15fd9434317fc5cf05094305e690eb353cd34ec2d75e8a35b321a982c109efd3502882c2c09ea56df0d1836d7ededc9afb12b9f1dbb834752615001253bc0865c0d16ff3e9046da819757824eb65064d08c87ac5b8b637534db5e4e79405e6fc9650acfd97f343859322a5d8ac0b04a35dc660201752ecd3a2bc6932cf0551fa5d20b2fdc355f93827a08960ba8387391f42a430093e47950c08de80e81860d07080f9c81dbf48ea6f814b1555d6e837c88d69cd95541f6b3107a6a615d9cee4d1e508a1c755cc97f0476c446372b2707e6429814b861b05e329accb9e61c322bccdfd38ff3accee136408568a98623ed2a8f0385c0708775cbfc4307bb70a0b0c89a2a533a428c8671375811d5c847fad85158278744b803e1e2212d40ffdee9855b096d5ec0cee1fe6905dfcce3b4bc4884d097d197ed6bc88ee5dae9daa5219489ba1209ed91f16324112b89ed53d81cd64c104a1ddc0f9152a1f44b3828a106b57380f72b6630c6b2d5bf735dcd1f24191d715b2eadea3c49a55e95f4cfe502447bf3eea42f33e1157b6f43702c6c131b169d1b53f2876cca9564fdee33c90a57fcdc240658262883cb944e2384c7112fa2f16500d033f5fc57fbcafb93d6c3cea057bfa7b316dfe36a4437adaecd833b33f956fd1cf0da36c4625af81ee6650001f8a0d575b7b2a47b26cb6c9d02574cc7cfb680e0fc36176992c4e2935dbb2e076c4088f826aa2143cb8ade42b3181f695795f1c29f6291f3bbe2cf8a965809f6c6815bb3b8084ce481154b581fe30148902e37ddc6d665a38296f41efec2de8a58f335050ba4a12e398b7c0fb3b74b2694bdf762c2aef2c7ea5bd9d0515b77f98e04255058f708e54012eeff571e5edd346cfc900a209b0f0417bcfe925abee168afa623a7934f47ba2a756fa32091fd14300d6629f1775b0f050f53a97283aac487e9be0a9ae66aeadd95d18df646e5f08a2e6d8a8c73368e979ea48a553aa7cdbd9339c0a12477959786400f22cae3127c65275a5c6958f0ee1d886b8e37d95d39868e28297b0553411729c16c733165e89487e16aaa073d89116e598c98889596eb6313d04d618b3aaca0f29e202394e2f48556eb086dab2d37a7194ff54c72c9dba79646e3e8fa9eabad0c59a2ae77b08709bd505e85c3c42494d8ecaef350d19699fe88cc9a6952801184d45712e4a6d84e4833d23c22cf6797648942c444d5fb42181e44666e8e1d50f02ad341f0cac1218227a71a0530012611c0cbdd71db07890eb737dc9bc4ef7b82b9aca83a7b7c2db41a2f5027c44a90454df720729e474be9149636de3befeaf1e3c45ae358e191c7335a6de58875fb08f39170abccb3466fa541b8a9c3537ca2c950c83281b0a7225465a3c88b7656bf883311301fe85035c65dc6faef6fc51b8816ccfe7384f36e22961423f9b1bd816f5191306ee0696d43561d2778e48da2bc373efb2b5310afd0d3c66ef52cef5e29992c0d67f4364c97b3d38ee2691f0eba9f4050d1a203aa848764818939f3b73c6f5d34e1bb87b2871eeec2149bf65e8ae7c8d4104c8de9c46112d86f21be3f26b4be87450080433bd092388451722a152cb05c5f4f68ac0c769c12afbc6336830ecbf2dc18df23ee2c14eeb02b1f779f726464ec9174e59096dcc327e2ebf7f67ced584908628f8835660a5e9e65ef3f8ea93c76e512045a3eef7fd4f2f63012fd54b8e7a23b9515672a4a376f8671990e32cdf8e8b201b3a61dbb0fa24c6d49a036b0ed44d8478e2c79b2b9111ee273fa4c4204685c566d7278e5ab0ae2c9d28235ea8cdcaed10e5b771da79facd922773a2a8e9f2b8e91b4ef08a7df48981c4189ea9c11fbd5d59c756f174506119903aec2c67384489c6262336e7d944aedcfcd17f76bc7a93330543cb84ae778e7a481ce7eaabcd935a5d2ac5beb08928a532e8cd7b5a72ebe024fa814fae5d8363b6d71839dc451ba3f33c449b9fa39c3c677cb823caa6437e65208c00cb310db441572e804eda45b7e3a1d6991712339f389db0d5ecd24f1d03ec58b9ee865677d63b44dc292d01ad4007bf2c0f4fb2d756e9b17ead2d855e2492bc68bdb901c396bd37bbac85ff76bcdc45c48b1a53165cd893dcae4cf9c651cdc15c7e52ad3d3c7df2e5860918bece670a967c67727f6ba812f21bfd994c221cc43750469c8ea164701cf5b5fcf58b76d48a2c880f77c45046e009b74c1d224774caee2358e88ef51412215a1de466c3887d5cb7845dc8fcb52e774d16efa508ce92ba5754776a3ba84635cc8a877cbf4970368e001a0de70579080b1368fcaa6bc14c2da5f8852dcb464e56919ae4b8e3b77d2d7fb1227b89a9b1be60ffe36e89a7e1c382ef575f666f5c0b13d1a5856eda05d0abdc42c44e5fe1892de9c2c3c6e2c6507a424b5de999cebb43a61c3aeb8fbe7d9adbd0e4846c85b204a061229b065c48ad922227ddf9261bb20b49c4bc096312d6f25a814571e904c6c5a6fd61dbbd9972e4ff0ce944b9baa058a2f99199f92ffd0e691b55477a4f08063ca4bda9e949a5bada2a00d24cf7bde45998386c82d69fcabd15192b73320e14e008b352ff255f83fac1072fad03345488334779efcb2e2a8afa72459bce9ba133a57f08416bb97f0712f37792c4f75232faa3e54f141032433dd7c62bfd47f962558581b4834076c7b730b22370d734c99892a318332a22bbb2ae15db8734c690eee4c2a422c9dbcd5752334d950b10929191e87e26c8abad20e79615905121d980fce48b269e94bb6f62c25cfb46e58c7fe14576946cab270339e9421ed017d3caa49f6482020fab9cdeeedde2e17f0faf2e17d941834b46279c58e7602aa47b3c8e696a495150b3ab6572ac7823a83a2cf901c1186086cf99f65806f2ef48775aa9acd1e43698744c26f38c17d8b12dba98e89fb5949b1b9a67e3169744654dce0156847e2d848a5d32187bf691d0ac89352b04aa3839258781c9c1b8acc45c2e56271e53ed64f1f60aa8204ed7188519ebc848481a4c3862833e7bae684259c02a66405a28b1a3f5ab23d1e707dbfa07621891243789eccd20c130c15bebbc797eaef22f65537f85f09ae290261f74805fcae1767c88b680ea71280d595c31618db5a0c44b5d1ea75d81a341ed50c77f76ad03727cfc92ea354015794cca2332d7efdd2ddb6f107beb15f87987c0c6ba417ff7cb7824cc1abd3d5440e1781b27bce94e3cd0abf02137365dac7c23cfbbd92e692de533e2eb3e2e5e8d77ea1e294b93334a947ca01a7273d1cc5a36b7a86f97263fe5ec8e7f0958634c2029589576995ce2aac5c3af6d9ccbf9ecc6ed6b59a7966368f8949df214b1595695cd6806884ba6fb4301cc00282e141dd23f761256a39095a57964689684097433e70ef790f83d9db879dbfbc2328d26cba16e306f870b7734b59a42bb958f56374a27a52511d4dca1b3a855805177071470bf6c361a1b9309975dc6f4adc71981e2f4b966a5f0f13fa1ebc1c03192f9bd29f36b0ae2d714f9052fc164027acf7cc2309e17e3bdfef2dcaca60e3a887321ddb26329138f63bd535037f30d75d19442aa6f83b87b549283b93e5e85518b444ffe4719fecf2f01ad6af85fa2aec576789e66b771befc3c5ad18b35dbe1a71258f8cff43f7f152aff7800f5c5a731c818b37a5f6f05ad8a79866cfbfaca23c99bf1da38e9eb42e624b37b1ac53b9fa09d906f83231d1128601123efe48f472328f82070bbfb37c58c5766ddd864601b50b54a1882f2fbec67945d421339ddea67cd545d3b0ffad55e89940a49281fa513a5b7d52df32dabd24a7660decffcf18c99bdd7e2633be758ef7ec16e14ac9076efab0788a0b6bc9e1cea31ac0186dec5d52d42d035cc4c5829ddc43d850031376659a6e0a4fe6227df2964c1ca9a60ad2bd47178dc525acd3294a9ce0fc15ca976e3c6644914b8b0b88da3019e96137ae44401edbbdbcc308d36b5ea40fae1ec61ba9f0bf9df2ccfdc00c0b2cec6c750b4ee0cdbf1e4b21cbe35a0878b649eca9d05bbc27c6fa69aec607a4e8698343883f4ca27d187d69f15155426627b224412d78d39ef5feb470528f4dcf0a71eb7b24d4f553941eca07af57803d21b1674db8419cd5599f1be683a31b5586b609ae8cf8cf71c741affdd4668f8bb7d4758ef0ed763965ae97f0bff00ba94bce2bab6c94916f24272965ff507d1a8d54b28a56fc9f5e9d48da466f0a5a4168269ec9a89558d1a8bfc65a12c8f144ee9e33c448c6107bdf1eaca71a55dd9f78fef7cd183f6d4711c2998edc517d4b832ef790fe23dcafcfc8a9458bb4db4f8078c1f5362157db9186c121b0ba4101800bde59032bf60ca91a3aee0f33055b967930ea3de108b86a91b98552f776d3dbf3a557158b2d7e505c883b2a75148725f2cf5dcc6c35c27369194e8667c0a19288b64d4e65bdac490c528cc7e3d56431a9013980ba9ec31aa997a89eb52247233c0a3a4266cbb890aba6cb52d273c8f698862697a2d62bf254e5db9ccbc59e87712f9e062c17be261d469dc4d6b2b755ae0eab6cd5ed42189af8808244cff1b35346204892a1955d9c2ffe7c8203cb50dfb6ce2e3a1dae108e1c7cddcc583db0643981d8f32f4e327c68e608d781d7a6f868be2bc3258f5aa548a4e76179cdb28380637b5674ac4d3bca1952b6720241277ff0499da6c3fb58472841fe3c9ffc49a3a1e7b5b9dd5ab5b5dfc30dfc1600e2f8e4da4ada3579ff03fc2abe0c4a9c9c2be00a10653e6cf5208af0bb1038ac0e7bc7020898a027117181a2c0510bfb189e9d9af585d7eed7fdd8a37477f7a9bfa8095abbb7901133b492265cb6b81cc6e1582e7299c0c2c8b4b79076a56f9c20cb1576879257ac7e203b393b692fab9cb126c9a592921afcfaa0743117cf8c838b650eae6e008e47982caff893710966cf9b46b28a166e929a47ba55798ae163ba9ff1845898959f019364ec78fa57215a532a75d5402eba5ba95424678f3e13e0eb07b39de1fd25ffdd8d9b9133a68a8f719b1f305c4da7d876cea3ef81e58f80359e169cb9426543770eb53cef97fa2d437e80e743b17e1efedb755c436c505a86c3acf8e216d5409ffa89cdf6178d7922eeb2f999c7aa29594db6c5ee165af867a84af0a325f966f52a14b4bd6ff992fcd9466dd42d3fffddeac8cb1974ae268b6f6812e60dfc6eb5f1bfd7bb55c2f3a56f9aa267766759948be5c3da61ae7a13049d9179fc36fc56279ea7b0b03224f48056acb7ef4f87d31468789b0383dfd6ad849bf89ff851bab84da526bafd1ac8a645f7ecc8859cdec2582fe794cb2df8995014db65b4eab809d4a6ba550becb2dc67fac84752f2d5929524ede80234afec38fc81910665a56dc350078b27ba7a744fc6b495e0401cc699360015b8a779d49a91fc22b691bbf4f0bde09c8ff35aabaefe151d8ef2b068eff8f5913685879571c228d2215c6f50f3cb386f2956f655d308b470a5cd580fcb66cd7e49968c3d7857b54567affbc91fd8610414ad48e23ac6eb3f078a42eecb2ed6765afc83c2d3e243b3ff34f8b5809e1dedb0d775ae03386265282d71babfc2d82db59d2ea7dbf9c9da92aec6cab010c04e6da52889f043bfb696b32d4adf1a7177685a2a80fde3765c896050f4abfae6fea1bf8ae7d8e1ea78cef244840e992d68232fdd7411c7dc5273fa8b9e7f8f97946781beb657decaed7b979f682ea7a00451e5894cc982dc1eb606277bdba99ffd0fc3356293aff094e234837aaf9fa301c6498c50bd7a525646ce97e48f22946a092e28d4306491653c06183fa76151614d10b8fb7b51dbcca7add5cae8d8abe8a32ebd9a01374bb520640353c89e0d8a23d52d21fbbc7b04f600583d4a896c950c9633854df40de1d2805f768279e280b4d14dadeb4a90c80fd0f1af795443875f7184331d307aa28dba3fed73126d1d27baceedcf376de52a30f3d74d09f9a0d5c08e9ef211afed3397ace994a39748325ae53bea62124348b15a001934886bdedcbabf89f6a81e8253c0c1bb47ac18e9c7b859f0fcb1d92406993535b6321ee08f056bd3bd688cbed0183c045ae5f4f15f696458f4d7d7afd85c4bc9a16aebf38c4b950f59b8e501ca36495328cb9eb622218bce9064a35e3eeb6a6e8f593c5e58b735cc9aef0a31d2586cc36d204c0cc7167e43132d270ee8416a3b2c3bf16d64f6b5b6d0f7b079df2267614dd6847fc2f3271b4409233c37f7f6a5894f1d19ddad6fa392b2ece2c5e578cbf7da4ea805b6885eb6985b6e3d004ad6ad7e772d6f3c61c65a7fb255e2b36d8bf583044c08ab97e7e5e6b8442dd0fbeb27b75fd2c9163de2f25926bdd72f8cda9e2ed8a97c3002675f0847c9d647e7fc50db3699f1ca41ce9a2ffa202c00c5d1d5180c55f62ba859b1bd6cc0089c5fdfd665b8d5ea52aebef0baf3d702cac3361fa3dda7e0d2bcc14febba852254115199b96a130cba02147c47c0deb43dcc9b9f08b5162bba8642b34980ac63ae173dc4842351fc1c8a551afbdb58cb2b295490782130daa4f359a6a80d72565865be8bcc0af888594903ea0112f6c8d923c5726c4081e8c856110cc7339cef0e2d097ec6582b8a0e035a7630ad3052bbb189f3abec9cb29822cd92d9ed86ab7029cabd6297c2a33d33024ab77167f9d7b2dafd5445ee24ca6e13a366426d46c7278fef0b7d6748faf50278bba7f6d78a85a9bce97f75700c9e434209491709d23c599fc95a194340402cec351ecc78b946ea27cff1da0ecc2b1f8b1a648b1dcc10f799cd0f6b65f95c4012445497e5ba3cb9f51964a9468940b27bde98b487218fb1c1fc72e9af6b866f430be2a67fa376392b4db2f4dbf32772671b6ae55c99f8fa77af843a6ee538f23a68a02dc99102a45b7f7d47dcbc155df822a733c4871815804ddb2bda9d68f12df71ffc8e59c1000c843871faaf0ea91209893211ef0c9363afcebc521dd9b652c0e79e9095357edc3108a39317cc16d03f2126eb08ec13e3a02b692f2ffa622e7f4f759c0e3b50e8e033bcc57db5da206c00245fffec081e142bc564c536eacfe7cfbf3c71627746e247ff539a782ca46b4ffdd67a612b1797c0326355038584640e4a9648179f583aba8224f1fca3a8c6decbea9eb9cb96d012df6086760c08e14aadddac459dc8fbf12147099cf351cc5530d0b572cc1d5dbade475ec3c1c5b8b895cc739a785bd2d9eaf8736e73b7ccd5274c204096016802c0be251b7acab9edcaef7d3320e8cc4d7f111d6148d7397cf6854068c6f87e8447b6d0ffa9dae52f9707923b8c6bd91f993c141b0d73a41a32c3c673d884783e6b183680d9800d839492d9676c3a1162a225fe232d0157a3defccbf71a46b6439ed42fb32b1c75c89dbb9dfa2d0d33433104c855e13c1e948b97f2d10178141857fb806e7a09e0027dc5d96d98335547d34f9e7a14217b28d68f0bfea6e97acd4d981c7c1676b1d9e4056bd10f1665ed24725655b6fba879b0128eaa788f724c5a02816624d180b115db7184d3213387df7dbb7696950211e68bf06e778b3ec7dea91e34704ba60f4cbd9e8b5fc460c1ce17c10f5c5f2eb4b9440a92ac6b27092ed68a996bcaa005ab69ddbb7c3671b29b79ee320c61e6626d2138f09e1f49956d00f512f31fde60fbf1bcc69b21764450b0f8577ade43008c3d6220366ce2889cd695893e14a9563d2556475e3824b6204144be549238b69edf31ce664832082f67190ceb28489320044c7be9fd682a1c34d675d486c8efb0c9cc9453611b47a651766665619fce413959119c1108ce72694ed8c2c052fc77b3bc662685b39983fc0cf40f45cee69ff99921df5b1de54b2b7679c56dc3737071a8b24a2d0e26ffc7b96a0954eda161111b953b5478464f2a85b435fdd40091f86171e2f92929b699a2c763e2f918746a5f27e284d51e28766e7d59108bac96bc8335bb12b2d20ded13ad929b376dfbd562b5bf29584ea9e4bf230a670f436c586ef39518dc65f7eb664185e5366f5416e5dd349c784bbda93af35853ddb0d89ae5d7b59ef4b7f2caf704ff0d05eaaec1f93ea3693be30d135dd4de12a40b808982d3e2d03e0e0f271321c1f31ca04fa77f84adc8bb18ad53e32b6a0d044842c2c3db2641108f4aa85b9bef6cdcf391ae74aad52621b3b74d85926199e041fe5761b3f8c6c8589fc004463e9462896332383914f58da21edb9fd2d6100a2d07cea9c953eb415934816283725dae227573d38b193c8da5dcd1a5e8dd5aa18e80d94a1da9b734510b4e7f206c128f2290d2912ecf3ee8bb323ae1f765a0622e410a7a8ffa291fab080ac869667968eaea3d0e656c92744ea2019ae8a75961d2588fdd03925181fdb855f97857e41c6b229a1a3c75d7378775c5c275f8ba2eaca96392f4ab74d0140e73c650378b3108f223ac464c80359e8f075a71991905550b03bbb2466b40f6a31c50e59d5458789e5688f329803517dd6e854572c9f5cf649053c8dc04d6a7aa572d901f8c1aee7dd2ddf43dd036ff84bc41ba31a991386292453fd949d0c9d4e82a0f8aa295ac1cef39ff8df7ab5c4fe5cfca6c4dd514bc6380cedd679d0c8a688fe6e9f6a29332dce4503bfa121b73c42d5f292ac14ae52af307e7793b0d0a60f5a2d8486916ac488d0defa7b7294711521b06db8bdd59e2211b0aa550f9e6b32d142bd32fefb60adffe488a60844f0a90978ebfab6d83dffa6745c2b03bb11c2332b488031c6078a3dc6d533aee413f754e23ecf8701ba0ae34e4ed75d2aba5a62501def42ad7525cfb283ebbe45c37173a9afb611d36717391d0096cfc9eccfd7c322e7721b449d5f4ffc7108342d3131919e6eefdd1aed5359391be779610401638b1fbfd2dd55476e89eeb0841e0d5609b99d8a4fe428dd3479f95649e3b41a9e5eb5d45c0f2bd3ebfbe6424bc37a9c217f3d7d3fa208f85f6ecb2c7a49c37ac2347777c7bf5e8fb01b40e69a66b2fe98407844827049ce70f0dd76c2d86a4438b4aa7a0bebf2444669768fa117aebd51380b8e99cd91c9650fbb38fbf385a06135f6abe435aacd82c4032cfd3dd8acabe06a97bc7a1752f9cf770f8b8fd4515d3085ace0b45ebb0af7e3286c4cad0a514a8177d3a943df3c74cf410e01d59023942fee9141e74eaa2bf2775a32ef6db53a5249ae12083006dfb28d587f71c9ff9bb40d35419f5994bfb72f535cc908a8c9900ac4babda1d2d179653d1d7312243b442d7f4f5837b62424acbc413df96b88eab9cd2615a74cbe9b5af04720fa856050c76d1b56cf46ac971d21469eb4f8a18d09587b01538c2dd0a7045987df8c29a9892f78adba7ece40b1d8b563f38603f26f1ae463ada58a8971843f573e5af0eb814a9821570b55c3f9f26cc9a3063267d57a5b6094bd7dac21677351b2353065c70d5b26d818ee70ab6f47f25d08dbedc7cddcb26c820e728ba6a12f2894b6b570f9a7435b38861cc660c7f98b22e29a54406aa3fa7e4f3559fad81e0f7dd261c3df3fa9e0e518899201829b95757cf805847b433ddcd9a69eea818a47be6355ec7d10b7295d153ed43ea903db3039b61c152436ad4aea0e86fc0b7878904968c531c7e6953dead9b3cccbdfb39f673f6bdb8e8d8aae6d1342644d709c3401d29d34b24e33e5fce1ef3cf5a17a558bd07e92243b4c34bce0c57e492bc24830087ea4df3559ce68fed23960dc59c545684101925fd49545117e7abc61a31144d2d5e441cca1a9d16d419323a693a204d976c1c87c485c187a86e7003bff82f46d3fd13f982d2de0e31d17db1a75163c77be76a7b770554a54fa28108ef98d856bbde198c754dd962efb47c13d75f54d65c87a7f326ae38506833e954792d5041771e695bc041d3200d45be7e915aed2d1f119609b668429dc7f90a0a5c3515460a3f096bced857061391a0cd8447a064efaed6d0497e7ec25c56790a5df3a79c3db60073a56d05c37ce1457e2866f4ad25a0e728d0acd8f522d8099ab057633ceb5c1d4f183140857533feca8d5437ff298f9817f05dc0a6d3b2ef3152e52498dc9b41b353aaceb69b1b5250b1a2909e3dca24b5df78dd75a152e3346008dc52f13867b20a16711424cff89b89ac43fa499cddc650ba94499da643fad7eee0a8cc8a622e5c0cb14388ab3e5cc7c2cfa0e2a2a366d30a13598f4bdf4974641ec09abd4433d52001dd33f8a4ff0669c0751436f5277e61f31ab307d88302da4f0c79dcbd86c7861da80c58822e201f1ed304e6e6acf58b9cb2b41c63be58ae5665bbdfaee397f117cb0a2aafb53dbfcd880ac6f45b093227d2ff699b19dcc849e55845ad67bd3ada730420518d1368b46246243a58e7e3786c0ee10c7cb2d0cac8ed2e37519f141fa1947f3835b4729bdaf95c5c032ad5ad5039cefcb5e3ad9065f6706195f10d89d5b943cd41d0e93bb8b713263ee3b294e5691acac91b6c5f4337cbc844c669a2b11a7f05c2733314e1469774b8244498322cec7b8670df6ec4b588517af40069e6343e5d1df24345ffb73d408373c96d48012230a4ad7e9e09ddd858204196df93bb8963270a2eba4a121affa6e836009fdc4513b03d393e0abfc9ccbb01003b83c05d973076fd576f0eaf8ffbbc9f7b2aa28b28411fa86f2be37a809c166cb4719c361de9cc9fe2fce002eb637870f6bdccfba1a0fd88d90eabce36e1246193744e621db1552e3ad69a7c71a8af34c378faa95eb5c1ed67c77fccbc489408761edc0c17d3652e2d873bf7c75ea0eaefd0b7a0462d0095f0285b15667ee2f97c9821d1080a6785de17cc0a4228925b73421b4be028490410b97698a2fcf26f5e253c617b0df4a80540fac9b24dafab01391c64a7e4becffed3c61e7d93a635da42f229382a7f1fcb1c88f9320ed7939ff125f52f8f3e74947ed67e99e90eceabc08d67544ef6afdbee1ad54b06b0fc19c20c7e6861c12e2359a24d05c3328a9ff0fed34914a1720ed9ffe2ca495c2d8a8e37be6d993ef45682490bedaf79b7e0b45ec1313156876ba2ae07f819763361f03b2f4ecba53ad093e729e8bb09aebb3f234b6ab36b972d115badd5ae47838400a39d61321c058c5808f5f8d269975028673c1d2a3614ed6a2dadcfc02b68583139c80b03c7140bfe5f4bfd351c92d1a717aee31b88584d945d04fd2815aaa2ae977cf20fd30b14abbdd890bddc3f5581584ec0c42403c347a409c1fbd8ce372f6f3d08ade28d0c3179127144541ac8d313da284c36d1142b5ef0ea65cc3ef641bc7eeddd43e75f4256f61f35e2649087981549c3f650fbf774dcefa4d41dc99d10438c50abe270b862a29d28769165baa0a551bf0338542897c90ffb624ca910661172c2e8672327f13f527a8c17ac184ca67df62e5b3ef638e2f64251c6937c9d46417dd5db5324bc8485c75937285b2e555e2f48c7a818b033acd0be8a537f900a1fbc7a395440cdda65c4af98aaa8f9c6594a462ed74a2163b88c11045465cf28afea517ee79f5cc8a8a0525761ee4e5a3b98fb448f7c4d1b5b672cd3a60769a319d2a3c2e5f5f65d9d7030350a0f6684e44e9ae35fde33cfe89f1234f7600f3c55e67daacd88b6c4130d1a1dcf1a7498d842714943b28597b59455cab0dcb99d753905ae8361c5e1078f8f414c072791d5ce87fb646ad08f83bd09a75651a2ab6904750e7f6479754ea1c5383c98fdde8bcff7e3901c71e133bbba4cc0f2dee888f57febd2f3b70394961738e5801a63ca2866d41188544ec7f01d2e2e54bf88ee465c439c10b1ee8b6465c315181ada4bf5bdc4c8f627b8cf7c9c54af8fa865e8b58f3e77eb66b370d14c013b77429ffea4ec1bbba44f564edfdf071f42097e7d6c31e7f45d706d9d7391a4c5f6d16b818e6b489d7642d14b7069259dfe312db1849ce0ad3b9bbaf3e5d985a481c65f472c0cef5057324b0c166671fb057b722c9b4b6421116f0a300fb95f5dc98addf9ca7ae95a593ed45836c5f6f1ead43536bbd0aaaabe24ca633e795ba07727e27227c2ccd1d49ebb883f35f02c1c9408726b52cc44abd68b856761b0cbe7242d5eff50f08579ed47985a8b0157d574c5a6fc1d759b3b26c29f2656dc8a37e8b9a54494acdfe1adf912be44994a227ba380415a78e460b7a6b32b7363e461d977d08fd17bcd348a6918457d006c4bfe1b9e8c2e5d6321d6f6873bfb265f75284476bcaa5667376989fe9b598314351481f82edc0cc022006bf4ea4f0c60507d446cf8eadcd17805e55661ee754f47ac52e64808ad19d87ac885072212fbf095db468eef9624f1ba2742ba0f06c003a32112d2c590d34f71aac925b7d303b45479528edaa168cad0c6e68d0a2ef8b6f796ce5c2dbaf506726296b4ee2cf32896d6ed2df805528a77217f3cef9f84c9ca643c14403beb1956fa019c6793eb2939afc42ccbda8cf2cbdda7392a352951144084b0df1ee2654486d401db744f02512a7560b97e70ec489da6a98ba8702b22b608bbf542061abc5ac0ac2f1da086fecf6690ca0fcd872b94c6306571c006f4759db0e13e83fcd001f3dfc24b3367a18f925e137cfcef608fcc846208879f1e71b7b4090a5804c7c3132f54c36cce4ab262643aff8b92df925d32e204dec8c00c29c3b2c77de17cb29f4c2570b350dc58d8c657ecf4edfc3338338b58e696670d4caaf1d66a49c5f9ddec4705a2e817f61d6b1f2dbaacb9e69de01e685b381b2fd7458b6267693ddc70b63ee62477848f2fd32d15fc4d96fd10ae46291f2b3212a7489dc8bb43b27e9d4ebf2c7fb841f7a464d8295679b3a8902563b0d02410f8aec9fec31942f6023cf42f8c3e3006fc48a692da3ea3d2b6cfc62ed08203d6562c1f64b49f10a7a8a69205d4b8c8e31228c4a5e00203e56591a53e0f3cd864f38506fe21362d631511df9393a6dd58cdbbf8318cfee4feb015ada2f623c132db4639fa6dd93685e83fbb65f224b2ae11e755a29473b9f50ca808b692955a77fddeed60d0c4fe673df427ca083ec8e13995954ccc19a83e06584d29ab85ba963e7a59e1c2a15bd3a1b46d3f0a92d8fa119e60fd4a4d16eded8dfa36a09cbaf132d79057aa4d9bc800d54d0d33477f5613b7c4049d7257b4a1a119b6ae2eb1254e9a3135fb9871b2bbecf512261203963b7fd70e4efc31111803baffb9ba680722b0c73ae8cdf29922144e36e1c6f8b72abcccd194e1e6245cfc4c247a24d5a80bb1fd37b4043d656dd9dfdf381816f16d597b07aa3ba515ac32c10ab2b66de84b8927c8eff6caf76e7031d794f3503953ff587758f8c69a27040d14a17e6a1789fa0476125840649d69c0e94108477e06f210bcbcab0b7ef7bab3470cb6aaad2d4afcea290a6e85b9f8302c7c1fece974536bcca6725ead5e67fb2d81642cf00a935587254497d1d0e2d374cccb8c6b6422a4e72d2c7cec07bfbbbb87a209074ef9436b183a0fec5918b530c0372921ebeedd2e906e3cc15df8fe0df53331342cc79497a4dfd17ace07ee411786fb06f40418fff90199d72c50aafc476d6aae3573aeb1dba5d4675cb2d3697fe44eb0f35675edf1ef0fe2689bd6b5666536703b89de3177faf2b9062084efc1b5d3689a541314eebfc0090353a0052b9d3270ed2b116de7d7eaec92432f311eaa76c4a13cc637a32b563c47e9fd05bdea689e091d4717fc0bfd32d06e796cc7bfbb88dd88c788b280e10bccf427bbd7369c18c9b833bb7c57073ad0d8d65f756d70fe4a2a8224be117444567074c11abfcc283c9642b25bddd9a39dd482f85df047fc083191bc43de3128398115e8d254fcddc2180638f5cfd1019c80c6c8c06f7dbbf1ab82d861a41116449607ec4a2b6319793ce9a6945025285db6bb5f3663755979e5e65917cea40014dcc71def96bc963deb548a3792a6b7ee4d21dea502b07daf9e26dbbab9a97d52e7bdf389437cd38822a905958b0b63a5323eb3f6efe032bb46a6a11d6115d4d23c8d9689a7daac4039f4815d6c692c610f961550456c477a6fb4df6a36dd915e2e896e76ba6024bf31a8dd717cf9ad9e29fa7d99c61d36b04a25e8be2659ed138215b3b1d2db0c0f807af18805e5171117152f6eed0e879f08ed7e0bd79df3f38c822804e921ab028e543b4fc46d0727ff413671391190a3c3b559af2ce89014e6a8ee01cf8a3a7d6dc740fff988229f62f4097400259aec6b0ea502c1bdc92fb5acff41113b703510ea7707392688ab6616b11bc4e29151442f05f26d507b137dbf3e5e793fa1ff78fe213243a18eadf2f0378f98f5fa09846486b0a703e1f3c7d619cd86a7cdc2ca935131744b340cf0e7adfeed11cfb14c58f1b1c2803d8c2a17a45f3804f30c0b04edf78e5ee03af312db399a6e12f2a3d40d0ab47bb69a5b440a2e76b0ae64fc23b0cf2a420c6aa9417e98d6495fa1a7cebd29dbc9cb6951093e7504533ccf536531f9f8a67dcdbace6b32d12a1156033ef3fb2bac218d3042ee83b6c717daa2b71cb26cb788c3590d25a43e23778a9f55ff856e05b0f7796674efda2d4d702031d86ec668ee988e2c753581874739554cf6bc22a46f396e1bc7229e1b273b49b48f3576df62c8ecee9f66ad4c2b0bb9b736ee50755b80e24d1d51121268d6282247e2c00a9f948eba42ac3a6aac29acd72a94605c80e1125069db499d42601099438faca5d54a3e62ed1c39e106a24f1060eaf612112d123b3b86180c0a78abbe50eb3b9947e190c5f6786dab90038098c40b3edfabf627262bf467df98ff584e6aa89cbb2c8f474b0a2fa5a59f6278e21809ae05eb33caa6b5767b098754d82ecb01fc0832fce4c1f3a602f7fa671aca69cefaecf1ac58053cf9bd6e52091f76965c7a8b3606c25b01dc8d4dbc902d5660085ca5db62178815329331c68fac2b265097f57df11f083cf76a40631e0df14105a5f3878664696610b994278aaada1a1dd60d6d29b5091101185faf3166aa0c46be0c6533f945a4c033d055e7da171c0c99063a1f5ec71fa962bd3c4832ede1fb5f5bd28c11a92069d4d91521dc6a3f0fe0b5a782e5c9b7ae248253e953fdf086adb400f3036e3836f3789eee66f734e81e0129823dfee446613092cb0047caa0da06f2117628664b8b915787a43849adcb21d972cd2712ce63f3b986753f730323e0cf670e8c6dbb98c5593a36c3542e83770c610e9b4a2786546ccdcd7e7072667bfc2c960426d3eaacdf65ee1ef4bb3647311977a8fba437af89e3cacc9575dc59d1fc9c7970ade34a6ebff0d273cc3a3d8e54322dca91b54eacbe4f831eef7b297cfa2825490b78911c871c14361c0134dfe2bd9f191fcd8eebb0065383484dd0d96383179c2a0953c6636af1bbafa294c1aea82c2e6a51b9116cd73a46287597c4fd617f067cab246789e8ece196af9e01efd80377cd341405d8fa0e22edc7de9d00c831674962bbd905c4c258b59cf92d098c5a060aa042909e5bb63d823a6c4b0985bb25198864d8e8bdddc94ee3dda54f731f33043aea90181acb711d32aa3d5e55ad45d431272219969cd974cb6798d04acfe45aa57b1c234a9176d35d9832264ff135b43181c6d6aa7c72abf1b99fedf95d946586a87ecfee1164e77ad8800df947792ab556415a20f65da5430a88ef5af05102f960fbd670c72b2c09e9797f20f4b611268ff55836686f7b67b1640322a4e4983ea61cbaaa33820a4aa0ff304be3d280b37439aebdf6b0b19d9ddc7ea5358dff85da6343e46e0370338242a6f84c7cc7f690c41c8f785d4252a908dbfe2484ff7afe92f4dcc23032d69847f409f95b12ef5fa1aa8bb0762b7cc7fa660981cf36472c4d70ffa33b0df5ddc7f82e0bf224285e3934f0e4d594ea7bb16a9be909b8c2006a316e945831dc51fcbaa4b8410620cdea01292c01fbdff56922ec0d84f3afae86bdb9001980ae9a781f85cec1b23941d04c4963cb5d3fe6cae41427fabc06b12c6a0e8c0ab286b4b23ebc1ee2ca9741ee1fcb89eaa51f4195c7f688cd6e677312fe959d495106e4c4b31f212a55be094fd5e1f5f9ad64c56d6885476d1515697013bd9090e13aa33dd9e29f325285aa47a88a34f5eacebe98618895c39eb470faa6e7d42a7ecd99a5a349df81db0c7dfdbc5798e535301d27ef7be6ef8f66fed212c9efada48dea398781a970d1e0e2742496deb32a5020fc7a57aa01af3e6924237eca3d2f6412e63ebe381255582de5ce6d18b1199f7228fdbfbb18bad53a75d20098e50422cce1f43ffcd99f12ee8edbdfc6edece3a57d584c905c22a94556351ff14a2f442f66a3a2c92d8a741b0e3b274bfe1bdeb036c032105eade71c6069048dc4d72de5460f4a00d7f73c778e2dfe7b0981684ebfa6eb803ab4b7552c2b4e597b6ffec833efbf301fc860124f7c56c2fc9b4c1c91ff0faa3de6b592ea11c8f7781700df80620533868d176f8622d8689352592e7eec1f3a40d46ce66398e3b1ae6fb361a61c9398b1dd228445afb99e268ae55adca8f46f38fc38d012d1b10192636363305dc6be145379af6123555b660700001b732f71b8f054834eb45a7eb89ad62db8e96b2cf8fb7ff21f7cc9de39221163460a0f962d564a90a48cd2d222db4ccbf31bb401d4d795dc9d0c60fa99eb5f244c950a3ebed6ff54d65fe736c11520645cb24c2dd92cc220e673b59cf37dd10b7f5e73a69b358c68062ca7517ca71a6b6eab6af09b8bab57734c4f408d0e21584d72e3b3c7a45aecf59f1a6b472d1db563ddd812780a816d4a950d8d00088b7d8f0ba164a4d99b2c515d972415ef788dcefb4243eb1e6b2ef2fd99aba89c275e1febe35eacdaa1260b4df3c1dfc764d6c4e93478cdbf275efedb1f405bd71a757028088c6ec50a7fa89f714088f3eb0820d0a195de113d4133cba2d8f68ddb0685382082bd2f1269ba3b7cd6622aa86e8467983e44625260e6734a806c100138e9fed854aa7aabcd938a425471a55f50447851f24bfc2581350c311e5f406ef7456e0b3787da5e399b4c6534bfed60b652e5a973b5cd959cf31512626c9b9420ef4f6bb9dc7d879596f325ccb7de3cc8195c861553f43e349fbc6b219a1d9af43c3b9abc5decb3286209a42635d8ceb1ac830ded5dd3d6eba6cdcceff0958c994c1bb664feda49fe7b1b13df07174246fe83e79ba087320c5a09ba78adc5f649797b0a34ce3080fe8a89a461807fe1b3af5f31d5f85d61ea70ed12270266b7c5f55e68591e41f46365c53a6b91de32bc28f0e12b3feb94ca12038cc5aeda13b48005239b33459f0cb827a4bc48a7cc1bd76fdd5623bbc65452a047573766903b7e17ba496deac113346266ff9ed6ace14e4e2125606ee97dd2a45e87daa61363143fbb78372f401723a0f1ba8f7872dfc993691ae1958c37a037f045e78376a443e92472ae7eb3b4a6ab3126e8e21e393a0afbb520a11e591247f98d1a729d8bb860e233614e4392db59606ef310729b4829d16fbf048e9b29c293aaa678a68514a7965e833d8aaaa98555fdf5b0bcf2660a1e10a3eb0b251bf404e84bc0475a04dca7a033d490bbb1be4de4772fe4b184f89645e3a83a984560cc8a4489dbc23d35b928118855f63338521bbc29810f9380c1f68874ea1ee054d1c643230337c1d65e68304b92f9bebd114b7821b4bdbfaa6c8afe465f8fcfd6239ef2e47b5e016e542be45358a92255778834709823dea07c32c024c69bb65461823b33bda338c83baeb203ee88f3e2f64a1a1e1bf7be51e70ac28d80658a9c183468ade4c6a252967d7c1fd6a43a10aa706d06db13b89399c889b80547834f545df2dd63f01e3d6728920d8235700682787e1e77fe72527958e3ffbed2b4ab6016f50d03695454b363aea2f2943c0e41157d06551f3cd66432fccb5596d3f2db6e88979f9a2fa276f5b79389c17cba8c99d6e3b1f38dc6301baafd0398b7474fb1c19f5a5050e6b3dc261228c98a3b25161c9ac22f2fe625ab0de139477600d2f015afa403da89ec989faf0751022e18dab08f9ccf84da088116c12986b49c5eb0b999abe9a4b47142127dce790bc7386e10081619cad339534bd7f8d6043e390f02296d92c0682389f5ca3e42d835876d7c226b1b7299c7fcd3124b30d0b3b4851e74eee6cdc3a65594dcaba442e2e97d440315c2a2f8d047333cf06d46c2a9e8489bffa1b4200f391162b371fb778f517c2e55f97842c8c42bb34b77ad20c62bc546c64fb811c30066502fd8d533ea4c6b78a27acef9014de93d54bf2d0f9ba301905526eadaf81e430f800f9f0efc6a75cb09bd1b1e05055941e88746dc23548da6849604495417d79cbd57574644c567dac21f5b233e38b5528bf4e115f4ba852e2ca90dd5b2018c342f0ea44bd68c3b089fbd6ad468b82b13cbd6a71a714ff80d623cbbb76e8ff87787678ba66c84b1bf0dd083320db75dc0cdf21f84db6aa24fae970e35c93544f1ad7fa1960ccc51bc228e5b3388b7cf2b5692d93d84b916b2d9067da0f95e391cf27e67a9b3106d356022c390201cbf82f8c9fb5bffb7f0d0605664702241d4383227983408254eadf6feb4144def4f39db4c591386880c7ff473bf01a2c4b649d5a4d045c7716a0922c86256592b50f2ac8a8ec219824a8b0d40a20d791235c51153644fec1e1999f41e50375887ff422050f2c95e5f3976dc39f176b698430c51d6ba3bc7b5749505dc278830d2b106aba068f37fb961ea85edc1f9eef5a7bba0a8387af24a04aeca55c211a95827d897743f3ef88f71a766f20b2a3e79417535bd6aee4bb2d994a71a1d58c1449374ab2e10be4c3f213021339805caedc75274120518fde7abf0864ea0aed89faa0ed6fe61d44776ab33ad53104e50b648b900cae42c7e49e48a3cfadef9ad267f9c8fe614fdaddff6a2c448acc146bae53ed3aca2558793c96000ba60054b2ce9168036a0d9b7e06a175e522e165ed9bfe9b2474456fc7511b74e53826887bf37d9caee3f74e41b19c6b4090ffc99f21388345eb4643a054fe0145b8c974af076cce41bb639708cdb7301d31ea056dcfc86afaf75d2397b2ce6968955fb77e881b8a8b72bca3b705da88649e9ac229428a2fc7d2d2add7cb3e020b73963fc3287cec1c43d32c603d5ecdc99b3ad40488011efcfaf8e32fcf88c08a521d4c0b517859ed89636ad42e60289e6f32ae30978c7cb585c68904c5b714cc9c48be0439ebe02c8b5a0065abc7d2d94795e941268412c0a23aa0898dd3b9d4ac2b379908e741670d6a4b03c6e3fe9e929fc757a28d7bd831644616532c6b8101e770f3d97507d268b61eedfa812d8e9a7549b63a0a1a62a623dc31ad119cfc3e0fce3bfdecd8c7d9b45e9b016cb13bec21a2cca47c18e1a497101187cdfa495107dc2d0a1ba8a144abd299cfcc60c2e68f492cfb7ca72f33153c8baa6111d741f8f6a1b474e027df87dd6b89b895e179f1fe53c979defd78f5db9d2e94ba2130e99a2cf510e7df75d8fca6c6a16a24d7c08285be37d56e44e24f1cc9b254988b52e287c80602c9814857d60289f0585392837e7f66872fd354966287d394bb78c63bbb25619fdfb3cc1743bc5071f54124b92aee8beec9c0de3df692ab83fc7c8404109233178b19a35f7a8b5affa1d26efd19a04f45ca15955977e012e048b53b3bd602ec4e0efd2d3344e09110d2af65c3ead3d178a7895ffdbd7edd395a344e83624d6eeb071f23128210b1ef3e8f11e8f01e57278be5f3c8fcdebce0026bf9b887a1801c2e9af8b7b8ea3fbe0de0214ca314d4b8d830873ae4cd6e58a5fcd94a117ce3d509a8a2589bf68f08c2d3917f71ee4830e759a169a88e14bd954198606046dc93a6c78737e8959428dc63c917889522f9e5a42e0f7e7315b1880bd4646a21ccd8b48bf2a6a8a11284568f4d66a3f346ad68f1f788dc3cb0daa25379e12e558ef15c2c051cb95fa1421d1f19962bcc5209683d759d0c74141cbcd060351f43bda376005981ecf07e1a577e8386a467612517d972e5a2b4c64ad85726439893843739015f703f4465f7d55d7fef3399a3d7e1d2940f5c88f813c8ceab057ba46533c83536b693f481c490f07d4027a40b7e2596456d653668d7522c61cc86eb969834d16018e3a993063db67da28d2fa456a10c6f539d039e72a7292b504ee7850f47bb798f9a7f7c620d5c29427aed472dc98e344abd0b2a7cc4d0a24b7900959fcae222478cf8a0058e713f87d431f94be66b77ecfb89e3d2c368b020bb56aa30082f7cc460f5f39fdd3789bc389351330181468861a7ddb43a1dfeb9a35b9a879e5d88b492ea0223cf7c58c6e272d97be86921323b67e12c9c2b3e4d52d8e7f258b87461f738cac0dc7c6bb0b8037322ca3b302124507bc8dade6c8d0dc108a86447902b8ea0afec954b01a08c396e5e65c9f7cc7d7a2ea7e57f881b1367e4316d6dafb9ad0456fd8d28439d3dbcba0ce4c98bad086d17b8ecfaca7114389f867072b88347c926f38fd458e412d72f26bb117bab4ac5d13b571dd8c338c58f5a2e0502c246c16e9003a397f19b98a7354aad5813b46307cd2799858b5382881a143c7e6577ede2f41c682464047bd60b9fb5d971e77d1fb4e071ffd365e25535bb24124d3388fdd4f8aa8c06d6d584dfbbd32d0c352ef8c4e4a475becf9f73c767b2a342afd6351b753c12013eb5820330bc3babedd14835b3100f888c60a96c046bcda90d0a1b78a53c752c6292ea9caf41038339bca2a916bb9eda9eacc4f6dc9838ac20a547192ba45628b0986201ca96a6406dcf6e25e4f506f605827d0641debf9ad48648db4512daaacb3a5932302f19fed2ea72958adfc3ae4561eb56e3c6544e7aba2638980a530bbc04372339e4ae8c1e5b4b5e4a4df25b31c59a709d99e2d2be5ce6ccdafb4e3029b123ce986bc1659685eae222df9a4aee0e8717d42a44eb008866f7a4dc073220bfca889d51ab8a76638d5f849642a563c4b0edcb218a1d7e5a53e86a9d9f3a05c5828cf8e0d022a8b264563130d5c1f658444c70a0931f20bbd3c5b56d7af0a003844c91586a3ed20bc5d9e39cd5cc3296f6c2fa621f498cfe1db8e373aeae6e97679c93fdb9f2250ce292dbc55de9cd21d6b3f40b8c54a7983b75f271529bca53b3f5f2d5afcd17d5e4897a54019f90e6e6d77e464922375c7aaa230241bebbd46876818f831c3153e34080a4049280dab2def787f612c97975feefb20cb5a2e818ea863361a5960d750253c66e90021a6225023e79acd8f24d43b31cda5ead4619856dc128f27e4c93ea25bff7a6abe8a8cad8034275d8d68fe515a1e784aff5d9b7eeed4a541187819154ccc3226309075e2cd7d60ec351a360caa964dc4b9b5c1c64226aebf8074edfb9fd627dfadeca5086aef734c8df1532dc939da02ee80ce48cf687d1bbf7f274b35f58ab643406052ff2d3b9a9745d9963347bef4a88a1b44c68bde8eb0a88aefc2ba28975e29cd617b9376c339bc864bd31341e59b3a33500c7b34472a0558e73573814563bd09fc917cf1f9f1d8f378e1ff329bd3594d06c18699ca09da4e8198bf7af14f80b7bb73596d55c03264709ff11fe70822f57aa683d1e5c700d22232f1147b24c6ae10f0cc6fdb18960fc277173c9d58cb2019f3218219742d155f27612befe6b2ffcfc98a0a89f7ea44f4568f3d1aa880cb2c0af2e9c42aa5a726fb18b00f3c8049a0ed2c9e6e7c73b167edcd4ddcb2a63eae22fc056523dada7435dc0268ef1bd32f3eaaf1a3108a781e640a75ee22ecf9699dfa98e421d2940c076ce1c9fa3a451b66ad6a86df82f652d0764f25f7763d5e6c4cdb38dbc6cd7fe41bebe295e662b91f177a93fcb10ce7085ca7017b4ff54e9b3793258147171b9167ed36f1b52159e74bdf9cbf051b86f92865a9a540a0b339844ca6f7f63315ff3d7a8803373a28ca220c4201092e1e243fbd9c76c0f2aa33d91bc9412365fd9fb5aa020f1d3db4f13ae67e866f7878400fc74af272505f982e05e9213639e61b81a17a115cacaad59e800d7b76ebfa94efa31b59acd22c2a198041c770584330fd5514bdadd11f24bccb54f3643d8659c20a4656bf43b74ef65d1a664aae21b7f6a77ecf6c23a78621a45945e60e87a4f5771fc25982296379addeffec23e45392ab1d3fed280bc377f874f800833a21406f8e816a130511f5e597ed61ca0132375722cfef42aa761350d64a3a4375217593d57dd5366ca5b16aa250cf54589c43313236dd3ba8d118b2469fb4010ffab25d594d9dfc95f9364e2b09c6195cd1c07badcc803df5ec43b3dec29000a3b14b40438fe81321e466ac92ecdef503d93f46e4fbac8cc6c5ea9178a72d05b427a764eecd00a6fb06743864c584110194c3b6f29457055c16cbd6c70f21338f106d8075608469ba22bb4fda441595f5c69a4c404eb0c260261abd45bc742a0b49c34cf7680b0771efcaa24525380c9ad068173f8b43af24adac21a8742e4ca9a21d0fff4a30deedf529a8d96b90a7d7bd506c1ccf13d7b4f27720ba4a6eaaeed2a03b87ae68fbf86347daa0e5bc649bccad9598264b52e5dbd088de8fc8280278acb9190e91731216b71b1a8390967ce1e9e01c6c4894b7624f7237a7d9895b8641bbce026e3a1ce7138585e694231d86a3cf2cf5a88f8a021d13655ab154eee9123117131edd2ddf07ab6e85d9ecbe9c2f43f072a12d1a34e45f92d5fbac4e000fd2a0fbf8433084f7dece03f18fbc3fa089936ccc6956de53cb3852b46ec32cdb411d3d3bbc7b95d41c38e345a31a5990964cd8622ba277d064ea432aa1b5dbf416a3d517a3afab9d9c5f35737960b15a8000bb66594c25e7a79a75e99130d2890c8b6ada235dfbbc9f5d89bc8a1f94d168a4356299ae328e1dae5727ac567bccd61143f0dcd11163a534b1e22d835872b9d8405ef0a4a0d68fa82c9330e266610780c5b0165e6fd1799a07f079ba9ce3423a391ddc3f652516ba6cd3091a46143b38e99d7079d64560e63aacaf94b736797ec813001a9447d1c29f5e165c790655d42dba701200b02c5a50252135ca17e7b61f946cfd5a530bb49b49d0a888826bef1ad5ec18dbf0cc5a3fd1fcfb8c0257910a3f61f6c66c1618190e4f5fec75fdb833b4ada9a6479727225a09e85ba7d1b6fcf5ee529e223d96b9535b0a7f8da49378540f6275cd044c6a9d35f1526817381f0548d770912c93be30870f8f5f2e18991a0503963ba4f7da026569d5e2db341976743935cd5b2b4c674b815b32b99e5f119479c105c509a0c41ad9c2bc84f2bd11ce41875ee09819cbf61ae0fcafcb37aa14c89fe124be14f8f49d114c2059d51d9afbe12adda04d753f547a829c6cd1de7dd6ca63c4ccfa33d19453abbe2b672639362ae7ba09d08c7aa107bc25986f28af3bd3413d5fbb9467c38a15b78855bc801dee4e1a1ab6d786a6562fc6746dd4d85f4674525a6a0eff1fc487a58cf4cf10da093937876825b9e7cc41a013292d74ee1899c2d53403f60a5e0e277776a83e8beb17429c225fa0bc32f6be4b273fc28766431e2fe3b12f22bb7a48c70eef6148863e2ab3333aa3cd9e793af84c8650de3e39f317d9ee39f941f90808a3a7c9bbacb493d58acb9eb76b9900e3ebc174191171ed5a2b4e78aaeabcddeb4e74ae1dfd8bcc50d4706ba7ec8c8b495dc0757bba7c05ceb566bc87b829d4053242380570a8cd20bd448ed735f89ba56f188ad91192ddbc3774dd2a551fbb25d8641c42e8ea16a76aa2eb6fdff12e194b7121c0ac6786d3770a83f4f36e9d48ef45310acdc61eac71c15c76a0c43102ca42e884c6841fa0e4bff4357c4072bfc0f760bdd7a64cdad209125dd8435d816d82f94422755dd91e43fb27cbf4944e7de2a592b744475d6085aba44379b2692196797484845835a9b4ba657ccce018dc2eb7bda13f60e2f4e30be9ebb43e010029ba96327d041c92143b41f334d57679fc8107317405d725ec9ad300fb2812e480eeef06133d8f589e90b9fcf023d8f1e6f811aa00993ef43588716758f549a72bf459fd2fd60412118a7d3cc2c2bbcb0cdcc65ff1ce51cddd8c60975622aa863656f95ba3a46460aa7a02aa35c6de86bb89de8e9e28ab4edde1b9245dccb8ff743fd60ea25417f45dde82f61649a3d6a690fa1bd03908d9a67c37549d9a8a7cd460d498ca1f7487fdd5b6ff588530cacd2fefaf89c217f5cd8635f6e66ecc46e9fc71ca62fbe1f127f8117f26366bbff6ec00f77b57de4d3f21245d2c1c2808b22acb1e13b27e2d206bcc44bce096e6f08283c124101c4ce9fc965d6b1522cb7c0c26b6dbf72cc990ef3942230013845450a595c65588045c3461ba017f03dbe7cd87f6afe9ce803e08dd3743b2db2b4006f46ff8a2a2c4c73490263e4c36a00e9c3845783c93a1e013cbe96e83c32099990a1906fa555028589b4d5945adb519ab49535a63366dc18834597201fafd8148de9ae5d9fcb865b2fcaabbc00d55ce5838f1b2eb1bda752085826b67888ac0218fd4ef01479826e8c1379a0f7fc132c84cd0e60eed227cc69105016ec699ad71971a4f7102a7625b246c59f90bd8e870ae9eeead195b794fd69aeb82256c911568439352fa91081a557250bca52e98d71cb8b5b25e0e069147b08ea406494576e1e7cb8e85d07edbe59e81a8abbccfb0e9e44446b02034ed2cd604c3acf21459f685551e883598bf27ce8c94d6dabb9b08d88e1b3cf81c8392a98915f054143300d2dd6472ac2959a7c8881caf403b57ac2ebbf040bbf6d7cb65ef1a7fbb4f36e03c5f1cb4f07ba1067bdb1e8ccfe74078ac4936e20a55b09ff9e53e806276c591d72391d19a2099137cab9480aa6bd723782fb23276270ad59776ad860b2f841ed55ec0fe08369f76e49dfa771d99ae6a9f8ed4b4441df390c5536a53a00eafa3ce4b26da9d95349a5548c8ed26c478ed4c20b52fee89e0af4ccf5a3343510e50c40c800c8225d97fb9d871ecc515f9ff58e63485a1f7ca95d04205fa23c89e542897b7b9afd3b393ec8ac280329bb040e32cee7debd04e1eb02d162afc8a527203eb0464d42a563481fdd5838927df75cbd4c649470500bfdb19f338aa08ba6b5e018b405341a963b56b32b93330fd45dc1f6db6dfdc866b424da6fe4fd042db2833eb7f1f9d048f761b2a74815a36a62bda14d44b4d7b7f9e6618626fe7dbca0a1d57c164e8b74ba90183341455eefcb3d8698d5d5c642778a2e7018d49becded7c05f1c5c4d070f7236d4b0c9e8eade1e01f4a764c07f3ad42755e4ed1264e83d167b48493d07a1bdc65e9f3e6e31cf1d6a17a475b1c6c8c4505161225771b64b1a714e56fde9be1a733582f5088870e86b717d45be00c640f90893073cc103e640211e68541f13ee95845355112053312b8c95db79fbfec9dcc3f5c39be286642186374fcac78945f3cc883d34588b1219374fc121bd2521b281ad6cb56829ce37a3f7918a50e700fea8fe359cfd7092a939110bd6953e752af4cf3dc085464e5c77e4bdc8d865dc7fb1a3382e1f96aac67c4ce450eea9fd7e41e0576045836fd2392ea346b30f32a83d83fc6308debade7e73164336dbea8c68a0bfdc87957ff7004b3c76ee90f55c1de2d25cd02e1e952ccc35861850f07cc951db02c45ffa53e4605210e158e8b9d24d6f4255d302748bfd34d013a0449418b80ed0eb4deaa7a09a97b5b4b5c2f1b5748a24275ccde3aa68c9fde826dcd4b43fb24413a6b4315ea4739514d1cd5a32966b5c5ea9c7704cedf9840f40f13cc5475e2856e57e1858fea935a0cbc81c48a37cf01a1d3beaaa50a20129f9aebeaeb2cad63b6c049b83a71593b0bdf3c0bd4a5253c39ffa72511a54926863b7d3f7ff60a90ab6496a0cfd2166c94036fcf77f6c7183b091de813caa373fce0032edd9a850d4e8679e9ce1f228645055f679f2f425c033c26062c6a8ab9e6618a8c7685b56e6bee8c1f55ddc074142d4932443fa54499a7ac82d57e0a2720fc4510cafa5ffd15adea78ea08f0370816576bf63a2c24fae946bc49caaea7521f2d879b55686dd4b18c5e75f4b84ea89ba86c0f306251040411b0a924e40be3628e90d2024e53d7101abc5460565962e38118678d72852d90ed9b5b046a7415dec42a1970a4dbf774b17a5d50623a41767c21ab8a849c00ac6f7946a85481e50186776eee549971068a465ff9bb8bd653650568041e097c8390d59b74178e077c5bada555aec030b4e1018c326171de34163f097c04412dbf0e45cf389ad694e0811323d00795019a57196ea0dd11428b3e6b17328d647a2b7caf597cbb9079cd43a6af12853c6dfd49ce91ccefa1295e359af3206b548741d859c9a441bf30d2ddf7e6c63772fd612514be9b8d6b46e1d2d82578675a3277e6226ffab96fb0e572570ea21d2e32eebe83ef883da68b72f1b37e9d353fbbe243a141bca2c057aab7a244c40213cfea6a538db150a215e2b555e3ef0effb6ba7a84ac230fa514fc60105a0624f55d58396910eb83b3db878eeb014858666f57fc27d8e2fc39db01c239f1c22339ef41617a475505d9b89aa649cbf2cd5f0b89a0e1874e2243e1972eeb74955f8962146e8a5312ef2a872bf2ed27e72aff29c5f79778296ae7100f2fff78a174c10a972de10f65a2a55ea44a62ba5d0da3214603d3e9a64d55f4e64683edf43d82780d129416ec79c8df88db6f7661adafd608d985bf147368d235709d7aeb928c388c7799d13a755765705a0b172bde6f23d4a92e0a9f1f37e205698a67efec5a5ae77ad1b4c36f4db05f90b1cf7cde24395f27e8d020469fe579d1e08da95723c7f7096e04fb97984d064b7bba8d1b560b9945b9402b0dd6bb51fbba5f0eebe50bee3fb7993a288a2c8beb4a78de84d9c502bd56d6bc20261b78db5e25215604147574174f0f3c75a4b3c2a700af5554a3ecf8bb9206396a73c2f55d9c540136ae2cf513653302a49afdc43815ab2ab51b5e0b7340bf2bd18c4811d95f93ec1977842236c647f0be6e3c45c76abfa2b6152dd0c84e6a6937ff5bb00f7e199f3595281eda89d051d6b954c6630ed9462bfd5205e41f552805ba809c64f75a5a40df3401d947b2b76a69caf79a2bbc4c16d7b3a1f254afa1c196f05c6144b86c773c1af0c6744b6f92eb24864b4988ad754c6f13b9c044a7ed2fb4d1a41967c8b7da37a6bd5ab7049716988554b6cbef8df9f54d14e01ea3310e3eda300539ff93a363faf744c09208ca2e9ef48f20835a9c2ed4e02b84be92e0b66635dad2c227e59fd6769aa437df013fcebd284ab2590aac64a3abf543778019b1ada8dfdc97cdf909abf405b4e2d0e78d13e1f3fbce495ea378540b6e9f2056bbc6e2e51c58295ac9a18ecfd0e8b9806cdaa67c2e34e726663085315bd99e53d623f5a9cba48f978bd9a298592b4719b2713d77773bdc18cbfb20548f59d6d653ebebc959afd92df8838e51fc34d3faa756197071827716ead27d45ad458d6f445a1e7e182e6c8fa3c2679c4bf57680860a0836f84bbc73e31eb387d82064a5b75f8bc0fa3a22022b29227aae67889bbfcc3899d6999dbd1493a5d56e910a3c16b2b657a808b7039d1d3dcfa676dfe65abedfc8ec0bed40858dcdcd695aa531165ae0b76b9725836e79a06c28e250cec0edb2bb2583c026406cbab629ca5fecdf7e927dd7b1d67aba12976b8ee59c5bd6e92ffb72b1866575c46394cb2f145eef22295e976db0170fbbe9e7fd025f0a2df9a6d7b74fd768eae6bf92c58715a21d7c2c46e2ebc8a4eb50a77c2a971ec8f800ac69592331226332ba62e6a0ea622e7da9c20b3cd77604282c74aad74647baab681e37713b4e621c9ab1e58ad3fbf2f6da7a28a428cadad5f4a6b4222140299136b231700b0330765bdb9bb3f7d8ddf71ddeb5c6338e274e157e3db9d009a1e2f6caa17a2050d288818f7279ae0d5f7a4ba65d81d8be3980ac0e429c86fcdd20ac5e1bb9be577607e0c49b6fa091693dfa84ac52e5cb37e81f0f30fa6760e4edd8577d1371c1bac3c980253dc067458b04491bb10c8f146a33b34b00e22ab7cb3bd51f12bd108d07b43d3fa4a63c2d7c143d5e93832a782b376ce32d0918b43ccb44f5a95a32749dc0e954edf058493a3c92172b988285728c8ec72a6c94b5edbef02cf03d5cb96aaaffb5545d10c22918e8118fe78110070594e49d073c50d51ad102fcbd25008d9834bde4782fbf293d62faf2e904a1cda60b916d0bdad213554f784621617aa7e171cfbc6fb47b9f91b5161a2c786264e48c07bf605439ca9c50b77c3f9e93863136abeb5d5be56f018bb1141ca87241970715c00af850620ef5e59e2ddeb0e0dc7ef4b6915cba79dfea30b2e7035a279fb2a49417c61142d62a8d45a13580b4341c3d962e5d989ef70d25859b6f5d5f692badfb1ac6c7ca1c63fc5cb019c679f869b9e8b002f300576670e63d22e19b4ff720e6b706f273e5b33b77e3996488f39fdf1ad4ba486998ad71939a0edfe6d3aaf80647f67d9b5a4ac4928d3a43a60079c14e908e64041eed64967761a20cc13dd5f298a08f6f0fb7504c0648a2d93e8a365fe9ba6315b6b3b7b07b5638ecc9160f3dce32ee99cd57359085bf2bb5e3487bb3ec77f4c320bce0e812e86d5a19759b7ce5a4552397206dcb81ce13a4de7bf909ceb6052c9093f9c218f662dea025865f22aaad04095ee62f2c58c6883ddb5c926f307ba8fcaa88c258823ec498adb2260317428fed0ae5188994cf58473e9530ba74f36e3a62955e246e072f6a59c8d310ccb3052b31ddcf21a0419d879c199620786b75e500799eaa5e2150af22d986ebd65b20c3a2094c2e77ead3670717dbc856fd7d81dd5d723391528c97fd10b66668c99c66ce6efec61b2631175c2aa6020db549d5d53e3d3e2f04f32f4eb71c331638aaf8ebbad99baa85816a3b1752967586632d4c2d9d98d3a89653bf237390d854cbdfa2b5016eb318f7026cd568c0b729f8819c91da990cd30a4489c0eb5e5434f85c06ff523a8113180eaaf0b6b7287f53b92321eb4c1420d2a90b9f44df43d37b1dc41c55384f993e48975fa3f322174c222749aa3360b2bdbeae7440c0bfe64b27ddaa55dd284a246fe59de3720a746f6084bdd3cce425706445a824dca2aeb56c3cf4901e4cc4beabf64bbf75fa97f6976e1f2d5c2b86e040af9ff939918e74e9972fe0d6099dcdd53fa135354e2e75fa47c5f8973814498edbdce7aa3dcf9643e4dceef1ccb8f5ec1316daaa93bcfe29bd0b7c6b22de96356fb67fcfea398f11050ab8ad71cfdae7b93ed8bb7397e692ac85ddc2fcd3d5c450d7d2546770b1d3c5f5e41e68692b932e846bda9bddf09de2a9e071f0cdb58be9f332652ba716db699bf60ac349dd52507b749fe92f554a5b21619571f4c212c4f558b5b6739d6dcd62bf39b5f05497cecfbeeca2e81c1bef5e461248be64e94b7e710c252a9a23a040a955f5973e85c3915c173a0c32113d2bd48350ad00d2d1d8216783ce413eb70f723e4547076ab0ed73c573c86c2c68650ff9b734df7cfaa639ac802edca594993e2dcc9646243b8d2704f536b0cc53d4506732d4c61c933a2e51b1b660eaae47c90a88eacc3e166fa70cf86d7fe2989417e92cbc18d00025465a9caadeff25cf6e8f4e586dc61c411f4577593b185daf499d15d579df1f65ca69fa97ad2e3150527946c2cfc6a78d30c4977354b66ee28138dad2b71dd9f39b057a572fdc323c4d68bc86299de1f8fcfcdc4653c414a0963e7fccf31ed165d2d8ac31d5a76a12728867dce531efffa7f018c458e74aa2451813210f55cb31f9f4461793c38e461ccdb3c771e660445e4d52f48dfa47b67e5d42af157258423f33b0cbcbda95a7f9a2a506f82d3b60e4b8c6590dfcc58425e70104af77c5432d4c7c09bdfb4bbea157126076111f8ad3dbd2f0a21eece6cb30fc45f5501e6a3e43770e001778a2fd1ad0ac11189e6579a8397d72a56a08bb4e831f5d633352199a2508cb3340fbaeb1742e9c82a61fa43a989f34f573d6375094d2fbbefc89f0aef839b3574bdde9277ed344f4cf7b33eff28dfbee5d15201fe14b6528e379d966774fa274a9727e9fc0e8619082e9d170f5430e1c29b17c5dc36d9b205e507e221f6d63fe236ead3ddf4a47eb48bca6d540561f4ad4f4b2361309979a396de87213322dc9453027ff95cdb10ac4c32499acd8d818d9cee2bf672ebce5da8f0838fd92de25318d5057ec8f400fcec07ef855c5f0d99471e5bb99e06aa1b803cc9ec88857a7e620932df59d717bd8bc197a89d8f68d3bcc920c71819c3a444f5fa780fda619effd099fde68c89131cbf235ce921f51d6d251ff8e7e12a85450ee57d08b48f37e84461eeb3e8d4980fd0211af2817d0689481a095669529f3f148598de290c596e1170b3630ddc720ce8cb604313ddab956d5c4d98689cf70f70c534354efc055fe88200545bad3bd850b8dee3864fa64136408a7047889f66504e8611fd188435708da73596c0f7ae8d91817903754114cedb77eb54089f202150d9c196480d38e2bc1498ea23a4735bc1c5d212c1480rootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootpython310-documentation-3.10.15-150400.4.57.1.src.rpmpython310-docpython310-doc(aarch-64)    rpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsXz)3.0.4-14.6.0-14.0-15.2-14.14.3f@fըf@fafIf@ffz@f"\fere!@eZe؈eԔ@ee4@dd˖d@dD@d ddJcdJcd@c>@c@cӼcck@cc@cRcOc'@cb@bbnb?bb@bzSbs@b?@b<]@b@b a@a@a@a@aX@a@aa@af@a\>@a,@a(a @a` @` @`g@``r```@`N@`/@`"y@`!'`_T__԰_ _v@_u@_P_|\@_m_O@_N7_>e__@__A@___ @_X@_X@_X@_X@_X@_X@_X@_X@_X@^z^z^z^z^)@^^^^@^(@^3^@^'@^H^|@^h^`^>^>^8 @^8 @^ P@^[]f@]f@]]]]W]]c@]]]z@](]]]@]V]w@]i]g@]W@]Ik]6]!]G@\\9\~\@\\@\7\+@\\s\b@\b@\Q\C@\4\4\,\2\\\\&@[[@[^[ @[ͻ[ͻ[$@[ā@[/[[@["@[D[;e@[6@[4ZnZ@Z@ZZԐ@Zx@Z@Z Z Z Zz@ZxG@Zhu@Z`@ZLZ"Z }YYX@Yo@YY@YY@Y@YP@YI@XӸXƉXqX@Xv@W@V@Vm@VVhVCV }@U@U@U@U@UU[%UT@UT@UCjU@TeTBV@T;mcepl@cepl.eumcepl@cepl.eumcepl@cepl.eumcepl@cepl.eumcepl@cepl.eumcepl@cepl.eudaniel.garcia@suse.commcepl@cepl.eumcepl@suse.commcepl@cepl.eumcepl@cepl.eumcepl@cepl.eupmonreal@suse.commcepl@suse.commcepl@cepl.eudaniel.garcia@suse.commcepl@cepl.eudaniel.garcia@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.comkukuk@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.comschwab@suse.demcepl@suse.comdmueller@suse.commcepl@suse.comcoolo@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.comdavid.anes@suse.comsteven.kowalik@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.comdimstar@opensuse.orgmcepl@suse.commcepl@suse.comschwab@suse.deschwab@suse.demcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.comdmueller@suse.comdcermak@suse.commcepl@suse.commcepl@suse.comcode@bnavigator.demcepl@suse.commcepl@suse.comsteven.kowalik@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.comcode@bnavigator.demcepl@suse.commcepl@suse.comdimstar@opensuse.orgmcepl@suse.comdimstar@opensuse.orgmcepl@suse.commcepl@suse.comschwab@suse.decallumjfarmer13@gmail.commcepl@suse.comcallumjfarmer13@gmail.comcallumjfarmer13@gmail.comtchvatal@suse.comtchvatal@suse.commcepl@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.commcepl@suse.comtchvatal@suse.commcepl@suse.comtchvatal@suse.commcepl@suse.comdmueller@suse.comandreas.stieger@gmx.decallumjfarmer13@gmail.commcepl@suse.commcepl@suse.comschwab@suse.demcepl@suse.commcepl@suse.commcepl@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.commliska@suse.czmcepl@suse.commcepl@suse.comtchvatal@suse.commcepl@suse.comstefan.bruens@rwth-aachen.destefan.bruens@rwth-aachen.demcepl@suse.commcepl@suse.commgorse@suse.comtchvatal@suse.commcepl@suse.commcepl@suse.commcepl@suse.comtchvatal@suse.commcepl@suse.combwiedemann@suse.comtchvatal@suse.commcepl@suse.comguillaume.gardet@opensuse.orgjayvdb@gmail.commcepl@suse.commcepl@suse.commcepl@suse.comschwab@suse.demcepl@suse.commliska@suse.czmcepl@suse.commcepl@suse.commcepl@suse.comjayvdb@gmail.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.comtchvatal@suse.comtchvatal@suse.commcepl@suse.comtoddrme2178@gmail.commcepl@suse.comjengelh@inai.demcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.comtchvatal@suse.commcepl@suse.commcepl@suse.commcepl@suse.comtchvatal@suse.commcepl@suse.commcepl@suse.commcepl@suse.comtchvatal@suse.commimi.vx@gmail.comhpj@urpla.netjengelh@inai.detchvatal@suse.comtchvatal@suse.comtchvatal@suse.commimi.vx@gmail.comadam@mizerski.plschwab@suse.debwiedemann@suse.comtchvatal@suse.comtchvatal@suse.comnormand@linux.vnet.ibm.comjmatejek@suse.comnormand@linux.vnet.ibm.comjmatejek@suse.comdimstar@opensuse.orgmimi.vx@gmail.comjmatejek@suse.comdmueller@suse.comvcizek@suse.comjengelh@inai.deschwab@suse.dejmatejek@suse.comkukuk@suse.dejmatejek@suse.comjmatejek@suse.comasn@cryptomilk.orgjmatejek@suse.comjmatejek@suse.combwiedemann@suse.comjmatejek@suse.comjmatejek@suse.comjmatejek@suse.comschwab@suse.detoddrme2178@gmail.comarichardson.kde@gmail.comtoddrme2178@gmail.comtoddrme2178@gmail.comjmatejek@suse.comdimstar@opensuse.orgjmatejek@suse.comfisiu@opensuse.orgdimstar@opensuse.orgmeissner@suse.comschwab@suse.dejmatejek@suse.comjmatejek@suse.commailaender@opensuse.orgrguenther@suse.comp.drouand@gmail.comcrrodriguez@opensuse.orgjmatejek@suse.com- Update to 3.10.15: - Tests - gh-112769: The tests now correctly compare zlib version when :const:`zlib.ZLIB_RUNTIME_VERSION` contains non-integer suffixes. For example zlib-ng defines the version as ``1.3.0.zlib-ng``. - gh-117187: Fix XML tests for vanilla Expat <2.6.0. - gh-100454: Fix SSL tests CI for OpenSSL 3.1+ - Security - gh-123678: Upgrade libexpat to 2.6.3 - gh-121957: Fixed missing audit events around interactive use of Python, now also properly firing for ``python -i``, as well as for ``python -m asyncio``. The event in question is ``cpython.run_stdin``. - gh-122133: Authenticate the socket connection for the ``socket.socketpair()`` fallback on platforms where ``AF_UNIX`` is not available like Windows. Patch by Gregory P. Smith and Seth Larson . Reported by Ellie - gh-121285: Remove backtracking from tarfile header parsing for ``hdrcharset``, PAX, and GNU sparse headers (bsc#1230227, CVE-2024-6232). - gh-118486: :func:`os.mkdir` on Windows now accepts * mode* of ``0o700`` to restrict the new directory to the current user. This fixes CVE-2024-4030 affecting :func:`tempfile.mkdtemp` in scenarios where the base temporary directory is more permissive than the default. - gh-116741: Update bundled libexpat to 2.6.2 - Library - gh-123693: Use platform-agnostic behavior when computing ``zipfile.Path.name``. - gh-123270: Applied a more surgical fix for malformed payloads in :class:`zipfile.Path` causing infinite loops (gh-122905) without breaking contents using legitimate characters (bsc#1229704, CVE-2024-8088). - gh-123067: Fix quadratic complexity in parsing ``"``-quoted cookie values with backslashes by :mod:`http.cookies` (bsc#1229596, CVE-2024-7592). - gh-122905: :class:`zipfile.Path` objects now sanitize names from the zipfile. - gh-121650: :mod:`email` headers with embedded newlines are now quoted on output. The :mod:`~email.generator` will now refuse to serialize (write) headers that are unsafely folded or delimited; see :attr:`~email.policy.Policy.verify_generated_headers`. (Contributed by Bas Bloemsaat and Petr Viktorin in gh-121650.; CVE-2024-6923, bsc#1228780). - gh-113171: Fixed various false positives and false negatives in * :attr:`ipaddress.IPv4Address.is_private` (see these docs for details) * :attr:`ipaddress.IPv4Address.is_global` * :attr:`ipaddress.IPv6Address.is_private` * :attr:`ipaddress.IPv6Address.is_global` Also in the corresponding :class:`ipaddress.IPv4Network` and :class:`ipaddress.IPv6Network` attributes. Fixes bsc#1226448 (CVE-2024-4032). - gh-102988: :func:`email.utils.getaddresses` and :func:`email.utils.parseaddr` now return ``('', '')`` 2-tuples in more situations where invalid email addresses are encountered instead of potentially inaccurate values. Add optional *strict* parameter to these two functions: use ``strict=False`` to get the old behavior, accept malformed inputs. ``getattr(email.utils, 'supports_strict_parsing', False)`` can be use to check if the *strict* paramater is available. Patch by Thomas Dwyer and Victor Stinner to improve the CVE-2023-27043 fix (bsc#1210638). - gh-67693: Fix :func:`urllib.parse.urlunparse` and :func:`urllib.parse.urlunsplit` for URIs with path starting with multiple slashes and no authority. Based on patch by Ashwin Ramaswami. - Core and Builtins - gh-112275: A deadlock involving ``pystate.c``'s ``HEAD_LOCK`` in ``posixmodule.c`` at fork is now fixed. Patch by ChuBoning based on previous Python 3.12 fix by Victor Stinner. - Remove upstreamed patches: - CVE-2023-27043-email-parsing-errors.patch - CVE-2024-4032-private-IP-addrs.patch - CVE-2024-6923-email-hdr-inject.patch - CVE-2024-8088-inf-loop-zipfile_Path.patch - Add sphinx-802.patch to overcome working both with the most recent and older Sphinx versions.- Add gh120226-fix-sendfile-test-kernel-610.patch to avoid failing test_sendfile_close_peer_in_the_middle_of_receiving tests on Linux >= 6.10 (GH-120227).- Add CVE-2024-8088-inf-loop-zipfile_Path.patch to prevent malformed payload to cause infinite loops in zipfile.Path (bsc#1229704, CVE-2024-8088).- Add CVE-2024-6923-email-hdr-inject.patch to prevent email header injection due to unquoted newlines (bsc#1228780, CVE-2024-6923). - Adding bso1227999-reproducible-builds.patch fixing bsc#1227999 adding reproducibility patches from gh#python/cpython!121872 and gh#python/cpython!121883. - %{profileopt} variable is set according to the variable %{do_profiling} (bsc#1227999) - Update bluez-devel-vendor.tar.xz- Remove %suse_update_desktop_file macro as it is not useful any more.- Stop using %%defattr, it seems to be breaking proper executable attributes on /usr/bin/ scripts (bsc#1227378).- Update F00251-change-user-install-location.patch to make pip and modern tools install directly in /usr/local when used by the user. bsc#1225660- Add CVE-2024-4032-private-IP-addrs.patch to fix bsc#1226448 (CVE-2024-4032) rearranging definition of private v global IP addresses.- Add CVE-2023-52425-libexpat-2.6.0-backport.patch to fix tests with patched libexpat below 2.6.0 that doesn't update the version number, just in SLE. - Remove old-libexpat.patch, of course.- Add old-libexpat.patch making the test suite work with libexpat < 2.6.0 (gh#python/cpython#117187).- Because of bsc#1189495 we have to revert use of %autopatch.- Update 3.10.14: - gh-115399 & gh-115398: bundled libexpat was updated to 2.6.0 to address CVE-2023-52425, and control of the new reparse deferral functionality was exposed with new APIs (bsc#1219559). - gh-109858: zipfile is now protected from the “quoted-overlap” zipbomb to address CVE-2024-0450. It now raises BadZipFile when attempting to read an entry that overlaps with another entry or central directory. (bsc#1221854) - gh-91133: tempfile.TemporaryDirectory cleanup no longer dereferences symlinks when working around file system permission errors to address CVE-2023-6597 (bsc#1219666) - gh-115197: urllib.request no longer resolves the hostname before checking it against the system’s proxy bypass list on macOS and Windows - gh-81194: a crash in socket.if_indextoname() with a specific value (UINT_MAX) was fixed. Relatedly, an integer overflow in socket.if_indextoname() on 64-bit non-Windows platforms was fixed - gh-113659: .pth files with names starting with a dot or containing the hidden file attribute are now skipped - gh-102388: iso2022_jp_3 and iso2022_jp_2004 codecs no longer read out of bounds - gh-114572: ssl.SSLContext.cert_store_stats() and ssl.SSLContext.get_ca_certs() now correctly lock access to the certificate store, when the ssl.SSLContext is shared across multiple threads (bsc#1226447, CVE-2024-0397) - Remove upstreamed patches: - CVE-2023-6597-TempDir-cleaning-symlink.patch - libexpat260.patch - Readjust patches: - F00251-change-user-install-location.patch - fix_configure_rst.patch - python-3.3.0b1-localpath.patch - skip-test_pyobject_freed_is_freed.patch - Port to %autosetup and %autopatch.- Use the system-wide crypto-policies [bsc#1211301] * Use the system default cipher list instead of hardcoded values * Add the --with-ssl-default-suites=openssl configure option- (bsc#1219666, CVE-2023-6597) Add CVE-2023-6597-TempDir-cleaning-symlink.patch (patch from gh#python/cpython!99930) fixing symlink bug in cleanup of tempfile.TemporaryDirectory.- Remove double definition of /usr/bin/idle%%{version} in %%files.- Add upstream patch libexpat260.patch, Fix tests for XMLPullParser with Expat 2.6.0, gh#python/cpython#115289- Refresh CVE-2023-27043-email-parsing-errors.patch to gh#python/cpython!111116, fixing bsc#1210638 (CVE-2023-27043). - Thus we can remove Revert-gh105127-left-tests.patch, which is now useless.- Add fix-sphinx-72.patch to make it work with latest sphinx version gh#python/cpython#97950 - Update to 3.10.13 (bsc#1214692): - gh-108310: Fixed an issue where instances of ssl.SSLSocket were vulnerable to a bypass of the TLS handshake and included protections (like certificate verification) and treating sent unencrypted data as if it were post-handshake TLS encrypted data. Security issue reported as CVE-2023-40217 by Aapo Oksman. Patch by Gregory P. Smith. - gh-107845: tarfile.data_filter() now takes the location of symlinks into account when determining their target, so it will no longer reject some valid tarballs with LinkOutsideDestinationError. - gh-107565: Update multissltests and GitHub CI workflows to use OpenSSL 1.1.1v, 3.0.10, and 3.1.2. - gh-99612: Fix PyUnicode_DecodeUTF8Stateful() for ASCII-only data: * consumed was not set.- Add Revert-gh105127-left-tests.patch (gh#python/cpython!106941) partially reverting CVE-2023-27043-email-parsing-errors.patch, because of the regression in gh#python/cpython#106669.- Add gh-78214-marshal_stabilize_FLAG_REF.patch to marshal.c for stabilizing FLAG_REF usage (required for reproduceability; bsc#1213463).- (bsc#1210638, CVE-2023-27043) Add CVE-2023-27043-email-parsing-errors.patch, which detects email address parsing errors and returns empty tuple to indicate the parsing error (old API).- Update to 3.10.12: - gh-103142: The version of OpenSSL used in Windows and Mac installers has been upgraded to 1.1.1u to address CVE-2023-2650, CVE-2023-0465, CVE-2023-0466, CVE-2023-0464, as well as CVE-2023-0286, CVE-2022-4303, and CVE-2022-4303 fixed previously in 1.1.1t (gh-101727). - gh-102153: urllib.parse.urlsplit() now strips leading C0 control and space characters following the specification for URLs defined by WHATWG in response to CVE-2023-24329 (bsc#1208471). - gh-99889: Fixed a security in flaw in uu.decode() that could allow for directory traversal based on the input if no out_file was specified. - gh-104049: Do not expose the local on-disk location in directory indexes produced by http.client.SimpleHTTPRequestHandler. - gh-103935: trace.__main__ now uses io.open_code() for files to be executed instead of raw open(). - gh-102953: The extraction methods in tarfile, and shutil.unpack_archive(), have a new filter argument that allows limiting tar features than may be surprising or dangerous, such as creating files outside the destination directory. See Extraction filters for details (fixing CVE-2007-4559, bsc#1203750). - Remove upstreamed patches: - CVE-2023-24329-blank-URL-bypass.patch - CVE-2007-4559-filter-tarfile_extractall.patch- Add bpo-37596-make-set-marshalling.patch making marshalling of `set` and `frozenset` deterministic (bsc#1211765).- Add CVE-2007-4559-filter-tarfile_extractall.patch to fix CVE-2007-4559 (bsc#1203750) by adding the filter for tarfile.extractall (PEP 706).- Update to 3.10.11: - Core and Builtins - gh-102416: Do not memoize incorrectly automatically generated loop rules in the parser. Patch by Pablo Galindo. - gh-102356: Fix a bug that caused a crash when deallocating deeply nested filter objects. Patch by Marta Gómez Macías. - gh-102397: Fix segfault from race condition in signal handling during garbage collection. Patch by Kumar Aditya. - gh-102126: Fix deadlock at shutdown when clearing thread states if any finalizer tries to acquire the runtime head lock. Patch by Kumar Aditya. - gh-102027: Fix SSE2 and SSE3 detection in _blake2 internal module. Patch by Max Bachmann. - gh-101967: Fix possible segfault in positional_only_passed_as_keyword function, when new list created. - gh-101765: Fix SystemError / segmentation fault in iter __reduce__ when internal access of builtins.__dict__ keys mutates the iter object. - Library - gh-102947: Improve traceback when dataclasses.fields() is called on a non-dataclass. Patch by Alex Waygood - gh-101979: Fix a bug where parentheses in the metavar argument to argparse.ArgumentParser.add_argument() were dropped. Patch by Yeojin Kim. - gh-102179: Fix os.dup2() error message for negative fds. - gh-101961: For the binary mode, fileinput.hookcompressed() doesn’t set the encoding value even if the value is None. Patch by Gihwan Kim. - gh-101936: The default value of fp becomes io.BytesIO if HTTPError is initialized without a designated fp parameter. Patch by Long Vo. - gh-101566: In zipfile, apply fix for extractall on the underlying zipfile after being wrapped in Path. - gh-101997: Upgrade pip wheel bundled with ensurepip (pip 23.0.1) - gh-101892: Callable iterators no longer raise SystemError when the callable object exhausts the iterator but forgets to either return a sentinel value or raise StopIteration. - gh-97786: Fix potential undefined behaviour in corner cases of floating-point-to-time conversions. - gh-101517: Fixed bug where bdb looks up the source line with linecache with a lineno=None, which causes it to fail with an unhandled exception. - gh-101673: Fix a pdb bug where ll clears the changes to local variables. - gh-96931: Fix incorrect results from ssl.SSLSocket.shared_ciphers() - gh-88233: Correctly preserve “extra” fields in zipfile regardless of their ordering relative to a zip64 “extra.” - gh-95495: When built against OpenSSL 3.0, the ssl module had a bug where it reported unauthenticated EOFs (i.e. without close_notify) as a clean TLS-level EOF. It now raises SSLEOFError, matching the behavior in previous versions of OpenSSL. The options attribute on SSLContext also no longer includes OP_IGNORE_UNEXPECTED_EOF by default. This option may be set to specify the previous OpenSSL 3.0 behavior. - gh-94440: Fix a concurrent.futures.process bug where ProcessPoolExecutor shutdown could hang after a future has been quickly submitted and canceled. - Documentation - gh-103112: Add docstring to http.client.HTTPResponse.read() to fix pydoc output. - gh-85417: Update cmath documentation to clarify behaviour on branch cuts. - gh-97725: Fix asyncio.Task.print_stack() description for file=None. Patch by Oleg Iarygin. - Tests - gh-102980: Improve test coverage on pdb. - gh-102537: Adjust the error handling strategy in test_zoneinfo.TzPathTest.python_tzpath_context. Patch by Paul Ganssle. - gh-101377: Improved test_locale_calendar_formatweekday of calendar. - Build - gh-102711: Fix -Wstrict-prototypes compiler warnings. - Removed upstreamed: - invalid-json.patch- Add invalid-json.patch fixing invalid JSON in Doc/howto/logging-cookbook.rst (somehow similar to gh#python/cpython#102582).- Update to 3.10.10: Bug fixes and regressions handling, no change of behaviour and no security bugs fixed. - Add CVE-2023-24329-blank-URL-bypass.patch (CVE-2023-24329, bsc#1208471) blocklists bypass via the urllib.parse component when supplying a URL that starts with blank characters- Add provides for readline and sqlite3 to the main Python package.- Disable NIS for new products, it's deprecated and gets removed- Update to 3.10.9: - python -m http.server no longer allows terminal control characters sent within a garbage request to be printed to the stderr server lo This is done by changing the http.server BaseHTTPRequestHandler .log_message method to replace control characters with a \xHH hex escape before printin - Avoid publishing list of active per-interpreter audit hooks via the gc module - The IDNA codec decoder used on DNS hostnames by socket or asyncio related name resolution functions no longer involves a quadratic algorithm. This prevents a potential CPU denial of service if an out-of-spec excessive length hostname involving bidirectional characters were decoded. Some protocols such as urllib http 3xx redirects potentially allow for an attacker to supply such a name. - Update bundled libexpat to 2.5.0 - Port XKCP’s fix for the buffer overflows in SHA-3 (CVE-2022-37454). - On Linux the multiprocessing module returns to using filesystem backed unix domain sockets for communication with the forkserver process instead of the Linux abstract socket namespace. Only code that chooses to use the “forkserver” start method is affected Abstract sockets have no permissions and could allow any user on the system in the same network namespace (often the whole system) to inject code into the multiprocessing forkserver process. This was a potential privilege escalation. Filesystem based socket permissions restrict this to the forkserver process user as was the default in Python 3.8 and earlier This prevents Linux CVE-2022-42919 - Fix a reference bug in _imp.create_builtin() after the creation of the first sub-interpreter for modules builtins and sys. Patch by Victor Stinner. - Fixed a bug that was causing a buffer overflow if the tokenizer copies a line missing the newline caracter from a file that is as long as the available tokenizer buffer. Patch by Pablo galindo - Update faulthandler to emit an error message with the proper unexpected signal number. Patch by Dong-hee Na. - Fix subscription of types.GenericAlias instances containing bare generic types: for example tuple[A, T][int], where A is a generic type, and T is a type variable. - Fix detection of MAC addresses for uuid on certain OSs. Patch by Chaim Sanders - Print exception class name instead of its string representation when raising errors from ctypes calls. - Allow pdb to locate source for frozen modules in the standard library. - Raise ValueError instead of SystemError when methods of uninitialized io.IncrementalNewlineDecoder objects are called. Patch by Oren Milman. - Fix a possible assertion failure in io.FileIO when the opener returns an invalid file descriptor. - Also escape s in the http.server BaseHTTPRequestHandler.log_message so that it is technically possible to parse the line and reconstruct what the original data was. Without this a xHH is ambiguious as to if it is a hex replacement we put in or the characters r”x” came through in the original request line. - asyncio.get_event_loop() now only emits a deprecation warning when a new event loop was created implicitly. It no longer emits a deprecation warning if the current event loop was set. - Fix bug when calling trace.CoverageResults with valid infile. - Fix a bug in handling class cleanups in unittest.TestCase. Now addClassCleanup() uses separate lists for different TestCase subclasses, and doClassCleanups() only cleans up the particular class. - Release the GIL when calling termios APIs to avoid blocking threads. - Fix ast.increment_lineno() to also cover ast.TypeIgnore when changing line numbers. - Fixed bug where inspect.signature() reported incorrect arguments for decorated methods. - Fix SystemError in ctypes when exception was not set during __initsubclass__. - Fix statistics.NormalDist pickle with 0 and 1 protocols. - Update the bundled copy of pip to version 22.3.1. - Apply bugfixes from importlib_metadata 4.11.4, namely: In PathDistribution._name_from_stem, avoid including parts of the extension in the result. In PathDistribution._normalized_name, ensure names loaded from the stem of the filename are also normalized, ensuring duplicate entry points by packages varying only by non-normalized name are hidden. - Clean up refleak on failed module initialisation in _zoneinfo - Clean up refleaks on failed module initialisation in in _pickle - Clean up refleak on failed module initialisation in _io. - Fix memory leak in math.dist() when both points don’t have the same dimension. Patch by Kumar Aditya. - Fix argument typechecks in _overlapped.WSAConnect() and _overlapped.Overlapped.WSASendTo() functions. - Fix internal error in the re module which in very rare circumstances prevented compilation of a regular expression containing a conditional expression without the “else” branch. - Fix asyncio.StreamWriter.drain() to call protocol.connection_lost callback only once on Windows. - Add a mutex to unittest.mock.NonCallableMock to protect concurrent access to mock attributes. - Fix hang on Windows in subprocess.wait_closed() in asyncio with ProactorEventLoop. Patch by Kumar Aditya. - Fix infinite loop in unittest when a self-referencing chained exception is raised - tkinter.Text.count() raises now an exception for options starting with “-” instead of silently ignoring them. - On uname_result, restored expectation that _fields and _asdict would include all six properties including processor. - Update the bundled copies of pip and setuptools to versions 22.3 and 65.5.0 respectively. - Fix bug in urllib.parse.urlparse() that causes certain port numbers containing whitespace, underscores, plus and minus signs, or non-ASCII digits to be incorrectly accepted. - Allow venv to pass along PYTHON* variables to ensurepip and pip when they do not impact path resolution - On macOS, fix a crash in syslog.syslog() in multi-threaded applications. On macOS, the libc syslog() function is not thread-safe, so syslog.syslog() no longer releases the GIL to call it. Patch by Victor Stinner. - Allow BUILTINS to be a valid field name for frozen dataclasses. - Make sure patch.dict() can be applied on async functions. - To avoid apparent memory leaks when asyncio.open_connection() raises, break reference cycles generated by local exception and future instances (which has exception instance as its member var). Patch by Dong Uk, Kang. - Prevent error when activating venv in nested fish instances. - Restrict use of sockets instead of pipes for stdin of subprocesses created by asyncio to AIX platform only. - shutil.copytree() now applies the ignore_dangling_symlinks argument recursively. - Fix IndexError in argparse.ArgumentParser when a store_true action is given an explicit argument. - Document that calling variadic functions with ctypes requires special care on macOS/arm64 (and possibly other platforms). - Skip test_normalization() of test_unicodedata if it fails to download NormalizationTest.txt file from pythontest.net. Patch by Victor Stinner. - Some C API tests were moved into the new Lib/test/test_capi/ directory. - Fix -Wimplicit-int, -Wstrict-prototypes, and - Wimplicit-function-declaration compiler warnings in configure checks. - Fix -Wimplicit-int compiler warning in configure check for PTHREAD_SCOPE_SYSTEM. - Specify the full path to the source location for make docclean (needed for cross-builds). - Fix NO_MISALIGNED_ACCESSES being not defined for the SHA3 extension when HAVE_ALIGNED_REQUIRED is set. Allowing builds on hardware that unaligned memory accesses are not allowed. - Fix handling of module docstrings in Tools/i18n/pygettext.py. - Remove upstreamed patches: - 98437-sphinx.locale._-as-gettext-in-pyspecific.patch - CVE-2015-20107-mailcap-unsafe-filenames.patch - CVE-2022-42919-loc-priv-mulitproc-forksrv.patch - CVE-2022-45061-DoS-by-IDNA-decode.patch- Add CVE-2022-45061-DoS-by-IDNA-decode.patch to avoid CVE-2022-45061 (bsc#1205244) allowing DoS by IDNA decoding extremely long domain names.- Add CVE-2022-42919-loc-priv-mulitproc-forksrv.patch to avoid CVE-2022-42919 (bsc#1204886) avoiding Linux specific local privilege escalation via the multiprocessing forkserver start method.- Add 98437-sphinx.locale._-as-gettext-in-pyspecific.patch to allow building of documentation with the latest Sphinx 5.3.0 (gh#python/cpython#98366).- Update to 3.10.8: - Fix multiplying a list by an integer (list *= int): detect the integer overflow when the new allocated length is close to the maximum size. - Fix a shell code injection vulnerability in the get-remote-certificate.py example script. The script no longer uses a shell to run openssl commands. (originally filed as CVE-2022-37460, later withdrawn) - Fix command line parsing: reject -X int_max_str_digits option with no value (invalid) when the PYTHONINTMAXSTRDIGITS environment variable is set to a valid limit. - When ValueError is raised if an integer is larger than the limit, mention the sys.set_int_max_str_digits() function in the error message. - The deprecated mailcap module now refuses to inject unsafe text (filenames, MIME types, parameters) into shell commands. Instead of using such text, it will warn and act as if a match was not found (or for test commands, as if the test failed). - os.sched_yield() now release the GIL while calling sched_yield(2). - Bugfix: PyFunction_GetAnnotations() should return a borrowed reference. It was returning a new reference. - Fixed a missing incref/decref pair in Exception.__setstate__(). - Fix overly-broad source position information for chained comparisons used as branching conditions. - Fix undefined behaviour in _testcapimodule.c. - At Python exit, sometimes a thread holding the GIL can wait forever for a thread (usually a daemon thread) which requested to drop the GIL, whereas the thread already exited. To fix the race condition, the thread which requested the GIL drop now resets its request before exiting. - Fix a possible assertion failure, fatal error, or SystemError if a line tracing event raises an exception while opcode tracing is enabled. - Fix undefined behaviour in C code of null pointer arithmetic. - Do not expose KeyWrapper in _functools. - When loading a file with invalid UTF-8 inside a multi-line string, a correct SyntaxError is emitted. - Disable incorrect pickling of the C implemented classmethod descriptors. - Fix AttributeError missing name and obj attributes in . object.__getattribute__() bpo-42316: Document some places . where an assignment expression needs parentheses . - Wrap network errors consistently in urllib FTP support, so the test suite doesn’t fail when a network is available but the public internet is not reachable. - Fixes AttributeError when subprocess.check_output() is used with argument input=None and either of the arguments encoding or errors are used. - Avoid spurious tracebacks from asyncio when default executor cleanup is delayed until after the event loop is closed (e.g. as the result of a keyboard interrupt). - Avoid a crash in the C version of asyncio.Future.remove_done_callback() when an evil argument is passed. - Remove tokenize.NL check from tabnanny. - Make Semaphore run faster. - Fix generation of the default name of tkinter.Checkbutton. Previously, checkbuttons in different parent widgets could have the same short name and share the same state if arguments “name” and “variable” are not specified. Now they are globally unique. - Update bundled libexpat to 2.4.9 - Fix race condition in asyncio where process_exited() called before the pipe_data_received() leading to inconsistent output. - Fixed check in multiprocessing.resource_tracker that guarantees that the length of a write to a pipe is not greater than PIPE_BUF. - Corrected type annotation for dataclass attribute pstats.FunctionProfile.ncalls to be str. - Fix the faulthandler implementation of faulthandler.register(signal, chain=True) if the sigaction() function is not available: don’t call the previous signal handler if it’s NULL. - In inspect, fix overeager replacement of “typing.” in formatting annotations. - Fix asyncio.streams.StreamReaderProtocol to keep a strong reference to the created task, so that it’s not garbage collected - Fix handling compiler warnings (SyntaxWarning and DeprecationWarning) in codeop.compile_command() when checking for incomplete input. Previously it emitted warnings and raised a SyntaxError. Now it always returns None for incomplete input without emitting any warnings. - Fixed flickering of the turtle window when the tracer is turned off. - Allow asyncio.StreamWriter.drain() to be awaited concurrently by multiple tasks. - Fix broken asyncio.Semaphore when acquire is cancelled. - Fix ast.unparse() when ImportFrom.level is None - Improve performance of urllib.request.getproxies_environment when there are many environment variables - Fix ! in c domain ref target syntax via a conf.py patch, so it works as intended to disable ref target resolution. - Clarified the conflicting advice given in the ast documentation about ast.literal_eval() being “safe” for use on untrusted input while at the same time warning that it can crash the process. The latter statement is true and is deemed unfixable without a large amount of work unsuitable for a bugfix. So we keep the warning and no longer claim that literal_eval is safe. - Update tutorial introduction output to use 3.10+ SyntaxError invalid range. - Remove upstreamed test-int-timing.patch.- test-int-timing.patch: gh-96710: Make the test timing more lenient for the int/str DoS regression test. (#96717)- Update to 3.10.7: - Fix for CVE-2020-10735 (bsc#1203125) Converting between int and str in bases other than 2 (binary), 4, 8 (octal), 16 (hexadecimal), or 32 such as base 10 (decimal) now raises a ValueError if the number of digits in string form is above a limit to avoid potential denial of service attacks due to the algorithmic complexity. - Other bug fixes: - Fixed a bug that caused _PyCode_GetExtra to return garbage for negative indexes. - Fix format string in _PyPegen_raise_error_known_location that can lead to memory corruption on some 64bit systems. The function was building a tuple with i (int) instead of n (Py_ssize_t) for Py_ssize_t arguments. - Fix misleading contents of error message when converting an all-whitespace string to float. - coroutine.throw() now properly initializes the frame.f_back when resuming a stack of coroutines. This allows e.g. traceback.print_stack() to work correctly when an exception (such as CancelledError) is thrown into a coroutine. - ast.parse() will no longer parse function definitions with positional-only params when passed feature_version less than (3, 8). - Correct conversion of numbers.Rational’s to float. - Fix a performance regression in logging TimedRotatingFileHandler. Only check for special files when the rollover time has passed. - Fix unused localName parameter in the Attr class in xml.dom.minidom. - Update bundled pip to 22.2.2. - Fail gracefully if EPERM or ENOSYS is raised when loading crypt methods. This may happen when trying to load MD5 on a Linux kernel with FIPS enabled. - Improve discoverability of the higher level concurrent.futures module by providing clearer links from the lower level threading and multiprocessing modules. - Update the default RFC base URL from deprecated tools.ietf.org to datatracker.ietf.org - Fix stylesheet not working in Windows CHM htmlhelp docs. - The documentation now lists which members of C structs are part of the Limited API/Stable ABI. - Mitigate the inherent race condition from using find_unused_port() in testSockName() by trying to find an unused port a few times before failing. - Build and test with OpenSSL 1.1.1q - Document handling of extensions in Save As dialogs. - Include prompts when saving Shell (interactive input and output).- fix import_failed.map to refer to the python 3.10 package versions- Update to 3.10.6: - gh-87389: http.server: Fix an open redirection vulnerability in the HTTP server when an URI path starts with //. Vulnerability discovered, and initial fix proposed, by Hamza Avvan. (bsc#1202624, CVE-2021-28861) - gh-92888: Fix memoryview use after free when accessing the backing buffer in certain cases. - gh-95355: _PyPegen_Parser_New now properly detects token memory allocation errors. Patch by Honglin Zhu. - gh-94938: Fix error detection in some builtin functions when keyword argument name is an instance of a str subclass with overloaded __eq__ and __hash__. Previously it could cause SystemError or other undesired behavior. - gh-94949: ast.parse() will no longer parse parenthesized context managers when passed feature_version less than (3, 9). Patch by Shantanu Jain. - gh-94947: ast.parse() will no longer parse assignment expressions when passed feature_version less than (3, 8). Patch by Shantanu Jain. - gh-94869: Fix the column offsets for some expressions in multi-line f-strings ast nodes. Patch by Pablo Galindo. - gh-91153: Fix an issue where a bytearray item assignment could crash if it’s resized by the new value’s __index__() method. - gh-94329: Compile and run code with unpacking of extremely large sequences (1000s of elements). Such code failed to compile. It now compiles and runs correctly. - gh-94360: Fixed a tokenizer crash when reading encoded files with syntax errors from stdin with non utf-8 encoded text. Patch by Pablo Galindo - gh-94192: Fix error for dictionary literals with invalid expression as value. - gh-93964: Strengthened compiler overflow checks to prevent crashes when compiling very large source files. - gh-93671: Fix some exponential backtrace case happening with deeply nested sequence patterns in match statements. Patch by Pablo Galindo - gh-93021: Fix the __text_signature__ for __get__() methods implemented in C. Patch by Jelle Zijlstra. - gh-92930: Fixed a crash in _pickle.c from mutating collections during __reduce__ or persistent_id. - gh-92914: Always round the allocated size for lists up to the nearest even number. - gh-92858: Improve error message for some suites with syntax error before ‘:’ - gh-95339: Update bundled pip to 22.2.1. - gh-95045: Fix GC crash when deallocating _lsprof.Profiler by untracking it before calling any callbacks. Patch by Kumar Aditya. - gh-95087: Fix IndexError in parsing invalid date in the email module. - gh-95199: Upgrade bundled setuptools to 63.2.0. - gh-95194: Upgrade bundled pip to 22.2. - gh-93899: Fix check for existence of os.EFD_CLOEXEC, os.EFD_NONBLOCK and os.EFD_SEMAPHORE flags on older kernel versions where these flags are not present. Patch by Kumar Aditya. - gh-95166: Fix concurrent.futures.Executor.map() to cancel the currently waiting on future on an error - e.g. TimeoutError or KeyboardInterrupt. - gh-93157: Fix fileinput module didn’t support errors option when inplace is true. - gh-94821: Fix binding of unix socket to empty address on Linux to use an available address from the abstract namespace, instead of “0”. - gh-94736: Fix crash when deallocating an instance of a subclass of _multiprocessing.SemLock. Patch by Kumar Aditya. - gh-94637: SSLContext.set_default_verify_paths() now releases the GIL around SSL_CTX_set_default_verify_paths call. The function call performs I/O and CPU intensive work. - gh-94510: Re-entrant calls to sys.setprofile() and sys.settrace() now raise RuntimeError. Patch by Pablo Galindo. - gh-92336: Fix bug where linecache.getline() fails on bad files with UnicodeDecodeError or SyntaxError. It now returns an empty string as per the documentation. - gh-89988: Fix memory leak in pickle.Pickler when looking up dispatch_table. Patch by Kumar Aditya. - gh-94254: Fixed types of struct module to be immutable. Patch by Kumar Aditya. - gh-94245: Fix pickling and copying of typing.Tuple[()]. - gh-94207: Made _struct.Struct GC-tracked in order to fix a reference leak in the _struct module. - gh-94101: Manual instantiation of ssl.SSLSession objects is no longer allowed as it lead to misconfigured instances that crashed the interpreter when attributes where accessed on them. - gh-84753: inspect.iscoroutinefunction(), inspect.isgeneratorfunction(), and inspect.isasyncgenfunction() now properly return True for duck-typed function-like objects like instances of unittest.mock.AsyncMock. - This makes inspect.iscoroutinefunction() consistent with the behavior of asyncio.iscoroutinefunction(). Patch by Mehdi ABAAKOUK. - gh-83499: Fix double closing of file description in tempfile. - gh-79512: Fixed names and __module__ value of weakref classes ReferenceType, ProxyType, CallableProxyType. It makes them pickleable. - gh-90494: copy.copy() and copy.deepcopy() now always raise a TypeError if __reduce__() returns a tuple with length 6 instead of silently ignore the 6th item or produce incorrect result. - gh-90549: Fix a multiprocessing bug where a global named resource (such as a semaphore) could leak when a child process is spawned (as opposed to forked). - gh-79579: sqlite3 now correctly detects DML queries with leading comments. Patch by Erlend E. Aasland. - gh-93421: Update sqlite3.Cursor.rowcount when a DML statement has run to completion. This fixes the row count for SQL queries like UPDATE ... RETURNING. Patch by Erlend E. Aasland. - gh-91810: Suppress writing an XML declaration in open files in ElementTree.write() with encoding='unicode' and xml_declaration=None. - gh-93353: Fix the importlib.resources.as_file() context manager to remove the temporary file if destroyed late during Python finalization: keep a local reference to the os.remove() function. Patch by Victor Stinner. - gh-83658: Make multiprocessing.Pool raise an exception if maxtasksperchild is not None or a positive int. - gh-74696: shutil.make_archive() no longer temporarily changes the current working directory during creation of standard .zip or tar archives. - gh-91577: Move imports in SharedMemory methods to module level so that they can be executed late in python finalization. - bpo-47231: Fixed an issue with inconsistent trailing slashes in tarfile longname directories. - bpo-46755: In QueueHandler, clear stack_info from LogRecord to prevent stack trace from being written twice. - bpo-46053: Fix OSS audio support on NetBSD. - bpo-46197: Fix ensurepip environment isolation for subprocess running pip. - bpo-45924: Fix asyncio incorrect traceback when future’s exception is raised multiple times. Patch by Kumar Aditya. - bpo-34828: sqlite3.Connection.iterdump() now handles databases that use AUTOINCREMENT in one or more tables. - gh-94321: Document the PEP 246 style protocol type sqlite3.PrepareProtocol. - gh-86128: Document a limitation in ThreadPoolExecutor where its exit handler is executed before any handlers in atexit. - gh-61162: Clarify sqlite3 behavior when Using the connection as a context manager. - gh-87260: Align sqlite3 argument specs with the actual implementation. - gh-86986: The minimum Sphinx version required to build the documentation is now 3.2. - gh-88831: Augmented documentation of asyncio.create_task(). Clarified the need to keep strong references to tasks and added a code snippet detailing how to to this. - bpo-47161: Document that pathlib.PurePath does not collapse initial double slashes because they denote UNC paths. - gh-95280: Fix problem with test_ssl test_get_ciphers on systems that require perfect forward secrecy (PFS) ciphers. - gh-95212: Make multiprocessing test case test_shared_memory_recreate parallel-safe. - gh-91330: Added more tests for dataclasses to cover behavior with data descriptor-based fields. - gh-94208: test_ssl is now checking for supported TLS version and protocols in more tests. - gh-93951: In test_bdb.StateTestCase.test_skip, avoid including auxiliary importers. - gh-93957: Provide nicer error reporting from subprocesses in test_venv.EnsurePipTest.test_with_pip. - gh-57539: Increase calendar test coverage for calendar.LocaleTextCalendar.formatweekday(). - gh-92886: Fixing tests that fail when running with optimizations (-O) in test_zipimport.py - bpo-47016: Create a GitHub Actions workflow for verifying bundled pip and setuptools. Patch by Illia Volochii and Adam Turner. - gh-94841: Fix the possible performance regression of PyObject_Free() compiled with MSVC version 1932. - gh-95511: Fix the Shell context menu copy-with-prompts bug of copying an extra line when one selects whole lines. - gh-95471: In the Edit menu, move Select All and add a new separator. - gh-95411: Enable using IDLE’s module browser with .pyw files. - gh-89610: Add .pyi as a recognized extension for IDLE on macOS. This allows opening stub files by double clicking on them in the Finder. - gh-94538: Fix Argument Clinic output to custom file destinations. Patch by Erlend E. Aasland. - gh-94430: Allow parameters named module and self with custom C names in Argument Clinic. Patch by Erlend E. Aasland - gh-94930: Fix SystemError raised when PyArg_ParseTupleAndKeywords() is used with # in (...) but without PY_SSIZE_T_CLEAN defined. - gh-94864: Fix PyArg_Parse* with deprecated format units “u” and “Z”. It returned 1 (success) when warnings are turned into exceptions. - Reapply patches - bpo-31046_ensurepip_honours_prefix.patch - fix_configure_rst.patch - no-skipif-doctests.patch - skip-test_pyobject_freed_is_freed.patch- Extend distutils-reproducible-compile.patch with a workaround for non reproducible pyc files issue 93317- Switch from %primary_interpreter to prjconf-defined %primary_python (gh#openSUSE/python-rpm-macros#127).- Add CVE-2015-20107-mailcap-unsafe-filenames.patch to avoid CVE-2015-20107 (bsc#1198511, gh#python/cpython#68966), the command injection in the mailcap module. - Fix building of documentation and the universal configuration of the %primary_interpreter.- Update to 3.10.5: - Core and Builtins - gh-93418: Fixed an assert where an f-string has an equal sign ‘=’ following an expression, but there’s no trailing brace. For example, f”{i=”. - gh-91924: Fix __ltrace__ debug feature if the stdout encoding is not UTF-8. Patch by Victor Stinner. - gh-93061: Backward jumps after async for loops are no longer given dubious line numbers. - gh-93065: Fix contextvars HAMT implementation to handle iteration over deep trees. - The bug was discovered and fixed by Eli Libman. See MagicStack/immutables#84 for more details. - gh-92311: Fixed a bug where setting frame.f_lineno to jump over a list comprehension could misbehave or crash. - gh-92112: Fix crash triggered by an evil custom mro() on a metaclass. - gh-92036: Fix a crash in subinterpreters related to the garbage collector. When a subinterpreter is deleted, untrack all objects tracked by its GC. To prevent a crash in deallocator functions expecting objects to be tracked by the GC, leak a strong reference to these objects on purpose, so they are never deleted and their deallocator functions are not called. Patch by Victor Stinner. - gh-91421: Fix a potential integer overflow in _Py_DecodeUTF8Ex. - bpo-47212: Raise IndentationError instead of SyntaxError for a bare except with no following indent. Improve SyntaxError locations for an un-parenthesized generator used as arguments. Patch by Matthieu Dartiailh. - bpo-47182: Fix a crash when using a named unicode character like "\N{digit nine}" after the main interpreter has been initialized a second time. - bpo-47117: Fix a crash if we fail to decode characters in interactive mode if the tokenizer buffers are uninitialized. Patch by Pablo Galindo. - bpo-39829: Removed the __len__() call when initializing a list and moved initializing to list_extend. Patch by Jeremiah Pascual. - bpo-46962: Classes and functions that unconditionally declared their docstrings ignoring the - -without-doc-strings compilation flag no longer do so. - The classes affected are ctypes.UnionType, pickle.PickleBuffer, testcapi.RecursingInfinitelyError, and types.GenericAlias. - The functions affected are 24 methods in ctypes. - Patch by Oleg Iarygin. - bpo-36819: Fix crashes in built-in encoders with error handlers that return position less or equal than the starting position of non-encodable characters. - Library - gh-93156: Accessing the pathlib.PurePath.parents sequence of an absolute path using negative index values produced incorrect results. - gh-89973: Fix re.error raised in fnmatch if the pattern contains a character range with upper bound lower than lower bound (e.g. [c-a]). Now such ranges are interpreted as empty ranges. - gh-93010: In a very special case, the email package tried to append the nonexistent InvalidHeaderError to the defect list. It should have been InvalidHeaderDefect. - gh-92839: Fixed crash resulting from calling bisect.insort() or bisect.insort_left() with the key argument not equal to None. - gh-91581: utcfromtimestamp() no longer attempts to resolve fold in the pure Python implementation, since the fold is never 1 in UTC. In addition to being slightly faster in the common case, this also prevents some errors when the timestamp is close to datetime.min. Patch by Paul Ganssle. - gh-92530: Fix an issue that occurred after interrupting threading.Condition.notify(). - gh-92049: Forbid pickling constants re._constants.SUCCESS etc. Previously, pickling did not fail, but the result could not be unpickled. - bpo-47029: Always close the read end of the pipe used by multiprocessing.Queue after the last write of buffered data to the write end of the pipe to avoid BrokenPipeError at garbage collection and at multiprocessing.Queue.close() calls. Patch by Géry Ogam. - gh-91401: Provide a fail-safe way to disable subprocess use of vfork() via a private subprocess._USE_VFORK attribute. While there is currently no known need for this, if you find a need please only set it to False. File a CPython issue as to why you needed it and link to that from a comment in your code. This attribute is documented as a footnote in 3.11. - gh-91910: Add missing f prefix to f-strings in error messages from the multiprocessing and asyncio modules. - gh-91810: ElementTree method write() and function tostring() now use the text file’s encoding (“UTF-8” if not available) instead of locale encoding in XML declaration when encoding="unicode" is specified. - gh-91832: Add required attribute to argparse.Action repr output. - gh-91700: Compilation of regular expression containing a conditional expression (?(group)...) now raises an appropriate re.error if the group number refers to not defined group. Previously an internal RuntimeError was raised. - gh-91676: Fix unittest.IsolatedAsyncioTestCase to shutdown the per test event loop executor before returning from its run method so that a not yet stopped or garbage collected executor state does not persist beyond the test. - gh-90568: Parsing \N escapes of Unicode Named Character Sequences in a regular expression raises now re.error instead of TypeError. - gh-91595: Fix the comparison of character and integer inside Tools.gdb.libpython.write_repr(). Patch by Yu Liu. - gh-90622: Worker processes for concurrent.futures.ProcessPoolExecutor are no longer spawned on demand (a feature added in 3.9) when the multiprocessing context start method is "fork" as that can lead to deadlocks in the child processes due to a fork happening while threads are running. - gh-91575: Update case-insensitive matching in the re module to the latest Unicode version. - gh-91581: Remove an unhandled error case in the C implementation of calls to datetime.fromtimestamp with no time zone (i.e. getting a local time from an epoch timestamp). This should have no user-facing effect other than giving a possibly more accurate error message when called with timestamps that fall on 10000-01-01 in the local time. Patch by Paul Ganssle. - bpo-47260: Fix os.closerange() potentially being a no-op in a Linux seccomp sandbox. - bpo-39064: zipfile.ZipFile now raises zipfile.BadZipFile instead of ValueError when reading a corrupt zip file in which the central directory offset is negative. - bpo-47151: When subprocess tries to use vfork, it now falls back to fork if vfork returns an error. This allows use in situations where vfork isn’t allowed by the OS kernel. - bpo-27929: Fix asyncio.loop.sock_connect() to only resolve names for socket.AF_INET or socket.AF_INET6 families. Resolution may not make sense for other families, like socket.AF_BLUETOOTH and socket.AF_UNIX. - bpo-43323: Fix errors in the email module if the charset itself contains undecodable/unencodable characters. - bpo-47101: hashlib.algorithms_available now lists only algorithms that are provided by activated crypto providers on OpenSSL 3.0. Legacy algorithms are not listed unless the legacy provider has been loaded into the default OSSL context. - bpo-46787: Fix concurrent.futures.ProcessPoolExecutor exception memory leak - bpo-45393: Fix the formatting for await x and not x in the operator precedence table when using the help() system. - bpo-46415: Fix ipaddress.ip_{address,interface,network} raising TypeError instead of ValueError if given invalid tuple as address parameter. - bpo-28249: Set doctest.DocTest.lineno to None when object does not have __doc__. - bpo-45138: Fix a regression in the sqlite3 trace callback where bound parameters were not expanded in the passed statement string. The regression was introduced in Python 3.10 by bpo-40318. Patch by Erlend E. Aasland. - bpo-44493: Add missing terminated NUL in sockaddr_un’s length - This was potentially observable when using non-abstract AF_UNIX datagram sockets to processes written in another programming language. - bpo-42627: Fix incorrect parsing of Windows registry proxy settings - bpo-36073: Raise ProgrammingError instead of segfaulting on recursive usage of cursors in sqlite3 converters. Patch by Sergey Fedoseev. - Documentation - gh-86438: Clarify that -W and PYTHONWARNINGS are matched literally and case-insensitively, rather than as regular expressions, in warnings. - gh-92240: Added release dates for “What’s New in Python 3.X” for 3.0, 3.1, 3.2, 3.8 and 3.10 - gh-91888: Add a new gh role to the documentation to link to GitHub issues. - gh-91783: Document security issues concerning the use of the function shutil.unpack_archive() - gh-91547: Remove “Undocumented modules” page. - bpo-44347: Clarify the meaning of dirs_exist_ok, a kwarg of shutil.copytree(). - bpo-38668: Update the introduction to documentation for os.path to remove warnings that became irrelevant after the implementations of PEP 383 and PEP 529. - bpo-47138: Pin Jinja to a version compatible with Sphinx version 3.2.1. - bpo-46962: All docstrings in code snippets are now wrapped into PyDoc_STR() to follow the guideline of PEP 7’s Documentation Strings paragraph. Patch by Oleg Iarygin. - bpo-26792: Improve the docstrings of runpy.run_module() and runpy.run_path(). Original patch by Andrew Brezovsky. - bpo-40838: Document that inspect.getdoc(), inspect.getmodule(), and inspect.getsourcefile() might return None. - bpo-45790: Adjust inaccurate phrasing in Defining Extension Types: Tutorial about the ob_base field and the macros used to access its contents. - bpo-42340: Document that in some circumstances KeyboardInterrupt may cause the code to enter an inconsistent state. Provided a sample workaround to avoid it if needed. - bpo-41233: Link the errnos referenced in Doc/library/exceptions.rst to their respective section in Doc/library/errno.rst, and vice versa. Previously this was only done for EINTR and InterruptedError. Patch by Yan “yyyyyyyan” Orestes. - bpo-38056: Overhaul the Error Handlers documentation in codecs. - bpo-13553: Document tkinter.Tk args. - Tests - gh-92886: Fixing tests that fail when running with optimizations (-O) in test_imaplib.py. - gh-92670: Skip test_shutil.TestCopy.test_copyfile_nonexistent_dir test on AIX as the test uses a trailing slash to force the OS consider the path as a directory, but on AIX the trailing slash has no effect and is considered as a file. - gh-91904: Fix initialization of PYTHONREGRTEST_UNICODE_GUARD which prevented running regression tests on non-UTF-8 locale. - gh-91607: Fix test_concurrent_futures to test the correct multiprocessing start method context in several cases where the test logic mixed this up. - bpo-47205: Skip test for sched_getaffinity() and sched_setaffinity() error case on FreeBSD. - bpo-47104: Rewrite asyncio.to_thread() tests to use unittest.IsolatedAsyncioTestCase. - bpo-29890: Add tests for ipaddress.IPv4Interface and ipaddress.IPv6Interface construction with tuple arguments. Original patch and tests by louisom. - Tools/Demos - gh-91583: Fix regression in the code generated by Argument Clinic for functions with the defining_class parameter.- Refresh bluez-devel-vendor.tar.xz- Switch primary_interpreter from python38 to python310 for Factory (only)- Update to 3.10.4: - bpo-46968: Check for the existence of the “sys/auxv.h” header in faulthandler to avoid compilation problems in systems where this header doesn’t exist. Patch by Pablo Galindo - bpo-23691: Protect the re.finditer() iterator from re-entering. - bpo-42369: Fix thread safety of zipfile._SharedFile.tell() to avoid a “zipfile.BadZipFile: Bad CRC-32 for file” exception when reading a ZipFile from multiple threads. - bpo-38256: Fix binascii.crc32() when it is compiled to use zlib’c crc32 to work properly on inputs 4+GiB in length instead of returning the wrong result. The workaround prior to this was to always feed the function data in increments smaller than 4GiB or to just call the zlib module function. - bpo-39394: A warning about inline flags not at the start of the regular expression now contains the position of the flag. - bpo-47061: Deprecate the various modules listed by PEP 594: - aifc, asynchat, asyncore, audioop, cgi, cgitb, chunk, crypt, imghdr, msilib, nntplib, nis, ossaudiodev, pipes, smtpd, sndhdr, spwd, sunau, telnetlib, uu, xdrlib - bpo-2604: Fix bug where doctests using globals would fail when run multiple times. - bpo-45997: Fix asyncio.Semaphore re-aquiring FIFO order. - bpo-47022: The asynchat, asyncore and smtpd modules have been deprecated since at least Python 3.6. Their documentation and deprecation warnings and have now been updated to note they will removed in Python 3.12 (PEP 594). - bpo-46421: Fix a unittest issue where if the command was invoked as python -m unittest and the filename(s) began with a dot (.), a ValueError is returned. - bpo-40296: Fix supporting generic aliases in pydoc. - Update to 3.10.3: - bpo-46940: Avoid overriding AttributeError metadata information for nested attribute access calls. Patch by Pablo Galindo. - bpo-46852: Rename the private undocumented float.__set_format__() method to float.__setformat__() to fix a typo introduced in Python 3.7. The method is only used by test_float. Patch by Victor Stinner. - bpo-46794: Bump up the libexpat version into 2.4.6 - bpo-46820: Fix parsing a numeric literal immediately (without spaces) followed by “not in” keywords, like in 1not in x. Now the parser only emits a warning, not a syntax error. - bpo-46762: Fix an assert failure in debug builds when a ‘<’, ‘>’, or ‘=’ is the last character in an f-string that’s missing a closing right brace. - bpo-46724: Make sure that all backwards jumps use the JUMP_ABSOLUTE instruction, rather than JUMP_FORWARD with an argument of (2**32)+offset. - bpo-46732: Correct the docstring for the __bool__() method. Patch by Jelle Zijlstra. - bpo-46707: Avoid potential exponential backtracking when producing some syntax errors involving lots of brackets. Patch by Pablo Galindo. - bpo-40479: Add a missing call to va_end() in Modules/_hashopenssl.c. - bpo-46615: When iterating over sets internally in setobject.c, acquire strong references to the resulting items from the set. This prevents crashes in corner-cases of various set operations where the set gets mutated. - bpo-45773: Remove two invalid “peephole” optimizations from the bytecode compiler. - bpo-43721: Fix docstrings of getter, setter, and deleter to clarify that they create a new copy of the property. - bpo-46503: Fix an assert when parsing some invalid N escape sequences in f-strings. - bpo-46417: Fix a race condition on setting a type __bases__ attribute: the internal function add_subclass() now gets the PyTypeObject.tp_subclasses member after calling PyWeakref_NewRef() which can trigger a garbage collection which can indirectly modify PyTypeObject.tp_subclasses. Patch by Victor Stinner. - bpo-46383: Fix invalid signature of _zoneinfo’s module_free function to resolve a crash on wasm32-emscripten platform. - bpo-46070: Py_EndInterpreter() now explicitly untracks all objects currently tracked by the GC. Previously, if an object was used later by another interpreter, calling PyObject_GC_UnTrack() on the object crashed if the previous or the next object of the PyGC_Head structure became a dangling pointer. Patch by Victor Stinner. - bpo-46339: Fix a crash in the parser when retrieving the error text for multi-line f-strings expressions that do not start in the first line of the string. Patch by Pablo Galindo - bpo-46240: Correct the error message for unclosed parentheses when the tokenizer doesn’t reach the end of the source when the error is reported. Patch by Pablo Galindo - bpo-46091: Correctly calculate indentation levels for lines with whitespace character that are ended by line continuation characters. Patch by Pablo Galindo - bpo-43253: Fix a crash when closing transports where the underlying socket handle is already invalid on the Proactor event loop. - bpo-47004: Apply bugfixes from importlib_metadata 4.11.3, including bugfix for EntryPoint.extras, which was returning match objects and not the extras strings. - bpo-46985: Upgrade pip wheel bundled with ensurepip (pip 22.0.4) - bpo-46968: faulthandler: On Linux 5.14 and newer, dynamically determine size of signal handler stack size CPython allocates using getauxval(AT_MINSIGSTKSZ). This changes allows for Python extension’s request to Linux kernel to use AMX_TILE instruction set on Sapphire Rapids Xeon processor to succeed, unblocking use of the ISA in frameworks. - bpo-46955: Expose asyncio.base_events.Server as asyncio.Server. Patch by Stefan Zabka. - bpo-23325: The signal module no longer assumes that SIG_IGN and SIG_DFL are small int singletons. - bpo-46932: Update bundled libexpat to 2.4.7 - bpo-25707: Fixed a file leak in xml.etree.ElementTree.iterparse() when the iterator is not exhausted. Patch by Jacob Walls. - bpo-44886: Inherit asyncio proactor datagram transport from asyncio.DatagramTransport. - bpo-46827: Support UDP sockets in asyncio.loop.sock_connect() for selector-based event loops. Patch by Thomas Grainger. - bpo-46811: Make test suite support Expat >=2.4.5 - bpo-46252: Raise TypeError if ssl.SSLSocket is passed to transport-based APIs. - bpo-46784: Fix libexpat symbols collisions with user dynamically loaded or statically linked libexpat in embedded Python. - bpo-39327: shutil.rmtree() can now work with VirtualBox shared folders when running from the guest operating-system. - bpo-46756: Fix a bug in urllib.request.HTTPPasswordMgr.find_user_password() and urllib.request.HTTPPasswordMgrWithPriorAuth.is_authenticated() which allowed to bypass authorization. For example, access to URI example.org/foobar was allowed if the user was authorized for URI example.org/foo. - bpo-46643: In typing.get_type_hints(), support evaluating stringified ParamSpecArgs and ParamSpecKwargs annotations. Patch by Gregory Beauregard. - bpo-45863: When the tarfile module creates a pax format archive, it will put an integer representation of timestamps in the ustar header (if possible) for the benefit of older unarchivers, in addition to the existing full-precision timestamps in the pax extended header. - bpo-46676: Make typing.ParamSpec args and kwargs equal to themselves. Patch by Gregory Beauregard. - bpo-46672: Fix NameError in asyncio.gather() when initial type check fails. - bpo-46655: In typing.get_type_hints(), support evaluating bare stringified TypeAlias annotations. Patch by Gregory Beauregard. - bpo-45948: Fixed a discrepancy in the C implementation of the xml.etree.ElementTree module. Now, instantiating an xml.etree.ElementTree.XMLParser with a target=None keyword provides a default xml.etree.ElementTree.TreeBuilder target as the Python implementation does. - bpo-46521: Fix a bug in the codeop module that was incorrectly identifying invalid code involving string quotes as valid code. - bpo-46581: Brings ParamSpec propagation for GenericAlias in line with Concatenate (and others). - bpo-46591: Make the IDLE doc URL on the About IDLE dialog clickable. - bpo-46400: expat: Update libexpat from 2.4.1 to 2.4.4 - bpo-46487: Add the get_write_buffer_limits method to asyncio.transports.WriteTransport and to the SSL transport. - bpo-45173: Note the configparser deprecations will be removed in Python 3.12. - bpo-46539: In typing.get_type_hints(), support evaluating stringified ClassVar and Final annotations inside Annotated. Patch by Gregory Beauregard. - bpo-46491: Allow typing.Annotated to wrap typing.Final and typing.ClassVar. Patch by Gregory Beauregard. - bpo-46436: Fix command-line option -d/--directory in module http.server which is ignored when combined with command-line option --cgi. Patch by Géry Ogam. - bpo-41403: Make mock.patch() raise a TypeError with a relevant error message on invalid arg. Previously it allowed a cryptic AttributeError to escape. - bpo-46474: In importlib.metadata.EntryPoint.pattern, avoid potential REDoS by limiting ambiguity in consecutive whitespace. - bpo-46469: asyncio generic classes now return types.GenericAlias in __class_getitem__ instead of the same class. - bpo-46434: pdb now gracefully handles help when __doc__ is missing, for example when run with pregenerated optimized .pyc files. - bpo-46333: The __eq__() and __hash__() methods of typing.ForwardRef now honor the module parameter of typing.ForwardRef. Forward references from different modules are now differentiated. - bpo-46246: Add missing __slots__ to importlib.metadata.DeprecatedList. Patch by Arie Bovenberg. - bpo-46266: Improve day constants in calendar. - Now all constants (MONDAY … SUNDAY) are documented, tested, and added to __all__. - bpo-46232: The ssl module now handles certificates with bit strings in DN correctly. - bpo-43118: Fix a bug in inspect.signature() that was causing it to fail on some subclasses of classes with a __text_signature__ referencing module globals. Patch by Weipeng Hong. - bpo-26552: Fixed case where failing asyncio.ensure_future() did not close the coroutine. Patch by Kumar Aditya. - bpo-21987: Fix an issue with tarfile.TarFile.getmember() getting a directory name with a trailing slash. - bpo-20392: Fix inconsistency with uppercase file extensions in MimeTypes.guess_type(). Patch by Kumar Aditya. - bpo-46080: Fix exception in argparse help text generation if a argparse.BooleanOptionalAction argument’s default is argparse.SUPPRESS and it has help specified. Patch by Felix Fontein. - bpo-44439: Fix .write() method of a member file in ZipFile, when the input data is an object that supports the buffer protocol, the file length may be wrong. - bpo-45703: When a namespace package is imported before another module from the same namespace is created/installed in a different sys.path location while the program is running, calling the importlib.invalidate_caches() function will now also guarantee the new module is noticed. - bpo-24959: Fix bug where unittest sometimes drops frames from tracebacks of exceptions raised in tests. - bpo-44791: Fix substitution of ParamSpec in Concatenate with different parameter expressions. Substitution with a list of types returns now a tuple of types. Substitution with Concatenate returns now a Concatenate with concatenated lists of arguments. - bpo-14156: argparse.FileType now supports an argument of ‘-’ in binary mode, returning the .buffer attribute of sys.stdin/sys.stdout as appropriate. Modes including ‘x’ and ‘a’ are treated equivalently to ‘w’ when argument is ‘-’. Patch contributed by Josh Rosenberg - bpo-46463: Fixes escape4chm.py script used when building the CHM documentation file - bpo-46913: Fix test_faulthandler.test_sigfpe() if Python is built with undefined behavior sanitizer (UBSAN): disable UBSAN on the faulthandler_sigfpe() function. Patch by Victor Stinner. - bpo-46708: Prevent default asyncio event loop policy modification warning after test_asyncio execution. - bpo-46678: The function make_legacy_pyc in Lib/test/support/import_helper.py no longer fails when PYTHONPYCACHEPREFIX is set to a directory on a different device from where tempfiles are stored. - bpo-46616: Ensures test_importlib.test_windows cleans up registry keys after completion. - bpo-44359: test_ftplib now silently ignores socket errors to prevent logging unhandled threading exceptions. Patch by Victor Stinner. - bpo-46542: Fix a Python crash in test_lib2to3 when using Python built in debug mode: limit the recursion limit. Patch by Victor Stinner. - bpo-46576: test_peg_generator now disables compiler optimization when testing compilation of its own C extensions to significantly speed up the testing on non-debug builds of CPython. - bpo-46542: Fix test_json tests checking for RecursionError: modify these tests to use support.infinite_recursion(). Patch by Victor Stinner. - bpo-13886: Skip test_builtin PTY tests on non-ASCII characters if the readline module is loaded. The readline module changes input() behavior, but test_builtin is not intented to test the readline module. Patch by Victor Stinner. - bpo-38472: Fix GCC detection in setup.py when cross-compiling. The C compiler is now run with LC_ALL=C. Previously, the detection failed with a German locale. - bpo-46513: configure no longer uses AC_C_CHAR_UNSIGNED macro and pyconfig.h no longer defines reserved symbol __CHAR_UNSIGNED__. - bpo-45296: Clarify close, quit, and exit in IDLE. In the File menu, ‘Close’ and ‘Exit’ are now ‘Close Window’ (the current one) and ‘Exit’ is now ‘Exit IDLE’ (by closing all windows). In Shell, ‘quit()’ and ‘exit()’ mean ‘close Shell’. If there are no other windows, this also exits IDLE. - bpo-45447: Apply IDLE syntax highlighting to pyi files. Patch by Alex Waygood and Terry Jan Reedy. - bpo-46433: The internal function _PyType_GetModuleByDef now correctly handles inheritance patterns involving static types. - bpo-14916: Fixed bug in the tokenizer that prevented PyRun_InteractiveOne from parsing from the provided FD.- (bsc#1196784, CVE-2022-25236) Rename patch: support-expat-245.patch to support-expat-CVE-2022-25236-patched.patch and update the patch to detect expat >= 2.4.4 instead of >= 2.4.5 as it was fully patched against CVE-2022-25236.- Add patch support-expat-245.patch: * Support Expat >= 2.4.5- bsc#1195831 Obsolete older "most modern" versions of python packages (python39 for python310 and so forth). For next versions it is necessary just to edit the macro.- Remove second superfluous BR rpm-build-python- Remove second superfluous BR rpm-build-python - Add fix_configure_rst.patch, which removes duplicate link targets and make documentation with old Sphinx in SLE - Skip test_capi (bsc#1195140 and bpo#37169)- Update to 3.10.2: Bugfix only - bpo#46347 memory leak in PyEval_EvalCodeEx (especially visible with Cython code) - and many others- Upgrade to 3.10.1 (jsc#SLE-18038): - PEP 623 – Deprecate and prepare for the removal of the wstr member in PyUnicodeObject. - PEP 604 – Allow writing union types as X | Y - PEP 612 – Parameter Specification Variables - PEP 626 – Precise line numbers for debugging and other tools. - PEP 618 – Add Optional Length-Checking To zip. - bpo-12782: Parenthesized context managers are now officially allowed. - PEP 632 – Deprecate distutils module. - PEP 613 – Explicit Type Aliases - PEP 634 – Structural Pattern Matching: Specification - PEP 635 – Structural Pattern Matching: Motivation and Rationale - PEP 636 – Structural Pattern Matching: Tutorial - PEP 644 – Require OpenSSL 1.1.1 or newer - PEP 624 – Remove Py_UNICODE encoder APIs - PEP 597 – Add optional EncodingWarning - Patches readjusted: - bpo-31046_ensurepip_honours_prefix.patch - python-3.3.0b1-fix_date_time_compiler.patch- Remove pdb_adjust_breakpoints.patch and instead just adjust location of the test breakpoint in Lib/test/test_pdb.py via sed, because we have shortened Lib/pdb.py by removing the shebang (bpo#45964).- Add pdb_adjust_breakpoints.patch fixing expectd results in test_pdb_breakpoints_preserved_across_interactive_sessions (bpo#45964).- Remove shebangs from from python-base libraries in _libdir (bsc#1193179). - Readjust patches: - bpo-31046_ensurepip_honours_prefix.patch - decimal.patch - python-3.3.0b1-fix_date_time_compiler.patch- Move rpm-build-python construct to correct place.- BuildRequire rpm-build-python: The provider to inject python(abi) has been moved there. rpm-build pulls rpm-build-python automatically in when building anything against python3-base, but this implies that the initial build of python3-base does not trigger the automatic installation.- Final release of 3.10.0: Complete list on https://www.python.org/downloads/release/python-3100/, but highlights are: - PEP 623 – Deprecate and prepare for the removal of the wstr member in PyUnicodeObject. - PEP 604 – Allow writing union types as X | Y - PEP 612 – Parameter Specification Variables - PEP 626 – Precise line numbers for debugging and other tools. - PEP 618 – Add Optional Length-Checking To zip. - PEP 632 – Deprecate distutils module. - PEP 613 – Explicit Type Aliases - PEP 634 – Structural Pattern Matching: Specification - PEP 635 – Structural Pattern Matching: Motivation and Rationale - PEP 636 – Structural Pattern Matching: Tutorial - PEP 644 – Require OpenSSL 1.1.1 or newer - PEP 624 – Remove Py_UNICODE encoder APIs - PEP 597 – Add optional EncodingWarning - bpo-12782: Parenthesized context managers are now officially allowed.- Switch on option --with-system-libmpdec (bsc#1189356).- Reenable profileopt with qemu emulation, test_faulthandler is no longer run during profiling- test_faulthandler is still problematic under qemu linux-user emulation, disable it there- Update to 3.10.0rc1 (the penultimate prerelease), which contains plenty of small bugfixes among others: - bpo#38605: from __future__ import annotations (PEP 563) used to be on this list in previous pre-releases but it has been postponed to Python 3.11 due to some compatibility concerns. - bpo-44600: Fix incorrect line numbers while tracing some failed patterns in match statements. Patch by Charles Burkland. - plenty of modifications in types.Union- Update to 3.10.0b4: https://docs.python.org/3.10/whatsnew/changelog.html#python-3-10-0-beta-4 - Remove python3-imp-returntype.patch which has been upstreamed.- Update to 3.10.0b2: - PEP 623 -- Deprecate and prepare for the removal of the wstr member in PyUnicodeObject. - PEP 604 -- Allow writing union types as X | Y - PEP 612 -- Parameter Specification Variables - PEP 626 -- Precise line numbers for debugging and other tools. - PEP 618 -- Add Optional Length-Checking To zip. - bpo-12782: Parenthesized context managers are now officially allowed. - PEP 632 -- Deprecate distutils module. - PEP 613 -- Explicit Type Aliases - PEP 634 -- Structural Pattern Matching: Specification - PEP 635 -- Structural Pattern Matching: Motivation and Rationale - PEP 636 -- Structural Pattern Matching: Tutorial - PEP 644 -- Require OpenSSL 1.1.1 or newer - PEP 624 -- Remove Py_UNICODE encoder APIs - PEP 597 -- Add optional EncodingWarning - Removed patches (assumed upstream): - sphinx-update-removed-function.patch- Revert previous skip over test_capi - Add skip-test_pyobject_freed_is_freed.patch to skip failing test on SLE-15.- allow build with Sphinx >= 3.x- Exclude test_capi on Leap (test fails there)- Stop providing "python" symbol (bsc#1185588), which means python2 currently.- Update to 3.9.5: * Security - bpo-43434: Creating a sqlite3.Connection object now also produces a sqlite3.connect auditing event. Previously this event was only produced by sqlite3.connect() calls. Patch by Erlend E. Aasland. - bpo-43882: The presence of newline or tab characters in parts of a URL could allow some forms of attacks. - Following the controlling specification for URLs defined by WHATWG urllib.parse() now removes ASCII newlines and tabs from URLs, preventing such attacks. - bpo-43472: Ensures interpreter-level audit hooks receive the cpython.PyInterpreterState_New event when called through the _xxsubinterpreters module. - bpo-36384: ipaddress module no longer accepts any leading zeros in IPv4 address strings. Leading zeros are ambiguous and interpreted as octal notation by some libraries. For example the legacy function socket.inet_aton() treats leading zeros as octal notatation. glibc implementation of modern inet_pton() does not accept any leading zeros. For a while the ipaddress module used to accept ambiguous leading zeros. - bpo-43075: Fix Regular Expression Denial of Service (ReDoS) vulnerability in urllib.request.AbstractBasicAuthHandler. The ReDoS-vulnerable regex has quadratic worst-case complexity and it allows cause a denial of service when identifying crafted invalid RFCs. This ReDoS issue is on the client side and needs remote attackers to control the HTTP server. - bpo-42800: Audit hooks are now fired for frame.f_code, traceback.tb_frame, and generator code/frame attribute access. * Core and Builtins - bpo-43105: Importlib now resolves relative paths when creating module spec objects from file locations. - bpo-42924: Fix bytearray repetition incorrectly copying data from the start of the buffer, even if the data is offset within the buffer (e.g. after reassigning a slice at the start of the bytearray to a shorter byte string). * Library - bpo-43993: Update bundled pip to 21.1.1. - bpo-43937: Fixed the turtle module working with non-default root window. - bpo-43930: Update bundled pip to 21.1 and setuptools to 56.0.0 - bpo-43920: OpenSSL 3.0.0: load_verify_locations() now returns a consistent error message when cadata contains no valid certificate. - bpo-43607: urllib can now convert Windows paths with \\?\ prefixes into URL paths. - bpo-43284: platform.win32_ver derives the windows version from sys.getwindowsversion().platform_version which in turn derives the version from kernel32.dll (which can be of a different version than Windows itself). Therefore change the platform.win32_ver to determine the version using the platform module’s _syscmd_ver private function to return an accurate version. - bpo-42248: [Enum] ensure exceptions raised in _missing__ are released - bpo-43799: OpenSSL 3.0.0: define OPENSSL_API_COMPAT 1.1.1 to suppress deprecation warnings. Python requires OpenSSL 1.1.1 APIs. - bpo-43794: Add ssl.OP_IGNORE_UNEXPECTED_EOF constants (OpenSSL 3.0.0) - bpo-43789: OpenSSL 3.0.0: Don’t call the password callback function a second time when first call has signaled an error condition. - bpo-43788: The header files for ssl error codes are now OpenSSL version-specific. Exceptions will now show correct reason and library codes. The make_ssl_data.py script has been rewritten to use OpenSSL’s text file with error codes. - bpo-43655: tkinter dialog windows are now recognized as dialogs by window managers on macOS and X Window. - bpo-43534: turtle.textinput() and turtle.numinput() create now a transient window working on behalf of the canvas window. - bpo-43522: Fix problem with hostname_checks_common_name. OpenSSL does not copy hostflags from struct SSL_CTX to struct SSL. - bpo-42967: Allow bytes separator argument in urllib.parse.parse_qs and urllib.parse.parse_qsl when parsing str query strings. Previously, this raised a TypeError. - bpo-43176: Fixed processing of a dataclass that inherits from a frozen dataclass with no fields. It is now correctly detected as an error. - bpo-41735: Fix thread locks in zlib module may go wrong in rare case. Patch by Ma Lin. - bpo-36470: Fix dataclasses with InitVars and replace(). Patch by Claudiu Popa. - bpo-32745: Fix a regression in the handling of ctypes’ ctypes.c_wchar_p type: embedded null characters would cause a ValueError to be raised. Patch by Zackery Spytz. * Documentation - bpo-43959: The documentation on the PyContextVar C-API was clarified. - bpo-43938: Update dataclasses documentation to express that FrozenInstanceError is derived from AttributeError. - bpo-43755: Update documentation to reflect that unparenthesized lambda expressions can no longer be the expression part in an if clause in comprehensions and generator expressions since Python 3.9. - bpo-43739: Fixing the example code in Doc/extending/extending.rst to declare and initialize the pmodule variable to be of the right type. * Tests - bpo-43961: Fix test_logging.test_namer_rotator_inheritance() on Windows: use os.replace() rather than os.rename(). Patch by Victor Stinner. - bpo-43842: Fix a race condition in the SMTP test of test_logging. Don’t close a file descriptor (socket) from a different thread while asyncore.loop() is polling the file descriptor. Patch by Victor Stinner. - bpo-43811: Tests multiple OpenSSL versions on GitHub Actions. Use ccache to speed up testing. - bpo-43791: OpenSSL 3.0.0: Disable testing of legacy protocols TLS 1.0 and 1.1. Tests are failing with TLSV1_ALERT_INTERNAL_ERROR. - Refreshed patches: - bpo-31046_ensurepip_honours_prefix.patch - python-3.3.0b1-fix_date_time_compiler.patch - Add vendorized files from bluez-devel to enable building support for Bluetooth.- Make sure to close the import_failed.map file after the exception has been raised in order to avoid ResourceWarnings when the failing import is part of a try...except block.- Update to 3.9.4: - bpo#43710: Reverted the fix for https://bugs.python.org/issue42500 as it changed the PyThreadState struct size and broke the 3.9.x ABI in the 3.9.3 release (visible on 32-bit platforms using binaries compiled using an earlier version of Python 3.9.x headers). - bpo#26053: Fixed bug where the pdb interactive run command echoed the args from the shell command line, even if those have been overridden at the pdb prompt. - bpo#42988 (bsc#1183374) CVE-2021-3426: Remove the getfile feature of the pydoc module which could be abused to read arbitrary files on the disk (directory traversal vulnerability). Moreover, even source code of Python modules can contain sensitive data like passwords. Vulnerability reported by David Schwörer. - bpo#43285: ftplib no longer trusts the IP address value returned from the server in response to the PASV command by default. This prevents a malicious FTP server from using the response to probe IPv4 address and port combinations on the client network. Code that requires the former vulnerable behavior may set a trust_server_pasv_ipv4_address attribute on their ftplib.FTP instances to True to re-enable it. - bpo#43439: Add audit hooks for gc.get_objects(), gc.get_referrers() and gc.get_referents(). Patch by Pablo Galindo. - bpo#43660: Fix crash that happens when replacing sys.stderr with a callable that can remove the object while an exception is being printed. Patch by Pablo Galindo. - bpo#43555: Report the column offset for SyntaxError for invalid line continuation characters. Patch by Pablo Galindo. - bpo#43517: Fix misdetection of circular imports when using from pkg.mod import attr, which caused false positives in non-trivial multi-threaded code. - bpo#35883: Python no longer fails at startup with a fatal error if a command line argument contains an invalid Unicode character. The Py_DecodeLocale() function now escapes byte sequences which would be decoded as Unicode characters outside the [U+0000; U+10ffff] range. - bpo#43406: Fix a possible race condition where PyErr_CheckSignals tries to execute a non-Python signal handler. - bpo#42500: Improve handling of exceptions near recursion limit. Converts a number of Fatal Errors in RecursionErrors. - bpo#43433: xmlrpc.client.ServerProxy no longer ignores query and fragment in the URL of the server. - bpo#35930: Raising an exception raised in a “future” instance will create reference cycles. - bpo#43577: Fix deadlock when using ssl.SSLContext debug callback with ssl.SSLContext.sni_callback(). - bpo#43521: ast.unparse can now render NaNs and empty sets. - bpo#43423: subprocess.communicate() no longer raises an IndexError when there is an empty stdout or stderr IO buffer during a timeout on Windows. - bpo#27820: Fixed long-standing bug of smtplib.SMTP where doing AUTH LOGIN with initial_response_ok=False will fail. The cause is that SMTP.auth_login _always_ returns a password if provided with a challenge string, thus non-compliant with the standard for AUTH LOGIN. Also fixes bug with the test for smtpd. - bpo#43332: Improves the networking efficiency of http.client when using a proxy via set_tunnel(). Fewer small send calls are made during connection setup. - bpo#43399: Fix ElementTree.extend not working on iterators when using the Python implementation - bpo#43316: The python -m gzip command line application now properly fails when detecting an unsupported extension. It exits with a non-zero exit code and prints an error message to stderr. - bpo#43260: Fix TextIOWrapper can not flush internal buffer forever after very large text is written. - bpo#42782: Fail fast in shutil.move() to avoid creating destination directories on failure. - bpo#37193: Fixed memory leak in socketserver.ThreadingMixIn introduced in Python 3.7. - bpo#43199: Answer “Why is there no goto?” in the Design and History FAQ. - bpo#43407: Clarified that a result from time.monotonic(), time.perf_counter(), time.process_time(), or time.thread_time() can be compared with the result from any following call to the same function - not just the next immediate call. - bpo#27646: Clarify that ‘yield from ’ works with any iterable, not just iterators. - bpo#36346: Update some deprecated unicode APIs which are documented as “will be removed in 4.0” to “3.12”. See PEP 623 for detail. - bpo#37945: Fix test_getsetlocale_issue1813() of test_locale: skip the test if setlocale() fails. Patch by Victor Stinner. - bpo#41561: Add workaround for Ubuntu’s custom OpenSSL security level policy. - bpo#43288: Fix test_importlib to correctly skip Unicode file tests if the fileystem does not support them. - bpo#43617: Improve configure.ac: Check for presence of autoconf-archive package and remove our copies of M4 macros. - bpo#42225: Document that IDLE can fail on Unix either from misconfigured IP masquerage rules or failure displaying complex colored (non-ascii) characters. - bpo#43283: Document why printing to IDLE’s Shell is often slower than printing to a system terminal and that it can be made faster by pre-formatting a single string before printing.- Update to 3.9.2: - bpo#42938 (bsc#1181126): Avoid static buffers when computing the repr of ctypes.c_double and ctypes.c_longdouble values. This issue was assigned CVE-2021-3177. - bpo#42967 (bsc#1182379): Fix web cache poisoning vulnerability by defaulting the query args separator to &, and allowing the user to choose a custom separator. This issue was assigned CVE-2021-23336. - Upstreamed patches were removed: - CVE-2021-3177-buf_ovrfl_PyCArg_repr.patch - bsc1167501-invalid-alignment.patch - skip_random_failing_tests.patch - CVE-2019-5010-null-defer-x509-cert-DOS.patch- Add Obsoletes for python3-base when primary interpreter is set to properly replace it during upgrades. (bsc#1181324)- Update to 3.9.1: Security bugs: - Prevented potential DoS attack via CPU and RAM exhaustion when processing malformed Apple Property List files in binary format. - The plistlib module no longer accepts entity declarations in XML plist files to avoid XML vulnerabilities. This should not affect users as entity declarations are not used in regular plist files. - Add volatile to the accumulator variable in hmac.compare_digest, making constant-time-defeating optimizations less likely. Core and Builtins - Allow assignment expressions in set literals and set comprehensions as per PEP 572. Patch by Pablo Galindo. - Fix a regression introduced by the new parser, where an unparenthesized walrus operator was not allowed within generator expressions. - types.GenericAlias objects can now be the targets of weakrefs. - Fixed a bug in the PEG parser that was causing crashes in debug mode. Now errors are checked in left-recursive rules to avoid cases where such errors do not get handled in time and appear as long-distance crashes in other places. - Fixed a possible crash in the PEG parser when checking for the ‘!=’ token in the barry_as_flufl rule. Patch by Pablo Galindo. - Fix handling of errors during creation of PyFunctionObject, which resulted in operations on uninitialized memory. Patch by Yonatan Goldschmidt. - Fix a bug in the parser, where a curly brace following a primary didn’t fail immediately. This led to invalid expressions like a {b} to throw a SyntaxError with a wrong offset, or invalid expressions ending with a curly brace like a { to not fail immediately in the REPL. - Fix possible buffer overflow in the new parser when checking for continuation lines. Patch by Pablo Galindo. - Run the parser two times. On the first run, disable all the rules that only generate better error messages to gain performance. If there’s a parse failure, run the parser a second time with those enabled. - Document the default implementation of object.__eq__. - Fix peephole optimizer misoptimize conditional jump + JUMP_IF_NOT_EXC_MATCH pair. - The garbage collector now tracks all user-defined classes. Patch by Brandt Bucher. - Fixed potential issues with removing not completely initialized module from sys.modules when import fails. - Star-unpacking is now allowed for with item’s targets in the PEG parser. - Fixed stack overflow in issubclass() and isinstance() when getting the __bases__ attribute leads to infinite recursion. - When loading a native module and a load failure occurs, prevent a possible UnicodeDecodeError when not running in a UTF-8 locale by decoding the load error message using the current locale’s encoding. - Correctly count control blocks in ‘except’ in compiler. Ensures that a syntax error, rather a fatal error, occurs for deeply nested, named exception handlers. Library - types.GenericAlias will now raise a TypeError when attempting to initialize with a keyword argument. Previously, this would cause the interpreter to crash if the interpreter was compiled with debug symbols. This does not affect interpreters compiled for release. Patch by Ken Jin. - CGIHTTPRequestHandler.run_cgi() HTTP_ACCEPT improperly parsed. Replace the special purpose getallmatchingheaders with generic get_all method and add relevant tests. - inspect.findsource() now raises OSError instead of IndexError when co_lineno of a code object is greater than the file length. This can happen, for example, when a file is edited after it was imported. PR by Irit Katriel. - Fix handling of trailing comments by inspect.getsource(). - ChainMap.__iter__ no longer calls __getitem__ on underlying maps - TracebackException no longer holds a reference to the exception’s traceback object. Consequently, instances of TracebackException for equivalent but non-equal exceptions now compare as equal. - We fixed an issue in pickle.whichmodule in which importing multiprocessing could change the how pickle identifies which module an object belongs to, potentially breaking the unpickling of those objects. - Clarify the error message for asyncio.IncompleteReadError when expected is None. - Extracting a symlink from a tarball should succeed and overwrite the symlink if it already exists. The fix is to remove the existing file or symlink before extraction. Based on patch by Chris AtLee, Jeffrey Kintscher, and Senthil Kumaran. - Fixed tkinter.ttk.Style.map(). The function accepts now the representation of the default state as empty sequence (as returned by Style.map()). The structure of the result is now the same on all platform and does not depend on the value of wantobjects. - Fix various issues with typing.Literal parameter handling (flatten, deduplicate, use type to cache key). Patch provided by Yurii Karabas. - Fix the threading.Thread class at fork: do nothing if the thread is already stopped (ex: fork called at Python exit). Previously, an error was logged in the child process. - The onerror callback from shutil.rmtree now receives correct function when os.open fails. - Fix os.sendfile() on illumos. - Fixed writing binary Plist files larger than 4 GiB. - The repr() of typing types containing Generic Alias Types previously did not show the parameterized types in the GenericAlias. They have now been changed to do so. - webbrowser: Ignore NotADirectoryError when calling xdg-settings. - binhex.binhex() consisently writes macOS 9 line endings. - Fix a stack overflow error for asyncio Task or Future repr(). - The overflow occurs under some circumstances when a Task or Future recursively returns itself. - Fix memory leak in subprocess.Popen() in case an uid (gid) specified in user (group, extra_groups) overflows uid_t (gid_t). - Improve asyncio.wait function to create the futures set just one time. - InvalidFileException and RecursionError are now the only errors caused by loading malformed binary Plist file (previously ValueError and TypeError could be raised in some specific cases). - Pickling heap types implemented in C with protocols 0 and 1 raises now an error instead of producing incorrect data. - plistlib: fix parsing XML plists with hexadecimal integer values - Fix an incorrectly formatted error from _codecs.charmap_decode() when called with a mapped value outside the range of valid Unicode code points. PR by Max Bernstein. - Fix pickling pure Python datetime.time subclasses. Patch by Dean Inwood. - Fixed a bug that was causing ctypes.util.find_library() to return None when triying to locate a library in an environment when gcc>=9 is available and ldconfig is not. Patch by Pablo Galindo - C14N 2.0 serialisation in xml.etree.ElementTree failed for unprefixed attributes when a default namespace was defined. - Fix a bug in the symtable module that was causing module-scope global variables to not be reported as both local and global. Patch by Pablo Galindo. - str() for the type attribute of the tkinter.Event object always returns now the numeric code returned by Tk instead of the name of the event type. - fix tkinter.EventType Enum so all members are strings, and none are tuples - Fix SQLite3 segfault when backing up closed database. Patch contributed by Peter David McCormick. - Fix the tarfile module to write only basename of TAR file to GZIP compression header. - Allow ctypes.wintypes to be imported on non-Windows systems. - shutil.which() now ignores empty entries in PATHEXT instead of treating them as a match. - Fix time-of-check/time-of-action issue in subprocess.Popen.send_signal. - Fix --outfile for cProfile / profile not writing the output file in the original directory when the program being profiled changes the working directory. PR by Anthony Sottile. - ZipFile truncates files to avoid corruption when a shorter comment is provided in append (“a”) mode. Patch by Jan Mazur. - Fixed KeyError exception when flattening an email to a string attempts to replace a non-existent Content-Transfer-Encoding header. Documentation - Fix the URL for the IMAP protocol documents. - Document __format__ functionality for IP addresses. - Clarify that subscription expressions are also valid for certain classes and types in the standard library, and for user-defined classes and types if the classmethod __class_getitem__() is provided. - Documented generic alias type and types.GenericAlias. Also added an entry in glossary for generic types. - In Programming FAQ “Sequences (Tuples/Lists)” section, add “How do you remove multiple items from a list”. - Fix RemovedInSphinx40Warning when building the documentation. Patch by Dong-hee Na. - Update the refcounts info of PyType_FromModuleAndSpec. - Fix tarfile’s extractfile documentation - Document some restrictions on the default string representations of numeric classes. Tests - Reenable test_gdb on gdb 9.2 and newer: https://bugzilla.redhat.com/show_bug.cgi?id=1866884 bug is fixed in gdb 10.1. - Fix test_asyncio.test_call_later() race condition: don’t measure asyncio performance in the call_later() unit test. The test failed randomly on the CI. - Include _testinternalcapi module in Windows installer for test suite - Fix test_logging.test_race_between_set_target_and_flush(): the test now waits until all threads complete to avoid leaking running threads. - Avoid a test failure in test_lib2to3 if the module has already imported at the time the test executes. Patch by Pablo Galindo. - Tests for CJK codecs no longer call eval() on content received via HTTP. - Fix test_site.test_license_exists_at_url(): call urllib.request.urlcleanup() to reset the global urllib.request._opener. Patch by Victor Stinner. - test_ssl: skip test_min_max_version_mismatch when TLS 1.0 is not available - Add tests for SIGINT handling in the runpy module. - Fixed a failure in test_tk.test_widgets.ScaleTest happening when executing the test with Tk 8.6.10. Build - Fix a race condition in “make regen-all” when make -jN option is used to run jobs in parallel. The clinic.py script now only use atomic write to write files. Moveover, generated files are now left unchanged if the content does not change, to not change the file modification time. - Update Py_UNREACHABLE to use __builtin_unreachable() if only the compiler is able to use it. Patch by Dong-hee Na. - Addressed three compiler warnings found by undefined behavior sanitizer (ubsan). IDLE - Fix reporting offset of the RE error in searchengine. - Get docstrings for IDLE calltips more often by using inspect.getdoc. - Mostly finish using ttk widgets, mainly for editor, settings, and searches. Some patches by Mark Roseman. - Use ‘IDLE Shell’ as shell title - Rewrite the Calltips doc section. - In calltips, stop reminding that ‘/’ marks the end of positional-only arguments. - Typing opening and closing parentheses inside the parentheses of a function call will no longer cause unnecessary “flashing” off and on of an existing open call-tip, e.g. when typed in a string literal. C API - Fix potential crash in deallocating method objects when dynamically allocated PyMethodDef’s lifetime is managed through the self argument of a PyCFunction. - Py_FileSystemDefaultEncodeErrors and Py_UTF8Mode are available again in limited API. - Readjustet and reapplied patches: - CVE-2021-3177-buf_ovrfl_PyCArg_repr.patch - bpo-31046_ensurepip_honours_prefix.patch - python-3.3.0b1-fix_date_time_compiler.patch - skip_random_failing_tests.patch - sphinx-update-removed-function.patch- Add CVE-2021-3177-buf_ovrfl_PyCArg_repr.patch fixing bsc#1181126 (CVE-2021-3177) buffer overflow in PyCArg_repr in _ctypes/callproc.c, which may lead to remote code execution.- (bsc#1180125) We really don't Require python-rpm-macros package. Unnecessary dependency.- Make python39-doc building again - Add no-skipif-doctests.patch, because SLE-15 version of Sphinx doesn't know about skipif directive in doctests.- Update sphinx-update-removed-function.patch patch to the latest version in python36.- Last try before this results in an editwar: * remove importlib_resources and importlib-metadata provides/obsoletes * import importlib_resources is not the same as import importlib.resources, same for metadata * The backport packages from PyPI needed for older flavors are specified as such for setuptools or in pyproject.toml. If a package requires them they typically add them with a python version qualifier and the packages have their own version numbers.- Add patch sphinx-update-removed-function.patch to no longer call a now removed function and to make documentation build independent of the Sphinx version (bsc#1179630, gh#python/cpython#13236).- Don't require packages which break build on SLE-15 although we really don't need them (python3-python-docs-theme and python3-sphinxcontrib-qthelp).- Fix build with RPM 4.16: error: bare words are no longer supported, please use "...": x86 == ppc.- Update to the final version 3.9.0: Complete changelog with all (many) changes from previous version is on https://docs.python.org/release/3.9.0/whatsnew/3.9.html Changes from the previous RC versions (not that many) are on https://docs.python.org/release/3.9.0/whatsnew/changelog.html#changelog- Buildrequire timezone only for general flavor. It's used in this flavor for the test suite.- Update to 3.9.0rc1: * Core and Builtins - bpo-38156: Handle interrupts that come after EOF correctly in PyOS_StdioReadline. * Library - bpo-41497: Fix potential UnicodeDecodeError in dis module. - bpo-41490: Update ensurepip to install pip 20.2.1 and setuptools 49.2.1. - bpo-41467: On Windows, fix asyncio recv_into() return value when the socket/pipe is closed (BrokenPipeError): return 0 rather than an empty byte string (b''). - bpo-41425: Make tkinter doc example runnable. - bpo-41384: Raise TclError instead of TypeError when an unknown option is passed to tkinter.OptionMenu. - bpo-38731: Fix NameError in command-line interface of py_compile. - bpo-41317: Use add_done_callback() in asyncio.loop.sock_accept() to unsubscribe reader early on cancellation. - bpo-41364: Reduce import overhead of uuid. - bpo-41341: Recursive evaluation of typing.ForwardRef in get_type_hints. - bpo-41182: selector: use DefaultSelector based upon implementation - bpo-40726: Handle cases where the end_lineno is None on ast.increment_lineno(). * Documentation - bpo-41045: Add documentation for debug feature of f-strings. - bpo-41314: Changed the release when from __future__ import annotations becomes the default from 4.0 to 3.10 (following a change in PEP 563). * Windows - bpo-41492: Fixes the description that appears in UAC prompts. - bpo-40948: Improve post-install message to direct people to the “py” command. - bpo-41412: The installer will now fail to install on Windows 7 and Windows 8. Further, the UCRT dependency is now always downloaded on demand. - bpo-40741: Update Windows release to include SQLite 3.32.3. * IDLE - bpo-41468: Improve IDLE run crash error message (which users should never see). - bpo-41373: Save files loaded with no line ending, as when blank, or different line endings, by setting its line ending to the system default. Fix regression in 3.8.4 and 3.9.0b4.- Synchronize formatting and fixes with python38.- Increase testsuite timeout to account for super long running test_peg_generator- Removed CVE-2019-20907_tarfile-inf-loop.patch: fixed in upstream - Removed recursion.tar: contained in upstream - Update to 3.9.0b5: - bpo-41304: Fixes python3x._pth being ignored on Windows, caused by the fix for bpo-29778 (CVE-2020-15801). - bpo-41162: Audit hooks are now cleared later during finalization to avoid missing events. - bpo-29778: Ensure python3.dll is loaded from correct locations when Python is embedded (CVE-2020-15523). - bpo-39603: Prevent http header injection by rejecting control characters in http.client.putrequest(…). - bpo-41295: Resolve a regression in CPython 3.8.4 where defining “__setattr__” in a multi-inheritance setup and calling up the hierarchy chain could fail if builtins/extension types were involved in the base types. - bpo-41247: Always cache the running loop holder when running asyncio.set_running_loop. - bpo-41252: Fix incorrect refcounting in _ssl.c’s _servername_callback(). - bpo-41215: Use non-NULL default values in the PEG parser keyword list to overcome a bug that was ' preventing Python from being properly compiled when using the XLC compiler. Patch by Pablo Galindo. - bpo-41218: Python 3.8.3 had a regression where compiling with ast.PyCF_ALLOW_TOP_LEVEL_AWAIT would aggressively mark list comprehension with CO_COROUTINE. Now only list comprehension making use of async/await will tagged as so. - bpo-41175: Guard against a NULL pointer dereference within bytearrayobject triggered by the bytearray() + bytearray() operation. - bpo-39960: The “hackcheck” that prevents sneaking around a type’s __setattr__() by calling the superclass method was rewritten to allow C implemented heap types. - bpo-41288: Unpickling invalid NEWOBJ_EX opcode with the C implementation raises now UnpicklingError instead of crashing. - bpo-39017: Avoid infinite loop when reading specially crafted TAR files using the tarfile module (CVE-2019-20907, bsc#1174091). - bpo-41235: Fix the error handling in ssl.SSLContext.load_dh_params(). - bpo-41207: In distutils.spawn, restore expectation that DistutilsExecError is raised when the command is not found. - bpo-39168: Remove the __new__ method of typing.Generic. - bpo-41194: Fix a crash in the _ast module: it can no longer be loaded more than once. It now uses a global state rather than a module state. - bpo-39384: Fixed email.contentmanager to allow set_content() to set a null string. - bpo-41300: Save files with non-ascii chars. Fix regression released in 3.9.0b4 and 3.8.4. - bpo-37765: Add keywords to module name completion list. Rewrite Completions section of IDLE doc. - bpo-40170: Revert PyType_HasFeature() change: it reads again directly the PyTypeObject.tp_flags member when the limited C API is not used, rather than always calling PyType_GetFlags() which hides implementation details.- Add CVE-2019-20907_tarfile-inf-loop.patch fixing bsc#1174091 (CVE-2019-20907, bpo#39017) avoiding possible infinite loop in specifically crafted tarball. Add recursion.tar as a testing tarball for the patch.- Changed bpo-31046_ensurepip_honours_prefix.patch to include fix from py3.8- Spec file fixes - Re-added subprocess-raise-timeout.patch: now compatible - Removed bpo34022-stop_hash-based_invalidation_w_SOURCE_DATE_EPOCH.patch: contained in upstream- Fix minor issues found in the staging.- Do not set ourselves as primary interpreter- Update to 3.9.0b4: - PEP 584, Union Operators in dict - PEP 585, Type Hinting Generics In Standard Collections - PEP 593, Flexible function and variable annotations - PEP 602, Python adopts a stable annual release cadence - PEP 615, Support for the IANA Time Zone Database in the Standard Library - PEP 616, String methods to remove prefixes and suffixes - PEP 617, New PEG parser for CPython - bpo#38379, garbage collection does not block on resurrected objects; - bpo#38692, os.pidfd_open added that allows process management without races and signals; - bpo#39926, Unicode support updated to version 13.0.0; - bpo#1635741, when Python is initialized multiple times in the same process, it does not leak memory anymore; - A number of Python builtins (range, tuple, set, frozenset, list, dict) are now sped up using PEP 590 vectorcall; - A number of Python modules (_abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time, _weakref) now use multiphase initialization as defined by PEP 489; - A number of standard library modules (audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios, zlib) are now using the stable ABI defined by PEP 384. - Remove upstreamed patches: - F00102-lib64.patch - SUSE-FEDORA-multilib.patch - OBS_dev-shm.patch - subprocess-raise-timeout.patch - bpo36302-sort-module-sources.patch - bpo40784-Fix-sqlite3-deterministic-test.patch- Update pre_checkin.sh and regenerate- Convert few dependencies to their pkgconfig counterparts- Remove release requirement on libpython, it is not really needed to be equal as the abi changes with versions- Add provides python3-bla on all the subpkgs in case we are primary provider of the functionality- Remove unversioned files from devel subpkg too - Remove main python3 files from -base based whether we are primary interpreter or not - Fix idle to be co-installable - Add condition to be primary to provide/obsolete python3-* - Fix doc to build in versioned folder so the pythons can be installed next to each other- Revert the full versioning of calls on the macros. These are generic so they should really just call python3 X- For the doc package we can build with generic flavor, we don't need the our-interpreter based one- Add provides for pytohn3X-typing/etc to allow BR on those still to work when needed- Change macros.python3 to use full versioned 3.8 instead of just 3 for python interpreter- Reduce some now unused conditionals- Redux the -base dependencies to match up pre-merge layout- Generate baselibs in pre-checkin too- Generate the importlib-failed using pre_checking again - Add back the information about skipped tests on the pre_checkin output- Use %python_pkg_name instead of hardcoding python3 where applicable - Sort out preamble with spec-cleaner- Calculate required variables instead of relying on their continuous manual update- Fix the -base module build again to generate only the deps we need- Replace OBS_dev-shm.patch with the upstream PR#20944- Use the %{python_pkg_name} on more places to allow easier multiversioning - Switch to _multibuild approach for easier maintenance of this package. All is now in one spec file with 3 conditionals: * bcond_with base * bcond_with doc * bcond_with general- add requires python3-base on libpython subpackage (bsc#1167008)- build against Sphinx 2.x until python is compatible with Sphinx 3.x (see gh#python/cpython#19397, bpo#40204)- Fix build with SQLite 3.32 (bpo#40783) add bpo40784-Fix-sqlite3-deterministic-test.patch- Update to version 3.8.3: - Complete list of changes is available at https://docs.python.org/release/3.8.3/whatsnew/changelog.html#python-3-8-3-final, but most of them are just bugfixes. - Removed patch CVE-2020-8492-urllib-ReDoS.patch: contained in upstream- Add #!BuildIgnore: gdk-pixbuf-loader-rsvg to python3 SPEC- Add patch bsc1167501-invalid-alignment.patch (bsc#1167501, bpo#40052) to fix alignment in abstract.h header file.- Update list of skipped tests for qemu linux-user build, test_setegid (test.test_os.PosixUidGidTests) is confusing it- Update to 3.8.2: - Complete list of changes is available at https://docs.python.org/release/3.8.2/whatsnew/changelog.html#python-3-8-2-final, but most of them are just bugfixes. - Updated patches: - F00102-lib64.patch - OBS_dev-shm.patch - SUSE-FEDORA-multilib.patch - subprocess-raise-timeout.patch- Add CVE-2020-8492-urllib-ReDoS.patch fixing the security bug "Python urrlib allowed an HTTP server to conduct Regular Expression Denial of Service (ReDoS)" (bsc#1162367)- Add Requires: libpython%{so_version} == %{version}-%{release} to python3-base to keep both packages always synchronized (bsc#1162224).- Do not pull in bluez in base again, explain the cycle, it needs to be solved by bluez maintainer for us by providing just the headers separately- Reame idle icons to idle3 in order to not conflict with python2 variant of the package * renamed the icons * renamed icon load in desktop file- Add importlib_resources provide/obsolete as it is integral part of the lang since 3.7 release- Add -fno-semantic-interposition as it brings speed up: https://fedoraproject.org/wiki/Changes/PythonNoSemanticInterpositionSpeedup- Update to 3.8.1: - This is mainly bugfix release and no significant changes to API are expected. The full changelog is available on https://docs.python.org/3.8/whatsnew/changelog.html#python-3-8-1 - Remove bpo-38688_shutil.copytree_prevent-infinite-recursion.patch, which is included in the upstream tarball.- Add bpo-31046_ensurepip_honours_prefix.patch which makes ensurepip to honour the value of $(prefix). Proposed fix for bpo#31046..- Move bluez-devel dependency to base as it is needed for socket.AF_BLUETOOTH and otherwise does not work- Reintroduce QtHelp with the help of the new BR python-sphinxcontrib-qthelp.- Fix SUSE-FEDORA-multilib.patch, the platform agnostic infix for library installation is "lib", not "dir".- Move idle subpackage build from python3-base to python3. appstream-glib required for packaging introduces considerable extra dependencies and a build loop via rust/librsvg. - Correct installation of idle IDE icons: + idle.png is not the target directory + non-GNOME-specific icons belong into icons/hicolor - Add required Name key to idle3 desktop file- Update to the final release 3.8.0. . - New Features: - Assignment expressions - Positional-only parameters - Parallel filesystem cache for compiled bytecode files - Debug build uses the same ABI as release build - f-strings support = for self-documenting expressions and debugging - PEP 578: Python Runtime Audit Hooks - PEP 587: Python Initialization Configuration - Vectorcall: a fast calling protocol for CPython - Pickle protocol 5 with out-of-band data buffers - New modules: - importlib.metadata - Improved modules: - ast asyncio, builtins, collections, curses, ctypes, datetime, functools, gc, gettext, gzip, idelib and IDLE, inspect, io, json.tool, math, mmap, multiprocessing, os, os.path, pathlib, pickle, plistlib, py_compile, shlex, shutil, socket, ssl, statistics, sys, tarfile, threading, tokenize, tkinter, time, typing, unicodedata, unittest, venv, weakref, xml - C API improvements - bdist_winnst command has been deprecated (use bdist_wheel) - https://docs.python.org/3.8/whatsnew/3.8.html remains rest of changes including documentation on how to port your programs to the current version of Python.- Add idle3.appdata.xml and idle3.desktop (originally from Fedora) to make Idle3 full GUI desktop application. (bsc#1153830)- Drop intltool from BuildRequires. Doesn't appear to be used.- Add folder version to allow tarball downloads even for beta/rc releases- Revert patches from Fedora (F00102-lib64.patch and F00251-change-user-install-location.patch) into their original prisitine Fedora versions, SUSE-FEDORA-multilib.patch refreshed accordingly.- Correct quotation of platsubdir in Lib/distutils/command/install.py- Replace python-3.6.0-multilib.patch with two patches from Fedora (F00102-lib64.patch and F00251-change-user-install-location.patch), and our own SUSE-FEDORA-multilib.patch to allow better cooperation with Fedora and better upstreaming. - Add OBS_dev-shm.patch fixing bpo#38377- Pull in just gettext and let solver to sort out between: gettext-runtime-mini and gettext-runtime- Update to 3.8.0rc1. Overall changes from 3.7: - PEP 572, Assignment expressions - PEP 570, Positional-only arguments - PEP 587, Python Initialization Configuration (improved embedding) - PEP 590, Vectorcall: a fast calling protocol for CPython - PEP 578, Runtime audit hooks - PEP 574, Pickle protocol 5 with out-of-band data - Typing-related: PEP 591 (Final qualifier), PEP 586 (Literal types), and PEP 589 (TypedDict) - Parallel filesystem cache for compiled bytecode - Debug builds share ABI as release builds, also the 'm' ABI tag was removed (irrelevant since 3.4), bpo#36707 - f-strings support a handy = specifier for debugging - continue is now legal in finally: blocks - on Windows, the default asyncio event loop is now ProactorEventLoop - on macOS, the spawn start method is now used by default in multiprocessing - multiprocessing can now use shared memory segments to avoid pickling costs between processes - typed_ast is merged back to CPython - LOAD_GLOBAL is now 40% faster - pickle now uses Protocol 4 by default, improving performance - Refreshed patches: - CVE-2019-5010-null-defer-x509-cert-DOS.patch - python-3.3.0b1-fix_date_time_compiler.patch - python-3.6.0-multilib.patch - subprocess-raise-timeout.patch- Add bpo36302-sort-module-sources.patch (boo#1041090)- Try harder obsoleting importlib-metadata- Update to 3.8.0b4: Many bugfixes, full list on https://docs.python.org/3.8/whatsnew/changelog.html#python-3-8-0-beta-4- Re-enable test_threading on aarch64- Remove xrpm from subpackage tk description- Update to 3.8.0b3: Many bugfixes, full list on https://docs.python.org/3.8/whatsnew/changelog.html#python-3-8-0-beta-3 - Patches reapplied: - python-3.3.0b1-fix_date_time_compiler.patch - python-3.3.0b1-test-posix_fadvise.patch - python-3.6.0-multilib.patch - subprocess-raise-timeout.patch- Add Provides: python3-importlib-metadata- Update to 3.8.0b2: Many bugfixes, full list on https://docs.python.org/3.8/whatsnew/changelog.html#python-3-8-0-beta-2 - Patches included in upstream: - bpo-37169_PyObject_IsFreed.patch - Patches reapplied: - 00251-change-user-install-location.patch - distutils-reproducible-compile.patch - python-3.3.0b1-localpath.patch - python-3.6.0-multilib.patch- Update list of skipped tests for qemu linux-user build - Don't do profiling in qemu linux-user build- Update to 3.8.0b1 (changes since 3.7.*): - PEP 572, Assignment expressions - PEP 570, Positional-only arguments - PEP 587, Python Initialization Configuration (improved embedding) - PEP 590, Vectorcall: a fast calling protocol for CPython - PEP 578, Runtime audit hooks - PEP 574, Pickle protocol 5 with out-of-band data - Typing-related: PEP 591 (Final qualifier), PEP 586 (Literal types), and PEP 589 (TypedDict) - Parallel filesystem cache for compiled bytecode - Debug builds share ABI as release builds - f-strings support a handy = specifier for debugging - continue is now legal in finally: blocks - multiprocessing can now use shared memory segments to avoid pickling costs between processes - typed_ast is merged back to CPython - LOAD_GLOBAL is now 40% faster - pickle now uses Protocol 4 by default, improving performance - Remove patches which were included in the upstream: - 00251-change-user-install-location.patch - 00316-mark-bdist_wininst-unsupported.patch - CVE-2019-9947-no-ctrl-char-http.patch - raise_SIGING_not_handled.patch- Set _lto_cflags to nil as the package is using LTO via --enable-lto. That will prevent to propage LTO for Python modules that are built in a separate package.- Update to 3.8.0.a3: - PEP 572: Assignment Expressions. - Other (mostly small) changes are on https://docs.python.org/3.8/whatsnew/changelog.html#python-3-8-0-alpha-3- bsc#1130840 (CVE-2019-9947): add CVE-2019-9947-no-ctrl-char-http.patch Address the issue by disallowing URL paths with embedded whitespace or control characters through into the underlying http client request. Such potentially malicious header injection URLs now cause a ValueError to be raised.- Fix metadata of patches. - Rename boo1071941-make-install-in-sep-loc.patch to 00251-change-user-install-location.patch which is the original name, so it can be looked up in the Fedora VCS.- Mark distutils bdist_wininst command unsupported with 00316-mark-bdist_wininst-unsupported.patch - Remove Windows bdist_wininst executables from runtime package- Update to 3.7.3, which is the maintenance release without any significant changes in API. - Updated patches: - CVE-2019-5010-null-defer-x509-cert-DOS.patch - distutils-reproducible-compile.patch - python-3.3.0b1-fix_date_time_compiler.patch - python-3.6.0-multilib.patch - raise_SIGING_not_handled.patch- Remove building of Qt Develop help files.- Return distutils-reproducible-compile.patch which is still missing (still unfinished bpo#29708).- Update to 3.8.0a2: * List of all (mostly small) changes are on https://docs.python.org/3.8/whatsnew/changelog.html#python-3-8-0-alpha-2- Build nis module again.- Update to 3.8.0a1: * The most visible change so far is probably the implementation of PEP 572: Assignment Expressions. For a detailed list of changes, see: https://docs.python.org/3.8/whatsnew/changelog.html * Recover building of nis module properly in python3 package - Update patches: * CVE-2019-5010-null-defer-x509-cert-DOS.patch * python-3.3.0b1-fix_date_time_compiler.patch * python-3.3.0b1-test-posix_fadvise.patch * python-3.6.0-multilib.patch * raise_SIGING_not_handled.patch- Put LICENSE file where it belongs (bsc#1121852)- bsc#1122191: add CVE-2019-5010-null-defer-x509-cert-DOS.patch fixing bpo-35746. An exploitable denial-of-service vulnerability exists in the X509 certificate parser of Python.org Python 2.7.11 / 3.7.2. A specially crafted X509 certificate can cause a NULL pointer dereference, resulting in a denial of service. An attacker can initiate or accept TLS connections using crafted certificates to trigger this vulnerability.- Do not require full gettext in order to avoid pulling in the glib2 as a dependency- Update to 3.7.2: * bugfix release: https://docs.python.org/3.7/whatsnew/changelog.html#changelog- Stop applying python-3.6.0-multilib-new.patch (which is still WIP), and apply the old proven python-3.6.0-multilib.patch instead.- Use upstream-recommended %{_rpmconfigdir}/macros.d directory for the rpm macros.- Upgrade to 3.7.2rc1: * bugfix release, for the full list of all changes see https://docs.python.org/3.7/whatsnew/changelog.html#changelog - Make run of the test suite more verbose- Write summaries without em dashes.- Remove python-3.3.0b1-curses-panel.patch it is unnecessary anymore. - Add boo1071941-make-install-in-sep-loc.patch to make pip and distutils in user environment install into separate location (boo#1071941) Set values of prefix and exec_prefix in distutils install command to /usr/local if executable is /usr/bin/python* and RPM build is not detected to make pip and distutils install into separate location - Remove finally python-3.3.3-skip-distutils-test_sysconfig_module.patch - Remove distutils-reproducible-compile.patch which doesn't make really much difference in reproducibility (see gh#python/cpython#8057 and discussion there).- Rename Stop_hash-based_invalidation_w_SOURCE_DATE_EPOCH.patch to bpo34022-stop_hash-based_invalidation_w_SOURCE_DATE_EPOCH.patch- Add dependency on bluez-devel to build support for Bluetooth (boo#1109998)- Add devhelp subpackage and split qthelp into another subpackage.- Remove python-3.0b1-record-rpm.patch and Python-3.0b1-record-rpm.patch, as they are not needed anymore- Switch off test_threading for optimization builds.- Update to python-3.7.1. This is just a brief overview, complete changelog available at https://docs.python.org/3.7/whatsnew/changelog.html#python-3-7-1-final: Library bpo-34970: Protect tasks weak set manipulation in asyncio.all_tasks() - Patches already accepted upstream are removed: * 00307-allow-to-call-Py_Main-after-Py_Initialize.patch * 00308-tls-1.3.patch - New patches added: * Stop_hash-based_invalidation_w_SOURCE_DATE_EPOCH.patch * raise_SIGING_not_handled.patch - All other patches refreshed via quilt.- Add raise_SIGING_not_handled.patch to fix bsc#1094814- Add patch to fix importlib return types: * python3-imp-returntype.patch- bpo-34022 still not completely fixed, so we have to keep excluding test_cmd_line_script, test_multiprocessing_main_handling, and test_runpy from the test suite.- Update to python 3.7.1~rc2: Core and Builtins bpo-34879: Fix a possible null pointer dereference in bytesobject.c. Patch by Zackery Spytz. bpo-34854: Fixed a crash in compiling string annotations containing a lambda with a keyword-only argument that doesn’t have a default value. bpo-34320: Fix dict(od) didn’t copy iteration order of OrderedDict. Library bpo-34769: Fix for async generators not finalizing when event loop is in debug mode and garbage collector runs in another thread. bpo-34922: Fixed integer overflow in the digest() and hexdigest() methods for the SHAKE algorithm in the hashlib module. bpo-34900: Fixed unittest.TestCase.debug() when used to call test methods with subtests. Patch by Bruno Oliveira. bpo-34871: Fix inspect module polluted sys.modules when parsing __text_signature__ of callable. bpo-34872: Fix self-cancellation in C implementation of asyncio.Task bpo-34819: Use a monotonic clock to compute timeouts in Executor.map() and as_completed(), in order to prevent timeouts from deviating when the system clock is adjusted. bpo-34334: In QueueHandler, clear exc_text from LogRecord to prevent traceback from being written twice. bpo-6721: Acquire the logging module’s commonly used internal locks while fork()ing to avoid deadlocks in the child process. bpo-34172: Fix a reference issue inside multiprocessing.Pool that caused the pool to remain alive if it was deleted without being closed or terminated explicitly. Documentation bpo-32174: chm document displays non-ASCII charaters properly on some MBCS Windows systems. Tests bpo-32962: Fixed test_gdb when Python is compiled with flags - mcet -fcf-protection -O0. C API bpo-34910: Ensure that PyObject_Print() always returns -1 on error. Patch by Zackery Spytz.- Add Stop_hash-based_invalidation_w_SOURCE_DATE_EPOCH.patch to fix problems with SOURCE_DATE_EPOCH variable (bpo-34022)- Add patch to fix build with tls1.3 supported openssl * 00308-tls-1.3.patch - Add patch to fix Py_Main calls after Py_initialize * 00307-allow-to-call-Py_Main-after-Py_Initialize.patch- Add -fwrapv to OPTS, which is default for python3 anyway See for example https://github.com/zopefoundation/persistent/issues/86 for bugs which are caused by avoiding it.- Fix ownership of _contextvars, _queue, and _xxtestfuzz- Switch off LTO for distros with older GCC - Fix %files- Add dependency over libuuid-devel- update to python 3.7.0 Complete overview of changes is available on https://docs.python.org/3/whatsnew/3.7.html, these are just highlights: * PEP 563, postponed evaluation of type annotations. * async and await are now reserved keywords. * New library modules: contextvars: PEP 567 – Context Variables dataclasses: PEP 557 – Data Classes importlib.resources * New built-in features: PEP 553, the new breakpoint() function. * Python data model improvements: PEP 562, customization of access to module attributes. PEP 560, core support for typing module and generic types. the insertion-order preservation nature of dict objects has been declared to be an official part of the Python language spec. * Significant improvements in the standard library: The asyncio module has received new features, significant usability and performance improvements. The time module gained support for functions with nanosecond resolution. * CPython implementation improvements: Avoiding the use of ASCII as a default text encoding: PEP 538, legacy C locale coercion PEP 540, forced UTF-8 runtime mode PEP 552, deterministic .pycs the new development runtime mode PEP 565, improved DeprecationWarning handling * C API improvements: PEP 539, new C API for thread-local storage * Documentation improvements: PEP 545, Python documentation translations New documentation translations: Japanese, French, and Korean. - drop python3-sorted_tar.patch - drop 0001-allow-for-reproducible-builds-of-python-packages.patch - refresh python-3.6.0-multilib-new.patch - refresh subprocess-raise-timeout.patch * new C API for thread-local storage * Deterministic pyc files * Built-in breakpoint() * Data Classes * Core support for typing module and generic types * Customization of access to module attributes * Postponed evaluation of annotations * Time functions with nanosecond resolution * Improved DeprecationWarning handling * Context Variables * Avoiding the use of ASCII as a default text encoding (PEP 538, legacy C locale coercion and PEP 540, forced UTF-8 runtime mode) * The insertion-order preservation nature of dict objects is now an official part of the Python language spec. * Notable performance improvements in many areas.- disable lto with gcc versions below 7 (results in link failures)- Use faster find subcommand execution strategies.- Do not mention the testsuite disabling in opts as it was moved to main pkg so base is test-free- As we run in main python package do not generate the pre_checkin from both now- Move the tests from base to generic package wrt bsc#1088573 * We still fail the whole distro if python3 is not build * The other archs than x86_64 took couple of hours to unblock build of other software, this way we work around the issue - Some tests are still run in -base for the LTO tweaking, but at least it is not run twice- update to 3.6.5 * bugfix release * see Misc/NEWS for details - drop ctypes-pass-by-value.patch - drop fix-localeconv-encoding-for-LC_NUMERIC.patch - refresh python-3.6.0-multilib-new.patch- Created %so_major and %so_minor macros - Put Tools/gdb/libpython.py script into proper place and ship it with devel subpackage.- ctypes-pass-by-value.patch: Fix pass by value for structs on aarch64- Add python3-sorted_tar.patch (boo#1081750)- Drop python3-tk and python3-idle recommends to reduce python3 always pulling X stack bsc#1081751- Add patch to fix glibc 2.27 fail bsc#1079761: * fix-localeconv-encoding-for-LC_NUMERIC.patch- Update skip_random_failing_tests.patch (for PowerPC) to avoid test_call_later failure- move XML modules and python3-xml provide to python3-base (fixes bsc#1077230) - move ensurepip to base- Add skip_random_failing_tests.patch only for PowerPC- update to 3.6.4 * bugfix release, over a hundred bugs fixed * see Misc/NEWS for details - drop upstreamed python3-ncurses-6.0-accessors.patch - drop PYTHONSTARTUP hooks that cause spurious startup errors * fixes bsc#1070738 * the relevant feature (REPL history) is now built into Python itself- Install 2to3-%{python_version} executable (override defattr of the -tools package). 2to3 (unversioned) is a symlink and does not carry permissions (bsc#1070853).- move 2to3 to python3-tools package- update to 3.6.3 * bugfix release, over a hundred bugs fixed * see Misc/NEWS for details - drop upstreamed 0001-3.6-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-3093.patch- drop python-2.7-libffi-aarch64.patch: this patches the intree copy of libffi which is unused/deleted in the line afterwards - fix build against system libffi: include flags weren't set so it actually used the in-tree libffi headers.- Fix test broken with OpenSSL 1.1 (bsc#1042670) * add 0001-3.6-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-3093.patch- Update RPM group for python documentation.- fix missing %{?armsuffix}- distutils-reproducible-compile.patch: ensure distutils order files before compiling, which works around bsc#1049186- Add libnsl-devel build requires for glibc obsoleting libnsl- update to 3.6.2 * bugfix release, over a hundred bugs fixed * see Misc/NEWS for details - drop upstreamed test-socket-aead-kernel49.patch - add Provides: python3-typing (fixes bsc#1050653) - drop duplicate Provides: python3- drop db-devel from requirements- Add missing link to python library in config dir (bsc#1040164)- update to 3.6.1 * bugfix release, over a hundred bugs fixed * never add import location's parent directory to sys.path * switch to git for version control, build changes related to that * fix "failed to get random numbers" on old kernels (bsc#1029902) * several crashes and memory leaks corrected * f-string are no longer accepted as docstrings- prevent regenerating AST at build-time more robustly - add "--without profileopt" and "--without testsuite" options to python3-base to allow short circuiting when working on the package- Add 0001-allow-for-reproducible-builds-of-python-packages.patch upstream https://github.com/python/cpython/pull/296- reenable test_socket with AEAD patch (test-socket-aead-kernel49.patch) - reintroduce %py3_soflags macro (and better named %cpython3_soabi equivalent)- update to 3.6.0 * PEP 498 Formated string literals * PEP 515 Underscores in numeric literals * PEP 526 Syntax for variable annotations * PEP 525 Asynchronous generators * PEP 530 Asynchronous comprehensions * PEP 506 New "secrets" module for safe key generation * less memory consumed by dicts * dtrace and systemtap support * improved asyncio module * better defaults for ssl * new hashing algorithms in hashlib * bytecode format changed to allow more optimizations * "async" and "await" are on track to be reserved words * StopIteration from generators is deprecated * support for openssl < 1.0.2 is deprecated * os.urandom now blocks when getrandom() blocks * huge number of new features, bugfixes and optimizations * see https://docs.python.org/3.6/whatsnew/3.6.html for details - rework multilib patch: drop Python-3.5.0-multilib.patch, implement upstreamable python-3.6.0-multilib-new.patch - refresh python-3.3.0b1-localpath.patch, subprocess-raise-timeout.patch - drop upstreamed Python-3.5.1-fix_lru_cache_copying.patch - finally drop python-2.6b1-canonicalize2.patch that was not applied in source and only kept around in case we needed it in the future. (which we don't, as it seems) - update import_failed map and baselibs - build ctypes against system libffi (buildrequire libffi-devel in python3-base) - add new key to keyring (signed by keys already in keyring) - introduced common configure section between python3 and python3-base - moved pyconfig.h and Makefile to devel subpackage as distutils no longer need it at runtime - added python-rpm-macros dependency, regenerated macros file, drop macros.python3.py because it is not used now - improve summaries and descriptions (fixes bsc#917607) - enabled Link-Time Optimization, see what happens - including skipped_tests.py in pre_checkin.sh run - run specs through spec-cleaner, rearrange sections- move _hashlib and _ssl modules and tests to python3-base - recommend python3- Skip test_asyncio under qemu_user_space_build- Add Python-3.5.1-fix_lru_cache_copying.patch Fix copying the lru_cache() wrapper object. Fixes deep-copying lru_cache regression, which worked on previous versions of python but fails on python 3.5. This fixes a bunch of packages in devel:languages:python3. See: https://bugs.python.org/issue25447- Build the docs in .qch format as well- update to 3.5.1 * bugfix-only release, dozens of bugs fixed - Drop upstreamed Python-3.5.0-_Py_atomic_xxx-symbols.patch - "Python3" to "Python 3" in summary * This seems cleaner and fixes and rpmlint warning- Add Python-3.5.0-_Py_atomic_xxx-symbols.patch This fixes a build error for many packages that use the Python, C-API. This patch is already accepted upstream and is slated to appear in python 3.5.1.- update to 3.5.0 * coroutines with async/await syntax * matrix multiplication operator `@` * unpacking generalizations * new modules `typing` and `zipapp` * type annotations * .pyo files replaced by custom suffixes for optimization levels in __pycache__ * support for memory BIO in ssl module * performance improvements in several modules * and many more - removals and behavior changes * deprecated `__version__` is removed * support for .pyo files was removed * system calls are auto-retried on EINTR * bare generator expressions in function calls now cause SyntaxError (change "f(x for x in i)" to "f((x for x in i))" to fix) * removed undocumented `format` member of private `PyMemoryViewObject` struct * renamed `PyMemAllocator` to `PyMemAllocatorEx` - redefine %dynlib macro to reflect that modules now have arch+os as part of name - module `time` is now built-in - dropped upstreamed patches: python-3.4.1-fix-faulthandler.patch python-3.4.3-test-conditional-ssl.patch python-fix-short-dh.patch (also dropped dh2048.pem required for this patch) - updated patch Python-3.3.0b2-multilib.patch to Python-3.5.0-multilib.patch - python-ncurses-6.0-accessors.patch taken from python 2 to fix build failure with new gcc + ncurses- Add python3-ncurses-6.0-accessors.patch: Fix build with NCurses 6.0 and OPAQUE_WINDOW set to 1.- improve import_failed hook to do the right thing when invoking missing modules with "python3 -m modulename" (boo#942751)- Build with --enable-loadable-sqlite-extensions to make it works as geospatial database.- Fix source list for previous change (add dh2048.pem).- dh2048.pem: added generated 2048 dh parameter set to fix ssl test (bsc#935856) - python-fix-short-dh.patch: replace the 512 bits dh parameter set by 2048 bits to fix build with new openssl 1.0.2c (bsc#935856)- ctypes-libffi-aarch64.patch: remove upstreamed patch - python-2.7-libffi-aarch64.patch: Fix argument passing in libffi for aarch64- drop the PDF subpackage (removes the massive texlive dependency, and most likely nobody is using the PDFs anyway)- python-3.4.3-test-conditional-ssl.patch - restore tests failing because test_urllib was unconditionally importing ssl (without really needing it) - restore functionality of multilib patch - drop libffi-ppc64le.diff because upstream completely changed everything yet again (sorry ppc64 folks :| )- Update to version 3.4.3 - Drop upstreamed CVE-2014-4650-CGIHTTPServer-traversal.patch (bpo#21766)- Add python-3.4.1-fix-faulthandler.patch, upstream patch for bogus faulthandler which fails with GCC 5.- asyncio has been merged in python3 main package; provide and obsolete it - Remove obsolete AUTHORS section - Remove redundant %clean section- Only pkgconfig(x11) is required for build, not the whole set of packages provided by xorg-x11-devel metapackage.- add %python3_version rpm macro for Fedora compatibility - add missing argument in import_failed, rename Novell Bugzilla to SUSE Bugzillapython39-doch02-armsrv3 1726756462  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKL3.10.15-150400.4.57.13.10.15-150400.4.57.1      !!!!!!!"""""""""""""""""""""python3.10MiscACKSHISTORYNEWSPortingREADMEREADME.coverityREADME.valgrindSpecialBuilds.txtcoverity_model.cgdbinitindent.propython-config.inpython-config.sh.inpython-embed.pc.inpython-wing3.wprpython-wing4.wprpython-wing5.wprpython.manpython.pc.inrequirements-test.txtstable_abi.txtsvnmap.txtvalgrind-python.suppvgrindefshtml_downloads6dc1f3f4f0e6ca13cb42ddf4d6cbc8aftzinfo_examples.py_imageshashlib-blake2-tree.pnglogging_flow.pngpathlib-inheritance.pngtk_msg.pngturtle-star.pngwin_installer.png_sourcesabout.rst.txtbugs.rst.txtc-apiabstract.rst.txtallocation.rst.txtapiabiversion.rst.txtarg.rst.txtbool.rst.txtbuffer.rst.txtbytearray.rst.txtbytes.rst.txtcall.rst.txtcapsule.rst.txtcell.rst.txtcode.rst.txtcodec.rst.txtcomplex.rst.txtconcrete.rst.txtcontextvars.rst.txtconversion.rst.txtcoro.rst.txtdatetime.rst.txtdescriptor.rst.txtdict.rst.txtexceptions.rst.txtfile.rst.txtfloat.rst.txtfunction.rst.txtgcsupport.rst.txtgen.rst.txtimport.rst.txtindex.rst.txtinit.rst.txtinit_config.rst.txtintro.rst.txtiter.rst.txtiterator.rst.txtlist.rst.txtlong.rst.txtmapping.rst.txtmarshal.rst.txtmemory.rst.txtmemoryview.rst.txtmethod.rst.txtmodule.rst.txtnone.rst.txtnumber.rst.txtobjbuffer.rst.txtobject.rst.txtobjimpl.rst.txtrefcounting.rst.txtreflection.rst.txtsequence.rst.txtset.rst.txtslice.rst.txtstable.rst.txtstructures.rst.txtsys.rst.txttuple.rst.txttype.rst.txttypehints.rst.txttypeobj.rst.txtunicode.rst.txtutilities.rst.txtveryhigh.rst.txtweakref.rst.txtcontents.rst.txtcopyright.rst.txtdistributingindex.rst.txtdistutils_setuptools_disclaimer.rst.txtapiref.rst.txtbuiltdist.rst.txtcommandref.rst.txtconfigfile.rst.txtexamples.rst.txtextending.rst.txtindex.rst.txtintroduction.rst.txtpackageindex.rst.txtsetupscript.rst.txtsourcedist.rst.txtuploading.rst.txtextendingbuilding.rst.txtembedding.rst.txtextending.rst.txtindex.rst.txtnewtypes.rst.txtnewtypes_tutorial.rst.txtwindows.rst.txtfaqdesign.rst.txtextending.rst.txtgeneral.rst.txtgui.rst.txtindex.rst.txtinstalled.rst.txtlibrary.rst.txtprogramming.rst.txtwindows.rst.txtglossary.rst.txthowtoannotations.rst.txtargparse.rst.txtclinic.rst.txtcporting.rst.txtcurses.rst.txtdescriptor.rst.txtfunctional.rst.txtindex.rst.txtinstrumentation.rst.txtipaddress.rst.txtlogging-cookbook.rst.txtlogging.rst.txtpyporting.rst.txtregex.rst.txtsockets.rst.txtsorting.rst.txtunicode.rst.txturllib2.rst.txtinstallindex.rst.txtinstallingindex.rst.txtlibrary2to3.rst.txt__future__.rst.txt__main__.rst.txt_thread.rst.txtabc.rst.txtaifc.rst.txtallos.rst.txtarchiving.rst.txtargparse.rst.txtarray.rst.txtast.rst.txtasynchat.rst.txtasyncio-api-index.rst.txtasyncio-dev.rst.txtasyncio-eventloop.rst.txtasyncio-exceptions.rst.txtasyncio-future.rst.txtasyncio-llapi-index.rst.txtasyncio-platforms.rst.txtasyncio-policy.rst.txtasyncio-protocol.rst.txtasyncio-queue.rst.txtasyncio-stream.rst.txtasyncio-subprocess.rst.txtasyncio-sync.rst.txtasyncio-task.rst.txtasyncio.rst.txtasyncore.rst.txtatexit.rst.txtaudioop.rst.txtaudit_events.rst.txtbase64.rst.txtbdb.rst.txtbinary.rst.txtbinascii.rst.txtbinhex.rst.txtbisect.rst.txtbuiltins.rst.txtbz2.rst.txtcalendar.rst.txtcgi.rst.txtcgitb.rst.txtchunk.rst.txtcmath.rst.txtcmd.rst.txtcode.rst.txtcodecs.rst.txtcodeop.rst.txtcollections.abc.rst.txtcollections.rst.txtcolorsys.rst.txtcompileall.rst.txtconcurrency.rst.txtconcurrent.futures.rst.txtconcurrent.rst.txtconfigparser.rst.txtconstants.rst.txtcontextlib.rst.txtcontextvars.rst.txtcopy.rst.txtcopyreg.rst.txtcrypt.rst.txtcrypto.rst.txtcsv.rst.txtctypes.rst.txtcurses.ascii.rst.txtcurses.panel.rst.txtcurses.rst.txtcustominterp.rst.txtdataclasses.rst.txtdatatypes.rst.txtdatetime.rst.txtdbm.rst.txtdebug.rst.txtdecimal.rst.txtdevelopment.rst.txtdevmode.rst.txtdialog.rst.txtdifflib.rst.txtdis.rst.txtdistribution.rst.txtdistutils.rst.txtdoctest.rst.txtemail.charset.rst.txtemail.compat32-message.rst.txtemail.contentmanager.rst.txtemail.encoders.rst.txtemail.errors.rst.txtemail.examples.rst.txtemail.generator.rst.txtemail.header.rst.txtemail.headerregistry.rst.txtemail.iterators.rst.txtemail.message.rst.txtemail.mime.rst.txtemail.parser.rst.txtemail.policy.rst.txtemail.rst.txtemail.utils.rst.txtensurepip.rst.txtenum.rst.txterrno.rst.txtexceptions.rst.txtfaulthandler.rst.txtfcntl.rst.txtfilecmp.rst.txtfileformats.rst.txtfileinput.rst.txtfilesys.rst.txtfnmatch.rst.txtfractions.rst.txtframeworks.rst.txtftplib.rst.txtfunctional.rst.txtfunctions.rst.txtfunctools.rst.txtgc.rst.txtgetopt.rst.txtgetpass.rst.txtgettext.rst.txtglob.rst.txtgraphlib.rst.txtgrp.rst.txtgzip.rst.txthashlib.rst.txtheapq.rst.txthmac.rst.txthtml.entities.rst.txthtml.parser.rst.txthtml.rst.txthttp.client.rst.txthttp.cookiejar.rst.txthttp.cookies.rst.txthttp.rst.txthttp.server.rst.txti18n.rst.txtidle.rst.txtimaplib.rst.txtimghdr.rst.txtimp.rst.txtimportlib.metadata.rst.txtimportlib.rst.txtindex.rst.txtinspect.rst.txtinternet.rst.txtintro.rst.txtio.rst.txtipaddress.rst.txtipc.rst.txtitertools.rst.txtjson.rst.txtkeyword.rst.txtlanguage.rst.txtlinecache.rst.txtlocale.rst.txtlogging.config.rst.txtlogging.handlers.rst.txtlogging.rst.txtlzma.rst.txtmailbox.rst.txtmailcap.rst.txtmarkup.rst.txtmarshal.rst.txtmath.rst.txtmimetypes.rst.txtmm.rst.txtmmap.rst.txtmodulefinder.rst.txtmodules.rst.txtmsilib.rst.txtmsvcrt.rst.txtmultiprocessing.rst.txtmultiprocessing.shared_memory.rst.txtnetdata.rst.txtnetrc.rst.txtnis.rst.txtnntplib.rst.txtnumbers.rst.txtnumeric.rst.txtoperator.rst.txtoptparse.rst.txtos.path.rst.txtos.rst.txtossaudiodev.rst.txtpathlib.rst.txtpdb.rst.txtpersistence.rst.txtpickle.rst.txtpickletools.rst.txtpipes.rst.txtpkgutil.rst.txtplatform.rst.txtplistlib.rst.txtpoplib.rst.txtposix.rst.txtpprint.rst.txtprofile.rst.txtpty.rst.txtpwd.rst.txtpy_compile.rst.txtpyclbr.rst.txtpydoc.rst.txtpyexpat.rst.txtpython.rst.txtqueue.rst.txtquopri.rst.txtrandom.rst.txtre.rst.txtreadline.rst.txtreprlib.rst.txtresource.rst.txtrlcompleter.rst.txtrunpy.rst.txtsched.rst.txtsecrets.rst.txtsecurity_warnings.rst.txtselect.rst.txtselectors.rst.txtshelve.rst.txtshlex.rst.txtshutil.rst.txtsignal.rst.txtsite.rst.txtsmtpd.rst.txtsmtplib.rst.txtsndhdr.rst.txtsocket.rst.txtsocketserver.rst.txtspwd.rst.txtsqlite3.rst.txtssl.rst.txtstat.rst.txtstatistics.rst.txtstdtypes.rst.txtstring.rst.txtstringprep.rst.txtstruct.rst.txtsubprocess.rst.txtsunau.rst.txtsuperseded.rst.txtsymtable.rst.txtsys.rst.txtsysconfig.rst.txtsyslog.rst.txttabnanny.rst.txttarfile.rst.txttelnetlib.rst.txttempfile.rst.txttermios.rst.txttest.rst.txttext.rst.txttextwrap.rst.txtthreading.rst.txttime.rst.txttimeit.rst.txttk.rst.txttkinter.colorchooser.rst.txttkinter.dnd.rst.txttkinter.font.rst.txttkinter.messagebox.rst.txttkinter.rst.txttkinter.scrolledtext.rst.txttkinter.tix.rst.txttkinter.ttk.rst.txttoken.rst.txttokenize.rst.txttrace.rst.txttraceback.rst.txttracemalloc.rst.txttty.rst.txtturtle.rst.txttypes.rst.txttyping.rst.txtunicodedata.rst.txtunittest.mock-examples.rst.txtunittest.mock.rst.txtunittest.rst.txtunix.rst.txturllib.error.rst.txturllib.parse.rst.txturllib.request.rst.txturllib.robotparser.rst.txturllib.rst.txtuu.rst.txtuuid.rst.txtvenv.rst.txtwarnings.rst.txtwave.rst.txtweakref.rst.txtwebbrowser.rst.txtwindows.rst.txtwinreg.rst.txtwinsound.rst.txtwsgiref.rst.txtxdrlib.rst.txtxml.dom.minidom.rst.txtxml.dom.pulldom.rst.txtxml.dom.rst.txtxml.etree.elementtree.rst.txtxml.rst.txtxml.sax.handler.rst.txtxml.sax.reader.rst.txtxml.sax.rst.txtxml.sax.utils.rst.txtxmlrpc.client.rst.txtxmlrpc.rst.txtxmlrpc.server.rst.txtzipapp.rst.txtzipfile.rst.txtzipimport.rst.txtzlib.rst.txtzoneinfo.rst.txtlicense.rst.txtreferencecompound_stmts.rst.txtdatamodel.rst.txtexecutionmodel.rst.txtexpressions.rst.txtgrammar.rst.txtimport.rst.txtindex.rst.txtintroduction.rst.txtlexical_analysis.rst.txtsimple_stmts.rst.txttoplevel_components.rst.txttutorialappendix.rst.txtappetite.rst.txtclasses.rst.txtcontrolflow.rst.txtdatastructures.rst.txterrors.rst.txtfloatingpoint.rst.txtindex.rst.txtinputoutput.rst.txtinteractive.rst.txtinterpreter.rst.txtintroduction.rst.txtmodules.rst.txtstdlib.rst.txtstdlib2.rst.txtvenv.rst.txtwhatnow.rst.txtusingcmdline.rst.txtconfigure.rst.txteditors.rst.txtindex.rst.txtmac.rst.txtunix.rst.txtwindows.rst.txtwhatsnew2.0.rst.txt2.1.rst.txt2.2.rst.txt2.3.rst.txt2.4.rst.txt2.5.rst.txt2.6.rst.txt2.7.rst.txt3.0.rst.txt3.1.rst.txt3.10.rst.txt3.2.rst.txt3.3.rst.txt3.4.rst.txt3.5.rst.txt3.6.rst.txt3.7.rst.txt3.8.rst.txt3.9.rst.txtchangelog.rst.txtindex.rst.txt_staticbasic.csscaret-down.svgchangelog_search.jsclassic.csscopybutton.jsdefault.cssdoctools.jsdocumentation_options.jsfile.pngglossary.jsonjquery-3.5.1.jsjquery.jslanguage_data.jsmenu.jsminus.pngopensearch.xmlplus.pngpy.pngpy.svgpydoctheme.csspygments.csssearchtools.jssidebar.jsunderscore-1.13.1.jsunderscore.jsabout.htmlbugs.htmlc-apiabstract.htmlallocation.htmlapiabiversion.htmlarg.htmlbool.htmlbuffer.htmlbytearray.htmlbytes.htmlcall.htmlcapsule.htmlcell.htmlcode.htmlcodec.htmlcomplex.htmlconcrete.htmlcontextvars.htmlconversion.htmlcoro.htmldatetime.htmldescriptor.htmldict.htmlexceptions.htmlfile.htmlfloat.htmlfunction.htmlgcsupport.htmlgen.htmlimport.htmlindex.htmlinit.htmlinit_config.htmlintro.htmliter.htmliterator.htmllist.htmllong.htmlmapping.htmlmarshal.htmlmemory.htmlmemoryview.htmlmethod.htmlmodule.htmlnone.htmlnumber.htmlobjbuffer.htmlobject.htmlobjimpl.htmlrefcounting.htmlreflection.htmlsequence.htmlset.htmlslice.htmlstable.htmlstructures.htmlsys.htmltuple.htmltype.htmltypehints.htmltypeobj.htmlunicode.htmlutilities.htmlveryhigh.htmlweakref.htmlcontents.htmlcopyright.htmldistributingindex.htmldistutils_setuptools_disclaimer.htmlapiref.htmlbuiltdist.htmlcommandref.htmlconfigfile.htmlexamples.htmlextending.htmlindex.htmlintroduction.htmlpackageindex.htmlsetupscript.htmlsourcedist.htmluploading.htmldownload.htmlextendingbuilding.htmlembedding.htmlextending.htmlindex.htmlnewtypes.htmlnewtypes_tutorial.htmlwindows.htmlfaqdesign.htmlextending.htmlgeneral.htmlgui.htmlindex.htmlinstalled.htmllibrary.htmlprogramming.htmlwindows.htmlgenindex-A.htmlgenindex-B.htmlgenindex-C.htmlgenindex-D.htmlgenindex-E.htmlgenindex-F.htmlgenindex-G.htmlgenindex-H.htmlgenindex-I.htmlgenindex-J.htmlgenindex-K.htmlgenindex-L.htmlgenindex-M.htmlgenindex-N.htmlgenindex-O.htmlgenindex-P.htmlgenindex-Q.htmlgenindex-R.htmlgenindex-S.htmlgenindex-Symbols.htmlgenindex-T.htmlgenindex-U.htmlgenindex-V.htmlgenindex-W.htmlgenindex-X.htmlgenindex-Y.htmlgenindex-Z.htmlgenindex-_.htmlgenindex-all.htmlgenindex.htmlglossary.htmlhowtoannotations.htmlargparse.htmlclinic.htmlcporting.htmlcurses.htmldescriptor.htmlfunctional.htmlindex.htmlinstrumentation.htmlipaddress.htmllogging-cookbook.htmllogging.htmlpyporting.htmlregex.htmlsockets.htmlsorting.htmlunicode.htmlurllib2.htmlindex.htmlinstallindex.htmlinstallingindex.htmllibrary2to3.html__future__.html__main__.html_thread.htmlabc.htmlaifc.htmlallos.htmlarchiving.htmlargparse.htmlarray.htmlast.htmlasynchat.htmlasyncio-api-index.htmlasyncio-dev.htmlasyncio-eventloop.htmlasyncio-exceptions.htmlasyncio-future.htmlasyncio-llapi-index.htmlasyncio-platforms.htmlasyncio-policy.htmlasyncio-protocol.htmlasyncio-queue.htmlasyncio-stream.htmlasyncio-subprocess.htmlasyncio-sync.htmlasyncio-task.htmlasyncio.htmlasyncore.htmlatexit.htmlaudioop.htmlaudit_events.htmlbase64.htmlbdb.htmlbinary.htmlbinascii.htmlbinhex.htmlbisect.htmlbuiltins.htmlbz2.htmlcalendar.htmlcgi.htmlcgitb.htmlchunk.htmlcmath.htmlcmd.htmlcode.htmlcodecs.htmlcodeop.htmlcollections.abc.htmlcollections.htmlcolorsys.htmlcompileall.htmlconcurrency.htmlconcurrent.futures.htmlconcurrent.htmlconfigparser.htmlconstants.htmlcontextlib.htmlcontextvars.htmlcopy.htmlcopyreg.htmlcrypt.htmlcrypto.htmlcsv.htmlctypes.htmlcurses.ascii.htmlcurses.htmlcurses.panel.htmlcustominterp.htmldataclasses.htmldatatypes.htmldatetime.htmldbm.htmldebug.htmldecimal.htmldevelopment.htmldevmode.htmldialog.htmldifflib.htmldis.htmldistribution.htmldistutils.htmldoctest.htmlemail.charset.htmlemail.compat32-message.htmlemail.contentmanager.htmlemail.encoders.htmlemail.errors.htmlemail.examples.htmlemail.generator.htmlemail.header.htmlemail.headerregistry.htmlemail.htmlemail.iterators.htmlemail.message.htmlemail.mime.htmlemail.parser.htmlemail.policy.htmlemail.utils.htmlensurepip.htmlenum.htmlerrno.htmlexceptions.htmlfaulthandler.htmlfcntl.htmlfilecmp.htmlfileformats.htmlfileinput.htmlfilesys.htmlfnmatch.htmlfractions.htmlframeworks.htmlftplib.htmlfunctional.htmlfunctions.htmlfunctools.htmlgc.htmlgetopt.htmlgetpass.htmlgettext.htmlglob.htmlgraphlib.htmlgrp.htmlgzip.htmlhashlib.htmlheapq.htmlhmac.htmlhtml.entities.htmlhtml.htmlhtml.parser.htmlhttp.client.htmlhttp.cookiejar.htmlhttp.cookies.htmlhttp.htmlhttp.server.htmli18n.htmlidle.htmlimaplib.htmlimghdr.htmlimp.htmlimportlib.htmlimportlib.metadata.htmlindex.htmlinspect.htmlinternet.htmlintro.htmlio.htmlipaddress.htmlipc.htmlitertools.htmljson.htmlkeyword.htmllanguage.htmllinecache.htmllocale.htmllogging.config.htmllogging.handlers.htmllogging.htmllzma.htmlmailbox.htmlmailcap.htmlmarkup.htmlmarshal.htmlmath.htmlmimetypes.htmlmm.htmlmmap.htmlmodulefinder.htmlmodules.htmlmsilib.htmlmsvcrt.htmlmultiprocessing.htmlmultiprocessing.shared_memory.htmlnetdata.htmlnetrc.htmlnis.htmlnntplib.htmlnumbers.htmlnumeric.htmloperator.htmloptparse.htmlos.htmlos.path.htmlossaudiodev.htmlpathlib.htmlpdb.htmlpersistence.htmlpickle.htmlpickletools.htmlpipes.htmlpkgutil.htmlplatform.htmlplistlib.htmlpoplib.htmlposix.htmlpprint.htmlprofile.htmlpty.htmlpwd.htmlpy_compile.htmlpyclbr.htmlpydoc.htmlpyexpat.htmlpython.htmlqueue.htmlquopri.htmlrandom.htmlre.htmlreadline.htmlreprlib.htmlresource.htmlrlcompleter.htmlrunpy.htmlsched.htmlsecrets.htmlsecurity_warnings.htmlselect.htmlselectors.htmlshelve.htmlshlex.htmlshutil.htmlsignal.htmlsite.htmlsmtpd.htmlsmtplib.htmlsndhdr.htmlsocket.htmlsocketserver.htmlspwd.htmlsqlite3.htmlssl.htmlstat.htmlstatistics.htmlstdtypes.htmlstring.htmlstringprep.htmlstruct.htmlsubprocess.htmlsunau.htmlsuperseded.htmlsymtable.htmlsys.htmlsysconfig.htmlsyslog.htmltabnanny.htmltarfile.htmltelnetlib.htmltempfile.htmltermios.htmltest.htmltext.htmltextwrap.htmlthreading.htmltime.htmltimeit.htmltk.htmltkinter.colorchooser.htmltkinter.dnd.htmltkinter.font.htmltkinter.htmltkinter.messagebox.htmltkinter.scrolledtext.htmltkinter.tix.htmltkinter.ttk.htmltoken.htmltokenize.htmltrace.htmltraceback.htmltracemalloc.htmltty.htmlturtle.htmltypes.htmltyping.htmlunicodedata.htmlunittest.htmlunittest.mock-examples.htmlunittest.mock.htmlunix.htmlurllib.error.htmlurllib.htmlurllib.parse.htmlurllib.request.htmlurllib.robotparser.htmluu.htmluuid.htmlvenv.htmlwarnings.htmlwave.htmlweakref.htmlwebbrowser.htmlwindows.htmlwinreg.htmlwinsound.htmlwsgiref.htmlxdrlib.htmlxml.dom.htmlxml.dom.minidom.htmlxml.dom.pulldom.htmlxml.etree.elementtree.htmlxml.htmlxml.sax.handler.htmlxml.sax.htmlxml.sax.reader.htmlxml.sax.utils.htmlxmlrpc.client.htmlxmlrpc.htmlxmlrpc.server.htmlzipapp.htmlzipfile.htmlzipimport.htmlzlib.htmlzoneinfo.htmllicense.htmlobjects.invpy-modindex.htmlreferencecompound_stmts.htmldatamodel.htmlexecutionmodel.htmlexpressions.htmlgrammar.htmlimport.htmlindex.htmlintroduction.htmllexical_analysis.htmlsimple_stmts.htmltoplevel_components.htmlsearch.htmlsearchindex.jstutorialappendix.htmlappetite.htmlclasses.htmlcontrolflow.htmldatastructures.htmlerrors.htmlfloatingpoint.htmlindex.htmlinputoutput.htmlinteractive.htmlinterpreter.htmlintroduction.htmlmodules.htmlstdlib.htmlstdlib2.htmlvenv.htmlwhatnow.htmlusingcmdline.htmlconfigure.htmleditors.htmlindex.htmlmac.htmlunix.htmlwindows.htmlwhatsnew2.0.html2.1.html2.2.html2.3.html2.4.html2.5.html2.6.html2.7.html3.0.html3.1.html3.10.html3.2.html3.3.html3.4.html3.5.html3.6.html3.7.html3.8.html3.9.htmlchangelog.htmlindex.html/usr/share/doc/packages//usr/share/doc/packages/python3.10//usr/share/doc/packages/python3.10/Misc//usr/share/doc/packages/python3.10/html//usr/share/doc/packages/python3.10/html/_downloads//usr/share/doc/packages/python3.10/html/_downloads/6dc1f3f4f0e6ca13cb42ddf4d6cbc8af//usr/share/doc/packages/python3.10/html/_images//usr/share/doc/packages/python3.10/html/_sources//usr/share/doc/packages/python3.10/html/_sources/c-api//usr/share/doc/packages/python3.10/html/_sources/distributing//usr/share/doc/packages/python3.10/html/_sources/distutils//usr/share/doc/packages/python3.10/html/_sources/extending//usr/share/doc/packages/python3.10/html/_sources/faq//usr/share/doc/packages/python3.10/html/_sources/howto//usr/share/doc/packages/python3.10/html/_sources/install//usr/share/doc/packages/python3.10/html/_sources/installing//usr/share/doc/packages/python3.10/html/_sources/library//usr/share/doc/packages/python3.10/html/_sources/reference//usr/share/doc/packages/python3.10/html/_sources/tutorial//usr/share/doc/packages/python3.10/html/_sources/using//usr/share/doc/packages/python3.10/html/_sources/whatsnew//usr/share/doc/packages/python3.10/html/_static//usr/share/doc/packages/python3.10/html/c-api//usr/share/doc/packages/python3.10/html/distributing//usr/share/doc/packages/python3.10/html/distutils//usr/share/doc/packages/python3.10/html/extending//usr/share/doc/packages/python3.10/html/faq//usr/share/doc/packages/python3.10/html/howto//usr/share/doc/packages/python3.10/html/install//usr/share/doc/packages/python3.10/html/installing//usr/share/doc/packages/python3.10/html/library//usr/share/doc/packages/python3.10/html/reference//usr/share/doc/packages/python3.10/html/tutorial//usr/share/doc/packages/python3.10/html/using//usr/share/doc/packages/python3.10/html/whatsnew/-fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -gobs://build.suse.de/SUSE:Maintenance:35771/SUSE_SLE-15-SP4_Update/0b129eee92ab8e1474868e9ff0815f56-python310.SUSE_SLE-15-SP4_Update:docdrpmxz5aarch64-suse-linux directoryUTF-8 Unicode textAlgol 68 source, UTF-8 Unicode textASCII textPython script, ASCII text executablePOSIX shell script, ASCII text executabletroff or preprocessor input, ASCII textC source, ASCII textPNG image data, 500 x 320, 8-bit colormap, non-interlacedPNG image data, 955 x 758, 8-bit colormap, non-interlacedPNG image data, 538 x 319, 8-bit colormap, non-interlacedPNG image data, 978 x 175, 8-bit/color RGB, non-interlacedPNG image data, 250 x 250, 8-bit/color RGB, non-interlacedPNG image data, 706 x 449, 8-bit/color RGBA, non-interlacedASCII text, with very long linesLaTeX document, ASCII textPython script, UTF-8 Unicode text executableAlgol 68 source, ASCII textHTML document, ASCII textPython script text executable Python script, ASCII text executableUTF-8 Unicode text, with very long linesPython script, ASCII text executable, with very long linesSVG Scalable Vector Graphics imagePNG image data, 16 x 16, 8-bit/color RGBA, non-interlacedASCII text, with very long lines, with no line terminatorsPNG image data, 11 x 11, 8-bit grayscale, non-interlacedXML 1.0 document, ASCII textHTML document, UTF-8 Unicode text, with very long linesHTML document, ASCII text, with very long lines8qvR嵊0 python3103.10utf-82d765c1147549c697123f89306ccfd3d60362ef1b24f63811d09afef65fdd714?7zXZ !t/"[]"k%4Pa 䥸Mq0Z5Vjf.@v(NiZA./y~U cQj'j^e]ujug]v6 k!jch.odk3R ]op1 9\_m_678p,EqR-Pzy:2bљaϒ gp~pz "WUh0KބQXߩr_[}3U<:UB1 7գ wLSd2&$'6%Щ_ˬ0P[mF$K o486e-[yis*$!\mEKf8p/ 0`'ቧ4(#un t7^X6Y# G2OG|؃v Cr{,j`I2YW*F9hRZ5 0'OYqH aej"y-W\-obu'xM^FUS{-a\|BT \E RC^,GH6aѰh>)l7jDM yqF{mW4:,"8BI1.wf*n>/}&~]/u֟h68rXVINh :^JjѯI\(![.' #P3ISna8/aSm < BgxM$bA}AbBC^Ԟ~S|o`$+&FԨqi Ey(ţ7*<}f.Xi~3 JZ#C agu`teQ Y7"*VuC6[Nй S,GKl[r3I.5L3RՕbru=k_ ;YhcQ Pя|*%+TXrx挏i$|^i5X4^t3qjIZQfw A^ @rkw&^ы! [*] d.qjseCt<MHM*g&vH[$‹ 2MŬ ?Hz&m:b95O869rM^AqxÅB#vJNO0 " ;=GefݸW,̜,jߛ9G<8i(2zCx1~%BFmR/+^ÅXf'.5w-Î0R beF}}y\Fkg\{+Xl Xb{ vXNAg](cU(R*+|~F(pzmp-iIUo4yk]dYR4rl ֡bX+zvYT6ǓfV44Yϫ>xU-ɹB*[@/_[!₿82qYzvAa  sI+Y^U:2k4fz=uK-3l zEbꐐo]q ]E{~ϖƾ3(}Tm;%{wڏqiSe%|tJ!ܴ fpabEu>'yq̜F䉂;}dzq50/leT=Θ;q:Y@*u9=Xo`KȬv֬pq$VzX^.ӧ%'W^ ^]h6gUZ.#9e RU}M } ZsU!F:0. n7G/]ʨaDOwiK{`87&=Li76~qa<\ulW x@3nWq0v:DMfZvBlFĿx&)9E^%A 'nr YT˜A%UPpmaqe MM&U&*Bg? I/O(Z5oâvE3X, 8S礗S͓͠K@TjgƎTQ2ʀ4  ZkU쨆xUUZ WM0XgTRʧ/2MXvh|1r;%p`*f5 e}n D99˝RdLV!B"ˆ2$:!? M]@4Ԥ: 3U6\]>b )t6"waCak9QOY{J OAq8gn-tg)mmE?tjgі eՕb斗dG 3+EkDzݑkMo}H넛 zn-XK zb.QS`K? nPb^yG c!a? )K- ÆfCl?tV01R WWbyX3oz\ Pq0K |h/N2j|m@4651p\]4 ;ɵ$lM j|{oO;)NwZ8H^΂anOЬBm: ,ʳҰd-9]+jA $8\iB|" '1 bef۸?-D3g~,0{|/<rmGBp tǫvy`wehٽT+gf0gD,O[*.2,q#ZJM)m @׺@Ak~ n&IFJJb-"J[{{> 8Ζ2֊2P3@l_WV\Bƍ̖уCamS=~YrP6ݛw0qW;'wVvEiihb jM̢2|/%7"90Y9taO'`2jNH(ЎoT'*TS!N"CO]7H2ϙs& K IlDQ EH0H7./g]_)k  ..sIF~~-- Π8/ /Uo%L˖ +dZn_ޫ jy}ַ"?4W)/@@Fi-Mbr~œ:Kq8!;Hw*S'de&uf+ԨG=- S@9Z ڈd}e,# G>RUr06]F rd<wpgJz5HKS"OeRNIʲ˕[ Eՠ~-8i&-R*8ƒF04 k|:Z ncD([bMeQΤڄF 22ECoAN:zҴQ{#lOJq;mf)(mRA!쁯bu>tl)>hbrܥ2e/.ya"!N濓%ѿg&t>x#hv72r#}_9C+[|Ne  T:}| $`ŪF"KGy}B ;y<wEDGٹvRUٝlU(US3QeA=Ϋ sBAi쓥ӇaI:Ω(EY"4$΍X[42GW>oB~|Jd('>΋1H38HP5Ggl;2+DD͊Koh*mCtLmf Ρi@F! ?Ql(9p,2m b!s e ),@?Wu^K&6Lu]%Y{ I8;Z&աe&0ALys2Q%iaq뼈A/ySl)lAi(]mgWN:痢o&>DApbi6@j2q\nn"B׼q;zԨPA7`gx[//]I7iV-dF%@M8s!vu-.'nvtU Hp|vΞ$RSBP&NRw #>~q* SJCѱp{w mh8^ Xx=qw3詛ܞǦz 3B}EW}awi4&ΒMc圝P;pړc}AO,i]ռ<M&]^dzVyŘ<6͋qeN%ae9q(B} FZd>4؀G۠kTDetf*k znm9"VH9 ܳ2ؗp>1I8ȉz9~ {,Uh")U21M6W3'Ħ(eD2Z+(Q6h| .=` 8R|amhUDIɩ=xzsTW3K{e7/a5vy Y(?")֭6NcrK2Z3fbU61WM J< Z[ iYɩLdǘw]kل.<*+6%C>l,(MEd6 "kȁ<̻du2ta'飿+9CZvk)x1:QAX>ͷDǥ]gA 4e-d3% 9>2l1a>1tdr}[9"ȏ7_)fbחy0r:@GîWmQA)?όVE82JT:xEDP 1qЂ,Q/,CXqE.Pr8ƫC0B :*al q<( T6U`NZ{~Xl0LoMAO(_8 j4=xw{ʳa2ח"l-!PA]'ʮ;j΢YRΪľTpM:8$7(a7J.ޓ=xctdu*J@ RDO!{s@/.R}j+P k~KD0>kj.Ztl‡%9ה쮄Ίo2zˇ%/ /$ȭl~:=t[0LoNpF9f)73[RXkw_VF5m*k}7zV̫C69kjZRp *^'+Q*-;0Lxi#x8&֩վ˥t; tωԨ"Gd%<¸u,jƽ^Z!8Blt6>vUUJAj!vn6X}mK? +,Hd@ BPZ-58^Əʞ}E(EtEK tK2QȨ7E=UupZ[ ,3Mp&k譪Chјތ2テ.V̠e>QySL4:kkpkpDKUb l<7ӨFA[SmkXy╮E9~6 ꧧ{ǓVXneE(-XMG|,Ae,ɏעx??7y/$)F>Q%]nvZkBZNcZ-*+=: ?nD69wȯv㬯j?&-;M$M\~1Ԭx&|!YE+- vvZup쯘ott8\o"cq6L0X~ p-xmT (&#sO[FNG*!kI>x2d>p:q(!:ދtnjժ \~PІvJ_n(NC.BIY,:kG0`˘EVUH;t2뱫)DvGhyߧ ymLXCb*RlGC[W(Id4Iol #gȶ,C7ҋl)Q+YLE[!LtcRI+ NmuVp!\^L'H9?GR ʢ{0T@rimYGWTC:38MdQe* &׿E]#=N]f((4侹QV g]fbk/0f9'Ҝ.答SL^< Ct^5Ag|[$6=5!1,F~RF(m=C%pNKV#^uXٻ n&ȐR\ނ.A4_95EEd.k}.)yݾQd%I:t$o~a%ԹQSq" WTY )r @ %AټͯGe̸CynwMI] ɭc*LHձv?yԑPu_#߃+=Ւ0}h(GrMH٣N% c*Mgj)2 ѡ6ZOps7ҾhM!tn(z};`F,I 1KeXܨaafvqK6A.`B#CR3Gk-f~zaA_P!k0شam&m3G*nQ%`6YHMK5!džEcv׫ͮhmޑi% eO [(P浛ː$d:q8Χ̍J D s6%# 9t^mB)t/AU؉%PcQr%"Ď8v%=t>,=|7, S==Htrc~-- $Z#I I TFDb-A>4NΉbfyG⨱E0& |)! (xC3K?GxKȑFn9ڎ܀J*ϔIE]kMKdfw@Oy)f%}D;9 `Lٝ`(A. А9@֬UBEϰM ]—EM70XD0w2=`Q8463=! cTnM+Bb05Cn2QR@p2; ]EPL1ČQ\ +.g9EEȺrAP'gtp3i[Dn Vy}{eE FTPk-lnzxc/>эxROL5W[8NFǁ}dkHA9"qj[̋߈C#Xb~R'R};)j{ 2)C6N\赅f:b'dɜ4p5ClmcjOB`>}]4nGrX7j*gs[(1Ot|(=-vRPmj]J ;ᐫn\c:Ĺc8~A[.f./dRBBʛꞳEX):g54f:Os/OPnOyzb9jIل9 s` C{w*쥆 }m;YxOa6,fBXP >,d^U֛U0H ڼLb0]ъ`6>FaMe_dG.M{v;UXsHܪr؄q;^I)M[HBVt?|, =%]rWC|&i-)+t~$YA-hZBR^(`[ẁEM끹ѽAt&rfڲr P%#P2FgYǿC@2F[ڽ:&0E;_L[1 1c[=HٍŠ9*#䁃^lԤgV[+p(]aa3ֈY$>PCd(Z`߶P !lâL>awR0yqhNalETNFE(UH1 DZ=8 l@{Uы-"V k⸥17 V(,@:+2J:`o~ +bhQԋA{"wqnq L=bywHD #4EtWN+xFmR` 1L/Up X!S?)+ |_3b7U ج{|ړ̜׬%ඐm'W# &k~Kg]ﻔ$(a7oIm5/X=geSvwXLX@ :{p lV$E%-^T̶H@R0-~5'L{0Ciބ跄C^zj#)[A#5v ˾Zxވu ڋ=U,!$hqcމrD˒ӛz1VC*npRva N 훹VˀWIX,~d[s^L!E50-rIA1H]4M+xԺ} /v<.\K\j}AifJJyt4!^t7S{;;)gZpNfP#ikݽ}ij|{(9.m6+z~=H[7W&,a5-ۜ(geĪ_RrT̄E5/œY:瓃b,lD@XYu^Yf+b N.wUIZ|C(dV؟Qua=e>@Ȏ1GIt@+ єGEIYƽF>&c"$t2Ӎe^3}LȾՙ8N!RBUaBNdkfj&d +]T(ZwU2PAa((z<{ foES&OLg1AKh$pjW]|E,Vʎ -Կ@Ʀ.@(<'ۡ*ymT[/ÅT|hYf1 9Mpi@捚Fӏ%DN ⪎y)BOK EV@^E^6Z/ f`sI-3}9>5X"ggH~Iq=n?w1mW8[[Z/+f!ADG4OlI?_+$9a+eu4tӶMvwG] ʿ!U)-Lwlwl24A-1K`)LTx=Z3XESSYz~ܤdt4̛%$R'g!}gO-Bam^kRaF$LDD T8lкx.7Ώ0O2PoAц 4?r>=z"~<>9,t騝]Na&#ȸfEÀ4 })z_pO5nrOpI1 /d[Q@*Noߌ8GE/MLd5]=O¥ϰbc#ӱ > #VPCF—s9vY""\)~9"j |F&᫧ ދqRbw8 FnL5^ (sϓ[deM8|(tוO5q0%:cãFsDF7.iǎ,gS&%!j Q /NAWtIvْ !i:H" jXnbpϑ|!J3~e<1`. u BFFvDmr 57ʆjDhCsɍvg œ9s}.o2ҭTN)u&Og𿴰eV$ƺ{*d4B$sFJǗ++cf:88d+RdҎ9_a1"ju9{b(YH1<3@l [:4vjSS0ڵLiZ4"@yzQ hEΓ+kBM(NgH0Uq)/!Csm#,zc\{흛$,wXGbhCI >uV{wEN€C'u:V$r"ڝ`G0O 0O!;}4z1}nZ҅GBFlL;q59Ǔ.ͨv*PF Bx^55 xJ8٤H~~eݗړUv=ۋkС85HZl8ImKOeQQʧE23` xJB^ O,?8li/pӵ{*b .DKV\8|cKӔO䨗1|;U=57֯As6!Mβf׆ii]'c1!La(*V[F0$RA}APW W{Jt-:3~8=[𘻛G|A`[jft섦kF^T=-pf[ 7[RU jf w-)5WKPgmƌCX S:d\&gu C0eepoJvVXSKkl334tՌ`Ќ9],Ƌ3~=Cx(vN,A2%cv+ *("YCfX~ݺ.^hbkGHչ*[*? o-wCHq,ʡ^{?} G}Lա g2"jn5udx-N~_mUs$"D-Wm"R"刔>*<#Jx v|vߴ|v) k% /+_e3ymי7(ҐcU)y[ 홴gSp9Ye޼Oz8,ifu't"j=3лSs*6.7KU(_2Gqw8 ;,C.k+'AjT'TL3p,S !ퟚ|iflGL `f~ 2_{$BKMqm`kzFk@%Kp04D3kd>b΅.> !IB+OR̈ '?/UN~ZMĈ4Fg[M+6>rm$`iņ6Cc[)u&'{ 2hQu_\~7:Q},  .#;v --lf?9.5#&/|&1uˉ %*1@p>qq ~)VJ9Z}";n&>wzTQf(c9e)brxI_}6׮C܏$\檑Va֍Q沁'G4WG""#zvHi rC&e")TJ M.ZPAVИd;Ud!@^ ކ}Ȑ\"슒nn@n7iFA/%%ZpT|aFM06O ]yU).[0Ei=1p=iGP1saCė3?Zы; @\) 셷e*WbU `*~4q=Xl +mzKbJ醸**&@h`$oz2}Kh]p {ß$!s VmVVd6P*n)8qN#EEfXdꠉ)2Fl/vl||&$zM^߻ARtd6~j)BvaƖ\|%~bWO4ŇG sLV& p Bj"iΨi> :ퟅqF_<'3Ɯ $'~7^j SR!C_pڏF2gf+EvDҜʊ{t6TY1 W' NSD5bjǿֱͅ'YOlGb$<9t z7wi_Zgo{)-lV,x su;eM }يZG`IA``Ђ@~N$3e 0e[~FL{{'FydXak5/$ܖ/L*±"Ov>tZ nzNPd! heq{ Iks5Uϥfgnx *(%&6 /یL^}ȃb\ Z+YT x<vZ_j'bAoz!*P[b:4qS/S+8x$(ٱnDߘ*d/Ĥc0_X1ЂK6'ڂR:\06=9FP ;~9)W$~j6r09Z'9au%=*K0q UɎ28cGB) ![p,~ȲVcn 1FiE"9]3&#hQ>eCɇf F:9i ᖬ0=H|; 18vQ_Nr:iSrn61& A\%i+h+˕N4_g94#b*!K?$3/V4ЃB#fhWYoFDC"Y7 3,i == .OdyL9I@fS|+iBġE!F/%Lau:Y^{𷱼UAҞ1x)Pt^Stn< g/Ncd5>eoV_y,"0yv튃&(x祢Bŷ_,1aȡSHĥsWxuW:WH3`aerRy *zϴ?F.a9|o+zDeZ8j~#7ep{rXg3O>1v a)`(:SYJDv[VEtc /H6p(&a'WWP\\eLCyF%|PnK:X?t[9m/Rn<u\Uw[y1©2Яv&2uOC1}{N+FR±|X`ԈM-.֬&>o~= ];]b-<fg#尶_= ĜodB\M_+}nCl5`(ʼn $ѹ5]$15/WR$pJ $ݽvݧbSP[5K?M(Cy|`څT [c< &@e~2;z\V^vZtTX:E_m2;_*l_70+D$3e荹¾RM\ߔΠh%_@>9ܳw8.I ׯc  &lCw( 4JI ʢC\Cr g] l@dvwS5WBj+ F:qoɂp<}g"kErhauX{@Kze)t1őQuG[ xb:Ԗ_NlnMSDrVd5IB}yK,͒U㰫:u\}V` $Gς2Q4T:$v]y1w>8̘l9"[ -HxIpfs/Ͳu('*#ꌆxk5.DAӇRVyˉb-$jPhañAk 7v5k3 {' \YVH B_2Jk mG-q_s>&)iy5Mv8z2!F}:Pzɒ`x:{"U+PN+ L̓>7_~L o^Rzp !mܣ |cj:%s; ( _=GD)!E" awr1^7{r-oUKaz::~0\Ad Ky(nĉ\t"'$mύp&q.TJ,8aaYM_se>8$ngE.eѡSc"3Fp֜^έցFq6c^* dlv!5 NZz3w`,XG0 e'ܦSsv1ݨ+za:=4PHaD~Oit^e*bN^Ù?m$2'WG}̵֛o+Ʈ62xظJ)ՏMu V{] "/G*MjS0fL?*S]n.u SUV( f_dv%IKUgB?r+fNn%QZ~WZ|W>3=xq@=UWOFLC= t@9MUv2B./U eڙa(͏|W3򙼎Tyģ Ԙߏb`Ǟ!*M3آC˙2q|&u9[7\ fFVת#&9PYN";6ʉ. '&3.RTZ2hu/*:I(hP5:F}?I|v--T:[STe[T|tig SBu&;H{sBHc0K5;ȳހ@\D7&sxd8֡R?E1k9c 1"VtZ~DnTF$$ɂ5wBRJѴq|H/[7>;xYhP"sL/~c:bMY5.JJ׀0ſe,}7xye{<*R _-hh S̶KedFQ=H<[1@~{?dېpi?v83"+;3-w9y#_z^9؋/.!Xm`pcN8>J7R&DZ?s7:U&yXA{M@ r;{Zx|-t߻8 ͓e#sONm*Z=`ޗ&xE. +XŃO^݂iȗTQ,.tp*SiG0-rs.}~`"biּ S¯oT`uu/{AɄd8ٕA%AT]@f^Uf!,snQI7q%}[Ar@42ԟ xRг^u$WW0(tu? E'gUkcVq̓n% @ؾӇSS8;aQ5SC߶[²pw5ˠk>G9Q1{qE[tW_֎khkΎ-sW"v~aٴK|Q1xj 8f>>!@FxnlV_yؼE:=妒wbmYGi7}:'MoD͛eU߇Z%}CC]Ro-HM_8L ʼXL*!kͻ5eLu,mp؈B"ddWԏYxSUGP3ƒbBAI݀,mh?. 1jTbq4B`8h x$'R+bLŦ2*m[2%u0t+u&LX5 @y'!Cџrw+i·tR) >]ʱoC[Cu*||fsz0`wA˾ .稁(P/],!עV*5 aDJa=>!-;Wb|Jjq%>z: kR38:v*ۚSD9H]P`jq@qnulͨYkAkͮ󅬟Ds>0wΣ[?y' 7rtBL; c!2V߁6q \w`'T_mJUa<" tSp h\$@)EwqTdzfiq'P s"V8N(Z}7cuH%hTҌ#A-4B+G5ˋEq;'  2|IL7J` ]DV$n"3wac {[a Ǘk([ghNUܜ4j}D4@4A<ůyT1CapJgk(|ԑv2&RHk;)/~w RGiҨ>6\D-Ex4^d1'CaKեM-Ҋ5?5n%(RZsyB+IRmabK}ǂE~CYjMɖ1}مNo4N{4Sn4Yē!2zV[v7rU݇[;f7~tNuŶ!.ӿ@RDz[2+ .(6uK|Pq\_hoz$!{)rDL}4CҶEѪw[ҫ6sui_w5V?D}3(5ڐ֥)Щ~7 ǖcL]mʳu&4JRduG}jǹة$  o,_ɚڨEV=wyz4{Z\"ECu)V0Yݓ=TsqӟzQ!Rll۩⮆6d4"nor6ߙzrUPIJ %m7\AǟBx7x-{b:;}ߛwrW&k&'HŇ#RKe3 Hv[}R^-eL`N D|L-n GH ZqdK(uq ᮖ/ܔ+[-+2k[i#E_yswjDQ?sgYI:[^ :~@tkPT'+s)辚G+.(&z5/%rB IkD  8cK0Wf۞z V5p.W##ek`<:h]%>=8,fn }EaewkW#ӄ1k$v[JuJ jAw™.}TD9%o"U7 [EoBq j1ywl1&u [T^P]ۡNw pT_ *y)PI_%/.^2Qv2盻px:!*VBw=ˬ?d`9M0UU<52`VFFT5 :hsYwO}w{C,سPa%5|2}8 RS pZ<<%ȟ?5S)YlGAޗGCI?9U_j=_&QB#{Yl`FUQVmm P;j˄ "|}sg@6\pO*1ѥr̨^27؍8H- 1. ^_(EwĿyH;uN- >Lأ &/'S9>WgqQ^B?Ӟ9#Zr%,aעNjfiM/r8y'q{T6S:'a,lF'v `Jk:33h%tP[pí&8{BizxJЇEk`c+Dž#|@7MxBr 3 qRیN[4R1s[&9䑰Y6Q!aZ)Bo^Yk}EF=/Q6kBM7]I >KPh"jjβ0$%~٢!)餌#0y(T0}5^d$(JՓKd"3At:8cNnSwZ]4|l|Zĺ.m)@N:gӎ/2Ffb/='rX ->“~G(澴m6x]<هӊ kOKҐPn^Y.5JB}Sۈt Og51t1"$^U6ƘAQYfZ<9fھSc+0=XMrD}77h\3@K٣W}QaHp` y&|}PV1- 0A"љ !,KzimaʀQvc¸=󲘥4a a܄2"*Fg5+W2vx aFVyQӶX;>2}gr{S2R[P|GjM/V iCȺE²$ط$$f0/XEC M:%_,HWʆFu>r,)>2"q7V2I y5jۯ\vF{^>_L8Uf| #܎0Ohz0]8'ֺt vń w>=b.G_m˞~xM/+o e? NlA>;lr<*͞= 酌^ϳa1LupUmpԏE&EC6d k_ .st!^æ 19t El03rhQFfi냝[KI9K24xk2yUUҟS}Thh9+b]i~i.g{!môD1zV,?QôyGЎGReSe$e/qK%IZ kʀRX^q6[26H.D< ytxU򂣶Lt8jǜ6!aȼ=W++nB"xzIL7Q͐{GV0+uMWݤF:bӪR#BB,@5rObfoFSG `\(q Py@N/J5$VG9?K4#}"F8FpCkv}L؀8-%'/뮳t7_K-(d+'i|[kG̰M5taut~KʷbGQ2 *M*Iom_.g prfwv%l}gK:;O1x-kX 1l!{X5!̠oo`, yΖ F9\[[dY i~%-anj!#|}? dLY jҺ] (}Z?y")HiqgTERpcK+,ӀH +)h5UZ;D;ө Ciy"6jWbZ]hlEjK+ k⚳:6I;#*}IA:?soP]sWaR@ ]qM{$w5<4`=4☭iqF$T1AlFP!H>)'/:j j[bMKkUH~uDjc8I[4~X gLT] 9F'WP̳MZfA3G1!I\K`N7NQNi (@$'W idRQS>JP8>K@Ē&"SCN{|")ք0`w6e1nIK-X`.w{mT~/%s~5|UB|zV$>+ ThʼdZ$l)o_R{Vti2 0: .OҕL vOrpzˎVws gH]~A\{i Ѳ{Gc(կJFGWN!r,cQ16~xĥ 8ABl3_ 4I$\!Tɂ4(K4NբbAbO4:GL3CZ8$B N%fΏvNI8՝f|94|o{ F)ёuG<:fM_D؀%$llsy=Z7,"VXw=LƅQz @d3XB@ޝyzͮI ?\iIg96<K=v1❜C_}٥8Z)mڔFlV=RTf0c\?B 讼J2sPlJbTa)Љq0@x6p|J;/ó'b>20Ҙ2[5 (lgA}A/ma$Zx2.{G_SH᪰/bN ;f 4 '&?F>sK/M9K A<@XMPS=I$51^ 2 M\1iCN&I}*шPĀ$^ZB]ѴT?F ܪ%k/Z!P >`:L~}o }g5^W[pC ,.}$1㴰ίNLXulf\/TbeEI=x~A],6;nPj?T y_,%oSz9y8nKi_ !꨺{9Q>Ľ~BANG{76NS8";m`e 7o>xj!΀֮ԑŶn@x -s6t_8*t}JYΑ0ϓȟ d6*I]M Fp=nW/[+Qx `D6a ; { \|  ʡG0g4dY|~p9 솕Vh"EoH%y y/X: HCo,;3 Es,(u5%^2Б `^\%޽SQ/Su.iXhG(Qv)6}s-2@VaEF m=D׭&HԢE?zƈIFț$LĹhagcT11@bId< V #҃EBx _EA0]X)BFqf,hHO s)mCܢӉ)'yjSp\Wr&m~W`^fI+>{uYBcn?%oV. aρ$h*x5(j݆^Iӻ,KyQRY< E>:`Hh U`)ÊƖc0fin6$ ԜֺVTNJFv(Ir?eWMlYTibs/MP24Z1"w$ p+󣢓F%?2J|ldOEx8lOxBX,LEuj,vj [r:.xU?fL= 3&Hz+`S}9=Э-pĪ5N W{$4uB{fw˖,~QU: Oe7.g~8JDhR_ҝĒIHo9oCZH苘ͦ[o- V?}*磍1`~WkMy5CsTbdUEK}tHtݸ Т noIk3֨ZRNA\RKibؿYAFeC@|OY#g`ʇw~=%j3IժU d#Z,3:aLw8z]}SAdHuZmv] V>0(QH&¥6e_A˃ wfXTizS Sxo0S hHNezܾRL %)0j!ͽyR5O*sb0H %{c4{_,>z@s٢Մzڼ(D9m@R$_2/ޭ(*愅Bs"yKޯKE/ƮMk*s?|~ξSkA>\- &Y7uC?c[T<6geOˋ\󨟹$٘:C9w䠺N5L/jhu'3o#wz8aC.i3j?m;1b '1}ُi̻sJR'}oAΥ0mD!so6W1 M5Mhg4[QdRk*+:,QGHaUb`߳M--|y̤g-"}wQR\5(Uc#Q3@IdD?$CȢ@ɯ Viat+5SW]9'`X(1=N0:j83oߝsCbQd723ba0J"ggAG,ǖ>5q腡R\U7=A[9A5fOv,<>YCICh i <*;T_F$eӕæ٢7؀Wl>F:vNɤ@9 [Ϯ!hqmHO*N~";$U%uU<,6"^ƫݰ5OB~i0V[I˦g`-EħQӮP/%؉<Zmj,vZ|Ӹo1eꪗZCtܲu,!S&̧kQYB<:ݐĈq*U[*ϻ!& kGmH5q,GC1ߨ2 d&U'lߩ_). >6UCc 6sB(]o5`im"تTrt!j< V6SOg@"opLsDY=Qbn7DS)A7u+( tJ,AB6}}3.*@e)If-zs>} ӌLG#Y0BSS~amΜ =L#֮.! Ù!z/jtJdW6X˽`w^È(tϹl Gm(Mģ;$.\1l7cBڱ"=Hg@)2n~E1QHަ22L8m= Nb[]>L-"yx'ߞQ5_Rmݍx"G綦g?DΈ쀵Vwב%Aɞ9Lz-#)y?ի=*w9s/G|SO!p N~^4~]ݕ ڄRdUoҥՃd.16rIÃX;!T #*69l;|ݟޮK3}9j,[E;DI(A*"s'kM}6wꂡG=}! KtiNp4 \I`T,V6ykB=&@vDj1E N2:rFdTTiRw\uЋ^֜ń'BI;rS7~ hh޳,X;NwT wXg'orXH(A0"R݉m8"+$ J .u i)l>"S8|Q!njA辂G1P^yb)ƄpN~I]aJ#G yN(eЊ(G4ٞ|g~k\/u^R6/5{ IIV cLqzcqB;>.{jb{F4Qu1Ԁm[&vbmW_@'t "Kff RXGxӀlhَN,馮v Fsļk $ĸd-4,XaI"wp-VLaԢ0g%YiHjq<.'>W1u&-D w.Z3j΢&mȥ?m9u\i[MJGrŀ,;8 7>YxA &j&A Ɓ\*Rѳ?"ACUC{Ufk4btO[o ,&nzRu&Whj#B߭l{8\VJ(`wi ;T{a'm. 7i ق}͎+o[Ө B, [ Lap\1)~q?'&iiepL22h'$|^.M.<Ho!U5Q˪YԫTeUo3Fl-X;iN^˜2a /e؃Ȏ< f'PvUNo]VI3u{ lX!![ LS8:*xc-+z4~ _b10GKtV@W_A'$|ٴ1ިy*'[gYZ}(ݮs\K*zEszc#9]z@ciZBQ](=wpA2ܸxhlkhyO:=?co\` Z G:7GBYkҋ\O "UY~BH1Xm+Oˉ&t^g,`$߷^dȶ^.|.*Lڠ=Y1. TPtGWozCV?݉~r=\u"ⷢBIwd*y(iҬ5& [7C+"Cn %X*ה{vR\^vO؋ #N%d,Q6oC$ =kkoL[̒QK{!9"zD׆2gs{3uH7&a7y5;8 l>y? ȄT$p-u@=tBgvwV?= GyqRŲ k ߛci%t'/t/fK.r繪 (O6"{*Y|c@`Bqjw>PZYNaP/!Ё.Jd i<}6&LBGsa(<(dzިA<:5?6PqҤQ7 # â9-utib^- CPK3Q]FRW%ص-asW.\C"q8j=ǡ*8Nȿ0a#TDF="ɋ*;_(22**_jhϘO?j{_U{Os5~/TMHr8U1|^xv|m/ȿXWYfuR7N\`r¸ 5 .ePMbNg!x,9`l.7iV% @A&V0ٖEjTqهb@Yᢛ$_/BA6SuKԓRbZ!x_Pw5 c b6vt_1YS@Œc &%qm^%dv]2Ct#j"YlPlxq| y`cJԕoh72 `>HB j;޹`(rm^9}lJ7T jcς&M#1exa(dc"jYck,)|KR"p ӾPקQ| Ay - ZNvsSZ ni{W^p뚝 <=,Q=Y<[S|3(JB,EiKDPPoP^|ېA\u(&.Ȃ*}-#CG{s{Ժqd3k2x# :d2$y{9K~v]ŪU/5rȴ,)Aٯ(3 KUnLo?LI4^k,rnY+5rlnc:(=ͱxH\qH1>y}~\{tE_QX a;!ja׫qaٱ啢(twV&)<Ega`=o^%4i>4r_4si(!w6=Xt66ɊJy1snI_1JŰYU#zos RuDvژ,eS OMsJX8Lm&[|Py/L 7g5yL9jY%5e9A*HWk6HLqAE H6?+gc7ԆqoUd[v-d(_ &#xL=>vG-ZA{f:w@{#N5f&/Osܽ h`L(0ZxQ*{W08FƈWK*3#؇ĺ:)8a+['Ƌ.mA%n9l ^׊" gKoZHO~__$MvTGC M=o:]dr>I Qh*,!gϚ^lRWOx)@l:F;dďjȊ30;yŸh OMsn2~-Ih0iUEG)mb9lc3< a9oWp* '!BB-Iakv:aYsr@:P嶭wDv-ҷmθ2Wދ7p obo:K}7뚃0,Кd>cE0Z} 7BCۋ̄S1 N'x=k[wթUg#ХI=QkM@asཉFgfh~]/?:6>SJG53(=@T:t䒭Y.v9/XV KS+ \Y[9F~xfUI)f na, NѼڵ$fW/5W"Wf2;8wΰJD]1)w/l?eG7#]3?,Iq i;^%qI(+4 LJKϚgZ1Mi(o:Yz7fSAI#C'=rm>TCP7ТR %@P %OѡMn.>JGY$g9c,>l\.R#PqIH̢Ҽ34,bT@ s8;~]4q3O]OG DKv_$č֕8-?o?^Cn΃#8WrU.R#2rl2xKjTՁ{dw-AT3@wἼF{Zz_K{ ݌< %su 11dӪҤ1$b!M֗cbBg,b@;A9G^"H[ePpw\GKs5ޡnOw拧AN n`؃@O6z>6މNE0+i$#b!IgaO;,[m#)1nހ}*x[Fx"038]V!Ӣ{xk4(=޷/L*XӗK/#p06LDDS4y|Y"mŖ̲f(&4\}0 d`D gpk'YڬjCЃ74ekgue-ָ!iBVt`5h={SaWKßXpjW0G?6r|S|=o axa\<>GmaH[q  -dmmʍ$)p6g |";aB~:v%gF#9 Tk{)UOG:: ׊~ed!^vA䏾٫㧌3)wykh0j >R 2b""v&@p @qa A`U KuKH燡}߂ԧ\H~Xփ/Yu/kGBg3@o¦<#\l$pRsO}绉w[2lX!MԠc/w(I l]zSZ}y)eęe f]c_ɜ'@ 0+`/=1:f)洛SO#K{*s&@GKZ8 oiQ=M * !B~S` ٸsrUade(xɮW?(Ik2 &m#G?]E:I6$'{QnV@E316ik~›Fz!WƹIGT!/~{58RLth/V7Y ,)IoBegb!_Q, 1r^-3&%UѾtKUy#_+Σ:A +~7+4'ٷςD06RN~Y2~AK7õHYh\EڋDzXB:@[$;k_f鉱˝Teg؊mӛKC4IZZ( &U5[1S`I.q["jCZiPJuL8s Rf">u\Zʅ!I^e'us;h`(u8z2$,KUsP^raķj^\.uYn$*`J_`dyQ>>R t/z"m|3+rK0;COztѭv4XFlWzv$Qʕ?9 Ekʾ 8UBy%;%aqۭߔ#Xjcz_z<'#J,Hr=15L..^3iXSa*fe]| 7lV6np`=ksVbO(t;n2jLt@14kVˬ7E{B6'krI˅xVaO;B;J EtD7٦G*_cQF_22D8V ecr̶[`]yw=ߋ2Dfa}a8J( hzaR%+b !\݄x\# ke0JfTh7^b] hAIK2u$5m-YY@-"6b@>6ox/CL\,>Gj#eT~|Lg ťZیʟɝBÛPT oXC3(aH0@oZ 4όXIi1;B]mD0)4ـ)sXȫ{T| K_1QYr_ (ttҀȬtBF*Qsjv$-  gi sMQ$2pt;LEo m-m^wܓEt`|UUW{(fa] )F^ ˲{KCi8tea׏Όưr-?cN^+*V4l"C97x:87O~1_; ڎ{%-pxC|ƄV2>d I*,Z`7r )8]-wh i]q8MY*[o^f@fvpuExf/9;!$mT=N.K TӤ!PX[^F\j)B9TwI !B]./ܽf~/ugCz!$|#W,nJ9Ib H?R2Nۙ1kK0)!t)! > Vhe*lWp 6  U ?"ԂI0[%A p_6ϲIB[9^Rox&@ktl&a#Y, /~ՙ4r(vfʰF2bAL1ɑgLzÞUNX~6(;wO[5X+#z)C|>~p{Gj"Op¸N/70P 5{U$`b+_Fl}7gf9[9 1?uTOXUmzD^:נa&J7!0o6z Ofvz>8<-T_NޒUvra(F1 S‘Dπ$^Oau6xsV G8|ѡQL;*ER u0Xq]3+uu ІGz&0+-$)1yH~)adWXibbR99n @6Û5n$D zC`_+lI>,웉B=uWXB* `-#w}kJi@ni {\¡ x"3nx5Lrx1rЌ'CXm0$e^-;bqC:K~lvv+Dm|w5zHET"s$˅ ߔUC1W!X H1LW5ߝz\RE0%niEB (׳KgiM,WEj|u&B^D:Jve\Bw2wxa:'/V+5:4L-x;](KYkBD 'R1<*n{Pn*UONxfN2Lyqqf&-hϋT9bݠHp EKh8Zbɐ5<҈,"8Ka9px;4|8\_fdN ŋfj͵$ 6~(e 8|EjA:|)i]r)u}Q/OJb5 (X̢j7Y2"!|tJC)wۡx~Ȳ'hLC_waB-RG% یhzVyb=TH80xc $Uv{&0Ưb*5"L ߝ́cߌ$琏>MɫvwH$V oh`c=ַw712qq4^N-wAq)lNbɽ_% k<߆< - ʰM79gt{^%#>{)B=AeQ Û;6⚄[$6=ۤ<`&ŘLQ_| F~gM͵Up;ͤ:abE{kn`:Qg1Z lX)߆tdK?l!lǩ^Nͳg T7 m.C>g.uҫ͠*~K;-8輫=ɕs"u JC27֭DcŕdB1Hy>D|fMj#SaP :K"4w B*0ePK'|Z1E > :EkV]\gr" tM1!SIQFOk[ r9 nĺzTvZ7Uj, LMT~6@6wUW(hm|~f<q"5G~}1/~C52c2!%lɥXb&HtC]cMvSXT}hRH5uEQ\$h-z*&$"PnF}κ(s}hԩۋ6ĥ+@ՓYb8μ;ľ>#fw bQXr, kDꬴ'}~ng`ɾOGbWDT# ud:i&3U@+EmGcᢉXLE褐:B>^csQؕ4>~Q8$yv>x.bZ)Uj<F:TxGfbsH.OaLN'r^Y ezꑕD=Gy󼚜wm($2BaPZ!2[m)w{tw8v 8~"0e\M'|٥R!V/IEhV pͲU-~}b4{8s-t9']/IcȪyhdWUBvCz@dmtJe Xw,CƟ8o2 Ʌ15>]Wڳh}Yae8ZbjLқ Ł\Y> F+ c:>ϏWP22VO6?F`iZ@S~#(6~Ł5r[Bꃲq^5!8y hm2BW%vKy7L~[q2myKrKĦCde66o.4V/1؂ n|U{tLvRo*v4F T+oqG',Y rc_!./XͫwA%)O˧1TzrzPb5:(f|mR/5i{ 1lW*rxAE ?Pd2>5 y ] QC2I b/[ HLI0#SmJwoS>RCnYy{QP 8jB2z0},EF;Lq[JZ& $줕":=gZ%Qe= ECfxg ue%lhT︁BbT"0ϽA.Ŵcq雊O}s$BQ)Fm1UyۊLC4FPqhј6>0kE\𤠰 -]%0<_-0$*=~::hѮ0աkyi1Kpjduk`C\ #Nv=tA JqbZ9bTv_l#'"v]p+JaEy4/dkXCM0tP]ûPTeV9'RΫhۑs3KeF ~ )+_.ຩ5De߂b|2szqZ[n2i]馌Pqt2 \'ex;HM>FҚZ0n0Y:GC8RnUear8q5%J+4/#--4ZNuB7. kAY`M{dp6̏#A C^+:W59O'}˼||] 8!X蚴ӌO}j(@B\m^Fa=+B #h;KV%r aeŵ1=8eadt-'5~Nc>lwf%.>n!VI]P&3ny;ћR )Y.)+:+~͡x/5PM/k7{bAkv֑@;9= j38l:~K%B_p>*$J`>EPWK^fdmZE!`Gݖ}^e1_'^{\MFC:Z |lŌ^e1ǤʹYorVwQV]s!TҴ)%z|6[!4B#fLx^pX픤o7.?YhUaQW2Y%gڑWxd0jTd 'j6'Fxry~Tu}EK ҸT 4;P%Y)Hz -뵆e22yq st݊R:ГOtS'4Y{NLJ Z'!_&Uu:g:J=_ %,oNtj2(YBz eO6 潽۶ì hjTwlEѵ"/ў@M=Gж c85B^BZaR]n izi ˺rlcXUz߁eLJ/{s_ҟYP۰=A!E:uɖm"pY##2;"Hkѕ7}Q{-_b f~̯FSmAI=ةD7$mդ*E^EBFWɈƥ [,g8ZO>ĢjD_Ӟal ]gHΎ<$b<5aI?y@Uxedv ׋*_rSz«gnp ʳd  Twf"LTRP$R9,A 8PYۥ6:{*S `}h|ɱh_K1bb.WKKMNq\3oEPM{'seꇒD`u/h.:Js/D1MzFXwnPsBTv5Z]Qձ(jb gF=BGn=&/,-jɺV)׆>qp\b6ck Wlx]dF?!Zm@M|=B`ƚ4]Pxѵ!:dUr_(bas+Dz̺W#/!%pC(RI-؆0vS}HhkfX>ݡO7{BB=*з)k9DA!QtE֏Q^BCH}tG-#8^S baeEB4] 181Z62m0 IAQ@\S{I1k;#iHBȋL$ ."݇rw'^w=[_]JۙI~ nJ@qL}xkDeRg@[.ΑWJ-&w_-_*-JAKa[Ȟpd aQ\lV\3~S/m66*[ }lzpz 4t2\O*T(tʖ4CaŹ+ߘF2>IpO_b5T4졞9)j6;m1f> 9%k<bzSNwrpaڬWpf󀉢Ѥ}U7ΑV6\c>gr2SAWKyd ɃIc Ie-@ټ$QT5YZa4E2'Ye_+ݘa $Sp)Bx㕲_!hσ!&)#BhUFic(;I/'z%U'5k%eU 7+~yk d x*S#x@ɎAE[aiG{S2#:ݮ9uyN>aSc5(]1 J8GU&y2>3zC^= k8GRsks>5аVSY!Oncٍ ^L"(ZލS}npGuQpɤ!ˊWP0HUUxdD:w^EG,h r21wvׯ} }VWd%Qܵ"L6y\م[=AinшHX/HV|W0vZ6г !d{;q2#ZK07*Ol~ d.nX 8<:Χ)ԕu]39&ףFpAAv#լ2e[~R[r'MAe3#p,]Mlnw`uY+|ە꼊:4^ΐ[w499:‚f:Ml!&*yXȠ.p1}xeQogEy9>;6JAnAJzb^Ċ},,E&pڶT݉5jP| &I${y>~އڅ˕]BZGZ?fj}XMkG_ka[]0{Eޫe 3wDc2dw\=%>"oWjHLޑե!װX24m[ƏHe+ZԂO2 W B:#ɾ?8M<U=?\g8 =YB&pŸrJT01c1ԷקgqG<А^Rߊ%K/ܕݍڒ-%2ry 5/2є'e2c !D躋|U{7qqŀ~Cژ]cS" kxBfb_lgP zF̤Mv!c;₝*3'mnTuTd 2_F3~gEn~ZF?˂wg^0Sh ̟E2pufv. g{oz;ͪF‚{B[ `B< hdQa.MmX*N!&G/PXaqX}LlxLNkl$Ǫ-R$Z6<(E4N \j*#VWu,+z!ϩ&jI@,^9r6x9=Y-A"_E=L<ho[@4((JAݘIB/Gp%IV5[M'` h ЂaR,<-ٴpm nx-J8LUEw,za[m# U {/0Y gjS {`LMoE ٸ8_}XTE.Om%?.0T%<*(g)Y)|QE.QhF2M$Y9!L6$EPU Q%Zx1@VG{\ ` $ [)LfVλ)oY_sZMI(a@[b"~'+9+Qq#D%cWmaT<\uKڇ OSP39_T8 }׷,0NWdcҷkCT $M[Rm9 lNR 7hK'~2(HL{@.3ݾWKX~J jO{wzx;NTj+tcɉ$؁gl OOm%6l;O뛜1`Ћ&<|!PD˃rUtƷPb6i)٤RQ+EM~ӈj@']BeCGs p50{дI`h5"`ӱi*3QLeo.9զ)tq KviË pU 7T%EhxLJ!1]C%D|coz Wd7x&8;G Kt }`KZeQ˰ u$dI еR1o{V1.h Ê;`⪄fz|%7X>@Q?RAV{)'0b<ÿ^: #-sBq df5@(L*qba}C5}k yr,~*ӣcH->S IN!=J B]So:xP zAmSV>+Ak+XwTbȂ = NY}$LOH0 m)%1@a _qkB1ͬlwf p`x\@s8]4ZKH9]5تEd ߾Ѓfز1 e4pth3gA<fГI߮_uK!3ˑlLҷCžʨ۷iGq?%!3RB0rʥ@O(+l2?kmC9u5>{.b/u6yמeC!md [>h{h6d5!=wNˉ) 0flZe)ͅG/|^&ݧY^0 !@@Ethn] - ^}L͹C=^ٶyFQcNRÑ԰ϝM6g sRݶ(߲ePN}?U]RsOF/{"*1.r eĸ3tb) rZM H?]qYbj[Q^?}sҫ\)5;`>~g!‘p#_[ܫ ah9z?Xt^F_Ἲ#r3pU<6syJ~[ޔTAJ8A] nhNi_Xg(2DhZ%i3G\Jۖe-NBIh{60(I=;|C Tye3?1]5 z/z~6^ʜLQw7Ba|Ú*t!.3+F}L܈8uL诧1͘ᱚqܢ_a`(\ NipJ.Eɷ]gٛ *d7bwDo/un%3LOyʟRb_ިr tA-ɸP,qMq~muV5^ ){3O &º? aݠ-Id]\mzN;*]'0GtllAW4~1)lYAD$?[_J3«e 5+UilI>?>aջJŚ/2= Lt,4^ whe_|r~l^rn8|PpM n ?P ˲2)[ŮlU)z6G_)V5Q %' dK.(O\OoCɦd! ҥ*DJLjЩR3ѿ|(*I\xV\ge5'一fH&Bi7!8ieQt)SDXKlaH=1せ1Q]^_1s\}IE|s~"-u&K٥ xXD`;0,`eTU1V^OF lfy{5e<ʷ+'Cz-ܳwM񓡣(3WF QT\r=WgI/@1qiXbBL cDffZt 8Y,%{΁Z8l~*tC^Qm sZcO؇(&SXX#\ɭ 0ξ³Mk$`4@5U-RvÈ dKQZk/!8e}~Dy.HFh !bǿg+ؠrg):k~{hyrA؞%Se:E4>#IU 64 @Ix6U4›l>ءדL}%bY nK~E;R^3"L$s/0)IØ戮&ud tA#ioL[sLG u0 mYeպ; rXrid8LWt02Bh}d"%vëTUV-'YFym&uT7]ꪒ`9=] h3W/K/VAji=a[)-QzE`\mcb[)4 2gc3l_ZnRm,.xtչC G%ԧ7`&)vP#l(6W7, * R*Kբt$% CEat} XuZbϛ4MЄjV^pODž\4APP-j+vޕ6qu𕪙r`]&P.sOI܏L` *N78ׂ-19=4=N&7VSjs26KxJ-xZ36EZ==x +ưթy8l;Q 2l|>dCT4;nR. \fi4WA i"4uwN6`@RXOn* bm Rc k:jdF?X.@9?`eh?kM̆JSMf A2}Ra jf: xn)gS B@m~JzMPA)MCHtO=j(廗$g)mp0L>_Dv?ɫ$VXysk̬5녬;t%'OAch}7 upryzY $ٷ)Q?%$!6Sp+W^M;}wI鍪*lb3*ZZArt;dU6fj XCF,E'F_[I鹐~atXϠ% ~U;B yy! bzc*JWP7HjD?=S6טTwjwƁqXunV#TErmӫ7 *t]kcF޳Ieʟ3{؇v$hTz$v~ RI:6w8I'u ȳ0&e͘^*Aq"Q ,}u+"C N&eR½%C4#h'^ֿZF\癢,hޔRFu@M4'8_breeí50"921c8nh qR8I CsFR~ ߾w (~뽈o7קdzzn9sL3 ?ox@uh.E#g\\W8ҞܳB=!K|̑xBs֎/}RU1Vuw}4 $nb-WDw?'WlҲ7i_PnC}Pa9'8oV;_y;w|pC/d(2[s4LѺ@1/+x~5@J~`ܨ}RL>BPV'%e?_}zFo#. ObgOW9؈J!רJKzC7P/~w; ol*[.AQen9<S1#G{(%aK8sL^A!C_t:(,MՊFʍa{}Kn+S<^8 Kn$8zD>,j뾣e=˷dEEz9!/x[KEq}X iؼywaG8iz)- ( A+OmcwKҿb|JhxN A E}zmX;8׎\]Vf])ұ=ZO&nx3FQ  &b9K$DfG#oyd t%5Wh 61[콧_^ܚ3% Qs(ƽ_U5@lwV^pzL ~u7d=ۚ{}cu7aJzEe+8ӱq*bPOEĹ c<L~Q< NjAV2S1v )8L>H>MGi~0;ddVvJ!b9)uY1"O@u38 _~ ]0#r';FnYslbt\,޻ʂfb~ZV@a 4ޮ7mJzwy DJl_I_'='KEKdPjp=a-2H ϑS橋zh2] A3%oPO tjv0J h 417ܮg J{Lhs# 0aZo ~cVyEnA\IMi$P!8M5}?#>F\-憍L_6X/5v#W;qK (Zd†vkvb4"[k%5 Wg8d}ƺnkJ=11{^6R%-oG݊ 9Qe?Dtask0߃rŝmBuU0/*,g#lȷB^ˏ4 ,xcŜF }@A9o:jSrB>y=Tf4z;Ub[zcQ=4q$VC{X 1kngZ{?'ۜoN*;5ޣV,&(lI0pv :>lT ѽW,(^Q;7n/pl~/m,~Ud{wk\=J0ہyJIߎ5L 9I㒑U &LZ$ƎPC{;[$!&].ͮ칇so^|v%-iΎߣۊi=x5MbF%g>eϊ8]b‹&=-2gn},ލ'lM`en]VIrђו !Wz욅UnX}3RzSyqaqf3cTKGk6U;3wUu*CjP:i*ƾߐ>Bzleޝ-ژ)ib])ɲE!0vHf-K4gPǎ5=x A#Q`mA#cQ "[9Űuaqfjƌ7N^KJ._&o)M-zLZJ;_tRR`kC‘d3GtW624 R~2f)/8j5Œ#6fn\q2,n,AD.j g/}(4lGol((.5dD2>ނ c ƿ N/ ~C*elL+D 4zujr@dl؃'T 4nY;@FvD;DF$7L L׃ŻE΋+0C୬ͫW%~LM-[a&O5XnZ!@'-:ma}U5j<%,nGlR7*^'  'oݴ4S2 GS/Cg?*W w} ^ñ4fpYnue|>lE/+ҏvt]ͽL|޷kV:p@L5pWbIT >"m#6n'jr#f1Z3 {*dw6z \\e}x]+e4/ϛ/Bwh1'/YrXض,\j%RV`{ąT) HZ`nEuzE/ O_+:Iㆥ.0tV<Ȅ!n XwPφӍͶUzy*utNZ(г}OT oŊ۰@'ֵvЧ!*d W/(?L)NK&"dU $.M})G,tTY38J22}1bR/l8YbY~a1|uSL38?g ]W;Y6FSh ?[`gD(Qo qSfFyLOH%+Y咝0nPŝAknWsKk(HmR "i4]nzCl>-csqE9^\珤yQ8oq'Iaan֨4ݣE0ΓfS00.B Ļ CUm4 kA,]H^~xo * YtLj<⇥D5Ĭ4ʤzϫ'1~..^2n*}ω?$Ocppˍz2Zz蘏6Хofaë~''eEoKN+)DTak*1ö05`t1*^Bm~T RE7cb ɩIQR^t Kt@~O~l8ѳM$Қn*;<\S.7j8R_LExFݜ O}u9p^:vPtkOztٶ? -B\|ƲP<+2vYki~nBRߤn'\kLicŠ$@+Yuȷw 3)K^ڵ+q/sb N .Sj:U:NyFyzIxZ%Dy벦4ʒ+q@Ztv @eKW5bHcq2{D937GH(OqHV_qoh<]cYc1Uapw@\ e6rbΝ֟n;[{x/_ؚLOKdcsIHMim:13S|LL q`…]ErMg,g5aZOW 0yʁqW [ANWE1H=+qDt˸1&U^:~Go[+5ʝ^3]1>Qϙ'goM>)uV v"5=SPo:N]@?24mǢV$qUhe aм@čS5wPXd ;[#.QM 715ƌIBY_j8:F /)} SBriBs_륁hg" ΕPkLps?m0S 8TD1Yqև@fqGr|*ցPnƏa=^&xe: [}K/ۿ565ͺ ̓ b4!DHMTmާyH}&ٲo@ͧeI"0o8G<{?瀷-Bݍhɫw$pOc274u@IFq'+vt3nϯBH/o&:B5֩VE vjj4{DfŮyl ݼYrO_8RR€8g۹G ?z޺2HE;Q t[|\_ҎIrQp݉d'EJi󵰶 Pd  q .WG:PkE,:*0#8[*ob9PwYJXNvtv%߀66o bّJ,"\O"7r{iޡfOaʌIf4f- S39ёeSK3A㽂)#qWjzAL?C'#@{)Mt`A6cc R٫ËCa{6 }e̸.0偀OL;I{#:!^tη"*>]McV;gދ^P3b#Z1.34<8@je$8Ű28`6/ !]P@H^z B#W4Ey1]` ?Kr0]qxz= =e ؗkE7,,877@t/+NaCu;5.ν}MMB_ JĹ)C1xc K?;NyX8ʔ% n}_'Ϳ̲tQe_=)]]{qtb Nx:F-,y+yeoy-g>PNDfNeMdG8ߓR燺S/UiI)8Tt˄L*"ikv`#58&0)IMˍU8^2k;{Ղ.]D#|+m<4 %|,o\Tk*?Pí?C%]ZBJ5(= ՛+K,ح e( 2u< 鸄UU f7-\pbRR $?  ޺