From ccb23ae867881a2388d4f3599f82b804ae084591 Mon Sep 17 00:00:00 2001 From: golovin Date: Sun, 1 Sep 2024 08:46:27 +0300 Subject: [PATCH] 2024-08-31 --- DIRECTORY_TREE.md | 4 +- archive/README.md | 7 +- archive/parallelizing-bash-scripts.md | 99 ++++++++++++++++++++++++++ bash_scripts/archive_cleanup.sh | 10 +-- bash_scripts/info_tree_license.sh | 4 +- bash_scripts/repo_compose.sh | 14 ++-- pictures/README.md | 6 -- pictures/archive.jpg | Bin 4304 -> 0 bytes pictures/bash_scripts.jpg | Bin 14928 -> 0 bytes pictures/color-tomato-theme.jpg | Bin 5219 -> 5827 bytes pictures/older-tomato-theme.jpg | Bin 4598 -> 5233 bytes pictures/pictures.jpg | Bin 4041 -> 0 bytes 12 files changed, 119 insertions(+), 25 deletions(-) create mode 100644 archive/parallelizing-bash-scripts.md delete mode 100644 pictures/archive.jpg delete mode 100644 pictures/bash_scripts.jpg delete mode 100644 pictures/pictures.jpg diff --git a/DIRECTORY_TREE.md b/DIRECTORY_TREE.md index 4372e22..51df0b1 100644 --- a/DIRECTORY_TREE.md +++ b/DIRECTORY_TREE.md @@ -4,6 +4,7 @@ . ├─ archive │ ├─ README.md +│ ├─ parallelizing-bash-scripts.md │ └─ round-robin.md ├─ bash_scripts │ ├─ README.en.md @@ -21,11 +22,8 @@ │ └─ repo_orchestrate.sh ├─ pictures │ ├─ README.md -│ ├─ archive.jpg -│ ├─ bash_scripts.jpg │ ├─ color-tomato-theme.jpg │ ├─ older-tomato-theme.jpg -│ ├─ pictures.jpg │ ├─ pomodoro.jpg │ └─ website.jpg ├─ .gitattributes diff --git a/archive/README.md b/archive/README.md index 4b708fd..d776d95 100644 --- a/archive/README.md +++ b/archive/README.md @@ -1,4 +1,5 @@ -| Незавершённые публикации | Язык | Обновление | -|:-----------------------------------------------------------|------|------------| -| [Циклический алгоритм распределения задач](round-robin.md) | Java | 2023.06.05 | +| Незавершённые публикации | Язык | Обновление | +|:-----------------------------------------------------------------|------|------------| +| [Распараллеливание скриптов Bash](parallelizing-bash-scripts.md) | Bash | 2024.08.15 | +| [Циклический алгоритм распределения задач](round-robin.md) | Java | 2023.06.05 | diff --git a/archive/parallelizing-bash-scripts.md b/archive/parallelizing-bash-scripts.md new file mode 100644 index 0000000..11e6649 --- /dev/null +++ b/archive/parallelizing-bash-scripts.md @@ -0,0 +1,99 @@ +# Распараллеливание скриптов Bash + +Примером последовательности действий, не зависящих друг от друга, могут быть — итерации циклов, или вызовы функций с +параметрами. Когда цикл один, или функция одна — это тривиальная задача для распараллеливания. Рассмотрим усложнённую +модель с тремя функциями и тремя параметрами для каждой — будем распараллеливать вызовы этих функций. + +Сначала кодируем параметры в HEX коды и отбрасываем разделители строк — чтобы не заниматься экранированием спецсимволов. +Затем создаём массив строк — вызовы функций с параметрами. Далее выполняем эти строки в параллельном режиме с помощью +программы `xargs` — вызываем целевые функции командой `eval`. Внутри каждой функции сначала декодируем параметры +обратно и затем работаем с ними. Дополнительно для наглядности замеряем общее время выполнения функций. + +```bash +#!/bin/bash +#---------------------------------------------------------------------------; +# три функции с тремя параметрами +#---------------------------------------------------------------------------; +# первая функция с тремя параметрами +function first_func { + p1="$(decode "$1")" + p2="$(decode "$2")" + p3="$(decode "$3")" + echo "1 ${FUNCNAME[*]} [$p1] [$p2] [$p3]" + sleep 5 # эмуляция работы 5 секунд +} +# вторая функция с тремя параметрами +function second_func { + p1="$(decode "$1")" + p2="$(decode "$2")" + p3="$(decode "$3")" + echo "2 ${FUNCNAME[*]} [$p1] [$p2] [$p3]" + sleep 5 # эмуляция работы 5 секунд +} +# третья функция с тремя параметрами +function third_func { + p1="$(decode "$1")" + p2="$(decode "$2")" + p3="$(decode "$3")" + echo "3 ${FUNCNAME[*]} [$p1] [$p2] [$p3]" + sleep 5 # эмуляция работы 5 секунд +} +#---------------------------------------------------------------------------; +# вспомогательные функции и экспорт для дочерних процессов +#---------------------------------------------------------------------------; +# удаление разделителей строк и кодирование символов в HEX коды +function encode { echo "$1" | tr -d '\r\n' | uni2ascii -aE -qps; } +# декодирование символов из HEX кодов и удаление разделителей строк +function decode { echo "$1" | ascii2uni -aE -q | tr -d '\r\n'; } +# перечисление используемых функций в дочерних процессах bash +export -f decode first_func second_func third_func +#---------------------------------------------------------------------------; +# подготовка массива строк и вывод строк массива +#---------------------------------------------------------------------------; +# параметры могут содержать любые печатные символы или быть пустыми +param0=" \$param\"" +param1= +param2='"$2"!="$1"' +# кодирование параметров +p0="$(encode "$param0")" +p1="$(encode "$param1")" +p2="$(encode "$param2")" +# массив строк — вызовы функций с параметрами +array[0]="first_func '$p0' '$p1' '$p2'" +array[1]="second_func '$p2' '$p0' '$p1'" +array[2]="third_func '$p1' '$p2' '$p0'" +# вывод строк массива для наглядности +printf '%s\n' "${array[@]}" +#---------------------------------------------------------------------------; +# параллельный вызов функций и замер общего времени выполнения +#---------------------------------------------------------------------------; +# текущее время в миллисекундах +time_ms="$(date '+%s%3N')" +# вывод строк массива и вызов функции для каждой из них в параллельном режиме +printf '%s\0' "${array[@]}" | xargs -I{} -n1 -0 -P0 bash -c 'eval "{}"' +# время работы в миллисекундах +echo "Общее время выполнения: $(("$(date '+%s%3N')" - "$time_ms")) мс." +``` + +## Вывод + +Строки массива, вызовы функций с параметрами через пробелы в кавычках +``` +first_func 'U0020U0024U0070U0061U0072U0061U006DU0022' '' 'U0022U0024U0032U0022U0021U003DU0022U0024U0031U0022' +second_func 'U0022U0024U0032U0022U0021U003DU0022U0024U0031U0022' 'U0020U0024U0070U0061U0072U0061U006DU0022' '' +third_func '' 'U0022U0024U0032U0022U0021U003DU0022U0024U0031U0022' 'U0020U0024U0070U0061U0072U0061U006DU0022' +``` +Параллельная работа функций, порядок может изменяться +``` +3 third_func [] ["$2"!="$1"] [ $param"] +2 second_func ["$2"!="$1"] [ $param"] [] +1 first_func [ $param"] [] ["$2"!="$1"] +``` +Время работы функций в миллисекундах +``` +Общее время выполнения: 5023 мс. +``` + +--- + +© Головин Г.Г., Код с комментариями, 2024 diff --git a/bash_scripts/archive_cleanup.sh b/bash_scripts/archive_cleanup.sh index b1089c0..2b2b107 100755 --- a/bash_scripts/archive_cleanup.sh +++ b/bash_scripts/archive_cleanup.sh @@ -2,9 +2,11 @@ echo "Удаление файлов и папок из каталогов проектов перед восстановлением архива." echo "ОТМЕНА" && exit 0 # предохранитель cd ../.. # выходим из папки и из репозитория -# обходим все репозитории, расположенные на одном уровне с текущим -find . -mindepth 1 -maxdepth 1 -type d | sort -r | while read -r dir; do +time_ms="$(date '+%s%3N')" +# обход всех репозиториев, расположенных на одном уровне с текущим, кроме папки ".idea" +find . -mindepth 1 -maxdepth 1 -type d -not -name ".idea" | while read -r dir; do echo "Обработка: $dir" - # удаляем вложенные файлы и папки кроме папок ".git" и ".idea" - find "$dir" -mindepth 1 -maxdepth 1 -type f,d -not -regex ".*\.git\|.*\.idea" -print0 | xargs -0 rm -r + # внутри репозитория — удаление всех вложенных файлов и папок, кроме папки ".git" + find "$dir" -mindepth 1 -maxdepth 1 -type f,d -not -name ".git" -print0 | xargs -0 rm -r done +echo "Общее время выполнения: $(("$(date '+%s%3N')" - "$time_ms")) мс." diff --git a/bash_scripts/info_tree_license.sh b/bash_scripts/info_tree_license.sh index 01ac4e5..fd7a672 100755 --- a/bash_scripts/info_tree_license.sh +++ b/bash_scripts/info_tree_license.sh @@ -60,6 +60,6 @@ function tree_license { export -f tree_license directory_tree list_directory_contents cd ../.. # выходим из папки и из репозитория time_ms="$(date '+%s%3N')" -# запуск параллельной обработки всех репозиториев, расположенных на одном уровне с текущим -find . -mindepth 1 -maxdepth 1 -type d -print0 | xargs -I{} -n1 -0 -P0 bash -c 'tree_license "{}"' +# запуск параллельной обработки всех репозиториев, расположенных на одном уровне с текущим, кроме папки ".idea" +find . -mindepth 1 -maxdepth 1 -type d -not -name ".idea" -print0 | xargs -I{} -n1 -0 -P0 bash -c 'tree_license "{}"' echo "Общее время выполнения: $(("$(date '+%s%3N')" - "$time_ms")) мс." diff --git a/bash_scripts/repo_compose.sh b/bash_scripts/repo_compose.sh index e6d445b..79aa168 100755 --- a/bash_scripts/repo_compose.sh +++ b/bash_scripts/repo_compose.sh @@ -42,11 +42,11 @@ function compose { description="Тема оформления / Старый помидор" fi wiki="" # оглавление по страницам вёб-сайта - if [ -f "$1/WIKI.md" ]; then + if [ -f "$dir/WIKI.md" ]; then if [ "$remote" == "hub.mos.ru" ]; then - wiki="$(uni2ascii -a U -qpsn "$1/WIKI.md")" + wiki="$(uni2ascii -aU -qpsn "$dir/WIKI.md")" else - wiki="$(basenc "$1/WIKI.md" --base64 -w0)" + wiki="$(basenc "$dir/WIKI.md" --base64 -w0)" fi fi # скрипт для создания удалённого репозитория @@ -65,7 +65,7 @@ function compose { echo "token=\"$(cat "$basedir/.token_gitea")\"" cat "$basedir/repo_gitea.tmpl.sh" fi - } >"$1/.repo_remote.sh" && chmod +x "$1/.repo_remote.sh" + } >"$dir/.repo_remote.sh" && chmod +x "$dir/.repo_remote.sh" # скрипт для создания локального репозитория { echo "#!/bin/bash" @@ -74,11 +74,11 @@ function compose { echo "repo=\"$repo\"" echo "dir=\"$dir\"" cat "$basedir/repo_local.tmpl.sh" - } >"$1/.repo_local.sh" && chmod +x "$1/.repo_local.sh" + } >"$dir/.repo_local.sh" && chmod +x "$dir/.repo_local.sh" } export -f compose update_gitignore cd ../.. # выходим из папки и из репозитория time_ms="$(date '+%s%3N')" -# запуск параллельной обработки всех репозиториев, расположенных на одном уровне с текущим -find . -mindepth 1 -maxdepth 1 -type d -print0 | xargs -I{} -n1 -0 -P0 bash -c 'compose "{}"' +# запуск параллельной обработки всех репозиториев, расположенных на одном уровне с текущим, кроме папки ".idea" +find . -mindepth 1 -maxdepth 1 -type d -not -name ".idea" -print0 | xargs -I{} -n1 -0 -P0 bash -c 'compose "{}"' echo "Общее время выполнения: $(("$(date '+%s%3N')" - "$time_ms")) мс." diff --git a/pictures/README.md b/pictures/README.md index b10fadb..31d6906 100644 --- a/pictures/README.md +++ b/pictures/README.md @@ -9,9 +9,3 @@ | ![pomodoro](pomodoro.jpg) | | website | | ![website](website.jpg) | -| bash_scripts | -| ![bash_scripts](bash_scripts.jpg) | -| archive | -| ![archive](archive.jpg) | -| pictures | -| ![pictures](pictures.jpg) | diff --git a/pictures/archive.jpg b/pictures/archive.jpg deleted file mode 100644 index 2c9d1e4fb3ffdebe7f9f310e6a7d936e29164537..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4304 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 diff --git a/pictures/bash_scripts.jpg b/pictures/bash_scripts.jpg deleted file mode 100644 index 3dd3e2a7ef846edc1ca71bbd278aa51a65a93235..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14928 zcmeHuXFwFo(&#J;EKzchxB^OC;u0iCkc?ymK>?R#$(bce6eEIUR8WZu2uP5q1Oo_& zNCqWH&Jra_+Bb`M!oBC*cfaq)`}0miZ`X8JRaaG4hncCtea4Lf)Y|G=>Hq`+0W82j z05`@ut>*7&2LM`H0ssjB05E_S0tFx-gwHGxqQlY#gjtVZClKa4!XW@*F$e)b36@@9 z76)N^unYsU<4wXt+C&h33TCjo!|PwAhL)}YTwGX8R9IXbq!bmGkQJ4Z6_+`1~8Ev{^9;;FTCg=CTImK~WIx2d07ETU! z7B)6Gk1#KsONg6|jZd0iNK_1oL~`<;R*(^w7nVSZC*#@VE>TZk3WZ3`U(RJQ6luS4qhjnV65WoIJ(L z$1i}Cl#-S?Eqhi~O-j7FRP0~$q5<_HAS8qm!ti=Q2>iedr6D9bAx2EAYzRYn z(s7B0lhCWgWt6-j<(4p7VX*P)BxB@3j-6b^t9Gc_f2Y{h|CMIHDfYWw0{{gS0uCOO z22cdHcK9;G$o?`v)j@h>1Xvns7&VXq!3-ar9xHSp3*TOxJ>IV5Qdjm zkM2NcottaSSCh@RF3t&-`|nRHAI#0RY@}12T@`64WL1eya-$8nx$=JY>!V6&NB`aJ zqVebX1uZ;MUJA9q;M^6Qd&!;CI#e*8P zpTmfimSEn?N;K_$-hL+no+g{}^1NU?!1h#BB`lrg4yI4paHrTi5kJOV)idJsko|sp z#(dGn^QG3YyWvh@tietFK@m8>KAkG{@qquqp14S_W{$F-w-(^zvj@*z%hBm6fvY_+5NJs7)YZ_IRganok znmPHFMzO@T3GWnX)`LStDc_!z-m=9Sk5o*2Hv7ml5d7(pN5`e6lAc&~b|OKU6dB8CZ0+wYHc zCd^qmKlg9C(2qfQ`|+LKBj;XR{9LkLpgI0{-XJ$dDC!D9Lkdum=TsS3*sAYyYRg7{ z7+S3mwjs&zByp?sR=V!e6D#|NeQ-3qB-d_1os!MNM>)Z}DQRvySR2!$AZ# z!9u5!kX9AOrh z3h$mpXnH!;#TEO;R!dbi$Gngw@9V=YEk86?p2{XzrP+tN2a_bjhH~mi4nnoJ-}BGB zxG!&{MIRZMC!kFHDwI4(zqgE^QSSER@nd6OhHwB=et1s@tcTuAaIBrf;Q)Ruz)UQ= zekg#NW51G9d!AM`?kqR4aWi~6j9rc10P?5IpkdOBSWlI%u6E6>njzeR7N02t7WVbp zb+5Jhc+zVt){O-#=vNg53xS1X-z|H}Ko_w{n+jYIjYbhr96$fF)N#uQ%8)b%_? zW2JE>EaBo;&K2LBane|24sIUImI%8XBS-oC0n@gQBf273^+#!_ACc$Q&6WD9bSlM_ znRmJu%`bm%=v%=7-D+5ceUmMQ1&-s}&QBaVn|M}vzDLnoo-g*_FbItNwpe(gEJ}mS z)o_pp2gp7SiJ=3htu2Y!RW}H%D^j)&d(%tsK{&L8>kY! z%=aM$X$(PP^_>r%mUFmpt}rwWvkyJa?uW_KUOdM?Of?=4Dkc5g!l;=iK?!3qtWH*})n_RlT%)O$D&iI#%2QyheF5$T3*rBXQTl0yoP|*_tSxAD75!fSnUjWI zrTdUZ|J`bm;U136TEB7i7yEHzI#108*0|r-OvJ}5DF{xzTBsH&;utp-T8xU9Ab7muwWWFAOT=2lz6~n|FSZ&BND94XXu$s>j`loX)U6+G`jl;iXDq zv)vrhSH9HsLj4CDjkW25Y{>2W*DF@RaSy_eyI#9XvP6|v#JC+X>W_`sTs$2y$dREb zvzxVTaxA+8rnXW)E|f1j7Z@?6=PL!vDj5~&uDx=-X3pE4t=a2&#?5gFYv#{ZZ8=|0 zHXLhScu1`|PqMgClzWC{A;)5+yxMP=N4um#PfvxndL#YVr%1kZ0x(l?Zckxbo?Lv( z3duH75B(Br7M|N`Q`J5r}S5k zJ;MRo--q?hYkQxH54YCV4;y|Cgv<(_36naxs#huWRJ~_uP0#-k4tW2FH?rLP+vC3R zX{`wtPob#c??ZhEdcdq^kG#sRdkMueD#zI+W<_Z=wZglv*1y}nmzhrGoEganfEn6& zMlLkB90vp_CYF!QZ8cuG+2p>#Sij7>mRzH7W;>m#AV>rUz{x|mnGUY?mi+hD$-9zg z;kZ&(DNUpPjP%D4m9_EWC8paUf{p_Y4h0wVMV=+020QoL0N;V9)#z*$%*%TYoZm{8 z6d)T6(;NcZRdGKm28@>Eiyk~gFCU9a)BYap4la$ACnPMjb3?;IRsAxFBI;wtAjcXssCx%R7K z)g=cL$Bu{8E;KDYe^OHwFzx#3+l7aao|($NFlnC=7N?!bPnefUTs&j68c?>)pMn!1Ec<%IV1FtjhO2=U=rev0|;q3FLBgzg;(HkIS?E|s5z&X=TF0Bb)m zj@iO9LRY%+XMDkemC&ogdxkQYABf)Kw&tbk8Ao=OqV1X2CEFI{es|Tqc3&j7tJHss zSvG)?s__&05E}h?$Ns}87f}{@ZPOiOF6_@77#hIJJAax7GM>g>-(!ITYSKPftgP>j z*S?#m+__`DmGDEyiX$z^0M>WrPwPQJD7Y>(6O0@X;eZTDmp}Iho)!qD?On4QeAN%m ze>ZE$W6@{2G?@@xzk?8*(`nycOFO8pTq{Zm;Rbn(_~5{sWuVhhi7lFsFcxUZetzf8 zSN4Pk*-5Fdqu8K}Qc&rT2snRjk;ezARf+#yJ<09JAOx-1*V{Nr>#hWCF~@PA{_iHRq# zq*7f)jlw*U+YiIAEi# zJ}IbkmGeM-w`d!7a7TN`YWYBZ8V5Xg-OHa&yUn>KJskR4aoxfIcEW07#ZU7B(ytcv zy}1eYxxl`!=6J|P@QIb@nyGI+2?gWAJnz<77!ZrRXV+f)`c}?CMuXdPqAHdnvqr2T zsxhrF*fHOMC8R9e-F4y~yEIoNxa~Zx-i^5t!tqFxG52OKIx6&ABILUQ!?6F>>zJ_z zsvU05c1r=^F(mO=;U&b+GlFr~aogjXUv3tkN-@bh5l-lfyhMm!e*fT*W;gm@?vX~_ z(aBk?ZJJ{MuBaW|V6tg6QZmoi(N*!KK4x$vCe|l8XzHu8uCBat@kXSYKx@=hu|dgA z-wcO)eRP8|A6i&X>?w2h)wyhEjPWBC9G|1D*8@Bw9^W_N$lgFgdiJ|MRC|@iwTW7oqXSS&#zFa$VDtz&5efM+Dv&;Cgm4h zI(6PG+&6;uThlccig0ly5Zk+ z&~AAurf6k>NsYno*WQNYb16XZd-0^Z>LHI`90fw?>yj+a_Y#-AW@T_qo)xx2MNi zrKwG*L`pwY@0pwTycHvzS>mnS%*b`UHztfS&{K7>+mcVp({2Q98Br8g+4}MyU*9aE zS@F9uv_jimn7@gXmn9~bUUbk$|8e2RZ572#-CYs5pjK?ciPPp1t0^^l}_l{mt= zXl~irs~W~OxfAg@M!P>V?2P_uXn4_{gzsPimOV{CPQs-~)sr{jQBylvcx- zvg$~s*KC4$++kPf=J}xNN9QvVxB7`L_bt{RW^JLg;7;XUjRV4Pz-(F3liypc|J0Ix zO!ieh;hthB{h*ed?o?)c)>ONU@&4HU{FqsSwQ`V9n%;|*57YBRakuP<)nH4fLX!aH z%%Bq`-AnOT@`A>rm?;ZtNfgosUQOO@SLrU!YQ26YCvQ*R*tBpNu@o+<%NEAQ9!0fQ zbY{CUe|T;{-qBT1W7_`Yg@|_=v%#~_5Ap%y=y8POBmE^~)=-8^o3PyHR>Y*9tQ_It z`;JkKcQ3>T>z<@Ckh5P!)K;Xiy!X?jrtmu5)K$HxajCk_hIHWZeOUM4KxwNOvykRa zmzksxLe_202~9>FQF}E~&`e`x^GV@Qwv=yal@0M2EA?q;F098)t0a}pT`2OF_(u;S z-^YyG?$7+Mzbg$e2)!aO@^uk>MpDcBCXK|kAX%{XylUynS93_%ZcY|&Ns&QumrGf* zs&7T7YS!+p{DoPCHUQ&q_EyS@xs-aasC~F}Xssy&y+1#j`!A2`R3OZ7nq?g|z}t#z z#WZ1@)z5q}(_B*~4z1)JF_gDa#JcMDmUUP%C0NYDq5dUQB9vq{Z(cW;&ajnC?>f(= zysdPqJG>QDWr^9VT6A|mKG9#W*kOv?&?O$@_&Ti{7M0;U7MpNA~e3Nda?JP+RKVXI=q2t0Q0#U*?eJ6Hs+FkL&~yWmvPMD)EtVw9rf zJmFr}tAw7E<;5bz(gdwC(u;oyKYp=@rIY0kFt;mS#wx#75UgD(YS`UpPiCzjQN{s~ zOTiOgNaxjnU^+F_td&4_`Rv(2o#gd_uQ@$b+Jl5NaY{7c!-uAVktNP4YstNHI3TWW z<^YNVGP~*$K`)Il4;@nc0Iu69V&l7M+f?Ab222PH*X4yeq#~AuxvW)_5<_l0GgRWJ z1aIY=l2g=Uy!W4YbGKDL@M|Vj6abHM;q#Q2_mo#ZY(G}LF-&q@qJ{aB@8gde=buy1 z!srvh^B`c`0Wn1gxw$`~8C2$Zeuaziz*>7YNMzJizu_JUSBwi!RGrCc5;*$NR$s=b zuKTiZ6>OnDRc-vZ$La6uB}=2krXO)Yb;&ZRy7x`AVs*1(gRFS4;O8u8gIb=L z(2w}>-5nV*|6Xx-cEf(hEN*^)eKXnvRdWYTwVAjHD>;){*W%xGUSR&XJ|RuY)SlWX zg46oekBZLh`Vq|zj^WKTZQzGRlVNpt4&6nqlBVGFP423#BJGv5#yfXJga?gTCzvhw zD5w&#CYzEE#$&DrRzxnIEYSCa?UF5p-s}YCov&AyRhQmxk{4H<_q<`0v$10U>kZVu zRkrWjp-}d!vWVOHSbAXif|c58#MyX+nk4gkbkNf2b(*50_2+b2tENR+vZ>B3S7S!S z>%I<$b0p<=Rev z@R;>=mZzl)h)Gv>Sk{fRdsev`2H=j_86=nMe2+j-rgC@5@blxzK$cA^qCL*LR07{k zf27@@S#KIvIDb$+YsI;u7n80+$XJ3*8*%7(y#F@FVz!fk9(+K61#H6LrNx!Sm70id zCq958p#w59XX@}TbM~)B?5K`AnK?(d6#u*raE@E$efNmfDthqS>N_#mOf-#Nz;fB+ zr>_L~pfd{Yqn`>Lxyx^xqg&vZ&l72?J7!|uE8iP@7b9}?4(2Fs;s8uhLF5g#$m@&n zgymDAbV{83gF$ku?5zOuNB91=E$1%6hlTS^wCR$n^Yn$RW*$u9=7xS@Fj;b}#+EVX z?L3t*Q6j+efMwe+%Yo(uV`r-yWuD2;-|oxZsBqExgSX&V-@B#@c0wRcri;Bu1M8y%}r}47?RLa#u zSNAu{zqFsL>u=cJST*0@`}s?3Z<7EIjEE7&+ug?tjZyQ(xM8_}b>`vXTmdXgV{T}dK_ZoF@Is%qJP8j@bPjvY_~;=U|cY+VCUW- zN3q{Ah>}K&ONpJfK_JCtBoIin zv?RhtR9qS%WoILWMB1Ik$k?EN@zHYg#-iNN7(5@4v#=w`1SugUVP}W3MVyvGq7g`p zq!>cxw4E3NZHqdMI(=GF1}Q22i(cQ$5p-FU%OB;z^RWf_NZQF@#L?n52r&t16apzB zfkxO!p)d#;G)f#TDTVg1~_ob|o*ZJaP@?B7uTJJv6HBXBA4#(D*4{hioAkef_C*L6a@fRH>{VDh6)@ED}=*l0AhdzU;q$+5DM+>p=@Aq z?pJW*zn7bR_&7}f=tkgq{d@a=tf908?;^pVNH~b4g!b^lg79S!mh!`T;NklqOb?zl zZ9%vIgoV670YUgPzTW01{0$G=AHw+PSb*Nk#ON%j8$K)+ZvO|^<_|F1!OIoIL4r6u zwytgD|)-KxPB1kNv%lCk+6ot^q(r z!|!!A_W+>sCIB#h@j!W@4*S7}>=M|4ams5s06=LD0CXJyKz8w`-M}_{JCM~604AWV z&b0x+gA@QbWe@Vc^f!9rgPnh~+keD4vfp9sFO+}){|_cY@SlhTA4N+<27?ikP>@kj zkdu*geGP$EJCFoKrpFnab^!(mATCBz+t zpi)Dr!LjUx15~0n>FBz_W>~YqNhAGRq^|eoz5>7kze<#_*QlbsxlYoFY#kXuog&^G zGad{F0_?mMiL(_v(BnAZq!Iwgl95EQQZV2D3xXcwPJGf!g$peiBCyEnt?adcO_QofJdxl%(I=UQ2>fyM*%H7 zmY8f!AwDc8KM34>fPC5NKgq0G6(j$gM}Nh^r$xHoG9jHR_ETe^BdrCB>$2I5VOBIr zFc{CBabN#Z;jIkUl-PtYaMT&9tr+>yVSplN7d~nL0wpAX5Q5R|KNDycVla3ZMh%x@ z5*3rAp`~Lu!3`RU1hg!Kh~V3Lf??iH82LsiPfvVEcaB4;x>~uY-h*qB;@)$LKjg{m zSf-`R;;rH=rTI4v&l$c|d+{YEe`s>-Go?pIFzN>Xg!x!xRde|(zp{^cxpK`z8{rGs z*fe)`j_uC87q3}bkdCixQ%?4Ty>B##UARXf!uGlStgTQ!8X@z=)`XiUIzp9t1cga( zd-&*^?Ub|lylAW^_rXlX_F}T>JGxzl*a0!_5KnC|_K#Lkp|Z*N`+G?4WL5Z3^{*P; z+X8LTb%Af?^KWxL9-PR|c&}$m4dgP5AaCISSQpLICC$Cf5q7HmLDln-XZ4Ps(%S=Z zqhlMDOT&n1rKB^!fC8dY=Fu}DsWvpG1-${O#Z}^*7E{T3Q}S99x3n|_hI$y*{cMoD zrnRM&v{W_Z1;t)B8sw8rFWWOxJd!^@ec2{vQb5fndV=yawv#EhrQ8*koOnn0m|nx0 z&xzd*y2=Pft}QP86bbXS)o9B|>{ZeVos#BOQUcz~wiA)zU+$FW$rfI^S6(m4+OHqg zp*cZKva12-YMYwf39ULtD0IrQ9voQ?d`LLa&z0fl$U>k5V5mFo2~h)&!|?>?iX!9( z^f*J*hkICyVWpV|6^#X-ADb{SL}`4+0Y^Lt!1;dU8ejqPAO!xvgWx9*OTy@ni0@zPR_>UFvf`}1O)6v7lmEUlw7#gEI zy+zL&*PRO4T1ViZg7rqc&p}aKPG z{@ATDE8-&bUiW-(cD+VFvzANxbM}ht(U+BqF-VHrYdx=E*O*cP|&rZ4EwPzTgqN8w#&xJes$RauBY^pb1}nkZH75FoKU$C+*|{^BHuy<+lo~ z?+tR_xy@2T|Mb~N*K%c22<%=wi_opSZ6msj%0;4d}WgL@~6bt3R2v+S{7w)Xk;dF;ws>GC&P8l=aX8G1;cLz%;FBGLdlZj<52|)tl40)LLET zs^NB)r9N+8tHJHWpA85ZhQC`T7*vW58|6y%wM)?nVq>3-wlmb)RA2Wj9J^-EPkf*5 z>)mw)u~SQN_maQTXHGNO3GxdLXmwfh+@USV6k%ct2u`UgoL?5P%+K1rePRFJTN%Ux z6>p92K7LN}QiE$K0l30~-#z?H;0^|Ud1C0fLJdcSm%Ql|jmsGOwb&}2So+?on$kaX zMn$k4!L)j}_CCB&oFY*AF69PE{GquQ6O3S(#F&K1Wxi_^j}v3hP&X3>KLU zU++3DfypkJYc}+uOWqY^m*zP`eDg9db398#ut@z_o>pu1%k;6Eg0uErU)g&FRFM!{ z<0SI8rxM6j6AY4~Ox@a@*fyvkUt7{KwH6+ARjhA}=o|^zKQ0h7n55FAs6qtebfeAQ z$ctsHKKAq3)8vunKQU17%o z13-AFwFs|j!Nar&!Ab&69`KhI!V^Xck0k|RLVUd@zMfW@CtevK(BipD0w>TSj8(?t z$AWyoUs9el&=Xl`@Vohu6CM^c0OU_Q1N9{NRfDS^E5dF@pnq-!0O8U4eMClcq67l& zC7$6wJr=(eP?wQzk3Q6C=T#=UQ=ArK2oj#c`#gBW0C$n2edNgJQJ(OO@HlGGk~b@> zzqvg1nqNj51La8MWaS=>dbb3_H{qazGM3Ay7IP_&JF^Box-XX(nVT?ZoWbyjy)d}E zw{ZN#XUC36A4(>%I=!ivnK*!3!-uZzTl4Yg^Np65AJ!MdFivNp7GiM#&06oBsMiyr zrb7nhN*+?sl?n>cW4ETSKR!47K0n`6Q{xn|_Cn*92_-;q=3Y0FOS5@l>{;8Z%#mrV zK!A6uGzPV3H1?35vLfUfdk>*M6dORF9QJZK&dc}*qaD0w}6bwo^nd!l5*#=R* z{lfeqt71IG2e%uIyozc=CGi z)4J+u|J(GGz4^85sgL&Rdi|$P&pq61og(7Aw5oJI>}5H{T84EtJ8ieH?ktu4$ZTfJ zbN`1hbqS?+@r%Q!ZM7emt#@kl%d^riEk)ci>&UIaq*7~~?30X44DXl#KEi2clxznB z(=M%ebd;VyhZV75ey(joezlCj{d~{kVL+l;lhw?M?q%S*&_7=T35I zDyE`&?U%x~KTPU2t&C;4-HM>PtVAbsE!BiR$(Om+-*TE?i{=aTy4QxL^(V~*WbU_O zt@4{@guNM84Je53ex=fQP1&u}c3@0?kkXwy0{nP>h0k;}*L`I&#q*Mpf%6X~)dFn@ zOJ%_Z`}uS1hGSQWciyxbm}Vu!hTQS$OdrciflN;sF#ArwxS?I%uy?AmZz$mzFFQS( zBS)c#ZK)lzyHIME6c!@Tm1orQNlb3nm~j-o--iQ;>W$KAo0FXafOq=-2bw9urT(A3 WZJ4oP>9=AgZ>Ph7Vh(HEm;VD02o?zd diff --git a/pictures/color-tomato-theme.jpg b/pictures/color-tomato-theme.jpg index 6180d8d7fc68d94d019a767decc50826721d3533..477709956e704ea4f26ee6814bcf866a6d329505 100644 GIT binary patch delta 5012 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 diff --git a/pictures/older-tomato-theme.jpg b/pictures/older-tomato-theme.jpg index 333fc46fbe3ff60a473aac24ebbd55a000019e60..bf1024d30f46fe037d241a808c3b4faf0fc39eed 100644 GIT binary patch delta 4260 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 wky$??sL}?@r0PcD{@WtzDqOEOg z(Xds37C-_JKn@VEF+f4+Kp+4DqLvhIhytNP1Aw##nd$)mps-`7WPVlk+lHE`B>=Es zF1{FA@BH-FKv_oy&jtWVNA!M`y*lebJ7fyoaWx>W+n)!CaA3HziM#Cd!3qKoB=NT- zlnk(% zndeT4akf&o05!2J>Cx!g38FeIArP+K17S$u#a93TYB%PtY>N;8zg49JfcuNO7k1@A zC9Dh6@q5m}GNm-iGiK3Yx-~m~RwCjnM&hV#>@`*8t8s0bw`*215XV zmU?>XTGRriAwXzBU>E>rWkciGIk*sZ+=_O0LH(i z2Wf$yY5wI#WlAMB4_}M#teMD8ck5oMV1L|Q)tIfR_tbCs+in&K&~{hRnn7pe)twY) zauK8>D!h+0%M|VET(oB49!LCYK52^Tu%yF~>pCY*S@YI4FBEd}?%FpN``(eWE|}mx z{x0}5rysYI?DMy!oCY=FLfvfT!`@ zimSvs_q(3Y#{^2e!HSGUJ8X_7B<&atFt`VFg90L?qICC zoYoufRE$fK`YSnnDlx~Vb{A!4cb@!C&TOaGX=-BQAIE;tc$~hP^1qKr*s8Oi_K|oMi8U`Agf2jdcA%e0Z z*f26?G-v_AD-JkK^N@TvJBN_0oKI3so0f&6(}Ds%Ic50&V4_tAZ)8@xSUaL>U*JD5 zRwcdJ>htH<^$F;(>i6OujBqt>R{vZOx))K>|5(rDDF>6)>mQO!H#fJPthNbra{_%Q zn}aG6xlC3onP&jqI?`JEkNypVuWF#=KspO{QyUg`n zq(#zUSe%_sI@Za$(2k)HoZnzpw|1Bj`nxo(pN1SYpW8`j`6c^qEUU3hN2vwX!65fPVMK z_%4SxD8sU2560(n?w4(DHSN2-X=EBf^z*vb8f9Y~I|TVA-IP}GhHmGv_3N=H39Fy} z-0lqDq%Myrf4%Y$Zn5#qWjkNc{$}@7+LNQ>TC_^^T;rABV+PkZ*v=J|4yJKDWGZbP z{_C~%=NG!hUddmd)F&LjBxKv%wMn83y>qQK-}5Auy7?u!=0;V| zkjkQjU$&%{V(Vkou3K7Si|1r*TN5Stw9%AP(%`;$Zo~uk)4oZ)yrmkC`oU_Rr>Nu& zRG#JGbzRI-jcu~x{JK?Y_TZh%XMj&p8nYQCFNm#gl`hOozVqJW@`J|%y63m9GVX}# zQJTj7uAm#p8_X-!`^Ej%>xp&+vxEZ+EFLSoI`6UxVjoN* zE6J`Dv-yr%P?m?x{J$n8eJoVa2`?eE>Zs;b$Qg-{uSO&KQ-u?sOrTm>JNqN*j#_MS zrS;@xd$Ho5r1OSsUkxXD807rxuXs?ln+%?PPw+0#He<4^US56j>{AoSC57#y*Jy+q z>7^XK_7FK&X`^*hzjm93ez#5c`lMs<{~QU+LvUBqGt&obJu%F4S>8v0GEsthytHKMa3^Ps6UKaCksH@TYF8 zqKf~MwK&N!txH|56VHS{yc{HKadqp8WU#+pH+2l9lWA2#m=xN44tzxCaz$1~jeaK2 z+pLa>fYu`bsk?D;8>t=AGb(m0xw#;JzD0jJo40GIGFn81 zO|wF6;3OclA}ID`JOXm5x3JIpk&qefr_ULxsi^0i1*YMsOsimH_}w@{jZ?mEDtwRb z)Y`3|`{`hG8^5fty3B%oT&4;?vGN>GiuCaANw$!nRpMTunuxbCB~K!iyorKFIHjM2 zrtW99`7y)^iCVqhpEn2uH+FZ7RT00@1dP!Kef+SY?o4FRAL z8t7m>H2jJXoE{3-7y4(yKcnd6|E-bwLW%SM)d|)|hyL3O22o?7L+OQb|JBHD7AXP< z0tM0hcY-*C_@Hq~`EBr;t^Z^PeE%Y-iL$uxocfm{P1C>R(Wj&_s9dQ2RC<4L`FaiRA* zu@Yh9FCCdS5;MII3PwSGGa;gMZ5PvvDAGXD1g(ks_@yN`~4ZBDSiw&yT{ z?zs!B=w;?=As8Jo&Uiv9N#r)$ zIUbFBvJ4kBty{XS%x*Y*V*rgSTsX|5!^i_?fOKr(Zd@c5yFm#z<%Bo*Nur z+$%e!t<(J|XqS}Vp5t0`B6T-7@isBPB!8G*qMg&kEDw{!a>3=pe&i?c4aCj}uX+F$ zyQkT+6%iJUZO9>nvOaap7~*S>_p9ElV|6Ow{^S>EhX_Z)dPE=g$1})B3JHeup!lx{ zskrch`?juyxg61KHiUF&O73;ssP1}oi3WxXjVrG$Et5ylhBfvrH_;25f#&(=H z!OL#(>tpqte&lH~O8tAiZFkL-tDn?>HcYgC(SnI-97vH%ljU{L8 fM^$MKXH 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 I4A%6&0FKnsC;$Ke