python310-doc-3.10.14-150400.4.54.1<>,fp9| Yf{&hog!=Q}c٪o\ibrpi7~!iOb%FD;]YÆIc#vxIj-m:ꧩr#xF걩w2@$rJ8c[ ~HvAov>ZW4WGJoba=Fo=1Tz8,r Œ VÝթs-(Ϟwb~i^ _R21XTf[(c[l*{ʭ U>`y[i 057>ARh?RXd & I $=^i LL xL $L 5@L D L HXLYLoLL (89\:!BFGLH,LI\LXYZ[\L]L^3g#b:c;7d;e;f;l;u;LvM zQQQRRR RRTCpython310-doc3.10.14150400.4.54.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.fs390zl34SUSE Linux Enterprise 15SUSE LLC Python-2.0https://www.suse.com/Unspecifiedhttps://www.python.org/linuxs390xt?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!&?s>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 i  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 L&Y"|B@ZMKYrObU#(~\"6'YsOEnRTlYZ=B)5Qiƒ{"ɚh XTJ0=oUH2d<e8 SFL%D0L$[ksK8+U6{'/.8u$tpK?}(2 m5Rdx.C.5+GnF2@CV"خ~ĿD{[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 DZGNL/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 {#$nD1"'QXNK:;E!U9o.7"{VW9b'Քc:h)S_9bC`4PJ%1q fqZ FtB4w5qAA큤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큤ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2613e1da696b04e71180c3202cc99dac6f0dfb67f0b0ed9b41ebb28e64970cd3f8895f720f61141fb50434c95589741e918446fa71ef570d653a283b57a4e20bca2ea6e059073de3155bc64dbbde79f69f1819089536d56079d59917545915b5667ed7b6f1f4e599516465fc9617d3adb40c60087558155e03eaa6aa3303b7a35987a6ee254264b582baaa021a6b3374a5a961aa3155320861ccde74e989c32c9e03c96a6816979d7643add104aaf2e333990622483c4c38845c1e1e6124005670b6daeb77665a0bd536593baf7830c947cb3811119986ed726500defa48a11037818ba791a67f5c08d63289ee2fec6d83e1d8b4f2c435e21202dabf6e814721ee06f52723b9bad40e39994b5f2dc69248b00fece45c385dc564978faef19319bd6aabcfb280555e5915ef4abe76c44a3ef11e65e5c28b75d012ff687f8030d9e0812dac74d45c6290f97c7d6a0415bc73f2c8c016dc9b872ff9a65c27916cf8f9ca92803ad69092eac297677b077823eed2d9a76966e4f5009def52609402d84380fc5c67e3b79e62e3b0b24beedb11fccb1a08e2c5f65c060c57422cdaf178239e8e726e704c04d3a4d1e48cdd96b99342d172e1eb7e64493b6430c494588ee1fc6e043509f379b3405f36d2ea1f6ed3b90aff3161fded688f0f87c2a8b95f47db348ef82ea1481286c12ad68a788305aed2d95e17183a7640526eca45a9d39042918a36fa26b1122c0254b1acdf0999c29efa41b701c3a6becd6cb4c0c896f6537764619d8297b0d47485d388c24bbf8623b95e2cdf44f81bfb223a34fbcf0c14b30da04fe4ad74a33cc37261a817f586a6d17930a411ed4cfa7f68be8a82a4733adbed5385dca316e699a2dc25b7bb22b0741f2285132e05026a8c0dd35e5126e57b634e3dcae5aad00b1fb00b360558784d26548a0177b7ab5ffb49641de1cae1ee5536e97f2d823023a7e141d92b3f33711b0d6bf57a967efdc3d6fdc11decdb5b7893d8032946d74b2308a24a58b5000de00aff80c5b3ec34f6dbc5337ff436bbe3656eb6fc0e3c076bb4b6b4b3eaf2e94a8d4821653223a7cfee467bd488b23208c21fe601bd6b2d4ba6c44d334bb075babbf7f0f751318903b6c5d4382828d64e88644e47e695d717ea8432ec1ef79a17f2d209b11aef4fdbfa4bf570d752f336a9ee7af4a56b8e5b3696b962b69793b274f76439165823c69cf5e04bd5db0b21f178fd8b16f7d999d0da20a00ca8d271cd556cfb1d26dea91aac88b21a9ea9ad785299a282cccc4b9a93cf9b1f028f65b0e90c0c41deea019953beb5528a56a8b0f2e5da3d6f20f47057cc0325273ff152816c202f8a114cd07138ba9abf87cadffa7027ca298ba11ceb6418f3a9abb32ac988c8d342e7c2b3fb2edcc0e6549fdb1ea3414f47ea41c509c75d881e7b70b48c7f8f756212139ccd3356201266373b56846ed89050dd688c78fed84df22dda096e2f45d9a424ff2850f1f559a308d4bb0215d25df449f0adfa6089248cfbd0a2a62e811c8c72bae01b07770961572b4f0880df2752ff107b36be4813a665a58de26fef7e44163565cba8c232839563f463b504a3114265ef774ff6040f5e9d2a8eee7d8ef5e1081f35949e0c3862e6489f446b26641f7976c6f5a5fa6006b010649b19abd2b60bc11abc35f73d9cb449e77f1916046a9cf7c6b403327d5a42692c78f6b8d0f50da71a3b70bf57257d8f280ed71c0a98613a86848632eb18702b24e6bdea9c88f32d337795331d6ebb358ff03ee96bf29abd0943fb8f405185e9248879dba8144a9524f5607f7792dbfe9dfd14f05004c7229a613e3c444800d6d7df9d1c9a64d06275e0c45bfdbca990f04a80626d147cdb82a6af20fedf9586a6b58ec3ed2193cfa6abb69f9787e926a01e336d488abc0af0d96117afe3f28190089b0f8b745c0b9dac5b5702722ad5d17a4c18a0422a599534723d5042ca6ee29f7bc1450cece7b62f49c79d227cbc0e699c82359c92eecc94786318d5ba0504e3b2062a5a0ef0820491f18c53b8334fa5867275e622511852511d08cf283cf728b92205a5befbdccca24e6332e0286cb981bf511d5c856f35a9bc88f4bd6787a6712a2480a80319dd8ec19dbe206aba255beb86d7fca0fea978b20281e9e91740c7298a13730293aae706c2331a4b8601315f7740d05e0871fafe1cf048508396ab4bdf20c7f3063d87edf79394d04c72834841d369fce80e1e23ec0e3901ce91a51a409e4fb8ef3609a7e5c15cddb3d7f3fa42a15ff6e70fa7ebd8dbac361958e8570df60ee998c1e99bb5ee179f2109ddeece8012a5f9f89e4423b1a04734e47cb182405455c0fb38cbd6ef4eb9569fb86a4acaa3a463b3f0b5bb7c94e3514d2d2735f817a7841ae4f04802a4fc70f51de2ecf55bd50cba0a1bc76a9de0fa9255674428207f60b80a41df607504b79639cafa2df339fe12854cd86ced5728e5c7a46533e73bcee9d565b5d75938b43e1c56a5e7df7dc2369dd6a3a4a9849602acb43daadf44a7daec88d4253520e74e4ab21b36d3aa3cba29a6ae72bb8c465302cc41d59a181d10b151dd6a0ea0502e3d2df5958d0b92803c5f033946a4257989a8e444c9e478e639c4d6704b4dcd3a9b7a29fa223d094a5d7c62cc9defa73a8881588ad6c294e63110c59578bfab41b26d8a26d5a531a656c752ad1438f5e3fb859d79eefe3df85b113985e3956dd8aa77766f9eebaab4bd5ccc14b69fd745658f5012cbe28c16572aa3e614d05551872c0f9832ba1761fc5b57e79cfbdf44866a980874f771962ae8f2c43b4e45f2a16ec6b497fdef963a47705a975a198ce8e4658e4df73239d2e2d010099f4e6c40bca7da8e461ecb99863dacf468558967c5873fac7f8ec8ecbcd8b0c35a56d9bbf9d6fefb5832909686866a3db0b381bd4015adbba12dbddf66490fca89a54e0e66dbf33eb8f00f4b7822ae62dbfa23057456ce4c8f1f8994f8741f42c5c0e29273b87acebed01ab15e716e209db721b039c7d1b89ae371672b76b25af79e227d286c9eac24ad3512566bf478021a45880c787c3bfc6058bc9c453ad6ef13f94c588585531cb43291dfb985b69497a033737d475c561dc70afd7811f60808c6ee2b8c4113b8a4f063cdeac3f189e9bec3c01d90df2f32ab6c0b8f3ceff542209e2fac8ef80394a5ada3d3b46e8571407aa37a7edea87bab18fc5aa62ce40da07e45939302b1d5d1e166212dc056fb1a6a24eac112ac62964e340267a780ef20a2eeb82ef21dd4e2cf2d4b0ba927f19d9049cb0d80de953ad06c1cbceb22db7f2faf1d01ae9d059e77166e45456bbff33e797da3c107dcd33782334be442efe421192adb914a604844b35629a9c66163f2819bf5eea64a3e0404d8a7c7e0f91db516b4f281df18e23785bdd8497747bcabcbfda53f3db2a42a1901004fc1dc3b45a5c535cd5ec2bfea1f1830158ab687d1ed8e263a7b83380ae6087500824ab962102a9435aaa5c4bfa290d00667cca63cf5ecab8bb1a0b8c2882f68f124687fad04a6b3fb1744c75629b2fc2346ca61cb56742a5f09bfed0283f56545f15e96c70c2ba956c396bdce78b890f1dca9d9b6640e7722efa557c075d8b91389978d63627776032860190b1eeee81abfd0423d6a794fe6b2dcf191a2b5e350b3562ee8b97f9d7765c579a80b1c16482eea22e81a473caca4f08859093d8e70f4f14463a018e37f84d438627c9d713a63204b2e72781be58f197b2372f86ecd60c6ebe847e932cc7789f42d54c913f0bd1346b136e437132abe93431daec64c921c3ad3d97434c7d99fc67c488086ba22f72f046feae31862a94e62199c218124a2c66b87303c953fa7dcde0472a5ee2b8ba42ad3ba315732db700ec56ff45ab48ded2187c865ef15f4f5d78d32c95b0f45d70d2b52eeed605b09d6d8787e88a79112560c3fbabfe6226cdbbca444f3818da54fdafc296174fc48e1c64a10db7a7d7647b88d1ed78ad2ed7557f0d937a1a25539f868ac9098f35b7dace644e091cd20f65c8db4451535035110005e89085d02653865d0a9eaf53ddb1ae003fe310881b19e066b80a7a1327a9b83af02aa05e98ccf092da852197906756b9847a30acf3a637868b780d467fe121c0f65b4833f1e1f7255acb0c83c848f8eb2041eed07c4d25137a4265ed2ac87c1217e4239c581898e2f4435c8aec4abb642541dec64b14f80fa58e467e696381a5a7f577fe7152b9810ee2e918854fc249aa7bad869f0dbed89289b86bb60e7e281eabf985c88e40a19b12a2ddba81627cd8d5185833bcc4eb25e568b9994d889798e9c69d5a493fc613b8be736c880549e2595e4164fb27829c89becdb72165eb82ded7a75f93c810f9de11c9e5e6634a7f5444dd83da55ccb265bac825abf72ecddccf7e394f284636bd9df494a2b0c07bac886a4c8b0c1ddb85e959ee40fae2c86c1d68a6a722ce7b88ddb291c1f6b451f568ac4d89dcfdb54aa4cc92c355dd9fa8ea2d7ae7a34991c6beca94d69f669c5f77c4fb73e3be9658150bcc19232148db34757a74c1c543845e32c978a73272a32a2d87bda7b7e415e973d00ca9b153cc7fd03f25059cb2ad81b80b03efe2f9eb58162b90eddad2cface23f96e94982a067dacb4cac44042346eb421660c769f7b361ac12fe0f7fe53b602f1018c223b45c0ba2d49fc57b0737c5c69a55c3a1f2e41d7e2077d4aeab74baf2663b3b4926461b2b7a59d55d28f22184380fd8cee5bc52f078ee706c2b91c4ea17ad264aa64d0ff671743da906bebe98c963ce5f612614485c456f8cd07f7b370df873382ffd76dfaba8a597c292ec06bbfeb6ee53d4f90280ca5e38a4dba90e1bd556d09917bf2989fb229d5571b278edba40507771180f4652bb52be305db82e651d3b840a8b4e47941883c38707a4bf672f561d9b8e7db7a27c0868467473700e2f7db4d8553e723421b1fc99e36f6ccafa7276494bd598d454d071ba06d5bcd7a51b5d066e494d671932209a7e4b117577e010bdaf96f4ed50714691e71d86a5394384bb4585c666eb31f732d5c8a90bccf82a5066bc493d050906e0f32e8b7fce08307feb808ca6c417f7ad7103a3aefca572aa23e443a4f8332452d921ee9c373a2d3fc0dcfe2ceb628717d1f8fcbf79c877f327f9408f3dc02957ce2c9c5cdc947ef0a9c923d039fc245a1badd0186db5e074f8745c78ac464f396ab142c5f0756478e01765c0fa958e3254a6916ac4522142fcda38cf98c20a47f2e015238d3ac02bfd5061ec4d9ccfefd176f0434d8614b0ddd9db0da84390a862e4424308a6666f8b3409d82877b3e5a8518ce862a438777b18f47c1f1f02307379ba433cbaed8cf8f190cbb2a8e9a4880227bd4d6acf61382886b874af33d7d04350f935fb4806b2fad09a129d0ec384c6f67c28b1936c31edf0f7b053489269f2f0d0a802727196338fb007f8ce2e7953ee77410e1aef0afc093b34bbe3d002ce7f2354a7b7886226a9e9f21cabf856ab47f21346cc83cb88b845c4d9f94f39d8e502d4eae073da4820a6f89b2a6473cf75d195de125769cc55b8b9c3d0a8cf1653d0aa3538fd4e0738f7eea04e56cc204a8fe1873944f79fdc052aed8e3b1c15c40fe9dfe377e65c072a9303c54a24b4ffa484acec02ad5c258532c370923a3e005ddbe1f37316a09d1a85790e6792602284f76a983665988aee64616a9af8961246f4d12162683da38dcb0760d38f075fc622118ea58ceb996c75e4cb5c920ffb97ca35db25a35029c3ba15da9f1485118daf2955ec3a7752f427115bf7a46bff35b5d016dd051fde89757642d60089830daa751304bc19dd584af9fd422e99f07c7b8b822e7e854acc62153b20759cc9cd709d586f773bc2b18aad04a5e5dd27ffeed90b25bc42add9be781e8c5ce4de2c0ec0cd614b2ad638c9a9eee1a9cf97e2a78ea503ec4eeee2959d867103500051a6db9b1dbf837cf8f473e937253e7cacd3b85d967b86c480b3f9c398e63b53ab5ccb7e11e699759dbc2f2950dec69a56a29c4444f40a9dc55cce326169c327036e629565407e7e24c6d5ebaefedb609444320e226810eb4a5c461288bd7d363ea5e3d248b75f2f06410dfd4c23af78e3675f373c855d67ed089bf33e17bba885cbf5ab1276b0e8ba3499228c28880de4b69c525f19b751471bac6d7658e18c5b54cefbd7f8443d6179035e88a60594fee8c524b450ced7ed92bc6d44eb709a6233364441fd0a651f32e26bb148b303db9706012aa2c2a43aeda6f5b122231a2f7c1b2aeffc0dec279e7b5dbb7e149fc803296e6caa427d465f2c44eeaa8faaea0b31b3c5afdda92b6e26a6b26ca4a7d3d4450b0edf4cea5fdd19e648ecc0d47c17192daa95dd56fcf246cd08272767a349ab70853ced8f47080984efc09dd07c08e7e7b5e6eaddc39a06ed4a29e82a82067aac35f66f0d582ab9e8848e9f69766062b95b2f0d842e9a8f46d7c18bb867de6c422576e3e21d6cce8b4a95bcb999ab24afe82ce5280afc90ddb966bda034c4d942797ad28b2f7dea6da7c9aea515cc951f285da889d6ddf7b55302d4e51de5e14993d55ddafe5fcc0f297fd7e6d81bcf8615eaaed79e5e7fca8fcf55535c1e5b39b8b85c15c64758eb09971d86fb77cd065d05689febc6fb64447221d5e8542f6c12500591d8a01a3c0f6f6600c947f274554542203099f4c53c86f991dad0cceca3b2f91bc98ebc4da9fbc28225aae942a295ca00c573f15ff6fc3eabaa5bb4b4c3ee73c1188a0235bee714adfecfb057caed708b28bec88e1011e75cafbf0d61011f810310b3e7f13aa7acb56a136c56ea6df4103ecdf5650130b35e838f757702cc63a1d7cdf76b6f7f1de42db40672bb50b4255d1571d5fde9d1377f883323f8c12d75ab00ae719e3cb0dc8febc1253a46369d88eaafa6ee85aff6ac4a0cb3938bbb34371226b51a5f1267ccf36d4d443486a72cf68bb7b8a5843f1fe05d794745f5adc402852a57a34aec2e6bb5efbdb7a6aaaa830aeaa6b808e02f3e9cf9531fb91ecd03da0e6294873b5ee8d71e0e957b250dedf389460ffa03a7468341f0b7b9b666d763c7c2c0cc23b98879406f8c05c1989c9ea3771b29ec98c1133100e56ab004b0e31062ffe56bab61682caaf7d4a1a0ed41191603decfd4df734d3f84947366f03f728d23a6cc56c482faf51365baad7f86f583c6f4b7c4dfdec3c2d6099df28f4a33cc4ab114212cac93d6e2cc27eb2f4a2ed51a7533b030bb9c0560b06f45f2dc42b9baa5519514fef17c0bbf7e8cdb46f4d657add5ed600a4fd81ec06d996fa6e0b99f8c3abc4daf506b31095614f1ca1da65f75a034d85c04002d7fb9c885cd8d17c426455010c082152ed141d2d6cd41f812209b19cec7dd2c16553dbc26b0fc249c1c827513e52c12aa3537bc34ec50c826fe8d61fd7dd8fb0552d0292f794e89094fa4ded1c868ee84d98a1a3a177f682a174bae7aee8b2854ac1b83fa3c2a2df576cf63339feee48735902aada30493bb0bc0da5e77963205edbb9ae323c3e32c3c817b8a655a312bf47736d06121e05b74a58c580abd437675c16b4979de5a0f3d1323b64257b84f12fc138882235020d93b34951d9dbf53efae3091f2a78ee7f248443c421afdf4d2af7a431aee2ff2421900cfda4087d22742c196b59342f17520f19e9c42992534f35407bc94e613510f4791ab6dea50156d422cb3b591457283a85932c4c81bb956e910530f01e523eedb5eb67f8a1df4b51bd3692b13f72618466b8c3867c82ba5d6a3d2b8af3bca58fb971e20f260bbc612cf3e734c49623e92297b20f7b014d58912b42aa86ea6c76b6e5be2c392d5a767c1bb7ec3d810e3c872be70d090a6b3f3d84fe13e20fd346a0ed7a2bf58da5b4222797a5143f013bbe482b405203663f4a9cdfac569af40f010e996b6eadb95792e2a959eae40e0d4b2319bb85ed2665af2f15d824c675a2bc15f1aade640fb5015d6b1f7efb7c84f5c68e9119e9bc4aacce5be1f3996e0cefd62364d1b8f590e0d4433171a01cc7aa03bfae024dad8050a9d1a0a40a5ba92508e55079f56115859230cd735d181067fbdad70f315bdc7f6060c763c6417a4d7f85217da13418fe8f5bd86b099dbee9f820430edf4a65eab01d7ffabe71bfcfcae688710fa95abef8143d22fa5d6e977380b3735af135f5d2792e4d79cef9d6c7491d8031553081da8a92b4dbfdb3afe5e2d52945a996f6b725cdf9ff2f2c9e7e4e585a4d453591aab8401d868d7881c7b2c00ebef074cf92e1cf808650339969195455cc5f5b45d7eff2b6975a7fabc6ec363dacf4e938ae8d7523e7476332ddba18323d11a53e71a7c9b5110e031ceba31aa153b7161b49d2155ecd3d146866260fbebfad680fc78b18102d7516f4a59f86e41c77b8b3753417a2931b43ec8a578b7cda3d05f9ca6952a6acfa45f05f60b7666301c335283d2d83bb6a8529b80ad1fd28e6801a4ac85ba2d38e682f3519c19c44adfdade4e0faa70cb14357dbd4f37fecd181088a9fb1b947283989f9ca1f1791039303b76035cd6fa0ab1abd8e82f217b2a61008c65e0f416e34fe8dd3d572a8eb4560be02bf02e0bc7f1c2cb2e6db9f1355c389c26eabf81954059ac0b510978596e25e390b4422038a12214f35da1dc78c14518e4f4edaf244c438757e555307d63161fcdba711a70dd394ac4fa4df63bb2a54609bd0c74e894ecf6f62835db74b4a40a1a0108a4fac847036bf928609d36235fabfdd9b8971756af61bf3a136bbe994bd62b6c6c6f2aa9f1d246d9123950f54d5940e3a77d8e9a65720d6f9dcb8c3138c7120abd964a2f1b8d8f792d45d2ff9abc66b7058bc016ad18c8fe62b974866d600740ac7b22ad44fb98b263a951c53881c41792a000c4a910378fcb1daa49a2ab9783cb50ae5da11a703a23253f39e3bb2ef28342b78975d1071af3536df53c3d52965b58342f5b58fff6bc8ee1ea14cc53455abe40092d02ba8574b00884b0b3df1028cfb778e87b32d5c601a0b277cc59f5355597f994f6f0e5b80b255272b996cf9ed80eaa67f7598dfc12133c206e6fb617fd046bbe402bdb91d004222a004480f3dfb9311149d25c357552bf06313b225a40c2a6c77e8debf047cf3c5f06f6ec399989f069d7e2e981bd2ae64c3c57deefe6cff47702d41721799726f83ce406a7833a94ce3db71793ab9a65460d028bb91488a25bad2e54a6f8f6914d1a1ce621bcbeb91e64fe8493d096b833197bca7df0d5cd8cfcbe795d163fece2af1df0ca1d50e75b170a2b9bcc662449c5a22116093df651fae22c8fb00e17df62ab593b89f3726ebda16f703071b99ed87c4e32cc4bf966d8748c9eaaa5fbcdced7c40a5e5a4b69dd970ace0a65d931fb79a38f89309101e4d29e3232a716e1a00c488cba423b4cb9f7e0cec4b6d003ea0b0c16cb2c2bd78dc0e514ac1e5efcf68ae3a48fba13db5a8c3ff06a0d8b8d56a2c29b6c6f5aebf6a7e5e2d2ee3d2aa6ac39658a79ee185ab9118ad1d65bb94a8f919af49e230977077f8c87ebeb7fa29f6fb3e2000e7b0f61104f6e7cf6e1ae6ab1efba43feee1aa9c12ac3fde0fd66bc48ba6cb09a22cd15245d8259b064bf8b8776e5acfbfe1f84dbd0487af481373d5549df4a8237e9268f14b63d2b2c569b5377f87ef37a82694d94a1c4fb2c2e02fd1bbba12a8dc4d226fe1fed40ecbb005f279cc8d7fd4fb1b6b9df0651554c2cc4cbbf43b1e5d5da95718b3d1982b8193cc66944b2ea5fdc4777db6c209b675fb2c54ce8be779bdb74625000b4bc51dd278a4d38337a11a0842e1ccdc1959ed11fe27bfe417f7ab9a1826d18df77ecf42e0e7aa325a44dfe3e625943980a16f163aad7b448f5a6bf9a6240c697f5edae3637739e18b14be9aed90b0272d5e27fc9206dbeb3e406f131e51ed4b5503cc0cbe4d2759a68c2012a00f54a6401d55b7b0a6fc236c8302cc4aab9baaa633a542cc61485ff3b7b922c2c8bf96bbb81efc00e8c8727c190c179c20be0488ad28d437a1b8053e37232e117857e98b08705ad8d0dce3eab55aee644a656f08228c3cf52cb2dab604ca3144c95befab9f10ea4dabddd74ce8da34099043ce6b87f06131f4642876cb789c73561ff6663c4566afe1cd8a1abece5ad31373e36cdfc839efe7bf903da2dace174d49c768be7e8c4b1e1659391676a659da4fe2e9f04f46a6257eed25fc8aa9fe52629385ff941770625f6a39e01da1addbf2dba5c73257b34899f210d7e90a61b52a6a03d15a8452a3c1d6d4f68d70b2d6adf41f63b56f649552114e1a1b4b5b3bfdc0cf5f2ad2f059dc99ea7a8115f6cc108101e3553e873acc54b35449d7cddadb41755bd8af24a53cc5807f19804667248a7596b4593c1aa1e47731e2beaac3bcd3e6dcc102b30f16946ea6d883ea39dab2814ebfc01e82db54538ebdb5c78639d531999ccc432ec5bedcf1a73f982c3e4b9f000f345a19b7d379c4d92f4d218374135392850a469d3c6b081938a89a7fd0824e764fd834f9fa7e8d0cf0191ca1e8707dd47ff31ccb266dcc47208b205521655da1a49116f0161b67a4010150dfc59147d169da8e41052aa15c626b5ce9987d1c3b9f9f22ec670697547da6693420667754d2eaf641fbd9d3062487f710b2c7ec8b61d5f390b3583190e7e612a16ad27a87e390ea4fb8de4023fe6b47c02a9cd2751d765e60935712a2f4a424cc7ddcd360f7df507234b1b335d70710335deb14bd9ffe8257979703641fed1efee134f94934ae76a2dc35d4854eb803ed065c6fcdafafcc98821443f829c2d71e7a8da5d811e34474a9ed2881d8cc4db187c67e65a33bc224aee9b8b6595b311f34090fcb5aacab03ce2204a19d51539320a8e72ca1795e2d008a37cdb754a082f6418e635ddd3363ad4c90b9ff06b3baec291fedec11409aa2fee48e23173cff2ea9651ff93a0797a91331d71f0a60805229426b115265fc6021727e311bad433434e2a18795bceeae91d5877609de7c4ed1dc9fa2ff5aa32759bd25b9e7c2ea962ba8cc42203579b2e91bd2473825ac91a05cac2d09a472568ff9e2d0a97d95c915d343bbcc79c8b784a301d656173b5623d28f6fd8147a0b6a6e5c175eeba5302be2755ba742d29db0b1301fb18ee79e77a26ab792a54ace0463b6e9768a7bbc1aa0ade90006ec030108ecb5173d8cf2e7ca671f82363b904f3c2bd81dca4f3e22b7b767b6f2e5588fb60c1708084788fe114c89687e349a5145f415d80e6a7bf9d1711b68cdaabc615f9078bd4d17c04d04e991aa1d2e5864936dbc06eab0666916dc70347812c310fc62dfcdde67bdfecec086e4e80a56b3bdf8f4659456ac262f0fc2cb52eaab27ce85e5391ea5baf2c16c0ac5442216921fa13d591c48713ff46f1dab6b26b659120365d4eb007ce408c2ebf0a8818ee62a22da8f472c725f159ce5ff97b99ea9bf412f9b325c46ddf6234ea88490c8613b0003f8662fd3d58a8d23a7e2e172f4fe20baf458af5816efb397a20b86ba5aa1cb2ac29290ffeaa34b09b15cea6d688280e6095344a3eba3d4a4df04cc0648f30e6d7af5f57ce7f86b5b07ac13420c45b8a7b36cb1ce8baf5c2e519406cf0e57cc40524979b3515447d4886a0909739213e1439886e3ceb08836d6c2ca36af8e7b0b1d3493df3ddeb7422335744c8b43cdb1eb26dfc54326baf360d5076cd6e5b24274f78bf7dd374943ab46ffbd78ca4f150e4e7e861c9eb0b3c238aaa370ceb534da8b688dff8470889973eddce208d2ea971891a9f2908d7fd078c28351799dbd62985a0f0197829a7c4239658a64c55d43d232f1866b14c44ab99304b526dcb08b837809efac51fc6a60f57de90f17470c26b80de37a18846a95e53e53649f7b4f6042b2b60103468f07c77517f2f627573144fdaa854b2480f0999ecb33c54daf28948a68db6849824b800ffaeb036162741ef1bde8cfba85a94a6eea108de225c87845c342674cd7963e108494c835c30eda17a4b2b245710b9b296e92c2e282e803c1190678597bcdbb8537641dab9ec2a2400df4d31b101d34f71bc9cd19173a240af5a2c64fc09a6360948b90d1b40a7f0aa3d29a541a93ddd3dc52d874338f6f2f56e0ca92021c5e75b1e60ca93228100529f940a7194357e95236d15726af9ba52533c36e7306527a90f7ad2bf2ede7608659f90365c6ecbf30972ac852e5a17efc681270482f8b0fc6da80d1c64491d30524b67ff568c9e0321528db8b160618ed844fe399f3a71dd8bfa9597f9e71b3af426efa410c85449c5df6f8a19a62a89f15e4be77ed82d14194166d2308a88f0ce46981b7a3bfcfcb884cece3f45593df04df56947f9cad91dad82ce628284b499e9379578443990831dc89628bde00b49ddc380da923a7b23063256406961bfbebbf22c18ade7b8ff4e7335434dab4d5f98b4424cbd3dc57f87a45730f85a99b6907c53aec07dab69d1fa403f6f7cc724822ad706facbe11faa3e6d03bbc21919802c5a07558205e562008c09962d3c6330c4a8084ad3b98588fee4614c2c4e032f4f329a81cc80637282b6b97bc92dca605fc10e8a864588717b64a749c084b3ecdf667fcb8890a66e091fdbef5e3fefa7f9ad32292728517284ef95d219b3ba3a3d0100185ec8b512a52f4ed2978cfc64c8df588322230552c8d5051566a4764d4567d8183e2897ae55c8e0bdfd6d681a1fa1ead19675a3c494b3e314f0fd68e8424626eaa1c6497ccc9b4dc4625f879197e223bff800ae443923031ef991c3a15d85aaf4dd5d4859836ddc14624da0ed4d9a3d395482b729eb0e73f8ad08442c96c69096e0e9a744f748b6cd7b6591437b7d94d93b1c363f1a2a328b6ccf684b0140a9a570db861e7c801a56646fbcc82dc0a169217ae885e2a864e68b7d480de832921990f1cb0a3f4f6b79b930c99be56fc0ab99a801f0036a4ba1e8e269a31aa3a569d0894041f07789a80fceb4abb2cf8e6afe320ef264e7fd934acc88ac4753f2e7c942371a064ac4633f84ca7ec8c729318c13b0875f9da6c08a6991f426207235743963f6c3aac53bbb07fffd67ec26a9bc041cc25425ced9a74c9a458dd8344489d9a7c24a773f10b8761887be3b854aa9c5a1b6fb1a1452c3274cbd324788c6c70f8ab50a46f22fde71e5c3c4594e25b26697c5d8609e033f9c831fa913bb3381c47ec12438447de9d4090f145dd72ba9bc959305b12e1ac908e659181de1286d4adf2e8b4e1dff1a28e7543944886a4ce5b1af102571392a22a42c129633005cce9aeac5e40a0e7e61cdc6c030e410b4523ed2dcdd9910fe4277d58e3553d27da2601ace6f174f9f5427f88a50264343b10dbf1e4e68da7c1d9bc00b12800069272060e4790a8ea23cd6d687179d9e5da3c373010e87cbc89b8a65fd65c3ae81eebcce8c08ebcbf4f6607c7fdeb32b09057985c375cc3cef3bbb9b7281706e806ce87c2f6a06733b2fd8afd716ff5c24c8d6578b85ec31ac6fbe367db77f2411d8d66522e765b59f74b1006378cda9ff37421f44c86c72a81684ca302db65198f8676473d750df4777b7cdb5692180c2aad9f27e95f50dfb49f5ee864906c6f165f4bf782b18565406d5ab4e4d9d474848b4b28714d6a034ae2d9fedc38d3a4accf7e59835ecc43bf82fe5595f1503bed705e1cef53899f3005ada95a3f720c3a1e5768538fd7a2d5b09bf7925d91ee0c61dff3c08a8c0ddb563cb621ab2d2e3ea8e3ae4245b2afbff1812167d648aa9335e2bf909e86e8a6df0449f00ae3c64862ce51d93285cc4408a7e52e4d4c54e765f9b34b415cb1f082866879c8a9c67612b764846aed086e1d36fe7726362f8f7f311a1296ef7aceff0e7cee2925e995a92d23c9d1367bc2a1d21bddf35c66b2b933e361ae697a3f7b9c00cbfcbf2323ae28999435e94f21cb32f1b0fc05a125b410e8976ca811a65d41249ae3241c9bec60c499b86ad25a85a0d865d14994ccf8cd0b035b80690603e15e43fd1fb5ab3ecaf7d5b2e913406bd5bb44ad62c53b97f96d5400b06d6d441b0f081815a4224fad4dca97a201abc51b192e215f9140159464fea471f3470c77c246c581f10c71f7800a7fc97be4027c7ba8a628c680ddd783c4b8780cda3a5aafd549ad1667052280b80b03290b80541cfcd195c12609e88161daab161c910aaa99be3120ea2b46f614b9a7aa5b85b1644aa24bcce0dff48ac7058a48201e4e17886108b0cc8503d22916c558e422a54737b55d146591ab37bf90baf5770a263441b83e96149a56bf3d085e268391ed28378332e1b130023e740a34a7b3e826facc57f2f6b7070179324a2f5e94ab7e21963d88d642ba57fc4bf8fb17cde465a83c5d7218a7f1d51232da4dec643ef8a77af83aa0deae50c24275b6106e6933cfee0022295fb8f85c2d6f21f387a928ffba363881773ad1e13dcf0d959c7dd093d85bdaac848e598757b9839f546b4ae3bdeae70d83c9e3692a8486bd3c0f13c6913414205a394f8bad313b30f59b15d67a5666fc2803a29c2c79c9c1fa7063f76e9d09fc9c3cd6489f0e32cb319447cc2025e2b684ddc03a935c728a8ff7fe8fe0b8a074ae8de0dac9fd276f1f588cc0ef5110c47b3c400d2d0beaf7a923c672dd533c4663e6d940557bd445ae0e8c68aa994f44d51b0062491351503e6ece6ac6ed4c01aa098e5b5f3c5f53c5507873bed4f7de1c54323aa0293b2286c2ae4ae17cf35683d2cac2c76113f00b833c0643446a8625d4bfb7460965b01c3c2862df561ed7f28344fef0888752322989f5ef07f74130af78a8d8fa5cb3e2d9046c80eb5f283ed1091adf324f156a31e19e3065ab73a2dde3d22d710fa4c74fbe0add241f97effa08c1f3ff9d5aa6c7e035c8dcb9c07203686ae55195f69a4452b21b1855425f2d5fa32913516757439ace4a23b6046c30a71466e72d6fa378d56b7615aaaa14922a2fda53acef8818dbf19808035cb79a41d21d0ee5bbb2066733f4ac494beea7b3287f166ff1318456e42f8cc5bfec68b4557b3c3d69a17f47bd02133a2d7ffbc3092c2b4797e922c2e025d30740951838ae9be01b63d471e5cbb3d994b9381d5fee227c6437fb685d18f23b878fdc41e6af61de276987850b72ee41ff7a8bf895b77f42812c4c5fe4eb1f3d64ecbc7b6857aae51786bfeee2d3613fd536993078a067d81a66d4b6749a353c43e70057597f505cf4ab7602b70294b03b904d9cbe65b89c909f6b08c5259a9a49f4969c0685f66cb4865f6d4a8fd31287537e309a9480682d6f2c5ad274d76d9506dcf152b8a24a5490ffe9d20e8956ef3e5ce644231986968b76d171253a6308e6575e17544cffc3b7f9efc4b72b0f6bb9e94bcf9006a9b8350c3a2cbbac02c186c3544b4f2e1a913499d02c9bafe0eaaab289bed393214268ab204d8ea19118f3ab9b94686da63843bc506cb5db94f59591b2848b150def82cc44c366b02590af35ff8ff5c4da603e91e5b496914dd5eff21cb53269c9bb73d1396d9befc33a9858039f59b79bb4b3bfa4e3ffe8c817e8f8f443faab4f0f5ce687a72f8d7084e058447f78340e8bb525984480759d3baf7491bf82159e7f3d4f3ef76d095b11b438ab129ce46249edfe59d6506bdef8e9043c6700a9d64b9ec04ecfffb2ac7d69d5f8eea2170682478a7bd63a75f2a9222689ec761cf13fac24199ba6523bb36f1fedce238080e84181d6ec3cbeb1734f821acee8561d4283d1163e1baab314a1a723ed28bfa6bc9b0d30738a628e1ad0cf633cab57af130393e31a092d4c79ee99e9731fbaf8ed8b9dc8672fc2690e1337bbc039684f3cdbb48c4619727224414f3371b3e6f1ca53d8b194018a36904f27322eb1ad9a7397bd12f10d7cf8ab17f6a64d264537d27df11c2f68945d20c9f4f356a8d109d6dcfcee944ace466a5727b5c7a9ce880b36e0b200e44be05e6b8e9d4dc5d4b12ebd2d256d06e390be4673fa158f20c2a580d24c7e62a7bc9e3412e8e90abfeb969406f16c640a09b46b56fe18ed3f9419ba05a9cc7fbcb3bffbf081d06eb445f3005c0145075f06d87abbc13134efc94823a534df9fc6aa03196b29628f25a36f61080e17254adf3818f565ca92eb11bbbd136866a45d5321539ef4ffa609d68b4f4b2589a353b0995e3a1f9ccdb94cd94b75367f99fa574ef0a9dbdfddb23799a62f369ecb28e178e198981eb52926be8d6697a474353d4a23dbcbb630931456d5b6d7047705a159cb7ace8a768ee2e52e2c95c02a439a6e8a97b973cca0ceb995b41611102ea8eda75d3dd1611c7ede5e7220ee523e75cb7c2acfe7308231f441ff94fad5a9559baba43af8ca824575dc0ca58fa3c5b98f75a1aebdff736b1fedda221cb855b879169156a85af671f398ad3eca60fdce383887f1b72ae565a740cbb45fa040ac1186507d4e6d746da3b858a84817a4018b46d38828006ee06731312e285d899974ddec5980f6adaffa933bb59bfd36995a5380b5d7f692c94e73b8aa8dff2d0aa60703899c99739f070bb4aacd8bf9ff3cd6f97fe156060cfe5e41d81087764d7dc6ce5858137ae20ddbf0f9a5512207e804b50a362b518ab651a4bdcd53cda54899e692ea480f37dca78b2f3140132e0a0a1012ca13ebbbb2ac23cae3553992ee90eb035c86fa15560f0c6468e0eb269c8b6847cc7c216c76e9ef58d2d7d8044288f773ad1486c6d712112e677dd66dba0c394f56cd61bbaef22fe5d6f5129bc72146e5852245c80d6fff10c2de964e1a845517388ba2317b3641a9391ed24c60d6f6961043b7d5bc4db6f1023e3564fa0b76e651aa9b6dbe9efd2429e347047d9cd8c5f20258f7ffbaa747f09133b00a0d3a8fac5c9f2855ae22db60703c6e16e0935a7dbfb253603597efad3160cad794ffd55100236fb77b72d6605ed8f75407ff1f7f16951f1bb4024eff52cb82419956174e682c841ea39f348b17818ca95631866cba63756ed721f22dc8c996e98917d2839d2a5ce60679cd6e5b4a7671427d08d610f420262465b78c670934a1a93da893b42ab2eceb4be5269af6a761cbb00303001c41ffb3be1466dfb2a16fa861a4f4530cee8e763959fd29293d9f6f20f2d71838819fe78d02badc295303055924284cf02a064d3197b604ce613220479fff4856f2227e893d9187463a98e7cc0ed0acf9684dafc2515c6a77b36bf13d0be71d3074a85661599a9a312d52b2fdbbdf28adb2a189d85fc1f04caab2af074bbad57d05ece679ed0683b878346780213898b22379efb2d3135f4e31d7d56530f94a6a7ab630f221fe3bb15550c91f7ed2ce0400b5631bdee00a151fde37d7a099cefc0d35f798d4cee4aaea033513f93f46fd412747a1249ba060516992387f4649d7e8f4bddce18aecbae65c3d6871c8340408bd3789d2eab52fbbbb68a590036be58bf82fcc3f02709c608771a1f286a109118e4a688b3a3f8c4cdd160f8e58152124505ceadf6d5e7309050e4e8dd317180a1f948d4037d736d4cdd8d8f9e78adab2930d56f2eaeba89202892bdb4ee51dbc2fd2a4eebb1ba561b483b30f86c0ae10411a49d540b907f0470f9bb5429dd7a733ff26439210dd95095fd3d320beea1b4f338a28a2ea0fcbe9d7ca635a0df07b12ea9711084037e99d7d554e033dcb5226a67525a15fd9434317fc5cf05094305e690eb353cd34ec2d75e8a35b321a982c109efd3502882c2c09ea56df0d1836d7ededc9afb12b9f1dbb834752615001253bc0865c0d16ff3e9046da819757824eb65064d08c87ac5b8b637534db5e4e79405e6fc9650acfd97f343859322a5d8ac0b04a35dc660201752ecd3a2bc6932cf0551fa5d20b2fdc355f93827a08960ba8387391f42a430093e47950c08de80e81860d07080f9c81dbf48ea6f814b1555d6e837c88d69cd95541f6b3107a6a615d9cee4d1e508a1c755cc97f0476c446372b2707e6429814b861b05e329accb9e61c322bccdfd38ff3accee136408568a98623ed2a8f0385c0708775cbfc4307bb70a0b0c89a2a533a428c8671375811d5c847fad85158278744b803e1e2212d40ffdee9855b096d5ec0cee1fe6905dfcce3b4bc4884d097d197ed6bc88ee5dae9daa5219489ba1209ed91f16324112b89ed53d81cd64c104a1ddc0f9152a1f44b3828a106b57380f72b6630c6b2d5bf735dcd1f24191d715b2eadea3c49a55e95f4cfe502447bf3eea42f33e1157b6f43702c6c131b169d1b53f2876cca9564fdee33c90a57fcdc240658262883cb944e2384c7112fa2f16500d033f5fc57fbcafb93d6c3cea057bfa7b316dfe36a4437adaecd833b33f956fd1cf0da36c4625af81ee6650001f8a0d575b7b2a47b26cb6c9d02574cc7cfb680e0fc36176992c4e2935dbb2e076c4088f826aa2143cb8ade42b3181f695795f1c29f6291f3bbe2cf8a965809f6c6815bb3b8084ce481154b581fe30148902e37ddc6d665a38296f41efec2de8a58f335050ba4a12e398b7c0fb3b74b2694bdf762c2aef2c7ea5bd9d0515b77f98e04255058f708e54012eeff571e5edd346cfc900a209b0f0417bcfe925abee168afa623a7934f47ba2a756fa32091fd14300d6629f1775b0f050f53a97283aac487e9be0a9ae66aeadd95d18df646e5f08a2e6d8a8c73368e979ea48a553aa7cdbd9339c0a12477959786400f22cae3127c65275a5c6958f0ee1d886b8e37d95d39868e28297b0553411729c16c733165e89487e16aaa073d89116e598c98889596eb6313d04d618b3aaca0f29e202394e2f48556eb086dab2d37a7194ff54c72c9dba79646e3e8fa9eabad0c59a2ae77b08709bd505e85c3c42494d8ecaef350d19699fe88cc9a6952801184d45712e4a6d84e4833d23c22cf6797648942c444d5fb42181e44666e8e1d50f02ad341f0cac1218227a71a0530012611c0cbdd71db07890eb737dc9bc4ef7b82b9aca83a7b7c2db41a2f5027c44a90454df720729e474be9149636de3befeaf1e3c45ae358e191c7335a6de58875fb08f39170abccb3466fa541b8a9c3537ca2c950c83281b0a7225465a3c88b7656bf883311301fe85035c65dc6faef6fc51b8816ccfe7384f36e22961423f9b1bd816f5191306ee0696d43561d2778e48da2bc373efb2b5310afd0d3c66ef52cef5e29992c0d67f4364c97b3d38ee2691f0eba9f4050d1a203aa848764818939f3b73c6f5d34e1bb87b2871eeec2149bf65e8ae7c8d4104c8de9c46112d86f21be3f26b4be87450080433bd092388451722a152cb05c5f4f68ac0c769c12afbc6336830ecbf2dc18df23ee2c14eeb02b1f779f726464ec9174e59096dcc327e2ebf7f67ced584908628f8835660a5e9e65ef3f8ea93c76e512045a3eef7fd4f2f63012fd54b8e7a23b9515672a4a376f8671990e32cdf8e8b201b3a61dbb0fa24c6d49a036b0ed44d8478e2c79b2b9111ee273fa4c4204685c566d7278e5ab0ae2c9d28235ea8cdcaed10e5b771da79facd922773a2a8e9f2b8e91b4ef08a7df48981c4189ea9c11fbd5d59c756f174506119903aec2c67384489c6262336e7d944aedcfcd17f76bc7a93330543cb84ae778e7a481ce7eaabcd935a5d2ac5beb08928a532e8cd7b5a72ebe024fa814fae5d8363b6d71839dc451ba3f33c449b9fa39c3c677cb823caa6437e65208c00cb310db441572e804eda45b7e3a1d6991712339f389db0d5ecd24f1d03ec58b9ee865677d63b44dc292d01ad4007bf2c0f4fb2d756e9b17ead2d855e2492bc68bdb901c396bd37bbac85ff76bcdc45c48b1a53165cd893dcae4cf9c651cdc15c7e52ad3d3c7df2e5860918bece670a967c67727f6ba812f21bfd994c221cc43750469c8ea164701cf5b5fcf58b76d48a2c880f77c45046e009b74c1d224774caee2358e88ef51412215a1de466c3887d5cb7845dc8fcb52e774d16efa508ce92ba5754776a3ba84635cc8a877cbf4970368e001a0de70579080b1368fcaa6bc14c2da5f8852dcb464e56919ae4b8e3b77d2d7fb1227b89a9b1be60ffe36e89a7e1c382ef575f666f5c0b13d1a5856eda05d0abdc42c44e5fe1892de9c2c3c6e2c6507a424b5de999cebb43a61c3aeb8fbe7d9adbd0e4846c85b204a061229b065c48ad922227ddf9261bb20b49c4bc096312d6f25a814571e904c6c5a6fd61dbbd9972e4ff0ce944b9baa058a2f99199f92ffd0e691b55477a4f08063ca4bda9e949a5bada2a00d24cf7bde45998386c82d69fcabd15192b73320e14e008b352ff255f83fac1072fad03345488334779efcb2e2a8afa72459bce9ba133a57f08416bb97f0712f37792c4f75232faa3e54f141032433dd7c62bfd47f962558581b4834076c7b730b22370d734c99892a318332a22bbb2ae15db8734c690eee4c2a422c9dbcd5752334d950b10929191e87e26c8abad20e79615905121d980fce48b269e94bb6f62c25cfb46e58c7fe14576946cab270339e9421ed017d3caa49f6482020fab9cdeeedde2e17f0faf2e17d941834b46279c58e7602aa47b3c8e696a495150b3ab6572ac7823a83a2cf901c1186086cf99f65806f2ef48775aa9acd1e43698744c26f38c17d8b12dba98e89fb5949b1b9a67e3169744654dce0156847e2d848a5d32187bf691d0ac89352b04aa3839258781c9c1b8acc45c2e56271e53ed64f1f60aa8204ed7188519ebc848481a4c3862833e7bae684259c02a66405a28b1a3f5ab23d1e707dbfa07621891243789eccd20c130c15bebbc797eaef22f65537f85f09ae290261f74805fcae1767c88b680ea71280d595c31618db5a0c44b5d1ea75d81a341ed50c77f76ad03727cfc92ea354015794cca2332d7efdd2ddb6f107beb15f87987c0c6ba417ff7cb7824cc1abd3d5440e1781b27bce94e3cd0abf02137365dac7c23cfbbd92e692de533e2eb3e2e5e8d77ea1e294b93334a947ca01a7273d1cc5a36b7a86f97263fe5ec8e7f0958634c2029589576995ce2aac5c3af6d9ccbf9ecc6ed6b59a7966368f8949df214b1595695cd6806884ba6fb4301cc00282e141dd23f761256a39095a57964689684097433e70ef790f83d9db879dbfbc2328d26cba16e306f870b7734b59a42bb958f56374a27a52511d4dca1b3a855805177071470bf6c361a1b9309975dc6f4adc71981e2f4b966a5f0f13fa1ebc1c03192f9bd29f36b0ae2d714f9052fc164027acf7cc2309e17e3bdfef2dcaca60e3a887321ddb26329138f63bd535037f30d75d19442aa6f83b87b549283b93e5e85518b444ffe4719fecf2f01ad6af85fa2aec576789e66b771befc3c5ad18b35dbe1a71258f8cff43f7f152aff7800f5c5a731c818b37a5f6f05ad8a79866cfbfaca23c99bf1da38e9eb42e624b37b1ac53b9fa09d906f83231d1128601123efe48f472328f82070bbfb37c58c5766ddd864601b50b54a1882f2fbec67945d421339ddea67cd545d3b0ffad55e89940a49281fa513a5b7d52df32dabd24a7660decffcf18c99bdd7e2633be758ef7ec16e14ac9076efab0788a0b6bc9e1cea31ac0186dec5d52d42d035cc4c5829ddc43d850031376659a6e0a4fe6227df2964c1ca9a60ad2bd47178dc525acd3294a9ce0fc15ca976e3c6644914b8b0b88da3019e96137ae44401edbbdbcc308d36b5ea40fae1ec61ba9f0bf9df2ccfdc00c0b2cec6c750b4ee0cdbf1e4b21cbe35a0878b649eca9d05bbc27c6fa69aec607a4e8698343883f4ca27d187d69f15155426627b224412d78d39ef5feb470528f4dcf0a71eb7b24d4f553941eca07af57803d21b1674db8419cd5599f1be683a31b5586b609ae8cf8cf71c741affdd4668f8bb7d4758ef0ed763965ae97f0bff00ba94bce2bab6c94916f24272965ff507d1a8d54b28a56fc9f5e9d48da466f0a5a4168269ec9a89558d1a8bfc65a12c8f144ee9e33c448c6107bdf1eaca71a55dd9f78fef7cd183f6d4711c2998edc517d4b832ef790fe23dcafcfc8a9458bb4db4f8078c1f5362157db9186c121b0ba4101800bde59032bf60ca91a3aee0f33055b967930ea3de108b86a91b98552f776d3dbf3a557158b2d7e505c883b2a75148725f2cf5dcc6c35c27369194e8667c0a19288b64d4e65bdac490c528cc7e3d56431a9013980ba9ec31aa99795001b239a2af32337180508944afae7df62b0bf3abeac22a4c02f3b1bbf1c18db9ccbc59e87712f9e062c17be261d469dc4d6b2b755ae0eab6cd5ed42189af8808244cff1b35346204892a1955d9c2ffe7c8203cb50dfb6ce2e3a1dae108e1c7cddcc583db0643981d8f32f4e327c68e608d781d7a6f868be2bc3258f5aa548a4e76179cdb28380637b5674ac4d3bca1952b6720241277ff0499da6c3fb58472841fe3c9ffc49a3a1e7b5b9dd5ab5b5dfc30dfc1600e2f8e4da4ada3579ff03fc2abe0c4a9c9c2be00a10653e6cf5208af0bb1038ac0e7bc7020898a027117181a2c0510bfb189e9d9af585d7eed7fdd8a37477f7a9bfa8095abbb7901133b492265cb6b81cc6e1582e7299c0c2c8b4b79076a56f9c20cb1576879257ac7e203b393b692fab9cb126c9a592921afcfaa0743117cf8c838b650eae6e008e47982caff893710966cf9b46b28a166e929a47ba55798ae163ba9ff1845898959f019364ec78fa57215a532a75d5402eba5ba95424678f3e13e0eb07b39de1fd25ffdd8d9b9133a68a8f719b1f305c4da7d876cea3ef81e58f80359e169cb9426543770eb53cef97fa2d437e80e743b17e1efedb755c436c505a86c3acf8e216d5409ffa89cdf6178d7922eeb2f999c7aa29594db6c5ee165af867a84af0a325f966f52a14b4bd6ff992fcd9466dd42d3fffddeac8cb1974ae268b6f6812e60dfc6eb5f1bfd7bb55c2f3a56f9aa267766759948be5c3da61ae7a13049d9179fc36fc741f414397f3377351165bb6accc7efa16c4ce4d0fd4043b1b5ca1f2eb1def17bab84da526bafd1ac8a645f7ecc8859cdec2582fe794cb2df8995014db65b4eab809d4a6ba550becb2dc67fac84752f2d5929524ede80234afec38fc81910665a56dc350078b27ba7a744fc6b495e0401cc699360015b8a779d49a91fc22b691bbf4f0bde09c8ff35aabaefe151d8ef2b068eff8f5913685879571c228d2215c6f50f3cb386f2956f655d308b470a5cd580fcb66cd7e49968c3d7857b54567affbc91fd8610414ad48e23ac6eb3f078a42eecb2ed6765afc83c2d3e243b3ff34f8b5809e1dedb0d775ae03386265282d71babfc2d82db59d2ea7dbf9c9da92aec6cab010c04e6da52889f043bfb696b32d4adf1a7177685a2a80fde3765c896050f4abfae6fea1bf8ae7d8e1ea78cef244840e992d68232fdd7411c7dc5273fa8b9e7f8f97946781beb657decaed7b979f682ea7a00451e5894cc982dc1eb606277bdba99ffd0fc3356293aff094e234837aaf9fa301c6498c50bd7a525646ce97e48f22946a092e28d4306491653c06183fa76151614d10b8fb7b51dbcca7add5cae8d8abe8a32ebd9a01374bb520640353c89e0d8a23d52d21fbbc7b04f600583d4a896c950c9633854df40de1d2805f768279e280b4d14dadeb4a90c80fd0f1af795443875f7184331d307aa28dba3fed73126d1d27baceedcf376de52a30f3d74d09f9a0d5c08e9ef211afed3397ace994a39748325ae53bea62124348b15a001934886bdedcbabf89f6a81e8253c0c1bb47ac18e9c7b859f0fcb1d92406d5d0bc6d700981185b84148a7b9ee1a535fd9ed61f1d9847c925d5afe22c92535c4bc9a16aebf38c4b950f59b8e501ca36495328cb9eb622218bce9064a35e3eeb6a6e8f593c5e58b735cc9aef0a31d2586cc36d204c0cc7167e43132d270ee8416a3b2c3bf16d64f6b5b6d0f7b079df2267614dd6847fc2f3271b4409233c37f7f6a5894f1d19ddad6fa392b2ece2c5e578cbf7da4ea805b6885eb6985b6e3d004ad6ad7e772d6f3c61c65a7fb255e2b36d8bf583044c08ab97e7e5e6b8442dd0fbeb27b75fd2c9163de2f25926bdd72f8cda9e2ed8a97c3002675f0847c9d647e7fc50db3699f1ca41ce9a2ffa202c00c5d1d5180c55f62ba859b1bd6cc008d66b6f355cab16cd882579e5a49d630e562a5b8315a5f3fa6a819eb0e4853f2454115199b96a130cba02147c47c0deb43dcc9b9f08b5162bba8642b34980ac63ae173dc4842351fc1c8a551afbdb58cb2b295490782130daa4f359a6a80d72565865be8bcc0af888594903ea0112f6c8d923c5726c4081e8c856110cc7339cef0e2d097ec6582b8a0e035a7630ad3052bbb189f3abec9cb29822cd92d9ed86ab7029cabd6297c2a33d33024ab77167f9d7b2dafd5445ee24ca6e13a366426d46c7278fef0b7d6748faf50278bba7f6d78a85a9bce97f75700c9e434209491709d23c599fc95a194340402cec351ecc78b946ea27cff1da0ecc2b1f8b1a648b1dcc10f799cd0f6b65f95c4012445497e5ba3cb9f51964a9468940b27bde98b487218fb1c1fc72e9af6b866f430be2a67fa376392b4db2f4dbf32772671b6ae55c56dec04dff1e124986043d148e3e846e3bfd99bf0219f45f085d71e1a82fa68bd812f18182875834e05ecd90b68859308822daf8daaa942ff634dfe2e70b6f79adb3f27eb9eecac8ed271ae012aa70add7ddbcc43ff994ea233959c6c2763503dfc28d1cb7b3c8f669a4025d1f19f97f7cfbdfb73d5d6c359dd21ea56a1fadbbe5e4a66aff7d7da58b1a67e05b95828854fd966deb04f9fdc9536c935870e07f3969a400d31c0085997a680eb0da9bebf220e3ebc75ec4f59a2a1a670cf928c24efc16e3b35ac75b0ff3599b0e982f8c8305b880b4ee70401cdb96a26819bf72858df8fd59437478e36b879dfe4fe8c41958c06ad48b40a9e70e75f50de13c9c0e8119b36d0e31bf81f9e8d9f3548823ca461d1fdba5829a6606d5b9775070dad2910f53bfd69524858394863f9165037655e22ba6d41836e255696e92ae77940ae166f37c860345462aec82ceaa44ec08965958e196875171fd2df22605d3e1f2ea6fcf53d90ffd55627f8b66562f1620a4dc269b8aac562f1103b5d2e42f76a29732b5a2e808885eab5144bdce7d7614dcf318587f02831e7d7f2fce6cdbe2f7d9a4bf9d63bec19fd6a09666273ccf7cb6bb74bec2130f3b4b96bd2d05fe8c6efcec87632732cd2b8cd47ba3ab8d7e2d6d26064fc6a73838c5d3a22e3387d3d232b9e22c607367a846b814bcb44d78f257ec2b6e3aa82d7614a7030ae48f9acd7103cde6f5837dcb5ec5f9b93638c3a1f188da67c6228e728df2721df8eddfd105f55654e85b4466eb1001a70073cdf91477b0d0fb1108c63f342234e5f46e861cdaa726f11840f1f36e2a67da9b0ab0d2726494190a76f4bd5663ac13a5c885f74c8d1da28ef9d7d7c77a277337e87dc40e65b9156fc070d53529d065ae39f7807329481609df928cf63db0449c980b7ef3af57167b58750a60c338d655cb8865275d4d79af5dddeffbc7faf456a84724b98ac10408282083d13c111ee49ee108579d0158e89a4f2739f737f1aed06cee71ae30aed332ac677ff3f893d5f363eda2910c62c0f2d119c0851507f16d522f237af509b65ac0cee405a21e33c772f02f68bff84a8f2867e320af6dd3fd3327e6e92c2d42bbd0528068ee89366920ff6e13364f50f5ebfa9ad0bf735874eaf2f08d77407cd4c4ee633e1ccbc7171bbe156442e246ed2e0cd6da12d93b3d47c64409b719d77a65aee57c16faa7405870b875b8e17a12785dceef3093495585572a84a58fafe654c1844cd77381c6676d56e5a3a327b54af32eb978705c6eb2402380ca842376ff61f20cc1293d661126fb6b75750ba10755cff474549c3e75c875bbd07dbf17ab3f4f4dc3c749d85dc7307cba145b05cdfe3d0733be09542055e4e14c6720f84affa9234bd4f7852f37906a05cc43eacd6d983409e25d1995d96ad34030ab631f220bca1f90913c02a9fc83fca9db8bf9bbaa3d93c4128ac75b77b0fd2031efef297a891c77dd5bb18843db2a7bdedb12ebb8dc4f3c0c825ec8e8ea177b4afcc144ee1881995413358c89b68e7535d114badf41f18df2603d72631a67d72f53f677d3d623a2ad9aec6fad52a00cf3e81e4efacbafc72bfefe210d75733c1fc5da24762ce249a44ebf33f0c372249a7364f838491d554513bf7903b9e5e736d6e42d820a41bbb524f30c68447eb6a99e520640e3221ebe85728858a345029243431cef75604fe44434201d0eb78c24831ebc4bd2bdc5e4ab7bc6f49206e6fd4c4d57ffcae607d207c27bdd86ec9b2ae0932cefd88f312a220e290e358832a9be5811835c299a43f0c69c97727b9dc3e7c0869219b51bfb2f6ee7048c1a33fb78c3154df0df0732f2b8fbf39c64fcb7169b1b9d98a70d84fd3af3601e032cb04ec0d6472ce1e70f59d81d7b5f26017fb9ed3dd279bf83cf72c6766fb01eba3e6bd720d7372a8ba9276e853def652b779d9964b254622eddfe819ef43b85bd7e67d5df5a66256ca810f29ad66ed5e61ee12ff3caa27d05dc0fab58c9cf246f342333db06f8c9b5962690f5b8475184ea64419222a8b212ed35bb00523bdc70ffc262455922bd85541fc3a8f4eff28d11b74f00f90d5b42f7739f7aae7c1f55444192d766df06b35260ea7f25bc6bd99764511c0b689bf37a8ffdd3d8b52c57c8305c8161658d1380f1ddcb2cbb393e1ff65c5e2e608f6a16b9f434adb23eda234f732927a5ddb9623610f96e10ebaf8adf1d69ad6e12d7aca2da23f9cba4430a67a5a63d07c6c992ab2e2a3d0d6a123889e803224570c78ff19f082e80867cd9957af7fbfe01daba26a2a463212d81ddf3466460b927c1841ad8fab297abaec12720c6d983e4a3b50285fa3485645f427dbda137ea0e7539e88955a65262ab641a5561dfca135051659e964f4c8198dc1c0cb87648d27da6ed7f0f3a9f14c6db23de3a7964bafeefae0339c7c6c8dce76ce8c780ae7a85aad0dcb75172bcad9c7fa893171123a42bf5d837f5f5504e401dbad425b4627be3a026982af5ca12e7125c4fbbbb767e23383f6a07cc6dfc51b186d35f53877ae9da66dcc3f93ccfca256c84747c4b3617793e0c3ee0a6893bc077f3bd4026d6700e6e4d60f7704a94a41257a6d458af5fbfa64dfe4282f0f401c48cda1b4b3fe283fa9080c32acd9e6c4f25d78cb45fb7beb8fd022a2bfbeae21d7af7a5e5fe5b1b54b19f9c8943bb6d735a676b0b63aec580d2956300eb814bc3302996ed3a0713bc2abc78975fa75cef7db7013a27db92ab620585bd31425529279402ccb1806610d15241d3961593ac3e686cd59cc5822e1e9b664fba9b3f418a636fea18635ba7e583764d1e79e45cbda53d86d965cb19808fd03858106cef10890ab181de5a41a2b91b523595f3f605abb2690f415c2d3c4e67782d57e924188be3781657e67c53c84f7c7febb004d534826d4adb8dfc10cba6770e1fa30a37d55ea15468eb87361ef9b3a63311d733bc59365e599972376782082e5ff6198f72547e419ab91dbf0435d0ae875d1ec4435829bb1657fc2e640db54e3f234afe8f8424f8b6366664330359907b64bf9617c04baed92d2f604cb7adf20459ba25125bf4d8fd485a49381fbb2cafa1abfaaa0340e118b548fe64a74173504d6028005b52e9b577489aeb9d7428d94bcfc2557706a3e3f12b3fdc0a6e405d4b99dd112d26336f07b26e5f5cd7bff9476344c79d490268d4bea634c57885d13aa24c052222016ee6585bd74c02013e24ba3b3de5cee08f7e1aff5dbf03ecca547ad359a19dedc897776940c08db0b893558201f5a1efc7bebd2c9b33cadbc239276fad6a190fb85cd452fbb61fbae015744039a3d5f72b01432a352d5da7ec8694831d53ce56e15ab34e1eb61c8b0985e04126a18e5ec44f7d81e198118fed30dd556bd81ab01e7f30dd1a9cf153fbf58682dba2dc1c4db33fc36944bbd29fba3695b5478159947b536403dc85622961e4ab2661ecdee031725f7ad87451f31ca95a78fa3dbfffbcdfc7299e0b0ed587fd5f7c2d5030a4bf3c06318c49f988ff8129661d0ddace703c058fa7d687342d3ff9c668da4cd50b61b8e7e0cc4f6b20fb0c80cd7bd7c9737a53a3a6539500c33034686a31fa5dfa72bff45196a45c6161b0d8cfba0d36eba1e0c624971e22a529e3c627405f5d7403b232af77d8dc2d97d828d3c4aeb8cbd7932a5196cf9eb3a95d8bddd15fa6afb7b1d6a1188cb050e3bd6df71ba9cd9c9a2950a4a62346e125f34898e6d6d20feec6e01827f11242a932330e139652a8deb0d554a173f0f0fb0af031d26aaaa714b09319f6930077f0ec7223bf4c657cdf63e2bbd56856e85591f6c916158958a249560c9785f10cf748af605148b6666cb98cec5ba90edcd876f14b45dff8125bc070231fcff0ef2fafc1ef6d0927e955cfd4f04758d7ad80ab89da43382e55cc0202d61e5329d97d13e5dcce91d741f61b6ab4eb64388015d5f186e43f53136f76d3b4b4bd62b723da5d0a35a0c591e83e92fbb76195ee67023266e4e0f62988c429e075fe67413e25f88192b3acade9949e35dadcbd32cbba6246426f69bd96849954d72b5605350c483f995778704b511ab0ca4d631b4cbc27ed705aa2b81450db4a020c669a984665a6d6acfdf0b84bb482fd63eba7ac5f799d39715977b7218e421db41c54b99f3472819b31a20786a3e8a07d7b1d7f324985b6b4b0757380642f49a96acad34f6fb0f0a51bdde434ae2390a08f17152c2de0afaae01ed1853fcbd59b38b26085625c14126f00a3a36681955225bb20aff221a30d3b700bc1c76d844147012c4a3a1a32ce1f085cc6dc9b3c2a0c5352d6bc4bc86a33f932c51870cba40ca8f31051bf0920960252dd3187fff1efbfd47aefb64da2a838b85f952df070e3f31f874eda75b85608679c414e6bb242cc430f1d91d7795ddbeb1c28897c65f705a8c04c5f6cad9a63abbce4d37b1f2db3e45400f8461b241ea2ab2e1cf297912d1adf09b9d5a6d62dc38838f167a83fd2a8752577af3499eec756de532178403dd4deea5d0929a51e498724698637b609f24fb17c5ffe22ae08eabe14164ea7c68c4da843a59a9643bad1e001fad97ef2a8d1fb4f20d15d0bc83336987e4bdc57c12fb49ec77c3e5823bcf0cc77d83c29cc0e25a23feab8ceb7867e9dfc7ec8204d10ff39a09afdd87dcb9be1983ce66cac2f1e1f5e4532f50f376db3ccb0e66bb90cc5f358e81bafb3128bffc070bd5828867dbf109cd11657671bb54b2feebd0851f106a3ee91d0064349904b59d1488c98854c5abad24081550f465a75edc43476e9964a2aefb233fcec206581281cc74ce3f7dd88513ffa33d68478548cb6c1a8bf9e60902f06169b9ff6dd86801ae9fd79863dfd48aa26fd35387240c99a8fb2f3e2c038a579cc68193bf5af77fadecfebbb76611ac1ca18e3efe9cf39ec9b78ca3ffb6ccdc5f99217fe6731e3600839ba88c44a0361ad5a02c485901066d71d60d9cb9f44b57806a604149ce1018bd562853a0c0ed4c48a8042de5246b3628b0f6b7bb914206d0ff9208e0683e342e5d391871daf69f608e621b250dc542e0b0f81316b3d4090ac92c74a88070af47c742fca924a35da26f21f798cf015affac3a3b8bee94694f2286ff7b5108a7866b601e542dfba07e649eef607b81e3a34a869c70cc636e3f8de1ed4ee7435e25de5c18a0193065df0a423b87ad562005f6d0d6c6afed1f43b4deb55c5cc52895f44e9e5686d9dd456ae0399f66b92a09e6c295df108941ddb07384a1fb4eb5c089269058a48dc223de335e8085fa445c4e7b8d4aba82aa6a613dccbe7565745b9d740dff8a3faa145d6bbdf51bf3ead3dff9178ec64ac67a72d39157331834162d7558d6639bfe3d20b4300e63f0a9a7c9c81bef5390e3fba0356a4eddf5898671734973e052760481e165a95d11745a2516a150e5544da87bd6027bd01319fbfaaa358d7061020828878bba3df7c795b08d3d3a14cb88fa1ca6429a953ca61a90a466118c5db40f6c4d7ff1238cffe4c1ded018b2ebb3a1262297e579436948d938597f669279d1191335d322934a2ba803585d961c1f9c1e890c7349143e00ea169dd5ee18b8c71787c3f1a9391231b4417bcb6047522d5129163278965fe15208e78cbadd2e263fe2ac6658dbb80912245a4ec0678af7c726dc112b688a0026077dad9913d364340c1324dba67a0db71893038bffbef87b5310a86a4e6783d8370d4843bf5845812de96579258da677698120bf5d0f8d297d94c9d3d99b6881d347b67dd47984b63e0ea8754ca82960490949929635b07c9345ff54a80f8af3acf979f84af5e2f31323b67b3738d8688e767e34fa6a600f59db2a9b34d1dedb2e782715ce236388299248daac4d8a39c5c4de5347d314b27bd40fa1a798078b709a9e75c21fa366fedd898754d128b0e1d926a726f3ee23fa8176e75b0e6e46eb8f9e190c4d1098828b1c843524e0e221b8b1c3efc4eac8be32ac6e4219f4bf064149073d36c80688984e15cf91d58cdcd61fbeeab1a7e9ef16016c6e2a483842e46d539002a53815a76de0453ae266e005de99edba00686e9a0ca183b70f5e70028e064c22873708287f7ae95899ba783721d53118f57b7afc5df7979e9d66a3fa47af7e1e263b8045d8d08e94d9d85b2e4c04be4bad4d8a5b4fdb65ae4d43cfcaccf1d5e11f9bdef5e4cd059699af43eefd823eec3c24693f4968cc7d8554d913496beb922ed0c5fbfb1d5b8f43a5ea7a7f4384b006d663574c3c27b4e149d95f7dfdc20f9872dcce80b46e7d9ff0753f816c258d4f1f83e1cd95236285298d083f82dc24031a729e791a7720db6199780fb758f727e23c405978ecf00300dccf7176439d295bedbba3c529b5f27aaa5af7f86972723980de98091abc354a5060b14389fca701acd4ab8c6db221ba6a825800666436c3b240dbe0fbb67e3f69f270e337adfc34635b2a41444adda95497380f738735347b0914e96e54a4e72c34be7bbadd773122c540ad884f0cbf1936a27e821d362f599fe01f4fcddb4db5bf224eeff8914e1a7217cf62baaed878371bff06a974760713927984bede2978090293f80349b8ef592d6e9610cc06edf664217e2e4d6baac5cf336ed7a5f86d904a24da7a4ed430221ff221fd23afeee7987e140d297b2510c686755d99fd379ed456d077b4892e2302a19481dfdf815a558713a2c8475a56e14594030cc509496becdd9e6251aef89b84287d783f096310ff960e378e731ba1891601f44dd160a09d6692a1c0f7c5851243e4955805eefefedb7ba576986365ccb40ab048b5c0c6da1efe30bd37c1314ef963f34ffea3d118c60f8fd354897205a7e49f27fec8c9c762898f346e632fa8012ef7fb671325195c25da0dea8a216c6bf38f50c8843e10d56132d462d663fe72e5df94c817ea963e9eca2076851c187446acd8c3b1525836232f6ed322484ed60f9652b6b01191746438deac860450fe8a4ee9950b8d5b354a39deed1f6b08afd1e75af748706859874b06bd887c82a4e25b3b256acdba612851ad7f53c9f7d3df5d3ba7b25772ef2307bcc57908c047d6e98562028641177f6c69bc1d73cd16b326764db39780cb4ca65e041d4534fc499b1458af5195e21650d5a5558d6323669dd162b6c00743267a9c6ae61b77a1272c2282af587835242cb4a4eeb5e703ed24319cb48d16827cafb413f48ede5c687e850dbf22d13cd24e209e7f78f44f4c60dbe941b1018adeea29d038a47ab9f381db7d46b5ebc2827de531b1b127179f475b47f57765087c258bbe6d37050ea434e63aec75179e9e5909306448e5a6ea47ead87955e6af039574a36c3723e0fb1a528212f1009532d787a69626929aaa5af9303ace9dd692678ce46132df557685fb321d0ab07a657aefdbd802760b8858b6fe893d7dec69f04536078f7deab8e853fd46fca6531d55f74f8fc881b65361fca583134281b8edb4e5f3433de54debd93f41ba5ca897e3cb143e1b7e4d2f6f9a18564109efe6376378147fec8d6ccb4f6dc03b49ab750dabfd685c24578cf8b3f660f3da5658291bbd7a0eb34878eb17ca0d14a931e046a673619d25e624faf71388845b16af433777ad5c134f13a2a907bfb57d6b86270afcb5a977e3c0f3bf1e38a2756213518199a65f6248db3aec33f54f18a11e65e4706c94d72080d3bbc0bbbd07fc5d64cf7f09c5769878d00cba6b5407a683d90b4611900580e76fb046388b319df54e83da294c239e1945891818b526381bd041d8c81ef7f0bafd45d5b3b3ad9de3dacf15420ae9832165bd9260a28c52000cca8ca5c7174c7d8a26740a3ab834038eda0c88085fa173dd619146f7df7dc92ba4dac6c0d668008180709b2c96250d792fcbdd457a490b61892a715185da2b0c6fc5ed4bc0047719feb9ae67bcd4dcc2a32d174c348f92c796727c110d0f7c007da586401268db9521dfb6ad2aa11a0e5ea0589a5bbb66cb9a4a7c2f80eb4d9d957dcce9aaead04603744c8e2c575201f1335bb6d3d854c5b76a5c831c0d6c1fe323667d3c599a6104229c789baf7148c29b883d6ac714261df2355610616a436154141a4f9292241bc3987b7d304e46375c4c6b926363a815c50d335e24b0034478c5ecfd399b0a1168ac074166f368a3ce5ddf5a34ba93521a9e86c196e555a84528ec15194ecaaacbad7aeded4554197567a85d645975b256570a42fe635f313abb7cc119623084b55f56bd23dc6db91ca844ecb3196e6f9f630b1f7551b30e36454c244448fb3742243e84115db78cd516bb99f9225f5aaac6b1f4d4229f736b69ee8eba170a32dc41e70492bf3528b53c35ae0d18ab78745cef17fa2807f5d4dec8b74bc90f1c2449540f528ff74ee74b50a37f638539588feab091c7b4fb4b1410180a416c3cc86e2606c69e5190b59fd44465ccff5569cca5e23548f2f9eb094f5d6c980d48bc4967f3d61c8b1063abec43df2c1ae01f1ca8f89b67913b24eb78411b15c42f6a89f78af0d152f8979b8fc2d5fb47dc37f2c3da3b27acb4ad74fc6e440d17de13e2a1eb05cb5b12c3d80187f2744e43ad29ec79a5398a34623f8dd938911660dfc84227ccb7a27e09bc7aa6ae222688fe9f6be0565dece3920aba14b16373cff0330222b0b2a0a1fd746fa36ca301156f94bc05c51669ec7ca2c21832c163acac347efe602082597507d87691cc6657c65a519be47d4b0b4a7479ba315ac18a4ecf234f74b84afbacc7c3d39a11dc00159c54c107bd0fbb5c2d2fe6f4146bc87270f2c664946062b3cdb9937b41a20a4c6c6f485612a846d84e3fc9cffdb3f13fe3c7d1ca45ecd1722e2b273d4beeac896ea967a5fb28c3989d147fdc1f4a86cf9c0ac3642cae350083ead35dc788b0044a1025c98da199c286534f5d8cfe770460a1743f41448065f420862926de39fdb7f3ecb527d1cdd71ca43375ca4ab61dc0912ac93ff2b77d8121f19a9e8106c4f76f085de8aa255f9dd6cf55267443c05b3ce954a2f874a553f911e1ba44cabd4ac94def5600eb8d028d4bd55b8b8f65e86a5738f5f122862e7122fbf53cff48d26b9ec8342757a9b5d13fc6bcee9f83ca0e145940c10dd44805fad95f75d173d2586a1793d28ea93b4c977c6d9cdb08f4b35daa0c5f2f3aedd3a822f8627487ca708eec9e5156cfaaba6e479013d2cb9da160c7a733b7f7981be1fae8c2373d7e10457a4c739930b360a2dbc33d87c92dd0cfe19d8ebe7c62190cdd0f13e0ab91639099ffd31037265d3ca1575473f1f9c66f360c37429bdf08a4ac0ded21a23da5f24aea78e33c81d3c556c8268881e1d37ae744f0c8f4be9c16ed0fce54b8f7b6baff63eea8bfaef0c6053514c230b3e401651db2371818db2f575260654882ffafe901fcfca4707d6d1874129979cbf9391fa83b9bc41befdb8f28c3d16cc9ede8003155b51398a4735631d144cd185241262f7a322e37dd5eaf9d9e541f75698c785227064d069a768cac4ced2c9489d1cfcae4b2758d4f379bfa771740e0c7b0eca1f7eff98edc30bfab8d7c69e292e3ab7b13f6ae78149762a29834868387f8ca9439383059f18974296b10200c8ae00ffb27738f297cab6afd8b9078f5de730ec319fb5dbef80221fa11a038bfc24c17a589dacc924931cac787327fe3270ea95262c3ab8ceeeacbbc1b6a69d7b851937460917232a37735e1cdaf4f87d9289a2e77580cb679dec7792a227e78bbfb945e38e116554a038b3ced668c45e8f50294a4c0e9320baeac0695048721d55b38f63c825e90970921d6ffd25ad50ac06682578fe38ecf41045c268a86d4707b63b8bf036de95062e9992f9bbd4a1d6076bf32c2bf00777d29d2c59bb6278dd066b0167e06b12744ca1aa73b6d3407df3e3d0a8cfffe86229e09c6c21676b4e927afde07d89d8a136271cd62723d3365333a87dbd556456807b8c33039daa2e99dec6b3e3ab7c3f30ab338ed1b3fdeeab24b00e09d81c8a166827d92ecc1d2f3901907d32df5189a0d9ca8a068eba3081739b7096cf48f84ac6f58f0c2b775fe2c32aa3a003eac085c9b1dad024dce21ddf34583568a1b91a9de745c5962f7253b7b14aaf92065cdcca04372a57c5d462d8d66e4231e256950bef5f24ce11302072070ad11b4702e3a74d996cb8b96fe9bf424e4db7ac844194f200880fb0fc7b50cccb23e846baac2d1f074ed085f921ce2c4ac226f6a40fa026b37b1a2d8bb81ae786d7a73d1224d233291f00935f1045df329ba7946644720a07dcebcc431c9a682035c4ad5c0c0bda2fcfeff667146166d28d66e95c6ea54ea20a83ddba5dd026ca21d4e8a252b0c9dd2c0835ce0687b1bbcdcb9827650630f5da129074f7f275ca1e88c47755dcd05f2524a0da02e0ce4300b609d790234b55787bb7e4bd81d06d6c8b521bd236a2feb843c7a9a0d06d1c3ea5dfa0dbd5d04884a4acb2d71382fa7b62be355762bdcb820cbbd84695cfd108ffbadf06d355c7149bfd27dd7ca21f7f45cd28914b657a68177cd29dfde35d023357f895db8423b5d1deddf19cd5d5edccaba29a3fa04c6f1787a6f526501841e4eedc40609c5e58d173aa229b8192a97cd8e6b8758d3570771e9eaacc854e04612a9775e0f24cc55c03ca1393131c656460912b32a53b9be9f57aadf1b0ea3c2c68b99bb53f3c46745df6b3a51cf2cd564d675ea08976530928dbaa651db47136049482daf7fb49fcc39e469a7bbaaf350e6b13fd84e1bcc9624e603b26264bc69481d12b1f62822993b0399826ea962e5f25626d2007fcc45d67a0ee233715d5e0bbc7c797248eb946fb7b9931d06b17e1e5f03c00d2aa72cb3324996b501fde28802a5fa53b5fd5ab1c3334837cab272600954ed9a37c7b849411d5097c59d5e8e590901dc8eaf8bdcbb1215673a1f5f13689904a699bc530ffeb9c758b3ecdea39b824c876e2292b936df1ed37ef076fbfa8c16abeb3366815e87d2ffb2db6c2480f9f4f0bf60cc400c3107ecf45ba966f25664005d39c2186151f7b29ec289b653408277339f5440d4994a6eb1b803c7fb069cae6dec1e3bf9163c2fa18b890dba5386b5b8d4f981f91232a89351f9ca9ad9a00064c31131750bf262cb9a99ef5a164d075640f95c55db4ff8ee2e58971d4407832b64484e238e9e315bc98b870d25536e46f6c2016553300ed66e7b86a5f376c8366afe37552f4d7b48f11f0bed92e7f7464fe73708a82bd166a58bdf20530ceb3da90d4154cbd02e07d6150b271a86fd4567617eae270b605e8646900ed70814c021ebda46c13faf416ed9c2821054c6d8b21f7d6233463abe1bb805d4871b41f3cbbb2eb975f2a801abdb88dd2085f7a2ca8b2f58f451479357b415a4fe34398620a30081c458234aef736277e63110e626e8d1d44ead9010d3f54fe3b2c07287b6143314e0797928b943c153c7b5a50a60a96e8e6bfd2bc9eadd87055fd2332a7480270ec7460a7612b8765c81c9181406ac0bd159eae398d3149108d8a3f918c7a23cbb5c2d8fb4711d864802271ab98bf847cfa5d9368298ca4ed8d88f4fd5aeef31ff5fc11083750329f222f85294399cf49580d0f8f6ed27bcf544202c5cd289a90e597ac00d6f4b6178b01023786f43f852ae5479d09b76508725439e7e502ca4b5523d96f5ffdc1669e2166f0dbaf56fd8b8adc6c8a6499c89a6fb794ac8a6b44b11993e3390112f63cb81bcc5ca9cd6d70828d6e3df0eb026a7d4b5cc09c4351efb8db50a31a15fc8ef55293ccee9d551300ea625b9e13a845624af71a2e361be1fa3ff71cbdda904ccd187258c2690b3386b65a22fa3b526cd0dbd4ae9440384d4e7f222cda11a89d5be7f90ae8ff314ca1329e9b36a261eb1625e4071a96caa0ca7e3b8f58bd31f5d6071346fc7f6822bcafb31b02207878ae6a15412c59163130d4a6a8e0247c1bb7b5062b5c0bc59353be1fe2c504a3bfeb7b0c038a09045077a5b4c478d0cac67fe043cba334b599acca31912d8b53e3535f06f0cb8142827f59367a3cf5c70556bf538802d7e414d61846b0f97eabe251ae2cefab24f6420854c9cf52dfb92c245f9f735f1885b2909c53d3ecd73aed3aedd43367f9aeb320959cb090d6019b3eb683ef2cb40e18e4e316b8f099a8274666f5cb4203be733930214d239d4c043c31f7adf42c7253ba34c052e2481c8d9a903955819d9a9b5d544c9baaf8343a93b110b9b3c99f7daaa6c3479898346340ea83ed04d9e5cd707f92dfa17f32fbeb5653b9a6e25f06c4347c076690906a33d8f69093fa54bc723eb62f6e3ebaa757bf86f1b912d4d643709a26f3d7dc36a0067b00878ff63a6fedcb1fc391a2e9e3a7710939c6a4ea404d8a6dc6c761104a216ae60a607a93c7546c68801fb65a1859755efbca53314d8184e5a6db60edc48bb149c1d853b55a789f49cbde06abd36f20ba3badb12a218187e34c846b54053e58b878df4795cfb901d9c5515e7ab3b9d42d3c52ca81c6a938bafb6c8f5210b1ea2d275f07e7d5f2b09ebaa58f62a77bf9cdaccbcd2572c89543f270b9b526caecee5833d775cc19a25cedb4ea0ae886b84c0c0be9e4448666bc61703773df2cf8e492c2990c38ce3f5a592153d02a8de9672b694cb2dac159509ceeee4e66548c7a4e94cec83f440474cba94529138e5a0baff3424feeb4f7329a7bfc8dfe5958625b95a2ad25cbf6ad7944ec00f349ca4bd6e8ca2d35b34d09fb2a0b1da86b53a1d6f2d01fe4145a75e1deecc05feb9802e4116dc86fa90a1d9d90f91d0fa90e31f89343cef287d1f75f976f786b50cab835590be717df30a858ef123f7af71ba1ecc14edba84df6fb5ee420da447aff8caa3d72042f7691e201e738db647078d1ddd866ee3bb9951fe3300468735db02e4dacdc90fc8429d412cb5917aa5747bf654bfbdaf6fd4771bce7dae62c1ffbae04d4580cc6bef5d5ae30ebb15c436f471548817435e98a345d60000d0c3a709222712c00a095eada1ac91f5fc2db83592e754a9211c2ce86c4edce40b5ef1dc08738cfc9951bd54fd32b22bde2fcb56324230cec2bb84f1997152e93a568b971507bdf18bd56ff94ebd207ef5c2e4f81d34d4573e778ae6334081e9da80d7935003ee4ddc82fda34717b1e6a010e6bf870d7d9cf592ed30f1be5c966d58bbe60f6a387ab8bbc8f684300fa4b3766c141c145a3c14eefd017d3ac2985a3fe18f5e74dc34d32be0c539e5b2dbd58c67f3ae84e9cbf44f244a085ca0b70c1f36e220cbd0516f58c1391c9a34b8295b9873aa9395854253dc69dabc70cc57e3a89f25402b57f954b7bd0140085d910e9a40fbd5c9c90ccebf2cc88f37b4bfcdc0681492ff08c35e208e1a1bc08f67c8f5e47ff097e505685ffbf882a61642226c7c1a85772708e6a54e9a704784a7ebec407ecb182574cb22cfe7574953b24c32550ebafa1af67f96fd120039964204b0c5935bf7b1e7182269b6a85697c4552c8757d5ba3c23c1ca13a3a37a94ddb027e05ca3e8bd20e8beedf55d187d1bc8aac14604a57de79707be23ba09d6baa68d3673a9bf8a9f6a0e2fddbf0f19290d000258cfe0d8ce127581cb63d1af3691c498ebfb86a52c9962bfd9a24929a09e96425461906adac31b39f926bdcbb07bb4f39d60096e77efab694ab87b19c80818252afe5d7ace2c9f48d8251e9170bfdde1c2c2fdb663ed205d6a60deab4de5bd917bfb0262b869f7c87ade7ceafd428e0d3ae6348805222b13b57072d77528663b34b7c4b174784d38c34263f2283401945741caff938d953168c45fe4b49fe3506c4f4f350df7f409cb078119975a7f13b1d1389b891fe2c73ab1ef7733d67eae41c0f65d6dfa0c3a2e9614253869f1add003c71fa3594aadccbaea6828fca3f7a4f15cc5c1b341c162371768866f904a7a4e92167c73e0192f2966469f7d37ee8440333a11da88124c433a1a53a324be2b626ba065d57975912d6169f4e33ed70ddb8109ae8ab43d21b4ab7c5a6f0ad5f45a5f2e9ccaff8a457432c6066878e34b76dbfb5dc8309810ede861106262c78e1f56e17a673ffd7cccc3a90c622f16b23d673e7303f4c3306ebac48014ff1368ff837fb16445d81d98a2efa064b9188883665d8325972d104263324a964473e96443f4e10de95a5875dd82fa30b40b556aab6837dc70ce6dc1980990259243486abfe0108edf4a918582eb1990f33fbef7d5df45e55c7164871d78c427f90d7182ba4ab9e9f632c98968f0fc16ffdf741d251aac2d6e33145d012c2d680bdbc85f5ac2c4f35d2cac66a3beab35ed38d5b5903ce8505538917c77e6db09d90b9c2b0fd2790d01fd4ccf517ff7253221be1aae5eccfaf250ff828af52c5db247fb4f1a094842caf5bc8ed934352d87c87b6c93af5b8e7aa08f54cb9fde5bdcd23b7c08588569ec07d0beb8e68b439327258ad73721ea0aa5a0b001f3cd90f19258636e4a47b366ce56b19f65af2fb7de881b386eb9a67a6e42379883adc5f9cc7dd361a11131e5c63b854232f93b66dbda1656c4a4674ad9d636aebd4d6a359639296dae911be13600f269fde20d09723c2df183d3eac192af42e44ed26dfd4bc9992dbad8681c60d5c81f83d42951889eeecb5b7160b81731d1ce85c8ec38fec385c01589fc994762bba589d2c5ce0e42d9180eaa3424bac2d9e0d22424b7b4bf030a4024564dce0bf975ee922f8a331c193ad8e4054c8192c0959d9c7af822fbbd18da96baa2d0f1fc2ccb8f6421ac365184d72128131daa6c67797d0781b03ab67b714f8c2beaca96881ddb764214997c7c5e0ecdf1df27c452695156d96218888e32ddf20fbe321bdcb21784b8de1d26b05e2d8bc43881e378b9724256e3250f2817c16678213ae7dbf770e4b0170ff7ffef7b187e2537c4a9c28ec898cdf4d21252d318cad3d58994ec64f3b4366f84b13dfbf172030cd2e79f7be3ea9f8b84b4ac645c5c8215076849e9e62a75f6cf7fbf6321be36044a2673f6bf62c4c35b3c6030100f9cb04562f4765d77d050f9a2964fa650b4bdba6bcea98b33f5599b0c6ed4a89383e507c2350f5acd61d115d8efe8b04ef47e9d94fe7687d70a4fd107da26c15fac8801cece0624a2105fc37934b12e5aa9231312a6ae642c42b1873f124fc894e209669021ab180d202d7a168c613e48171a8404a69716be8920fb0b1e9535d2cb81493c729193e05c474dffee4a827a5996a98a0005f97821a14b9f2b26afbc8b34a96f7257a984b6aec6a8e2ef58f8fc21d15acaf07fb7c2a067ef3104dcaf8f9487de0f610a1cdcd25ef07ba980f1071706566a32f844378ffbd7f5fdf900d042e910eeabffc2cea8b40d1f30466d2756f89579cb432ed36f784e477ecf8554231a39ea753bb670ec5e1b245eb051d5482ad8c38b7aeef89eeefed79312cff037135dd148e70a559821329b74b28ca5dff54a773ddcf6f6b6db05c650d00f1a6f590c3b1f50d3626c66e3bdacd670479a1ebcd1253fbcd18b0880b5d8a28ad21f9df5a8776c2d8b065a7bfb2d62d1c1c67952f90837b76bb2e19063478cce4167b2b117a741f1bfefa164b7d5b619c55f5bd11a2cc8b92011f3b6b917cf2addb708536695efe02496943908215c7b96d72c8cacdaf996715da468f61197dedc8052568fb0cab97a5e71de6d63d322b7c5367a2b9cb0b3965aeedf98ea2798f5260b26b2fe7d227e7f3416486d30e9cde50bf24f7ab6fc8f17295eb186b5d97da4c1f3d2c8cfcae2ca31a62d98530550aa98f5cc01af4f480e08db73812797404403714ad162e92a9fda55c8e0e64e3f4cd48ebf190ca2b76429763f2df60b48e22ded88196d719be3833eb929ae7a24161487a234e81b0870166dad9e4effff178cca092804dd11f6cba0cb0473d0835262d3a71cfffd372e51e80584e0106b32410d405d005944b4743a3397fbe856e465c0c6350520299dc398a39ce45688028f8f749a4f9d23ce9d1cf105daae145c9f538bba7db4138c2517c91aaafbf98d5a652b203b2cdaf9b5ba367d493b0378317d11191c9ce9012b65f9dbb814ec872bf5b2a138626264ef2a68205bb76c838f659c7a8390743069bba45b84b4822b725c021a6637d6a20cfc58d7297e57508805461075d66785fa1cbaf21a1233b3deba51e8d1a420b7bf27e8d11ad13c912517fbe6fbb01c805913d7954dd718ef5b627b2f7574b7c0ed55e2f904fb9512ec0ecb236890cdc862d2e9d46472d268df84c72e53925fcc58ebb4323724f28633f5f1117291f4c2c3e1a559027addc655ab093bdfb809a8e912e03154895f543af63e56238624807dba09fa6ecc5ceeef44e12f05632ec60195739bbf3010eba1c3732cbd6e97a0245cebc9776d0e73df78709ee5a14da9cbbefc810cf01146d4750d704b10c5eabf4e45d2baa0dafac524f17940e9dd55adc532533d60f6acc26ed94d6d6b5c31df564913e6ea46b28a4dd5c366e8caae2bd86ca8552e11d0d458f63d5249f1a9cabd28dca66295742820e871b8af6425a7ce3ed9dcb3e7369ed9b0f027c3d4333547f54c97366eedf652ffbdebe679e4879a5c4b81e26a489269aac3fdd9f236687b8a0b1ed91f668f63f4a57b9552498af76b9afaa679ef7cb059ad85c50a26ba30b348f6a7bf3ecb5d7dabf1effa804788b983f7593257706c14e9781730b096a7518517fea65a79c2f840839290c91cdd31c2eb4303f5b1425223441196be540827c9f6abf5fec5a16fa45f5a279da96c07edb8285585f7e8e3d86e55ebe4e1a0772b7ce1c6bfa10031cded0cd141d7243e8bfedbbeaf88de3bd0dc9c4636566f3c2ccea97ff6d7074a900cf14697b5e1717577f773aa701f1c5ac8df03c4582c836fa01d01bf910cda238446c389539e89f7b0b8fd33037fc36d2e4a23ac3d4f910f6a651f233b1e43091b824487d10d169c77a6ed84bd68c5a22429f20b4d39b96e787adf66f1b9f510f49a8183f122cd74c153d1c51966d7ff83d2a658246c2db1facbfa310014d343d48d764806625c26e9829ad584c9ab16e1f2c8a017c98da1dae624ea719b1dcca046096e1c0519855fefb48256252b9099a08ac9a1a8ebbccf75fc94317494d548e08a6e31e05bc70adba39d1d3ffc6ab41fce328df1a759255ef78833f10358e197670fc55416c686fb494a6c5744bb5f79160b639f27495ab8cabfd8f4f9d1228bef40723b23436e6303e4252dc79f22828c44786cd92adcac08740610fb108e1040793f95bf6d092859571e088a757104fcec7d091f59a1c64a029558a90bb43345c9baf69150a8647f0ab70127bb6d8e25ae4a84de404e0494f7b0b27ea94b33f6fb55d07ced55e1a035019a963ac239a70574ec2bd900c1ac9f54a4938d20abe7254c93fbca7b6515bc95f49841535d344cccfc4059496fc87ae4732bf9f67d1e0cd83e9f8cddbff3b18861230fb2b8b08fbfc5fb9d7aec9fad29f2b35644922c42e88aba9ca9f69b6611e4ac34428e99e244799828f4dec668590aa53505df6ad0740770d28e5d7cd1ddac2d03cd673fc011ff6a4d6f9705f1259f9f0ce45052d090f53ef8c69671a1038e5062b2ed01fa9033e03a39e35f96bf9d794343f5bc92fbfd9a37f22a9acaeeefab6ea71427888623d86a6d430554d9ae946b0c9625490915bcd831c488d568b2c43dc380b63114947ecb6559de942aeebccfb5676a8982cecf6f5337edc69a06b44163c30f59d9d94f69d308ddb04c10e5b1c5cd05409d6861e713b857ea1e51dc1338a56a9b53e5d2b8218ad757b7f615dd51ccfaea448586d579093d71f93e2729a0fdedea616dab0105c8d2274863ae03cfa12469df964b4e48168824684994d20d7cd14ad11c2bb203ace6db7966c83ea0ddf53690e32960503ee9fc069a7d586d0969fe84386175d10c753aa9e51e0b367aa928a1a9d37e6a660c14c9fa58157d7917d2a24a201a8a969fa0a6bf8f2942abf751864927a69bcd82aa31d9aeb72f0808cdf7fdaa075c2fe2e1363dcda549835cadc9e9da4160279427ae90e162893b185d97c864241a9ea3b1686a753503bdb8c6b8e49384777c852882590b4b61b569f7e9e9cb170e54cc109c428226313f563b641956417bcfb7179e375c9b35a562220c2add7e7b3c051b19a10bfd650325986109dcbdfe38af67dbc49b47e9f1b4ac01a70e43b2238705600ab6a8e8c1ee3e07fef16ee10279159e501d3edaf10010782f7cf7f0cf7a56f81a4db51ec7ab52651a4700a67477d0efe85760c8d5edb0184a856433598ddfdd25d3de1e63ce73e4c9bc0b2407a33844b4a001a6e5841dbb6fc8d84ff001a59416abc287fb8d72866ef1c3a37185dea1a3e523544b10018dd5095cf7238b9faef75933c05d9e1c82b94b17f99f493f21e2b86cc0b484e5d19f2450ccdd0e1713e2e250b928bbdf21ff7f39fb03a8402c0ed6fb7bf9ad44da9b6f59a42c493cb65ddb9ff3cf65d3938a744e6fe63ad18b9a8f264af721319f39acbed2b98d40cd27419bff222895ee492c5f54ef101a65d8610748efb0bf4aef444ae910dd17a90a5f2defaea83462edba75c0c55493df03f5a6d7a54d2c34658f98df72f0576555132d37a051620f25c8e9751108b163980c58bdcf5feab85f15a91a054888d94be4deca3a868b213b3ce3a9a90671aa5eca5a2bcf328b0ad2046e297798b65401c07039bb7e948da9a73a40d7afc623a36b551624c26200d59415462e5e8be46790ac3926608d0e0c27188f66766e99e3515f902ffc9e98595d0fa07a0f699cbeb9e58432cc268811f00b9e416c89591e22f6c4c977ff4f800de40cffa29c42bb1b3de2baa1d387a6eabb61041ec7ae21b85e2695183d91e3fce8ba164b698b4bf83091700efe7201bbcd0a4d8ff28f0dd6e111c73f85309fd3c41ece5d328d10663cff1d8f1bc7e1ceab89dad930c20cacd57d258279523f32b97ae22eb45c32749a91f84e724d0e3433a454b1b913077af411d21d05b31e1f8cb3d8cfb5dd7af599dff855a0b95c4bb5ba1a96251f2912110278b378e666ff7dc25c259439d4c5d4dff3adbd4f6cd40c730e5bfd2c6b93df79cacb508785fd62a235432bc5eb57f74d1f0049d0f206aa690e44310a8d59dc40d2de790ce9a4b66672aed56e3024456adc517723a816fd2d5d87e988421919e93204f74eea28908454e2ca7b196af6bc3569057db0db0fc4e6dfec38caf3238b53f21c0d344d2f7a68ce81f15595190b653afa98e03b8332562c287c765150a7868d355cb89bfe8a1b9368c920d98803d56c66b51f81129f30dd26d0bff68bca8d96820f1ada9bd682bb44cc21429069ed4d8870f11f23fe5cc5bd6740b1012b72294d79d5a92bc6a577d0697a55b070cf53cf1986b5ad2ed369763e1a61f34b28218bd59218d7dcc3d5a3a4beb56e981d443cca93cccda59f5d5ed467bbe9aae31ef8dec4e3f87e52c72250685ce501053fb85c00e8d62ea7505a75ac08e4dd1fd0b558a77492078029e9015e1befcd12f6bdcd8e01dcfc8a62d11f08622c6a164bc1a8a1022b32824638d8b3519dde13b5729ebbae5a6d1357496b8053b7b87d84e26c88027c9b16d37ea913b84cf21d60492828e6318799006c87a44f113a02e8b6ba464deb3d933ea1e7ec2bacce828557ed7a186e908d087dac8b5c5c07a31da200867c85638e6e247b396f366cc57a55acbb5d7b386e3fa8c6694312d9b56a8a2a4b7e6817dd3047f720b6f4bf3f2fb50b60ecc33341f53674d70178d739213043310bce5ea7932c92c79eaf2cd3d0233dac720b6ed4e1a25dbbd4ece3e05f2e249f0966a240637cb771e7a889b83e2a286b0fb9ecdd4abc7bbacc7b4a8e65ab4ca63510b2d1332b51be7ff1e40ee5c1eecab7e6f422a80977bf2471c11d36dc3bf0abc6e10d1f4e38fd4b1094c4f003fb78bb6158a2282a1fde36724aa48d909e0e8b9707056306de636bd82b79ad7b35db9d4022456844b710962df29c3e661a0f27ad0168d0468b0df5b4f0302714c152bcb16fe5ef1ae20a3f0ef46a7d5546f95491581e35527361095090550295398033e773076accc14510ae1bfc34c5920813a5182b07ff05d1b702fe38d915913e9df6049bc2c41ff4b09391f7de881218edd9406cb03c573a58126d072c4382c8c621feeecc0122c051f6cc4ddb6bda52a98dd91fee4baa9f014a4b8ecd6b2589d27bcbcc9cca9869d4f2131cdbe51cda1aac0e2913a541ca860386152833116d28817284b51737632d7fd3d22d7c36815efb46f06dd5b064a1070c90dc6867819c375df09e30c0c725ddf579fb91ae7bd225d5b1a1d3e2ccf4337da62ce4032589ed072b40b76bf28f3b249bf864c1e5d9407db86decb09c84f829e44308613f86176a8b1b40dc644af3d81662a188468d6ca2b34c217a791360e1a74cc096fe0e546859f719b9e6e5be2c904c94775f81c631cd2fc2c163f6307ec9e4ae5f60a0ec41a227e34f133297f0a4bd00a6c71e3bf6a9f06aab6f8dccdbcd4746c48d1cc067b0cf67163cd85f6a069430cf8597d231afc3ee5c33ace28ba8bdecf3cee9f6d5b3546e1f7ea173b3cdf92056324358539fbb5a923fc628dadd09f9c8e3397073c109ebc1b3a5200fd158a3507e43c6bae353548128308fbf0aea5ea52cc08de5904ec4941dc2742991db8d98ceb1ef9fffa2d1b98bc5b07ab0f6d8cc0ddc01a7232428278512c20ab30678e68910e621207d8e81b9c28d1266913d1d5f0a30f94b58f49ffa2eda837667f772e601073928e288c1d7666750aee54a57dca4a37bc17197d28c7cf66b7984410823bb7db2e2a5718a5dea35c4ab35f77630ad8d18ceb4b0b42bd78484c9504abb0fe08446c2c82daedf587aa33b124858d23c1cf91d700ebe6b8ac23cd5ce12228d14d68e365ec00c95df3f66658eb9f122b4a846963a9d1afa8b3cbdac0f5616436843a68d8196f93636c852c066a4473e660b256e7660b30a7caeca698f8ad31291ccbb930ea7c29a06d747a0f18910b0b2ca212578731e8033dedb2f5a6393c494c41d4f8ae1d7cf391b00add8063c8fb83077eca2da849510f70a7e3ef46abf22bbd48d6fc8320c24e5f16023ee3b01df68c4a2b6a2ab9d59f01099bf75db338486605394f718c5b1858641a3e6036b3bff97c3ff3ffa4bb042fb2d27275ca890593d1c69fa2a9a00c6ed9aa9c0bfd4383479bd324646bd7382b1016a80db11d39605af828dd2be7a1736702ef0b3f3b22b4b44428b027fe0c3cae03abacf49752aabf697e03fc779edc764032f7a9753d833efbc98af9dd414ac151c6774d7e393765f1a77805855efb9add1e80ecda125435a72a276bf8ca44d331f6d78ef302b2c4fde1d3ee15b1cf03e6a0ed348fde285003ad34703eaa233a3a9b61505c5d4d42cb9562946d577272acd87db8c992d2e3a133ec2eb2ed21a49f4b96f7c852eb8596e52de2365a3a0414889775b260b637b08cd79f52e68d81b38ebbde080b8455fe9afacc8249fac15fd59924dce8102d8787bd57218f38ebb2807399d584319e2fe5b96434cdcfe451be42dafeb70e3e2039e93430dac4443461bc31b1f6c3cf988a82ecd59e3e86c3d54bf9d5f501f0f13c23c709604180ee2a8f9d04563765f2ba208ed65e5aa1b2a108dee011d2a4e744371eefb170489dd8c47d23b7ed2e0a9f15f4f2d645da881263a45241fa9c8f0618f34ebae63675e6c3de60dfb5564e251a471a059131a63383973e97ed2327087dce79067629ac3114b6be92ab9cb625460ba456bec0c993d001efe85af03ba6d049c9f19e7342d2d20114b3904f2b28e791fe11bab4a65a36d697c6ddafb0053416f864ca302356088dc8d361f223225b2a8ba74c758440194a790b8b737218c5b9ccb2ce14e88644e91580c6ada39b71c85346b31bd7072c58279418859f938ab1481a7ad86deba1a0d4e90a7b462ae6657382959b988c6eccd23c1b8448610588c565c24cb2f68ad34428c5bffb96eedcac6820562fd70b36b8509ba8305e4da2ce2643ae109beb70d102b676804b12a811b812b1480e9a7508afbd7da79cd3315ab67f33221b5025293434255940fe88a2f62f13fc416c71fb2602354f68727e2512943b17692442cabf0e4eca30909e199780b7d9e5ced75f46b99151f8d5353df731ac442e11d9d58c497eb762c18cc4908e8531523a05ed956c5a83d8aee931337d06511502a95a1e003a23e748e197ea6dd41e50d6f744fe5abb1de917d87b9371056afcde7b1e31b9d171e9826dc309a57df493795de6c80fc07bdfc5420a69197833c75caefce8b6740e90745aea728341f3c571456db71343c14c35c3a30940a1aa04e8257cecfc3a8b703178e1c9728d67a9dafc0c369c769a81f2c234b6971b9d204c2abc38bdbc8ddd19132f09a98bdcf95344490b04ab38810c2cf864b4a1955833042238358b88f361486e481beef39f933cd4b7bbfae11b0a0fb166fbf501f4d57010aa3381b0388b52a912a9730da93e8e2e10c8a120ccb24f14ecf1367755649460f70cf417163114e3795f9c2b255afbfd36894516ed45db631f3182fc038fa40466dad1b37e972f4c5dc5500a49f36f7de121c67f785b9cd7eb426009806209f39553a06e86f0ee3a801f09ef6452dc4becf484a6ec0c3c0f473588ba19dde166119e359b92620fcd1cad3ea1fafa560f21d980023ec611cdf02762a52614afde79a647960ba33451373d41ebfbe2208552bec238ccc62ca2b97ab65ee5bdec8c8417d51f688c9c8ac56bed2eefaa24ec15d96d72098c463cbcef4824ab739d182371c3d8082f483d3ae9d050a63c3ce9d238bc2f7b4ed7d8f8274f3717d2abc181c392ce1884933b534c54ca076673b6ffbe4d89f8c3ed13788b0e6d2faaed46f64d8b60c49e65d574fe96f8eecbc8e202f06f9f64c6049fab393bfba146af7df71839b3c3ae1a27bf61dfd35576c83ee76cd9403e819aed3b952971f61c0832745c94c9e094d47259844b7349016d7336eef826e5c4ee4a9b64986c4cc18dd28590eb158a76d0a03ffce719784c2940b8de900611590898c3d299274fa6ea61ef5b91367b64c3e12531b6588d508e55c92dc420dece4d90fc7efa9a114fa1d031071559dc76b2bae4368ea5a4c43a072bfc24d7b5196614841dbad12580e1f357b3ee3fb08aecc1bb9ffc2c3a86ccb2854705df77e7b4a5dd1595b7a320afd986f0c57250cf7f410c1b23ecdf20aabdf4b6c1571da38674e57684c2863d96ffd8d25c8deb1819068840f0089ae52b42628c8a89e88738cc6d0fe40a5b6767eb7b6869ac27aa0a0743b9c6d66a3cd7cd5a403de299076d48605231c6780ef86dda9dcd946c4180d912eebc76ea7f5380a63ca54688cf97b3cf7ee486c987cb30e68014e8c0d9eaba41d92c03053fc4a54c3996c8f041ee7f5ef65400d71421fc580b54ba3861cf27986520c6d8aaf2254592d4d1da1b00a7144352ec6a1267242b4b76bd6f544fb4370fafa3adc2229914c2e0002f65db6847002aec23c589bd54686c2d64dd4d7519609c5a40ce687dfbc15c8ec38aef9e24ed6144cfffb54e8349e3677f0d2c1f6a8961bdd90b3d21aebbe4595dc0bc2b486904f976b88e078567b46b32189daddaed7e6518f3f9bf4beddeb0873fe94645e20f692d5fefbad292rootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootpython310-documentation-3.10.14-150400.4.54.1.src.rpmpython310-docpython310-doc(s390-64)    rpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsXz)3.0.4-14.6.0-14.0-15.2-14.14.3fafIf@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.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- 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-docs390zl34 1723706292  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKL3.10.14-150400.4.54.13.10.14-150400.4.54.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:35265/SUSE_SLE-15-SP4_Update/218c4648976672633853841887be3cb3-python310.SUSE_SLE-15-SP4_Update:docdrpmxz5s390x-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 lines6Ib6=a0python3103.10utf-86b624454498e1eccb413b715a676736a1acc851f80a0e07665f7ad53d7364905?7zXZ !t/8]"k%4Pa 䥸Mq0Z5VjXy~z!]y~`ウݔΫ k$EIQȑ-b^d_^j`I;/a ?UK{vqiNjp N9!B{ǔݒ.n6Y6 0HpR! f0EHac{%[jC_B1_XД֪`{7;P._p`=aw`eun2jlA3%O} =Q΍sRMǙc "6q}8:^G&g'E"X}1J]_If #NkQK0NYK ,1]5iXw]qvXȆqAn8| uMzaKsFTT})c`QJ˗#tw9-[]TS,k #9-68|de0K:BBGDvy}}X1U 7ykq;$- @˸jzOܞ 9[J{Pd 5H\xwuId6J?Md #Km*E❛36ex]_ڦF oB+\r4oH0hri"fČ l33'J.`: [s59~6H` ,zf# p^kTe䧥ILzjɅ ء``SJj$ q ¤e@S}Bzo/+!͎ءߗa +T~vi6vVV p瑔W>ăc9 1 4 گ(o).oVofA"q|Ac_h'HM_y2SQ]J<ñtl(=aDuFA-;'JH`c7\LSe>[͗ft%#CPb]HsjMte3,I=ڐ\}]rD Y#>qMH| tz(KB=@ŢݛY hΣX}=yڮJȢ+lΊ[a~LlQ1Y505HO uo#g}o"H >v>I{2>\z]܌Q?WR)zJY&c&0(*\f[` 5lh&# DL0l7m~`U͞O-;URSH '(e$2BY܌O4ɵar?b۳OȢ4T'A&,?a<v 8 g#a.h7UYI)ana7Szɒ%\,(NN"Jscԫ_SuomYKZL#)fg$-f0LNKԃ'zz[Ao@|1;#D/lЇ-)el(Q濊'{\E>L7Os/(*Bj ofikd=KUP;oP/7h}ߞn[I&{GY,zэ-ݫ qZmXRyZz"z&pJd\9w(a^OL/܁*Uy/:%nDl&[Rt8IFJuѶvj"Q*Aܝ4xELFZ0+cdY(ٕrPZ>Qj{h]񝀈L<v}Rjm L9EʍsmVR`(T '^#+M1 05 k/{,C:q! W?UD }GP hηJ<'@4#;2پ91! %ȃ;/; pFW;uIx'xWI z5Peյ4ը5*Rk ծSi;‹yey61V"P"P_%YpʐVPeB,y'V?e8áz2Iѿa@72fٖ5:z:M'y/vWCڪF e si:P݅x@ zN!:²;x?dۈ] (3F%DWya2oz"uU693!E$K D÷:xE9_Mb$(n{Rŝ|(CN׹k음4C"5R@boÅHԑnq@FLl%Cc&Ou)ѦXRwTqAˑ( UY?8ލH1Uۨ)5taVr*f 85hɷZ6+A ̸f&OյdއjFX/kB!6"Y U].λ3+e,멩P/f0)%j"-XIݤ&kuq+@MVl'؂ֺ ߈LqOw\Ԧ=B3aFlUS¬(u6m$kB~>a|6+uk˹bIFܯё.]w'ꝰ〝KqK olv=[xC o60Gv/ ?ߕM `d1#5Y/$_K ?JٿTK6S2dPݸ!cj~ZLt1VO4Ppؓ<=SLRա}C _u ܰ3/$?beD:8 {h룙c,O>܍212ײ-KQI -]<-.I7 s#4k;#3@{916eJ_M@ @Q'tB x`~_=&-Y[_(}xav޿zo' >8W6S/]Z=nQ;vM+v-6p-14M-gEg AK"'J VN`77G-m doJwoޱj:[i_$J󆉵`f ESty$Ӥ jF{CZ9n8ESlT#ѫP.Umsx6UK{wD{S 5=T m3u~+rTQj3RK(ˍ;b TE9qEd.v`˼@^-T/&ýA|L*Mp7gQGT"f1zlYE<% 2PZ?T":k!T [N]GYI;s%T2OeEto㥑wCw6м[ZCPkd,i=YA5evmL&N.n,"Mz0Ma,9R,7O:eI~bNNblة@@4uOWF[baM4bL\@拽Xbݻɏ42X}O' > G4C!q0.#6 @| Lsh d_2UW<|V(  q,>e`m3eoꨤ9+Zkz/Ԫ@izbDE?L@9SN /cg!PL;7 J^74F' uɃpO0ᎌ$x;Y36[RFr4EDC/P%m4; F!"z g2H oQ8:Il׋}o (3N_2kƀ݊;ݝ[T|#z!J1CkTyɠ%BO%8 VimoX NV4֧+\ Q4Z;U$t{4tȫ|@_zEozv*f)#hs%cc'g*ChWBt4;nU8X^ tMq':"ht ÂZ$!p_<74v BV2F%-u X')SkiR4]NL 튙*lC†hz<[tJ*5g8ϦH, ,>^v޸j.!CĝŽF^l寤5?:/=/Gn W[J6}f hU9zB&u-xatjG㒡[k}y|1@GV7:%{sI6r]އʿoeZ7sӪk0gG98E>Qdňxb|O*[4 3E|aEz'DW(wb#bf.qn+qZYL-څ_iq 4SK|M,Q2C)o|6tbS)2GM8@ ~ E>ҁHTЃ٠*4]7y-,W(<{M JbJ ԑVu69VV ތ0YGEtud۟Xc4"P%@ qOTX+-tx4}d /@}YӇ渍0&E]@2;nDLh84PAj.K$U f˅ F%f8nRRǭ҉l|"%@{N˃kO:S`~A4,^5$""2X̘e[oMT`Q"l^Jd2QbFpUk粸18슌GS[n1HII'DQ?l,3 ,# -!-]FvC`fsXMeRQ0ImhX2~v]=*A5t\9Xxoj 16i@3ّ1EnjsZ-(0Jh\Zѥ2./ی>G"m#spoËٛdA>[пƛk6o}_=`7MB۷WL6FU7$AMk!$my4@."ѳ!z4֫(A)o2MX\8)ů]ںōhŭ/^V\:XRSf[EBe3w:}Х~`rg#KS}euR[\)w{. 6 \m;سIWp#jsn0Qz_tF+!\j4=8ZhK8\(Nͤ$"&ٯelr|LX28=y16Cc8IkPe'+g#\ ~ (k6 9iy\e=uոO+6ٓ'_Ls%'Vz掐#x A2fRDBDMz'ثF*{h0q،4ene)fv>:T⦣RUa5[oxp` hiD._./<%bpYǟӂ;H3<YO]>LZ ާW%*0 .iYyAϝA.TnCw)_8B;]"<_6&}gϣD|~~$[1#$wR.Lkw m@XgEamW[P71-%}Ml>o$vy[{&n&Js%N@ɖ#Do07_]J9:S̓Pw[6 |^xGP% "%CIʚ 9+O^&L\楿B8U ߳W(獬Crriֱ㜑?@MqɁ_N)ӁB/Pp#]QezF-20%(lF9b10k?Gi5 rvud6_:DIc+iՋU&iDQ~f> S?bL9I{ey0u浧%#~2@|t4r Soc΍~!q w۶7+rW6T*()ԏgA񕼥cAnB0fQiRNH6eb.ڇKqJJ5,ao2cm3yсCX:pK}Wx/B\ǐY^']"܇IvrnekV69zJcAm˔hBޖȔ8臸CƱ sMx =OU)9$L޼wk+ lx(S<Ֆ#EfFLSd HX?kORHaICF 82lSGά].:7aBJ\,!к`` f9EV&b'G9JBy$cZ,lȺFcd0<5'JY0zݟ4>GH=2,FTka.8pB͞-qU5!K3G+R_'Pq OnLםV\n@8R8kN V`SͪF}S'qu)P1FiuZS\-l×i=o aTei~q9ӄ^#Ua; KI xOOsdxNl؀/4x7 ?j[$EVH⧋1d1gBu 44g^|^ѫq#]JLK_h *[Y7D% l};"Џn~S6ZT]) 4=~(ZƞI>v!LP,]} G|:;Qf2ryM2/v%$U-a΃yҪ T-G["\1R6P !^YX=yFR%H8xー(]1X6!Epo> XƼ ""Ѣ֍nՉ\ݭLh_д|KGOj~cbD?(w}xb?~+±ű֔3 $SE!\>=tHX%=7@ьWni5N&6`ksU05CbU?F,Ԛ&JnJ˼S#(eBiz")ESX.#X4Zf(0JjIT@ ( Dۈ.A[no~۷l=yvt8C]JܬbsTЊh_di  'm݈b!SM)eL/H56z^JuF{ [ll ,\\B۱yYNRTcxF|Հ5*NY"He]BTV=S+:y[PWp++jui76IGv'.f<H䓉'Td.VAvM$~XdF}OkOxxqy>f 9 B\oF( k NsJcގ@;YSLb_tl74 =Mr:uQQ{a6">2+ >ۙ{Ka+ظPk_#mV rvV5Wl!L|g;q׭^?K\TqKG ~a\shV]g] ع, 4łI' ZqJc sBww߁o<5M#JNvJdN^RFdl;eFODzhg?G&ѨP#^Y 5;lZr{R% piH0i:fDaQ4 !^EQ8 >–37W[|NѽٸfMRvU%5=p("du{A*=’\'p4\J7zgm }>V4ш=b+0^$SeM 6G`H|΂(>mq3_iUVj3fLY!5N]h3'7`tJuNl0syo.-鵷ܕt3m0? YNvԇxMk 묠qj4^LkK^paQ+l3D't6@Iz^QO! cRU;tb'S]ihv+Y_asCB5[ Vڮ /h/sTqk`aǍ"Svh언D-[W/qa^ʱff{ W/ԓOUFI@W`1>&xf& G5bǓ% gF@ 1ցOtFK# (- |1jE!4tp/FoNvQ5yg `sF >I;<9U(TfVߙCxG?Q;@nY+@If/Dfv(eK.w"kGn=_S U (SkoM!nWT3S)@JxQޱmtZ09Z-VIW f\?Fw>QTyޘl&eȇ(|0j_4zWFI8j}s$ԡa* @yMlnCZǞBqH.NL 3l@{ӮwV=]~6;| ]& CotYC홟,Fuv1+_~ISN''L{쑶0Bˊ@Vqi4&ZyA9yE?5b^ôS wj%M(peSt34) ['ԬdHJ8t"ES<OZp6Ғc՞qTk.A!l9Dyb!FtdC(oͪ^(Lqgpp-W4*PmҲ.zqFǣعWaㄈXQp:^я 1ں5k;?RrC zfmiIzX/US`AZ {XI'&[f&iA}t2=;֥˱j%ִX (Cf'Նʛ~DF 3|؅Ӳ⊠m㙨Eg{%g"SVَ4"=9!g7д=/e5Ѓؤ+숟!2%',/!R5<@׭l]B:ajj=B/xeHN ?x>{kKcΫC?M{!Ĥn/Y'o~P9Spocc8[Hx ]dFX}$L0{vجB<OZc*ZGX  #ix.&Bbp>A |Kt$^>u*t>)ԌAqYշ#:w5h!ZLGBld,[y%2I;u5.ֽz~S@ UƐ }b?{n6ڳ*o%lu`/NC~o #lq?pLkt`9'7Iݴ<ݒ-BiSD^\cݗ"9aVe*!T%1130*gNv}~?,p /ZNA7GMTJ;c r-Tº9MNdfg@E3X\=?_{IX13,ut3GIXʸ(xak{~h~ᄧ%/]a!bJ ZOq %#6߸b$Q[ᎍp!&w ȱ!+?tu*2g%wCW :JG xl)PdTNx>l=Ü`+RpkL9%/5{"vR\l>He$Y:Cky-JN % # 50vӵzvVL,e ]jQ49)֡ ASH/*N8^,mjK~N4Oon"'?!'{;-!ւڮ>HvmZ$CobS*"*H+^6.+D \(o&IA_$jkJ23/< 2)m΋+Ҋu؋[mjߜ@oz\ŤuJ'YTe^K˟}$qƶDQyiR#QkwÂ_v2юEHzjL8f@=Ie[( 6ЉY\Wp:J|  XL(YtԔ5S<[M)%ܪ\JҊJAh܋jYb'c1hTUM ׃iO+qM0 c-Pʾut=?r05JȔ ||az]fmۖvuV¿?~͒2+fD%C_IIf kEwFndaxGmOv!Qh Pt ݿdNDVdxf FkHs{Vt*;) ql{ ioDڊ`8 bmO zjp$N݄N=>"!!bb/ Z bᇹo^0]8 + Rb`؋} lK5#QI >hbR͗*w\R, S<%o? jXsT׵ԕVt2-SOaP1Ov2R̂/aߞUه] H,b̔Яʡ-o(IDOk @-Rp%hTH.S?R^ԼsUe4cE%'BBe2FR L1(IٮmQCcM4MGeB(5uWinZ4tRrv;qEyd/Db{WRE?ڲd/Yذc>_Kn*  y5~.d3)=#ʙ2GpWzIK0UupvgĽ@Ge KbŎևOk/gCܹޟ!g0n$xR-l1 k&TZw޲y%-_b0B/Qr$L89RUm HiԱGrLUW!3GAfzS!qM;VQK".'eso>i] hÑB#lcԝF̔Ak - k PK07Lx4/g20U0!P4i) gk^{=]5sI#&wd4:+[>a/_{y>FmkExomފ "0p/b)Dt +p`]0v.>у\RR#T9#] H!I`;<6jqNd ͞1}j,"䔎 %EZCH@}TvH;@AOԎɴ}ItO;6ӷ!OrAb\Dab=@A"RZ@ѝyTc[\9w;{dNpT]?X e'4:Tp7E.6j@@CG}>SPfr1 /|$C|d|7H }NۃD>!:vI]դF<5}u}轤IU|Z!3k7B YTvXL '=H yHZ)|*2O&_Q5gDA8ŔS5rdR#%c,zQ8hjgY-0L!H ۧh=XgZPG>WXNN i'"¥$"6ړNŐZ0 9sS hGwHv xϢ67dڝ#۷t4 ra2/?- P.(^KQƓD|Zg%{k$SovvjBVDBݵ 頜AHAyxRf u>dXZbO77^*A|b+5ռ׵+s^! ܔl*Ι%6DvoaDq`B)wXq;Mz+-$M5;#,¯ 86U>;mH!951/ ..Id煅U90v?c꫶O!MކJ|Le"fvtx9yߜcaÌw8enӖ$MOv2WryY+E.*X!JLY#U,oR#?sU̽\^|E~F-l%W)|ml:a*QsA+(NplXUJ ׈5qV4L 58aN/[D|pYмlH 6"?o~UǴyI},jyj{!Z2,$+ H!`Z9+\ɊI,v4shq*BTz`;/JrAaZ@,}/=v0`(K(Ŀdt\O,JGwA6[~ü"t֕-{+P;^- 6s w5 :#@kv_1bi9T%q0l1$q{Q |>|b,\!l}* H7FOLyz]wMluv81Myȷ\-ʃz0:%g"_^jKEgLJ_dz#i,ddsS|  kK֏"ߏU"[px?,7&= Re=`l-o^RtI3*;N@i5IHyϑ/e"!sSpH v5bQiJŔ/ nUѶu~ѣ>b!4d ,HMNprͮ|O8gx|0+%<޴Ŗ}|WNUR ~ ˌ1"DK}iuA-?D'R;o#U-lHpN>nc9OZG Ia&ɿl-,{A"sۃ4@|55iw>Uʪ5SϺ @̋ШVdjΌ'Ӑ K/,yl[|T rP2,-1kRF) K#.:tG?|%}>3|;Rg sѤ؈3[(LL]RԤĬ@8(S{! 솑-#>V օT%m':VAGL9[GˉE5V%&#!vj{BHzi%Vez_F:AϝqZү@, (\4[JVbx7sSFI)/pwk{`E!_C+ōh'*A*((^VWf0z|f g9,~qm3[a9+mr5'p*GfLVh-ij}H$6766Џ5n3^=y_FQ0`w'XbFD(b,!NGۡ.ASѤSOǚM,s,t4lBw2F(*⍹so* 8<( + JOKSQ£q eIC)mʁR#?pMdZOCp)1GO#ҝbdaʀrCU!H*XjP *{Tl!oE?\0${}EJ"TK$L) J1ƉP"cXKo#~bŪG|/SVv'Z0SF,9!$ٙ\dO]mHԧm&/KգTjI`8ՙTTw<$2y'!]NVm(m:A̔$pMvHvi/xncpHl^mrCnb}1$˜+᧺yNrIh̍ ~~$yJ,'ndhLt'_IZT%"Aa7R=IPj6XWR!Mi,bޅ_0177B) `zHkij4AOxioOTV#bmC}saN&H:=LxT6eýҝYJGDԑ׋˃d$IMDXKד1~ ͌"-4:L.BiAe#>a[N>ZjÝDJʖ4"`7g7d{?Cw)Rq뒏# Mp`Uw58Q昄l JᣣGןzhh p.7?ְCj:t,4j`h VDb''Dg}եuN{lpکi&6(l<{zZZ H#fۭ"ь @_Ԁ$Pb{}[2e;h_R￙WIyQt89|f3~ h# ځ?Gp~~>˥LX y*nZ0||Od0(VʙmC..db5_@uXPrql%ߟ1 ^Kg w40H5~&c__!+&|ަ[ lؕL2G8{l+џWGq&Q 'ApnnOc -.JD-,y8Hr2inE[l4O;#0nQ"tOrbnZ#R?5fy?RWsc36rEQI}$=Fv?zt{&9iG7 ]f s=ީ܋z,D:jɳf'+@!.wS zEQFXsV 65jgMx'Y9&[O{ ,4\R'0Ή8QCߛL[tTY5N0印2\khu2EV“ 7ǰU@kNhWZ5S+OmWx.%ZC4i"W <} 9zIiZZU'NȾډ疠0 0V)ְ1!ehN#ϧ-YZnzǶKql:CV4t3Q5w948ģRK)2oYmcGC(>+;ݗjTK>&7&~|})b M=~6#&d AhUṟ >|wE( l6n`XPP$bx"kWjԪ[y`LIQ,:Uݙv!# !8/2!]G_ưh  1N>ܰ/HbF$}1UJ)\T(RR8Z?u˪@omqz~w > Sr?R{aŏNɣ#@0ϳ&6\K^bM W34 'bM륜Sf V6sTj"7i>Z~|ڻ(v๶.V6&<d*T|xw182ǩy7z׆_+8UX!ѸNe0o2HȱI м@a EYv4:OSO}XYyuW; z<0~xG/NXB¼B>4ӽWXmȖNԬ$Dist<~_Ǘ:6{TQSk qLHY1]}7m~kUgќiVN ^#8yY } }&T'N~]XB=v!Pf1ug$84ДqاKn~ 6II]"VѐE@%$`(ZOi fKVSWbWGM33#%ëwhxBϿMȞ714}ns=~TfxcTpfQYó͘!uTo czE]U|v}/UoZdʷ,*.PoKڎY]W ; qECCP0R/ ?A0 1Y cOzD&-U]p\&ј@JV†PLEpzc3-zM@n;}F P_%~T3N$장obUn~UPxYr%Pk ŋ2 …t m TQ]@~ ĤϮP vdj`+1W VKz=(RQսG#{#+gR,Qr|efo谷pp*–DGbrRdnYO\"kΡ봁Ac ڸO d=N {gwySLUC{j9YI1$(,hJ5rbc]qb7&x 3ٌ 9!Xy%)yxMnyU#~LN$ahZ^i`d\n]S5LZU;g+} w~D0&+;sUݹ Cx{$;k}#mK-rmMUNpr\tBq7(nidp`>ӧ7E>1=V^z%Ƴ 輟%Kx|[[ `uyX1GhXB- Kz-~}^si^MmrUrrPxȹ5/c KvxY 4\|tͻ0!l%#'V9z-7FlY]clI Z&?/VTv V~>;H'uY[k?~K֭XG{?z&&rRw,cBէ| Dگ>ҺkdFqb 3coGwVq"1$ڐn;Rv6_=+h2À3w90?|a˙mzjON2#>)RN[(j9Ausl9s=މ'xRɘ^Ц-L-f4~UC0o>340چQ NU/ip+@_ Dn`R7CD20HzI&|/ Piڍ颠@{eLɸQWRfaJjx.#U MY~5{r.Zol¢6PXժ6}'{ή"F ;4*`\1R+9o /T؍(_ ”Mm_96\ aYkY>CJ%'IyZ3!#s82 JYmv0Ŀ\T9Ʈ\+m~JGX+R7&r9UNJg  Id©fȖm6UHM2Bg8&HWO ޴&oR$=@|> f =!D1xQ^^@R܆4̒,ǙS?+ Dg:| yc;zw-Ҥ3ZgL%1V&*tV6x"T1(0 V{l(Z'A -xCo&xr921_ϭ7{nT&SaN:q*3GD,>oZ_{Q îD(<<η݅I? i~~eC;Xˌ5F{J'|wyb~?݉8sۗDTGfًjuS2>ԳU' 䏤tu 㹪$?+dr'ċMfe2g!^O/ֶ kD.1zd)lw:-^A ,_(ձb 9 Γӿi"L6{Qi_dZISOwzk‰H{Lg$44cvx(ˆ'f. xbL(1/d 39r7gcD;<jB?W"pzsIdY!ei#L}8g>O%)c'ӗaFGz% pKBbߥ\坘a-$G2Vĸ,>p1_$cQ#QwJ!|;&v%d:m/86DG`Q}S$܌xRl "XD=G Sϻ<@8 lus~I^JMݙ z y1n5i?Dl@f}FxmMw̃c$u~@t~/x60`U K[R keigU @ / V*];XS͔=)>Ml4H EL+}(j|K'Вg.TH xtyI pVE~^GNQޭk"1fdq4?{4 MvǯBRӾ~lx#p%M [)wl)Pr8Ȼ(_´b|Ųu\s>ky=Ѱf14;̎HٺL"F&Ιg#!X[C[[̲k05N=AӵL8iW= b EzG&a_<.3iMմm]LAQYEu|h_5o -mJVa+~*|^NW.eK\dL:S> f00cJ~9whAz|A~ kuI1Pe}arlҍaf"4G(gܲ:#MQ_aAl UfhH=ڷXsotgI,y#TGLͻzUB}c$-.M½K~rvr%-|0Ҳ8u`C?~jb3x%>VUሆfLS=F ၞ%g.gnH^BnXn;rl;bvТ_m3d"BMjLJ˚C!̽ER^(stg.9-eq7Rap6d|cs}In)Mg|2L* ytr+]cvwWyOī~-ʧG#N8U",wFVEӈ}gtO#۵J]L})Il}KH u7@t e* X2G>,uI0CG>bK+. Bc_ TKZ,N[3ZVи$e##+@e`4TizgaV< Do %!OQ%X=Ɯ"Aci[!*b2mn_K{\[<9ܖq׫JFܤ*M +mW|Ժ`al&a!Ջsܺ`z䇱LGZ=cmx>g"UiFv w2a9pv#+kʄ2g<ï _EpA8$8\TSщ@jOb{UR!#^?2qrIg5+@(%4nIb]KםD3h'ZuN=;&nd0?KH1= AU`Y%2,[&rF*f/dtZ͢Vð9Ɛ L=Ť4z, kOz6v4iN[2O$%(xjxE]1(Py.cY@91 ?cFG&ZiP3?>.] {lv qT en[G9S,EھcЋ€SlÚl+~xNP ^yq{`-lsC y~dt;GKϛUX 9:czqV0j.0:[dB(dfzhmXƙ/}+Hgj|۱)PCdl 59i]/G @iR؃/cx~E?c< 3MjʞWV(\Pk C-MÔIhV]ؙN6;15YvFv5eS@0( @Z:J guJ+Sݝ_P_}A*A/-qJdʈuɰ3Ӱ+ұd (c7h˲|RgAz Sj ٷ/ml=t胝ǰ$T3HQQ܇ T۷4M5X3q q>@=%r$Q'JLqޙYEtcf@f@{*Ra{Draaxj3c8CAl2wq8CEq4ILV"%(;2;Q߽Z_Xˮk^R0jXI.M \JsGS+t̬׸Ks؅ ?-0#[XЦΕnoҹt(i,,[j{ 4C2'5-S/NBVO,yy}rR|W11,UŨ9F\u\]Q|P:x23y#@EK礽D,e4rɋP%?xo-q~Y]h jXѬؖUoq':6P)<AG}CVz]"\>u٦}A)r 91Tȧæ2~WJLgM|I?!DFkV,@UJCO$ !BxCQWGb tK yG\볬m€G3%840{`bL-ZGhp @{3(zDxYE{\3:}eYwa rou%*zw> Q0y 8LQ|X 4ke s3;3?(/~5I1|kLWAe:`F#_+x{bSAi9m:y lB7F 89\I% FѼg&/܏t_yk*E*!95++5YQ?'ߣYqfz?.ѝ,CK~STc(xr wS}NW(:}Ump}Ҿ[SR%%hzB{G2=lyd"UsoP$g)@x]X+T^-;r `mcR?%4/LJMV'U %+cA|a":]^׺)Cپd "SB"VkQ0BK- #'+ ^dHR;a2b@ 0rF@!KP|7 Puޣȯ٪_ۈ0[ \PM&aĴ~qÌw;A2;c)Uf Lk:e ?$[/vᘕuu: s-6T2D:0f3` w[ɲ`tir*@-sjW Fh&-V 4OJ{7$v lkt ;7#zmae;)<%Q8Yz Ǒ%H qZK@gT# f˵9.Y%c2˱QRNkG_ws ϫ|z `\yfMZExQ@G7~@BXIU0[Mx'"wP|9Ez%}y:pY-a V>Lŷ+AYL őM e' k_d1$~N,ưpQs4&yDz]ט4 Z˖-}˱qe݁Ӳ%Ýh+IHDZ[vnY*^-N?ts9ĸ#=&ײZ=鑶|ȊVt+6Vp(#_6%}?9\=T⌊6%@)͛®Tb<1 ?W?`GGF}ό5¡zcm&]xyd\ƅ̽>yG]Ѓ'R8dK>:zYQ+0E$ .FH&DN,<@N0[:$@D/!XZhWb;kI0C١<j2eO:N5^ ƚ1-.JMyp:F땑ӯpVzR3  3'॰fKi`7bX';6GIEi jjW"\T&H}i_U? ^ ÓhjSu&0H2OdM3nړ_7^oJ.?%beJxP`LOsX@'l ᥀>6ϢS6-嗼$[`dzGOMu/칋ݯy%wHNړm0G~[xQɏIU i!Aݎu g af88MNve;Q㋽jGLo7oz\ZRswMfY5 |Pfk*t$N9gg^9-$_8 (#}I`R[s(qH02+#Ic{9f5 E4E76M|L҆~#{8W5΋56_WwFk٦(A #gl BCN'NWz2:Yxm(G!zK@Aߖ9M; f-&釨,?+7Pб9vF]r6~WoBwVZ޴#aZ&L-wNzBJoG'(\DzqRZ3Mk+чfe\ΫQҤM;@J9r٥1Cw7 J.ʁMzGkwXScLW SO!EQ 6xHV\  n &d#<?d05'~ytn7ukyPM5OuSo"U! 2aV&kt/JA/HbE4袷# |t\luɐ4mei(ȡm:ڐ,SE`bHX|n*2& ye=և]n LΧͳ3M*:+e72BgT1jFփ[}M+Jpch@jkh I_SBv8n ޫx'/! i;V.v AOڊk ˙O'A``iCD"75 <#=aDL"d,i)5lJa|3s `_ h>R>^'Oy? \0?#t"[Ny#=Ŷ`(n~FCTWp^d$x$Tu&KKJ~d~}c;P`c@O}-T[x@7EgLZ\j8Nf!بmϛa[ʄ13&}7V f0'*ĥnwruOd:fr79kkwed²&-߄.Jhl7ɬafu(7_<. Fh[+4y;9*EmE1Ю3 x,E,] cG% zM!+?xC~|t`V;|,]NQ) t# t_<8WTkc/T!rC*:pg7>DV3I-*ppdCv1U'vǞ ߵwm/Ė@p ɿUȸ^PvB[cCa8^fK(byY|׆M./> .[q0kM]5?.Lm/>.\SHM aunߏ8\cOx&C{4g^\vY a[8:?KHO}M=F ZM%ta(@^D!VFR??C1 TfPEʵ73k ~pbul!]~]1G9!Z37#+-zpBl<<4tΓ9Z7늟Nw+ȐX} B﯍Qɂ[Y=+SNuk~rdcWkwTx3|%a\z0IJM3)>bx\IIMSXեu;uvPK|upԷ.G ju[ׅ%ܠg-ԑRNƫZ8g,^otzo!)u NJ@Q7]IGKFvr]iG8ЩWtc.-FLJE:r&u` QSao.)Kl5'6nt 6TW:)m i{mѩ^)<7pmaPZ]*I ^8E]*}DjL:7t92XeI|6S~jhPR @'="j#"MyMI5mW[+z®|D̸0vR^9PS)Q/ᶝ.0J̗t}9m۠Ym˯fp"ݜ`) u39%3lp\u@T`ÁZy[>P{n)$7)<+4Z8GHG3X,]A؋+EI׎q/d~(z)iڱĮ*2CВiSok^ o#٨ ~E#AM.ՠJU%ëW޽N`$Jʗ~VkY˽v=8-| Jo:o6ȠsJ@-8qyOq WiS3:#&q9$r}CYƵ8C술([h\Eۥ,\!pEJC$@># 8=<]Մ1܄|*|9WXgS2q``YRB\Z 'r7OeaT}=$1OpZ7#akVg83eJȺ>i$h%n1rkmjO"2$&+%U`У KF w!We\Q+B VT~UGt* lsLFX5i" 0H8N*RKYl} ܉U1sD`3L<(aͰBjW#ixƒ9)@ v~Zue7M3O+z]1Zha;ApH NJO)OO^:70cDRPP3d,htٙ$OW[1#Btޤ݃xlY w*UD}5BcU<Ֆ{kW})*c~a(@y BO;/M 0M`a>߻= baf@Wi\6Vkld]CК62[{睨Lز@ĕj`R1.[$lF4͗k#p]=Xt 9_pJ]sz Ղylfy8O<./.X'y\ 1'W[Bʬz?oRe賡V;ޭ \{q:PoT 1gWf`)2:d|nu=zpH09!fP#.TybC/Աy!~X)u Rmfړǫg9zQ}ͽc4D&#tʥf\ԇ ׶`nѓ99dĵz"N|1KKJH6PI;=ܴqev*Cb:lƒo@g* dӂx*@eCI~;DeVz'UFtF=iϦ?F7ԴbWb3ZN1aPp(͆XN"7񽌷i<%׏xً92R|9nKL.siz)0UK'_VMq8SY@M'e;mq!y1vB>Bg ogt+L'De/LGܶfڮMv%Y7'%GZ%JmMEY3X8뱵;=n UY Q A;g֔Z{i[Tb3{J/tU:V2@z7c1%0 -}NĄމdָC)\Ж6qXŐ^ޙ{ cUA.p0XRk$;:@M4K2beL#tǺWm)b՘ x8J,`ޕO N B+04I +AuML[WlKVҳ4u5 6A&[G!+.)fCiıtxKۧXDT XKDf×m?zBX Ld5⤈酥nSZ:oCJ.kH0zP,IfTn?$)u]×ZY(~etjM`^ cM` hvE ĩ@L!@NYjDG˨618t`S.)'CSvwY#4ٛ)zV^'3 ,Yd8-:,. ~׿ɾӪvqQ x9Wy"\w`ЌWHe芇\ޖ9/=rǭE%>A950pN|9Oox%i0>!pqy:yߕ[k"}N>-&})[>!>寙ch9\|FOY5 kIMJp8s*wY]C$oU;L'wT4F\0ԏGbG gaOL!j-u`nWeՁ;HMx|mFCSUAXAV*[4&@KoֵcKb]Q!G'WS%} g F<ս&iIE@gN XGB:]Qv":ۣ?Mh$ixmLd}OPnWluۛ2Nc7&I۝GH ʘUŁDw6 wsdĮO&NC X??;C>[#qŊ.dgF[WτbGwW%/Ů6YG 5`699UUK8&tO\XPm0,>(>BIbLcvWugn>1= pZzt[Xw^Lb&d?PI鿪a"BUz j9.&{@L5܊:F';>y$}i w^Kr'O0 [`GShyfu_+CJ tDUʨ*U+-q*= A@NJKRQg)@{wy֖u)U-@!XR AϿĩ. O%c{T og~D.겉v97Au:A9_|ʁgz?/~-f%?XO-p7|کV"CV-T4Z?W7K)~\ dkoC+mw%/er!@&lZ(YdW,{CuH9f8 7KgDu&5xomأw~vP]"iLpL7q V*Mn'B`x[-c6Hw{"x 3zk:f6%h7GS"ڿ?@t>E6pHVMh^ݘt❿/&!K38{R\K%7Jvf|Jqb٠@`|tQ0^GX&7n{,(% jWDZ~Ζ丠#q%3#d,޶(:bP,^t@x "R O`ӯ]P]5lC9!7\J:ZrT}i.at*t]wgP/h&XЁ9Jd<5o4d&T;s0z4QmC~2}3~Qlɒ9 ` vh $jG$D "RjJ.Y>Glyt b;;? cGEir [ q%Nb_0#_MQ}6eX{ʒ$A<7* "X3FDw%|ba/`L/`"d7,3)Dg*vf3Pz02: x^=V <2TĨ2O ~#ۉp׆AP3 w5.h0z9<~TƌO3Xie(FWZ\pFI]̩hrf>[moQ0M]Pc8G} 501wH2Jp-ε)q \mIY3C: 9 u|8k™ AWgP.{ Ozԅ>xC}ڶ=qz{d Q5X=3b7Nlg w)8*pH &uI_@C,=ܮג_C:m|2fctH,(ɼJJŭI2[{Kt1@P)gHkM~97J>V9m`3pX/^ܵ?&yŅ<=ߥ:Ϭ!Hpb|t,,Iޝj#C132DC[u@'Xָv*UCyχ? };-|f;5]gk<3oYjji|xX03#!<<|fﶊ#-VZ;8+AhHLS;q%H i@˽5,tݯ;P>6kJl&{Ø,@&Z}^e.)~\O[X6cUAF`%Ŕ`A]/#wr֔U*^E=hyu!3@MѸyC ATBSK:FjYF#s;\ػ֢d!R.u>B%p*0j~k yHw@o/aiMp&3ʴ٘Nxb5yoڅT1`% p5ʠL7&/‪J"$pNJe{${Ŕ[eބ}qKEnRdIF;0fձ TP0,l,V8cPEkX\*0\^>_N[*XC?C\~ĺyrI\UƀKTY^,M^/ (g=:d0RݨWv n ^r+Sigb\A)Qh)0]ը^ ֪`o"A{|pG3i9T'\P}&Ap]f=ZIRZ(("ᚚ. ԡ7hh+,{R =*;_^Enܭ0ql;hez?}'/Oo=Q6€ ?-U+։E(I 1L023,z6]"9Y\Z&Yhқa~CXOB} ϶e>Sߎk ~{y`HӮ -pN<VE>։Pුz=9Ј@1ə))뷣=TvFL.UIZ!wWW$ XH`b&aBE,ET.tŋ (A%T˕隗[0ur鍵2.?͗,!=?ذ//> puo8o" WDUJDP̎ﷶ+T8 [JeАEYSw] TE׳t[ }:UmN \ Wܮb6|[xV6љqVE#JJ+۰Rk),!/vv;le-Cgo` vKKx FU1- }F#7jb)F2 5M/lCm\P?poq$/cmWC+7KS S] hDu3]^$ W{њy(D6 r^wҟ-m=ڲ#_J3h h";C<қlںBHrMwUKm<F*4 )ԣs̈́FtDV,H}.4"w<&]TD֟OծT[@@ߞEEh!XI(8f(F fpjIyt?oպ% )wQLKlXu-A yn-LXY댪 `iJX|opNru4OAW9C}.bmes+PFPzK%KFzZAA= &y< 8ͻtL( bzX+9,GM_q6U"$g(1->KŐ ~c [Ǭa%wH-PPehI5ţ۟l<<~[lj05]ɞ  I᧰:/d"]Z3jJ&F5Jt|{zW~;$Vjqv?Bj!}&pb"XK ['h%J1p5DPlzMTd8+u[/Y&8/pk +17?ķceP,]J&!`LXaM4{{/h9M_9(ˣRcDֹɾAL+E*4B_cn'#3  C"='Fr| 4lA`SpWc bWpu1z1:rl'*=)OSfoE2W Yދ&3Q{`i'"]^$hjTpGQ&U]1Ju dy'ܒ.?^CXF\\$XA;)_-' @n]h>)[{zK,+H.IiF* (F[>F \xbF\WLaFCLαʠ|3~hM*)E3&H9?}5EV<=|y|$})+# S+!E책Qd{Z9#l :l: PsA#Zu=a_j:Nyo&YX++WҼdJ￑@L0/ žJf Va1nY73ӌ M<0i\<|UNnk$R}.xs} 9Ke|@IcIt sK0fu0,Ƴ_t#-D [ه/߭ ϛ ,V*{H.G$KKuRZ<|Sqk JJ{Nۗ^˲uxU; 6xޟm2,H%Ji_("Ě,Ö< ӽ>CM*'!K.;+l;4a $Kńkvɯ" p"dHDȩxi˪ȕdf;+6uL|7m'8vU=b&ұ>b0~"|Z%?_|͖Gn?zIVa=*>i jD$.R꼙c@;_@cQ[ f巫FZZ7n&@@첺q!>#tp=IVqݰHـʶ4%{lOOb5+oFT'p9kgw`++Bg cAc+c?&XPw#eN2rep>ę Qk"*]ۅ7i[5 Pӂ{Xs"33\,ɪ0[T74 MJu^O98U&HK`#۬tce ۈ{{t[u7C(Ly7cmlzqNW]Uq 'OjR&E !O)EN`}j˫Rc{Yh!.s|L94$r׷sBR㯾ˏ㺋wn?rԟ>Qү;8镃֕!~,0O;-oUd|0={js%ci*j%fqVX>{(#ͪWŔAIk .ʝ_^8嘲OUrJ4ݛҞf:ּZF)_P3;+4B!wE@i.PΌ 1;p 'W}AnG9?춛#!\'=F0*o3֑ Πj?*G̜ɀ+/Lmef=}XuKIX@b}QΙXl2x8|\;e|ob=PW |n>\BX[^z2_wȍ 6Aq)z[ p_aSjunxtt 9m㢴ށ #|a'8r0n%ly %[G;dP„v}X0y Slu^4}6z7 lP7+ұ#ѭyyu 9&Dvkd+㈩rYdds u7@=~Zk_V8~hWlc 7qW:"5NS"Va4kGE!+쉳-RnK?էEi^ Q>#1whtb3,8 92R ?;[oo9 0ɠ Cmy)dہ1.Ԕ%$'LGeC/~ZfZ8l Nts\,: ;H$CPR032gNE2 I! rG\ nrXooϿ=IM6-@ox)UuWfPmaKǂOk5ͩ$&䩐weKlMOn2' (j0{8L!R]awš; +Ъ"V3BUֈ*q \Vr\W`l],i[*D'f׌zG( RͭǍs@5o &AsؿaE$uho ]~0no ?Bг{JQf(ц{E9>^kcEeKt ,KQIZ\}#u!#nPҹ4$%UWwtpJy@#k0h.{. ҭ^>qu(J~ I ɧM|p#+b͈9HB_dΎԅV_?@ x Sd^4__}"~%Jԕ+0R#qP#OXt b]ulٜ=<쮋/]CP?ꘌ"Mı=UaI)EEO KZPq̉AmC?Rv] 1wOylp\%a F2]b\( fjq>8FP,%VdxZ E4nu"Y?qt.+9`(~84B85kU>SNZhclbQQ](ę{\MG#T٤GJP-J AP<&$ i:]Hze>X4]I܃QH u<XYt$K0g\+Z$?S `5 %PI1U8v0qzt05PpKBkn[{ю9[.m]g M5 x9Br6/[ x:LΈb#^/_x S%]%\L+I@Fk 1~ Z\)fr8 G" J!h {@sGxK4׍F5-#K&`h,,4;A|BR R8}IK#{ pb׶/ W.^rHM=Zץ"掖凭_`B+`~vE7g(ې-Z)&;-Bj.KKkP6zY o3jPFݜ_y, 56Z&;\~^ Ud µMJu\.1ZO3"ڥ0!MW9;CTU`4Γ vH΢lZu_5E.>"hcOD?fpL9]HЏmKoBD._DOIz_)-Y{.`K| ՟B+v"EաD%'Z} 4&JPކ^jJC,8S-5?Ք7!/(ˣ쿿"K/%w,3]٤pc0#矦dݝ=8g8j]xL- d{Ϣ/9^FE!BNj$VnÓ\lbu{1=ʴף 6w F^Tb9oP4sG$GLLM~I(L^*BXiH["r.c`:4Ǜ8uZ{zxavPB!|?"h J)gUqgZklIbv+Vt!sO gOFVn6%Y-?t",q=`iub(k82᥈]9HHI-sroC%ȓ޻օAyu'oNC_sG2(1 q%]=Cm=s9\q_VLιr+w6j(ڭY9[Grxpc "FT\(a]P: %mC0K,`($_LfmsO:J[*N`)iR`G͈ѪЮBd^a諉!8R({ojǤbC HG!?wlPW;Hyw(KϰrG䮋!6G]]v]=hG["-rXʊ| *g#Ԙ]osh &~ʮ0H@$% [9Tnw=-hXփJr -N3S%5/(-rLdGV?դNdIRp+ fjk@ [ho^zICn93i H7ĦaKAStL:m6Kٞ*pxyV6̇ٿSXPm/ٌn0$W3ZJ%594z@9KͦtC{(FxQ Χ=@q΋/&}Uh@H)`nsKvW'yq*m? Nw}d%ܹ#4R>EA? Szs^d$Aǻ1[ R*/ttSMҴaT!sX8|{|W k? ⇟y͊;B\43=Ԑ,Di^;rhA.i36!UKLN+^>Ep)#9-!~㋟LM~ I@V~_b,x/9|gVhi=@+5NL05-N H}1sx|"kqZѯq|)[(J!{$D'$|JZf=jGEnDiBo^M L~2:(ڃ{;e_#4VgI ^:]L . H T˜@s/G2QhM4o $5d3N}֙izCwYP(7:G4`I{c7,1aċ"?#vVKH;oc]zT|Gq㍷ffg,{Sۛ;Ն)hVA@ooc+R5M7憯|`#5h_;tXS(&|ÁOߐW)P]ۖƊ38$S&S u#ht4_$#w#&m" (sjsw}8mPB8ɑqG vxI_⑓YY»2K]zi'I͖PտZrjmqpώrO[蹑q<4욏 k(5j Λ{YKx(?JCcsWǶvm3I/$N\J.y d$D VjFLQrYI &"tɥP7/@h839.ʤwULyV2߂Ŝr  JVHnU}%If$p)-bHxQ鋩+U#fZ &{=O]$z?W^ʁ&-:)X"idC޺}_aik(݅7cRlDCLbTqhq{0(pF_~Re{lf@0b}CC 6 lXMrO=P<΃b-Sh`+Y|"AUէsPD{i^]\Noô J{ /`[{r,ն[ -`&rx36-w':xJ * `rvQcixW)n-|erYҸ[*5b|2 UƓW8o+>|}]ع ^w :|S>`?P1$g  03af51 TXK__zD۠?ޗj^sĦO7iիGF!.R+|ا2=Mz4BwK [PYt d(DZ^NEU=ӎd"ƛ z2@:ڤpmWsc 4EɚLo Y$1x?v:ED۟>搧e 6TE[kM]6(4GBA/Y xj^.*c^pDG:U^xiAͅ-sn`k%9<0;dN,@&3NyvBG 08ݒY 6J5( +sZ-?m5*3'@:U3|,9 6hZ0'E{Fm5wff1vU#PŵIYmDZhhx> p4,4KJVTCLr Grh[L0ww.ʉ^1Տ=DblT'ޑGMw7(jx-""=,B!5ီJskDS'm6u{lK䩉է+i5Zd.2(=}\25X=h_MWOfvPLOX?NaR; oKL;Ӊy{n]U13AO[^W@)b:N%)KH]Gd56??7,] ?F7*z}$Dq!4{@6|u@fٛP,kK*@t[^i"Un)6 hKՆO32 ~:ȔVގaTIa7Y,9kgjjjP)i+oasNEaTp=讬!,7 ρkQg(` :)qu:GNڞutOIzA5|QƛQjj 6V>O`~#'op(@2Sd-ۮwT &G mk+*ßn^SkTױOwd0 [`@b` j] J5űފqeq)%rk"n f6?o  ?+z:TKwTiG#7~G%cU3%cHb5/g0ƘV2HN*~@k66,sWةzw2E!OnZl9-[i+^{WA>d釵XTʶش>#cr^WPBޢob`Uԟv}*4TzFkSCZeV\'NpDA@E\Cm$vd#.6ܛGuF5X-*@_WŽ$"#˥?Q 52 F\d˚Zd3faqN*jCp_(qt͏$+VDZ q0 P.l9xA#p~Yj,suh|utI&ӱlwSɘ1y&*.OQ1Z S8RfĘh^a<ƦYNhvv*Cq3k*(tʄgA?~q{gv5ϸ07tRE`O%"y* h h= ÜC)Ib~u yE`7[G>;~ @l_54|؈@m-$\qgw3=Y -3R 篌v ig˲Yl7yVX ED׳0(j Зu1 |1!$ >"%MKə.3.ebDnNֱ{-(&xd ɐO3w8} B61_X ɬ0+/D?J;Ku987dUqEZɀ`YU-I֓<+W gJM?KPTV ֯-,6VzGEixZMp|x +|HؐHΘ[TW5ؾ c1C4'0д$(O'a&EV[Q`@u3Fqu@H9ǜr/sՍ2ݝ ΀stM9M "ʪ?FcVv5gR @j5 ސ4;ٻ)-082dKOh2H7>0tkoYxM]y!3"d ꬄbπ Z =(b@>TsrʀBYS-ߐʺYrR@6vѵ/õR(6od:N-qc4!,b9@3 Z)9L1nQg孟 @k)ojZL7srh ї_s@(x;#/lXۏ9X?CR$m΁bhsHjC e%ſ-J֓|-_3eʆUm짟L\ꬰz@|f`5;D4>1Y[=fpEuo="P(b?5".\kJl31.rs|w0X)ʊb"8 ,:l2qMy 4ʡi{%ѳ|CcdֹKJ1ET$%usi0(HuSNo-bR/:\&Sma:XlRh"uƄ9+E˄1U@e%W밋~&JOɳzo)h7ly y?Pbݠ eJP^$p`gw[\rS^@|:-,bM}y+; !j7 +nZ ]k8 Btvcn% 9CȲW813"~ 0*ӣj呙 .cq[f 2[X.&Vg//r)V<:%ymIzv"G;T1-89I )q8 k~rgKVryϭ,P rè25:0/kVf0PzNG8NLʳ\w y î{{4 ^ml\JZ1=* s ID8O{J]"ް פ?&˛ʃCvBޱmE6Kij HmxHGe7?2T`v,;6->*Bͬ֜Pa]WQTw*QFu~6јg, O i - yYuhDˡ:XQGj~!t&0_Me'CrqiЉ9̣=M 9\E/#p"Xh]ep>mX7fmߍdWT=9ұJfܹ J b>SnθS5>0XG N픬^䑼kG6aJ q;Un7_Np.uM3haBcS&&9bGx>PGo8eyq4]謟Rܥm ޻bf1_|T;Vxa#j9|YTd~6d=vQ/ I@w/bLXEe-] CV!>BU>dz^t2L,P*p4:ud!]ìF/I1uM^4_Q[>7 q~F{wnVw:AWLz+; NjPeQ2'vgjVm0mҴdJ'{jS\sos p;ZM˹~vs+|蹡t 0EF{?pZ1*@Tj5!yFs|tSx(_ E$.i\ozÛ'4$, ^w|~PqXSrg>MMK20ք̵/^l*Aj_I޶w;#tZLhF|<7i2]ұyoXf1|1I'kD1 QN!VtAn}?SVPهg`u-ٞ4ھ 'yZ GxEfɞ <_i}ƷlRT%j:!lA'.'s{ s81 +:),u[r(|Oz1#q۹H j` vIr8Nl֐ XStZ2)[Ț/GO{?;<R8 3/4eMG7|f4 4?ŏs9+GwGRf#lqYE<27,pJILkn~׈]sm%k0͎ p* WU%j%j4Sg&u(6<B2inI7W>#fh<\G%*)?>a_ޛNUfGv"9 ^$^Bfi_ѵʃ8@I\L59Og0c;5NgQЕ ipt =*u~FBNKK3dR+ !swIwwFoO}*S'&O5_SR^t.FL]KȻ_IaB3m+WxɁ iؒg(0aI(ۼMkmo E S3\.oF +)ʋz)-I^gnSzf'6!RB= %hBМ~B媢ZڋDЗnT◔tnϾԦLMn%([Oӝ٤fiO挆3/4/z6R>[M7NKW^}*wLNQ> X.MlR7LB^{&l(6^|:^OYU{&ަ;k/&F^ )\ Y'VAvvhro#baףC'3^ä0s$.>(w%[NjV^XW $ٻ; GOxs}>7I[1?NQ6#t . XKSu=m^$4}> (/s8b6"뽏걧tݒi'%٤@ACFY.~"$yopC1^FCJ1ceKM^Bh/mF\C/`HY/K=o* h]s5rvbADj7R DAVjUcH)kKh1ҷpV \cr~^e<`T=7tQ o!^x:R=a!Ӄz|AW%lUHu##"7- е8DU͵;LG/tH․.@P~Z떧)2|N˕K ]Ld/ҋ0v(I`x9 ҦWG HEodE f!+hm< δ=lo<GZuY'|WX?&F2u'N=V7+egW|ZyN֕BQfնE֐}p{HCjv#{B9/዁ʉ/ #d"PyjU[-2i^0*\ ޻ڶ7x7#_]~PȹSbHA>0+'= Y<;Sd˨{:"7s&(Q_'0ҎckNy(;}[#}3njO8"v pF3d#T˘p1u8ߐ6 #9,dg"yq/sN^#of!Ze69RsE]$ 3vؿ6?C\4r'թWt™0x y~A쪁g@' /(h2~H3E׶V"|cp؂@?QVv/tLPFhج#?ȓhQv'#$ <:NHINiFx k~0f}@ [H4b͈RXջlHȩI$FnXНn"jLwἛ霝S j7bi&PEU='j_Vǝ/0E3@ .aΒGgq2]TmO@Ȥ|ɛF-m B K~H6͕Kͼ-a;CQqN>{+%02Ԋ焪%ە'^Gw ˪}bL]Ra)bNZ]cRxs><1c![/ [3"ID8J%hИߡSO&@aQwlt)+$mM`i{a1_K 6` Ô^=ج,O"|]LtX{0}|;C#_#H~n^ "b$kOF})߬9Ӓ2[t~ғY[S1wlԦSB3KhL)-N*=wd7>jX?Ʋѡ_C/69 ("j-&@k7z* ƼKv.֩vwRQD[T#`NF;{Ąk> Ib텧ח4 89*^/*Ig?]/WבTZ5Ǟ5叀P'98hcrH zyFNӰ31.)AK(Q$ֹ{H T@BŤy` D*oݧ7L;'hn8ѓ4h:'lɽ}j՘߅b|#HYF CV*~{ Mӂ܈SEQ(.dv*y9YW;!1!s~ayM;BQ 2[Ö߰)ʻUn&Mٸd9:gK B? յg4wW45o-#""#j4v}&vJs-'}o!w[9y,z]j5ک~?؏v ު3/&YN 9}+ >!'08{Qn}4޸Uy,lJ\2iEJ.tF G 5 K.jdьcF]O,*v&n9%oo7݀4gdAw=oTCIiX8KG<FzM(&S48>XoQ7ȔxW xIԻ(@ٙAh2LvX[Hoכ$bn@USjbI)xK=J%lVz(_/mAa#XRODe)92;AßS;M!?.f3ie 3sb-ӂx!-_ rj*5Lo.R^H T͂6{|0l՘Jc{&K7x&>,v@jyMMr&jdJ=q ˥9,1{DO'3Ht>,PuǨi4NPᯎ~=ݽGǎPn;eS#8 "@6՚I]eDlEoq;%v hbk.A/~<_hbJA3$m;y=~ =+KmΓN,gגCV*]`LXfpSًu61Ȇ||4ʳWδ}%408eK5Ə-`-`tTX O$q*YG9\Nzk_JFTN]M1&PqKad_Da\oOu,&o|M24{=_9JP潏KuzJ'EU 8eεciP[OTV>lTg]!-I:p ~B:yw!fr&_d> +Wa?w%?™4)sN__ɓϐڨߠGM֨X]L4wҔ9gk%&ܦ:`xoB4fle`F-c+;R[ ^<r?rl٠VAՖ>_~K+ɕМ D-y,G9^&xEnkn#];gX = /{b*Ft@xFIMKv[;fh{`}Oӗ4JdK--oLu mvQ&&4gdg)y d6%>-eB% 0-F`TL9U|2n= /e`#kYx7Eogm#n=AF^up7,>t3*lYG7(O&s~cv¶hc2F\ ]RcگAM /IsoƹŒj޹7")A¼QHkLc'P@ J $Y5eYZwQL"zlPz0eЭo66ټђİ+H)"t  ꇷ'ت1,k=ߑGPqG^,:3hނ{!(!czU$S{{WP iT o^+`̹;vO@TJS 3N!lw!6VüɓrEQEJ],,nѭ`+4z>XG9#:69/@/|iOUo+T.`6|$wW)xA'ppҪ\S+SM?9&$N솯 eKdLYM^J =G^ZznFQY oe%9}IjDzdggP\$YRN://@q2;g63!Ec420pz= ~t,A~ LlY^nMQ8o b5M n_HݳD=C:kMl CKl*)[r(lV1X/yY ~} z[VR2{P2Tf &hc9^:]Tdjt+ CBDJ^VˢKoW/X^q n􌆧lv-./c/}d'ٔ"ȜѳM+\Y_ok~ 0U_|(cJ!A< -jն~6(`®A9jrb],ڐy#xyyFL%+@H#37Ii2X3&բrpVL@֘SUtn|?RHp)Y?O*Q&M`득YCaGKr$*N<7}#1 R qqShدo_4:6!`_M!0 01É.*(_ 2-KfA25SW.ΪW)f}y=vOz@:uכ B$p+2PFʲ&Wkqo$@G*] =>X[/ui[p_N&*a8YrtZyJ]FN^Bf*<Iax:t]kE"*>5`,,sXP%j;4Ph N7;q،*)+Wabb̐dw} - 2d*y6i|.A! ?+1Zs/!h21S\Z\-&ҪfNcXݮ(]rs% @,ĶəXC6GMP9:)}g1?2+Ɉu$ᐍˋo.7FE^YWS~S*lAYb*tQA !7C!ȤX`FKt"e: DM}c ɓL輣$vPebwVd Hl#7XM!~io]bwm3@>Qcnan~D{4F-^[ܶ-v@QɤMMQ2/N=*!_/Ld0(F{͘v%~F)x/72p}$A"Y3v 2 N+,fxʝm-~\~uI PZ:y+˛l}[Uz5mc׸Q"o+2eg.\%mz;?R "{[y ?1چ^U!Tn|!Aj|9zNk3~5A8-MI#Ef OJҦFKw3^*}|Ա.(ɚc8kpެWYd얣ߌR+}sb|&؟fEvrPz(ZX{qDp?V=CĒfL7̬:#'w]i*]3IU4{XBT : 'fhfv4#a}zhWVi}צU] (Pm5WQ5hzgЀ 21 'S;'! $4ځRw"foeEvzBSA yIdXTjѡ%}1H7Aq^pv<\F&yЎ0)5MS @B{4/"M֮B 4$;98"t !{뿞 J4ٟxkm51܂QGŪ; >&O:%pV*~-="xƥ,e3]9xAٚsUr}=8x&!Z~v;)u̶/16daO}#{Vq [LAXTPd9(;~J`6=8|k؎]c+N8i0x|ŲcǸLzhu(e1`!ql_}ĴiHXXl~t6E3'!z47 7>kJQoyNJɔ@WyE$=]|wco@5x>:h\*2Raj;wq?z?4~c<JUt8_]^-v >1%yQڂ\-@XVtLB: 7]̬ wpR"O< 5*-& k?A*lx^Suk|*i0&tj]%BWgALjsie GmIqCZrb6*䤢lmK~{wS&"IbyE{DAEu%vgbJ;ɘX_H]AmߠYrD/hC=~bחZt3m_ʑ8n@k{M6 BcȺ=kyszV,1}`sv nNdQ7a7)]<}ٌẌ́%d&D0*ti_8'v<ø~y[9?  H>,Ar j0>OA9rV7;}I$Ej <vj*2_pflӱVQC]i`9X~dy=T|}}B[T?[qO071]EGIXX'񭢫fG{h Ux{lK!\yBӧiqAl47K]<;û` l6-Z00c6pi^ʼn_IpGp[eJvbes4+b +5HqJs{$fAWMU 9X'2ĥa0JL4HJ%7CҺǴ s:2mBL uSjظx4@nߴTVRli@|}(uR+2Du[;FU渋}m?p*F|qKz~=m BlZo]0E}J)9]Қw^ޅ6lj!,d"\T]&:@oCە%*GT_J,{fqa>#z}[O9NvflsRʴz(B>c"z@l44J"'pB"v8-.%V#4a;xev!ڙ; bü[[h}e\r6"o2{9Mh q1?$Ųe^w!Q^f7? vΕbktaL;+v1>25~VwJ8r U\ _6J\(Gq˶vbE6*. 5d")ᆝz zXEFJV0 i ЕgB3;q.B9WuGzsvI`PrW+<<5ދZ~9\*I#K5FB7QF"+ YoB0*@8|_9hmY*ZHةz%  [uݒRF~} gy0fQ@"t7 i<̊MGMۉwͫ3chu\q08wH'Q L.?0q.:6F$/0To'.ѷ!]bWW|)-i\ơ:(D-z=) nC+GN眉lФ@l_UC p&1 u #8NڇLD*$M7;3}+{rpaν]Bry!+|Lgx~ >,(shHcDW]BR-̉.vC\"0Ćw~)c &Mc=z? L ' ü9nҟ8?0jgE{EK69J"I 0I3;>'op'n-?"kH~q׬(J[_` 0*ri&)Dwk($72ɠud𾀊ȒE9:3'"XMU4(Qm1v.FqUkOǒDpl\oM˿< ]t~C&mpqiQf?6ɒ~3' =AQ0֞]BMiUjgdY۰MBvk:nyO-E+–/+l⊸{PNv dX5OjkV'+œH i y<h6ώf#)Z'3BY u˰ܝ\W UxB1=JPQi)2xpߘ,\YsXz3Bn J+؍4au>Z* +pK.ã(m^Z,?ިrxߡb^߇%BvEj졖15 9?BprG݁ '|{0StYti42p t|kRu$LFe7+/7e| |4&Ҷ188.ԆƝc۳ "JJXFwи>5CceL?ykG껱>Q,s1)\?X0+ ZTq\wPuHPEdb}_l :+ӽ'CU;åNvʊܟ_eс=v}<F%3LHmKK-19- bB<)%X Ľ2j[- ܶ^`d; B؏%S/h\ÝX&Gѡ%\BBcWxt) ٠Cj, p8iPGeV:75A6tKtN\ ;yh FVV;TeN}BggUA6 {fsaA C9!F<˪VOY5~=cfi sъ `1t @j1Ad̎=lv°@Ο vaDsLX!"M^læ/Sk-H'o'ىs?fI&ƺ*# fw3ؼ`Ge-:0OrѳQ0Ӣ %zwȓW^4Bb5,NXe^B] k!H6wLXf"FgDY2_A\NynxqrMSJ հe4Dty贷|告$\]X!HQv ^18JC 娧 .~Z&G@"5o?I@MjKf2G3{@X87_{˛-xp/µkн$b' ~y\gއ $I5^Y#@ vyw뛕:!SR]"+OװKLwQ(E8/ v킠0FƄIw|\?10 [6lrK yc7a`QP@!twzhl" kTHAh [y- 2]~FT=W00lvpHy$8c%X50+SF ,? Uq)4Snk<2&Y鏌 Cɒa;ĆL]a/%Q+&A*|XR'َ,|6B^JPB@/ C=PC!W H`~jBԈ{#C8^llW 8Xo4Ԙ5kkaH;(Gs-A xrl?e - \ZH3"`8 99`E>q6'w 8A9BS,.3ՇA"cu4h7=V\~}jG{ Hs'ݢ#!s{>jY8 zl")|)h0Hڅ(?!k8wUPW̴r/3z:" 6N~Ĩh~0 `Hh/2vʿ)aݍ6ِITLfMҞYLGsu&j<[9>8A,|z. VSdG3U J?bC.JzE{?s`pb?hẢ{^p1"/!ofyTAғ~]ٸKFUSj)N$yH|a^G[JS1F>_^n: .nj~ΤL*HH Sc|\kTOdS)GE4%~Yg7 rf9zQTͯ<9PW[)<6H]ЍGe肵vr3{G8?X@R-<<2ת\cdmJ9U+Ӹoi ab훶A?I:ߪЅ ɁNz+js@pGgQXQ$ҫez 3 M yGJDl^</,m^w17xEumAU'j_$MvTGaՋ&[Z6اR`z;Rrq& xl!,.9["uȉhXY䑍Ɛ\I tԘS#W&i[OH=UuuR ]ؿ9Pr{Y1lHAD{luwL $T&yBqZ0GadWYJȉrE7ɳ9:^No_6 Ŗ9\~Q'"%W _nяyl={N[*37o]JToboyvnuNm5hX`EuzF[1+o$f +811-D2m5] M4ysN.Zlim/0Я_qj"ayR ?VD +^F6٧мdͺFkRR!H%|Y;VR.C~G%ªmQyeR92hgFdU]1doG"HEaTۣ9$bXOϊPRfNՠ!4e[|Xu?g"b/C&~EH>BArSk<9${RUȏDž8v[t9} Sx[*k"8(?A* g^ Ç!LE'I!((m#}.w~ 5!,YH`7:q$b;F"Ut&V8K˨ V~cOjFujŶyf9;%Q[rR ;UTg%$`.;r9"Cv{V& Ho-9^yNEfS\DE  yOж{NQʙ$"\Rv{JW2Ri=]G0 Y"c2x/;Ӗ9lKwshrz'ރ,? O$noUIUm푇:MDQ,E jY<ح1 Bn h#%:cpuZF~J^}]^*i7(.9*ѷ],Je@[/vtiDjl{5S}d)w\J6}ygtt\tC'vl튊?CW hRb[hH'[ [>.:ձga_{SpW1I/LxD;q|鱩؄._:<`CI69::OeP"hzƈ̯mU [ $*? @ib>2p$T/c&QCt9uO^E,ؐ6c}`caϕĻUSc%=,F2{rJ鲵EzK0 {h%B {A+B`7~KPu`hI--dʮr)e _#`ﱑL3E ȧ+O鑇}#UM'笤`kb|a3;v?w-,`Ծ4`}a2ϮvĬ9۔0;j:g}p@<.Ch~#i,[ ֞e=[BC3 {1e_v ߎ?.sw:z=ºPZ{:.sw+/YZ){2hw+/nUٖ QuݬKk/;?ئ D[q]$+"lD/C M܎\xQnm=A:.s'E3ȣ-T0=B*!= 42:BO79C"|0ބ OKɞ H= xÖ́}YM İ-H VȬ> U`Ȅ[eΓy\RG@前:xu6Q`73Ͼ pooHFS'kGDf>ҒTI4 il6pEΟwԢǦ3V~QzGtBC!,ԤDܟ:j9ZVisfypQ%)3+!+,uUNxR0v[oXEQa#e~; _z (Z&tr] ךt4" صR`D.ě Q㚁"}Q@1iΨa}q |VX0D۟aXFr'ќdL(Gq Xmd|K֓k7N}Vi+);~6vT\Vr\-s&T X𷓦 BzӟEEW>OYGnLnZ\,ӆG|}N!ֆlYgsrJ'vs,|[!T\q?0f,GY^LǒzF3в}pUD7kF勿$Tw7|L6xN 3FcIHo_ojѹ9;ݟ2Ĝ^ K":}RnĿ<)ENy):= wn?zġP bXN}"u6c:V.F3s`}[I N Ӣ@4{c:8EG} -]R2NIFf#eEhiJ"!?2suH:ErvTͫ,v UF1*ץDJd,}+ޒqF(O[>`9y0N=DDu8j+FN>f QNJBKZ4"[U\iZ3Њ/5LL-/C `i~A'΁oNA^M_jh%1SbnLӚg ;lބG|/P2 uk}62*Kh+SVRt (ԫah}]CATKIj`a1gAsrzv)>EȜy☖$:-Ϙ~K|h\,\B3S)?툦P a.|g>ͤ[)8ZOwQZN%F6˞ x5K\~]2b(0s$7|mൖ|ߟbakн_:񾳡^ĭJSh2K'QlQtBA El⢽8m[V'`';RѪ`ڀG߁LKFs93 eUBsXŎAii`]PLK/TrnK[XQHQytL)f|2h _Ot+P5RxkBf7MOM?Ne\ҹ#dgxɣi-tֻs_\+}U|oqEiR#Y-(OŞH1+Ԋx~ ~20{2v$JH / ݻdb,VYȍ؎5܂LŤ.3C!B;\4GX$X3Χ1'L =FaPhwFheα~)t6׿RP[1QLR&nvƔh'm!8# ~ 34Փ)@cL 9qI)9F/ BE~~ƢrqL|=\ӟ^FmG05^Or.~(h*qH@Ea Ͻ`o#xVUtQGI'{Od{!/8tEs.vaLjwn\7ߌ12N~Rjyj`4΋kdvP44ߴ~JdO=UI>f jkXIrYѥ<:(~֨ﹷ?giGOoZ*܇x u L볞%e+~\1#mY; HScdlyX.-ziG8pP v;u0߅.C2U PIiFܼ@\n*?1*bC.-)B>ZÒ0LKA/ZC3QoNG*VtD-p (RAcAfw#F0O5桓\)f9bÕxhՅ5sћlXO[nSPZF]+F`ip}([ङ :G)roCQhu/| Am_"]sN"*Fj2.Gw^-'2urE-a63~t$i1= [@& } :)bis~b XF!{o֯72,n(ؑj\+ 5O:)*> H;XLt01UؤvS:r@Or誟O68x:<,XkFM,LqO Y p9wp^ ~_3HOGE@oݜ!XΝIBDT*ikl2{0{s?[6 ;?yKQ><*u5^?j:evq$1|rn؏g qK5gUKpvǓ|X~iS2Odٙ*h꿞ojSW`n3.o[G^,)ڲA"&_4'F໘ &IH>q'[Y㝘A-wc1ϊz+׳6Ao ܾR;poXG"|Lk\F\yI=|"B"2*ɽQ!;fIlvѝ{{AvW[ܹK?3F2tc kTi@+f/ UuX$"M{Ġ5m{^ox_.:S1!c*ovE%n5=6نLaAeJnDe},_0eo@=uQ'v7Aq`@ ~5Ds93^]yE۳:~˟Q y+2˄ZS8=U ?-!e#(,Sk41Rvhv/wE$;& 9ĩp F;"M:vF}Agf;R bKSܾ2+hϝzT.S4b feT^g5UႡmTtACG¸|.l.Zn\| [7zg갧4}tCz j@w9'(2K^P|c ޽Y $s܂R`.)x ]Gђʣuwߴo of;_JE.fV2o QDN wPNg:H*=M:,a.@h[ճZ|;Xc$hwuSǬUHn. _kZeӼiІ|xx>{cY f͊]Oꃭ%\z6ׇ͛,BꎈBiP,s+pVm"f)d5FTo|WqE5Xvm$ڝ%=)F+h-ǵ_*[_,]{bt閾DePV«v@A)ϑ#sZ idA֋̯rC V@ a$}p1?̅R+pSGiŅgz@*BًLvǤF kH~Ro趢Y14H2"jg^dO}bsǹȻ:>ᩥVm}="572L[mG+;X6k%((bSq⺻NFzMngCG92%kΜE >r6.Y@00/P\N0KHye9PzbV eE!:p2`^Yէ\|>1%Ƨ;ZK jx0 g!(͕X21F.tCoxr{!)&Rd jbj]LZ-W{9}CX]7jQkEo( g1;xbv]jעџΰj1|0o{Wh+P/Z斪zޕ(2OHW |4o;ûg0'yN\<ǥR;Rp/>J&73G&J [~~3~wڧr|{֜m%ŋ}k[*| -j@?ZgJȉMb $Jd0)'U#y|.JIh ǘ'=Ps =`n`/ s|M$hEg ٸU]2C gFr_"Դg!vTz1Γ#6(L)Eesvηe\ JWrٟІnQO}="%v>^:#ftP"(yː_YPjB ZRb,LoBt+0^k&Q_A;[C(MptQf\Mkw6כ{ѣ؅ 1 LV̦%TA:3K njpדh_<QCNɱf4,CFzcVdCÅ#6`szk@x#k6; no“3KV3`"|>1fre2U,h-ZvmniZPtIUnvY_~27tfJYԐyЧ*Gʓ=hu4ID po2(\}_a4,n Xfw`eAN笂M!ր׈An djW`oL41vBix2PrDH %1F/ZCY ~E綺nOvaսfJe+ݖP!qgph韴j* h6f9};wDBJ:2b=uoʩ--< ԓ ۑAY0@p1r pm?ϯ[^}2mIW.f}lk4dix5v2$"JQ+=ahD:Uo0-K/)lDhw\X-Zr36?ҝzMgf)S _״h:*Mj7"]zZ2diȃ^L90^G EB ҡ1qE'M.d+(GR{ɭPw[ph^M^_Đ)14y>Z-#2"d~)5e_8H @r8Qa+ف9\lEàcS[.3C:^a lQpIc|¦;0f':;]1\Yp\`/ze98xXЩAG>sIGM6S҈SSE]-)!XYJ(xI ٫XAu =ܩ󶞸`'e:<9+hM{z͢iGq"ؓ+C/R %NMGj4O)r'Wd IȚu[M+u$ Mէ?>|lvKRm/g{rh\C- Ru$-_#_6 T󯬧qYe+ ar Tuv۳6K0opZNЋ Q>З#Wo'QA :*&֋tylݹ:Y?X I4 #jUEc,ŕ88_e3&nX1fuTFnSHHpD@Xܣ%p 3>&{̊yȶ(p5+$` diSyZ$PZvw+tVj#_Y #Y{|4 ̔ഥ#B=?:1VYDe2qw^Ϧ9MoZbF.oA]w| @0 ýXfᴻ=̩2s `*-0Ձ Y:9Le䞟j55*"WWέs "LAl70xK|]hHW1TfmćlAbEdDٰũxEc1M e_[QKY#4Md=mLb7ހM2iT8wC[vWYbC+;10-F}B}@C ؓԨ h{`䢿QqPTB&SIQGdFr HT9.&]%rȜZ"`@y~4/YvNw |P=Oˠ5ldlcUqSF _e 8YrnH{ p\G:$72 NJN΢Sf]fI]@5e3g `eRtgcLrH1pYXc\DB`B2 =O:W?r4'To|>4U$(fv!ehzS%팫}m5&6v5Jʟ8VT"TS c(~_:<#17 (K4\L~7=W.CfjZz`ɛvsj1| ~UԄ[2 bx/?~\;VAȓBSfWs7tͅ]n8hZ^pP=^mKMJB DjoR+4 ݗiG&rw[F{0ڌ S8C8dL8v-Fl)ÁTBO\=0v╛/r9C:n66qF ^xP XMv lkLkX`gʮ'yP“j\^qFT4JpB C./_[2&[ mW%x/UtQrF#ʞ]/$ x),©Εh3fPb#fdvD0raMa2MC!\u:.{ouZJ iU@g[C`X~> $c;iiI$}Ƹɥ"ݧ^Ȯ9 $'dW3?ug*>Izs;]GC3z?Ɩ1-ZD;4Rr&J\"1ZJJ qL T_)S;XCGL">A3&jΗd@HB˽3ap`"^@}t^gH>|m+Ð<`q#XU^#4#,C `F)6Gz-F)&W4:G m0c{e%*7{QBB֘Ҵe; n^ziQՐq#Ϙ4CgM J4カf/atvJOłC7n_Uv ˧7li " ScAx%RL6+0J-OtpNmjVt!"[# ަbB_vc~X()2\Qo6L|țhaβ:8t\A3F:9kmQE.Z!b#"X0)I `iM 6úғ|1!w&V6[tػƏ4ԟgiŸ(/>AO){eQ:Y%'n~ 'O"w;۱ a#f 4 o~I]!D* դTYW@XrAzxUngz>3hV?p Ӧ-.Y1[2 f6{#vVhP9%WZ?lʼn; |}r*"x8YhtPBMHʝ8H6xkƼv԰(0`9#;})S1|+&RJ/_߫baMJ!-6`&(J"UEftu+FьU>>??qްO$MH{"iY:o4VxSd$#y36n]fZWk1 4=?PIgN50`zє} F2<r(22Lq=ZI BeY(=f\5fzœu[Z;I, nc#OYI.ce|O3$}c= @kuɘ\)|9 +) ȱ>k] J- +wh[P/( \0yJw˱$b<ńo q -SO;/dOfdl'gߺbE19{[ŜŏZ: ڙ`$#0T1)L,Qu9a}+Qhz̡G1/JҐ^Ȃ<+(q9M􃀁|rKCJKJU-ZݰWPtha$аAN٣YuP~j~ދ+ϋ t*txSE>NrV)!c)pmӂÒ^ -<;D9ﲀꃌ ʢf3zNޑ_ KzlUqKh΁C5UjRr SުfT`C#{@fwYحwZ'kMΎ;݆eT+a#)0e^P b |T>7az[\ClP/& IX HE {+YPK>nvh"޿b myđ6ԙ:(fahaFj(0\ *k7h;BpFh1$3O F(q9->"Nq`RSBm |Z:.N] v $YJWeGFUy6vjJY^ b)d8[la0~ƺr=*z)m+gre:=lx4d#Cn=΍c7vE,iyZO\5HH#;ҘlQJf<&{8:6]dJXʦ!P>YUϓ0? i̐y]avZ 4К@>k]b X\:UR%׼eKl_?fn%Ǿ%- ȞA*()G E^kV(olW'ԓIzlu_FT<+1Op ! B:x ߓf l8יHI[=(/2`Tf\f K@A"Տ,; 4UEW*樲ӇyB\^t5\e4oJhYVQ8 vZHoˏk8Ml1ΏA|A ]X`J%`f7&ǨSl; | -FF0*!WmA!a0 (Dǝ3hKQGM<۠`q/-nTU`42r}BPh14Bk蚡t=;+L/;:H`Izh5(e gB gW*G,QGu8fm$H.Z[{Lo1a#;𳎙v/|C[GPl>){1 B\4u]c9ڷšҒ!TyMJ>|']$w.\CF2|ZQDFߎ!ЎzF`=D%ࠖr8䧾maFXla=5!(iNS1:-+ A*6ӏdS(H)ݫ D͘:SO 5 uQp'fiX]HkdKO*"D39k=+)'R7 ЖOUbSKMC,؊P>8m2!ķr.lvupr1]9frKP eB)K'*Z=J[J8t}XL:PBWzš1Cߎg&<-'ōýu0T#64e)AR4L  $4boɭZ%2.dZv.f ; GcXA]Rz)N=_ bu7 = o~MO[χ$hhͣ6ZJ/nDxӪs'TDlB@R jqFe`5=nM5dVs??yO.'ldu LU|4/XP5:rQ8=D)`n#NN~aԮK}FGHkyv6Ļ0qK5/vANcsAUJy{|R WL8/X % _+I8ai:7_~e'xLKÝzp8,I>kEɢf?ة.uG1k^/ӂzzmT&g 5LPJ&P NuP