From dc7436f36bd9d2a24c6d8032d355867dfe880521 Mon Sep 17 00:00:00 2001 From: Fabien Le Frapper Date: Wed, 3 Feb 2021 15:24:11 +0100 Subject: [PATCH 01/12] Fix custom document not working with wagtail grapple --- grapple/types/documents.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/grapple/types/documents.py b/grapple/types/documents.py index 78e54cf1..651e5650 100644 --- a/grapple/types/documents.py +++ b/grapple/types/documents.py @@ -3,7 +3,6 @@ from graphene_django.types import DjangoObjectType from wagtail import VERSION as WAGTAIL_VERSION -from wagtail.documents.models import Document as WagtailDocument if WAGTAIL_VERSION < (2, 9): from wagtail.documents.models import get_document_model @@ -15,6 +14,8 @@ from .collections import CollectionObjectType from .structures import QuerySetList +WagtailDocument = get_document_model() + class DocumentObjectType(DjangoObjectType): """ From 56633060cc647d263df8aca4f650d5f48aaac1fa Mon Sep 17 00:00:00 2001 From: Fabien Le Frapper Date: Sat, 6 Feb 2021 18:44:42 +0100 Subject: [PATCH 02/12] Add custom document models --- example/documents/__init__.py | 0 example/documents/migrations/0001_initial.py | 42 ++++++++++++++++++++ example/documents/migrations/__init__.py | 0 example/documents/models.py | 14 +++++++ example/example/settings/base.py | 2 + 5 files changed, 58 insertions(+) create mode 100644 example/documents/__init__.py create mode 100644 example/documents/migrations/0001_initial.py create mode 100644 example/documents/migrations/__init__.py create mode 100644 example/documents/models.py diff --git a/example/documents/__init__.py b/example/documents/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/example/documents/migrations/0001_initial.py b/example/documents/migrations/0001_initial.py new file mode 100644 index 00000000..fde48683 --- /dev/null +++ b/example/documents/migrations/0001_initial.py @@ -0,0 +1,42 @@ +# Generated by Django 3.1.6 on 2021-02-06 17:44 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import taggit.managers +import wagtail.core.models +import wagtail.search.index + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('wagtailcore', '0059_apply_collection_ordering'), + ('taggit', '0003_taggeditem_add_unique_index'), + ] + + operations = [ + migrations.CreateModel( + name='CustomDocument', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=255, verbose_name='title')), + ('file', models.FileField(upload_to='documents', verbose_name='file')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='created at')), + ('file_size', models.PositiveIntegerField(editable=False, null=True)), + ('file_hash', models.CharField(blank=True, editable=False, max_length=40)), + ('collection', models.ForeignKey(default=wagtail.core.models.get_root_collection_id, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.collection', verbose_name='collection')), + ('tags', taggit.managers.TaggableManager(blank=True, help_text=None, through='taggit.TaggedItem', to='taggit.Tag', verbose_name='tags')), + ('uploaded_by_user', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='uploaded by user')), + ], + options={ + 'verbose_name': 'document', + 'verbose_name_plural': 'documents', + 'abstract': False, + }, + bases=(wagtail.search.index.Indexed, models.Model), + ), + ] diff --git a/example/documents/migrations/__init__.py b/example/documents/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/example/documents/models.py b/example/documents/models.py new file mode 100644 index 00000000..17b7a5cf --- /dev/null +++ b/example/documents/models.py @@ -0,0 +1,14 @@ +from django.db import models + +from wagtail.documents.models import Document, AbstractDocument + +from grapple.models import GraphQLString + + +class CustomDocument(AbstractDocument): + admin_form_fields = Document.admin_form_fields + + def custom_document_property(self, info, **kwargs): + return "Document Model!" + + graphql_fields = (GraphQLString("custom_document_property", required=True),) diff --git a/example/example/settings/base.py b/example/example/settings/base.py index dee59f63..88c8e3b3 100644 --- a/example/example/settings/base.py +++ b/example/example/settings/base.py @@ -29,6 +29,7 @@ INSTALLED_APPS = [ "home", "images", + "documents", "search", "wagtail.contrib.forms", "wagtail.contrib.redirects", @@ -159,6 +160,7 @@ WAGTAIL_SITE_NAME = "example" WAGTAILIMAGES_IMAGE_MODEL = "images.CustomImage" +WAGTAILDOCS_DOCUMENT_MODEL = "documents.CustomDocument" WAGTAILDOCS_SERVE_METHOD = "serve_view" # Base URL to use when referring to full URLs within the Wagtail admin backend - From edcb1246bb6bcc47fd908d859f646303b4d62486 Mon Sep 17 00:00:00 2001 From: Fabien Le Frapper Date: Sat, 6 Feb 2021 21:57:46 +0100 Subject: [PATCH 03/12] Fix example https://github.com/wagtail/wagtail/pull/6559/files --- example/db.sqlite3 | 3 --- example/home/migrations/0002_create_homepage.py | 3 +++ 2 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 example/db.sqlite3 diff --git a/example/db.sqlite3 b/example/db.sqlite3 deleted file mode 100644 index 90e5ec30..00000000 --- a/example/db.sqlite3 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:798de171052d22d94ca0cc6fa3ff02ef001174e3355ad28afd03337c397d3942 -size 1114112 diff --git a/example/home/migrations/0002_create_homepage.py b/example/home/migrations/0002_create_homepage.py index a2d088a7..59788923 100644 --- a/example/home/migrations/0002_create_homepage.py +++ b/example/home/migrations/0002_create_homepage.py @@ -48,6 +48,9 @@ def remove_homepage(apps, schema_editor): class Migration(migrations.Migration): + run_before = [ + ('wagtailcore', '0053_locale_model'), + ] dependencies = [("home", "0001_initial")] From be07454eb41b4303a9b9a1d13e90d8dceed28e99 Mon Sep 17 00:00:00 2001 From: Fabien Le Frapper Date: Sat, 6 Feb 2021 22:01:16 +0100 Subject: [PATCH 04/12] formatting --- example/documents/migrations/0001_initial.py | 74 +++++++++++++++---- .../home/migrations/0002_create_homepage.py | 4 +- .../migrations/0016_nested_structblock.py | 6 +- .../migrations/0017_auto_20201006_2147.py | 4 +- .../migrations/0018_add_pagechooserblock.py | 6 +- example/home/migrations/0019_simplemodel.py | 8 +- .../migrations/0020_correct_cover_model_fk.py | 10 +-- 7 files changed, 69 insertions(+), 43 deletions(-) diff --git a/example/documents/migrations/0001_initial.py b/example/documents/migrations/0001_initial.py index fde48683..07085c69 100644 --- a/example/documents/migrations/0001_initial.py +++ b/example/documents/migrations/0001_initial.py @@ -14,29 +14,71 @@ class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('wagtailcore', '0059_apply_collection_ordering'), - ('taggit', '0003_taggeditem_add_unique_index'), + ("wagtailcore", "0059_apply_collection_ordering"), + ("taggit", "0003_taggeditem_add_unique_index"), ] operations = [ migrations.CreateModel( - name='CustomDocument', + name="CustomDocument", fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=255, verbose_name='title')), - ('file', models.FileField(upload_to='documents', verbose_name='file')), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='created at')), - ('file_size', models.PositiveIntegerField(editable=False, null=True)), - ('file_hash', models.CharField(blank=True, editable=False, max_length=40)), - ('collection', models.ForeignKey(default=wagtail.core.models.get_root_collection_id, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.collection', verbose_name='collection')), - ('tags', taggit.managers.TaggableManager(blank=True, help_text=None, through='taggit.TaggedItem', to='taggit.Tag', verbose_name='tags')), - ('uploaded_by_user', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='uploaded by user')), + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("title", models.CharField(max_length=255, verbose_name="title")), + ("file", models.FileField(upload_to="documents", verbose_name="file")), + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="created at"), + ), + ("file_size", models.PositiveIntegerField(editable=False, null=True)), + ( + "file_hash", + models.CharField(blank=True, editable=False, max_length=40), + ), + ( + "collection", + models.ForeignKey( + default=wagtail.core.models.get_root_collection_id, + on_delete=django.db.models.deletion.CASCADE, + related_name="+", + to="wagtailcore.collection", + verbose_name="collection", + ), + ), + ( + "tags", + taggit.managers.TaggableManager( + blank=True, + help_text=None, + through="taggit.TaggedItem", + to="taggit.Tag", + verbose_name="tags", + ), + ), + ( + "uploaded_by_user", + models.ForeignKey( + blank=True, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to=settings.AUTH_USER_MODEL, + verbose_name="uploaded by user", + ), + ), ], options={ - 'verbose_name': 'document', - 'verbose_name_plural': 'documents', - 'abstract': False, + "verbose_name": "document", + "verbose_name_plural": "documents", + "abstract": False, }, bases=(wagtail.search.index.Indexed, models.Model), - ), + ) ] diff --git a/example/home/migrations/0002_create_homepage.py b/example/home/migrations/0002_create_homepage.py index 59788923..5c499902 100644 --- a/example/home/migrations/0002_create_homepage.py +++ b/example/home/migrations/0002_create_homepage.py @@ -48,9 +48,7 @@ def remove_homepage(apps, schema_editor): class Migration(migrations.Migration): - run_before = [ - ('wagtailcore', '0053_locale_model'), - ] + run_before = [("wagtailcore", "0053_locale_model")] dependencies = [("home", "0001_initial")] diff --git a/example/home/migrations/0016_nested_structblock.py b/example/home/migrations/0016_nested_structblock.py index a33592a7..3931a268 100644 --- a/example/home/migrations/0016_nested_structblock.py +++ b/example/home/migrations/0016_nested_structblock.py @@ -9,9 +9,7 @@ class Migration(migrations.Migration): - dependencies = [ - ("home", "0015_auto_20200803_2223"), - ] + dependencies = [("home", "0015_auto_20200803_2223")] operations = [ migrations.AlterField( @@ -159,5 +157,5 @@ class Migration(migrations.Migration): ), ] ), - ), + ) ] diff --git a/example/home/migrations/0017_auto_20201006_2147.py b/example/home/migrations/0017_auto_20201006_2147.py index df290266..39ef42fc 100644 --- a/example/home/migrations/0017_auto_20201006_2147.py +++ b/example/home/migrations/0017_auto_20201006_2147.py @@ -43,9 +43,7 @@ class Migration(migrations.Migration): ), ), ], - options={ - "abstract": False, - }, + options={"abstract": False}, ), migrations.AddField( model_name="blogpage", diff --git a/example/home/migrations/0018_add_pagechooserblock.py b/example/home/migrations/0018_add_pagechooserblock.py index ef80c312..aa3cbc67 100644 --- a/example/home/migrations/0018_add_pagechooserblock.py +++ b/example/home/migrations/0018_add_pagechooserblock.py @@ -9,9 +9,7 @@ class Migration(migrations.Migration): - dependencies = [ - ("home", "0017_auto_20201006_2147"), - ] + dependencies = [("home", "0017_auto_20201006_2147")] operations = [ migrations.AlterField( @@ -163,5 +161,5 @@ class Migration(migrations.Migration): ("page", wagtail.core.blocks.PageChooserBlock()), ] ), - ), + ) ] diff --git a/example/home/migrations/0019_simplemodel.py b/example/home/migrations/0019_simplemodel.py index abeb5c38..8a442de1 100644 --- a/example/home/migrations/0019_simplemodel.py +++ b/example/home/migrations/0019_simplemodel.py @@ -5,9 +5,7 @@ class Migration(migrations.Migration): - dependencies = [ - ("home", "0018_add_pagechooserblock"), - ] + dependencies = [("home", "0018_add_pagechooserblock")] operations = [ migrations.CreateModel( @@ -21,7 +19,7 @@ class Migration(migrations.Migration): serialize=False, verbose_name="ID", ), - ), + ) ], - ), + ) ] diff --git a/example/home/migrations/0020_correct_cover_model_fk.py b/example/home/migrations/0020_correct_cover_model_fk.py index 8f9b209f..239bd3fd 100644 --- a/example/home/migrations/0020_correct_cover_model_fk.py +++ b/example/home/migrations/0020_correct_cover_model_fk.py @@ -6,16 +6,10 @@ class Migration(migrations.Migration): - dependencies = [ - ("home", "0019_simplemodel"), - ("images", "0001_initial"), - ] + dependencies = [("home", "0019_simplemodel"), ("images", "0001_initial")] operations = [ - migrations.RemoveField( - model_name="blogpage", - name="cover", - ), + migrations.RemoveField(model_name="blogpage", name="cover"), migrations.AddField( model_name="blogpage", name="hero_image", From 2ff7d9d7345607133f83a31f4c94218fe8f73221 Mon Sep 17 00:00:00 2001 From: Fabien Le Frapper Date: Sat, 6 Feb 2021 22:08:45 +0100 Subject: [PATCH 05/12] Put back db in place --- example/example/db.sqlite3 | Bin 0 -> 1114112 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 example/example/db.sqlite3 diff --git a/example/example/db.sqlite3 b/example/example/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..6544c66876c14196e6e2c760b04e0e0036ab38a2 GIT binary patch literal 1114112 zcmeF431AypdH6?{Wm(50n>gC6lZ|4pH}Pie%so;<*mV*mYZ5yf$KI?1%XB1-Y$dYg zNOGJkuvY)Vv0{EMoX@BCxL~Ek{#O{7-SRvPc zYoec;2ln(2)%I-+#%EKWn%?lh3|%zJ^My*KP+F*HjnBl1q?DDjDZ!wYwM4$o^1^9; zOQa4O9mcmLAucr80mkpy5RBgg#*eRNyr~K7&hP@4&E!+xpDwkQeZ&0L~)PS=$#UN|;G-Zt= zO1896H5RH`_0pn2ij-Ge4z&5UbXyxumFg`l!xw5~i zXNqP$rL~`mh7pxU+u{z1T24%j9z33QwkPh01S>Qoi2`KktWi!(oR~^XOdmgwS8pD{^3&qBjRJm~_NKXu{>iK-Dkr1M1tAz_-rQ3euv39mpSTF!li~B=-Pggv> z!^6<#uyVc#!!->u3gW}~hJ3OHIDGwMcx9qH7*C}6bQ!m?D1T_zu`}VB6X_qwX2P1jnId|J=x(NWT$&buzH5( z&gu)ZrKZl?GHLD3sop;~S|-k6%TVnOe=uGWJ+)`h%GTymn!dQG74?i!)aGF%Qq)u> zlM{1dh7Lp8BnVhAn`ablBCf949EG$=MtrZ^L?#y0EErbJ`hsy$^sFq=9B-4d%_)C# z&bNv2Fyub(L=FZwtZ$zyb)VV?58dhQB1L zfh%($|N6=)kn)wAK|b?}59I9SG{`fTy&w;-oB^3!xdY_QE1N*ZYZZ{aHCt6EyVOXQ8tCJ- zvT>n6=IQM$5mW`nKjR{(IOS3yLc;kHq@OJni5lbLVxfFVn=^`wTGhDN)-gerC4rw1 z+JF)?JqL5_rQ$gankK{M)o8ohna8J+f+$SzZS?U}A7y@_U@U{Nm1?;FqngqJoif@DEN;<)TzSAyuIn5lyKysqghNfl924rrhoa7`ylI8SXQ0U4@Aw^nU(x_{d;?ius zU=(v&?kt~bXBWpQ3KWVFP_whyE+MJS8|7J}HI+P)Qe;Ko&kRGVc~>e)(~DJDXrg?Y z`Y`a%;-4|*^b3X3Qn|fuKA94Z-wL`?7Z43)EH{pG+#L zr|bc3<1THAwbbC$S6^Ccrz;6=i}I0MKv&wOOLkgSSSVBrdQpQxtln0SB*+|>8Uj6g zTzVvjp0-JOAtmy6?S`a=E2-!NUoS-Kgr4LSDJef`7wF|(dd=!nA>(b*6|}QTO-Z~c z-F`EqPPtO^T2@~yRP|!vUgLsM&Xg+cH6%q|;!X{M2F;~`qt&gcia;?SbC}f|J9$Ln zQwlE~z6q3$HY?>*nq>_2siI|JF=An9v7K`gC#ZsOW&pIf$~vEHuCSG*%zU9rsw}J{ z(}9rLGn)0gooP zvh(Cl(EC)E=ZdYDs$41;K{r&QYKbjVb4AiS-xTjJjg~ps3yBe4FUdsZRdb1IZ;gV($N?w znYNTbWiyq~HD)?mUymXfzoe8SQBZWsR+MxqvX}iaz(sKcN zXJ|K}WYW@Nl*^?1g3~R#;K-W3fLd(mklyFB7l$^F*fkBfw3T`w3Yi71Il1!;wO1`5jzziN8bz&qG z?WVeEOx=D&2AW{d%d2C7022qBa`S}+P$81VWw^Nob1Bj)kcC)i1M)?E7P^*F0oDcD zQBEqnC?rSypb98ks)U9rYpzCn5K!Azg(M^ep7ViTHpc7DABzlDHiw;Fz%f2D<`N)4qJ`nj;_I>R4*guNq*gb4D^0bH; zxgq?s@E5}Gi&Vm|3%_uk6MT$@1dsp{Kmter2_OL^fCQe{1YkTab|SF3*5w=aIPQkg zb(_HTHO8lQJ5N{j$~oAGQZ=^S@4Kxj1UBNF%NI+_G_>zoz5^j=Iy;o4k3Z8Vw+-C& z4BvE909_n_MT&9>Ce$RUxx7-@bgyr?DIy7DW4$$xk8e5;i$;3UxN*^UC{&myb8juX zRH>Hc>6bFBM8YylX(4{jC)&Z?C7S&(6X^GC7bHWnmuv%qSu1PdUQQWkD<%!4w$VpOYzh1trsIo|;f4a~qy zlPoKh4YEv^D;5^c`L|Ue)QQ=QVBR8(Z1MQ^dRuN0GjHsh^&POYj!enTy~_YOUnm;e z?rG#}#UR_N=yEx%WGoi4=eC_`gqFe1GTb$)z%<(YbmK|iAzLxo_gx{Y_VaWNpKdPR za>6It;l_N%$W=6Y7&_)V-Q)(%_r^`6#`0k#KG7&Uxl*>GfmoV{8Tbu{V7D!0YpuZ5 zmkBDH;{nLuHhT=Dp;6zAZ4kK!OiMkv1L?d0N%d8>O1@N6(Q262pYk1BOAGr;Ow`O| z$j4a0H(-9zbFesH9a#1qYxSSxWyAAeEb80oaL~&>kJ;?5&YLf~YB9OT4pSc~1HM=h)Hh1Bm;DA4@WjsBhJqoL(!wU6Z@Ak6N!KmNngvna6{^O{c3hGR zrE(9PmUMmdz#hx28Vt0mL75>$5Ijn}K!Z)!0hkX)TW?#hm z!hacg2Rjw}X6(c4j#dxx3=%*BNB{{S0VIF~kN^_+Ul7>r?;W61u}WbcZkyBX&(aqE zz*gtb-JEcW+x!EA&eLQpZ{H~t+=0%yG2bbWXyCT{2X;Bt+9~Ord++uBf$i-=N4EM0 zb~pp-llbAy{()Y1$gMm4yXsdlr@l*z#gd+bSss}~@2P{Zr=&1#xMh>ScPFJ|j{b?c zLp%Kgd!5=_rt`ad{e3$;);@$v6*ha3t?s*6fA3a@uAA%M%~{CcZvTM+TQBTI(sMYu*<-rUZr(qz#lLl+HN1a|e=u(Ar?YV?c5d_cie>?5ou?=2 zHkwnq9regIB*(n{#*O~o?NpN;xIOOg8?Zq*JlM9`zrD{>0ry~;qGBEUw)qDKJkFch zj?Xtl{k^?(UPq>NTVwv-IQ>T1Ur%$1Gf~5CxeaEjoz4l z>n3Z82xm7B`3G*ZDUr!@V?ykjL2q)$q_#AoH*C4?2LHg$_BuDZiz=DgZW!a4p)kvR62shC>^Dj+}`+C9*GaQ^XtoPWZFow})RDeqQ)|_*7U4Z|(VM&sX3= z_=g0L01`j~NB{{S0VIF~9!3J2BtO$TK!&`I`G2qIX9l)9?!cP!|2_du4?0eh0kJ*1 z>f>F3_AH)E%lo(vfkeZ$y%4y|q1H}G=l}5$2;JT$^!i~4*x?AM&;K{w3L(9&kQ?{- znO*i(%y~l7{D0FeHVAw63bVoMhT!B*LZ>nRPwWQmdmY+a=Kq^_`I){Q?)iW0X3({@ zp({3Me>dm#?tIhv!9Pl$+Wz&Ur^Z(v{2p?z(@7?KV2IH3g#{9o80cMD_ z0JP5kV>@gc&G~=djdo-kl4JhAVLJqFCz|ZQE!zOZfCYkNwY8YBsn5@B?{m-pZvguS z9CQAP<8x#y=)~6Re535Ii^JEQ&GY|_Tl`FXd(-@Xb1!h&NoM}=+q?Si zhUjKEyQzM5_a?~Q+Z?&un9#ds;JdGL#q2o$-?|ZE?rf`b(*_7~7F9C;?`Pqp=!j3y zxvt(9gE;QGXwU!qqb>z)=Knh)P#=b@i#VqD_4)snFhsD+izC7fJ#gNxcV;Q8&;R>E zBo8g6?)m?gZihn0{C``}&kWl&+@AK==l?f$flAxXHuL{20f$!894g~}U|?%?&i{LT zj(X6T|8MZxrI(aoLVS}4G&u8yoFq>N@UUMcGD;5*V_S@>kN^@u0!RP}AOR$R1dsp{ zKmter2_S)MOTZK9^?UYsddaej+@9%;KC&2N(AUrF<a0G@6T@&vlz83qt5*agolfMZt|Jf8rLfdD*;Ams4};K>6ak1qg^ z7zjZqJV^io{ax_n066-(;6VX!^!nk+0HII-o(A9vdCC2M5Boy~{>MKgfCP{L5V~Qjs%bZ5|%)WqqE_<1M7P|~j1w6+Ztj3PBN7+$!KP$6)*&%j- z-Ok3@jchpfAF*%7z7qRF?6a{?#y%SRVC-*V?})u6_J-J>#$FNogV^uHUKsn;*aNZq zW0zu;*nDg@rpKNdn~t4`jl~Yd4#do5Eb@cMcO(BE`C{aAkxxecF7p1!yCQFmyfN~p zk(Wna8u_iruScF8xj%9-az1i4l8rnqG97+(_+{bW4Zkol5jh&UJ(7wDkv)-{BHJTd zB5b5P;tBsa{9oa3g})O1m+)u89}j;h{GRYT!fy`0F8sXk8NMOBDI5t0dj6;9hdtketieAdfCP{L5{_!-vU1WIkjb{? zIOea+!#mBxJIuphlEYr+?dIWa=Had8;V;NxH}e+r@MiPyCiC#;W?p9={>(hQ);#b}k;5SK zLi6w&=HUhA;rZln6Z7ll;n&Q=ubPMFk;4G}N{z~=6M6kTR6dQ$ zr&4)_$oLGEcT;(q%Daf%GELlk4QE}Ws*vjN`=UnOr=Dn zNTonzl&6xTaxax5eqYElOvJ53>>=V75)v7rayON`sJxlT@F0~pQ8_?mKao8%vZ)M*A_xo$?3m>}>&~hYz1dsp{Kmter2_OL^fCP{L z5dgzMM zLm*&skNpO$0DO%75c^*C^{_VZ@@qm0FM^opLz+2eA zfjj>%hhO{uKHUF*4g2E9KYsKO2_OL^fCP{L5A8MCj99?};u)p4YWGaN7Uk@DD?` zb*IBm^8KyngPv{7bD57b2VCZazti^(S`sQx6Kc{-N6L9l^K;?wzFWwW!RN7OKWVRjXcFG&FEC zD`m1q(#W_Y_N`%BCq11_bfxGYx_sY_!T9j7=U4Vt^-R%lTj2h_-LhzE^x*MydkO#` zQ2_sDjdEh*#8hHp`uOq0os(nZqmwgoHepl0M(zU8W*cnW8-w$SSXaIunpgC;6Q?OyW&aCSwz0Q)8pYkIz^q z(}&?IcFAaHx4}5CP%q`{)@z~57xmfxL}gwt7J+T`+QW4v9l|qz@efW1HeX z`9Ojj8mc`d9*mbpJ+qeUur4gxeLv!iv z9I=CDvlMquMkqBdM~cT#?Y8TJ@pDk|DlTVS?F#)$yhur+%w@T(wzN<<-?)?+eUs(D z^u*Z7X|u6`2ErYy-axch>h{7^?QAZfeAr3BgMAx=@!6E8rZ+q=LmRHTvmz;F3gKwg}Rfi=Cm|8G_Ga+8ZFsS z_-5wL_>LW(XAd+ZtHbE&0I36=+H!AqycQbutn6)+7z(AO^|4U73Mwz@N=6X{SN(OT zzTPscQ%!cquh;2DrK4@0^JWHl|(v~*WgI=za0=K)Hf(to~%`2VBEVUzH_IicFqa3mfRAIXQ9uXab>={ z4Ask_o{|kc$2$hX?xb;ZEQz$V0Uan}Uwfw!2i;m9J;yzFKE$r*|7i z3qz&Zq_ZqEBEFPoWuSqxrRX(kR3j5f{o=AYQIIoSqXlV6x}kIH(GquEmvK1NqJX$& zo^0E0tlS+5#z#jzSN1mw6wNSqt~GMT9TII*Q`@Sr%6MzN_(gPSO}W-)hSAcmH4<2U ztW{U<^mfJf?D5P{u$A-0Le=d5V789$@K0$g)0L)eFUJsce|*Ws7icwy|Eb%rM@+j?cj2c$zNgIipv| zs!X|5s%j(+S->+mA)iUfSrThytX44>u!mbNlr0sDa2pxcU7Y$FXSwFJm-dmaY5`_Z zug-N?V@a5IBw#H%XDpIf_MP+2_i(L<^zJRBTUeUU&J~J|o9>;HHsaP(cV7M(@}KeS zdmI+rYv59CL&CX8?%qUEUnIvZDX`e>+)zPpLWREKf6q0@B)kL?KmthM5g;JSUGbwk zJq#VaSa*lueq4!u*BtlH`NroRwT)7c-YTA_LzhNK;}hFFL}>(E)v%=b)(1n)YiohT)p4XV!$gq$-AFZbE3pi&>?TY{s>3={G_< zYH{2IZ^R}A*>zdiD|71RVEob^&kEbPzu!pGa)B(oqnwm&jpOxr}mNPhhxi8wcCZ1_y)We)APiqrNvTP3v~!>y2${ek1g%s=pg^edIy2_OL^fCP{L5#JR_?8=6_ zMbG7$;=%Vuq@j~kUoW+=s?W|EId~o7eBH(=dMYsn=Z5cusC!ermX*zsEjyjjPngjy zOPixxwmPEkntz@MQeFK{cBW4?ImYTAR~ewg}qokfer?4--0wVJj=rZ$V#s@g1Ct7toN zkkY!2&{|a$p|y&h-J_sqkGPT2YB*QN(>QhO?GSUXy0N9~khm>{<<{HG*ezv)#BM1J zH$NF-5AhqD^PWU)&g^XmAl{B$8>qG9-Klju$(O{FAar2Q2FpS_+_H_v*l)(Ltg>TR z_K>eP?1LEF2R9H)>|kO8`TV35gdG@T>D9^mTFD1T?W!9?!dlAZ?MX;II?h_wbx3a+ z+g^ieYOt*Dpuuvct%iLHXxM+0CEj&NPMmF=XxM)=O5E*`oOs=M<(sqLnAn{hD2~=$<|vS!uCNsBS@&70m2Yi zE#4NPmp;E_lrQDrb;+0J3e`&8h?C@W;xIX%xB~)|-H=8-6tOI7O=a2El5Uro&N8$$ zon^8+9d|RN;}1lL{jG_JC+-wC4nm5ZL*a&3b!Vu8{+l3ta5(JrfW)v2H{%SLah%qY zIF^w#&bEGtvtw7dZW)O{45Fbo?}X4HzK2>-HWpw6<*btRGq)rl-mu(bSyMmnu&93S zmK|nX%c}Z$hh_D1H{A$vckS&V*40ni7S>PPxE*5c912h?3-eImNEGrdLBHL!jcW1J z@LVaoG!J9bdKCM_o<3ri8lth5Dn@y+T*?=U4PE41!aBM428hh>4_OYoqFb5Jlwhlw z!1CIaz{(M4f}!gn!5%q8TzADL+2f3QV;rLH9O|Z)8}k_>S9gwn>)!(5gTvjHvGo|1 znP!|`Gmd3nJ&t7={l0B8#M!Z{o0wFOK#ZYZZrTK)yY>dD6=fJ~m*EBCbwlhEyRU;- zd&Hn+i+!5Jv&^wi?cQj{v@EhulbDuK_No325OZ)iNbIuDk!Zv;`#aA<9PvOGwJu*O z&sUZ*^My)N4?|8T8t3I0BvD7ZEK^$(Sq8h4Ma^WE-L1(i>s`tAMj#o#zl%80nufUI zN-!9P1iN@I^=Pg%Z;+O@&YPT|J?&5rMB5{KEiarAE&Cf$LuORVa%WV_=6ckDZiqU# z*GsH*#v^vtBlQPKq~U;d>3Yqyu1ml7cbRdlYu4jf7o^{}1t89jT>)~jdIWMM`enBt zLidP%>ne72c9bal)NY>{)4G;@+EJqHQ~h3Qm7iSEK4+IG`}-{(66b(V&t{EEMbmTh z1v*$Uzb8)XFok|bZ5ZUe(`5g@m;EZkewF>twPw~Bjs%bZ5x@sc9zk}COb0$m{?$qS-xD9NmnlH{D8OlEbNGg8T% z%IA_so~q(RAt@!LoM2=miPMvMK4&ClMas&GkjWVNfI0vFJj4Ew{SN#F;PY4SAf`kD zNB{{S0VIF~kN^@u0!RP}AOR$R1b!g|x_!N#Dm*DI5cKti%B513oFETD@R1K0c#xf+ z%>RSz8_4|sTkIFvPqJ@d|CW8{FT`5BC=x&dNB{{S0VIF~kN^@u0!RP}AOR#`5{Lvs zp{<^!g<>gtE*K7YLcJa@d3t=H2R?7|kf$E{qY$Uhv$&Kg7AkYT9{ASlA@RG+k0iRc z8_sSbPw+J7|NqReKZO;5|75?-{xkbE_KS!c2_OL^fCP{L5^I_JT-V($PNfrL6Nl4xC;HcjO^b?Cdw=4@#G0x46TAB@v-*ctrdKuw zXx^rnoJ)_Po^ghrBAh9nfMHs8cG}{ktV5mV-sUj zW2489&sZnZhe5sLb?sX9(xTCyxS*Heb))6o0yk8*klInHESJh)em#OLH)0HhH!y$o z3offyfBD*S?GiLyfzzIq?JdQezCAo!Di-1G!0;~V#v9Nz$464+Gm4-Hs_ZN?9n&7@ zT<|-l>2ST)O3+aQtqMljdW|sDr2e7WZ0%w&{tWOu^bkC!S0FW!lXD6@e}-F^(@(k@ zr&})d5dF2&gR9H6<*Uf$M%ELDWq9(AtjhYj9NvF54!6JFL-e{y2{e1BY8Sxu1E)Qg zA4&nY*=bGcT;)&~_^gpPQrgl&;rzO=?6a^;PmGFC0`5Tz_cZF-iDimgV!wWnCEe`$8HHEpL} zrjc&leNCP0>Q~X1s&nSpaNU}lvt=FX8wu8TjiK;AFc;%m%EQn`vU0vys2UnrTB6@I zXP!35Xngzg3iMRa=%!MhE5j}2rjeW^K31!CJ)GC|-*WZ6B&I|HNZ^Sf$^Z$Opeh)t29}++UNB{{S0VIF~kN^@u0!RP}AOR%s z7$!ho0kECE2w=OPz7D`=KmXs)e#?IT|F<5)4x;Hu00|%gB!C2v01`j~NB{{S0VIF~ zkN^-cUj;~B{Rb}rU_3DYXXyL?g6zN8^Z#$N^!<}PxeR%(0h`j$VMBe{Lr~V=G{=X1;|6hpC|NZRS&H4X7!Uz0A0!RP}AOR$R z1dsp{Kmter2_OL^fCL^r1a9<=dIXM74Rh+SkV^3KKAGPqBu8YPPl;Th5v&XgLP8Ms z3F~UQq|`B|B=|QGwhex_p+~KA7JzBQFb>QihU#Yk=UO>0RABXB!C2v01`j~ zNB{{S0VIF~kN^^RxCzuJtvol(2??IxC(HXdWklvwiBlr=U@kcYPM<2Zh@RH~Bu|I7yJ+^)xoi|7UtKmter2_OL^ zfCP{L5CGY`~M%C-lNq>00|%gB!C2v01`j~NB{{S0VIF~ zkieP*$o!x6yqAfciM}}+h#U@Y?l~H|9Q<+c1zj%+eA$1=_y2rl&wD-3XMS@{RS#bT z5BKotdi-m;yywcz!T63H-e(U~^-R&wm#TBxQpG6OKQRArXfi!Il}=2J9z32-^w$IW z6TABhx&B09p=!(;<;28^sl>$e@#Bd*C&$J|Cub7J(ld$C>8TTA6QE%{Ju!7_qJL4Z zRF+F+NOnOlXXo_tZeBVnY$UXrrOXGNh{K^Q}gJiF&qL zxBynT?IYf3XG?_z1Ke-8W?=)Z`9c|dU&XMYn(xYBFg`Zmtqm3ya>m8E(!8OO94VDG z;8H0qXoZ}n3!Kd7MA;F_e9Fqjv5CX!yA%D6pf(Bn6DKB`;*h+q>+c_W)|H!r@ibVm zz10eR)*v<*Sv4ujDaCOi=98<~;7Zos0y9$o&`SQwKrlWq;C)~tEwzq|I6g9;XfC;q zpsOmol~TE?LD?l`uU_b(z(dZJOGQVq6J)umv@BY7H&WSEWiovvJ(-?3ls;wQ&Opg0 z(J63}Y_VDfoc%+I!zAh?t%G9|V^d?J$B)lgC)0<)ghuu>E<1&WSHBg-9N9Mscq?@kOu*r6PwN|3J3b=8eEoGcF)4_VEcInD>-SJv*+Ox8g z7R_aSwhA>_n=|xW(Wq3k#j;$FG?xqWP_8Rl zcBxV=&C@SsVD{w9F+sG$p{YdX6`;`FyK) z%tzMB@>Lafa*!0+Him!$d#-c^;~F?{vXcYZQn6^jpwJwhDPo2$5Dv%1XXRk@9=A6nbiRz0g4T94j8bh-bEKNvrB$os$; z?O$52UvJh{31a@%veBBltP=IAIuS>$>Cly!6~Hkx%m8Wpx;S!d^C{{H_*4ErO7OuF~NzY+L1X#Il& z{viP*fCP{L5_7SE4f=XR$E=Q%v*CH>A+!fgv{#f{>;cWQkp7-|rN)H$MTIhE|hq}Mi z{rv7D!Jh};7%T;McYV6+SzS8={}gz3;BcVJ|9XGLzsL6l-wS=R_vhZXd1t+G&j&ph zJu>qhxY)Y?CX@g(FgUo;pRA0CGAuPG(=zBg zs=)p7aS>FUa;Xp@;d}|w&z6crjd5|YP`(5=zKV+)xpUE0oh(ZNKOwXMC1`pMR$P~g z=d_$rG;CgQQ*XXd>0}2#T#^0Dta(c6*WpT$38 z%;^^jrKNIv-Fz}79KRKGpLFR~;qJmkxVKbagI?5Oj|cg#lO^f4+W2HrNj+r`Xd8EF zQ?%J~X=$-Z-zsH79!Y}RqI~2Q(3N)SlAT%#3vibTZhXMT2-v^iu7sdR5@e1`4S}9L zEXa)r5BE0~3st>XxYxK~lryDDdksmEm$*}dph0tK;AnMgsv=Mf$o7)e8#{SK z;!_GQ9li;ajy5ahQ<`NA^$G4W!hWHJrNws6Nt~bx!kGck;wtNWvbn-mmNN5&D!GrE zhfOT=Pyx%dT$=T}oo{RN7 zWD2tL}#$eHj-Q@R?RB-H35+dz%0Y2bM?{rZZmpr}eJIoSt#?s4Janli4myZ|?k zA=eg`ibc|Om`!VYVyc)_wHrX^azycRN8gx1QN-K>p`b$;KQjV(1)x~lGUSe(09}YL7`3;OWAX#;zl)V zPZQb{d3p;d%DNPp^?=qZQ(L_^AsJ=02c>eG@d05dCk1t1FQ^@MskKK`V4%^VYRWP% z>zg6%GhAt*Q-C@}ZnrNP3uMy}^vEz;fgKjG|7*eO0I9`mc`XYZw|^5{Vz28G0yJ-{ z_jdyHElEMS4iXQ#67zQA_NXN(sR$bbOyA(>Y*}AiEW*H-TQv;~X9P8M`-TA1dvug+ zCxrOC-7YMaOBXMZO@h|IuWe3nlBCG|Ar>@@+Zvz`qJtW9z(Be|ZC<~q6^(`2>Rdb1 zIZ;gV($N?wnYNTbWiyqK&7B$@t*=KBj9*g9ktirSWh+WL71>)wS2ai)Nu^YglaEC} z&poyt)zWhTdS_@ip=8q1VwB6I`-0L!HsG{+2g;J1D9EE>P&Q^OQ=n#_Un)Q!U=8}{ zP*{Wf656Vep-89)dqBl8TLsh~O1S}uZl0x0TzehRR;ss$K!=^zoIU)cI_hjni`Djy zhyu@xhq^(7o!6W_j-ndq=GnE-@^UIA+z|vNr)^hY&}5E+>t&4&G}h3ROsQN-zN0I^ z3?3bIVk8vprn+fN-F`$SjgUbvuZ{%*OdM>=!EPi_A(G9=usaauQlwQNn|q-R$QSil z=vqpJZ2QbkD!eEpNBy7*C|jz8hAL~WMtcxY+b*MEz?&3!&Ic+6>nc{M#$Z3R8G^dk z3rryet;Va>dq}{`d{R_BfNs!@ZuKj{@Gd1rqqi_U%qb@PrqGYOwO}srAO6?*Ugdq7 z=OCP<|HZD4vC%KCd&J36P1v~8(aO)~5YQY3}T z3xc@5bjO?bu&ggp>&47nE$d57wpN%8BH7iuvSsBc>=xS!{+ioy)~BQ`3bKuimsCBK z($}Zu*j0H?`aO3pI4=EAS+rLNWYQ}~fQ&rjxg2~bC852(MxNyaF`wiz8QQ(CkJD2u zPR;x3)|a+ZPT563YqIBIf(N^YZ2bVzzmf)!A;Ys`{${{wcw<$-ou%%I#ly-@UeKE= z)>^4YI~TCEk~T8TzHlp>wRE_u+U+Zcfdda5%#E23i9_dWLD`p7QQ(Yx?xASB?SH{$ zUB+A;uhmpTSt_j@0*2#;=d#*TDLW^%%2MYDz|bzRS_+14DOopKDro2Arhb0SYPyyN z$1;+;I&`$~5y0G3eQV1r2LXBDv}eWqvCaAlS;JMbTNYN0VV|^-U02#&S5q?EU+*En zA(gdB32Xw5uZ+T0)fvwNA?J?_$Vz_OX4NbPP9NKK24<`=%Smfz==u^_+agoKRkq45Jp7;j{ySY{(pph3B&%7 z{Vw}e_Fvdfvma&O$G($&6Z=~BNB{{S0VIF~kN^@u0!RP}AOR$R1dzZZNT3V0 ztb{_I`-8CCBm__RzrPFijKGQeg0Sy{oVc$Gwr{|Rt|08dASb%IU;_o52n1pK133X3 z@#zU)5OyGt6TU9kSO77+LD(-qPFU~%dnvf5yI){So^$_8-{yvu|c! z@d!GIs*wN^Kmter2_OL^fCP{L5rtY~v(jD-Ssrvn4^Td5U)`|N< z=83Lu>jYT{AV~tSFhG+8U?qT@@cFG1KA(BQ>kX0^A$$J+eun)i>;U*r_S@{gvtNc? z0H0+)#eR(aF#CSY2qb_6kN^@u0!RP}AOR$R1dsp{KmthMQ9{7)3wa_$go)@OB1A+t z5kVrlhzJnjC&EXB*XIj`$n*ar?7JEE2kbZ5e}&!uA7{b!uof1dpe`yl%f*#G}-_U%t(xad0)Kmter2_OL^fCP{L z50VIF~kN^@u0!RP}AOR$R z1dsp{KmzL~;F$m428nq1w`<*rF(MK`0!RP}AOR$R1dsp{Kmter2_OL^@R%SF1uH%5 zw;1>z|BwI@Kmter2_OL^fCP{L5)F5i!R@ATc|J?oV` z|I_uyUB196|GS$1V|RJJZK?{oiwdtrYi~9d&A1z!T2=Td!U28 zrOa6)TP2nnLQc)`xqOSI(`#AUs$&%!>yi71R`iwA!T8?2o-5~F&4!hOEv8IarnEF7 zR)VW)OBxonv_Vi{-Ar5JBqq~G(v#_lL+MlXYVAy9*))_mOyW(_=5K6bY-()u`0*L* zWcn~%$tq;4U!Z|xeR_v#;>w-D_^w@^l|c%5t~76GL@esFM$?ycGu);yaxs!XTdbBz zO=vaJ(FimVS=MK(dZCytK|4w`tkZ0U2_AaX_pxXo5dE&EguWhnRY(u@cE6|lx!p&)eZda} zpBEhM`gYeVy0otCflmc~BXB6d_+R5c?Pq--@Gbhbc|YNOk@ti*>iM|mxt{&ZH{gQn z|4T0fnBml@b&sG7H}=YKH>v_}FOapYzF4U0#lpSD1*4oPRSbdSQ^TAxEC>lf*vAR` z0yw=nss;YWI2R)}+^jH<6;o;I^v83mq8W)S5s)s6ylB(YI zOQ2A1Q7CBH(&8nnd@dU0`2yXOQPHX;2q_k!p#X4g>kH`RRb^BIy)6Znw~Ks3M|);M zQc;gR9aJ1^F^$t;+sOh{8z^a3(ajih`h`MisYB@%WF>j<9#B?q?CdJYrPkBZsUs@1 z0V;R&X`rK}G;m1^Q?_hCG0SN>+|ei7e%gD+r&R9tr-GuE_JC8J?Lh_F-VPcRl{gR6`GSQO|I&^P^xMRORE)3 zPF2ODr$J{cY!PbO#ika5*1QfSk&{&Zz+Iqdue%s=g57MB4Muu<-#A_olhcsA-tgB8 z&g!kckWy8CbSl6M){9)eRGue&tGK=rCrb*iBu7uRQ?bsDOXd|>5!6XgQMcc=Vpa1c zMM|pN$&=vtX`7odpD}Xg*nqTmh5RM0I=3{RS%B>Y+ETf=Mk6h8oGPcDawn)9Yf&j_ zRC`lbtSuIo%I*79Q5BV>aPS1^s?)8Tw@$pGBJhHEaH6e_b@COVQ|DJ}k|XT})5|I}ZzBkZxuh*s;6$U@*J&rzuIlnB=s%LDkAmJ=mtMu}+3H?Bw9buJxum2XJOYXj zxD?9`QmglFQ1Dbg5;AA(cy7U*o{3DOFZ(Kio!xxSk$B8A&BYg_HKfbYh_1 zG+H*S)i6S0KB*=-V$-0-PlA+=<(v#hbP-py%cb3*?P#n%O@CA2^}u*(_|8bY7&j94RAeQj}!*Nw)=< zt@}sK-Cv*z+6UOmt3d*pgH~FDri5>snv+FY;hzkt2OFtZMWm<-OsT{J0cQK)sI{4s z6pYmq$pZYTPYN)-@+jFkMs2j*CEv-`uXYA15)9Uqz55~Ipq+5lE6FNM1jO6+K@Qf( zc2*8@bc30eE9-gKfLW-vo0BOcvYbq&xI0pypxzId3Pc!+)d!Xr3dVBTs8q{^4pkg9 zagvf$P9#B7y_2#uCG8PRxl+{@momjdWzHOzb)GINBNCZtaYs~8n6?X#rBJ04S-J(U zw7dXq(5iY!u1f)!hmXX5L}ufkW`Dx|fc+2lTkO}^FR`Cz|B?M9`}gdJ*!QvTg4KaP zXa9_SHTy^GOW5CHpU*yrU16WeUSJp5vuuuiI(s)e$sT8qu(z}OScx5BceDNMHg*fU zf$d@avHywvNX<+4rpo%oTxGs|fj_Sl@-wF=3n!-Tnx8m5%}-2C-+SWlQ_h|_dvbYv zeq#R2{FpQ`KPHTyohY7}pDa!s9$!9lc2+ubcu~!tJaE7)Bq~hw$t+(`_i@q)c*6-| zt?&B4cr87eom)`y8QqZhY*tDN86%tFlF6JdWJFy`rud1|WBmBh$@w#9N974&T%MSk zo13_I^wJq}6efz}r{Su?IDDU&8$UfGj^8^mKYn&m9V@2tGs4_lW?n94?wH7D=I@en zM^YEEU}d&2ri?FeZtIkNJXwQC$vj`{i`&-a@~OO#{kcC9g3$3d-7$bhES7qP9=bB3VjGrR$PE6f=( z`D8MmRdqR~=dNj;mG(&-lshF!*oEuXLB|GT;~aDrYA&0}>3J~={l6ln)cm!q71BN) zYJ~u^8R%zwZ0qt|jt6^032JOsko9a1R)Tajo6JjD=^EAwk@T}ESyDN$E@WGmg-N8M zX8F7dOR&&CWVxI!!K_Ns_53yLXSpQlX9Z}CIj+{%ZCjU0W_3L$K&8kE2Hd?+av4Qe zp);0MC3o%Eaq2!P3G8@DO4j;mz^caf4U&HnetP>@$ z4u&YHT3?rK9rSE!Rx!9t)=(s9fmIkziLhoM=5v|MHDsskllT#sZqxByz_u<0%YhkA z=JMI3o`G>dPK4noj0-Y(NxzoXK|c#E3QQklxhDF-x+OBNfKEZo=Q%l}!z|b^cvUrY zBb&;>TIJ-O{jPYjo=7w+a$XZ52;mSCPy$?~bCGk4E%cMGXY zXO7-=Y3yw2V(V;(qkV|V!Ejxvi9XwE=rwXVS%)5jhq-hThI_eWMizKz5hZA8e&JR_ z`zSy;6%;vH6TP<8yp)HZ)Mj7>Q^*+^9!9KLIhltQV?dq!-&hUv-FIKU2jpK}o&@>M z%SS=}<>e=VeEVhc7QDAzz8U0ST$_${$?!(@0zy5je!ot`SPU@U8z`}g`9-}dy;=iIWA48~Q}^MVT9{?;~D z+mo*647817JtbiE#|*e13PU#cH6Bp{Bl~s_g@MgjB$oZOnWcqFVHU>y^+%8-4&9MH zbPOJMU`2fLfdn@MPiI(In$OM^ijGGgbWYlcYp14nqdM3I%A225(_}e>77G{Pu?d+{ zsaUrX&cbdz*x1;(w`6WfsHF~}o$ zU=vg&TP`e;4Oy*^e1Yfb5D#EeQorMgFYtsPaKd^VOy?lr?RMPxaE$9C|{r2jvTbQlpW68U_w(>PA27>&o{u}WS#WJ+^m#ram&qlC7W4M3VV*n3G`KZG z6?Hb#orIb@5{w&Q?mg`(wq}GTWaL~<5mmQqx2$3CDyll0+?t3O?YR_;Yhd)r_C~wv zvzCQ5a=7=GcU#=QhQ*!qbT-$Og4oJ@G#DQPTL;_QN*Zd-fOS(olWZ|?=Nbk!CGKn$ z?F@)12ji!PJN4CWI2!LhbJ#Kee_W4h&^aW41dsp{Kmter2_OL^fCP{L51z6iChBEcO-xWkN^@u0!RP}AOR$R1dsp{cp?zM`Tr9km(fQgfCP{L5&84Ph=?I_c0!y&&Pzw^Zzz5 z7ns;fqhE|ZCGscXD?RTHeWv@R!S4iz1OL~*#kbpA@%%YNsQ(52(08`}j1 z$7{pW-j(H+XDHG)Z0d`P<$i_fx)Gjcj`Uv8}@SkmgnGCq_^@i`6nM#EHY{Bk9RW>c-f_*wonQ@#8br$@F1o zg>5z5c~$yoXlkwH=g{h!hgL3Lxi1($aKQV3rzLCb>?D>t-Ep30{-bjiIOAOv_DZQ- z)k@`@QEoguo#d6HY^{#NX*Ka;eNaHXZ92)E^ji5x z8Qun}(x1YL}b3$+2~ajwHj<^v+L6RLo3NE6 zv*J3hYHK0g^Xk?2nw8YtmBnEE=uz)Vx}}w9X&arcv;;C=?o6>IGAVF0`>kfOwI;3y zr(Gh}#yM0Qy;2IsW!bwj(Bh|E7M$+c=a?^b_R5Z9H43Zy;O=-9^m(Xu7sv|_^zv@^ zOB!@|O?b;|8irPOT$vBXhljnFOD#?i7ETAqcjo`I_aOXZ( zomy_4f4Z~qP1xOZ!O@x9jkfch%{Jp-a8{7$p}Epq^}G+hQRyFFz@6(e9nsfDxf+z# zS67iky>7*&fUwZDrPmCcqGB;_DUtrpOgcT5qE&J?zY`JSoo`&+DSJW0eQ9;0s=7zX zHe5zr(J~?^im5jduY8@WL`X@tn_JN*n@A=8z$9j8nzc&0I`#+WY`&~bp{b!>;Ji0i* zN4{bB{}>+c`v=`W(N6}(hJK;%%HZui`v#4nt;}Eaf2`*>bI*?bm+Tk1XR{yexis+p zq1VPP41cKixBCXhW(L1+@ay`2Z{*LrzPbN;_sZChjQq;r=lTw0|MTF>T^C0_G5q<_ z`-h#}^4K@^pBXqe;=k#_#KYZlStRqc3HO}<>AaCwS-4ynJP3qvh~t@-wG+A{n20kUiPf3!T0EL-Gl`_-oFXMM4T3NxVj!>rl`mPPm*&Ls zWN6rdgv0WAkjUhEG%$$i2m{3=Flfkxhy1pL2DTp)8HO2B({`C6cWoS2An zKQssx+=GWeR(7N(HYh}JAZqa5n23c)42&$o$W-mx7I%>;7;rfT67`0%l*r^5!WIEY z&;(O>4)a`LBR#FhseCOaa;0rM7V>8p92MR zVIwgN4LL``^H*XbBrrzfOc7GogC;D4Q{uaUjRuq8<(P;=BEbXCks-IaiR3b7=$aNX z&~nc>9}^*Gc_0E8oRE|S$$edP85>;(dJ<$ICbC_Rcxbn9EQu7Q;DWrR(vhZb3IAM7 zVGv}W7AAMN zg9P^+ueN>LelaFO*G9T!;Y-VhtpuvMXd8W(hJ;#BlOG6l4u3v*9V4NI#LLV@nr*|f0;IJ@!gs*QXgHT}l873RZZ>d4 z$bBZP5M9S|3CF+W@q~zTbP*(;_5c8Kp-amo#0XvF9jEm9n21u}vONe&@d6njfvt=D zz(~J~q{i&In27kcYntfK+>sI}LrX9(bQWmGo=u1>&kVc(nU8^jjc!YQq`_rqvCYh9 zlh;{7nwH}+cpmDaR}$p+wPAXO8OUQX5xRis5Yr^cf^Iq?u^5aPKFsyPKt7WY`IZOE zGpVqdZ`uJmfNyvXGFcmzoQa7%n3seB+n$s>kd8|9&X5B+6j**e8WS-a`a;HQ!VONq zA~cZzTV=t9bF_}cL}p+UQ%E$+^{EY+@kVq~PLY~gJe?2;3KwRhw<13};8CXQa2OAu zqth{wU;(oN$52V4rQ-loqzgt?aOOxyJe9~KnF|Z195@4ZiVn!2X(@cemruq-#D{|M z44#m{NZ`pBjXI2rp7@?bCIjx82u1`XlH5lUXzBUrRWM@na7+~1Hbqb6usP&$@(ch1 zBXvDx`R)@jk!#QZ(*!QyYdCQLy#fu+0v^aZ6cgESUedEnhCYL(L_(A;nG!wAqoNoS zN#7zNaROmk$e+y_x2@2Fd$e6*1$Oc}fi}BXCztTx)RmqWU^uXmTpLNYt(eHPZRsQV zwgD$6Dc%$)x5r&{ePNn0kr7(x1R;EvWk6k2SWvH_+!dDLjhHC(xW!!9iviUmw>ZpA zSV%?=N|VZ%DDp)v?98Vy<-lgP?Fqb3bqp$EB4S}3!gr`=+60CRRb$8`HpUDez9=Db zF!*7}psJ4qGz`LkAZK)dWL&WQn1~q=1dd*s61mSE%l8bVj7OH~zz4gS$fA;kgkZ!s zi31-H2H0Pa#D{lqIZ24%Az@W;rZy6S6Q~Cxt7F48nl3*W6Tx*G#7DMm4B|}M7(dZ5 z(Lphs2c!@ax!mG}I!Jo%Vmx;ltjB@i=wzWu47oOqSuwV%0xF*3!Y?H@h zB7`uKK@bNcDAWkAX8=`1GjO+je@p}i9dg70CV~$GY0GU3K~R9q;K;-7JQfoX3?qQi zMWhfaZ!d|Il$(f`Lg7utL_#@nV*8$hj%h1zA^|L{(8sv;XiVg&tll9a9OWR;hqyt} zPi^!i`0af$kp)w7(1jp}Fwp{GVr(!34J{8YSfdQiS_(81A{F)lkc3y8Tl zCPMCb3s<m2*XnhA1DyaHQ}A$ixFdR^T9+W^ym=T&s+=8fSO8+BM|j5+?wVC zF%dc?1_Hp0>K6Jo0s=F%C=aD&iTe|o3<|M{0W+Y1CjtvmriH-=VT9-17ZWkWZ*a75 z7Cu4P%6z0`Cw_p28q}SLi7Rz3yD~H^*jN;fq|1)=$Z`f9PWj_D<<+0?=nPA0{#Ib zJy$Wj!~lXWAJXxd$nzxPUSTi+cSa3|3G@dOy0T$F_ryf5@P&bx6|PgMhqy3esa#eV zaP#h%C~&ca>suzQ4I!8Wqri~B3w=JMcf~|#Gs1r_gdamM5TOfa0{7vf4|?Rzn8-j6 zfzgEmj?fM;iek_YG5BMqU^sUqoX~#eQrC4cEkO{5W+Hs&J}l6awkXp_Ae_fk22&m*kQlHLsvv+B zK$RN(F_D@gdYD#zcyISy7iNwUZ^Qf^rY@xfbeQHC6yp~9rR`-t3d*01DP5@1F; zA|^b6K!|`~H9*{tmSyvx{O2*H&rO$x=(h;e5kezo6o|-8M1%+sv-?2#-ATJ{IBx~v z-;G%^3_ZSU+6aRPVr&aGL9zOTI1FQJ_G{JrzbAJIe`kI=_v^X;EB9@=OSwmLgJZux z_8-Q6VCGI`qO29lB%ie-8eq!5S=<`~I-+7y3TY z_f36keJA@^-<`dG()<7P{#fsK^j_^<=q>h6^n9V`*LyzM^Rb?<>v4LX?%C7R)BWGO zf3EuaUK=*W(A(l8mO#ClTNm245B?WXgxcT>`6tf}~1x$dYEv}~&Q!pr4aKW~HEv1+g z8JJ@bHrUn9VqvRdj8pIqS9U7qh!L4}Ii;8v1t}128iuu*Qp_UJYy)vfwX>MpMPV0g z#FdO}q!f#&-3at;vYt{5)Mx?obj(37r4+Lw=LJrLC9JiSVpdj%T23t{0M!(n8WO;WfEzL-*MC|D3qBO(h^i@_W{O<+!yQY?#-6|jE9G5JX?W}?6# zm}PpY#dU=u)O1sdg+k3jXXCb$TFhtx(`Jmt?@cLYMaByh1BfK0lwv58mNltSDFk%SDK?UP&#cRsjRDWs{dviebQZfnbQF;(Tf`kp%|Oq*zEP zCPg7(M40PY=Q@jtRg`cZCWo1vO)cgI%wGkFFQpWl$}?d>&9=yylwzYOWr1U4H|^8u z#iC#$lH}%#DaBHmKYBU0jZ>+`1QtpqA?##IF;IhrqFLN{A*GlUiCw^?0ABG#TQRW# zxaz4ErUWLNPc7zV!Da-(&0I>cRTM(m80KKdQ;V4_2zXS3Kc7-;MD}eU&aj?KEv9Bc zD*LCiDaBH`9yQOU^x2eRp$wQZSOGbfQcQ~sUD3c`BA!VtMo(pk4g{M?FD3=VRm5ON zQ;VT7thgcUJ(6Aww}(KNT2H4GV<5B(6hWjA)9J;^1l8)`Q|ZN|z=#@Zp6o0Z7)ziM z#-yO{NiBxtn0-jYIGj?GiqjutQ>HYhbxi_udJ4BwcArxv3t8a9JYMM^Q8rcsa< zmj6tiUQ7xYNicVf46Be* z%!?cy*}^bp9Y`sL#*6}yCOX99sm1Uugi>j<{VByn^)(m?f{Vvmij6$uMJCk%jV&P} z?5WOTB8oDyZ*1y3+Fp!!3ib^HM&vHYzRqHffy#orr_k6V>BR&Cw1oTEn^Fw^0F`2D z&L2)Kro4b{E9h)bdNCS?v4FA3^kQ1TrVBCYL#f4(94l&AW67r%BW?lWj6b+jF+wWC z6c3~nV>FNjtaD-Bet%~%!ysuQI3QR?xi7UCP7~|%P})R#F{}h5m0{kSQfwB9D8S)L z%XoK6u~CG}B?i{u>AO;j5mNDjpd1t2@$_O^!1@~gcTY+&+O3K)Gd1t-ET%9b^i(YL zaduZqF$O9akqytr?o2I)ErvhGIv-}wqbbEOBE;v|T;XgawHW=}W@>gYoKlR@0Kq>t#)uf|EJnly z%o$K2WH6=JR0a%fW9BiCT8!Y|#yWy&_ooyiKBtJdZ0NhMsTkAEAAYcVx+|GjQj%A4 zK>Y}~0TUtSw~z3uwN% z>DBQhmQ&?<;u(`V|KFAStxWEZ@t6Li5zq)|1T+E~0gZr0KqH_L&i^aKe_grHW^$j+{rOjE1GU&10gZr0KqH_L z&)%pKy?$0v#pZ=o}&7%Zc>e#FncQFAdJWVq(g&Xr_zW@J1CijJRG#a|`8Uc-fMnEH=5zq)|1T+E~ z0gZr0KqH_LxMdOO?j9Ue_x}%PKA*|$8@+Sn`QdLH{MEs``aj)&PxmLf?!x2a9gQD; zCi`9eKYiY zJ#;AhdXOUNda&Y`tL4>|Smv@{3d@yhuwL3&3%pXe>N%Ct+G=^FTDllqD{;m>D-1|! zbESN#Rn!J2FK*D8`Pq|ac4$|F_-(v4t?3PZs`+*F%l_o!`N^inL_b^GGdZ<&&sKH^ z6+@2=wmUS{jhlLU`sw2{?doV$j%4yD^8hhe4A%4WCr;<*&m2FVf8o^Z-1Mo1{PQyl z`ROyKPt4AP-`vdn>AK*-Wd5?V?kzd%k5WRW8ud_mrR-OiIys_bDJU;4Ra1-Fl-b1H zXkp%rSwjLQWeZUQFH!v-7j3XQz)JUx**h z9G&`*zm@49=REt7)pp}cEUZ;45p(B88fkugr`R{rMzvh6G^wK<3?SB2`ejj8lMUy6 zxRGjkIcV+y&C0yGt?td0jq>73;MY6Yk!NR)JP(U#BYw}}Jeg8`tjQX#eJMOZoW`TA zSH8I{afLKq?fv-8nI$z6ZkubBRmX?_b+45+H{j9W5w^9i?60|_I-Av{i0rL(&)7ms z8|CZJd}7%<2#MYi6DG2GtCdRN)%|X>REcM3mMre&-s(Drlt#TTP0S@{1MVX6CZfri zOx2!v{cHQjgCp76tIgv>xVpZ)0soJ`H{Ip(#)cXr*3__uAtDe~VDrF?MN6Z7EjGl~ zVJ(fagKLX}PphHY9*cqjuK4-~`p1tP$!@)`*-xa^yMegxP4ydTOk&_0I)7{495|L> z#?EBE8eFY58*5#N?B&|FEi8}g{Jyde@sar5=7 z(OB`JyPNw!bH!Nq&5uf{I&Y?UTe?=_HB61Q4cyy8=Qoy}N(G)Ha@A;0_1ap?Aks42 zE>)MowY~4e!&3WW<;zyrODm4jd3)j7`s(Gf4|kYe+~&hooC4Vr-Eu=4}x}6r19k{i0xt0p57qmz)IaNFQdbNLi6;fZ?S?ZJls6^I_h;})dUoSb^&w%0fM$ED1Eeaj4|rTJ;1zM5(}E!EzZ?fk9ctTzjp(h%78 zx_|qCptX-|bG})F`rC{>RIpmQQ9y9!^_Tm{-+wUs`f${@tIpzL86yb(6JV|wEW>~> zlYv<(kEIN9)xCgVM*WN0hUeLa#J{h0)H~POzdOp`BHwy9@2Fk3(iXwgDAAB@a;kp+ z{}vYx&~jZtS+v$%b=bW)>am?d$K>(cq`9SR^(=p z8wHa~!p)VBc*2t=3#3b&(BLFwmJynP<1i<54bQhsYS2JXq2~Ynqkoji{X*`;Idkkc z#=c=p;-~(j5zq)|1T+E~0gZr0KqH_L&_!LGvh|RW|p|MF7tiMjiM%&T`vwO zo)GL!d0K=dJSF}Ko?V~K{z;uF$`Yn1>pI&%kl6%N`%Rfrn>DynQomqN&Fo`YQJU~o zrCq1`-YNoYTUuI|HuLR%ohypAnUb!jdIvHkpt|Pf0g^-S9vGb;%fvn0vZ90fJQ(g zpb^jrXaqC@8Uc-fM&PC*aBuIR9L=V!ZwyWJW>M6YRyNpD*1Ci-aDQ*s-mcfS4$db$U*UESS-gL?k|w(!%HGy)m{jetf#BcKt` z2xtT}0vZ90fJQ(g@YR4oWBxzd^SR6&ne&<6hkN$t=Ewg2=zklzZ&(gpANOVNB}Of2+rn+tRV(${jrvt9X(!{fuGLycwJ(tehVj%^PyhHb&(@Zkn^C_4 zrhZ3iX>+Zz>iB_Qa<4`1Kv{?MP40W9j2qHSAEe6POmRbwEiGuSr36nAWpWC>S@w^= zj5f^f)P_#`ukGFHev?WiZ#{6TXtz@>;igpwSF9#(tXVGq&D)#8=!VVQriX^Ytwa6e z@1M!OKHl8A*#28}yWJmr2wtMT&o~Q=(&kF}(v7-YHEzP0`Pq|ac5uaS{Y@=ROO>;w z4=PUqX(y*%7hA>t@tK+I*2NT0*ZTe&wPqu3O{%|ZWfL2Fr-!(a%ZsGVtG}Banlkhz z7a04_UGQ{MGh24w_yW&nqW-aQsZxgSoz3cM^t+S-Rf(oNT*u&U^^bF&eLc4m{wdWi zy(!vn3*<;orH$%(d1Y}je_6#B&ibQF%BcqE`FeMqg4{+*P_mA2WIgcUev^NdHWV`O zUZzDH63`^lNy@h=ms4%JldgkfOW*ILS5U-4z_L$l!EbFKD7n^b*`2kv8<0d*F7AQ0 z94n0V(OISPRvVC1ZG=||>$lL7_PSA=B~s$7gm4?+(rU%WE2~Q-*X5E4GZ_*)NiV+D zrgX4;3r$GsKy+`5!_Pk1=4U(Q*%p1fJ8^?C-)#1?o%Jrn?MQX9o#b!wnlGhoa6*kv zxAo)}i^9ndjW!#3=lgf;S}SooTHR|WgSTb&4Sl4WJX%uTD6IwS%g#!$Qk~4ZtE-iU zLqKUFM$(;|JhF;pQ$ouxG4N}`a(mRc5o?8f48@y=tPSxi<&}#&xV@>`!L9!O@zSAe z?PRmxh+~rVUQ!xDy;Q6r!c&$F`0nCsrteBWPh+wbW9zy923GP%FXeJ1z$+~;z?m;3G9uYU#M zr$x~SXaqC@8Uc-fMnEH=5zq)|1T+E~0gZr0U`GVh0so=i?rgSeF#3BS`nx~+yD$2? zSCK^X|IBSWve5+^0gZr0KqH_L&( zpb^jrXaqC@8Uc-fMnEH=5zq)|1T+FSKtRv`Zvc)i(gKR0Gy)m{jetf#BcKt`2xtT}0vZ90fJWd}LO{*`i?iYQ9ANlBi}M|V)%>0pB#R5c>mC6hkkfyW2iXz*MmPZ_{QMl z1D_lC=L44qo*wAx|Ec~f{l)(7zMt!RU*F;0&-eaB@B4b+)0^%2R8P6*@$O&i{)XTBL^rwKt!I(BIiXW3I^qr8`HIYV0NgDnM`4p#zPv!65?>}5%Az` zJVdFyf~1*FrBs(Gtv)A|Np`5V7xfRe)#q`&((p= z0~vsi*77NAtdisVB|iwA%}TW)W{NbtVB1ns{&ej@usPf&jTy0Nv@%jtIumX(ZXc~Z zkRppwPxrjyEC;}8dG&HoTG_0msGAq0ZCDn0p>{vmEVRiYOU}kdd2t2lg3;S9mKN7n zH`i2VXO-8sjH1<*PL#mXFbzY@)$Rk!7u#5hsCi!^KeW^4#o7e;9cbeh_2-MRWu^%u zY|Ap_x!S#`TyCq(U`&2+wS*M3s#WX3<+5s1$yr-l2WEb0akW$_13V|Cqw<14&R1#{ zYwzyO+}PMgF=5uXkJpHP(q9nqryy+i`zs{yI6Zyb7ccPc|-MSq!Zuts;)vk zwK74YNU=8FTp8L*-b^gQON=pOrEPanyub{TOTc+gb7knIQJJGMWgN{*smz(BD&O5) znJ1O0O$jF@N+nXnbXKM|Oxv8P-PN0U_uO>VSzIhv3BlXcKam8z8Z5`%ql~QTb>*b- zA%F(g*7_84^w)t%B4m9EHG@88xwXu>D zCG_3gKvv(dyuMK_Mb@+ITrE|CmBs2(ryyVjHCU`zyS*6=u&P6;&>&2qp?ZpafRY1* zVAk0aHk=ETnCd zGqwKS%w8u^+A{3LiHyfvUAtC_en$Dm>wbAd4U5~^mN9~K3PmN8(s-iQ2fmFsA>pfh zV?EIDovM>som-Z$%vvw1H~Laiy{-SWq5-cd4EVmDW;Cqr{)1fU%B5EjVJWGN1I)-1 ztH^*REts$xTNt%&ROYc7h`C+agXdmvu4opeSroirNM_jxi@H$pa8eN?<*J8pDw2C6 zs8-7>i!oSuEzeU@lr|U?q-8+~#agym=7!6qHZd5yCJ}MhNh%9g6r@0eg!?GgGR>76 zE;p`B?4;jCm5E*C=yztpW)`;?`C8Q7mx#?9?QOJ_t=m88Ga z16tVi#-&Xs3UOfMMjSKM1Jlj*3jR@r$*x9LTOUgAPPPkWw(#&a*O9!wTB?>I)b-Vs z?S9(KPI)IXcP)*b(ZUX1H$?E^mnw)~HxY=Wwa}!J80M*~VAlwWlNQR-vU5>IdTLhU z*RhJ{F;Ry4a#;4#cuJewrZIg5JR7lk!c&wyXRTayD&^}ztb|k+Xr(ZwFQ>7!3AQH^=rOUu3TFxS2tQ3c7v|TDKjZQx(=p|SiixPC*iq@epc5p z0+&_9*V(~23_}=CUjmngsv2B6QA!1xNmH8CS_6*;E)5 ztGZ1Z0gZr0KqH_L&4!yg!aZP*$f8T!qkpBVbC zq02+3hS*SM@ZS!8^WZCk(}VeezZv+gfsYUP1C#x~)BofBZ}gw+pX~eHzVGdG`yTEa z=>6T^PxXGh_XE8z^iKBtdCw2^xIK4u|NHLOyG7UUcKw5{*Sp-Vr@J1>{&n^jvmeV= zvnR3-XZ`}BzR91xXL>W)ee|Bo<={%Gvbq?oRM)Q^aaQu`K^_nC(UYmuAlonR@q7G*{-FxsJ$M;)U;`cVu)X9k7-I0V--jQGOQB4!i);gZACAl&!?EoXzAX>g2Jct>m$+P2~ILK|aOrR?@c8DtVg-@0|nT z{d@09ByJY2vr!r{n=TR%$~V3 zdaJiusRUlNyt<-(t_K^{^>XyHAR_7MC zXqz&HTiniVnhtKyJOggWUc6Jaf150Yl|p5kpo7n|GZ9*MsG6n4_0`R_ZQ`|HeYw1` z0q`1VMHJ2awrP$ZjoNodjMfc##c17#+mSlA7_A#}i_y9Pw`ZP?(7HpRbwgGPtsC%p zbQ*m2^V=h|wt;HEv;FAtr$BkoyuG9EDB6zB^7xZ=>W;pls5?5tBkuwA6urGw_lmSt z+4mg=-GlpXi=^FvvuMbve&nA(>7MuLz2$~yYxQx(|l#7E_9T_ zDoyQ6id2>6h9%GUGgLWXjwKCBo-6uBOOl6AP!J!U9gSKL*@TjK+uj@ctJ_P|obA%5 z2x?Eyjm8byp?=)1bPfmW9OCxvz#(pCDu-eL91a~DRn6U@x@vW5-H8LenZXD5HPqK= zt!n3kkE3wU{w8Iq;wB|MxIZFjQjH>LQpvj?1Ht`!6Gf=fL;-9HQu8NAqE}zq4A!st zPPuYzsa)M?2ys$9&L36J^UtEdcocQaBO|dyowZ`wI_mAK*NX-1tQU*iUXMJ2di3y! zlE1T(YDs&I2lk@ILsP@st!gwTVleqI%J&`^Zf=31hy}0H?5WchB*l8Lf(WX4bZb0$EDyQ^awwLj@w`c*#>*4z%EyqKt(~9!=f`%Do5rm0Za)MW#ece$yOi_~E`tx^Q)Ud1KRU57yM< z{PuG>hAQTCUo2{8rC8whYNPdPvD}^2V(Hte9UMV5dZF*2c10~( zT3rs5r)}V^9z-MU)DXz_%dWT;&4jW1+oXea(pd6l(pcsO>7D_Q?mgJ0q-~~CayE!2 z`xViF-uTrG%Z%R}{hsWr)5Py=(8Mo{e&5#%ng{pws+Tng)SIFokM^K+Kktd(l9+Q- zk4hdr+FhrN-<3RW>QTv~$*xGM9`(lLS<<7D-;ZS#&Eamx^MZ|ylH)Izqqx8RJAc+$ ztYW-DC&Y6#|38=cWG45S-1q0cCU+_)a<`5B;n>fQ{m|Gqj#b9yu>$bNqdz_Rt)uIs z&y7xwd~xJgumW&tU_xASu zR?ola`AE-eJ)&o*`&YZazxxB-C%Yf$`h%{2+4YgGm%8%V&t`uq`-$v_vz6@8>^+(P z0fD1G`)U~6F@rr2b+xLqadD&SG)2d!@gyHT+F!#+4<~vcRz?eLtoCMV4Eu^YR!9qV z+yStpu-s9O1&8vFO`f4oV=roK`q*;glN zlB=ncD3W_?YDB+(@8gLuN$*gF2Wx8Zrib=N5^SzjRvjPyuw`IMp4R&?uc_f&KAD6_ zNok`_j9v0Psig*Z)QaUyN*lFe43p>eS_f)s$UkWBSE46HjVcPuF}`gT;)b+UQ6T}U#O-LS61SqI%40PZ8SFP7 zQ;le&S50Uko~o$;VZWS;THtI}msZzXoMrt{)Pw^y6)YUIr(*G2sblF|=vCMN`dIc> z`dIWP`h7JOIZW{>C3q{blDmacg$z@?9#d~rF-2h4r3%q_IB z$j#I$TmW?}aSL@U@HX|{nhGBF(S1tZ7E&edHeJ4^0*F2PA8Eq4A!@x<57$)uu3C1fgi09h>2Hd!oD{lNn@6)-$BRiC9a-lrt06YQ_4(BOdia9tu; z(VCh(23HzDsa}Z?GkSQiR*wiCPK0ZvPb6%qp+W+B=;1`p)*6YhO*N)!_2}SX1)_R+ zlR%N&O|rCP{?!+W+Y&w%CYAWhDJiA9VdnXR6{pr>B*Hl1qz?^JHA{BsxH5H)HLzA7& zR`e;YJy=tL3Tkw=QPoIk+Eh&iEc@kTTZ0sNdpjPesler-sfQxzmoYFo4Y{LVleG*8 z_8xdB7PvtYi&`i8+B!`vVuL0YF8Y1n2SD@SzK4`h4FV-j^y7*5qxA4>G*2sSta@dq z5l5UeI;p)E*Z=(G0^AAMQB*W=?P(hUESIR3F8y#eOT#ZZfs(8AJ>eDA4 zh(+CjK`i$UEH>&a;&$x7B5qVVi$m*RacK4d)yN&{s}`qM-g^m^_tE=X5a?|7)Edb4 z%lq3}stDVgH?>+PZEKMtZEwb&6_D;dcz?6ximpZ6{mURaVBQx=*ygL%vw8%U3?3B_ z(?j>ga<-AjqPC1S7wZ*bY1=Bq0ykHfx_}D%<$X%#HfkkyGwEa*qB)pZfz)95C;Vr1Dl* zs#p}NUR&FqLdVbY>fu2j#Pra;v3PCdv4|}dyn2OL&bA7%tj!gsTvXUE?^Ob~Q7fUF zN$+z&`ry8IN0O_BphiE9R)yY+(mng%9gCWj$1+9~r8-3{TS5^FrGDP~8Yu4H`)(yn zQmmv<|9;?Alsz={uITO2T5#j_(XYu@P`>xTyW;mZC}IKXG%wd_VhI{Fu?W%c`_6;r z!F}&iGBgO35YdlE7f`yNk4I7h5KU=4cCEG4g z)UkNm4|F3%Y=1%tb znJ;F4BlEqvCv(P|Y`Nd$;<1nRe4&55M7wGy%PW3x^-6sKBN~(I!*|ohX{qd&Y{Oxk zntmr?=4XzanwdU5lb@YGI&&`nA@_~${&7mXKC)bO+)5BdjT_B@SLc(=&&DiHPd|Np zCO_FpF`0jKvg}Xh%dp%%6@gJ^M$Cl6qFa2s;NcZdZ0$p zl7nI&|EiX;Fqg=xUb*TymD1WOno+vC&0%w8qrA8h`1K|od3NT=^Js4y@p}&E$y6JU zYhMZv5U25IYv`NH5?4s$)eg;@GfQeTxIrn{ExiuSB)Z;#$u?n2-6dxOYD;u3T9vxJ z1&uzv{f0zC`BO8`%$%B;KQi-TelqUq-s*bLWD9XeoXQ_nq^F|(Iy*mmdUpEw@rC%| z%u%Q*Syw5!*CMal`a;!pn_s48!x7nA<3Ck9ytUFlei8Ot-pPJb1b`I>R$x#!#fm@G zV#P`8n;pW97*6I-%r_uws-&8eQg3qVgZFGzA~*33XCgPzDN*N>%)e=M6P*;h?&<`LoMFHX=9*_HbBxQfF-K7Lefey-?lZl<@Jvr zKHT-eJyB=hiE^jsnQv|F_&d?Pt?nN>Uf`~-UffnaYa0s7D_HMeTz8h6NZQ6yoE%$I zlg;wR>UtAZ8>4Hhn^?zewwE>nbu^~cQ6^S$W`6eMnVA-!8JmCPpjE}U>N@vry|;gS z&z`Q=@7z{KeP$ftTK{L}qbZQri{2K>o9j)sRRj-(s?+3j zTL$ha%p*V5Kkhu4t(|EO6gL7jDJrQ`(yQwmYh~|Z!{nLexgIk`tkF)&%dI|SN4gG< zEkR-@--b;nF9Nwo`o}%Uy-=?0-&(#olhw2^w%sWz+eyvvls*spaz*rsX`Flk=ySmgcWdUpue<%jPR{XHQk|9KYw6=FTqg zx$E=Ga~Iak*@_)5u%#t;SytR<=R z6sc7phAk(DGI5+$8w8fIIZCs;CLOhlTo!DD+MLxU z?o6cPp+kJb3tg9ZoQcr&ZBBgV`iAhxE=p%8>8Nc92I=ldq%(Yv2WA)w*I{;G5oyyf zl+tzyGn`$Oju{0;@m5}&xIK}M!<{gfx~}U`;t2=Fiv?)zi$HqtAiLG?D6E1NfDPx6 z?zTia16|Iu9Z4Xg>6w8M*j)M{GyTxoP0h-p;00SUQ}w%CA|0pHaeY%TD)C>&xipDS zgfIoMja|i#TLo@PLjt?8hIB?47>;9xp5e1FV76%q;>y4`O}UHS7@Fn0Aeki;cB6@O zlrd_$q3Iie$xIo9)M9q%`5~3m+dXd#=?JXC5QYVBJd#LW%G)h7BA z>9`>*1IJb12#r88?z^5%Y>XI2KzGsKK{_rV9YPelHqnJZk3y*^7gOoMi z1L-!^yaIy)4?`kd$1sf`pr#o(foJ=SG6PmIcV+(i%+)z|Ql2>KU72UI^!(BJ%KU`| zIe+%0${af*=8pQ6`6xPldTHTwr80LE^NN-EipS^ITqf7fADK1Wm6tZ$BUj4jsC~gX z_6*J#ytLs_d-MFcC3240*Ule%>Dugt)vMvj!)@~o5{)4yLAY+zcy}T-Mh)MW4n_>h zxnUvP^DS303Xdq@Y5tc>4gbi{PnjXD8t+P^rXqBt=Ssv4e&A9>te&(&New`4eFaF( z>$Z;(hSqpCky@G<1|7rj9N!7xp*&(*juCQ-U>7rh|K(WoBH;xlY%Xjy{~yYT%-Fvf zeR%joga2dTxxOFh9qV4p{xTl!@MmjcvUl!-(Hz_45^dzBW10BFZQobn36rJ+U11hh zo_UpV{Rg%ii-*xa#`*UvAjXO)Zd7fxQqteP#HzQ|7;dv1CD!Wnix#TI5) zE^>#RFZ=A&74PUQ_0Bzab)GGd;6mlv!nvi39;4U%3(tU8WqGy?n__)FK%pL;HZyG!8oE;FG3r(gGB`CVf}}3EAS|y zX|0`I)DE!<7NgW6TN4i^+How8FsOr49~u#uQit3(sc@)?HKq$E+5AzD%^j^=SU7v; z%G}vmf%PPE{=!9het8BX{vuWm=Qu3Bj7Z@6`3rN`=B{^+^4hbtd$#8~JsTkftN=k5 zTN4i?+A*VW#RhVmATUwuP^r`avg&FMX zVl`&@6n1to8#}ge4J$TSrJ2QE@9eb`$7cDwnvJ&4?#`YppD52>-MyLS(vrs()jJW< z%wX4gmYl~vCS+yjPglxw*XPit%F_9x&nz!ozerWIGk^BECG1?6Pn@0MvzrE2fMZ|R>84tN*2zZDr0`WJb(5KR&CB)KXLTA3+FGKyfU{uzkGff5&!Zmo4YVy zIgh>n`J;1J&RRP0q{{Y{asnz+NnNy$sCH_cy$WFeGCnz+MUd$WVRmjClvP z@qEs;ufJK|q$y5Hv_tFyp%k->t%=7H?O@R)r88B7qo-ZO}xltkzwW0;6&J4 z6OSg^!Ac{O#P)IKMQx2(t|zhKj~yI83=OTF-O>&bYG2nd;l1G5_9fbJ)GiC6SnTQs zF6RR0tB4cW!Za-zYVGWfc34s3#DZ0jIPxd3^7u%i9ZPtwV{;#4jW7`&2-AbY1QxnH zs-joD@_1ABRGOlK=-ej9E*bXqv4X{6J9`uDKpRA@H+n4eg=1SG&Xyvsb8Hq6y)Jyy zcD&NGLkiTCCY4(g4=38eu>pd0eC(v)SOfN4x$OyC*x2+6sa_YpY1(O@pJTow?E<#x zZMAx`C(#bYX(CLxg20ArvmDznY=JX8IEsR!yL!j#W{o>(yTv$VNKAv9LzvBX<^D92 z`z!pV|7Zj>0vZ90fJQ(gpb^jrXaqC@8Uc-fMnEHQ3n9?cJ(%t3>CR+()%?FF_j_vo z|M}eK@DKe*BcKt`2xtT}0vZ90fJQ(gpb^jrXaqC@8iB7~1bVx(nDR$|cSnDB^>k+k zqx=8f!RP-&PhA^lbDR|NUEF=*FdR(5WhorD-O(@K`F}xiP_}?eE0~SbN+LNAO#Z7$Cv#2g!!&&hZF=ip@*#rnrMd^aHcZEnSXp`EF8=C3|z~Fn|yHli2kx^H?_lX z(+|%1acgUWB-*j4WFf(=pUfoq;EjZV>q<#{iR5}(JG-eJY7~TJ5dqsd*wBt}IBvYM z9cts6F3!^|w)kGnNdNVJ24leWh^ z+kM<6c5r_%?x!^1*$yPyak<3_E}F&de3luyjM>ydRN(UQ_AW_!MC zGiu>8eA9Jp`^z~0$L*G~z$NSfH^3cE>;c#C@PG(>;)g3PB~}4&+qCE7?f9};e@nJ& z-bx5{uQhJik%qA~@kFAX5X$oKZ6EG`*ok(KorHw=;vZ8_+_cRZ$7jr* zi^XZ=$O*J|c2PUXGJ;eNw!{q6O0?r5`2#*GHv@?r0My0xi2+ssY}|j2>wC3!c2heX z8EQ;w!gkC=JIIHGq$-|;92l;oaB8^u4O=$2Mg!|JT06U_9g4gLwkarLHY3rF5n2)# zHkqMs8Axw{%{*MBVFW(4f7BA~%D_uz`guizQ|dJ}#{YaZyDezkKt5b<+=4T)4XZVr$}=#2y?h^E=qrBuGqT zI=Fohrw=?&-If*N?K*qHP1^r&x(_4T|Cg`_+{0wxMoio=H`CCLk92Cd7MTj0`KBFk zT+4`*9?0rrSW(FYQ+ukuHM7kJ?#*6hZ#k3JazBvQ;Bv2L(W&61ytGSq=Sur2YJb`w8?NYytbWP z)eb9gj3zct1wNT*he_rNC0pyggF*hOc9`UDXaj#!dsrF}5b&lW6CL zyRAAZ*sZ7l`<>X0MlM1r=sSG>-&VQta8)&K*hQjjFEo$>m4%K<)aY1WrujcrY2u60 z!ufwn)H%!(i9JXvxr2iSn8+Z5Eh1*(Ao-hV*w}V9_5A;4*+a|xUug&bvkMq9EE}sc z^V{0NM;W*f+w^dV49Q-whZcyy4+KN{RIQy|(GGHFNc@i#EL??cVh%HxXa||dkS_y? zU|l56Mm8Rtnn5mO2X`_vs_&A$X(N4$?bNlyO=LD9oZ}4h@kBdPhM2+NJh_9tF`o%5 zG>ODXbB=%MIP9irr~QaDTfMbXG*@kwIJuARh zOrbzfZDWCx`p6p35Xad%qP}_G&U8ctvdE*nGg9sUA4{}z}+ozZSIWylUs z-r@6qWNyKn4hOg>aeaX!T?}Uc0_6C1g!pph|HBNEVx=EnE1Aran8Tb)?7?tQ!*ENO|7m3By!ozcQ!a*Xt66YaR65d`Y6KjR)j+A0Yv$zaxft56lNsT_8anrQZ?%9Y5 z=Z5@$rfp&Ve>%|)R>*Ml%t9h23-_9M$diT1i@J-33txZ3ynEU)iV|N1T7sBZcYd*< z9U+N_+*rghJz;W(J05NXfS1E;)7Cl0Z&p;$l*7!-E6)b)h=M6C&auOMD$$O`O&ll} zzO;Omc2?~_3xW+JYDwe{*LODEq&ZB7XOl%?7ff7iV&nY($wWI0XEZ%xhZe^t83A(w zA2-ef0RlKPaP;cT&9a@2s6eVOY7HuhI(PO$qMaM>w(9x+O|qR1?bLUp5l?gD9X|i} zrHyO<3|GK$z+E5}uW2~Q`R+;E_;Q{9$5?_a*_0yFFIFWnmN*T2K>ACfl9&t6$2z7% z4PS)#L;#1$9DRq`uEk+Y6ge+g_&kFn4tsB+9nO862ccNqXPzN3aq)yfu?m1Q8iD>w zb~m-dXaPHvSgzcfC?(p#DIF)YG3PgNX@|vKbrn!39K*t4a~+56o_1IfH_TDWxcY|q zwM09VNEv`LD0`uyJ&L`nl!yqfs@+ri0yTp=zj4|l)0U&izQ40p-0 zf=#8ZZppfk*n=T(tGVD(x*UrS6nB;eA+7_$>ZNDu6XrL~TeYu;F)KRhhofX_AEumW z2j9gKLPJmDQY=GYl8IX)pdm}RR7c4-?<`rz90uAU1zdxTk7u?fmJ;pY({kUzNgaX{ zI|4f~2FGCy;ou7z)6!p<-!$9l(2iMTOr0<{IQC%{6YWTXjWIt6amBoYWf_5^=J?PG zSDQE{clAEZ%^K-DJe!G+n+lQ&$zeNTq8(g_O>kR=?_x8P;{TX*3FDMgOlShFon6z8 zp>74joj+K3-kJy!?I25#kL${q6AI!=PAnXrF>sECApMNa&aiu)%}}1rvao4`sK8IO zgEN~nFbEEaszXgAFenlMcL$$Yx&@vh&`m2*dO_mBPg*sqNJ;MmuXxnoa^ z-81_CjsAT1E2AGDt#$w6=qsbf=xrl^F!Hk_9~-&WZH&A)Qt0aIetl%H=bsJ#&hRI@ z|H<%o4sQ(4Wmhs^$o}T=qr+W8zc%z^L*G1fVd!Y~*`Wus-#YjggTFHPgM(k+ecPZr z_{88n1AjE|9|k@?P#bu8Kn~oN{TDs=_Wwcu&-Q<;|9aPV_k5=RO#i|D!M@+=`()pD z_O17XeRJ8#o_l+L0#f(&e5ChVdY5~j?cLM!#l78gUEb0P?w{aTK$lM7;p$1G3qu^_ zn7+ivs-B(w?wAUhtIUv5hK+X%ff2Vc+rxIF>l&z>y%19|gt8$H8RJ4;Y@OgzUc^l{ z?opOj;IV9w@Nyj-9KhKc}SGYJ*e8?dm9yo1UwSw50tkr4l~ zU99tGPbX9!?gk8~;d8WtpKMCaKE9C6QG6&s4qG87P9|)LWTJg_e5ahI070VEQXt+aZeP2 zcy4EZGNwW@JlyQ%12XJe;GMYl2FxWAu!Y>p9!;olse)x8d!7)1M2BONN`%YsVX#kF_Vt*G;Y)6ZU{FOg%CJU;KLouZz?J)knf=cVUXF*WGkvrW zSMm@_@JHev9s$BI`|lE7_-GQ-c!K;^_;C~e{b!3 zu|o(;L$ile&T`j=KzF*kI@P4A)0OJ3u0kMp?OMAly;mWS&S8#^i{S_;Cvgt4>8b*|Z3nF92VwUszO zVLxj-Ov3%mM~NiBS{G$jlyFCJF60tayb!BbI6v^{C@D2Fro+@T>Ekjfi#Rk;veI+j zXJ5EoG3rq}Xgj7vY2O!=p!5T(s3Gjb96@@K!BK0H)n(~EwK<9{%2hvri&z|jMWD$+ zwTZ9;S?T)C7j6??7Ix5fI9ji?@AIME^q|{fiG+fR+Xx$=@(g>Vg!5a?Q7AX005^`j zgpv?Nj~!_Sbd(03^I`i!N_Qwe0Pr5;gRRV^R|?EGpm#F8zBy={%J@6%plw_F>_?I1 z=Y0idL7WtVBR%B1DS;qQCEUU0C>AETzy|)+xCA02VNW9%<#{4@pV=G*2#N9vdMb2I zy*LMsU~za96GpM~%l5Oj>$zwi`307VbWDl=Kt={*oU`&%4%q;6)xPmU3EZioLlCZ$ zfT^Y{jY|ZX2BlAA>NF2?2sm?Y77W-U#p;}6pbfEJGR~LC`5*RK{9oJ#NwsuH`G-a+ z+T5B#L!771-5Vb-(-eQg&-kn~Nnltr8xE^mn7rO8`zTn~V8tuxC6$L9J}O5=*}0?;KFL>Gj`V$fjy#m+C;iNKG_F)cVBVVLFQ2BN_ATQb%(#=UmnyJrxMUgH3 zXHamgV^?+P{HT4@cF@y@?4u}K$485S=D;xXQjS0YJd~s>K|3F?qXNZYiThy~tWw1+ z7~_y?4%jque#gELozTpPN2Aaj&Y#g2rzX`4Ub18dc_oG!Txw6ziz?yH%TTJ17fXX` zTXPV5fWL`f$_bCh8&JraFmsto%iZ>)JRO7{enOhiV;g0xnFuEw{G>t_u4_k;xd&KD zm;;|R3}~!m1m^{`B)QvTM=1^x96$8x^E95vg2C$gqL88U{moGc{yB~*C`~*?WF_t< z-Zwr-QMk{wAFq_eEizpkIJq2f(pAuvya67(cWgmsT;}jRA9~%mE z(^vzv5WJ^oGIyGeD}Jn`ZH-CF%N*QvL%qq-$C=_q&NtW>ZU+T%Yje;x9N*f0RpjTi zVEIwNs)H^b_m_$iAlmq`zWbc!D225^D>+dn5gB#@MqTzt8u-F}fqfx8kf!20@YB-t z4`IE0PId0Gh)7;+ABENPIlqCoSZ9Y{XQ#)A6NNf|Vn>ObF20g2V``GAuH{kimPK9?=duU>K-0^)K zZ|Qh#N8Itm_RqHeQu}{v|H}61cGW)E_GiPtH~fLNpKp8D@H>YWh7S%ud+49Y2)u9T ztH}u5JoHpD0v{zGaQEP=2mQg}fzJ#)IPhHqmj))=jtsnXpsWAW{XfKWo;UPN_sE`s?mz8* zp!++z&vhSZJKz1{?vAccb$zhwo4ZbR-P*Og^ItlDyYq)S|C95{&Z6^`o!52zZCkth zDfcJbZ*ot$x4O@DzOXSve#|jnVwX}*6L{Mskp_InLMbEa4`LYJO?_85+cM_c}X@OG@Gmj4&Prp*ju9 zxJ6jE4CCwk;Km}rifeY2mqwENer{ekB)A#N+3jKYEc+WRv z^Gcj_(>X~?t5JEJGR2&X?uYFtE+R=Z@C$I4V34D;-vE^7IjINf{K&>kdtwb%Ox>0RE#CNa(rLK;ocx{_Np>hpi};^ZL`nL| zeYYLO6$1u6z?tv~L}SGfosct%g_kS$+nb|^7XcRWLaz5xrh_aIJ-(@l7nJjV>?qTd zU6jJiG!d*I(p8|7W~B9!$o-M#C{AYjwlN}TC`)jXF#$k`5|RnmdZK=Wo368xwv{C2 zgH5wUz;TVUA87YR`z-EENNt*995U1hECufD`841#qQd#j4Nb#Hj`<6yb`533D;XPN zlyJh}`L(f-Z(tgzlSvGcN~1xRduD*kxCtl&*E(u2&*lVq0v|!rqv?^{V{Ms$knEuI z>D}$)z1U?&k?9Ly51`P44NnM(>t0eXjR$8x-B7hKiR6MP2nn%$#7xBC82v1C{-HUF z%vval9JUBp2r^QhV%OR7 zF%XTRApiEm_T#rh2Yi)%6bC`TVL@B3pE$~(2l#2+S1ki2f zxo>Dbil^fOZ9tk};YNfOWxfWJb9R~rg6zMpWKKB&_9 zK0AuyD36Xp7C1LVK|tO}l}sRxSESr&`&p#TjCYukRPhqB;<$KtQY^JXgw`V?*UQa{ zv3CmJjWuAdGE8Z&w8JQ919ynR!(U_VnpBhLymw97m+DXzU*o`b8 znMKgUf~PZ&oEvtLTRZpV_E|W7oFQxtg8v|BlqeGjVWe=c-Iv(U!glMj%mHKqKejZ< za3+@%3oj?JCYNhfE;P&~P2l@{4r{9pzR>V(u_=O-BbG}r_L`D>7^y4~ zI)7zfNJNCYV6fYf#GuybtT30TtgqC@B8c87E4)|HXb*P=Y{BeuimP zr7^5PyO15^I@6a!%|XD-5wGJ?Vk$YBn0f#!JW_-*=xz?eXfQqWPe@KOu2M_zV9_7T zCq8RGis=FRn*5r{|FEi{@riM&p}i29d-%~&!ZWnk0r|YR#BuRBY%x3}mlAi+mwEj^ z!7U-7$N9j1;=11uzSHnkavLYI#}5DBQ+s?p0(C5@_{-Oywe>LCoDEy4xvqz4RXvQ3 z4VFv{7q+68?2Oe8PC5AyF4WliIHn{s*;qcAcFazV&e*bAG7Vb^_7I|Q8EwG(hPP5f)>JUsGGgscLGld^MeQtKM#9n;R$HOv~8 zY*4ZYCnI`iPFd}2d)Z!Fww75ox@6&OB9Educb2Vo;FsIFxT)@)*(vQ@vv)u?ks~p& zpFss)vf82aW9u4+T01S&4t-~2G_>goT(sITY1^&4t!wEm~`4gb9}{CWPP{->US zdIstlsAr&_fqDk&8K`HVo`HG>>KUkKpq_zx2L69E10C(XZbwJE<92?T*ZdI|2Cy_4kr4t-a9*`oon_EJWOLz`_un+zSmpn1~YN(TUa;b3KFz>L+}X_^oXX zfySa65DY1R*MQ3Qz?;f4k<{90nRXxs# z{K9R^6Bp7`ldH+}*!h_g$3?Q=Z;s1W{fSgfE~N(#&&{ZFOX>2_`P=p%E*s-UaeUPA z)e~x|@x1Xn#?Fo{#dGR2v8hwm$bNp#!_=i4-9_G;Dy2I!D#Thfqx$O{ehnz_|Abh4!mw)@4#~g+WH^v|8W1i z``_Asvj5ip7x(w|{YBre_Pw|79etv?WZd-tD!^#8rxZ|k1x9_xNdcYoJkcKuq{`?}uQwbFI8OLaZ5 z^KUzUtMkV?|8wW1&Y8|Vo!57Kq2mubezxPgJMQjCI&SIMO-AF9_Frtjzx}J*=i3jr z-_SnL_Sv?NwY|UX>)Y;vAwai1$^AR`lkShZ-{!8mv+m2>XZ%|!9ruT?v^tw(k=H+~ zeV==kc#|`{Rw3TxjjdLQH@O3st`%=Sk1lQ{UN?vrD#V+1z6ChD}gN^z6B>tuy^6M0lwDQ>bC6&2!5^f`H@xXIs=Rf?MgB58%#GyO#o z=AWEarC7-k@Yq0cxwAsNiBbM_72-{l=C8e0yqQz`H5KAbq|RSaDQ>a~zq&%aiPm5-_IXNF1vW z2YY;fM1w~Y##7Z|Z-ii7>+p^Wv2Oq}pvTm4Fj*-kyBUDQE!5EpF|$S^Ek8>Kw^xY8 z9ubdd@OI+($W>wylbJI_PZ6l-p_-@^>u?0;5D?e#3URc@^9(&9AYr#vij_a&;o%4R zRTbi(K@1A8ZV(-=6w7b~$R{x7#wx_VX;B5o%9rxi3bALpzolXqh(i@(xko{84alkQ zjaG_TsbDezaCER*EJlEUg&*WVr5KF?{0T_i{%SD|f}lLh=#~nxF!@q|y5QR0S1mTQ z_8{dn(0>SyQloh`3s;N5GNimq(RilPRMq7BtQZF~^)70cS6eGN=@@ zQUe@nI%q4!EX5!O+fjKHVvJ@m0@`~RhPqlTMxY^t3Q1Lpl{Rc%p^jvwSOz0tg$mCX z*NX8SbUXr1FtBGgRg3)*P}v9-Mk>VGu)l&Z3N+)56=F0Nj0hkfWB;X=7(_>DD~WGu^fR& zNrdt_m14d;Qjj-@UDaYZN11V@pS_is=3~eKo>d{{H1J2DvkH{=%xlF^HT&U+1ko`J zpHV5sXmXc^(yp%-vr9Osg7E1TV%So>5ezO!@7Gm`gFTpBK`vX$r&Wk?sq}~kTAuGc zwOTAkpaJ7wPpJ^|yNx&sgYe1MiY1$fl^RGeBA-+t=AdE|fnKWA6D!3SF3cKx_z4x_ zhBFA@H^8rtuM~Tl6u&W=kE;}G<~-!6(!zsTK8@Rth%xM5fgb!}0*LSTLkBd21%!&}b72?orV6+WBOHZX(o0|_57I#;O z@y{h57o0soSB024=Z6`JHNUe`j0+9vP#6Ur6=Dua_~d~Q^rQ9)F~Oesa*qSN?V0WS zdYfS?c1`UOm>%r8$2N&g{J+rlaR=o8qGPnc{qa&aQATg(8EIy4&66&c_U4tW%1hQH9ZS#AR7 zJsgkVO0u_|Pj4wF3+ZX+kGGU75C7Qt(`)4#(}2y>@J$Hk;cMl}YmjZ?KJ$|vsgM(Q zco-(`6(EneR?azQTnl_2?K^+8mD~@(Ck>oWT`f1xy*VZ!yZ~*}d8k58oZC2MsjP7R zU`sg|qwo^_;T3XHy_~@;S2=$ed%%`9y^r^Gw7GSs35<8`sJ`@_@*|A;%qvIaJB8Nate}ax6jw94Xx5%K5cx<(e}h zA|9YNN;|)LwVZ4o2_D~2V-qkqAKgmMhK1nJ`N-9BTy`vuu^50e2hOil$QxcgNY@fx zgkP?do1mX?28;Sj*UDL&=5QrrAUx+6E9Jy_&>BJE>ij~boU1=R4t6o;!krb14>hX@`FaX)f?xTg z*qtA(mgBo|^{a*RfeJZ+0w*RZOfPhPq(V-%4eyN&;49~cE9GQBq2u#J zKaoL{7tYsJ%FX_Rw1#<7f3#=#)0$Im2x5?$OQPud0VyItZ&0g>%6r>-tfQJ{U!+fs!F*@^pfx3`ERL^ zH_lJK-{*X~Tq!r}i^!kf_vT9Z#+3)>$2}GDb^VhI#y`EgA|&z6`2*1n>+?+&;zkNx z82>bSW2M+6{|!5M_=ffR|0QQA9r$qn3wqzy{Xe_LI=;WX-(7P4*S~c;{v|1Y6wF|7P2_+%*xU}UL;xu?^X!a$_~d5jOiObDYDJXb#SCpkpxMHH8HarsV_ z!dz2azR41xo(`)X=#CAyt4!fxDGAfKA*2-mY+32$d99uns;6m)QBS*74|HA;?3?6H zVVo5bI$+pjU@E44rUw7txgyM~%l!OJ=OF57v+7A8F)KNq4RtvLLy4fS9A^{~b?$`g zI=`LTJr(L{x*@2?wd(P<S>vJHaX#!uYZ%(4!65oQ+w9hX_i?;IA%UbiQMVMN0 z!VlSfAj$}?$`F!puYgg~rw0?#RroI9am?y7q%~*Ax_WGy6!i>R_4s+>u@ayZCBX-k zXF_d~%%Efzte86Z-zoK6nVV^-rgluUp~x$S zE1lXFsJ5X9hj|)`c}gThQPgM8j_sZ+b2CuOZMq^uJ-t>vDTLkBFGoHc-cU{Z5M~7` zgpV3`A*x-2o!ULusAtm+CF<$1>Y)ZQrrk$#)S>{Rn)malr^~8m`#aY<{%=+MzkVm( zD337lzdL-t!@uf(>KUkKpq_zx2I?88XP};edIstlsAr&_fqDk&8K`IA|LqJ+yWI|n zd+Bb_`kC9w^z`XPL+rQlNAsu7o=Z-iNtQSL*|{_GD@lG~{_N>9oBnk5^!an=(*`ME zo9X{|hd&Sh-~ZbmSiilVfqDk&8K`HVo`HG>>KUkKpq_zx2I?88XP};edIol620Gf^ z-nK8#`u`%K`=6d+RmdPnWD=KwM}2n@s8nT-Vf}w>aE!p2kOJzmd!B0RVA4=}sw{!? z45?cNwlf8ywoIk)bmG@VemhmBbajy*AkR%08PxL>s~%{|LJypES(YX1ql9RVPO>tO zy+TDb#m`QuXW|NqAL{=b>RCteK|N2l>M6V!FpW6$(
h~9q+{t8_h61tlCuVod? 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 literal 0 HcmV?d00001 From c5e097d69b525f22a39b8453f6571f16d5e7f4e2 Mon Sep 17 00:00:00 2001 From: Fabien Le Frapper Date: Sat, 6 Feb 2021 22:15:26 +0100 Subject: [PATCH 06/12] ...let's put back the db where it belongs --- example/{example => }/db.sqlite3 | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename example/{example => }/db.sqlite3 (100%) diff --git a/example/example/db.sqlite3 b/example/db.sqlite3 similarity index 100% rename from example/example/db.sqlite3 rename to example/db.sqlite3 From 8a06c3ce5b3cf7d4852cdf0cb75319752488e6dd Mon Sep 17 00:00:00 2001 From: Fabien Le Frapper Date: Sat, 6 Feb 2021 22:17:15 +0100 Subject: [PATCH 07/12] Revert "formatting" This reverts commit be07454eb41b4303a9b9a1d13e90d8dceed28e99. --- example/documents/migrations/0001_initial.py | 74 ++++--------------- .../home/migrations/0002_create_homepage.py | 4 +- .../migrations/0016_nested_structblock.py | 6 +- .../migrations/0017_auto_20201006_2147.py | 4 +- .../migrations/0018_add_pagechooserblock.py | 6 +- example/home/migrations/0019_simplemodel.py | 8 +- .../migrations/0020_correct_cover_model_fk.py | 10 ++- 7 files changed, 43 insertions(+), 69 deletions(-) diff --git a/example/documents/migrations/0001_initial.py b/example/documents/migrations/0001_initial.py index 07085c69..fde48683 100644 --- a/example/documents/migrations/0001_initial.py +++ b/example/documents/migrations/0001_initial.py @@ -14,71 +14,29 @@ class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ("wagtailcore", "0059_apply_collection_ordering"), - ("taggit", "0003_taggeditem_add_unique_index"), + ('wagtailcore', '0059_apply_collection_ordering'), + ('taggit', '0003_taggeditem_add_unique_index'), ] operations = [ migrations.CreateModel( - name="CustomDocument", + name='CustomDocument', fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("title", models.CharField(max_length=255, verbose_name="title")), - ("file", models.FileField(upload_to="documents", verbose_name="file")), - ( - "created_at", - models.DateTimeField(auto_now_add=True, verbose_name="created at"), - ), - ("file_size", models.PositiveIntegerField(editable=False, null=True)), - ( - "file_hash", - models.CharField(blank=True, editable=False, max_length=40), - ), - ( - "collection", - models.ForeignKey( - default=wagtail.core.models.get_root_collection_id, - on_delete=django.db.models.deletion.CASCADE, - related_name="+", - to="wagtailcore.collection", - verbose_name="collection", - ), - ), - ( - "tags", - taggit.managers.TaggableManager( - blank=True, - help_text=None, - through="taggit.TaggedItem", - to="taggit.Tag", - verbose_name="tags", - ), - ), - ( - "uploaded_by_user", - models.ForeignKey( - blank=True, - editable=False, - null=True, - on_delete=django.db.models.deletion.SET_NULL, - to=settings.AUTH_USER_MODEL, - verbose_name="uploaded by user", - ), - ), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=255, verbose_name='title')), + ('file', models.FileField(upload_to='documents', verbose_name='file')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='created at')), + ('file_size', models.PositiveIntegerField(editable=False, null=True)), + ('file_hash', models.CharField(blank=True, editable=False, max_length=40)), + ('collection', models.ForeignKey(default=wagtail.core.models.get_root_collection_id, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.collection', verbose_name='collection')), + ('tags', taggit.managers.TaggableManager(blank=True, help_text=None, through='taggit.TaggedItem', to='taggit.Tag', verbose_name='tags')), + ('uploaded_by_user', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='uploaded by user')), ], options={ - "verbose_name": "document", - "verbose_name_plural": "documents", - "abstract": False, + 'verbose_name': 'document', + 'verbose_name_plural': 'documents', + 'abstract': False, }, bases=(wagtail.search.index.Indexed, models.Model), - ) + ), ] diff --git a/example/home/migrations/0002_create_homepage.py b/example/home/migrations/0002_create_homepage.py index 5c499902..59788923 100644 --- a/example/home/migrations/0002_create_homepage.py +++ b/example/home/migrations/0002_create_homepage.py @@ -48,7 +48,9 @@ def remove_homepage(apps, schema_editor): class Migration(migrations.Migration): - run_before = [("wagtailcore", "0053_locale_model")] + run_before = [ + ('wagtailcore', '0053_locale_model'), + ] dependencies = [("home", "0001_initial")] diff --git a/example/home/migrations/0016_nested_structblock.py b/example/home/migrations/0016_nested_structblock.py index 3931a268..a33592a7 100644 --- a/example/home/migrations/0016_nested_structblock.py +++ b/example/home/migrations/0016_nested_structblock.py @@ -9,7 +9,9 @@ class Migration(migrations.Migration): - dependencies = [("home", "0015_auto_20200803_2223")] + dependencies = [ + ("home", "0015_auto_20200803_2223"), + ] operations = [ migrations.AlterField( @@ -157,5 +159,5 @@ class Migration(migrations.Migration): ), ] ), - ) + ), ] diff --git a/example/home/migrations/0017_auto_20201006_2147.py b/example/home/migrations/0017_auto_20201006_2147.py index 39ef42fc..df290266 100644 --- a/example/home/migrations/0017_auto_20201006_2147.py +++ b/example/home/migrations/0017_auto_20201006_2147.py @@ -43,7 +43,9 @@ class Migration(migrations.Migration): ), ), ], - options={"abstract": False}, + options={ + "abstract": False, + }, ), migrations.AddField( model_name="blogpage", diff --git a/example/home/migrations/0018_add_pagechooserblock.py b/example/home/migrations/0018_add_pagechooserblock.py index aa3cbc67..ef80c312 100644 --- a/example/home/migrations/0018_add_pagechooserblock.py +++ b/example/home/migrations/0018_add_pagechooserblock.py @@ -9,7 +9,9 @@ class Migration(migrations.Migration): - dependencies = [("home", "0017_auto_20201006_2147")] + dependencies = [ + ("home", "0017_auto_20201006_2147"), + ] operations = [ migrations.AlterField( @@ -161,5 +163,5 @@ class Migration(migrations.Migration): ("page", wagtail.core.blocks.PageChooserBlock()), ] ), - ) + ), ] diff --git a/example/home/migrations/0019_simplemodel.py b/example/home/migrations/0019_simplemodel.py index 8a442de1..abeb5c38 100644 --- a/example/home/migrations/0019_simplemodel.py +++ b/example/home/migrations/0019_simplemodel.py @@ -5,7 +5,9 @@ class Migration(migrations.Migration): - dependencies = [("home", "0018_add_pagechooserblock")] + dependencies = [ + ("home", "0018_add_pagechooserblock"), + ] operations = [ migrations.CreateModel( @@ -19,7 +21,7 @@ class Migration(migrations.Migration): serialize=False, verbose_name="ID", ), - ) + ), ], - ) + ), ] diff --git a/example/home/migrations/0020_correct_cover_model_fk.py b/example/home/migrations/0020_correct_cover_model_fk.py index 239bd3fd..8f9b209f 100644 --- a/example/home/migrations/0020_correct_cover_model_fk.py +++ b/example/home/migrations/0020_correct_cover_model_fk.py @@ -6,10 +6,16 @@ class Migration(migrations.Migration): - dependencies = [("home", "0019_simplemodel"), ("images", "0001_initial")] + dependencies = [ + ("home", "0019_simplemodel"), + ("images", "0001_initial"), + ] operations = [ - migrations.RemoveField(model_name="blogpage", name="cover"), + migrations.RemoveField( + model_name="blogpage", + name="cover", + ), migrations.AddField( model_name="blogpage", name="hero_image", From b5ea1bf4c568d01255eb0f38649920793b1cfebe Mon Sep 17 00:00:00 2001 From: Fabien Le Frapper Date: Sat, 6 Feb 2021 22:18:57 +0100 Subject: [PATCH 08/12] Formatting --- example/documents/migrations/0001_initial.py | 72 ++++++++++++++++---- 1 file changed, 57 insertions(+), 15 deletions(-) diff --git a/example/documents/migrations/0001_initial.py b/example/documents/migrations/0001_initial.py index fde48683..74551be7 100644 --- a/example/documents/migrations/0001_initial.py +++ b/example/documents/migrations/0001_initial.py @@ -14,28 +14,70 @@ class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('wagtailcore', '0059_apply_collection_ordering'), - ('taggit', '0003_taggeditem_add_unique_index'), + ("wagtailcore", "0059_apply_collection_ordering"), + ("taggit", "0003_taggeditem_add_unique_index"), ] operations = [ migrations.CreateModel( - name='CustomDocument', + name="CustomDocument", fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=255, verbose_name='title')), - ('file', models.FileField(upload_to='documents', verbose_name='file')), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='created at')), - ('file_size', models.PositiveIntegerField(editable=False, null=True)), - ('file_hash', models.CharField(blank=True, editable=False, max_length=40)), - ('collection', models.ForeignKey(default=wagtail.core.models.get_root_collection_id, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.collection', verbose_name='collection')), - ('tags', taggit.managers.TaggableManager(blank=True, help_text=None, through='taggit.TaggedItem', to='taggit.Tag', verbose_name='tags')), - ('uploaded_by_user', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='uploaded by user')), + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("title", models.CharField(max_length=255, verbose_name="title")), + ("file", models.FileField(upload_to="documents", verbose_name="file")), + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="created at"), + ), + ("file_size", models.PositiveIntegerField(editable=False, null=True)), + ( + "file_hash", + models.CharField(blank=True, editable=False, max_length=40), + ), + ( + "collection", + models.ForeignKey( + default=wagtail.core.models.get_root_collection_id, + on_delete=django.db.models.deletion.CASCADE, + related_name="+", + to="wagtailcore.collection", + verbose_name="collection", + ), + ), + ( + "tags", + taggit.managers.TaggableManager( + blank=True, + help_text=None, + through="taggit.TaggedItem", + to="taggit.Tag", + verbose_name="tags", + ), + ), + ( + "uploaded_by_user", + models.ForeignKey( + blank=True, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to=settings.AUTH_USER_MODEL, + verbose_name="uploaded by user", + ), + ), ], options={ - 'verbose_name': 'document', - 'verbose_name_plural': 'documents', - 'abstract': False, + "verbose_name": "document", + "verbose_name_plural": "documents", + "abstract": False, }, bases=(wagtail.search.index.Indexed, models.Model), ), From ab6f1733b2761245f094dbc03ad51f97ae6cfe7b Mon Sep 17 00:00:00 2001 From: Fabien Le Frapper Date: Sat, 6 Feb 2021 22:21:48 +0100 Subject: [PATCH 09/12] Formatting --- example/home/migrations/0002_create_homepage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/home/migrations/0002_create_homepage.py b/example/home/migrations/0002_create_homepage.py index 59788923..9aec5f7a 100644 --- a/example/home/migrations/0002_create_homepage.py +++ b/example/home/migrations/0002_create_homepage.py @@ -49,7 +49,7 @@ def remove_homepage(apps, schema_editor): class Migration(migrations.Migration): run_before = [ - ('wagtailcore', '0053_locale_model'), + ("wagtailcore", "0053_locale_model"), ] dependencies = [("home", "0001_initial")] From 0272d5224746337c3336a64506d5ceebf874a221 Mon Sep 17 00:00:00 2001 From: Fabien Le Frapper Date: Thu, 1 Apr 2021 11:39:08 +0200 Subject: [PATCH 10/12] Add tests & rewrite code a bit --- example/example/settings/base.py | 2 +- example/example/tests/test_grapple.py | 4 ++++ example/home/models.py | 3 ++- grapple/types/documents.py | 19 +++++++++---------- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/example/example/settings/base.py b/example/example/settings/base.py index 88c8e3b3..d77eea9a 100644 --- a/example/example/settings/base.py +++ b/example/example/settings/base.py @@ -171,7 +171,7 @@ # Grapple Config: GRAPHENE = {"SCHEMA": "grapple.schema.schema"} -GRAPPLE_APPS = {"images": "", "home": ""} +GRAPPLE_APPS = {"images": "", "home": "", "documents": ""} GRAPPLE_ADD_SEARCH_HIT = True HEADLESS_PREVIEW_CLIENT_URLS = {"default": "http://localhost:8001/preview"} diff --git a/example/example/tests/test_grapple.py b/example/example/tests/test_grapple.py index 8ffff2d6..f1de9cb0 100644 --- a/example/example/tests/test_grapple.py +++ b/example/example/tests/test_grapple.py @@ -448,6 +448,7 @@ def test_query_documents_id(self): { documents { id + customDocumentProperty } } """ @@ -460,6 +461,9 @@ def test_query_documents_id(self): self.assertEquals( executed["data"]["documents"][0]["id"], str(self.example_document.id) ) + self.assertEquals( + executed["data"]["documents"][0]["customDocumentProperty"], "Document Model!" + ) def test_query_file_field(self): query = """ diff --git a/example/home/models.py b/example/home/models.py index eccc83d9..829091fe 100644 --- a/example/home/models.py +++ b/example/home/models.py @@ -14,6 +14,7 @@ from wagtail.snippets.edit_handlers import SnippetChooserPanel from wagtail.images.edit_handlers import ImageChooserPanel from wagtail.documents.edit_handlers import DocumentChooserPanel +from wagtail.documents import get_document_model_string from wagtail_headless_preview.models import HeadlessPreviewMixin from wagtailmedia.edit_handlers import MediaChooserPanel @@ -83,7 +84,7 @@ class BlogPage(HeadlessPreviewMixin, Page): related_name="+", ) book_file = models.ForeignKey( - "wagtaildocs.Document", + get_document_model_string(), null=True, blank=True, on_delete=models.SET_NULL, diff --git a/grapple/types/documents.py b/grapple/types/documents.py index 651e5650..b9a1c570 100644 --- a/grapple/types/documents.py +++ b/grapple/types/documents.py @@ -9,14 +9,13 @@ else: from wagtail.documents import get_document_model +from wagtail.documents.models import Document as WagtailDocument + from ..registry import registry from ..utils import get_media_item_url, resolve_queryset from .collections import CollectionObjectType from .structures import QuerySetList -WagtailDocument = get_document_model() - - class DocumentObjectType(DjangoObjectType): """ Base document type used if one isn't generated for the current model. @@ -43,10 +42,13 @@ def resolve_url(self, info, **kwargs): return get_media_item_url(self) +def get_document_type(): + mdl = get_document_model() + return registry.documents.get(mdl, DocumentObjectType) + def DocumentsQuery(): - registry.documents[WagtailDocument] = DocumentObjectType mdl = get_document_model() - mdl_type = registry.documents[mdl] + mdl_type = get_document_type() class Mixin: document = graphene.Field(mdl_type, id=graphene.ID()) @@ -58,6 +60,7 @@ class Mixin: graphene.ID, description="Filter by collection id" ), ) + document_type = graphene.String(required=True) def resolve_document(self, info, id, **kwargs): """Returns a document given the id, if in a public collection""" @@ -74,12 +77,8 @@ def resolve_documents(self, info, **kwargs): return resolve_queryset(qs, info, **kwargs) def resolve_document_type(self, info, **kwargs): - return mdl_type + return get_document_type() return Mixin -def get_document_type(): - registry.documents[WagtailDocument] = DocumentObjectType - mdl = get_document_model() - return registry.documents[mdl] From da4bc602c30fa467804b266326a5478f344f79db Mon Sep 17 00:00:00 2001 From: Fabien Le Frapper Date: Thu, 1 Apr 2021 11:39:40 +0200 Subject: [PATCH 11/12] Add migration file --- .../migrations/0021_auto_20210401_0935.py | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 example/home/migrations/0021_auto_20210401_0935.py diff --git a/example/home/migrations/0021_auto_20210401_0935.py b/example/home/migrations/0021_auto_20210401_0935.py new file mode 100644 index 00000000..cca2dd7c --- /dev/null +++ b/example/home/migrations/0021_auto_20210401_0935.py @@ -0,0 +1,20 @@ +# Generated by Django 3.1.7 on 2021-04-01 09:35 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('documents', '0001_initial'), + ('home', '0020_correct_cover_model_fk'), + ] + + operations = [ + migrations.AlterField( + model_name='blogpage', + name='book_file', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='documents.customdocument'), + ), + ] From 5b3a86c9a50c473fc1d87679193af42b2aa8145f Mon Sep 17 00:00:00 2001 From: Fabien Le Frapper Date: Thu, 1 Apr 2021 11:41:12 +0200 Subject: [PATCH 12/12] Formatting not picked up by precommit hook --- example/example/tests/test_grapple.py | 3 ++- .../home/migrations/0021_auto_20210401_0935.py | 16 +++++++++++----- grapple/types/documents.py | 4 ++-- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/example/example/tests/test_grapple.py b/example/example/tests/test_grapple.py index f1de9cb0..aa5f6372 100644 --- a/example/example/tests/test_grapple.py +++ b/example/example/tests/test_grapple.py @@ -462,7 +462,8 @@ def test_query_documents_id(self): executed["data"]["documents"][0]["id"], str(self.example_document.id) ) self.assertEquals( - executed["data"]["documents"][0]["customDocumentProperty"], "Document Model!" + executed["data"]["documents"][0]["customDocumentProperty"], + "Document Model!", ) def test_query_file_field(self): diff --git a/example/home/migrations/0021_auto_20210401_0935.py b/example/home/migrations/0021_auto_20210401_0935.py index cca2dd7c..b392bd46 100644 --- a/example/home/migrations/0021_auto_20210401_0935.py +++ b/example/home/migrations/0021_auto_20210401_0935.py @@ -7,14 +7,20 @@ class Migration(migrations.Migration): dependencies = [ - ('documents', '0001_initial'), - ('home', '0020_correct_cover_model_fk'), + ("documents", "0001_initial"), + ("home", "0020_correct_cover_model_fk"), ] operations = [ migrations.AlterField( - model_name='blogpage', - name='book_file', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='documents.customdocument'), + model_name="blogpage", + name="book_file", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="+", + to="documents.customdocument", + ), ), ] diff --git a/grapple/types/documents.py b/grapple/types/documents.py index b9a1c570..9bcf6eb4 100644 --- a/grapple/types/documents.py +++ b/grapple/types/documents.py @@ -16,6 +16,7 @@ from .collections import CollectionObjectType from .structures import QuerySetList + class DocumentObjectType(DjangoObjectType): """ Base document type used if one isn't generated for the current model. @@ -46,6 +47,7 @@ def get_document_type(): mdl = get_document_model() return registry.documents.get(mdl, DocumentObjectType) + def DocumentsQuery(): mdl = get_document_model() mdl_type = get_document_type() @@ -80,5 +82,3 @@ def resolve_document_type(self, info, **kwargs): return get_document_type() return Mixin - -