From b3f83953ac5315509819a8d65364b1a0a25fb17c Mon Sep 17 00:00:00 2001
From: Adrien Bonnin <adbonnin@ippon.fr>
Date: Wed, 7 Sep 2022 10:12:35 +0200
Subject: [PATCH] :memo: Corrections des articles

---
 docs/01_decouverte_des_bases.md     |   4 +++-
 docs/02_integration_avec_flutter.md |  28 +++++++++++++++-------------
 docs/images/zelda_sword_2.png       | Bin 0 -> 10322 bytes
 3 files changed, 18 insertions(+), 14 deletions(-)
 create mode 100644 docs/images/zelda_sword_2.png

diff --git a/docs/01_decouverte_des_bases.md b/docs/01_decouverte_des_bases.md
index 2bfa793..1b23ac1 100644
--- a/docs/01_decouverte_des_bases.md
+++ b/docs/01_decouverte_des_bases.md
@@ -143,7 +143,9 @@ Les ressources du `Provider` sont libérées `<6>` avec celles du `ProviderConta
 > Un état ne sera initialisé qu'à partir du moment où il sera lu, reflétant la nature paresseuse (lazy) du `ProviderContainer`.
 
 Pour des questions de consommation mémoire, il est parfois nécessaire d'écourter la vie d'un `Provider` en libérant ses ressources dès qu'il n'est plus utilisé.
-Ce comportement additionnel du `Provider` est à ajouter dès sa déclaration avec le _modifier_ `autodispose` :
+Ce comportement additionnel du `Provider` est ajouté avec le _modifier_ `autodispose` :
+
+> Un _modifier_ est une méthode supplémentaire appelée lors de la déclaration d'un `Provider`.
 
 [source : autodispose_test.dart](https://gitlab.ippon.fr/adbonnin/article_flutter_riverpod/-/blob/main/test/article_01/autodispose_test.dart)
 ```dart
diff --git a/docs/02_integration_avec_flutter.md b/docs/02_integration_avec_flutter.md
index ff77cd5..969ad8f 100644
--- a/docs/02_integration_avec_flutter.md
+++ b/docs/02_integration_avec_flutter.md
@@ -1,13 +1,13 @@
 # Riverpod par la pratique : Intégration avec Flutter
 
 Cet article à pour objectif de vous faire découvrir l'intégration de Riverpod dans une application Flutter.
