azure-li-services-1.2.8-1.23.1 >  A _WIp9|/SxLZx?}K.wPԪ'aEuM YESo =+_ jR@D%C,%]gh*iO:vt'2e5u7<zި_(8d'8Vژ 3|4Ȓke\=m XmXы,t+ *B5H@-%!<,t> m{˫S؍\}f Y"Yj'x0b7b215ec24aa6c6298fb68b73c383b7237696c92a4981a614cdb1ba3778e1492ee96982c40a25641be668b04689a39380407b09Fȉ_WIp9|1J,Շ;?I\ȾC̃|jj4+'Sw+ceĝ6x튑^db*pCzq*@TAu-@2wDJmP[~F"TtWgdȝ|㘆 qqk8}oN5k7pq7d孡|+p>4?$d ! ?2; QcPP |P P \P lP PPPDP( 8 (9#:/FGPHPI\PXY\P]P^btcdáeæfélëuPvw\PxƜPy:z Cazure-li-services1.2.81.23.1Azure Large Instance ServicesSystemd services reading and processing the sections of a configuration file provided to the system during the startup phase of an Azure Large or Very Large Instance._WIsheep63cSUSE Linux Enterprise 15SUSE LLC GPL-3.0+https://www.suse.com/System/Managementhttps://github.com/SUSE/azure-li-serviceslinuxnoarchXc0d0 D~ X w u ( L K hF Q) 1 E 2(t ~W;<:Zf#x6AA큤A큤A큤A큤_WI_WI_WI_WI_WI_WI_WI_WI_WI_WI_WI_WI_WI_WI_WI_WIZ_WI_WIZݾ_WI_WI_WI_WI_WI_WI_WI_WI_WI_WI_WI_WI_WI_WI]ҟ]ҟ\?\6&]ҟ]d#Z)] I]ҟ] I_WIZ-_WI_WI_WI_WI_WI_WI_WI_WI_WI_WI_WI_WI]ҟ]ҟ]ҟ]ҟ]ҟ]ҟ]ҟ]ҟ^W]ҟ\s _?_WI_WI_WI_WI_WI_WI_WI_WI_WI_WI1faddd8a4949e31dba27c70302a17700b191550c1435041277c9db754687504d6ce990d6d7b0833df1f34d817b0cc45c9432e9ca9e7cfa57711b7d300b44148b067c3c849b5f367ceb0e0c93df721aee732da5edefd1bac22499bece3c43d47ebfa5e8578f025667feef622a95a85606e5936383caa254d28848b3e3a4e7767671ee968c7fef15f61c3194deed3de038741ceabd854e60e836a906f8f3579d0d074c92d424aef8ccc21f33c50ea84ac14ac130c4445e7bb98f15a7ac04588848546d5bd8c02be75a18ff83dabcbb17ca5909a3117b1584b4ec609531ca8fdc328b8e9015129f2689c49d3c88556b60cc4f919b943b695b739ec06335ca0eed78d1e754eb0affac50a15281687697a6240f075aa1bb9bc37c533b75147439851c4bcc96db58ce54b85945c21b97f94427f54b82baf29a8998ea6f033d8755f246ab937abbb23fe4efb86ec2ccaa43fd1d1279f9c32249ddba62e58a0c168f7bf7527fdd01bf0bde11512a5eb1d6b6a02029af7ad78d0fd4e2e96a736c3866b80501ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546ba8df93e41c44700318930911cf657c3c6a203d487636487395a4826fb5d0406701ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546bf26f9175edcb6bc38db53bddefeb3a4176e070a91b138d55099e8c516c6c3b98d98e5977fa085ae048af285f86b5e5bfcbddb80c45fcabb7a4ffbb1f5bed0b49e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855eeb1cca7c36c512ca87e87f980ca2801df95c2b26474f0b4c1b5ad6eee69d58263746af71e78e6b91aee17a341d016275a3c16aa00068f1ecdc9a4ad713dab1e532a14dded36c0595740c6f665cbc6895d64ac073dabe914580bb2bfb5f9a9d1cddb5cf5e69666e3021d68198d2d3f8cf69d273333c8f1953ddd36577084b5c895dd9e48e3284e4a635fecc668faf7a6d8e15bcd4f0aedc8e137c0021fda99e6fffa790dad0d440feebc3736d433352cb09b7eff0eec05d562f824a5569bac4dcaef873e8a76b838ce27a0441775f1ceac0d49582187a63f8cc5715678fd03450a6642fb7104ad1b108127965ba05816d5dd703c6b47d5ce48c3a336dd30ce03252b4525f5ef3b0dc10861d510d0e416f2975e044e250ad1dffadb7aa9cff8353934ed23627801c817788d811d0fd7e7bb7016a6f41d74c5a99cc7529b495c7ca450ef0ddcb76b1bffb1a6ca354d186ef055b349eafc97c140cf399d9b1eae1c33d53a2fcc1dd2fb1a32b86ec644bc3c234fce98a367fbfc69cf1c397b1dd79405378d247391fb0cf1efde82f3a269499901c229f20150a9c5bd98e8ee131a33f6670f22232307f092cb84607edc7838e9d85774786303f0367ba79d2a3eb0b55bf16385471d6fa7bf419b1d611807214ca0846e043cb2490af2d40f76daf015dc60d5070878bea8fa5a77672572664199483d1c0d7c05aaa748ea42b7a172c265211f6be46619904c56bb5c3ea354b41980caa991903e35849548cc4c28db01913b0f012689bf4d35ac86d947586ec99c21099dc1e02858101b0be110b7187b9dc12e25d6553a9e79fbe2e9eb9f054c58241543443a1f822ba51c14eb523cb4aac746e982c7a15889aded0bf378a317a414f728a2c7668fbc20f7419dfa6739de3ae100c8c17db89bda7279908a30679d3a654e172cf810b11253a23fd5816f69691fabb1f3f4b7155c6f78225f88247c3bfd1484fe84f4c3197535bd656da3a424cb947f8f8484b0a04da6ea12fd4511e9f854a30d7d5349f474e43429d365e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855435e016350e12967cbb5e3a8744beb1eca199ced6af8f01e39d58943fc59bef209aee6510de161d216da902cef993d8f5e3c2f24740c6d8feeac0420314b508bf2fdac2d4a72ec700e0402b53710135e359173f20f3b7e661fe423b22b6d22d195547a2e7652f3681cbaca8791610e4a34a5f61d226e29c71ee4f9f2b7b9eb353f4af9870f21114c5173908bb3b7cd8e195677f8f5676f3a11a6df858905b274d78dac7a39eabe8baf7b6cb27db7099aaaeb2f6d5876f2f5c0361a95f4966a01039ffec31756e447d3ce2b882c69ebf37e20b5d3287a6546dacd64ad78fff7419033e543322f46d697a13e15fdac53a8957ccab2ed007a5d59bdeb01af72bfa7b4ff2824b171de67535df386c01113c32b40b5d4574261808c018474c7e030dfcc2151bc6192aa3aa76446e2e8f300babfdb1586636b93fc68a60e307ddee4a2c8a08c081de3007046f75f196120584a3c0d20cccfbaf4fe006ea5ab02688872e56a6f787eee68d3be658c4387877739c1d5dbea657a8898f06a68a9c924637c617eaea69d1f62cbd2ee35ffaaa5f82789698fb6d3632d6fed148db8823a5772e205e76d32213534c82d958d4a4948be560c258ec24b0c5190ef714d1c9f92ef6a3e3bcda92bd247bad327bbd6ecbaaf039c1bb1553daf7c4068b1be95105de3078b2345829deaafe13521f72586741499c78ad97d91a281042c4759028658592e97450ce2d08a3c1cda2a947acc31c8e160980ec7a1d6326eaefe27dea11392c2d54deb73a9816de88b5a3f40b2cecc79b72159369e90521abecb2676dd5e19da10f91184a93a8ddf6aef2bb126760d61fbee9b83be954dac0c0155168f7c8538ed996914c9219bdf2c2d819908ca892dd6804dd95e0c3cd6eb53e7378cc438bc6d012d03735c1eaec75861291a9853e3e3e199b16573cf0d307c1dfbe4a505c0117b0c1e50acc1c1aaa72b54255ab1b7e62c3887f4de6f4c3676858197a1839db59345e0932d8d85aba4e91ffe3f135378b185b13615cf80d7dff1fc11a1c5f4def2c947115dae90904a0fbff08095b192ea9392bd0e73c503178a200ec71d78948de5baac7457e0f1f5ef7b4747ceaa5f622783a9d2767e8e2406fdbf8eb2be3a4fd8afd6f44ceda55895bea65d9671efaf850834c040da1b1ea67069f526563235660060932ee0a3b204420a117366f5dd0d724337f2baec8104f743f68fe7b24d20b774a5a57ccdef90b7343ae2afe20fa11f82a449ee65c8d4b4d2a87fefa6c4dbfe7e9bcb4a475d6a646f23d1626f658e5c90bbaec612debe591b6913ed67f74ea3878517493d71c022dce224e87b28667ec473d7eb83b96cff8fac5af1421dcf31eba5901a794d125fa1acc19acec698455719e5fc9ed48fb49994d12bedaeca1957269ce41e667e82096cd63a1e088dcc78d56a92666dd124c2ada8751233be3dd77c183c701db3175c2d46d3326867a067131bf3125385f70da69drootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootazure-li-services-1.2.8-1.23.1.src.rpmazure-li-services@@    /usr/bin/python3createrepo-implementationpython(abi)python3-Cerberuspython3-PyYAMLpython3-humanfriendlypython3-psutilpython3-setuptoolsrpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsXz)rsyncshadowsystemdsystemdzypper3.63.0.4-14.6.0-14.0-15.2-14.14.1_@_{_@^z^@^@^@^^^3^ϧ^ϧ^˳@^^U@^U@^l@^l@^l@^l@^l@^^@^@^@^@^@^^^H^H^H^%@^y@^x^x^b;@^`^Nt^8 @^@]]7@]҇]҇]҇]҇]µ]µ]]]o]{@]]@]@]c@]c@]@]@]]@]@]@]]]z3@]x]fl]e@]c] #] #] #] #] #]@]@]@]@]@\ \@\@\@\s@\s@\s@\-@\\,@\\@\\@\~d\~d\v{\v{\u*@\s\s\s\s\s\s\s\q5\j@\iL\b@\ac\5@\5@\5@\5@\4\3?@\3?@\@\@\\\\U@[H[@[@[@[@[@[:@[@[@[@[@[[[Q@[[@[~[~[{[{[v[ug@[ug@[ug@[ug@[ug@[ug@[ug@[t[r@[b@[[ @[Y[P}@[O+[M@[M@[D[CN@[CN@[A[?Y[>@[4[3|@[+@[+@[+@[+@[+@[*A[(@[(@[(@[(@['['["X["X[!@[!@[[[[[[[[d@[d@[d@[d@[o[o[o[o[o[@[@[[[)[5@[5@[5@[5@[@[@[ @[@Z@Z@Z@Z@Z@Z@ZnZ@Z@Z@ZZZZZZ@Z@Z@Z@Z@Z@Z@Z?ZK@ZK@ZmZmZmZZms@suse.dekeith.berger@suse.comkeith.berger@suse.comms@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.derjschwei@suse.comms@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dejesus.bv@suse.comms@suse.dejesus.bv@suse.comms@suse.dems@suse.dejesus.bv@suse.comms@suse.dems@suse.dems@suse.deaosthof@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dejesus.bv@suse.comjesus.bv@suse.comms@suse.dems@suse.dems@suse.dems@suse.dejesus.bv@suse.comjesus.bv@suse.comms@suse.dems@suse.dejesus.bv@suse.comms@suse.dems@suse.dejesus.bv@suse.comms@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dejesus.bv@suse.comms@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dejesus.bv@suse.comms@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.derjschwei@suse.comms@suse.dems@suse.derjschwei@suse.comms@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.derjschwei@suse.comms@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.dems@suse.de- Bump version: 1.2.7 → 1.2.8- Fix motd SP version for SLE15 SP2 images The SLE15 SP2 images still have the version listed in the motd file as SLE15 SP1. This patch updates the motd to match the installed SLE15 SP2 version- Fix printk timing issue This change adds 'loglevel=3' to the kernel command line. This is needed as a workaround to handing console messages as a kthread. In certain cases there colud be a process block while printing console messages. One viable worksround is to adjust the loglevel to '3' to only show messages for "error, critical, alert, and emergency."- Bump version: 1.2.6 → 1.2.7- Update prometheus monitoring modules As requested by jsc#SLE-10545, jsc#SLE-10902, jsc#SLE-10903, jsc#ECO-817 and jsc#ECO-818. This commit update/adds the additional monitoring modules for the LI and VLI images for SLE15-SP1/SP2 and GA- Move to rsyslog for SLE12 VLI images rsyslog is requested over syslog-ng for the VLI images in SLE12. This Fixes #228- Added prometheus monitoring modules for SLE12 As requested by jsc#SLE-10545, jsc#SLE-10902, jsc#SLE-10903, jsc#ECO-817 and jsc#ECO-818. This commit adds the additional monitoring modules for the LI and VLI images for SLE12-SP3 and onward.- Added VLI blacklist config for SLE12 images Black listed ioatdma and skx_edac. This Fixes #225- Reference commit for SUSE maintenance This submission creates a reference to jsc#sle-11453 and jsc#sle-11454 and covers changes related to the HLI (Hana Large Instance) project- Update the motd to reflect the new link for the SUSE forums- Fixed schedule type- added mirror tag for production implement production scheduler on mirror host- Added prometheus monitoring modules As requested by jsc#SLE-10545, jsc#SLE-10902, jsc#SLE-10903, jsc#ECO-817 and jsc#ECO-818. This commit adds the additional monitoring modules for the LI and VLI images for SLE15-SP2. As soon as the modules are available for older versions/SPs we can add them there too- Bump version: 1.2.5 → 1.2.6- Added obs service refresh back On change of the image descriptions we want a service refresh- Added devel package auto submission On master and with tag set the package gets auto submitted which also triggers the rebuild of the devel images as a consequence- Fixed yaml with help from ci-lint- follow up fix for only setup- Fixed gitlab yaml setup Use of only section was invalid- Run mirror_testing_images variable dependant Run schedule only on SCHEDULE_TYPE set to mirror- Bump version: 1.2.4 → 1.2.5- Changed hop host for testing images upload- Update High value for kdump in VLI images Assume up to 16luns per machine and 224M High from kdumptool calibration. This results in 232M which we set for the very large instances as default now- Fixed High value calculation in kdump setup The High value gets calculated to match the requirements of the systems used at Microsoft. The result of the testing leads to the empiric formular dump-high * max(1, mem-TB) + LUN/2 We know that this is not matching the various recommendations out on the web but this was reported to be working on the high mem systems used at Microsoft. We rate functionality over recommendations. This Fixes #203- Exclude jobs from schedules only the mirror of azure testing images is on schedule- Fixed gitlab yaml file Missing stage setup- Added mirror of Azure testing images Adds a gitlab schedule to mirror new testing images at 1am UTC(Berlin)- Added rsyslog to sle15 images There was no syslog package in the sle15 image installed. This lead to all kernel messages to be displayed on the console. It became an issue with all the alua warning messages that floods the console. This Fixes #202- Added system-group-wheel for sle15 In SLE15 the install of the wheel group is no longer part of the standard installation. This commit adds the explicit install of the wheel group in all sle15 image descriptions This Fixes #214- Add requested packages to SLES 12 SP4 - numad - libyui-qt-pkg7 This Fixes #208- Set NamePolicy to path for VLI images- Blacklist modules to avoid emergency mode Modules blacklisted: - ioatdma - skx_edac This Fixes #210- Add obs artificats This pipeline job creates the static image files as they would be needed in the obs system if a source service is not allowed. This is usally the case for production submissions. Thus the data on the artificats link in gitlab now offers this data and can just be used to drive these type of submissions- Set link naming policy instead of rule rewrite Instead of rewriting all network interface names in a udev rule set the mac based network link policy in systemd This Fixes #167- Add nicer way to select network naming policies This Fixes #167- Added IBM java 1.8 to sle15 VLI image descriptions Added missing java-1_8_0-ibm package. This Fixes #193- Activate service update for master only- Added obs github service integration Changes in the image descriptions hosted on github will not automatically update the service in obs. This commit adds a pipeline to run the service update from a hop host that allows for only the service refresh command through ssh- Include salt formula packages etc. in SLES for SAP images - Requested in jsc#11453 (Deployment of HANA Scale-up Performance Optimized Scenario from Salt (SUMA 4.0) - Requested in jsc#11454 (Automate setup of DRBD NFS-Share in SALT and Terraform)- Set OBS-ExclusiveArch in all image descriptions Images for the Azure LI/VLI target are exclusive to the x86_64 architecture. This should be expressed in the image such that the OBS team knows it and no extra resources are wasted by building for other architectures- Fixed unresolvable in the SLE15 SP2 descriptions YaST complains about nothing provides libzypp.so... needed by libyui-ncurses-pkg9. the YaST team has fixed the naming issue such that this should be resolved once and for all by requesting libyui-ncurses-pkg without the number- Added SLE12 SP5 LI/VLI image descriptions- Added SLE15 GA image description- Bump version: 1.2.3 → 1.2.4- Reference commit for SUSE maintenance This submission creates a reference to bsc#1157041- Reference commit for SUSE maintenance This submission creates a reference to bsc#1157040- Bump version: 1.2.2 → 1.2.3- Right name for vli sp2 folder- Add folder for SLES15 SP2 VLI images- Fixed VLI package list for sle15 cpp48 does not exist on sle15, instead the cpp package by its name provides is used. On sle15 this resolved to cpp7. This is related to Issue #186- Bump version: 1.2.1 → 1.2.2- Added Microsoft requested packages to VLI images This Fixes #186- Add retry loop to setup sbd device There is no deterministic way to know when the iSCSI device is ready to be processed by sbd. Thus the calls to setup the sbd device has been placed into a retry loop that runs max 3 times with a 2sec wait period in between. This Fixes #188- Add directory for SLES15-SP2- Saptune setup As pointed before, saptune supersedes sapconf. This is the right path to setup saptune. Update image descriptions not to install sapconf. This Fixes #185- Update LI image versions For the refresh of the images in the SUSE namespace the version number has been increased- Bump version: 1.2.0 → 1.2.1- Right sequence saptune One of the issues is that `saptune` is a different tool that supersedes `sapconf`. Then the `saptune daemon restart` command will always overwrite the profile with `saptune`. Two different tools that can't be mixed. Only one should be used. In case of SLES (not SLES for SAP), the sequence should be For SLES 12 ``` tuned-adm profile sap-hana systemctl enable --now sapconf.service ``` and for SLES15 ``` tuned-adm profile sapconf systemctl enable --now sapconf.service ``` For SLES for SAP, the sequence is the same for 12 and 15: ``` saptune daemon start saptune solution apply HANA ``` This Fixes #172- Bump version: 1.1.39 → 1.2.0- Change the setup of the login shell The login shell was setup based on assumption regarding other user attributes set. This way caused some negative side effects which lets us change the behavior. This patch does the following * Adds a new attribute named: loginshell * If loginshell is present the value for loginshell will be used, if not the default /sbin/nologin applies * All implicit assumptions for setting up the login shell got deleted This Fixes #178- sbd device to wait for udev to finish This Fixes #179- Bump version: 1.1.38 → 1.1.39- Consolidate all image descriptions in git Instead of maintaining image descriptions in obs we want to maintain them in git. With this change only a service and multibuild configuration applies in obs but the data to build the image will live in git. This allows for real development and review regarding changes to the kiwi image descriptions.- Restart iscsi subsystem after device discovery Only after restart of the iscsi subsystem the device nodes from a previous device discovery gets created properly. This Fixes #170- Bump version: 1.1.37 → 1.1.38- Added more logging to the process Add a log file /var/log/azure-li-services.log which adds logging information from the service process. Usually error log information is present on the systemd level but for checking the process, it's calls and potential further information it's also useful to have a processing log file. The log file will be created on the host and gets also copied to the config lun in the same way as the systemd workload log- Bump version: 1.1.36 → 1.1.37- Delete ineffective startup.nsh code startup.nsh is read by the firmware in an early boot phase. It doesn't make sense to write that file as part of the boot services because it's too late in the process. startup.nsh if required needs to be provided by the image itself- Extend storage service dependencies The storage service can be used for remote storage like NFS storage to be attached to the machine. This requires the network to be online. Having the network only configured is not enough it must also be online. Thus the storage service unit is extended to wait for the network-online.target- Bump version: 1.1.35 → 1.1.36- Fixed network setup for bonding on vlan vlan network definitions that uses bonding etherdevices were missing a switch to correctly assign the ip configuration This Fixes #164- Bump version: 1.1.34 → 1.1.35- Apply saptune startup sequence suggested by $MS Implementing startup sequence as suggested in SAP Note 1275776. This Fixes #149- Log command calls on the console Implements a simple logging facility for the Command classes and write the commands called to the console. This will lead to more detailed information about the command calls in the systemd status information- Load yaml in safe mode The default yaml loader is unsafe, thus we should switch to the safe_load method. For details see: https://msg.pyyaml.org/load- Bump version: 1.1.33 → 1.1.34- Start saptune daemon after applying profile For some reason the saptune daemon needs to restart if a profile has been set through the tuned-adm profile command. This Fixes #149- Revert fix for service order of saptune daemon It has turned out that the simple change in order did not solve the problem. In fact the daemon needs to be restarted on profile setup- Allow ssh access with shell Allow access through ssh without shadow hash and with shell. Fixes #151- Bump version: 1.1.32 → 1.1.33- Fix service order on startup of saptune daemon The tuned profile must be applied prior to the start of the saptune daemon. This Fixes #149- Bump version: 1.1.31 → 1.1.32- Fixed travis badge link- Mount LUN in sync mode Per request from Microsoft the location that holds the config file and is also used for the status flag and log should be mounted with the sync option. This Fixes #144- Activate SAP Hana profile via tuned-adm Check for the presence of the sap-hana profile and switch to sapconf if not found. Activate the selected profile via the tuned-adm control command. This Fixes #142- Bump version: 1.1.30 → 1.1.31- Reference commit for SUSE maintenance This submission creates a reference to bsc#1133162 which got fixed in Issue #138- Bump version: 1.1.29 → 1.1.30- Umount LUN only on cleanup If one service(A) needs the LUN and another service(B) that needs the LUN too runs in parallel a potential race condition exists in a way the service A could have umounted the LUN exactly at a time service B accesses it. Thus this patch changes the services such that only the last service, the cleanup service umounts the LUN. This Fixes #137- Load softdog module when STONITH is set up It loads the module and make the load boot persistant This Fixes #138- Bump version: 1.1.28 → 1.1.29- Fixup system-setup service dependencies The setup of the stonith SBD device requires the network to be up beforehand because the target is an iSCSI endpoint. This Fixes #119- Bump version: 1.1.27 → 1.1.28- Create /etc/sysconfig/sbd configuration Write /etc/sysconfig/sbd which contains the disk device name used to initialize the SBD device- Add support for iSCSI SBD device setup In a new an optional stonith section the configuration for the iSCSI initiator and ip address can be setup. Once present the process to setup the iSCSI initiator as well as the device discovery is started. This Fixes bsc#1125373 and bsc#1125372 and Fixes #119- Bump version: 1.1.26 → 1.1.27- Tracker bug references This commit is a reference commit to track the update of the package for SLES. bsc#1127923 and bsc#1127924 references the implementations done with the Issues #121, #120 and #114- Bump version: 1.1.25 → 1.1.26- Fixed ifroute file name to match size limits Adapt ifroute- file name to match the new vlan interface naming and avoid exceeding the file name size limits- Bump version: 1.1.24 → 1.1.25- Bump version: 1.1.23 → 1.1.24- Followup fix for package installer Concatenation of packages still leads to multiple packages passed as one argument. This commit finally fixes the package list handling- Fixed network service vlan setup The vlan setup used the interface name in its ifcfg config file in the following format: ifcfg-. However if the interface name is based on the MAC address that leads to a name which is longer than the fixed defined value from /usr/include/linux/if.h: #define IFNAMSIZ 16 and will make the network setup to fail. Therefore this patch changes the config file for the vlan setup to follow the format: ifcfg-vlan which avoids that size limit. This Fixes #115- Bump version: 1.1.22 → 1.1.23- Fix package installer zypper expects multiple packages as arguments, one argument per package, one argument with multiple packages is treated as one long package name and of course fails- Cleanup network service Delete unused elements from ifcfg configuration on suse systems * ONBOOT, obsolete if STARTMODE is used * VLAN, obsolete ETHERDEVICE gives the vlan type * DEVICE, obsolete and invalid use of self reference. suse only uses this in the context of PPP(oE) interfaces which are not of interest in the scope of Azure LI/VLI- Bump version: 1.1.21 → 1.1.22- Allow to specify install section per repo Update schema per last feedback. Allow to specify the install section per repository section. Restore former behavior for raw directory section, which installs all rpms from the given directories- Extend installer service Allow to configure multiple repositories and formats not only packages from a directory list. Specifically add packages to install in an install section. This Fixes #120- Added optional require_password_change attribute Allow to specify if the user password has to be changed on next logon. This Fixes #121- Bump version: 1.1.20 → 1.1.21- Added support for interface bonding Allow to setup bonding slaves on top of vlan interfaces or direct bonding structure. Because bonding slave interfaces comes with no ip/netmask setup the schema has to be changed to allow interface list elements without ip and subnet_mask fields which were required elements before. This Fixes #114- Bump version: 1.1.19 → 1.1.20- Submission to SUSE:SLE-15:Update This commit tracks the submission for fate#326575 and bsc#1105612- Bump version: 1.1.18 → 1.1.19- Fixup createrepo requirement createrepo is no longer part of SLE15. The successor of this package is createrepo_c an implementation in C. Therefore the requires statement in the spec file should be changed to work with both distributions: SLE12 and SLE15.- Support MTU setup for standard and vlan interfaces Enhanced the config schema to allow the networking attributes mtu and vlan_mtu as optional arguments to configure the maximum transfer unit for the interface and/or its virtual type. In addition add a differentiator for the VeryLarge instance types in generation 3 and its successor. For Gen3 VeryLarge instance types the network setup was not yet defined because we haven't started to support this target. However the successor of the VeryLarge instance type is similar in the infrastructure and boot compared to the LargeInstance type and can be covered by the network service in the same way. This Fixes #105 and Fixes bsc#1120522- Bump version: 1.1.17 → 1.1.18- Submission to SUSE:SLE-15:Update This commit tracks the submission for fate#326575 and bsc#1103542- Bump version: 1.1.16 → 1.1.17- Update package build due to guidelines- Bump version: 1.1.15 → 1.1.16- Tracker bug reference Update of the package is tracked in bsc#1119702- Bump version: 1.1.14 → 1.1.15- Fixed group processing in setup_ssh_authorization The change in the schema to specify group names/id was not handled in the code processing the setup of the ssh authorization. As there was a group key before and after the change in the schema but with a different result and used only as parameters to a mocked grp.getgrnam() system call the unit tests did not uncover the issue. This Fixes #98- Bump version: 1.1.13 → 1.1.14- Write workload log file In case of a deployment error, a log file in addition to the status flag files is written which contains the systemd service log information from all services ran so far. The log file is written to the storage location from which the yaml config file was read from. It is expected that this location is writable and offers enough space to store the logfile. In case of an error writing the log we will treat this as "bad luck" and continue with the cleanup. This Fixes #96- Cleanup code to make flake8 happy The new version of flake8 is more strict on code checking and complained at several places. This commit fixes the code smells such that flake8 is happy again- Added workload status flag file At the time of the cleanup service a file named: workload_success_is_true or workload_success_is_false will be written on the storage location the config file was read from. At the time this file appears it's also safe to release the config file storage location from the system. This Fixes #93- Bump version: 1.1.12 → 1.1.13- Refactor group schema The description of a user group must be connected to a name, whereas the group id is an optional information. This should be also reflected in the schema- Allow optional group_id in user data This Fixes #90- Bump version: 1.1.11 → 1.1.12- Bump version: 1.1.10 → 1.1.11- Replace pre/post section with descriptive comment- Fix typos in spec file comment- Fix inconsistent cleanup service The introduction of the pre/post scripts in the package which runs systemd macros to delete the services causes a core dump on zypper and prevents the cleanup service from actually uninstalling the package. Thus I suggest to delete those pre/post actions from the package and leave this in the hand of the cleanup service using the reset-failed command from systemd after uninstall of the package has been performed. This references Issue #88- Bump version: 1.1.9 → 1.1.10- Properly handle service stop/restart on package update or removal- Bump version: 1.1.8 → 1.1.9- Allow to activate/deactivate the crash dump setup The crash dump setup deserves its own section containing the optional high/low values as well as a new switch to control the activation of the setup process. This Fixes #78- Bump version: 1.1.7 → 1.1.8- Follow up fix for mount location checkup Provides a umount_config_source method in the Defaults space to allow to perform an umount which succeeds even if the mountpoint is busy. The umount is performed as Lazy unmount and detaches the filesystem from the file hierarchy now, and clean up all references to this filesystem as soon as it is not busy anymore. This Fixes #76- Bump version: 1.1.6 → 1.1.7- Check if mount location is already mounted Call the mountpoint command in mount_config_source prior to the actual mount and perform the mount process only if the location is not already an active mountpoint. This Fixes #74- Bump version: 1.1.5 → 1.1.6- Accumulate errors in user service Instead of exiting at the first raise condition continue setting up other users and raise with the collection of potential errors. Fixes #71- Accumulate errors in system_setup service Instead of exiting at the first raise condition continue setting up other system components and raise with the collection of potential errors. Issue #71- Accumulate errors in storage service Instead of exiting at the first raise condition continue setting up other storage mounts and raise with the collection of potential errors. Issue #71- Accumulate errors in network service Instead of exiting at the first raise condition continue setting up other network interfaces and raise with the collection of potential errors. Issue #71- Accumulate errors in machine_constraints service Instead of exiting at the first raise condition continue checking other machine constraints and raise with the collection of potential errors. Issue #71- Don't raise on missing vlan id The vlan setup is an add-on setup if a vlan id is given. If it's not given the other network components are still valid and this does not justify create_vlan_config to raise an exception but just skip the vlan setup- Fixed access of unbound variable For the copy of the ssh private key the location providing the key is mounted first and umounted when done. However the location information from the mount is unknown in the scope of the final block performing the umount. This Fixes #70- Fixup system inconsistency on module loading Make sure that no services module code is loaded from disk after the cleanup service has uninstalled the azure-li-services package. All follow up code after the uninstall must be kept in memory. This Fixes #68- Submission to SUSE:SLE-12-SP3:Update:PubClouds This commit tracks the submission for fate#326575 and bsc#1103542- Bump version: 1.1.4 → 1.1.5- Allow reboot of the system via kexec This patch set is two fold: First it adds a reboot flag to the status report and extends the cleanup service to allow for reboot of the system via kexec if all services were successful and at least one requests for reboot of the system in its result report. Second it extends the system setup service for the crash kernel memory setup in a way that the high value if not set via the config file is calculated based on the amount of main memory. If the preconfigured values have changed the system_setup service also activates the reboot flag in its status report This Fixes #64- Fixup saptune startup sequence Regarding a discussion with Peter Schinagl the sequence to start the saptune daemon was wrong and is fixed with this commit. Fixes #65- Bump version: 1.1.3 → 1.1.4- Update schema semantic to specify ssh private key The former ssh private key specification was based on a custom file name and a target name for the key. The given file name was copied and renamed as specified. However the renaming seems superfluous and can be avoided by specifying just the file name and copying as such to the right place.- Refactor reading of ssh private key Instead of specifying a base64 encoded private ssh key string as part of the key element in the config file, we now just read a file path reference which is expected to exist on the storage location from where the config file was read. The referenced file is copied as the ssh private key of the configured user. This sets the config file free from any secret data and Fixes #58- Fixup runtime order of report service Next try to make sure the report service runs before any getty@.service is called. The getty@.service is configured to run after systemd-user-sessions.service Thus we should be safe if the reporting service runs before systemd-user-sessions.service- Added reboot intervention on Very Large Instances For Very Large Instance platforms the reboot may not happen without operator intervention. On EFI systems this can be done by an efi call script: startup.nsh. This method was preferred over setting a BIOS boot option through the Bios menu by the Microsoft ops team. This Fixes #46- Seems like latest tox version is broken Pin the version to 2.9.1 for the moment- Setup start of saptune daemon and tuned service The start of the service requires the sap-hana profile to be installed on the system. The hana profile as of today is delivered by a custom package from $MS, installed via the azure-li-install service. Thus the system_setup service now runs after the install service. This Fixes #52- Call kdump calibrate only when needed- Added kernel crash dump setup Allows the setup of custom kernel crash dump values from the yaml config file. If not specified the kdumptool calibration results will be used to setup the high and low memory range to store crash dumps. Please also note that the image comes with a pre-configured crashdump setup in case the kernel crashes before this system_setup service has done its job. This Fixes #50- Added samepage and energy performance setup Extend the system_setup service with the setup of the kernel samepage handling and energy performance selection. This Fixes #54 and Fixes #53- Bump version: 1.1.2 → 1.1.3- Fix service order for storage unit The storage service has to run after the network target has been reached. This Fixes #49- Allow import of private key Add an additional optional sub section named ssh-private-key into the credentials section. The section allows for a name which is the base filename of an ssh private key and the key value encoded as base64 string. This Fixes #42- Bump version: 1.1.1 → 1.1.2- Added system_setup to report service- Bump version: 1.1.0 → 1.1.1- Make hostname an optional setup- Added system_setup service Along with the service the setup of the hostname has been implemented. This Fixes #40- Fixup success state for optional services This Fixes #43- Make sure report service starts before getty This Fixes #38- Improve error handling on mount_config_source Provide more detail on the used sequence of mount calls and their errors- Fixup ssh files ownership in user service ssh files must be owned by the user they belong to. In addition the home path of the root user is not located in the standard home directory of users and needs an extra handling. This Fixes #37- networking is required- Update schema constraints per review- Added DVD fallback mounting sequence Primarily we mount a LUN by label, but if that failed a fallback mount from /dev/dvd kicks in. Only if that fails the overall mount attempt has failed. This Fixes #13- Added schema validation for config file This Fixes #31- Bump version: 1.0.0 → 1.1.0- Make sure mount point path gets created- Added storage to report service- Added machine_constraints to report service- Added free space validation- Added storage service Updates fstab with new entries from the optional storage section and activates the new mount locations. This Fixes #10- Separate issue report from cleanup service Put the report code into its own service and handle the dependency chain from within the systemd unit files. report runs after all services which creates a status report and cleanup runs after report- Simplify dict access- Use binary multiples of bytes (powers of two) Storage sizes as we work with here are always byte values- Added machine constraint checker service Validate min_cores and min_memory constraints on the machine when booting. This Fixes #30- Added overall state check for cleanup service Added check for success state from all services and update the /etc/issue file if one or more services have a failed state. This completes and Fixes #19- Bump version: 0.4.1 → 1.0.0- Handle missing credentials section as error If no credentials section is specified in the config file this should be reported as an error. That's because in the image no user login will be allowed and therefore the credentials setup from the config file is the only door opener and mandatory for any subsequent work with the system. This Fixes #29- Fix unit test for install unit- Better name for the user method As create_user actually creates or modifies if the user already exists, the name should reflect this- Move status report directory to /var/lib- Fixup user service for handling existing users If the user setup in the config file already exists on the system, the user service failed to add that user as it should rather modify it. This Fixes #25- Handle missing packages source as error The install service did not handle an empty list of packages sources as an error and just proceeded without installing packages. However in the scope of the large instance setup it is expected that there are packages to install and if not this is an error condition. This Fixes #26- Fixup ssh directory and setup file permissions- Let services report result status In preperation to operate on an overall success or failed state depending on the result of the individual services, each service should have an easy way to report its result state. The StatusReport class implements this in a way that each service reports its state in a yaml file written to the directory provided by get_status_report_directory(). As services are called by systemd and will run in parallel, one file per service name is created to avoid potential I/O conflicts on write. Issue #19- Added cleanup service After all services got called the cleanup service kicks in and uninstalls the azure-li-services package. This Fixes #12- Ensure /etc/suse_firstboot_config.yaml is at 0600 This is related to Issue #12- Cleanup of config file format Per discussion this commit adds a revised version of the config file format to become active. Basic changes are: * networking moved on toplevel * blade section gets deleted, sku moved to toplevel * storage section was reworked * new section machine_constraints contains min_cores and min_memory values the machine has to provide- Bump version: 0.4.0 → 0.4.1- Fixed rsync command invocation For pattern matching a shell environment is required- Fixed call service unit Fixed wrong condition trigger file reference- Bump version: 0.3.0 → 0.4.0- Added package install service Allow to install packages from local repository This Fixes #7- Bump version: 0.2.0 → 0.3.0- Bump version: 0.1.0 → 0.2.0- Fix service ordering for network setup + The network setup needs to be written before any of the netwroking services are started by systemd, or we have to explicitly restart the networking. This order is only guaranteed with the network-pre.target- Fixup sudo authorization Setup of sudoers and admin group must be done only once- Allow for multiple user setup In addition more elements of the user can be specified such as user id, group and home_dir- Be more clear on call argument- Update runtime config key description- Added script call service- Added User service Creates the configured user and its access setup for ssh and sudo services in the scope of an Azure Li/Vli instance This Fixes #6- Bump version: 0.0.6 → 0.1.0- Refactor misleading class names Using Li in names that covers implementation for Li and VLi may lead to confusion in the future when we need to differentiate between the two, the namespace should be free for that purpose- Time never stops- Refactor network service Change on the design to allow for running different code paths depending on if the instance is a LargeInstance or a VeryLargeInstance. Apply the instance distinction with the network service- Added azure-li-network service Work through the networking section of the Azure Li/Vli config file and setup the network configuration for this instance type. This Fixes #4- Bump version: 0.0.5 → 0.0.6- Fixed system unit systemd requires absolute path to binary- Bump version: 0.0.4 → 0.0.5- Fixed spec file python3-setuptools is required- Fixed spec file template Update to common source tarball name- Bump version: 0.0.3 → 0.0.4- Update spec file Create common style source tarball- Bump version: 0.0.2 → 0.0.3- Build changelog from git history- Bump version: 0.0.1 → 0.0.2- Fixed bumpversion config file Wrong path to version file- Update per agreement on config file name- Implement config lookup service The implementation is based on mounting a device by label and lookup of a pre defined file name on the root of that mount point. This Fixes #1 and This Fixes #2- Added Command and Path class Classes for command invocation and lookup- Fixed spec file source directory name- Fixed spec file source name- Added config_lookup service Implementation is still incomplete as we don't know how Azure presents the file to the instance.- Added RuntimeConfig class Implements reading of Azure LI/VLI runtime config file- Add package templatesheep63 1599556050  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOP1.2.8-1.23.1azure-li-callazure-li-cleanupazure-li-config-lookupazure-li-installazure-li-machine-constraintsazure-li-networkazure-li-reportazure-li-storageazure-li-system-setupazure-li-userazure_li_servicesazure_li_services-1.2.8-py3.6.egg-infoPKG-INFOSOURCES.txtdependency_links.txtentry_points.txtnot-zip-saferequires.txttop_level.txt__init__.py__pycache____init__.cpython-36.pyccommand.cpython-36.pycdefaults.cpython-36.pycexceptions.cpython-36.pycinstance_type.cpython-36.pyclogger.cpython-36.pycnetwork.cpython-36.pycpath.cpython-36.pycruntime_config.cpython-36.pycschema.cpython-36.pycstatus_report.cpython-36.pycusers.cpython-36.pycversion.cpython-36.pyccommand.pydefaults.pyexceptions.pyinstance_type.pylogger.pynetwork.pypath.pyruntime_config.pyschema.pystatus_report.pyunits__init__.py__pycache____init__.cpython-36.pyccall.cpython-36.pyccleanup.cpython-36.pycconfig_lookup.cpython-36.pycinstall.cpython-36.pycmachine_constraints.cpython-36.pycnetwork.cpython-36.pycreport.cpython-36.pycstorage.cpython-36.pycsystem_setup.cpython-36.pycuser.cpython-36.pyccall.pycleanup.pyconfig_lookup.pyinstall.pymachine_constraints.pynetwork.pyreport.pystorage.pysystem_setup.pyuser.pyusers.pyversion.pyazure-li-call.serviceazure-li-cleanup.serviceazure-li-config-lookup.serviceazure-li-install.serviceazure-li-machine-constraints.serviceazure-li-network.serviceazure-li-report.serviceazure-li-storage.serviceazure-li-system-setup.serviceazure-li-user.service/usr/bin//usr/lib/python3.6/site-packages//usr/lib/python3.6/site-packages/azure_li_services-1.2.8-py3.6.egg-info//usr/lib/python3.6/site-packages/azure_li_services//usr/lib/python3.6/site-packages/azure_li_services/__pycache__//usr/lib/python3.6/site-packages/azure_li_services/units//usr/lib/python3.6/site-packages/azure_li_services/units/__pycache__//usr/lib/systemd/system/-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:16387/SUSE_SLE-15_Update/9d8e7a902cafabc8971097aabea9c5c7-azure-li-services.SUSE_SLE-15_Updatecpioxz5noarch-suse-linuxPython script, ASCII text executabledirectoryASCII textemptypython 3.6 byte-compiled  !"#$%&'()*+,-./0123456789RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR⇗\K$wutf-8a2c170b0b90a96eb434c3bcd548302c345558d812ff134ccdbd867e0f7cfadc3? 7zXZ !t/7yK] crv9u+rجfv7ILPpqah3'anZLjEj1%[ݕj d@1ql%|Wq~~y)! H,agNB/kKPv>=)]CmW=55YcX18>5vyOTB⛄UǢD]s1~~F2O__";ÜhSo000xo͊JR_EL;!=d?McL\sS?>-KQM-k=YIJ.%K *,]@WKoffR 8`߽tʡ6" B8E{dh_|GtmVlTq9[1 6QaIzg/@@wYSXM^Ok"nyM&'CfNӨ%#J+AccɰgI=Dsc5Ɠy6⪋OBlOn-a=G<ždh½GPrrY}!k6jCƪ%/86ESt9Eo hR!0 1!CzlPD2gQĪ+-$3)eXSO> Ϗ vM,@L#L k(+.vN |I+MmPuc-cY4 PݺD˿ ŸD  ސfxzBLg1~@2|@u:pTH"-¢͖De̺.c ? 5b$Mi:8qp׵.^&m =*`?!A\9vQ1| xdux8!5~b渼Z=A n;f-3 7Ͽͤ2"@z4" xU2K6 -#Fjt(W=Af0bXVo3uwOz&]0`hcA ݖ j=I :Oj#1<( fT L'$C`@^uuȪҟ} oe-b;e|][3 ab4.H?1IM4;ڃ%%W&9w%>BU%H$5w3D4R5Z| vtL{]?Veٌ8_zw=LW*KƦܽRVD.>FWs3}0,k^Gnӟ=LsP 16r A:}u9)QYpuieРœSQ6 ~B+8J/ tz&%hyaOpY^iY,@_vl,Nj0L[>/F!e3O<ּbilKw0X@)s* bWN+DB2XVqƛ)3/(z yz3ʵ"}jiG1,WSψܝ4X|  Ր4<E<ى"p\V{ub/Sgш6O^17SϽKIOwҁ@~ZDKV2W:P2YKc@hpAco`(gK@B؂]:,HOˡ |D32Piõ|ٹ3ͼ(\w]X{) <$Y-= M0v)pZ ͢dޖe KmЯNB-,zRfw/ szNàjT:]":w&]9Rq_װmL&DVVBuQӆtNŮV)p)c!iGh1^@]l[G-L 94yѲLD"aN=CX8]N$tWşkٍ=ʝOU<שDj…DBALLw ƓC]6F8-L@Ӟl%Pb 2UKA>2n@AUA9={~7ax2XՎ|1tmX᧙uk𘨙'>3 ~ TH3=~VASDa ,k'TmJ6$PQNRE)B|JX%0YE@qC;$^Ы /x, iteȨe Yo8l*r(wFLy!Y!zDg N/L[1| z\' ~ӨFF-ThjsOM ʋ !#r.^cʽmPTp_9&^G`-$檺 ) ^4L${בP24KmϢWWގ#{5cp8QG8Z7}$xEF yy-;3{+:JSYK3KvAӃ¼a2(Hy!z|&HCH4"(z;Rt7X$dK?Eqihg^L wS!]^Tav`Frb\p32] -:G! @D,u-XMu }Եg9BSp"MtR@wr.Ƭ.o{~phjl֦X穖CR ٽ{.yK v+b;[Z\k eˇIO_jv T,GwBTt2_6֬%Y| ^,F4w*ODGQ>zθ1gT'PYXw4&bwmF@mFL F=)0gc7 ,;kK=O w\/25BpMǖzH#I&0Bj|Q]\Z9=d/ƺEyRPwa'p̄ϬJ%=ڷX 9ϣG 7n'7r ܒJ#K0oc>Cma~VCEibAݚp)R3`:>%[Yϻ&4٢L;1̞-j[/㪐HH[ٕ5qtmru?͆ l؆wǼҗpG i||r: _L]o1痑N!v`8ņ\g^feBBC`x-VhwU}aNw l3kR׃l)hiz_Ǵ4aݟAW(o^NH,ņ:zO-8+^oT&fBꫂL@;eZ rO5GYz"(O :KF-RSV嶮dA kfTa]0;f!T DDElT@{ fonR8Ek3O.!&#v?#;Sud!2~}>3CmEʿַ+ PEGC9) w"; n҇,0+KUɪhqMM(쫴Wfg90'' f+i ;P&NcӤȠ l Nm1i\:Pq$$KEŅ9r5 F%7z$e妐4'"s&J-j6QBj(pnh&+v3ABJe-PKf?D}BE!N%e6T5`J,ؤZgMm}܍?vF%?Cy*7)>jB_ 2i@M#(Ma8ZYZ^+[!oyHt=`@[5`01X5 》]Ў$Zax{L2N-\8قDdpqweމjhPە04v?(a;{9@δc4BZJ_7RR|.!iKW.(?hm^דu&-BOFx}"'!Z ^ôwklk2*z"WCCJFp\[;PNjKdrY31UnGb\nZ LvЫhDb_fk-WBh L;S&; [AM@կ6~!b+۲v8|*B})@ԦT$*;(RKNɟYu[3: ?S.pRSg!௫'tB}%5_2ݍs.M'!FI1+y:ú\ՅXB{vNiO|2U}HY) G.]nUܟ⨘66ѨU~jH,%wYa:Mv~9#qn\H[R-+C{4?}8~ , z>ahF׋':s9O$}?\ w_ Yv_3p`O@M"frC@|KF+Qn~HWOE>p >UtHô N -.'cFf]VN8{DOh ?j%m8t7Oy~E\;L{j.FarΏF+ JzGd}I7@PMjX?L.ME=ESQ`Nyzp&G+۝;5hWw$`7YR_}$Vk37ӓQ? f{˯qZK.8/9uҀZJpϾ :J #޳Qho삵D6V&O1l`~7 RL~͌:)H-+0Ϥ429UGTfm^RC3@`L;Z&Ze!f-.27(>6գ`yt<@O4q;E>CdUwJHgɌ}tA([&H-G*{gєJLI B.ļU]y}oF{-LkU#{?=NTuc2Pfi.%[MH?P-$8 @ǘT뿈nBPM Z'ܹ$=_} ~|(yPf\2$TU= abg$+/L laen5a򬱆j. ^X֞(,EؗZ26-Y632|Yn@eyHdЉ9CCeK t#|\MrvOm'isq Β{F~-6f*Ƀ~)xԁ[F+f  /*lbJ[+k]KOQ8&ݫRR(%lTF#.K47k?D(i5SZp_EP 1@nR=VBF1{~Wppb4h->L1L2VkEk#ݱaġ?T2%R>n& ߵCĵv9 CH]SEbh |O!\J EgmRZG/ٯ#L</`EQs^1 @%WSjN!(XS(~x$Y5HvЦ`.w^}[(]r* ]IHn Rv}G0z?NDyhՔ}V/hI:RPpe|z ƧԱa"lP־PA śW{FR+A>Oi0UU:ZO ymȤrAfs@}Mx#%-k?V9+ l ,{&=(E ke;>#Bg%}{XU\?\'XylA؊#NC-k0p!yx8rɬћ 3٤Jr+ Ⱥ9p\'Hѽւh:pߖAvf3aQLM7@2#2n޳괤#1j 4=D$*2w̕i?{a%[TJ3C#:&}P6hs EPtCcwZ΢͸icM`xHY^radGUls9HN6Tl>bNчBFz` xY1C'N~ 'fxlrݔVDԾLI!sUJj :^kLo3%-qDbK9cdyZ96)Wdk`3{Q8XL*>2βJV)S $a*)vNm >9PCXZ_b%Cڍv^{w|LR ;Yxi9 _ $SfZ`f D%`t`[- *-7{HPIACtQ%ăŝ 6,)$@߬|PEv J'mJC6H>|h5#sn&Ї~A Cȕ0Y~p i?Nۖn&JAsZ=% CrʓXI<~͎~Ds:łGwf2wS#|AdzM{m,jTDBnx7E.1]7r64)ej5fULM{"3I RT޾U D_f0FFWMrw 3@XR./XTPorc~ )G()2^.|B;@H6ȞpʳIְL+K@ϵY?#hLڍ`Br5/Rb;=R ?l3޺r3l%8a] Z\ݤ|U+B<-&f'}FA8^KϓU@@CwzǛ+Ѳ=+)߄ZsF4W@&%U7@w,lpז-JT9x0.ϧcMHGXe&q wM8)ZSoϿ[\6y6ONMg'R=3qc;@,0x->562B+k l2dlBi|эdFďr,ӯ_b@FkfSBj@:@R.gRk9lcҭF+2Y4n;$F-7q:xG^. %Qk42Ϙn<释3pM`y.8k0htgۨ­1WG️72j@t/O|u6RjTIx^x7ueo+M~pU\DҮgtw^¼qKI(ZLf,|lǘi 6xNst}aCe5AGh!)(o0e&8<䘱aFW^.J }'.wWӺ*k8G6ܽV|=Hw4Fy'S>cO^\4 It2dRUoM85eE6i0!O4dIGxcuuډ!jEjwǓH1Ȟ4y?S3g>C U ˚[ڼTkpnߦ7T #{#z#o#83'dL]Wr .)ퟖܲS'⨥r[0 :VhXBvbNhx>H\!6>*2>W!F⅚`MU ߴ4XR5x=0(jؔ7Y.gg2SߥY QS*V]k4{@j22 d^!<)7&۔cF^Q`Vlή i~:/KM ~*,}ZlLHTܶ?O;< NLωX Zѝ2Di/T& 5NE pE.zFnE:ZfYdőSg\V_Vg$݀Ipnzh EHL;ma :R`Qn5BD ,v u?!wgzvre"gtG)O)_!i!g )T~Gh@4xW\PN~ygNWˮCkak/)76fap&>Pu?4  k0/3%g\ɜOes.Ǡ//zfjoc#!GR(U%liYa`r, `>.Qa@)}3' h~P7 ~sIcI88gP`kgȇd,v2`jaAZ>KG{%z4؉B7qU߬zR<N k{pgۀ6onee][ 8~eb` d͗uЎ9n %_D=۽_㑡3iwkKRqs#s;k <٥JwI:[Dj V^Rc7>/.Kp &ꫦDevc^~*?apcǡ$l͈m\v}/ʝs(E% !|m57NK*țtFW(fyRE'XIkrĭжpƠlT, "ǐť]Yxe4NAY,oO1cr>k")yu]S6qʞ6h,CH6ڪn|` y\b:`<<P5g}-F2X+x!#Pyq~=wb|ʝ5On86^<lq('v4p.9h3jw_>$%\@#㺣ĺK"m>|jQ4(ᡄg J}b=0 q,oLY$l92#)w-ظdSj'JGO}کbvf@w 30WQ~f>U z!MP#MXZw ec<~)&jF-V7񆻍 [&)mn1k6=NlתC-S2/7A^.{0@Xy=o"Y_H'֎A ò9k֏fA8im guR'Uwz2ʅ Z`2#mL(2LAzM^72բ]5^E"7ȝ2,N-9FE KN*R T9tǽ$H>ڵk2"t|ҶoA6›No i(/Tfg*m;hDx4k9"7TZ;;7ՔwV%hTQp(+>bJAב}j>l@DNd*?66jT7ٴǒW Ɩ:нSh"es$K,Ɗ1[L*BLm M}t.\wG9)`v!X |ifMQ&w\yz8t_{RG &a 9z=B,CU್nY1Ovs~lpLܿ6_?v;۱ɗ|"Tjy8"]~C:tBH 4qoG(Qk߳ &Y1z u9*=Azuӎ{(uhPo8~ 6Tt<y`"Y=ґK;A唠[EhN&YHRP-P;~t Jуae5cwܤ[3Cg! FN0Ga`R14P`YG! ƒ;%8dͅY+0IR"!6_Dwm *p37t;zzLJp]9MF5Oqq6!=/ʞ*>[N 7Mw 7TF4`#j#Cdt,`=Mr}*:a5qv`7 ysS4#!|,*Nv^;ס?FgCDMZiY?%ϠSR56*;ssizȈG]*g\~A%!-bR5h7 Êi-4>l<z`xYXz7(^Mk$~> =Zf=E{~JUncG^ܔ \ &r nl2A]۳*":wKC%t:ڶSc!B My 1\A2 <NwBh!*Dccջ+ ,ե> P) M TX2ٰd51S§Ϩ~`ͫPE%guzQ o̞s0TE(Y2=A[ɟ^"CaPGoQBӝAry<S%ƢQXFH~:6S6?~[dr4"TP"2ôܼ⯆h)Ű([Fv8޻3 I%df0Lǖ ,L'\wb߶Q(n/4VaeMہX^BBV.u'deT'vwuRFM:ROk6iќZҧPVAU$+^H-K(3$K y=AkA!(2jɟR83\yԎ"87tr5HH|{ uAygs=ƨ[D'*tkeZBLD#QY ʮ覞1rn<iǺC7F~$Ž^gU}a]qt-HB%-\P4қF0*߶ehavftwID J)eIq!'y|`P/b/Z\R53FXA] mTn|I-)X`eqo<s .D ?N]x4k7C._Q.%Z#Eֳ[ S߸[%MMQE#N+tZ#1$>"|?ΰ vK.Ex?¥;?s݋D _wcăV#ޝzעZhDWWDz7ntRrfGDGxӇ^ׅ!qLi('N7崔((筅<'ygCX )KZ6z2{b`fQ@9 Kg0"gGT&5AzW.oY&3Vjk$~TF]R*F8" qlF݂jg4"1b>Tmg s5VdР}b,>?{&%o}sfDiItH~ }`.2+ҟjwQ}`A9p<72 saDszh Sc#:u4jO6n'J|]oI怌ecV=9dn4XYomSt &aQ KpV<^ FCDbCf.-hYõGڔ{ɴQ%tҔzogl2ExgX=ʯ,_ُ3'eTƅć OʓWK-ۦ.TÄA^rT}N$2>(M +憮Lő`ISĦ"-fdΐ(> ͤQUegԞ[.iҤ}""MpfK9Mdj㼗_1(v,sotyQtE=kQlTv*?8Dy-\"jLFSU,/ IʢjY\o"P_X%릾"y]> %S@̶n<,];:7S]8xKbݛxoH.([C2nHMb/k*ZVҦfK* * mz[+7uT09Sa$+oҿSʚBW^!Va04P&4(%=1ˆ4rM|@pI5dÍH}z8Dnib HBc.ف72 !ǰTtpB^;,7 b5Wzk7"4[RٻcyM.MPe NCӋhD$GcWa7'S#qΥyR/Q>ⵙnjŻ/ƫ5s* ц:r?}7_[;4C~{ qL^5! I ;} pRKLOWnq*P4um T$'yaz($ʿ`% {N($z#Nf>ur>ᚗ>py>s& !qξ,W7qG_|k#ԩwNȃ{`ֻ̹J7(aIrPB{؁yZןo)KyGq,{ lMnYOPVTT:sA=cZQ5d |{y: c1QI;:IwLn# U ڙOrL4&XK[VxVr@ ,q̼}M7Tݑ@{qXC.ljLhj&Nx^zzWo-P0տ jqtfӃa?hTz9oMc/ߋC2ȾR^[`债^']wN-oWpσ֔RD3b$v?a1КW9B+Sޚ"̯]K ^vP"Yjp9:Gt:lTYUnOeh;˳̛3TRǸ:瑣H$r?bjȤ+9Ϩ{gTE)d‡9ݼOHY:-vZ\ܣ\J*'`J5 WqTiq} *.i3&8Fֆ#lQgHfDh6]SoQR<3׾/T|<5WNiglUn?&Yl-@"爘5:xMdR̫cvx#8Xt7JLlS%H }[XMޟY5l,l@H׊N8T,*lΐ#rU!ݨގۙrɹ챀rUA}u mǡPqCG9d[+ƎSlhǀ0j*yp <)y|٩j$CHPo)ƘTU4y%R RwGEh*G=x8:Jn0wB 7SlS@Z>yOd ࿣ UHH-3Wc 3s \J]򋬝) #WI<VBE+o1RjX]}sZKtlU}-^h\~Vl@q%/"r5Ҏwwq;K$5]M2]eCI>5=,ˏiiQ*)L㣌!q:щrG5m#EL-Qq)N䛹Z( e衭,+.{J)y"]Gv5#_Z8R#JH FCTLP,yXB |eIJbh @~M9w"_/'F+}|$VL!-ۙ'K-/E4n|ٞR6 hi Tś=ttggf>մ?qWb@d{JW1 @.uN:ahѻy[c 'Ƣa(d}!u}7X~Gp8*=O a5P%(mqOrW!X"X㍈aMS04+M2D @ĐwPB(. w1Źid4Eҿʪkay2~`-$ UrV`_B:5ОnTrUj *Xp =,U, \/bZwN!WK/%'.u ۠j6 |i{nRl|霸M*{U3bލ蚂[n3kCMuj$= -a|;IJ N9Vv-6|HUͻnHB-@v37Z-nqnq?͓dNGchbɈ8;igszWdi\.Q;޴āY(5%L󠍖Ĥd3)0~}öoA PQSNĐljbA!iC`t@*{&d9ͭ_ޢ*@ x%*gF]!Ǽ a:EވluiD}^0emIj ?L}ł D.E‡ Yh?d eAyi|Fi֝`ߖ3a t|>$? ,$JL$ٳ;u1V]Lz BAۅy!#r8uJ ;8kɚ] YđY.u,C1j;Vl m5grh[OꖞQc l\,*Sye51,8ʍAʂWQ0 |Q{ϋ:[)jC>fƹ#k,[m[C K].-تS7XĹDa筆3x[4[O+PUDQ R!^on(sO <`(/*H xgʎܾN~j9ޒm3T V /M Y\㸠+cXsJ.;d$@9djӅa W?peϵ:*fq`ƴ Z$276ߪP/GL(-8[7n;!UTjmh$T6Q)` Jէdx$U7V$tRI5Е+D]\|%XG.)VXYS Fd~3h[|q_7_ Nhop@[y+n"޴?Q"p/H,_ao2V9Ӄ1iC, dy`eW"_MmjjP!oSat/@ԙ;Zs#r:yC =H,\ P̵rE1-ygή"iIM!;d 7CHTC*]Gw}%))TSɞ@"3EA R9'A&" PɵP9Q׸cMYi[ra_H[i3ԃ),+OMٱ:ВnMFAI.U$sT`u^޹{Ďv]\f(\ꤸֳ$=ƪK5avǒ>VW"q_[W˲HQ"mj-uCx=kV" %6$z$hm%fȰ 6Xkյ˂ޱ{(}=)7)3xD5b};tD;+8O!?&اADcA "AMD~h]:& >к,hgp@ʸ=\ֺaۙH}&@J{eq:oGK#3R/ ƃhf=9֭11bH/ŵ*ZTJD}˅sΉFpyϦɆd'~=IazÖ$8"{,W`FG^4bNHհAhi 4Et3ce%W5Ϸv~/~.1k] -%Zg f\QkOx/(yu&OGx8m=ܖfA|Ȟ1hA"~(vyPE8H ߔ-\;#l$G(]K£gʓz2)a7.nSvjv 0;;qKF1#eȜxDΐKb sqO8zBfi#4uGQmW'yN%\jo rhmBՐ+ S?8[WYixQRI)D^K>5Ӥ&>ܶ.Ck%el5^L `>|{ \DG[A҄b__b m+Q)sG^#5}i/a1Cu=4HY6PK"![SO!jM,*,>ykztF?}9ˍ"tʊ݋;|ݤߨ!_;"4JtbM&.[`vA귤[a_63Te" $1e;qqj\ϋ0:`@UJ(_H>žLH9hdh@}XD.|A9 s' 읩_[B1xi6*p8:NE78D!ݫNJT[(KhD(VK)d;$bܢ^n5fY6`h">D˼=t'5meYU7/f@?] JV@zU>[O?,J (FSg-8y̰2u)tpfew,B15:V 1g(eUꅔi7JPI)gֆ05YTM||gi#8hWB!P$wPI8($fr%nj1}cO.~:6\* >gv Q_muŰ 5[nhF򧅨I0x~l?iJ$"3[N=,³A]#9c:9r2nQ; ̲槎$N7sy.C_Qm*y`n/yq/Eh45.x]eU?k}HK'SShqWyhd80je;rY~5"lZ%-M줓?֫SSA?ȆW +uߔ.3YqG۠w|ӏUjlc0ԩʷ:Am F]:C3X4M@vku/\9OHÎn wS^q_o(F`ƭ/k/)yA#1&d^VnW;,)qtd6DZapKS&ע׻gIj7J3e:;a_c|*r}~GꎹR"HLlyQpx}AP|8U)o3oCnl{"CʌOdhǼ+2qfI'^Bʍlp}HjQcVE{D@ K q^jp"rBJZI&%d_zc/:gV(O6b`z>I6'vAT|!?ؖ\}߲*[nR8_I$^mZ}*{h=%!+u~kfdֺX+:'߇opEJ1+Now쩺E3n/1b-PZ=`fQd U1&ʤ0]MY/f M(Ń'O`l?Yb&"7omɭr&#k9 Mx8= $|p@JtʺJ~6^`=/I^ zF9 RKw;M0.YN̺tL"-ro]RPE^l镭[R-]`AB)ժ|@֮󮣝97;:}x6 ~H;(I43-,(x$&mEK|-U5&dD1d1Fo\Fϣ66;9,Ta|z5MAiYZ/L3UR@YK=foYWr| @я2\Ϻm@Cza$(s޿uk]>a7PXME J0~r@h vfF8?'r(*f3\#z.ѕipBմ0{Eєph>ԦqVų,I#;E'770zduYl_'ꤗ(=RL+Ȑ /x!45B0Kw~Od@rY[UFBk)CgcVG=.562<'*@JghA\LMHԡSu}:?&UXZ]|%YB^!c=y& R3I5w 8xq͊~*f8-['ݮ ,n! w6>RYfݨ͆+Zȝ{hcw'_0*#?fĝ;uoиQ4['vCSP[Q$(FMNxk^2ˡO岴lm ȇ}:@0s jA4) X]"ŰqDۏZ7UYJ`B+|~mIR?h|jS{pZI3e3;^tjs6xG :E̝7O+\ODm%)Hc#dtJdeb]'eq_@Lgi= jɩs%!@[ua}L5Q^? s0q*T4xjܶ3ރKLFX?&_b%ۉXgE|H?i>q~Q+7Avqn;Mw(i2a[1!S /b(s 3<+&ޝZ$Ѥч5QĒP"b28ϥ6@V*XBoZO=F卄WisJ\ըqR=b饸Pڗ|bEYڹk )cB㑫-;T)>KO'̤uN[n`r3@-44?:Z H3k &m9Y|`Tbje}otՓ1[ak*-m[teld-+b$LZM'9^%~CTU`w9z JvS7,1UE/e ۱~eO;P^;'㞸i, Q0Бl7~BDT HȩZl¥da8coYL5ydj{о2ܬ@BesHȌ|bzʆt8xyjdk5eH^qCޛ'R.Ҷ5zvҞ01+5Og.Vy~Br>rxl&^.V'8d%!} +|/Q4W90|z8OĞ< v4y+[a2@r-\- aIquKġHs7$v:>fC^iJMfHnhEmz\rϨaNCMWL<\bG)>/S{2 'X;1EW}R',]]~ ^!LwC0Q=Tc&ĩ t<}xO<ѷr=vH9HK'Q36v{o$r5V0R(՜",3u/U&5_!7U~_4[@MC2!nIR&M[P i[w^HEeBI5Q]l'$4?{qolET9=8ՍmfMkxFHGo.V°fD9 7QԖ3Q/ 06 dW`H^qM1ERu`әqEHm8+RBKYRI>=V@rujITaiMsh0=w{F-_?%Dx[-rSw I ;K}gjU3ClppǮ/"b2^2օvEaVt uC稴{&eO!z-Ä$^o=K+»R=bW;VQm57:=y43z~1nH\JF3!CPm ;Z֯dU6k*r]f谰瞅NAeͅ= [(#AJ{ [F+mHh8ay/W0lUŻV*ûk"O&EH8ZE j8|e@ :h/dmP@1op1-@Rg=p]۾M1}~?ݴXMrՃTiƃD8e-uK _O9vmHqXFk5t0o< hѹCL0 q6Ҷ6C/V8U Pʆ \4ڤŠ MBb,u ~#.GE^.©$|[g<ҏWasGV7haPϿXos/A?,\lpqGt?_xB, xm/\+LQ:\nsKFs?M 1J`͖+qɭ}8HM#tf"fξ)x 2_/my0~ *j ô% jKN#o:/Mvtゼ%j Aۀb# \j+獕YE$~7F a#Vsu`/ <}~a ˜d#M9%L/qz"YW1r4˷~T y͟wC<<ގz ] 8 i +mzPLYtNΟ(zE$}73 $fc.w)&?dK G+ߗv}~WbV9"`܊.V8p0_NKZ[&V4(qf'p0nf?–kF2 $XQbʫ&~J2TX++#Ym{8qDmT:ɪI}͑ bpP^DΒqyC.!^dnĖ ]AB$D;x+V]LFEPHȮ_#nVpzHOsiLDWU.Z,\z#d W4 c0 Z)561Z A!;} \p.& ruyh+y6z–M׏&Mkcym+]XB4ˋ*3 1`b@HD$"kw -L+.&\ k&:?qSY9!XuU/ coʗ jr{qK(gQR4:xȾ W$ "~K;5x˘dl+xYN.U/7X D B[%&2 7I*F_ wMS?jN0a;_Ncf%ui%6č(=~T0( dY m.Q@ۡ9[V#Z~86ֆSe%@(M ~>#(N-E %/8<;%IGdulO>=pSqe/"PqN`J3x V};[ OUZ'AM` \a < 3W"N[W ;-QrM}G)>N|&BêR.:lt3~cw=oHOq*)<$Jyl~BC2:;߾\{GVtM'cEײ-mѩ< ! 'ҵ ri[đy|]]Hr7uݓ^ѹ@ *[Nf#D 4@*TNuBvCX CBJٱ=Y3}$=ɚ{  PB: JحȰU(T U ƅϰj_@7473Ui FFX4DYxMsk qnvE9țOfF~4ؖ2ͤ8Fw\9i( \_,oXC%-O@OTDx|M,W4IX_a2$`E(/vx\ e*vV=h4Okn̯q赠Ȑб dCYǧS<#S#-e50ca83d/X1ܐVdž_`]a%ݖ@8Ƀ.t}w 1?FfҰzEZ 4 |jn`oB;/5unke7&'\aUϺVދ RʛU~ȿL-VRjW݂7hq<rOu+2hm˦fxd