From 4a1afb41f8092577605e5deece89c3e829896c4a Mon Sep 17 00:00:00 2001 From: Hudelot <celine.hudelot@gmail.com> Date: Thu, 15 Nov 2018 08:53:09 +0100 Subject: [PATCH] Update jour 3 --- Facerecognition/.DS_Store | Bin 0 -> 6148 bytes Facerecognition/.idea/Facerecognition.iml | 11 ++ .../inspectionProfiles/Project_Default.xml | 13 ++ Facerecognition/.idea/misc.xml | 4 + Facerecognition/.idea/modules.xml | 8 + Facerecognition/.idea/workspace.xml | 167 ++++++++++++++++++ Facerecognition/Data/tetris_blocks.png | Bin 0 -> 20782 bytes Facerecognition/face_recognition/__init__.py | 0 .../face_recognition/test_opencv.py | 31 ++++ .../face_recognition/tetris_blocks.png | Bin 0 -> 20782 bytes Facerecognition_S2_database.md | 3 + Facerecognition_S4_rasp.md | 36 ++++ Facerecognition_S4_traitement_pi.md | 6 + TemplateProject_Raspberry.md | 4 +- 14 files changed, 281 insertions(+), 2 deletions(-) create mode 100644 Facerecognition/.DS_Store create mode 100644 Facerecognition/.idea/Facerecognition.iml create mode 100644 Facerecognition/.idea/inspectionProfiles/Project_Default.xml create mode 100644 Facerecognition/.idea/misc.xml create mode 100644 Facerecognition/.idea/modules.xml create mode 100644 Facerecognition/.idea/workspace.xml create mode 100644 Facerecognition/Data/tetris_blocks.png create mode 100644 Facerecognition/face_recognition/__init__.py create mode 100644 Facerecognition/face_recognition/test_opencv.py create mode 100644 Facerecognition/face_recognition/tetris_blocks.png create mode 100644 Facerecognition_S4_rasp.md create mode 100644 Facerecognition_S4_traitement_pi.md diff --git a/Facerecognition/.DS_Store b/Facerecognition/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..81d06ff0065e6229d8d9652867f8295b1df17035 GIT binary patch literal 6148 zcmeHK!A=`75FNt;PAb$rAi;4jm3qh_TOx6&Dy>2|a6{UvJ+xKWO#-a6U87{vsDz;X z4EO~8gg@YO+BdcvmC%Y?)FO{Ge&g|sEx(oR9U>C#aX%#TiAX{jy*ipd2#>Qqk`?P& z2MV6!Fju`aS1I~Dp%ce|W8mLrfX}W+9ZIOAWa0eYV(j$~EqW94xO6f)x99vWJ<qdI z*=*j6l~r$TeM8E+tZ&x8#Aj*}mq|GuwUgl|?j0rNS!(U~O67AqNk3$RN!Q=nS4Ej* z#bBtDv;F`fpFd_rUrpL-T=YkJp4bdXS(CM{zdfDqg^eKGoi&1K*lIN!!QPwJY*v%o zuflhS$6vo+OfP3w*XA<_+*4X!TKok!Fy{OF77vSD6{qlVyiX_Kr$+<o(hzNr6rEB* z892*e7Yn?-Mb7WMJ(>SZ`FwKU3p|51Crf0&o(1`0iEFy090QJl|APU(9|9<2WU(@+ zuMRZ21OR$)Yk{qQ{eb~HfRV+@AUqIZQh_E_*b+n7%0ZZPj7K)UGHB9C=#?>#U0K)) zMcBea1Uj5VWYD#a0mr~Y23Aei=lB2M@Adz~B-e8cI0l{-1H$XXoi?^)-_}Q)<F__| r9z$6;t}>`o(Aei#8~haSK($~jU;`LgtPH{faX$i@2G=+Smde0S_|&$d literal 0 HcmV?d00001 diff --git a/Facerecognition/.idea/Facerecognition.iml b/Facerecognition/.idea/Facerecognition.iml new file mode 100644 index 0000000..6711606 --- /dev/null +++ b/Facerecognition/.idea/Facerecognition.iml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="PYTHON_MODULE" version="4"> + <component name="NewModuleRootManager"> + <content url="file://$MODULE_DIR$" /> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> + <component name="TestRunnerService"> + <option name="PROJECT_TEST_RUNNER" value="Unittests" /> + </component> +</module> \ No newline at end of file diff --git a/Facerecognition/.idea/inspectionProfiles/Project_Default.xml b/Facerecognition/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..3dc583b --- /dev/null +++ b/Facerecognition/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,13 @@ +<component name="InspectionProjectProfileManager"> + <profile version="1.0"> + <option name="myName" value="Project Default" /> + <inspection_tool class="PyPep8Inspection" enabled="true" level="WEAK WARNING" enabled_by_default="true"> + <option name="ignoredErrors"> + <list> + <option value="W29" /> + <option value="E501" /> + </list> + </option> + </inspection_tool> + </profile> +</component> \ No newline at end of file diff --git a/Facerecognition/.idea/misc.xml b/Facerecognition/.idea/misc.xml new file mode 100644 index 0000000..8d00cef --- /dev/null +++ b/Facerecognition/.idea/misc.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6 (Facerecognition)" project-jdk-type="Python SDK" /> +</project> \ No newline at end of file diff --git a/Facerecognition/.idea/modules.xml b/Facerecognition/.idea/modules.xml new file mode 100644 index 0000000..fd52b34 --- /dev/null +++ b/Facerecognition/.idea/modules.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/.idea/Facerecognition.iml" filepath="$PROJECT_DIR$/.idea/Facerecognition.iml" /> + </modules> + </component> +</project> \ No newline at end of file diff --git a/Facerecognition/.idea/workspace.xml b/Facerecognition/.idea/workspace.xml new file mode 100644 index 0000000..211412b --- /dev/null +++ b/Facerecognition/.idea/workspace.xml @@ -0,0 +1,167 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ChangeListManager"> + <list default="true" id="8b276c94-c78f-4160-9bdc-2d5ce663a3c1" name="Default" comment="" /> + <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> + <option name="TRACKING_ENABLED" value="true" /> + <option name="SHOW_DIALOG" value="false" /> + <option name="HIGHLIGHT_CONFLICTS" value="true" /> + <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> + <option name="LAST_RESOLUTION" value="IGNORE" /> + </component> + <component name="FileEditorManager"> + <leaf> + <file leaf-file-name="test_opencv.py" pinned="false" current-in-tab="true"> + <entry file="file://$PROJECT_DIR$/face_recognition/test_opencv.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="296"> + <caret line="27" column="8" selection-start-line="27" selection-start-column="8" selection-end-line="27" selection-end-column="8" /> + <folding> + <element signature="e#100#137#0" expanded="true" /> + </folding> + </state> + </provider> + </entry> + </file> + </leaf> + </component> + <component name="FileTemplateManagerImpl"> + <option name="RECENT_TEMPLATES"> + <list> + <option value="Python Script" /> + </list> + </option> + </component> + <component name="IdeDocumentHistory"> + <option name="CHANGED_PATHS"> + <list> + <option value="$PROJECT_DIR$/face_recognition/test_opencv.py" /> + </list> + </option> + </component> + <component name="ProjectFrameBounds" extendedState="1"> + <option name="x" value="40" /> + <option name="y" value="45" /> + <option name="width" value="1400" /> + <option name="height" value="790" /> + </component> + <component name="ProjectView"> + <navigator proportions="" version="1"> + <foldersAlwaysOnTop value="true" /> + </navigator> + <panes> + <pane id="ProjectPane"> + <subPane> + <expand> + <path> + <item name="Facerecognition" type="b2602c69:ProjectViewProjectNode" /> + <item name="Facerecognition" type="462c0819:PsiDirectoryNode" /> + </path> + <path> + <item name="Facerecognition" type="b2602c69:ProjectViewProjectNode" /> + <item name="Facerecognition" type="462c0819:PsiDirectoryNode" /> + <item name="face_recognition" type="462c0819:PsiDirectoryNode" /> + </path> + </expand> + <select /> + </subPane> + </pane> + <pane id="Course" /> + </panes> + </component> + <component name="PropertiesComponent"> + <property name="last_opened_file_path" value="$USER_HOME$" /> + <property name="settings.editor.selected.configurable" value="com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable" /> + </component> + <component name="RunDashboard"> + <option name="ruleStates"> + <list> + <RuleState> + <option name="name" value="ConfigurationTypeDashboardGroupingRule" /> + </RuleState> + <RuleState> + <option name="name" value="StatusDashboardGroupingRule" /> + </RuleState> + </list> + </option> + </component> + <component name="RunManager"> + <configuration name="test_opencv" type="PythonConfigurationType" factoryName="Python" temporary="true"> + <module name="Facerecognition" /> + <option name="INTERPRETER_OPTIONS" value="" /> + <option name="PARENT_ENVS" value="true" /> + <envs> + <env name="PYTHONUNBUFFERED" value="1" /> + </envs> + <option name="SDK_HOME" value="" /> + <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/face_recognition" /> + <option name="IS_MODULE_SDK" value="true" /> + <option name="ADD_CONTENT_ROOTS" value="true" /> + <option name="ADD_SOURCE_ROOTS" value="true" /> + <option name="SCRIPT_NAME" value="$PROJECT_DIR$/face_recognition/test_opencv.py" /> + <option name="PARAMETERS" value="" /> + <option name="SHOW_COMMAND_LINE" value="false" /> + <option name="EMULATE_TERMINAL" value="false" /> + <option name="MODULE_MODE" value="false" /> + </configuration> + <recent_temporary> + <list> + <item itemvalue="Python.test_opencv" /> + </list> + </recent_temporary> + </component> + <component name="SvnConfiguration"> + <configuration /> + </component> + <component name="ToolWindowManager"> + <frame x="40" y="45" width="1400" height="790" extended-state="1" /> + <editor active="true" /> + <layout> + <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.24945612" /> + <window_info anchor="bottom" id="GitLabIntegration" /> + <window_info active="true" anchor="bottom" id="Run" order="2" visible="true" weight="0.32886904" /> + <window_info anchor="bottom" id="Version Control" show_stripe_button="false" /> + <window_info anchor="bottom" id="Python Console" weight="0.32886904" /> + <window_info anchor="bottom" id="Debug" order="3" weight="0.4" /> + <window_info anchor="bottom" id="Find" order="1" /> + <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" /> + <window_info id="Structure" order="1" weight="0.25" /> + <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> + <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> + <window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> + <window_info anchor="bottom" id="Message" order="0" /> + <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> + <window_info anchor="bottom" id="TODO" order="6" /> + </layout> + </component> + <component name="VcsContentAnnotationSettings"> + <option name="myLimit" value="2678400000" /> + </component> + <component name="editorHistoryManager"> + <entry file="file://$PROJECT_DIR$/face_recognition/test_opencv.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="296"> + <caret line="27" column="8" selection-start-line="27" selection-start-column="8" selection-end-line="27" selection-end-column="8" /> + <folding> + <element signature="e#100#137#0" expanded="true" /> + </folding> + </state> + </provider> + </entry> + </component> + <component name="masterDetails"> + <states> + <state key="ScopeChooserConfigurable.UI"> + <settings> + <splitter-proportions> + <option name="proportions"> + <list> + <option value="0.2" /> + </list> + </option> + </splitter-proportions> + </settings> + </state> + </states> + </component> +</project> \ No newline at end of file diff --git a/Facerecognition/Data/tetris_blocks.png b/Facerecognition/Data/tetris_blocks.png new file mode 100644 index 0000000000000000000000000000000000000000..a794d0db0500a953b79af3367b22d41fc57a1330 GIT binary patch literal 20782 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 CJ2vnD literal 0 HcmV?d00001 diff --git a/Facerecognition/face_recognition/__init__.py b/Facerecognition/face_recognition/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Facerecognition/face_recognition/test_opencv.py b/Facerecognition/face_recognition/test_opencv.py new file mode 100644 index 0000000..d1785f8 --- /dev/null +++ b/Facerecognition/face_recognition/test_opencv.py @@ -0,0 +1,31 @@ +from __future__ import print_function +import imutils +import cv2 + + +def load_and_display_image(filename): + image = cv2.imread(filename) + cv2.imshow("Image", image) + cv2.waitKey(0) + return image + + + + +def extract_edges(filename): + image = load_and_display_image(filename) + + cnts = cv2.findContours(image.copy(), cv2.RETR_EXTERNAL, + cv2.CHAIN_APPROX_SIMPLE) + output = image.copy() + + # loop over the contour + for c in cnts: + # draw each contour on the output image with a 3px thick purple + # outline, then display the output contours one at a time + cv2.drawContours(output, [c], -1, (240, 0, 159), 3) + cv2.imshow("Contours", output) + cv2.waitKey(0) + +extract_edges("../Data/tetris_blocks.png") + diff --git a/Facerecognition/face_recognition/tetris_blocks.png b/Facerecognition/face_recognition/tetris_blocks.png new file mode 100644 index 0000000000000000000000000000000000000000..a794d0db0500a953b79af3367b22d41fc57a1330 GIT binary patch literal 20782 zcmb@tbyQqkvo}Z}c<>;>-5nZfEWzE~9U7O$Ex{!?!QI^@cyM=@#@(IZ!}H$z-nnbO z`+aNHtm!|xYu73H)!wyFSMSpmrYJ9gf`pF*1qFp7B`K;51@&R;oqj}set*C6m}z|f z_yQKw1gqGagWZgr%%HxR+8djZO4%A&m?@hXnR+-5nejtG!32X;HNl#4vOp7iTV|tw zWSHG;9p1H}p!kK{9gIw@&A_C_W)>hj0rK<KPI6L^sQ|eKK#o<;LBz}wB<bm7rs65D zYT{{a!fQ${BuL8d4tzIYYX&wVb+@&#a|XH#kpIgr@SXmL%|cH4FA=b{0QrA_(v(vq z6|r|RBLy&XF`2NkaguWLGP41=xOur5N!j1WEUY{%?5s?zyg&d4kd>YEKVRhU-keO$ zfy$!d|LN;}BtUKn20H**Slry)nB6#-?VT)G*m!w)Sy<Uw*x8xhC77H&?7&9uOm@x` z|F$4%=4|2wasY$u?MVNzXk={f0u~^DNBSQj*gD9`{g+`o=l`6j_bFp>H*#QMV`gQs zwf!fqe@Q!omCgQd82_WRv#N)K8H=)+v%QOx$@_YkQ~X=`eeV9xj{XsRM*~!F0=+Ma zk&URmiHoh79au_Kfc*Umvnj|FXvWL-zQpg58nLo+GI8>n0hoBW0cK3RW*i(wJlvcB zE)KxI?fg&rY@FO2oLt{TMcKr}+1SK5zp;t&3bU~SxB;A89Go1Y|JIeVa|RpPnV9|C zH|X8>f9i_-A9aBuPG&}6dnZ+Udz*h}fuf~7*xuRF-hos^<X@{!N-Jk%0<!yuN%zk} z{YTuQW=<eiGgEOVdt1_f%`_17KcFz>Wn(o0m~b=kaBy%lakBHgQ^rO{OgyY6CY+q6 zoaRPsJmmkWZ~EV6@INy3o%0@v!@mIm&5TSqSdGj%nAnT}Tuf|i+&oOi?8fX&JODOM z9#&&>ZZkFjIm<glmVc7xza`VZS??M85BXnP<9+a7o6F4ZeMdRHZ=Eg=JXa_vIYBAW zZ>sLgC+$mdgi^Isg;slK7_rEW%Vm>K867KN?jiVb_>0XB*>$vR#lUC6@KH3yzoID$ zzXiO>>GBaCoalB|iCs0^7EnLOEGFriIJ$8Zl%{%#?qJ3q{umU7o}95%H7D=s?$JA4 zR006hD9KszKEd^<1=Z;ozEk2eZ~<M0tf^e@%skLPB%U0>r+1#^@;mvn5aplCoVNcD z$$+W)|AXXz8v2*b|5froUH;4F{~-AvF8}5Ie+%wEy#MdO{eKR_K`Qj)NA%*^&WF~$ zfs8lB?>ENMELCAAXB|ICi<dCtP!t1AF;s_4PH!ZFV?X@0mi9C4werCoPEzHXA25jN zSSTBVem!_jp^I!D=NrDy-O-Wem-vg4ovXGEHDo^5Dm~j>9aDzQ+C&})(>vZ68kXVF zo`wE-ur4^a=hG=%rw8L{FPuNWtkacj3W4qb{1<X}4_iQ`o=^`|io$G0#Xe93YM?O~ zE0@?nClu@4bGQlenI<l|ec4u9`ReABkbwB<px%@?gVz_lVOl|v%7b?hJw3*j%B73f z`O+luJ@UiVXEE<zAkprt;zoXp<<2KaA!MH$TH<X*h}eQM{VA7Eh!ch~P62<#_EqDp zo;j?vT!GAVt!_$=6o*lD3LA2enJbZG$z?p$O^!a{ADXZ&TmF0d4ss}L-Hd$jAZ>E0 zhXXb6HLW_%cW6|6UCEFyXEBj9&(*HdQ0!SdJ!=+^Dfv$P2$bw8et4{cY@g(4IG$~p zVV=f3St4z*Bb>v0{78(NQH(`ATm!Vg2ct%aB{8VvA6uY9uw1O%ACxtHUFM8AU(VnJ zdKD-El>YfaB?YUf^RzQx=wJ(nE}Ph{K0_gUwmE)7qyB8fP!p2u4=vpc;l&|17FJJS z605jYw%(hMi)2=2$-Ne2MigZ15Ld_i)w{1dMy?@PQ+70n*)GIAd*q)-PBQ}~9j>+q zKl=&$hMGW*fO&Y@N(=;dsY)4m(>b?A<cy>(9D=!VL!;ZL#xK!>7SeY4Q&mEx4$iG9 zBpCARgv~h;NpHnDNlw0;pTU4i-4uWV=!4cf@y&s0)Y|jxMbbr0s1q*ID&PK<-u)@B z@*}Y>*;Dc0N4*OE?5P_*qMJoXgx2_oVE<R=mfsQA2!~X{k8BsCAI@`1A$N&N*92y$ zyTqo=JSw#{KM(YN212+iSv@pcj`+eR_Wo#NF5umvKM-~cdHoHYYZ*|S%j0iNWS4Ex zr9Jk+8K;<k0-WytjaL-PsZKM?0?^6+wE~gEF>%1TwN`eHtlBFMdG5{)TRvu>c(4{d zKDp7bWOlLm%?Yilu`IYmQ*4bgrX*BBdMDn@YFz|g)BHFjTW7)wZHpemP5y4Yok0H9 zkgVo9{lxp~?aK0GxTpqY6-A(O)8Buwc7C1aXQ2CbiO&I{e4;d;(0}bQe}f5G`6z+V zky>u3XH%sQf$K0#+)c|HA{lma@_9Pfu94%oH*8?V3>99_dfwbVCF<5WP*xwJPq5~E z84m|d%<o^jvzBM^4-3995)g+rN$YXfQ&m=Q%xupC+TMHs%rqpZrrgvYhp(wIEm9w? zj9a|n7=xqFZC?)X?<z&w6=Dvf#O8Uq#zp{7Di7ulCuNVMH-gK?bdlCbo(J;MupQqO z35k7tY>&Amo5;`DqFvTe$gCQ9od0<9Jjm!J+T@2w_$}c-<LeR|g~}BoF-ESWD-Ov) zu?<t*ipNiE^8}_XWQ?fdYEAY`rWkq<;{<N5L5#||?cO*o)V8Xxag2Xjoe2EC*K5Bv z6ve-9e0nk`yKWCJ?Sc1Oecm~*aYH`FI0l7j_C-wIc&`y(A(s^yB*L@!7;F)zQrB=9 zghSVMOz<aSpOCy1SqB*KwjnB3#>D#5r3E>tzBZ?xSY%e=lu3H!tsAU7Hv}BxOHSED z7T8e}YpgypF<1cc{fLKQ<|Z)<3#qkjIc*O<my?dACN*oGocyFNm_W{*9E+P3rWgq< z{WOso#o3Kwi4nzZHx<>jf5j;g-Faf*XYd=RjI@l4iHr365~|U)HELZcJ}R0%j*kY) zw{aj-d@h4-ak@yDcSG$Hd`O;<y{#{yaJx2j$^AqAa@J3@tMrhFSO`4sF;vecZW_UP z2>J&YAj_K`F$#aC!I^tbDQZey`*p0aUXs|JsG>-iV);c*WZ}9VQw7}@;ptip)W0{N zppBC2W_?v57TdGDJp#2{f=~9#wPV&?&e>&U?tjtegpKdp!(#|vKbc66e(nrEw6{HO z9I*;dAtZ>!^0BFOQCm;)JHUTQw6QL>CZEUCFQpn3{c|9NS^9(8Wigf&cDSDh+=jw$ zUhI*xP1ny5dcB5W=HzNl6~&e68)9Kb5QxKvjVmWITCH54JJcSfjq_n{RZhMWG}8E* zl||sC(mu*IVpZR5bnm@Gnm2f-OLe#5V&Q2!!WGZaf=I1xUUC-Sh2a8uo|OFAkxuxA zW@2o-gkbSf4iDwd7V|{bM#OT4UhGF-WOnrRTP1sox2&T`U9LKcRLYNzZA|HsCAy(K zXM)uXxXT1+h|MHk{c_aQ4FMdlXAVPCpt2T1tLoZTZtP+6g#_i;0M>HP{D`)J4Sr5k zO%fQ&xU@AP5$_17*i&*fTx<cSc@3x9g^{QJ_;t^c<R%370fA=(6;zj=E{Th@(nhRU z{y`=XB@ZN$<UtpV7oVw4rzW#ebsU~W{mJYj7Qllz$BBWcfxS&0K=i9{7FCfG9FMS> zSbSdRu3$oV=-%*ii?y8lpbKtqMRBw|ZWO7@e)rD&V?J#WH5O5sO>8KFlCzzn{qUA- zbhCnxz;a%WD3vwj2O-%`xq&WF#FW$aw?notQ$n>I(QXxl{-GkliXwle>4X&SP88IR zO@<=$U7%Wm^8-^HZW={FzC{wSRF#XNigLm=mK>vgK072oQ*=qRtMD<nLqhjQkx~G$ zsEe~PR0C?pC``9{PDJtiOpD{DkL5zx9_cxun>9JPl)S+rsfI^Vl`ie1^iEsPhiLN$ zp+vbkfwOPgud&O6YvJ+z7pWCLlp8hcByt`de{EowF!cs2i{)*5Mv~P|o=RP$?VVt2 zlx!EV7mPhBkhrGiabpi5)bp=Rom`@4Ua?sMQHOI}arPJ@jQ>@-{GR?_%d!8d;t6Jm zRB0{;^P9A&+;NU)d`o+qzo7mh|I!|=H^z9Nj0BgzMNlF!s%v|LJ)FWa+|WOBzXRQL zI;*hnyZTvYVVa`M$BHk=GPy|GI|xxwXyEko7J=0Va5+02GgF;6HQy$`^E8!WqqSTG z@9hF{PgfMRSE;7T^$@Njo&KL!i#a*vk(QeVRmoq=kTULpcg(tyM7m$43D%xz6b2#< zf2oIp;hOZs&ol4Jcj}ih+Wg7LM;~zj%lA7)Ma(1Ejl2ANv*4$SsrpTTG#e26g|$tI zFjDUF0&Jc-?$>2JojY^nsVCW|l+!$X&3x_O_Y8WaPJbS9GB8{_&R)X3_Gy|laz66z zLmd~NIln3Arz%jloRlIG5bc@MwQ#JQUiI$!X(j-*pT#-m&A>m`X;I;5b@~9AM@rE* zT~LJWE{XQ+x3ABb*3g1m&W2YiJv9A>)?<zAIoj#8d^%=4V}CSL<chNJS}l_%qtv># zU1PtG%r*8lv#UuzmXub=QQ|a3BT$f`62kNHiPHtvq4`J>+7oBQzK3mg?T-sB&if|u zw|)bgY4Qt(9v*P3D=3hVLF;B$LJ*;)Q?Y6yy)n|)e|d>{y3VR@%{4jK6`yk=@V8QG zyS~f_adb=M-eoaQ&p00iZs<boELK;M=0+Bxs4)FlOu)`$ciBILsIoOI-ViY7WtdaA z7u^aV?%mBXA32xgRr!>}Ak421(1^L|^oZ?$!$+A87pF-)FhOsDn-SH>DOKzX&m zFVgV>5N-DT>8)Ny$U25I2Is-&e}{!5Q<C7K6T}Q!G$oZzf3}Q2^2B<PaOeScMKl!m z6JW~)q6<d^`W1l&Uv;Kkn)~@2-Ks&k{hf*}Qt|>2juNQrnNF{^+50e~{0om5c>IP> zElI+^r=#K1j@9u$c|WkZpSVG!yU=Mmj{1my)82pg{E&Nd*b5M-O_>h;DDXWg^j;aN zVms&x{OQr-0k|&mH^z{KH#=osZGRv82g*F(?>~vrcP%`QdDf@*2{N5Uz~AX_@qMn5 zUE5W_m#YVO9HMa$@r(XZ<8?^oCT)P+=@YI-8m<%8pKF(g!ngH&e|<Q$kLM-{Q3V}| zUKq(R*}}s~fqZFja*MT?T+w0avpp6Zq1esD6A}JJVaG==7XWkG_FBEuKQeCEHP^*$ zx;qyeuqYv<des`omUNL-TNd0k>&_BmWBCB;9bTJm4DaX&Xp)o3sTg}U@Ocdt5g*;K z?#m6ADXeM%9$Q+;#O9_CUS!)yLDTOG7u~jka0>}z^zEXoZ{s+MBei0zM$XROb7!|x zoRZui-|8Nl+Ab0vOO7ucUNGDr=z-&pYZ!mNs*_J7o<nGRynBVhe7o<?{mVc6Arzn+ zs@c86xv3~|eAJB=ASi#J&v2X4sQgZBP+C9D?6fW)U6LgX7B4yHO^u+f|6(Reo7*@W zH5D!JiBxr2ulsr?yjjFNks{kpU@|$4{Xp#1K9cGV--*1FIi)lL%j)hRxCa7-_BZ%g z8yna!{a3_X89{%i8w-QtBJ*YrhH$QW^C3hnv>`<IfZBL>+@%eaS%Gw+h48!tqg?ER z@ynqmO8%r2l{}DrqKP^fy_V5hW;)AL-$di)7;jO!K%B3HPLa{Hftg0kK3)Un97d^9 z`Fjf&VQk}+jq-GPLKT@}#_m>%<c!rkA-{n2;9r=X!I_4nr<lOO+#mQr+hXm|XesOx z+FZ^f6Y|Y6CjP2`hH?lI3En)`uu~xYb|3i#qls^vJY>`}T7PRKAlbsZD#>n?DXnw5 z)McOQ<u450jvPl{=&^MR^%$Z@Tk?I1?Di|O^A9XrNl0SZ;BlR6QHfQHABpd?3Ztj$ zubA77E}uod?~DtT?V@Vgg}dsw)njX&@Io(iEE+adztD8X=XOgg`WC*<bP52iTxk5_ zU`p%F#$-e0A$pexw)!!z0<-oRmNR=acH_2Hz$gVCDO{ZTc=lEvZvu@&Hnx{h+J$T@ z`cpyH6k}DQ!#!8JV8}o;-Q+_3kL1z7t#dB!1@!BU<87)y;*aj(ZNC+jJ0YWNjnPm` ziK6Kz2yPoi-UN@Z*6pddrRnQbTrI%P->H)d1jf4_{na8{10I?DwB{$>uv24eW`}jv z(y_!IGENpx6nmC5;Mil>>(R5aQ6}U)n&Ngw_-D7uv%}<|Z%t2!DZF{xAX?ir;Y>3{ z1*@bw8jQMfG#7EI2f@kjxJ;W8x;L8OGes=TUk$@jc*4(IE?UxPu)I^zH6Ir|=C8vg zQgHR7n1Nf^l-B}Us2QzKq586xilIG2n5;4t(?EIT4nyDGZOqQ)A0!3=X;*Di74|YI z8rl<X(2xxKi;eG(Fj|cl#uY9K!=D`$ceeT|{@x)!PfeKCpLcZiz>LBh<1;seirN~r zPFf2+ku0(fm^?npJnnEoJQb*P2c1YX`2MzY0mekx6A^dVZRuBAUKj`yC3}<hI{!Ym z1}@~o;Oht-!=Fx~PU{N}+xMT{&=<*hefN4#!g#07C~=4oTPMAh&RKAkM-;JW)8@4N zr?3i{&x2T#(jD?xfIT6`>&7V}w_5|b1WWi`^yqM7p2gq#b%~<dIS&>DxYK_)vA!Q` z7<H!W!nEC?y*YfI11Z#?fpPi#efi;KX@+{eFcP<?HVt8{=6QJbHjVR3)@OWcyf@+u zXeT1-cMW((kxbcwRPAjB*^4`!FGzfwh;kN|Y{OFWY;OFX^BQgXl(h{>hD_%ccVc_A z_He6n&)la!G`N)FCWV(8rP!0k3r26YVrA=QC@2q>C}v3>6y5KH1}}Ct4=qz|7f|6A zgwZQ$fY^VlRa*^ZeTr_RA4b;RRu9s!=3C6GJ<;o=vd<$6UUUg=m=H0TLsLsR?fCRU zp%2Sd1;GQYN`u5#uXJrLa=%4?5xDVG)7$lGjaLvPszZP>FgYdl^5M+Dbni${;8T3V zeHnvs{T9n^iuhFzq)Oo>FGi#Xb6?Et7QB7j{yO3HFl9s2EZ`rA3bb>)s9u4JK6>n$ zI(Q^~5@X}B(KHtXI{Cg<JKcbtf4rgUY>))~y|8pIGkB&vCo#@-sv5$|xcAgEwlL@W zV?UDmYt4^Na0h5z&1w|H>i+i9`LNKL+ny8|F%2N*_4zY&)YQ1SM)ddbIN<I6tx~8t zgNP`<-CaU1grDDH;c2!;M=K1GyQ-&YJ<82M*7rH@xM?jUKx9X(AabpH6?a4&r+=ZH zFn{kaKH5{?{_X(D=KAxoaHwKS1(KV`g4S&ey7`O*5D>`kc_Y?|`+PfL*ha&LWP^}1 zo!t|c(X3L3RFozZ_;9zgl(gO6b1d`-yPKwo;_~W>G7NNao844ss$8Va@@?G}&w73o z3NVfs)-&}POB(hB#v`b><rEAL*eeh}*D=zBTH7#Y1};V3U-Y28;cQTIG_HNrrGp1A zKg4I<ietZ_m$st`JuoCxq>?qPhVEZ{U^1^w7igq^6>3<uzG=Iwz<(N=@0vofu&Z++ ziR|ckw)g7$A)jXBv9>!MnJ@RpBFC3Cv)bo8QsSQNxfYMGx?I!}v$NNKQqORBqLoJH zJKE8OA-Fel{q^@_=0%m)OOFas!h{@EIB1}Gleh)dw}_bpmB#xU%fL4D>O{nr;wLUo z2yE_n*T;wCrtidRw`WtE6Y%ZSrp<*F*Tu?Y6WjN0_c2^{Z<IodGjfxa+bVH2wV1Yg z147S!+cXNAi7gTe!5*D&OVJT|?bIx#ps;Y<xhX46?^wHSd~ZLRlMdR4$g_36gL`hl z=Rb8lUW_!j6I$9TJG7_GMLmXT{3mX6QwNsU%MIWkGejm!m&YxYaD(28-!d)31g^c` z4g(0%nj9P=O2dN9ulB}*XkXZ`Lmm=L<T`096*6B+_<>G7JnnzT?kxP!UhcEC$>I{b zRp<)1ksrigPDX|tqFL@Qp8S@c56-JQ<+gp6w!u`v+GF{7Zha&bO>DkbAw$<w^O4X- z86ka3VOvy={GUYrCLQZ^ZarZdYT$}5OuascHJs61WAF7$k(6G=bXFYstr0&XQPMh) zPRV@X$)EFayx2*uw%kRIhLYG`R}k+xP7_FJ{i3S4#~@Zzr;%g9lfpAJZu;6r_<~68 zY%s^8&hS;(E?VUF)Isuyv2NG{n5g)=eo;NtOY6Cr(DyB`E>Zrq4r};4gyQ1l$DsLe zot5x`ZwfB9>k7*y9t;meccTyYe15KdO4F3WfaP(3;x28&!b4w%h($L{C)U0j(z2HF z$s?yULuLkdp>KBiKtHL~W`C3R_v5}0!Oww~+a;Iu;^=ZTw+=*wEY=ii7m@o;lDdW~ zXvL`8r~2Ydw^O-2<sQ{!-10n{XyPa$oLGAEA5|Ur{l71}BsxmLMQgmte4v_>wq$E= zLCsa13&=wJKs5Dtj~$vN+FHtrzueS%CNn=!q+wuzE=#Hc=9w&~2b%_PB(Du5tKSum zb_)>Kb<%mi4?O$dG&si>`O)9&8<K7ICeL&QOf(6aOUw1Rrs|yP#UV(m3q4uYzm*U6 zS!{;5+#DznWW8iCRLX3mHE^;BE&`JOMCa3HJ%gO8k3F9q0UqW)R;lFCc(tQ**o2X< zzvtc>+!nwv<tr}3TNG(;&tD*xS4l0v;XsWX)M}yEo`%SEs8wMpsOwZi%^q^9pBBCh zn0B0x&c*#6o3x@gc7)Ud5IFaY8c@RDl9qaAFE--0p$DccSeJQVT&E58)w)6mR*j3} zt5$Pur(%1$tl-2IiVb=9H}|*_pnmU<_uu92V9G09Es>^K4E;}Nor`Pqls|d0_B>FV z!YSh*pE{rrtpqLf`>8M4uc&rkFWpr=g*IqL6{NW6OSWG=3wm(P+ECysKZxsQwT~Q; zP3gU|uuwg0XRynLGulIU=oK{Yn^pZ($Rdgrx5mHy^eR}TN0Eg+8n{S3p=<d?(myGw zT}p~2Gdkswf-a?${Pi(yv#Sd#C|fCOTXksi;Ys{62U<L4ra)Hq8A(}7I_wwP-v{t| zkeQ#g5AAp^^^~m<=K~j)xGUU((<pT20z(T^C>Tu#0em5|^L~=tOo6ORew&`keH<<I z4+J3!Z~VV6eHW6;<JmYB!ix6YdDhmMoaAt#T4I&EE;exqn$`wLv%YT05phUq<@H`! zf~(gVbOBQ~v|3v8=1n{9W<(dCOa!`qI<r1*@9jx+2N118@8U@ERHhQDZc}6d&{!s_ zD?vQZ*M=ARvWTgVczhly&$HBX)#Z1{Xlmc3&X%|jJG<o$<Y!Ke`T0yZ3{2DoWXu!W z@$OPbS1WOoZXA;%uK6T+iN{ZaJQW({luKl_@uO4S0`@x`I23}W`!&?t49N=+P`0-n zB_7)rMV*nXm^<Q!%d`D3j_MWiJYXRvp>6m%cIQ~c6BhbO$SI>Nhv2sxt@I!rApGCL zF9QQkc@G`@UO1M0lSbj9;+ua!K52;xBtkir%>mBlF^t0nq_ya{5rtf#-3FDI!o3M` zLVhh0mCI5wRO%AZ%!>G6!8L#zd`9VYIm+-L<fjt#hoGJ!3(=WGI6vVh2KgC^bo+Bq z3sx?X2#@>EvDJg08=NMr)?D|9^WL+FIaML{+4EzFXyx<7l6MNayFSx!K2CU+jk3db z&Y@^UNY&Q~f2aXWRPwvu>?DCHm#K3%#%@p=DR(1LTC&!a>8<>mTP)+x5D*W#Le<xO zn=8iOlZT);vCU?A0<0Sm!t);31^+58YCW5IS5KCct7Xs!A?UVpdMsoX73q8ot6p+3 z&P4YVgj2*n)NvIo#R@6kfUzeEbP)x1NxCA^L&5np3iH7;=rY<BaSM{T-k&&W7B8>P z&%?s@)d3S6`)1n4dqQxT6e>{=#9n}ort1UF^3u}zhIxfohfDFXORRGA;sX)Od0vGl z+W5;uP!`T+P+GTcOnJ$+OJmRLcW!kqjRw5J4kiFqWFpRR(KfvI-UwMn+qV{g9JrLF zr?zV*tmW<iCo@OF@@POgqzF(jQaHKA?pTY%A%OEWFUlFA$nM-D3o)(XoO}lC`O$F< zC-KFwuB~U}P<T3a!v$l>BP%{?A;6pBM-uCX*q~dGl|Tk2okA;Lk`F~1cMjHo?u60{ zD-(I3Gj^bSaedt}E=xN+xMlIh|BlA?&U&B!k>hv9fy>gd6H-pWOse^D*EFB!mH~^A zS&L^uQYiCCO{cDpXUiGWi(%v6z4oEyH6nx4T_HlBjW83weGeMCRki{oUDLst>X-V; zA&-~ri}L30$d%h$l>^={dCgl{Ni!Ii@Q!bn#=Vy?vdLu<GodsUPI~2D%_>fnb2P7p z(dTi3gS!>+_LFm!3NDi%ZfmKpKcg_317j4_dvmvADRZ|wJH72D%lig%X+&*l;_OsD zSr8e@yNYSKoxm*g1Hg0&-Vkb!Amo&-2do?EL0j#P9bF&!mY)JWP3hhmH6`l3@_ajb zy_uH!zqZ&loL@(`;wqLCVnr=n9@B26dOZ3faed8a*k5e@g}V3<yhHqnZ&C-1+6mu= z$#}b)N}R4?hmu;Juha}a6}zAmLBy87voIO0G)hZ3F<SIV%Uht60`@o3GRh8{ko%*Z z<85A(#s}rH?Y>3t;p$<@DzNke<N{^3Q^m6Kkm0A=VC2q&Q^mbGG&W_L&7X~uO^r;Q zBCX=ag(iLa{oP7Pe8&W)4$HNKc2^(x+WCJN(;JmY9qRgyTHRr$Mkg}9jDnA@v*r(H zcjnyghRv-WG5v`>QT<Z+oXcf!D!Ty|^@>?*QxTCK&#QyG#US{9p40yB{(p0FXpc0X z!d>xjE9c*&J|s|=I|3V=qHtgXXNhk!9>-Q=t0EQQCC+>p^G*9@%>y?L$-K^wuXFhu zhi|EL3K9xmiTwFWKyC>(oRJP4<FC6@Fs_4ZCSC&<Wd%2&wW4YJgS4DlG`KvRNADQ~ z8d;yD7FU_Ec5uDGOIw|$E~%d>k{ru+cZj~u1Ep{uIF*d$&{b^tZ0T-jQOMSJNf#j( zG$P~6PHbS*S0L02@ffK{hb7+Q=YbB7@Az{%VwM@Lq~T3(7SwrooXU|}?~1NGWf11V zA+y5DFDK*J%tn;}GI{ICD#ULs>w&>GsnaU;-Cm@GBiQ!DNK(%3;nPgQS?Vea4u?un zDte83zdxqIXDrJ{iLBn7HB58*ePuEITtA0?Ev-tSUBcl=f47)kb!BU^IE&dLV21q* ze%Cy6y?r+yhD>c<h3W!mwQp6im|_0siv%Jrzd6l|X#OY@TCzm(P7g3i`Kg3W;dGMX zbFt|Bp>HmZuf()EakmP1?dD99VG>6~!nS66t|7dBxE7yP?N?HVhp1fN131asixZhI z!J4-wJs*zhREs}d$Pr>hIE|BQ<oP9^Br$alisnZ2z8@-i*^NqD4!8WY?QfUS<e9Nk zlFH#!!Ko~!#P;gpv3hep)kq1O5`z)~Zp=mQQ}$T&Am1TokpN@6thOxfYNBMc6;5q^ z`7}uXV9k0+wFXgp{|6vHEPz-#NqG8BAOYxXct74^b3MDLDm#*K=WHcygT?hRF<io} zSZa0tsqj$47t@49uS1w&r=jd{wrVNj{Tr%;DRiFnTrfk~Ig(RssaNGXYI2Q1U+y79 zo<O$Oj2peEk92<mt^p#P*1u!(^GpBi?_3PLy1JH;dTFbNSp4<F)bRv-6@x$ZzJs2m zkO;}vN+zq|KnoUlVQ+5^6$sJkIEpPvYlA?g)^?+0i3)6`Yo$iQfNt|ZYU=A!!!k&I z3}(y{wr{45a!@$;^8#2x$6YxVr|ghE1&7Tb;!9{WIm9Gqy|z3qhrglR1o`V;-m*28 zq^(z6LPLB5p>ivIj+$c$IPs&lWrHn)XlmxpOq9+T;$AVN+JE*gNjy6;voPW?K2dy* zWjC5Bc-KKa^V?swRpAD0wUZAmcZ2ayIx<;QUr4PCEHaVoY>)h_Seg8lkbA`UwJ+D^ zY@}@C@Fj{0JU-<d!u@%RJy!6QIZ;Ng)H0*WL|4mFJn>*#Gv3{+wmu1>4VSIryx2Fv zS1XM3wbD}yTSWBK3!MXn^5?Pdcu-wSic(4Lv+M08-u+2#t#2NpXF;6Kpy8!lu0TLu zM~E*Z?i#ZCX#vWt*QY1qjsW_pqZAFQhE8`@(~`Q>={PZe!PQbqSV=CuAKv)FWlLt6 zF>+Kcids5nj;kjw|0?ek%b+@k2C_q{p%*d=ugq>NL6sp{Jfx448)1(<O12BFECK(B z;-^^<Xy@t{zfjiRehG7ovjrET?HwT4a>5ZD;Y7p;DyHZ+xwZ5U;v(ByXeVH;EAgq9 zu_fH@gf9*DqJeFBkC^qft*Fp527sj#EB$DC8?fr36HP{4YW(03W<|P+z#!D>L#w6^ znAxa(RXMqJe5Ed7On~&8)rsi~+pXR&L(y4tlcP@@GlAMR3v?Mnn0Rw_r^HH|16jN% zgi;RmNRHeAX!?FO+7z{2-!QH-5!9+CinrtC<>U&!*iQ`ri@j)$Tli6_Rf;Z6Ps3&P z3e1o&_k2EKO$Ui~6WPSK^M~IIwYcCLcK!0F%<X~R;SI!B9^?bC(z7e7$U*DS<{oDl zrex)njm!oT&o8^>YjO8}cki~4WMp+d(%%z?Av|QRj>M((6-gwAwD9A2D)_9xhWV{c z?TFr*9>uG*aFv>n!92=y`gj)wat_9q5wOAG5jy{-?PFM_zX#)l%66m%mU~w^9v|W$ z#{(GT`B{`hCb^a{8zmzne)07Y#oXO8GSyP59?k-rc*g%wn2(`sn)O)37Wp%m@>dw| zxp)=?U)yT7)yeLL?FLCR{A^c+4exF_;ToJlOvV?#ejdDy!kP6jH^lPX^E!aB(f~D2 z@P}pG)LBq{9pjL7L<VZ;P4Y`U?eN1@gkXD|`j4)AzvzUPCe`OnihuBGy}VQz%&@6& z@f&qgFh)#EySb#POt{szv&ag81Pn|VC!RSjYakMJhYs=X7zsUm?l%cb|4Zl@rGK_H zla%06wqNq$clMi$qB?jR=za4+Hn3zj7f!(a0XmDnfZTqytg=RRDmu2(c1Gg7N9iYQ zqmK8nk<~BN;u@(}Qky-NE`gBb3?$`@yh4fs6oH}-V6I-YKar{`S9~|$God@6jt-q7 zWYiv(tnhb(_)okTJ#VZ$#J)iBQ}Ucxsi`!SVns9E;&d~4aN=F^2vwTCSrtj~0oh~@ zHGb9@Y~<m(vy!V<)n<qFhte%OjpG<B116ymM#9i4dm2#ildhZ_|8{TZ>1`Ob3)P{( zGWlK6iDMf-{{`xj{E1;v3q&^6@_xp=8%QoA$8>Cmju(HwWNSaY$$C0nt|FUPM!4hM zu!fi-*oG!S(Q$HC19TipFIR%fS_{@kqoGh{$DUqqMx!9+(iqTxt{nH0;U^L7VA`r6 zzAQQ~X>Z0RN@#!+07D>n8=DBO#6w3aH5(PJg5<vp$#F0Gn9J(^4oR@$3wK6`w1VGq zK4Qag<pi6<ma&vN#a#;ejc>&YK71E9*|S^}@|TD<rK%9nYs+y@<0Z|x&z9e=vv{7} zd_e=T_jY~P?+6TuCc9Uhe~gU*-m`8TYR%N)GG1T4=rC8dO4QASwgeVv)|_MTLqp{C zjF6S`q1B{+M2iab-y@i2g<SA<sU*NU2+O@)oprgS&`$Ka<q&+NLVs#|W@f=}@FG8G zwuuLbHT+dmt26vP(6T>d{dFnvXC$zb{-yE2t|?C|6|PJv5#;0U4#k4H$YKl=-z;By zH$3c~i5odHJl2x*iH}9}+3wCn%cSai2+P(rS$sp8$v`_vZXvMJPU55uyt5tYPvm!G zadAO)MjSU$T$y$n+mZ(nhd6APwP$P_29W5_qQ@DeL68b|+V*OeecHC~T<MNg)LiuS zOTsc_ByZRB9)~8#&cifxZ{E)cd3X$?`fF!V3cf?U7EQ1%_r0DkC;Ggqx_wz%$Jc^H zI<*}<BRytR&3N0~rPh5a(t4McBA1!7rBj1q7lsG!H=kOoYko{*O*O4sf9xwd$O^<X z=BW}}k`<qz=e}}!u!KKb3+aN&>I~#tr!#rzr#VBvv#gb!&h08=J>}2NXk8?joEiB0 zB5>>K&>`=&uhWJ0i{v=q$-%E^#{-oic|>?NjNL>&SN5E~b=Nrs7WXxP?qk{7Z_Qhu z?hr;2a(>d^SzPjTK_X&J#tWBpu(6x^y)?2J2+^Su)cm*A#qDDe!Qn@~hg`(cdG;RP zZv-|?!eIeh>J6+_I;!CIENO3o3a1+o$?Z^-*Oe;yjsE?tH6$}0U8F+6sf*-ABlRsT z-a5pdq(8}P@&4w8!t+YGj#NaKeLTgF(j6xUmEDWow+ioE@H=kEq(s{_9&u;PNmM-| z{!%2b?-$&M9wh#Fw=R2<$u(x2D0RS_m`*56%Dv!PE3!h?KzWSIDu#T~IqaL^GHfWn zV@>5Mw?VbcC<BA<HK1DXMr^s_ZiX2imvjEkx|>h}>+wt``De+($|o|jnexFV$lT4B z3>th?MsfIyXOO+gj0di1L=UJ|_I`Y;?O?XnF{)3FP=2FJfG2fweqOsbKcDmV(U-G3 z!;3XN@YHrG?sK;unGo0xH|lLTf+uwc?ObCUlbbtz!DhCYuLCkelgbEx?lVPldVYJ? zxIK1{zS{Em(UKmH;nwFn#Mh5+J_W7>BAqB|B}o@L>TEe^T2V5fb8U2?mewsQWrTzK zT%d?d{6W`XsEX$WK{FYx^wK%nJ7ZzC%!Q6IQZt9gj)-MuZbnyEzxlr3E@`XbbWPVB z;#ji^3p)`EJd<|-9}KYRw-$DHK0Qm@XEZTkz<c(wh;#b46%I96`!WYJt^Al}Q(>UW zvN_ya$#ZN|G9fEbJic6ZairRR|9{tR4~A}QBUuN=v5SOW9&sF_e8UWQf!~d6Rw3(e z?uCoM(%QHSA1SfL;JC`~#qO3UG?IlZpX3K`OyNC9IPoR@CnxCl$6Pl40%4*EQ7;X~ z*{wNrHiIUSwpq%?&OK5UJAS`po0=Dn<~!0lUsD)5w7J#N3(qFj1J`ZsI<E9(p@f2e z(}ChyMWv)8oWf1}^jB&CmbXGCsFnUH-VUedZNr0Dk&X+eJ7HCZA2@`n;@V-`JMIjl z3WYgA21Is6=9?p;pTE$vsrpTGsyj08S88$Qqq0KdSHm+o!M#Y|&txQ{bq`h|0UpXF z&*%D=_^Ou1w7KtN7glO2f<KF-SjOqHh@(8Zkz{Ci`v}+Skxns7-EGu7P=9Kprs~7X zD0~tdgVNgN>H)*SH)AvFJP4MX{gSait+}OI9_bBk06G(odm3=Pgrd(c6*)CZ#E)76 z!lVc8J5p^rn!(WNw`<=t9R&f0x9;Uj5a1v2FWj6_-3j$%)-rmz6PCY5Zk!_pmj@s_ zcbk_8D@fK~(|QI7PdT{+OakU?Negb+*^8+(N8fBugt6GI_W34$(vLVzq6qJs^znCl zqUd4l<Kq>5j+qO@pwj9ZDO;diZQEQ>GiS(%DNZf_+<p#lWZVxbnOM5gyQt^n!1nH^ z*WhMaWN?l9xEpbsTv1qzbthTdMW3}x6-jjCqXA%|kyC6$r-De}s0~qxc%0Sxp(~5K z=2LHM7MmP3xldK1UR^%n*G%kw&OrXHoa~EY<%z$XbdbkryK|h)Py@%n7sbNOY{F5s zgy)eF&r&PPMLwTERuw0u9K=4Bx(my3pi^#md99J(#8%p8&0m%{D<2jh!@~|dZ;euj zbEPbDH?yvzcfLy{<a@JTktwF?WV-i+n=u(44JhsAKQ30@rF6@&mgHehhbTu*nHiJU zIahwxE)nyHJ(|5$|4ns+Tau8#>*J~v%Jp?18@^9@Cyp}gxX?EoJj=G{+nnC%Ud=2$ zsf}5G%rm_DRV)9DzPQL9BLAG+F}LHYp++{+Mtp)E>{NMeyi2YQ*nveJ1n!#DIB)uN zFt^Sz^@bn)=-;Oo(9&*Lp@)El)>}vys7*6eIrv0mU!0<6mgks3o-;sC4PeC%R2)Go zPfW@xt;jtP)MBHPP%!GyID`0A$P(J93E3Z`{|9Aq#PROzt)_j}w;H!1nrFp5ALbAb zzU%cv{s!t=w*3RSL#rT_HTET{pF1v{qD?;Ra%Ot*nK;e8(;?LKl&q7zt&wWN4vR6$ zrMA=6`!^8)f$Akor`e^7sS;B98mhdnQ^$<c^^a<VV|eshaRo8oEB$<ZG?sCia{e@q zC<8*Ui=Mj`NyqOibX|7v{gYyK%LCTJUH!(Y9N{!#o%D2fd@Xp(9S|=64(rhv^-io0 z!HHm<h7FNvO6hOVJuNuzGpsG%mVg9k$kvLfN#Px3Z+ayqe2t?R$Z#G({^qxjb>yw5 zj%VWw(Y6a_HtI>5q8iP~E}i2gq`ZYcZy4)>g*a<~&C`(c+RX6FZxw};1s%NP0mo@~ z*8q1yJ`u)znGn5<8TZxIx^08>#A%H(S_=BCBXir*j4k}8`fVT7F{8`Gb5aZdsCNA1 z>;3R1C^BXk<&(=^9U|xgzQ*}tf0TjuvIh@8SdS@loFyrLhcRLX>0|e_osYQ=s9c^$ z&DGN&@{g%h=4o0>GZnJFnS?CIyuXZ+%#=u^8flw4K%fGaCR%;`CiKLp&?&)<n3f2B zDw&dj26tf@1{kEgebOAda5i7+seB8U3M;N|iB7B-CEl;vE~?@Q1Ix0XyzuKtU&TqP zZ`G@$B|bgln2|6&uGU(lA81>xPeN2w%L<~X(dQeHKsfDj8zRe}i!!NC+bgM69)?P= zXV>Jb|C0j$`)6!g$yaC7IhQ3F`RJB%?Rk2u4}d0SZuC;%PD+-PYSKx?N~E1W&&y&h zx-`^BdE5`$8J3vvs%(4XYAsqR?dGY8K1q0OBk}tQmabG52EUTalVvX?i{y*iOFgZs zn3|*MmtFME>?Vu2Z|ajJLXTK1nB?FQv~*UoDWa_g$HZLv>y!s{(;8+@_%r9%4O`21 z8HE?Pd0gwYEs!g23FTFO(+3>Rb5;Njrs8DcrD$?Ve-(|Xx0HECrA*IrGHe`7>>Og# zUX1cgKl;ny$1WHfNj(Yc99M7m%G4RRXoR2oH&m(>M5$2|=zIM9weT17a$@JgP<L0v zI+l?MmggL`-<3(!N?z%4+!4)5rD$jIr@J1a$G^_K_%-iw{;Q4Q|A&@?|K6N{C--(y zT<=u@&WwFioi?pI5e%=F57J)A<jM%LB8p438#r`3n(epMI(0q06ZuU0QkdHetnf3C znd!?O+c+{*I4>pVY%GWd7Owd@f{_2X?~#0=x#Gx@ggo^N3ws7AuTV*)kv?REza`W= zq>K6WZh@2wkQ19iseb&b_Y>39`R)>MItxqE9)Q@azv2{F?7Xh0^^L82P|8A50q_GY zbZM1U6wuNL_}mYR#&Zjt3jW-+>D|hHO3h3pepD`gA!ya9XFqX)<e&XB!2|EZ-S7c2 zO}mf!K{$Cu!7+ZFEO05du{cLFCj!rNgU%|RClFCsJzzpT9oiUt%VXY*40s^SaV~NV zn7S#L1}AU@PuEl%(`||<v}itH6XJq$<SNy%+>Ce0T*}oSg9}ehkLEt_r7C88Wm2K0 z?#Oh3jb96Abz~n3x)&h@agKIQHW#IDhU9_{S$Lch*iPBfT6T~<PLbyOl%js!Bw}q3 z*M9*Q=w0UD+fu8>$Xp8-6PeQ5l1KB~xMqIHAG=&t3X}uEE#1I0SXgrUnEkOTpv@UA zgMLBR{m>A?*c;{snf)k@Jcd`}Fs)OEq@+C;D;Xz^jaCOrOl@w+P^yC+can_s_?4#@ z1LrcmGj_dRo~2tMN&<b;rU*7G-49>J{`MnYQh+8lkgY}kyEL)qfO+1u{PI)bHzOPv zKGUu`WU2~+y5YIlYTTuUEo=h1h%J2=0s~2WX$@>+z3B?I;87FQy@D@t249}Hr|hu= z#IJ07CT4Hjk9{&5kNQe7r89<CNH*!(8%)y=S(F$G3yhfFUWDwQQLE{VlzS^0xB>v> zOEMJusJ>4tv;2Uindzw8`i-KaurUC=JW;jIkj$e{@2tKqV^bPr*t&#G<<;vr%a`Vy z^k|iM^Qbzl$^4{CAGH|^?sL@?1HnAQqqp43G4YM-vBg4N+AlDH5Enp=VkBQ@_@0OA z;DN-vynv2XLgbePaRAn)y~0K5G+0e(;yQk9-Q`8_qj0H|u{Fd}HKCSqY8gtekwNol znDlZ3-5&Bi5An$?3LSr||LjUwr@oFPxvmE;FN3dr!j2Ez_)H*YK<3TeaSfgMX8U#? z?O@QP>~0P#!E4mSiR8<4^wwzTT-0*!{`bWE?Qz0Wh@?vrh6otH7kEcbR6c`JM3_OD z4AT^}k`?{t9%0w5J{}R4L{w0IWA-6PpqC*Oc+ESDJ$Z2NHwrKInz!O!jmA7sz;FX{ zcNxl!w?)M`&=M!`z3R)D+U#mrX}avWckug|Qu*?k$kkj!7(OSMF<`C#uh2`!qrqDh z+H30@oa3j-rjYl1Qma1YJ||gwTU&q8crYOPL$=b=`=c-Hq%o+N;OsYI+I@HXK%Pap zgDZ{K{biRzIEjYpoT5o<WU?^XZ+Al3PHL7IbPc$UKU+#KmONj4xPBAm(CcxLE``(M zoQdM=bA#hGKA+w7PX)lQ=&USBko@WTfpo<DhwIOWgY=?E@8=}@vYr6Kjg8mw?DYwu zzffq=lxA2|7Z6_60c!Od!$|_)moduzw5BQxe)Yk&f>(Sw1H`KOrCk&4LW{g2*~v~u zUku6{j1oizx4c8ao%K04S8=rX`Q0pmF9OEHZ=g#RDOdAYW;##C#jwQKG6(nGgT5t{ zQ09OWI~NO!tFPWFhI+e1b6=ZvsEGP5V7iJzYt9ZX1AxzWX}09|hcudrGY5-eiJGnj z>1RNWP7X8;zsJ&5ud_bk-gCaky)<j|mjRM3%Hh%t=7ekhiQV$Tse!BOs?q>Gsm~dq zX}B4-r0<ZK=JJA1A$3E@Qr1lTfuRhNs*RUOnPpM(7{XJ#yn=*6jC!YS(hO3GQRInf zlG`bi5F6x6u+(xWG(UmBO#4f7QgUd=mbn<cea+GqLkw!i)7kQ-ku0H<^F*wnl&sb% zS*hFpK;D$8pTe)8WVkm*tiq1E2ESrDf~ju<G2xOoHtb)b?(aF|2vLGAoN@9l>!)t8 zg_kKbeqb2<apo09HxdMT8#ywYuu1UQjHl9J%jiDv3iM@%x%0?9WK($%13#o0{7LZM zx_K+&*N%H;pg1WD6^~ZlKCjlo{(3t@Q})}(N{N}uu{a4=<tm!m*YtB4je-hLGFy%M zJB2jge(VB{)FGCdow^yP&o5yTkO_-;)%CY6j1#j)%B8MlmCF25Q-MMMo!!o;wtf_k zE&2)iI(kHw2(JsV(H*sfnnFT>tXL4CkC_s$EPaY(H-?RBES1$g{9gVtl;?nfqT*!? zBMOz#nq040{HVu6tY&1=*e`iTCiAMQ`I;wBRdz(@_uDzP@(liL{HdMML~vfoC67ff zVl_X6F1Cs~f|F(P;ft7LQEcw~@%MQ)y#$)HVb5M_r#NP`fHQ{1S(}n;4PyN!!C5RT zXcDLS=<MSj84S+wgxbCK$}>7WW-BZB(r3BW@y{anE;{l&)M`Xj5f0P)Zr@}`*i$>S zt$>QTO0!|v{%+C(;8YP@xgybWyQl^%nkKEum^HHYuB%@?1;<iSWPvlg&_;=5!Z?{7 z%ip3kc@J{Z$yEUrdmHGRJ9li%+?C1dR=mTDjJGAMl9qa9cL(tuhm6{dx?d;W;t(tV zQ-e53*eR9)Uvbj7Qah9<L98>~3FEF~u>Ov|I2j&yrbhyW;Zg^jL7w!HDi4u68q}V8 zzzpzGHXVd}9iOgK3895*U}7vUS(QFMG(j46lwh8B6JV2cG=F!)6Y-HMz107+q>>yH z*-1oiLbTS}%`+L`SxzasCAs<i{!g|4*#~RaL50aXmlc`_cUEQ&i7Uju=!{-GT};Vb zCmyU%8NB@R#@SvI_Cwada^@hs><}E&>Ekc2N12+Z)Rvruqf)~h0|~38!^WUeP}wHM zSCFYMTbaY<3*>pzkw@MO{~@KTgOq2EI?}>en<*fgcgTQsBl)1nRM*J0D)5+wiq_qB zHAhA?_W4u8KH7n?XOR+5>Tr@UaRM}hy5%DZI+Qj?ncmf*Y5B1~4wu?08|XXOn_tP< zy4hWwaXZ(1B^-^$tX%4J#;l*C>bK+y(?6}F|GmBPe`-tkryz58(G=WnS!k!$z)y{5 zSazutSckyU-L{k*Weu|eicr{G(q!PVW@@THakn5v9qcMz8j;h3!_I6PV&iKxb+YqP z|5S31;*zUkz18pXT;+Wn9YDZ1BNM)P@Rt?1uc@+G;cSJTACU*NZdhyq&?Vvlo{3XK zvABFpcJDPowwgsM#cGLFoU-*o&yurC>`w0|fSGJsEuk_QS;p7AYk4widHWP!;4cKn z<%n639E}h1_CXoaYzMlPiW4TERSth3mKgMbE<TlH1?(U<Qw*D$m!mUm8=)Knv#a2S zaGidOu{)LF9&12mY(1<%<t&OE=0`JprBZpCm(3P!FAk|21p8dC8t;XAj9-4y1Jbli znOw76Kj+D1Lubee3D47YK+^cWUsJ^mexQB-a7*c`;vA7UvwJ9{Y^Xf}M@<!_4UeWQ zcXJ0emR-&8b(`XeKn$9`6wd(-(%q4^JWgh2mmHSuq#M&8tQ60HHF1njv^n#P6sg=x zs-onU4!Ov4jqxX(zwWQD6iQ)<0naeGrG;E*8h{=e*nn@SnsG5Uac$46L|sF}GW$VP zsmuF|pB-h5s&~>FA}Izj8X~zUn7K;p+K1-tWz4a6@rhbiGvB)s)szLKHi1mWIQwOZ zdOzRxtQUJtPvpo{OX7>v-0~Z6>ema;2tFd`h0b<(l;(z%R0YE)amLG6)Q97JGcfvl z$PC?>s&Qf{$mK(3K|Ai-RI<90`ih-@X;-t9Eo1`=U}~C~0rr*HTIqaZY@aC`9sB*W zuqrWgzA$@ua(a-~*d}jqe;5<kfw(hEW5#g5j6i2)R-diQFgK8DY=M!KI0QmI0mbrT z$WLc*!bz`ztV||DNjM8Tx<@*}fr?3`OdOg1Mzc%6q7ly(GnIi}RRXnTGEV>^=-lZ? zLz;XlM^NIiR_#si-=)Q1gq1t=$igZlN(*x71@jWiz5Hj>nal@oIR4%GS`zKzR}7DB zT0jj!J}MidMrejqh66^bKA{C_I44au)U6d4lr_kO#y?B>_MRHbxHVK`wzAlj7E%Qb z-0Lc5N?5rC4Pj>R;IndSeMz8Snu7|8TAJoI-N$AZc!@5F|5|Af^ry$%<R+jL3fT+q zy_A~k5j3DoYOR)W&_I5W{{Be5;tY<fx9&ccB*Bu+MSB*?CjR3bXc4#;e{(qrov+WA z%pC4<aE4BKui4xF*uwqCZ{xUSo-!tRYff(Bi&x+~9_45RsfUB1wmurDR^{1FzHJK6 zNGbTh`z{DMq4ho&%PD#tQThGSWI_Xxp+<9NBaINb8<TL@jxH}Lf|gwhvG`0zdPjH# z#;*<Wws8|GQS4rrUh{w_VOKi7vvD=e0X#3o*~&^<%YgAv0`z+dey0tpxW(bsO0Uo@ z?`~vMsQ?mTLa_swwvX=8bo7xk)ux*BKdE3jQq{7hqV|j)h9umhHK1AKVs%k>@xt|0 zyw)6U74s(YsRDa_oc~CScV@S6TfpKrzKKpAa8^991ra~W{lT>SZU?_bY(%DnEK8)B zUFO!eM+`v~pXg!#mNa_T@P8F^-|uX&Z6Cn3b`jKU5w%Afs&-Lo#ZD<=6jfV=meh_} zt2J8WHf!(OsJ*FO+8|~`N!3hKGiI#E)A#)!o<HC^j`Nr6I*#+a&hIDdIGw1uj8xO4 z4|q+#uoqBbeg92t>QUX->RewhdP=&32U9B9ALdsEiuaLcI++UHD7v2Z(h@@U181kp zq(YpY|MlCg^V2}H9FvzGQU@(AePal1M()p3!-d-6F70bPpC%h}d6$6W6gy3kF+YJC z_c9$5Sh!N?xYQuHfWY*}E?05!pEN&3g30x0uL7YYn!yPuiy|`ogr&Ufr&1nb$yGFq z`yB8JrORH?nE&8%g^Q+nc!7)*&EM{x^+jA^b>pRG(elYZsgQnl65Cq{&7*U_%k!nn zW7VRBZAY70Jj)31&dGpJBG%ddjBB;>Wtwm@+2IBLYJnyYuJv`5dJ8lrgjjdIU2hCR zgr3<d3yP4Mwb8Q_3%3`P@S|0*&AAvjK345V*k)v3-(rYr_nN>=9c-wszm-l7sr2Ym ze^c=sk*Y<?2skURE&uOJ2l!?edbq^T#ai5mayENGKj*7lJOF%tPA~Va%R|JR-!}OB zJ><m*Kh4ul%tk_Uv)2lFn0SfIs?lN1qM3oq6K-dZ623nGZ!B+XRgcKDrcZ1(@O8Wg z06n0!d@r`l6|NNBwt<WRr=*>BZf5znaCD}GS^s7&VaGq^sEJY{7`{jrq#TiJNx?aZ zD16JS7);_lQavmCb(FlH%2fRLyEV#cznaIL#zXg`;o7X^B~kLXWJvvPmWD$7?-Rcw zw~DNIIT%#ao~xPnEtoM07~FI+EO{o$Xm2+gT4Nlo#xs<(sT&T%TqIwZ7}R;;+LyoP zzH@@3*9{4-2F*QML!J(zf^`25)`c<9%lgk(w<H_o>4-12#`ctl#oymme-df5Y^oQp zMcY52JjIfvvJ-Q8*t~ps9(pVI?AH02OH2EhZ+_O4m;(+ZRVw{SUhXhm5rg?McG+-w zd~yi!TCTG8e?_ra+(uh4;o#UKm3tPdha`MFz}L`%iKSz&J|tW$^X^^ZabD-mmyKM& z@xc-f+%d@SI<8YOZd!A6Z;9%Vpo_q5pH&`7JG-Y7fJ%Ozj<vV!MP-&G5Y2J(N=u7< zg)tioqdQl7$aedowUTsdt5Ez~3@Z^6vAIo9N=gKt!<RWENbu~>sG+<j7Fhd5b|)an zu*s7U@2cdTYA8tEb^Ejf(s(#GpH8unmE2XwVpgPS<6x|5r!@B*uK|H>dfGm(ZVz?} zkBWXrbav73Rksa3-E8EnPkI!7uHp@YJN6vEH+Z;rS6Z!Gk(AV3<7@X|iFdKJK7(WH zoXh|IjHaqV`4bsGWnZ+l=0XIt4N(1jtVZ>W$Z-!u#S7cv;oMiA((DlISk1@#C6z>e zJ2h|(xryunnk7|OoTGl)A@#205^W(o>Q7-Ai<sr-r-;x{xZQ@4KnO$_5+HYOcIe0U zkFKX*_XH;L;uGog(~=6`A13|U!Pk%nxjZrhDw(VgR|%A?cf(UKa%0od5`myMdH2>- zLN3f6YazAF(Cpb=6=m5T5RNA|*G#7)f9R`w=dn_>D<~s9j^3=%DGEv4@^h%6&XMta z1wYy<(YV|#wJ@6c-dmtfO@~8@vTL2Jt4f1Ur+DX<&`>+TMh%hCOWpEi6&FK@d~1OV z7x$pf;;E=5=EZK#!h*uZa@s*p&WhS&ue&4N$S6!z&^%FRQ6*Ct-Hh-BPR;?qV+5C6 zXl<Gk{NAsiU+*V<1>?Re>qXBAnvaQ$mAOq<oxTI+0_>);aycv^BP&ey>zD>^#{jwD z2;f2bHFkre{M=sPBs#NR?ER-Fw29og!+4JR$_l|c4x6P3w|c8X`w@Do!8oXQ!Hthp z!#O2Cq#U43<j#ohiB#MNG`G1oX9q;IOK?X0EfW}bRj~5Zb?UuD3Ev+Da7&ek+?$*0 zwiQ}#?_Uqo@`RpNskR6Ofl?2Jo{lp2Mi^$97D8B6`R_XWnh=&gD`SqVUe|oF{qhxP zFIm#Dz2gfm#VKY=h??&*okh?3h$i<y8o2D9Z*Z36&Hx64)6^qfjn5Tqt}FkUY463_ zJEz%1NR!y{WRV>j<5(J`9<!>d#Y5F-x*J+IDH1-kIBZKwe)TCU6#O~EM8rZfidF!X ziz{pi({77NlLJ<ACb5>{c0$^0JW62!4`l{S#RD`N&B4>er-9s3$^mPcEKfZ;79zxT zWnvQnFPak5LhYaY(`6QXCdgmJG!F-W#=`hL2$60!+{5cBNTI=DW_xz!yA0()WXJ!2 z35%T_ZgK|-A1rt$D%ZApwa&8xq#@<W>j9NT#v?QOl-_ON($YXhv#s%8{xS&Lq3RjX z$KTSVK?f_X?r+cPu8m#JK7BEWhNhL;5b3jE(H>gP-gw=1MeCi(wn>Zym$82GzZj6L z$oLyC73Rtu@OW_93PXt?rq~jvV+a#7kZo#Av@_VfncM*d4bkD@Th>OCO)fGu<mL#z z&OJ`5J}wnni3h#UOwrEot`g<$KdJiWSIM3o$50jG4>B-9og>fv3sGIm7BuGav#unR z{Hw^G9}pSpX;%_=jx385r=M*`?O&&5DP}qNZpKR)gc$Y;mZ`Usj7mX0F2qA^PEiih z9eorDX=mo^o_smVjEA0M;Q#9}{sJ=hL#JH>J8g6SdNX#z2Mb@X&huPB1%G=HyjfV& z)|FRN=;ky0SFH)8<)6;z<8*Mh^nRBrc2HndR#Q5XwWg&YcL0aD6HQ}pn==HI0yt3b z9mtg0oLWp>lCi$5?h7FU#&={D;pK(IXG9+lYq#-+g#q<RFdlekbJ>JQX7HxTn9vgG zV<t3EacVMYrDp`yp7csH*M^#`73eekEaIb*P3lf5@C<r&GFZ{L(wgp+o$TLy4Pq6f z+4?!GT&^v>vL?QmA#DJ?;=ai&;uFzflo(c@BFb@Ih%(PkQDiF&srua;h5yLDsgsX# zX!wRMP{sO+-ZWD#=DzCO9y%sYAR<d68hCC9AoPJF*y|lOUyt##DIdZQ6V=dVq+%<^ z(W%{5Z>xKj9=g`Fy7HFEIT00nWz*QbyS7LTmyqJAOydp33ckAMU+#e3(MRj=JopGQ zQW}Umr)sopTu%%&6;6SR!pobjrv~rWGMNbDe<3rO%gz1tWAv(Qy>m>Y<QPWH3>Eh^ zwhLuGKX${>VBH8Hmny$eAW>Wuo0s#*|8><1=H%gqD5?z$R|n%Es}}+zMNnaDhdZJT z-?-vf^Br*+zSK8;A`)Tj^OO;a*ni*9oz@RKcU6c<>q$L}&YU^EMp2^|*^P3u99k0+ zSPf${i50V0YA`O9J4&XdE?=4nhHPl9@#ZJ&;q4x9iN5J!AZMSNFhv`R?iYbKtR*FI zvZ+WyJs(f81vMLm<h5K`*lZgG1e53v6Vta4un{=pbekAV38HCNgXm=W$?djy4klvL zPadL&0NVZEuFbCsrV(U0X8`K8Q;)tNzG%2+@~6O`|51?C)LRCV$&-P<lLXb%WYM2u z5B8z=DU0Jq=Nr%=G5lpO@yE2eA9&R`_pJS4bhopI;yEZX?rp&UG+jP2Jfr}g0Aq=M zH4;S(SyJ)#YTQ<a<~pUgDRch^?83v~{N36lW-tY!h=YuA*h$n}yr%)vDB?LOztu_v z^qp1;teo}+j@*`@PGqC|sS#%5C@tXK=A$9zjGktQS6cDTV<@_@@}6f;19~cq4Ii&y zH(>6p2Y-Ct5Zz`;Ieb<gzSX`X@Fjw~UNtl;LBK;VTf64!f>wEN2`U@fUVI_%FU?!z zQ8Fp@c{DoNUIfb-fYPV(5g!<R@Fagk<$q^H@J2IL>|6Z;k@pEUQGxWzQ=EMeo#H4B zeNLHYgB_e{eqp|GNXe4>)_QjDcu<DE?lSqyTm@rf)lbg=_KdyGtXlE6I}%}@snHc2 z34+_%y^?Px)wx9|aMuwxj(7PS&$grVd-`d0m?m9GAQJ|eQ5#kDon_n0vhLRoOj3$= zpYRaaoFd}&ojnBDDQ|rv=~)Z&9B|HlDijrA;S61`6(WG33Bp`KSq(f6^nX@wm2%D` zo*&_|xHoYlK_AVc^cb65`^Ts0rVMj1<Q3yQT5<D~@!R%;+1X<-GQ$)Lj>*pPmW!C~ zaYyBM<kW0SAvRr?J%$%u-!WpN?r&}To0V?8K%zkZ9c+Mff}{NTHFaaz_x%Y#9}@pk zg=A5Bvf*n|6w0g*Ydq_vUA=w=PalnH4l(H<xCfGUYp^Lfp%U6Csy?>d&)SnOL%t6N zQbiiN7vkkToa6@F?{ik)Tf{en2e@~+e?x+}qGyFH7gH5a0a8dxmBmU+$Nj6f?k~!< zbfX7*{b~gB|36&+Ln`a94YtYtzpSMLbbLw4N%q7fhCCm>SMguLP*=-Hvs(Rm#D4%z CJ2vnD literal 0 HcmV?d00001 diff --git a/Facerecognition_S2_database.md b/Facerecognition_S2_database.md index 81ecfcc..46c64d2 100644 --- a/Facerecognition_S2_database.md +++ b/Facerecognition_S2_database.md @@ -4,3 +4,6 @@ Tout est dit dans le titre ! Appliquez la méthodologie vue jusqu'alors pour developper cette fonctionnalité. Il faudra nous rendre un document avec votre découpage en étapes. +Petite précision. Ici nous n'attendons pas une base de données de type SQL. Il faut reflechir à comment nommer et structurer vos fichiers sur disque pour pouvoir assicier une image à la personne qu'elle représente au moment de l'apprentissage. + + diff --git a/Facerecognition_S4_rasp.md b/Facerecognition_S4_rasp.md new file mode 100644 index 0000000..b88721a --- /dev/null +++ b/Facerecognition_S4_rasp.md @@ -0,0 +1,36 @@ +# Fonctionnalité 6 : Un Raspberry Pi en ordre de marche pour la reconnaissance visuelle + +A ce stade de votre projet vous devriez avoir : + + + Pris en main votre Raspberry + + Réaliser une chaîne de traitement d'images à l'aide d'une bibliothèque de vision par ordinateur et d'apprentissage. + + Construit une petite base *structurée* de visage + + + L'objectif ici est de mettre tout cela en marche ensemble. + + + ## Etape 1 : Reconnaissance de visages sur Raspberry Pi + + +Vous allez à nouveau suivre ici un tutorial d'A. Rosenbrock qui est [ici](https://www.pyimagesearch.com/2018/06/25/raspberry-pi-face-recognition/). + +Pour toutes les applications autour de la vision par ordinateur à base d'OPENCV, le site [https://www.pyimagesearch.com](https://www.pyimagesearch.com) est très intéressant. + +Nous vous avons fait utiliser des briques existantes et si vous voulez en savoir plus sur comment fonctionne ces briques et notamment les briques qui utilise de l'apprentissage profond, il y a de très bons cours en ligne comme : + + + Le cours de Stanford [ici](http://cs231n.stanford.edu/) + + Les activités du site [Fast.ai](https://www.fast.ai/) + + + +Et vous aurez bien entendu un certain nombre de cours dans votre cursus qui vous permettront de comprendre les fondements et de les appliquer de ces disciplines dans le cursus de CentraleSupélec. + + +Si vous avez fini le tutoriel, vous pouvez maintenant passer à la [**Fonctionnalité 7** : Effectuer une reconnaissance sur une image de votre base et afficher le résultat du traitement.](./Facerecognition_S4_traitement_pi.md) + + + + + + \ No newline at end of file diff --git a/Facerecognition_S4_traitement_pi.md b/Facerecognition_S4_traitement_pi.md new file mode 100644 index 0000000..6841657 --- /dev/null +++ b/Facerecognition_S4_traitement_pi.md @@ -0,0 +1,6 @@ +# Fonctionnalité 7 : Effectuer une reconnaissance sur une image de votre base et afficher le résultat du traitement + + +Nous sommes ici très proche d'avoir un premier porduit. L'objectif de cette fonctionnalité est d'intégrer l'ensemble des briques réalisées précedemment pour faire tourner un module de reconnaissance de visages sur un Raspberry pi et le tester et l'evaluer sur votre base et donc avec les élèves de la classe. + +**A vous de jouez !** \ No newline at end of file diff --git a/TemplateProject_Raspberry.md b/TemplateProject_Raspberry.md index 7b21b25..65f2bfd 100644 --- a/TemplateProject_Raspberry.md +++ b/TemplateProject_Raspberry.md @@ -70,8 +70,8 @@ Ce concept de MVP a été introduit par Eric Ries, l'auteur de [The Lean Startup ### **Objectif 2 : (MVP) Reconnaitre un visage avec un Raspberry Pi** (JOUR 3) + **Sprint 4 : Prise en main de votre Raspberry Pi** - + [**Fonctionnalité 6** : Un Raspberry Pi en ordre de marche pour la reconnaissance visualle](./Facerecognition_S1_displayimage.md) - + [**Fonctionnalité 2** : Effectuer un traitement sur une image et afficher le résultat du traitement.](./Facerecognition_S1_traitement.md) + + [**Fonctionnalité 6** : Un Raspberry Pi en ordre de marche pour la reconnaissance visuelle](./Facerecognition_S4_rasp.md) + + [**Fonctionnalité 7** : Effectuer une reconnaissance sur une image de votre base et afficher le résultat du traitement.](./Facerecognition_S4_traitement_pi.md) ### **Objectif 3 : Ajouter des utilisateurs : reconnaître les visages du groupe projet** (JOUR 4) **<span style='color:red'>(A venir)</span>** -- GitLab