-Il fait suite au précédent article sur la découverte des bases et s'appuie pour sur ses notions pour en ajouter de nouvelles.
+Il fait suite au précédent article sur la découverte des bases et s'appuie sur ces notions pour en ajouter de nouvelles.
 Le code source est disponible sur le [GitLab Ippon](https://gitlab.ippon.fr/adbonnin/article_flutter_riverpod/-/tree/main/lib/article_02) et les exemples sur la [GitLab page](http://adbonnin.pages-gitlab.ippon.fr/article_flutter_riverpod/#/) associée.
 
 ## Intégration dans une application
 
 Dans Flutter, tout est widget.
-En suivant ce principe, Riverpod s'adapte à Flutter avec le widget `ProviderScope` dont la responsabilité est de partager ses états aux widgets enfants.
+En suivant ce principe, Riverpod s'adapte à Flutter avec le widget `ProviderScope` dont la responsabilité est de partager les états qu'il contient à ses widgets enfants.
 Plusieurs manières permettent d'accéder à ces états, le widget `Consumer` étant la solution la moins intrusive : 
 
 [_source : consumer_example.dart_](https://gitlab.ippon.fr/adbonnin/article_flutter_riverpod/-/blob/main/lib/article_02/consumer_example.dart)
@@ -45,18 +45,18 @@ class MyExample extends StatelessWidget {
 
 Un `Provider` est défini pour retourner `'Hello world'` `<1>`.
 Les états sont disponibles pour les widgets enfants à partir du parent `ProviderScope` `<2>`.
-La méthode `builder` du `Consumer` `<3>` fournit en paramètre un `WidgetRef` qui permet de surveiller le provider et afficher son état `<4>`.
+La méthode `builder` du `Consumer` `<3>` fournit en paramètre un `WidgetRef` permettant de surveiller le provider et afficher son état `<4>`.
 
 Le `ProviderScope` vient encapsuler dans un widget le `ProviderContainer` pour le rendre accessible aux widgets enfants par l'intermédiaire d'un `WidgetRef`.
 De la même manière que le `ProviderRef`, le `WidgetRef` est une façade pour le `ProviderContainer` et le fonctionnement attendu des méthodes `read` et `watch` est identique.
 
 L'utilisation de la méthode `watch` indique que le widget sera reconstruit à chaque changement de l'état.
 Étant donné que l'état du `Provider` `<1>` conservera toujours la même valeur, la méthode `read` aurait eu le même comportement que la méthode `watch` `<4>`.
-Ce choix est motivé par la [documentation officielle](https://riverpod.dev/docs/concepts/reading/#using-refread-to-obtain-the-state-of-a-provider) qui favorise le fonctionnement réactif de la méthode `watch` par rapport à la méthode `read`.
+Ce choix est néanmois motivé par la [documentation officielle](https://riverpod.dev/docs/concepts/reading/#using-refread-to-obtain-the-state-of-a-provider) qui favorise le fonctionnement réactif de la méthode `watch` par rapport à la méthode `read`.
 
 D'un point de vue conceptuel, à chaque fois qu'un widget utilise un `Provider` il en dévient dépendant.
 Cette dépendance ne pose pas de problème sur le court terme mais peut s'avérer coûteuse sur le long terme.
-A partir du moment où ces widgets sont utilisés il faut tenir compte de l'état des `Provider`s dont ils dépendent.
+À partir du moment où ces widgets sont utilisés il faut tenir compte de l'état des `Provider`s dont ils dépendent.
 Cette préoccupation est particulièrement présente à l'écriture des tests où chaque `Provider` doit être correctement initialisé.
 
 Le widget `Consumer` est une manière simple d'accéder au `WidgetRef` mais vient alourdir l'écriture de la méthode `build` avec un widget supplémentaire.
@@ -124,11 +124,11 @@ Ce service est un `StateNotifier` dont le state est un nombre qui peut être inc
 La classe `ConsumerWidget` remplace `StatelessWidget` `<4>` et ajoute le paramètre `WidgetRef` au niveau de la méthode `build` `<5>`.
 Le `WidgetRef` est utilisé de la même manière qu'avec le `Consumer`, les modifications de l'état sont écoutées `<6>` pour être affichées `<7>`.
 Le même `WidgetRef` est ensuite passé en paramètre de la méthode appelée lors d'un clique sur le bouton `<8>`.
-Lors de cette méthode, la lecture du `notifier` présent dans le `countServiceProvider` donne accés au service pour appeler la méthode `increment`.
+Lors de cette méthode, la lecture du `notifier` présent dans le `countServiceProvider` donne accès au service pour appeler la méthode `increment`.
 
-Remplacer la classe étendue par le `Widget` est une solution qui peut se réléver contraignante voir ridibitoire pour certains développeurs.
+Remplacer la classe étendue par le `Widget` est une solution qui peut se révéler contraignante voire rédhibitoire pour certains développeurs.
 Cependant, ce choix d'implémentation simplifie l'intégration de Riverpod en donnant accès directement accès au `WidgetRef` depuis la méthode `build`.
-Comme pour le `BuildContext`, ce `WidgetRef` est passé aux méthodes qui ont besoin d'accéder aux états.
+Comme pour le `BuildContext`, ce `WidgetRef` est à passer aux méthodes qui ont besoin d'accéder aux états.
 
 ## StatefulWidget et ConsumerStatefulWidget
 
@@ -208,8 +208,8 @@ Contrairement au `ConsumerWidget`, la signature de la méthode `build` reste ide
 La première valeur du service est lue à l'initialisation du widget `<5>` puis ses modifications sont écoutées `<7>` pour être affichées `<8>`.
 Le `WidgetRef` en propriété est utilisé pour lire le service et incrémenter l'état.
 
-A la différence du `StatelessWidget`, le `WidgetRef` est directement accessible avec la propriété `ref`.
-Ce choix d'implémentation donne accés aux états de n'importe où dans le widget en conservant un code lisible ; le `WidgetRef` n'étant plus passé de méthode en méthode.
+À la différence du `StatelessWidget`, le `WidgetRef` est directement accessible avec la propriété `ref`.
+Ce choix d'implémentation donne accès aux états de n'importe où dans le widget en conservant un code lisible ; le `WidgetRef` n'étant plus passé de méthode en méthode.
 
 Jusqu'à présent, les `Provider`s étaient surveillés avec la méthode `watch`, dans le `builder` du `Consumer` ou dans la méthode `build` des widgets.
 Dans les cas spécifiques où la surveillance est inutile le `Provider` est simplement lu avec la méthode `read`.
@@ -314,7 +314,7 @@ class _CounterState extends ConsumerState<Counter> {
 
 Le service et le provider associé sont identiques à l'exemple précédent `<1>`.
 Un chiffre aléatoire est retourné par le `Provider` `randomProvider` `<2>`.
-Le `Provider` `multiplyByRandomProvider` `<3>` vient écouter le provider `countServiceProvider` et retourne sa valeur multipliée le `randomProvider`.
+Le `Provider` `multiplyByRandomProvider` `<3>` vient écouter le provider `countServiceProvider` et retourne sa valeur multipliée par celle du `randomProvider`.
 Un premier `ProviderScope` est déclaré `<4>` avec un `Counter` associé `<5>`. 
 Un second `ProviderScope` est déclaré `<6>` en temps que widget enfant du précédent avec également un `Counter` associé `<8>`.
 Ce second `ProviderScope` vient surcharger la valeur du `counterServiceProvider` `<7>`.
@@ -323,9 +323,11 @@ Comme précédemment, le widget `Counter` vient lire `<9>`, surveiller `<10>` et
 Les deux widgets `Counter`s partagent le même état du `Provider` `randomProvider` `<2>`.
 Ce n'est qu'à partir du moment où le `ProviderScope` surcharge le `countServiceProvider` `<7>` que chacun dispose de sa propre valeur.
 Le provider `multiplyByRandomProvider` dépendant de `countServiceProvider` dispose également de son propre état.
-Cette dépendance a été indiqué lors de la déclaration du `multiplyByRandomProvider` `<3>` pour que Riverpod en ai conscience.
+Cette dépendance a été indiqué lors de la déclaration du `multiplyByRandomProvider` `<3>` pour que Riverpod en ait conscience.
 Il en résulte deux `Counter` qui interagissent avec des états indépendants avec un multiplicateur commun.
 
 ## L'aventure continue
 
-Maintenant que toutes les bases sont posées vous devriez être en mesure d'utiliser Riverpod dans votre application.
+Maintenant que toutes les bases sont posées vous devriez être en mesure de comprendre et d'utiliser Riverpod dans vos applications.
+
+![Zelda sword](images/zelda_sword_2.png)
\ No newline at end of file
diff --git a/docs/images/zelda_sword_2.png b/docs/images/zelda_sword_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b9b83cc9f1f4b166828551cbc8f635145009f31
GIT binary patch
literal 10322
zcmeHs2{hFG_y2p0eH)argo!p~%-ETlvF}+zg%o3EFj>YjmSmZvNQ8DhiIP$xSt1n*
z5wb^7_9cXb?B@3wdU|^Pzu!6k^PKbl{m=QH^L!5D^SSrFU-#bE``-KU=A5OuAs@FG
zHvoXo*htR`02b&LX2}VMeyo<M-T{DjGT6qJW<>}@dizpcC>~@a?SwZONe-g801(tM
z?r=0%W-EV4yX+56PJxJi5HZ;){&lL5RF!mYXLvwREG{6hLwV!wD+wLrw`WTkUW*7x
zl+kTDd(%DJdlHX$Jt5vdJC^3yr7=*uG%o0Pp+v*nw=?d;4v&`E)Ard%N+e4CXL1KG
z;1)8|u#R{Us;1ilc|N$kN!Y^ZLiOBudfJcX12OH0`SjCa$%l4jjdoj$j1?Dj>W$6n
zuU;KH@`16Om2->hjj=*@g=`NlJ%}w~Sy<NpYkuwXJH7sn7msz-nz~}DPX+{sDkD4i
zRZ2U*+(L!LXRSuun)p~Vm2O<D<a^?C$;q3x6L_P?{Z*xg^|SBIy0*Apn2PyQzqs1b
zIa*RDn)l^dS?eI#s!;aWk47&iPN`y{)GMh$T*ZyGdA)YM?>A&S5zd|(9(W^2^Q`yy
zbYi;LW2c2yozDT*!wPRiTLzuj0#W8URkBN$0&Osq2N44&ZsYFH$DBczKgEnF+E-S;
zaT60wezH`VW)VCS`Et0j!mBoHJ1BCd5#eW*h9}+F4T4HV4$8Ba;3lQ&-C0ie9SS(7
zEE3@GT;z4Qw05yTa-(I=%i{^}k74QOF!_LYCkC{sb8Y4qOH(XQ5N7q)ikGc|vD<DF
z(|U8$3Z|yA*r=|*(5!4yL3r)Ms)T`&wF&PF*mHe1&BqUMOO0OKcHT(v%5Jk@<L#Se
z)7_?0Kd4Z42%{d_7f>EQ7}{N6lU4Av<A?{BwzWN_<G6cPVC=^xzp9TCe8EyacN3!;
zcj+2Rc+POmC7q~|vvy7P3^;$4cd9(*!9n-7&FG@$8q-5|#iPeFsYM;;`O{aAKAkA;
zoOt}`W#eMQG^}m@OhFK#MtpRSyZXc6u?XDFXg~JX(q#7j(T!!d)BHB=9^R6yF)WwQ
zdC-W}$frIwSpjo>v*E{({tJCq4!BMjzDOKWdr|3{By)d4duVlV9M@KN?e+=6*M~Z4
z$BitzhcxUZS`4JP#_oM+RX&R*?P0U(IuR$gx3xxmYA1h1eQOMBs)MY{`}f~@{i_^m
z9}a2r@GD|EGQPm+2Zaib-M2%XHbnUlR^mm%KCp{+He&{lacH@9T~({&dSlut%WsxG
z7gxfO+L-gPZTEGuU1+_7-IZZ`rTrfyw5?J8#N@IEEdu4PZ2Xj@cAe92o@yUQRy1rn
zF>_Zky-Bjoc2DZtO;2B#Sa5l@x!O4xlIy5xiRM8{vAKRP`nGdy(WEbN+As1>$heIt
z6~(8fyT+Z2zj{k$0%srGRy5}}V%Oi5_TPk&^;=NMjY(<g8?b))G#%FqSIxiFH8pc3
zYuICND;b*Zqz$=^{C_ga>lW%OjGRYp4Kt1YKW~G|goj3-{7`2<Bk^#uZK7L9vow7U
zpR@Q@WdR}owxzs%K(lC@1;X(XgKl6SrK~fOV2~l%%sH+rcH75D<}M^zNicBR(#%;2
zNoYng%KVhbwyklN>URa1<^e`BHV8`Oe1btVg2Fl)o|f2jzB19S%IWL7SF)|VYUXiG
zmT3i7GP`A(t+|Y!-FqOEpj%JD-l!*S3iSHJ&cIzkR|Z$M^Solijl-btP$O6DC51iN
znfG0ET^@>?+{u>9OBy1Pe;kYJj3h6LJgXx=-A>qbigPIEc<78gvG9iLskmv$FS$3^
ztzt{cOa%(f>Lf;eC{q_zJjR8mE4Xqjz*e_T=gE)-`<DmnN?2U=x-V<pHH%ig+*s4v
ztTum149o8ENjk%Do6$4B2~V3zirx#4uM^4+kIvU=zLN|oEVv-AQGbSh;NgDJJoDa*
z#D|=`&pmmb`!$@M%B;*a9pE8kMaV769#PBva^K@~^_`Slf0^@PHEnV0LV;ynoq?69
zgRF}_yCNt~SI@j|5aM-jlRG?ubuFa4By!_eYCFVc#m{e8nYkC!*{3JfWh1!dn=o~r
z-98xEy}S{HOQ43utXCuUvV_d+$+{xh*-X<0<^Ia_v~JOMZnpiY7o4B^b_pJEo8c=s
zfA90Qeo<4?Hy7-Br)_OPiN9y40=8T>!K}xGkS*)>G%-eQQpz@NtGIYht$UBy(W(yb
zMRuMaeJAhbji(C|bIbD54@-K+O59bByq#meJ2z|3z{RLP_6Nr*6(;DI5`MfCY{oPc
z6FlAUbLkoSn|gdt3#XBGR;aRf^byY<%-MhSN>SFm659^N3eki^0^I?KOf^oL*2mUA
zW-p)C7m+i3fM>1aUaGt-(33wU*1TV!qC@YKL*-^C*0+}nN%axoLOZsqzb{&hQQf$6
zJI%38Oyud?Po|Mgxm&jl^(hczvWj-dIdtq!JFcZC7JWWr=@hcpBhraAa$rb5Lqv2J
zNAb;e&O^tZts;Y)ZjW(Xk>qidGDI&Xy<X*v4ZD}4$&yy}y1mM6WH>PAXj3z>cZ`@n
z^T=nisX6b>OGDH6$j9+dpI<f$6DK*(_xBYXDU6ssx|?HQTbP=%&0QCbf^*fE-pGrz
zSP5xu9((SRe249|4oVuk{KmvwMmMUuPDCTI+oCR-hetk+w{Bbc!+S<l0nXuv)!8Vd
z!UiSch7>WDXuag<r`V^StQXQ7dHbZy_gt#A-SS54{RYgD?SuOgBU?uUL!>W79Y*f4
zC;3N6!}o9cz-p8zR<QLD5O}&N9xm}#lEqR_U2BWvo-DQp9FYx&0$s`<E!Xa6{U$FY
zo@4TKP+`l$$I**|PfrQkZMHeTe^#g>pTkUBK0H$MNbpHINBK+#`^9P@KM`-S_d+Hv
z6)+^_EO@reZ>d+ai_KeD{q>H>^oad_;+uGe&IlmJ;&$Jr8)j*%q@Hm;H*zELi3#hT
zXanmVhb}*Ii+pfaPdroK(d`a+(lKGQpk;j4Fe^f)Qcs}xfLM|aFV|o~PpWYys!Ue!
zMV9aM9~POz&tkT797}|U$SQ05zT>PE9+v%XtZq4B8@TU`*$u&E#rC6YZ}ZH)JjgPy
z-gke{s;7cw2LY*0AW{p)c*PH$%6!?UZ?%a3eO5R0;3Iy`YOV9?G@semmNF~-V-{YM
zdxPy|@}c3>ygsf*p>Y*#B(w3a0cHY8dJ_y*N50s_l^M9MJ!D8Ub7tv^ZQXlUa5tnL
zOfc9b)y(-W#ckUSeNyz3+v@eJdtP@PXd8d{)<jpn!^QlB$+Q*!g=dDI?)l_nn+D@r
z-yJ`AE`vMq#!2>KaYfaE!Rqroxi**YioqWqY`vP%1%Ie+bZ6+@yFH(jx3@J}YDkyr
zE}nC4w>C@m|BBCvL5|e#QzmX?oZIThCn_wzKcXh=<eQI{HSD@Ve0$k!d1OhEA{&#W
zxhL|KCv~nn8!YVhyB%R5fwq2ryWYcS#Z=|il>=OPsXhA7vg<c+JJz{))!Pkeo!hdg
zm2|~(G5%Zt@$(&?5NV>m;TB7e)^o9YZSFqIP;!ZQplH(cOggPbUr>BGD(1KnRY&%y
z!@XVG4;{(zrHU=NosE$mKgTO_NjJA4gL}&nZ(RdkUiY(ul?bcxXKH5}4?RK~kYqF7
z^+s0b1;(EAzx(ZkxZ>>LTbij!l0ysd8zWM;UMc1s3riGUibdV#lqIH4seUXERZdOg
zl_~Ru$#1b!tnvSReRp)siPW-P8SF$lr;ckyJxQzk`Gu~4*X+Esq+LAuUll(;@B2Qo
zV0Jn$b<{iP)w2mA{aZ|~316Ej1+9PZ?8gOa-Rf+4rudFyG}Je_ckMd-e&N?cl4xf`
z7#g!Na4q>p@v9dRW#JFDE?Vhzw+e*H-k~0kE+JG=lM+kv`_+W?9F4woa^FF3n+dxc
zVyHWl9$f<2YU!zQg&xtKNs4?8-(36Ue)}S|-S0~Z4>o+K377eXo}{d|Ztwx8>_(wo
zw%#jh=OjXxxL<8v|FQjv?yYkk&RW|WTg3BcL_ZleHuE@mb8dQfsAH9Uedg82@M#{G
zfZB^C+Y(Ajq<2d4_GlI_>3cmHY{p4^3{#lDy1!*Z-n<f5hF!q~Dr~d++_v)E^b4t#
zC-4ixqAUK1AFadX-KUTB_f4p`iU)mYDb-G}u+~~Me>0jFv|ai|LwQ4X>}n-ERHs6B
zU!$R3szWhrcHw>}wr5@2R0WaUAv{`|%R((<B|R-^nJEvZPRo71q}Py3vk=17Hsg$E
z<V@$bH4V#!I-+N|BoHHKB(uNaogzxai%Og$O1K@0=TsSvPOAuh6S>E)gwx+Z=b%W6
zuCArAuI`^lALzhyGc*xrRIVj*w)>vR!QK1;0zTE2$#T)*>c@p+EVs6DXJM~9EOMBM
zUEH|Y@Kr%iPlNOOSCw{$ISy+JEW><gzE-qEp;A+Bl=F-JqNur&xxtCOS{c`pT>N8U
zH@yCMpyyCWI$YVfr&#cgMx1Pt-J6@+w)gHWnGoz*IvVS`(7vJ({QhPooo=+RmbYa`
z7xGqDK41M(h2Wvf2mAc`4qTEqTCVo5>{qL2yT*1)RH5a;i9XIJwr<4qIJ>6S=$+@%
z9^SJqNtm)7d{Jq)=dj)Mt>rVlH%oHs{Oxs(oCHl1kUHAJ+b<Jj44#|EoY|OM6}o&n
z+fn+OPPUMU#wN>C>>p=OGhR)0*)N>)LCbF8z&dUjCW>&5v&7x#50Tny-p|U3haV2E
zb$kF<O1ax^Z$HENrITGg`^b%44u=T<w>axjlfCio_JQfLCDBmpO<zjcg4<q{s5JO2
zg1Zk6zZLK45fG8J{88NS{CUUH52{&SxMtpM-&X;|%w5nCHJAb&MQzRYV~JExc>;;*
zOqLJw^oEYA0PNEY@+J`7$uy)h*_Gmjlb(EDDvhL&aMFiW%rIu&x@0$sQLr!BI@sKX
z80=2eAW3WDx%UNOAplP@jerdD^zib-2H~XFaIw%mQ;e2Iu9?u>aniPCmPlQyFBz#U
zuPl#2=?75)6s7Up$bG&f7p#?@!A}V22`BAFqj_V|=)k~0`9LLks;?_rK|@0WjZs7^
zDxx3@l-~(28X*Yf<tM|0SjW&K`w@L9-ZTo;3(3SJI8*&;IB97}kNh(}Pj54`U+`Xj
zKUskIKnD@L(F*byw5KQf_Z5CL{QwB$XF&hs3O^g@M31&2`%(RUiDdl%vKLL}cL);k
z*LrV%UyrqPNJKQ*gX{^J`axb5{^ruq*v#_R3MK`v6i@H9RS?;Kv!qd6{vzvdu`xAk
z>HHoDwEP$D->m=4ea#rMGBd;KQHlP{@Qn3v(oFwY5|v0HVb^b!U0jq&N{T2AXJ=)U
zvLXh9awa${pw!h#1QjJ^Rf2*#;WsE_FFzW=i%4cdLE!Qf2uDLfK~ck5K>?-ULL#7)
zofR=Cf{L>$O3hhWQJtiyrl_Q(_8WwSF9oVfg2(SsF`-Bh6j|AsKvq}9pom0OHI%Xn
zfs9gDBdMXB)m5BHE=o{%1l2Vt5)o@a_4On`+ez^xxRTM{Uao5jCgE6ZOJkh0qCDm=
ziKPdD<^nCiNt+RfNDJ$~G&U4ZvNessq*FmvRZ&GrO<7G{O+!UVLE$f>Lu6k+s1%u?
z3K)4M#Wf9cU$9U%5VHhkp+W#_awr+Bt}mHDqx#xVsUA3KW=u%t%3o?TsGmp#8bOah
zBSWAVMMW$|1B+3!fj(8#uqvv1Fp%Uodn$?Ia^nAH&FmiJzV$sfqWD4nPppa7Tgsa3
zv;MUH=s{WQB_wjKE3gFOdJ2Ao05WMUP6%sVMRX&0xssvr@v~n4lvDnPS|C9ig&{k;
zphy}7C6ux<iHy=v!Z@RpT+~Ub3Q(aCHP*@dh3-dnp#>6r$=a?Ej}TW-eXenZ+_k<_
zvVRXI(2dO828b~fMg#R1W9mN{L;uVe&72y4ro0dR-$>cFX7JmXf!3|dpz#GwL-en4
z_>(j!;Q!6*=VttGx<DfTb@Gq+{g<wP>H0?u{3GLktLtC7{t*NJ$oSvt`hP|j_g@Dp
zvKRDgP#|<%a`m{M3;-Nh?zhojJ9PaAfB5_R?-Y**Akz?}#Dl<0u;D%c;XFVW4S*p4
z2LRCAEUxJYWyrR6y?F5g_)W^}ojeVuOF`){IMTTX)LJ0U`vGtbf&t*tUU2%npr9bv
z+QncnG)ozd*BJNDugslfFair1fkeh1d#6h^Pq%Ea=r*;TzYfMaU0huF)-K3CbC^-p
z&S<Y?Fsh)hPDW`Sqcf8+oYv1s%bbQD8d4b3pFe+wTtL@<F!lfWp+lP`YEb3?CBo%x
zWCv9M&j#i<4BWUW0tq>2#%B5)LtGpj8rTDGO@aa7Y&F)?wt@az{<+q-!$g3+=f%;0
zW7s2;yGj{6H~TV32?=0K@!ACSp-?A<?R?T>Eza47lu|}~e2NdFr90)eWWj0`E6ls_
zZGZTI_@f+vKFgOKo>`R*Pmm~^kDul{%LrLgo4xK2KvB3+P#Ao4Y7~$-Ft}aU<43e3
zgI{0)kn_ag{4*pA`2mO*my=M>sConkW&M<hL9_QVZ7@*A3UiA1&LUzVVvZKMv8py(
z#6;_MT0rSBZ*$?ccw_aK9!5AX2>>L~lE+G6vu=>db;sT6o=7VwD&$`JQXKx!+2BuD
z@DV0=R7bh==DPXSE=(&vIURC6ChnGU72(8^25-bCKZgW!2(AXI7Vek?SOD(gb!g<F
zcv~pHbiRA{`QH!1GhA6xL$MZ2mlhk`Zq-?H0I-3T&Q-&swUqzEdjqT1^YPlz@37Ve
zR>&@JJ+wA_@_h)p<GxZmECG=kYLBOLT}0%x;g=t-5^N++wj%(5LJBE;`N0jQRT%<g
zF!aEV^Kk*Njc++HSdN_1l@D&im~V4qkT>^trzf9EiD!WixnU5eIfc-oVdS^6AKu_1
zJZP3@e@G|jdJIun^20d|2lS_5u>xR7?MIm3?WQhD>YdN8*a15*C<H$WrNj%kzS?O5
z@S!uzBOjh>f~PmB&|i*M8t~LQDoB-avh_?=R%RAA3DLVBO9AlJ9j!VF&$xkbqVe~H
zr5!G<pcTeBnM%;Vf_&(2hx6ZIAOVpeK@S0-9;D)4P{F!n3}cB0(EWFo1O%Xm(Cau(
zttp^;00!U#>_`ZF0VG+#NBG&-x={<S#m{oG4dNv~stUHQ7QN=Uh64EjWvZZ~eCg*p
zfocxm!~@2AU!qGOz&nHRkTCPoAF3u3;nmQy7|b#gx2)<@9@t)rzP1W3e_$jm0I-p@
z(d*>Ae+OQZYW<;egU*8$#2*Nt<pZ+vqY#K|DVk|&fIO$^1o>ox<$sjK<3qYEoZ}IU
z;mPnu2zED<?3yk6_^bn;#cIw@S>=3P<*4HTsaSgPcyIsdA&gJU<RY;2Wx$7^R}`#l
z`OT<GR6Qak`%?P`dh?Q0_Fkwr@k5uO<<=iI(}k9xY@d9G4Iyq7HdT%Ed|#51lLGXI
zV6-r*`yN%q(Xo7B_WL%=FvjUY2v0=o<alr4$aC|q`TO_F%PuZSVIb=mAnE9EnTn9w
z`EAT~CVx47J%LJCew!pd<#qqgZ{4LAS?k#a<RRk-FrgMaYg$usxmfdz@62~c!_p;2
z=j_P3&fXKDIeoDv4|ek<qotDX2E@$)@C=VHVWnHikRVp#K=k6&lpUZkY10Oxns~er
zy^P5$N5Wu#e;NztrC*9sZKu>fIa|DyKfhL?S|#!E@%*XNOa-{!ZTl4we}ThkX%Pmr
z<U#i(7=XH#v@}0Ib_a3oIDfYxGRJiV0AzPnmEno`aB3*F7GfJikCl?r#Ise{ty)69
zZCJm}_eu9bCc)gC*VpzFih1?NH>uu8OJ+52vlMlId5=Cfm3m??A1%~$*K6Zm@3nGB
znC$P5DvXF4l&bQMC~Bxgtf!pRQT~`G?3n{2B;2v|!nLRwUM(njR}c-A1Sq=DJ64w3
zeyMz|o^z7Rs#6`;i#~^~EN8%)^Cf(}<mX_qXqG7Wt7Av>2jBoH<-~Jp$}E+z5H;Bc
zf=Z#`u+ULH3HxNQWqtLx5MI-;lS=c8p*LH!iciBpPx9u7{^s~=kpMvMKX#P2-(p#O
zDQ5$PQU$ASlEfooM&<;*CC?^8&7lNDJIkq2r=a>f8V2PC^#?QNPB3sB5wEi5AF!;+
ztBe2Mv;wpJ{dvp=gSylqYQ0MnHm|oS3D0?%sbID&lmSu=YFP-nIz-GU5VQUc{SNaL
z_>dO{K*AH;zTH3dMazFR`%_q>WY^DybY@IPfE!{mbPB3y2yriS#Z8#j$)N6^KH3S)
zvVlef+s_e!U|BO|jti!5J|@O@m|_Zhvjp#23{c=(Sbsc%28tUZ9{y7;U;1a%fbPkh
zRX^7unWJPAFwBoCeSP40Nq9u(%WyL&yG9%xH{NSX<twz&bY6gje2`FJQ`z3}N>fki
zvGM4^F+)^%=G^08$bB;WL$_qfvVrbiO)10F!IZ*m=BV^UaHI-@D^TiR#LA%hE7&ZV
z)fyir`k`&b9m<7H2UjOozgJ{y>b(q(*=4OcDVus`sht^bFIdjTebRP%mm&^r91_qM
z$}5-NopI-o7(?S~+T!;Kf9hMw>|*A-XYc%RmfF?^c%v2crorzXgy;XbGr1plc9qsZ
z1Vyssq~ku-mUU=OLQ_7M8RvwJ_h;)@OU%jI*6kbe;#B%#USafTdqdH#{Pd;6I4Cmc
z)fWDCMxf6wbo_OH=PSeU#V4C1^8*-SP&BFTU`{;C;#J;azBX-fpiw7OlioJzI0(^O
z%$`HzYU<!gl^m<u2dhYiNC*lOE0|l<h@$%pK`*XbN4<+mSBe5w_5;Bo4(Oe6;W&a?
z7&bs~da(cl^g*?NuujP?uN8G5ILuUEMdNIX=|v5Ti5#aO2^26IZ=XUB8yyDG&})}o
n#TV9c>{IXxFGz&o2EZ!ZjNjrxz@r8Vvk;8+&GoW%oFe`U^!@j0

literal 0
HcmV?d00001

-- 
GitLab